<?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>58408</bug_id>
          
          <creation_ts>2011-04-12 18:35:23 -0700</creation_ts>
          <short_desc>[chromium] Implement CCLayerTreeHost and CCLayerTreeHostImpl portions of threaded compositor</short_desc>
          <delta_ts>2022-02-27 23:43:11 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</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>58799</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nat Duca">nduca</reporter>
          <assigned_to name="Nat Duca">nduca</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>levin</cc>
    
    <cc>nduca</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>384601</commentid>
    <comment_count>0</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-04-12 18:35:23 -0700</bug_when>
    <thetext>[chromium] Add CCView as threaded base class for LayerRendererChromium</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>384604</commentid>
    <comment_count>1</comment_count>
      <attachid>89324</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-04-12 18:38:02 -0700</bug_when>
    <thetext>Created attachment 89324
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>384609</commentid>
    <comment_count>2</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-04-12 18:40:31 -0700</bug_when>
    <thetext>Here&apos;s a new draft of the CCView&lt;-&gt;CCViewImpl communication path. Things aren&apos;t 100% complete but I think this is a good checkpoint to see if I&apos;m heading in the right direction.

As compared to the previous incarnations of this, this patch draws heavily on how things like FileStreamProxy work. I like it lots more. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>384612</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-12 18:47:54 -0700</bug_when>
    <thetext>Attachment 89324 did not build on chromium:
Build output: http://queues.webkit.org/results/8403075</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385004</commentid>
    <comment_count>4</comment_count>
      <attachid>89324</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-04-13 10:57:46 -0700</bug_when>
    <thetext>Comment on attachment 89324
Patch

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

I looked it over. I didn&apos;t see any huge issues. I noted a few nits (just because they stand out when I&apos;m trying to get an idea of what the code is trying to do) and one issue that seems non-ideal (the sync call to the worker from the main thread).

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:1186
&gt; +    LayerRendererChromiumImpl(CCViewImplClient* client, LayerRendererChromium* lrc)

avoid abbreviations: lrc.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCViewImplProxy.cpp:43
&gt; +// static

We typically don&apos;t put in this comment in WebKit land.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCViewImplProxy.cpp:139
&gt; +    completion.wait();

Doing a sync wait on the main thread is bad. How can this be avoided?

In fact since the cc thread may wait for the main thread to complete some actions at times, can&apos;t this deadlock?

&gt; Source/WebKit/chromium/tests/CCViewTest.cpp:135
&gt; +#define CC_VIEW_TEST(testCaseName) \

Seems like a minimal macro with not too much value. I&apos;d just avoid having it.

&gt; Source/WebKit/chromium/tests/CCViewTest.cpp:141
&gt; +///////////////////////////////////////////////////////////////////////////

This type of boundary isn&apos;t done in WebKit.

&gt; Source/WebKit/chromium/tests/CCViewTest.cpp:149
&gt; +        return adoptRef((GraphicsContext3D*)0);

avoid c style casts

I suspect this would work as well:
  return adoptRef&lt;GraphicsContext3D&gt;(0);

&gt; Source/WebKit/chromium/tests/CCViewTest.cpp:184
&gt; +        return adoptPtr(new MockViewImpl(client, m_test));

Typical style is to make the constructor of MockViewImpl private and only expose a static create method.

&gt; Source/WebKit/chromium/tests/CCViewTest.cpp:226
&gt; +            onEndTest((void*)this);

avoid c style casts. (Use static_casts, etc.)

&gt; Source/WebKit/chromium/tests/CCViewTest.cpp:232
&gt; +// Shortlived views shoudn&apos;t die

typo: shoud
and add &quot;.&quot;

&gt; Source/WebKit/chromium/tests/CCViewTest.cpp:265
&gt; +// Shortlived views shoudn&apos;t die with a redraw in flight

typo: shoudn&apos;t
and add &quot;.&quot;

&gt; Source/WebKit/chromium/tests/CCViewTest.cpp:268
&gt; +    CCViewTestShortlivedView3() {}

space inbetween {}

&gt; Source/WebKit/chromium/tests/CCViewTest.cpp:284
&gt; +// draw with frame 0

add &quot;.&quot;

&gt; Source/WebKit/chromium/tests/CCViewTest.cpp:288
&gt; +            : m_numCommits(0)

odd indent use 4 spaces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385220</commentid>
    <comment_count>5</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-04-13 14:20:01 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Doing a sync wait on the main thread is bad. How can this be avoided?
&gt; In fact since the cc thread may wait for the main thread to complete some actions at times, can&apos;t this deadlock?

In fact, there is a deadlock in my current implementation. Thanks!

We do have one unavoidable sync call, performCommitOnCCThread, which originates from the impl thread via beginFrameAndCommit. This synchronizes the CCViewImpl with the CCView in a locked fashion. We opted to do this over, say, a double-buffering scheme or sending individual change messages across because:
1. The state on each side CCViewImpl is pretty large, so that steered us away from a double-buffering scheme
2. There&apos;s a high ratio between amount of mutation and the actual amount of data that actually needs committing. So, pushing each mutation event across as a message would lead to far too many messages crossing between threads.

In addition to this performCommit call, we also have a temporary drawLayersOnMainThread sync call from C-&gt;M. Long term, the compositor will never block on the main thread.

In the near term, while we have the drawLayersOnMainThread present, I will add a patch to my code that inhibits drawing as long as anyone has a beginFrameAndCommit in-flight.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385590</commentid>
    <comment_count>6</comment_count>
      <attachid>89548</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-04-14 01:53:18 -0700</bug_when>
    <thetext>Created attachment 89548
Deadlock and test fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385592</commentid>
    <comment_count>7</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-04-14 01:57:48 -0700</bug_when>
    <thetext>The latest patch addresses the concerns around deadlock as well as cleans up tests.

However, a key issue remains: tasks created via createTask will hold references to ThreadSafeRefCounted objects that are passed as ARGUMENTS to createTask. However, if the actual target object of the task, e.g. createTask(target, &amp;Target::Method) is ThreadSafeRefCounted, the Task* does not hold a reference. This causes the Shortlived unit tests to fail.

I see two options:
1. Change my threading model so that, like the FileStreamProxy, we ensure that the CCthread-side class never outlives the main-thread  class (eew)
2. Change the CCThreadTask system to hold a reference on the target instance [when possible].

David, any thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385603</commentid>
    <comment_count>8</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-04-14 02:28:48 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; The latest patch addresses the concerns around deadlock as well as cleans up tests.
&gt; 
&gt; However, a key issue remains: tasks created via createTask will hold references to ThreadSafeRefCounted objects that are passed as ARGUMENTS to createTask. However, if the actual target object of the task, e.g. createTask(target, &amp;Target::Method) is ThreadSafeRefCounted, the Task* does not hold a reference. This causes the Shortlived unit tests to fail.
&gt; 
&gt; I see two options:
&gt; 1. Change my threading model so that, like the FileStreamProxy, we ensure that the CCthread-side class never outlives the main-thread  class (eew)
&gt; 2. Change the CCThreadTask system to hold a reference on the target instance [when possible].
&gt; 
&gt; David, any thoughts?

Seems like 2 is the much better option.  This is how chrome&apos;s PostTask/PostDelayedTask work.  Where&apos;s the implementation of createTask and where are the argument references being held?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385754</commentid>
    <comment_count>9</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-04-14 07:45:40 -0700</bug_when>
    <thetext>(In reply to comment #7)

&gt; I see two options:
&gt; 1. Change my threading model so that, like the FileStreamProxy, we ensure that the CCthread-side class never outlives the main-thread  class (eew)

We have tended toward option 1 but that makes things complicated with managing lifetime. On the other hand...

&gt; 2. Change the CCThreadTask system to hold a reference on the target instance [when possible].

The key problem with making things ThreadSafeRefCounted is that they may not hold any objects which are RefCounted. In practice this is pretty tricky. (Considering that many fundamental things like Strings are essentially RefCounted.)

You have to create an object that has almost nothing it in and make sure that in the future no one adds anything to it, so that is challenging.

Is your target really that simple?

If not, you can create an object which is basically a weak ptr to your real object and only use the weak pointer on CCThread and then feel free to make the proxy object ThreadSafeRefCount and ref count the target, which should be a pretty easy modification. fwiw, this is similar to the approach that I&apos;m thinking about making generic in order to make this simpler for everyone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385756</commentid>
    <comment_count>10</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-04-14 07:50:42 -0700</bug_when>
    <thetext>When you have a moment, read over http://www.webkit.org/coding/RefPtr.html to help inform your usage of RefPtr/PassRefPtr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>386046</commentid>
    <comment_count>11</comment_count>
      <attachid>89653</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-04-14 14:40:08 -0700</bug_when>
    <thetext>Created attachment 89653
Shutdown impl before proxy dies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>386174</commentid>
    <comment_count>12</comment_count>
      <attachid>89653</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-04-14 16:41:29 -0700</bug_when>
    <thetext>Comment on attachment 89653
Shutdown impl before proxy dies.

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

Made a diagram of the overall object graph: http://www.diagrammr.com/edit?key=ddiSFcIeRj4

&gt; Source/WebCore/platform/graphics/chromium/cc/CCView.h:50
&gt; +// CCView (equivalent to LayerTreeHost in CA)

Will this actually host the layer tree like LayerTreeHost does?  I think it should (not now, but down the road).

&gt; Source/WebCore/platform/graphics/chromium/cc/CCViewImpl.h:34
&gt; +// Provides scheduling infrasturcture for a CCViewImpl

typo: infrastructure

general nit: WebKit style typically has periods at the end of comments like this.  It doesn&apos;t have to be a complete sentence but it should look kinda like one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>386274</commentid>
    <comment_count>13</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-04-14 18:34:14 -0700</bug_when>
    <thetext>Done. Also, I renamed View uses to LayerTreeHost.

I&apos;ll hold on uploading a patch assuming you&apos;ve got more feedback coming.

(In reply to comment #12)
&gt; (From update of attachment 89653 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=89653&amp;action=review
&gt; 
&gt; Made a diagram of the overall object graph: http://www.diagrammr.com/edit?key=ddiSFcIeRj4
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCView.h:50
&gt; &gt; +// CCView (equivalent to LayerTreeHost in CA)
&gt; 
&gt; Will this actually host the layer tree like LayerTreeHost does?  I think it should (not now, but down the road).
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCViewImpl.h:34
&gt; &gt; +// Provides scheduling infrasturcture for a CCViewImpl
&gt; 
&gt; typo: infrastructure
&gt; 
&gt; general nit: WebKit style typically has periods at the end of comments like this.  It doesn&apos;t have to be a complete sentence but it should look kinda like one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>386315</commentid>
    <comment_count>14</comment_count>
      <attachid>89653</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-04-14 20:06:57 -0700</bug_when>
    <thetext>Comment on attachment 89653
Shutdown impl before proxy dies.

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

Overall I think this is looking awesome.  I&apos;ve made a bunch more whiteboard diagrams that I hope to electronicize to diagram out the interactions, but this is shaping up pretty nicely IMO.

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:281
&gt; +    updateLayers(*m_computedRenderSurfaceLayerList.get());

.get() unnecessary. operator* on WTF smart pointers does what you want here

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:286
&gt; +    ASSERT(m_computedRenderSurfaceLayerList.get());

.get() unnecessary

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:312
&gt; +    drawLayers(*m_computedRenderSurfaceLayerList.get());

.get() unnecessary

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:1181
&gt; +    CCView::commit(impl);
&gt; +    impl-&gt;setSourceFrameNumber(m_headsUpDisplay-&gt;currentFrameNumber());

This is the only LayerRendererChromium function called on the CC thread so I think it deserves a threading ASSERT() and a comment explaining the synchronization going on (when this is called the main thread is blocked).

CCView::commit() also calls impl-&gt;setSourceFrameNumber

&gt; Source/WebCore/platform/graphics/chromium/cc/CCView.h:47
&gt; +class CCViewImplFactory {
&gt; +public:
&gt; +    virtual PassOwnPtr&lt;CCViewImpl&gt; createImplOnCCThread(CCViewImplClient*) = 0;

we talked about this some in person but i think the CCViewImplFactory thing is a bit heavyweight for what we really want, which is a way to construct different types of CCViewImpls on the compositor thread.

for the mocking use case, what about providing a MockCCViewImplProxy that constructs a MockCCViewImpl when it handles a createImplOnCCThread task?  CCViewImplProxy::createImplOnCCThread would have to thunk to a virtual function to actually construct the CCViewImpl, but i think that&apos;s a lot easier to reason about then having to worry about the lifetime of a factory object, etc

&gt; Source/WebCore/platform/graphics/chromium/cc/CCView.h:60
&gt; +    virtual void afterCommit();

there are no overrides of this function, so no need to be virtual (there are overrides of CCViewImpl::afterCommit())

&gt; Source/WebCore/platform/graphics/chromium/cc/CCView.h:61
&gt; +    virtual void animateAndLayout(double frameBeginTime);

there aren&apos;t any overrides of this function either (the only overrides of animateAndLayout() are of CCViewClient::animateAndLayout())

&gt; Source/WebCore/platform/graphics/chromium/cc/CCView.h:67
&gt; +    virtual void updateLayers() { }

rather than have an empty impl i think this should be pure virtual.  not much point in having a CCView implementation without an updateLayer()s implementatation!

&gt; Source/WebCore/platform/graphics/chromium/cc/CCViewImplProxy.cpp:71
&gt; +    ASSERT(!m_viewImpl.get()); // viewClosedOnCCThread() should have already been called

here and many other places call .get() when it&apos;s unnecessary.  WTF&apos;s smart pointers have operator! overrides that return the bool you expect

&gt; Source/WebCore/platform/graphics/chromium/cc/CCViewImplProxy.cpp:138
&gt; +    TRACE_EVENT(&quot;CCViewImplProxy::requestFrameAndCommit&quot;, this, 0);
&gt; +    {
&gt; +        TRACE_EVENT(&quot;CCView::animateAndLayout&quot;, this, 0);
&gt; +        m_view-&gt;animateAndLayout(frameBeginTime);
&gt; +    }
&gt; +
&gt; +    m_commitPending = false;
&gt; +    {
&gt; +        TRACE_EVENT(&quot;CCView::updateLayers&quot;, this, 0);
&gt; +        m_view-&gt;updateLayers();
&gt; +    }

This needs to be a little more defensive - both animateAndLayout() and updateLayers() can cause compositing to turn off.  in the current compositor what we do is check if compositing is still on _after_ calling animateAndLayout() and then checking if we still have a layer tree _after_ calling updateLayers().  since the CCViewImplProxy doesn&apos;t directly have access to the layer tree i think it needs to ask its m_view if it should continue with the composite operation after calling updateLayers()

&gt; Source/WebCore/platform/graphics/chromium/cc/CCViewImplProxy.cpp:145
&gt; +    m_view-&gt;afterCommit();

it&apos;s confusing having CCView::afterCommit() and CCViewImpl::afterCommit() which do different things. i&apos;m not sure the main thread afterCommit() is super valuable - couldn&apos;t the CCViewImplProxy keep a commit count and expose that to the HUD through a getter rather than calling up to the view after each commit?  i&apos;m having some trouble picturing what we plan to do on the main thread after a commit completes other than noting that we did so

&gt; Source/WebCore/platform/graphics/chromium/cc/CCViewImplProxy.cpp:180
&gt; +    if (m_viewImpl)

i don&apos;t think it&apos;s ever valid for m_viewImpl to be NULL here unless initialization failed in some way, right?  should this be an ASSERT()?

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:1076
&gt; +        return;

we gotta fix this before we can turn the USE() on. could you file a bug and add a comment here with a big ole FIXME and a link to it?

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:2366
&gt; +    if (m_layerRenderer.get())

.get() unnecessary

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:2376
&gt; +    if (m_layerRenderer.get())

.get() unnecessary</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>386316</commentid>
    <comment_count>15</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-04-14 20:07:13 -0700</bug_when>
    <thetext>note that I only looked at the real impls, i haven&apos;t looked at the test code at all yet</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>386328</commentid>
    <comment_count>16</comment_count>
      <attachid>89653</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-04-14 20:30:35 -0700</bug_when>
    <thetext>Comment on attachment 89653
Shutdown impl before proxy dies.

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

Just a few comments.

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:265
&gt;  

Why the blank line here?

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:280
&gt; +    m_computedRenderSurfaceLayerList = adoptPtr(new LayerList());

adoptPtr(new...) outside of the a &quot;create&quot; method is a bad sign. (consider making the constructor private and only exposing a static create method.)

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:1181
&gt;&gt; +    impl-&gt;setSourceFrameNumber(m_headsUpDisplay-&gt;currentFrameNumber());
&gt; 
&gt; This is the only LayerRendererChromium function called on the CC thread so I think it deserves a threading ASSERT() and a comment explaining the synchronization going on (when this is called the main thread is blocked).
&gt; 
&gt; CCView::commit() also calls impl-&gt;setSourceFrameNumber

Agreed re the assert.  Is this something that will be cleaned up in the future? Having a class used on two threads is bad news.

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:1231
&gt; +        return adoptPtr(new LayerRendererChromiumImpl(client, m_layerRenderer));

Would ideally be a call to LayerRendererChromiumImpl::create here.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCView.cpp:56
&gt; +}

add a blank line here.

&gt; Source/WebKit/chromium/tests/CCViewTest.cpp:45
&gt; +class MockViewClient;

Not sorted correctly.

&gt; Source/WebKit/chromium/tests/CCViewTest.cpp:269
&gt; +TEST_F(CCViewTestShortlivedView1, run) { runTest(); }

This is a function would ideally be formatted like one :).

&gt; Source/WebKit/chromium/tests/CCViewTest.cpp:271
&gt; +// Shortlived views shoudn&apos;t die with a commit in flight.

typo:shoud (and elsewhere too)

&gt; Source/WebKit/chromium/tests/CCViewTest.cpp:306
&gt; +// Constantly redrawing views shouldnt die when they commit

typo: shouldnt

&gt; Source/WebKit/chromium/tests/CCViewTest.cpp:354
&gt; +        , m_numDraws(0) { }

Consider formatting like you did for the other constructors.

&gt; Source/WebKit/chromium/tests/CCViewTest.cpp:455
&gt; +    }

add blank line.

&gt; Source/WebKit/chromium/tests/CCViewTest.cpp:463
&gt; +

too many blank lines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>386330</commentid>
    <comment_count>17</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-04-14 20:33:00 -0700</bug_when>
    <thetext>I must admit that this change is so large it is hard for me to get a handle on it to understand it well and verify that all of the lifetimes work out, so my comments are more surface level due to that.

I guess you and James have talked it out in person and have a better sense of it, so I guess he will give you the final r+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388155</commentid>
    <comment_count>18</comment_count>
      <attachid>90113</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-04-18 16:25:59 -0700</bug_when>
    <thetext>Created attachment 90113
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388162</commentid>
    <comment_count>19</comment_count>
      <attachid>90116</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-04-18 16:35:13 -0700</bug_when>
    <thetext>Created attachment 90116
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388194</commentid>
    <comment_count>20</comment_count>
      <attachid>90116</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-04-18 17:55:18 -0700</bug_when>
    <thetext>Comment on attachment 90116
Patch

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

R- because I think this will make the !USE(THREADED_COMPOSITOR) code crash in ~LayerRendererChromium() and because I think some parts can be simplified.  I read the whole patch this time, though, and think it&apos;s looking really good overall.  Left lots of comments to digest.

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:-191
&gt; -    ASSERT(m_hardwareCompositing);
&gt; -

dropping this ASSERT() from updateLayers() makes sense, but please add it back to drawLayers()

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:213
&gt; +    ASSERT(m_computedRenderSurfaceLayerList);

should we clear this vector out at the end of drawLayers() or its caller? doesn&apos;t make much sense to leave a vector around between frames if we always throw it away on the next frame

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:1096
&gt; +class LayerRendererChromiumCommitter : public CCLayerTreeHostCommitter {

why does this exist?  i don&apos;t think the eventual implementation of CCLayerTreeHostCommitter will have anything LayerRendererChromium-specific in it, so i think we should just put the commit logic inside CCLayerTreeHostCommitter itself and not subclass it.

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:1124
&gt; +class LayerRendererChromiumImpl : public CCLayerTreeHostImpl {

it&apos;s very strange to have this class in LayerRendererChromium.cpp.  this should go into its own file with its own header

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:1166
&gt; +class LayerRendererChromiumImplProxy : public CCLayerTreeHostImplProxy {

this also deserves its own file and header

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h:149
&gt; +    explicit LayerRendererChromium(CCLayerTreeHostClient*, PassRefPtr&lt;GraphicsContext3D&gt;, PassOwnPtr&lt;TilePaintInterface&gt; contentPaint);

don&apos;t need explicit when the c&apos;tor takes 3 arguments (didn&apos;t need it with 2 either, but might as well fix it now)

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h:190
&gt; +    bool m_committing;

since this bool is just for debugging please guard the defn and uses with with #ifndef NDEBUG/#endif.  do you think it&apos;s likely that we&apos;ll accidentally make commit() reentrant?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:36
&gt; +    , m_frameNumber(0)

why does the frame number start at 0 here and at -1 on the impl?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:53
&gt; +#if USE(THREADED_COMPOSITING)
&gt; +    m_proxy = createLayerTreeHostImplProxy();
&gt; +    m_proxy-&gt;start();
&gt; +#endif
&gt; +}
&gt; +
&gt; +CCLayerTreeHost::~CCLayerTreeHost()
&gt; +{
&gt; +    TRACE_EVENT(&quot;CCLayerTreeHost::~CCLayerTreeHost&quot;, this, 0);
&gt; +    m_proxy-&gt;stop();
&gt; +    m_proxy.clear();
&gt; +}

hmm, seems a bit inconsistent to guard the init but not the shutdown.  won&apos;t this cause a crash when creating and destroying a LayerRendererChromium without USE(THREADED_COMPOSITING) set?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.h:42
&gt; +    virtual PassRefPtr&lt;GraphicsContext3D&gt; createLayerTreeHostContext3D() = 0;

this level of indirection doesn&apos;t seem necessary or helpful.  In the non-mock codepath WebViewImpl passes a GraphicsContext3D to LayerRendererChromium::create().  In the mock case, you can just pass 0 in to LRC::create().

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:76
&gt; +    m_frameNumber += 1;

++m_frameNumber; ?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:70
&gt; +    bool m_redrawEnqueued;

m_redrawPending would be a more consistent and a bit easier to spell for simpletons like me :)

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.cpp:27
&gt; +#include &quot;CCLayerTreeHostImplProxy.h&quot;

files in the /cc/ directory in this patch are inconsistent about whether they prefix #includes with &quot;cc/&quot;.  pick a convention and stick to it (the files i&apos;ve added in cc/ include the prefix, it looks like most of the files you&apos;ve added do not).  i don&apos;t feel strongly about which convention is better but we need to be consistent.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.cpp:39
&gt; +CCThread* ccThread;

should this be an OwnPtr&lt;&gt;?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.cpp:49
&gt; +    numProxies += 1;

++ ?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.cpp:67
&gt; +    ASSERT(!m_layerTreeHostImpl &amp;&amp; !m_layerTreeHost);

feels a bit weird to poke at the m_layerTreeHostImpl ptr from the main thread. add a comment for whatever threading convention makes this query threadsafe

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.cpp:69
&gt; +    numProxies -= 1;

-- ?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.cpp:72
&gt; +        delete ccThread;
&gt; +        ccThread = 0;

if ccThread was an OwnPtr&lt;&gt; then this would be one line

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.cpp:102
&gt; +    ASSERT(!m_layerTreeHostImpl); // layerTreeHostClosedOnCCThread() should have already been called

feels a little dodgy to be querying this value from the main thread since it&apos;s written from the compositor thread.  are we protected here by the CCCompletionEvent&apos;s condvar?  whatever the answer is it deserves a comment

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.h:38
&gt; +class CCLayerTreeHostImplProxy : public CCLayerTreeHostImplClient {
&gt; +public:

if this isn&apos;t meant to be refcounted it should have WTF_MAKE_NONCOPYABLE() blah blah.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.h:44
&gt; +    void start(); // Must be called before using the proxy.

this is normally called init(). is there any reason that the c&apos;tor or the ::create() function for CCLayerTreeHostImplProxy can&apos;t call this for you?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.h:45
&gt; +    void stop(); // Must be called before deleting the proxy.

why can&apos;t this happen in the d&apos;tor? no virtual calls are being made in the implementation

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.h:73
&gt; +    OwnPtr&lt;CCLayerTreeHostImpl&gt; m_layerTreeHostImpl;

can you add comments for each of these members indicating which thread the data can be accessed on? i&apos;m pretty sure the answer is mainthread/mainthread/ccthread but it doesn&apos;t hurt to be sure. might even be worth suffixing the member names just to make it super clear what is going on

also, the class will pack better when more members are added if you sort by size (larger members like ptrs first, smaller members like bools later).

&gt; Source/WebKit/chromium/ChangeLog:8
&gt; +        Stress tests for CCLayerTreeHost.

there are a number of changes here other than just stress tests (the WebWidget and WebViewImpl changes). please describe those in the changelog as well

&gt; Source/WebKit/chromium/public/WebWidget.h:88
&gt; +    // In threaded compositing mode, indicates that the widget should redraw
&gt; +    // itself, for example due to window damage. The redraw will begin
&gt; +    // asynchronously.
&gt; +    virtual void scheduleComposite()  { }
&gt; +

how is this different from WebWidget::composite(false) ?

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:999
&gt;  void WebViewImpl::animate()
&gt;  {
&gt; +    doAnimate(currentTime());
&gt; +}
&gt; +
&gt; +void WebViewImpl::doAnimate(double frameBeginTime)

oh how awkward :(.  a better solution would be to have animate() always take the timestamp parameter and have the caller be responsible for providing it. even in the software case we really should have the caller provide the timestamp - i wish i had done this way first. feel free to file a cleanup bug on me to sort that out.

in the meantime, a cleaner solution to this problem is to add a default parameter value to WebViewImpl::animate(). callers who specify a timestamp have that value used, callers who don&apos;t just get currentTime()

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:1078
&gt; +        ASSERT(0);

ASSERT_NOT_REACHED();

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:1121
&gt; +#if USE(THREADED_COMPOSITING)
&gt; +    return; // FIXME: when the RenderWidget is updated, switch to ASSERT_NOT_REACHED.
&gt; +#else

why does this early out? if finish==false, then this should just do m_layerRenderer-&gt;setNeedsRedraw(). if finish==true then we definitely need an ASSERT_NOT_REACHED just like we do in ::paint()

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:2492
&gt; +#if USE(THREADED_COMPOSITING)
&gt; +    updateLayerRendererSettings();
&gt; +#endif

why are we setting these bits only in the USE(THREADED_COMPOSITOR) case?

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:2531
&gt;  void WebViewImpl::updateLayerRendererViewport()
&gt;  {
&gt; -    ASSERT(m_layerRenderer);
&gt; +    if (!m_layerRenderer)
&gt; +        return;

why does this change?

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp:314
&gt; +// Shortlived layerTreeHosts shoudn&apos;t die with a commit in flight.

typo: shouldn&apos;t

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp:334
&gt; +// Shortlived layerTreeHosts shoudn&apos;t die with a redraw in flight.

typo: shouldn&apos;t

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp:372
&gt; +        m_numCompleteCommits += 1;

++

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

weird # of newlines

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp:419
&gt; +        if (!layerTreeHostImpl-&gt;sourceFrameNumber()) // frame 0

comment isn&apos;t really that helpful, i&apos;d remove

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp:445
&gt; +// first commited frame draws should lead to another commit.

typo: committed

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp:461
&gt; +        if (!layerTreeHostImpl-&gt;sourceFrameNumber()) // frame 0

comment unnecessary

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

weird # of newlines</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388692</commentid>
    <comment_count>21</comment_count>
      <attachid>90116</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-04-19 12:19:17 -0700</bug_when>
    <thetext>Comment on attachment 90116
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:213
&gt;&gt; +    ASSERT(m_computedRenderSurfaceLayerList);
&gt; 
&gt; should we clear this vector out at the end of drawLayers() or its caller? doesn&apos;t make much sense to leave a vector around between frames if we always throw it away on the next frame

There are two &quot;frames&quot; here -- main thread frames and compositor frames.

This list is persisted so we can have N drawLayers for a single update call. It is wrong to clear it, imo.

Hopefully this will be clearer when we get drawing moved to the impl.

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:1124
&gt;&gt; +class LayerRendererChromiumImpl : public CCLayerTreeHostImpl {
&gt; 
&gt; it&apos;s very strange to have this class in LayerRendererChromium.cpp.  this should go into its own file with its own header

Yes, but I suggest we leave it here. LayerRendererChromiumImpl is a temporary class while we fix threading.

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:1166
&gt;&gt; +class LayerRendererChromiumImplProxy : public CCLayerTreeHostImplProxy {
&gt; 
&gt; this also deserves its own file and header

Disagree. This is temporary functionality.

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h:190
&gt;&gt; +    bool m_committing;
&gt; 
&gt; since this bool is just for debugging please guard the defn and uses with with #ifndef NDEBUG/#endif.  do you think it&apos;s likely that we&apos;ll accidentally make commit() reentrant?

HHGTWKJVHEFH. You and asked me to add guards so could protect against WebKit being accessed during commit.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:36
&gt;&gt; +    , m_frameNumber(0)
&gt; 
&gt; why does the frame number start at 0 here and at -1 on the impl?

Because the impl has not got a frame yet.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.h:42

&gt; 
&gt; this level of indirection doesn&apos;t seem necessary or helpful.  In the non-mock codepath WebViewImpl passes a GraphicsContext3D to LayerRendererChromium::create().  In the mock case, you can just pass 0 in to LRC::create().

This is for lost context. We call this in LayerRendererChromium::create becausee we have to. But when we need to *Recreate* the context after its been lost, we will call this.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.cpp:39
&gt;&gt; +CCThread* ccThread;
&gt; 
&gt; should this be an OwnPtr&lt;&gt;?

Not sure. Given that this is global scope, I felt it was better to be explicit about cleanup than have a magical ~ that ran after main()

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.cpp:72
&gt;&gt; +        ccThread = 0;
&gt; 
&gt; if ccThread was an OwnPtr&lt;&gt; then this would be one line

Are you really comfortable with OwnPtrs with global scope?

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.h:44
&gt;&gt; +    void start(); // Must be called before using the proxy.
&gt; 
&gt; this is normally called init(). is there any reason that the c&apos;tor or the ::create() function for CCLayerTreeHostImplProxy can&apos;t call this for you?

WRt the c&apos;tor, we need to make virtual calls to start the proxy. Cant&apos; do that in the proxy.

Start vs init: we have a stop. Start seems a better match than stop. I can change it if you feel strongly. Also, the FileStreamProxy/FileThread seemed to use a start/stop convention

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.h:45
&gt;&gt; +    void stop(); // Must be called before deleting the proxy.
&gt; 
&gt; why can&apos;t this happen in the d&apos;tor? no virtual calls are being made in the implementation

Same comment wrt vtbl

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.h:73
&gt;&gt; +    OwnPtr&lt;CCLayerTreeHostImpl&gt; m_layerTreeHostImpl;
&gt; 
&gt; can you add comments for each of these members indicating which thread the data can be accessed on? i&apos;m pretty sure the answer is mainthread/mainthread/ccthread but it doesn&apos;t hurt to be sure. might even be worth suffixing the member names just to make it super clear what is going on
&gt; 
&gt; also, the class will pack better when more members are added if you sort by size (larger members like ptrs first, smaller members like bools later).

I disagree with both points.

We shouldn&apos;t be adding more members to this class. This code concerns the two phase commit process. Nothing else will go in here. The only time we&apos;ll add stuff here is if we change the commit algorithm.

It isn&apos;t easy to name variables here. The impl and host are already obvious by the rule that &quot;impl lives on ccthread.&quot;

Then, for things like commit, the thing is that it really means &quot;m_commitPendingOnMainThread.&quot; But its access policy is on CCThread. And frankly, m_commitPendingOnMainThread_AccessONCCThread doesnt really do much for me.

If you look at FileStreamProxy, it follows the convention here.

You&apos;ll note we&apos;re using a convention on functions. I think this is sufficient.

&gt;&gt; Source/WebKit/chromium/public/WebWidget.h:88
&gt;&gt; +
&gt; 
&gt; how is this different from WebWidget::composite(false) ?

Composite is the single-threaded flow to draw the screen, immediately. It should never be called in threaded mode.

ScheduleComposite will schedule a screen redraw eventually, but no commit. This is for the case where a window receives damage.

&gt;&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:1121

&gt; 
&gt; why does this early out? if finish==false, then this should just do m_layerRenderer-&gt;setNeedsRedraw(). if finish==true then we definitely need an ASSERT_NOT_REACHED just like we do in ::paint()

Ugh. You realize this all goes away the second I can make render_widget aware of the threaded compositing mode?

&gt;&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:2492
&gt;&gt; +#endif
&gt; 
&gt; why are we setting these bits only in the USE(THREADED_COMPOSITOR) case?

Because in the regular case, we update the settings before every draw.

&gt;&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:2531
&gt;&gt; +        return;
&gt; 
&gt; why does this change?

Because now we may call it without a layer renderer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388723</commentid>
    <comment_count>22</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-04-19 12:56:03 -0700</bug_when>
    <thetext>Also, sorry to sound tense. All great feedback, just mentally exhausted: 4 major rewrites on this so far, spanning 16 patches (+ the wtf/NonThreadSafe diversion).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388737</commentid>
    <comment_count>23</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-04-19 13:17:47 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; Also, sorry to sound tense. All great feedback, just mentally exhausted: 4 major rewrites on this so far, spanning 16 patches (+ the wtf/NonThreadSafe diversion).

No worries.  Large patches tend to have a large chance of breaking things so I&apos;m trying to counteract that by being extra nit-picky.  I hope that the extra attention up front will pay off with less crazy debugging sessions later on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388805</commentid>
    <comment_count>24</comment_count>
      <attachid>90116</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-04-19 14:35:42 -0700</bug_when>
    <thetext>Comment on attachment 90116
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:213
&gt;&gt;&gt; +    ASSERT(m_computedRenderSurfaceLayerList);
&gt;&gt; 
&gt;&gt; should we clear this vector out at the end of drawLayers() or its caller? doesn&apos;t make much sense to leave a vector around between frames if we always throw it away on the next frame
&gt; 
&gt; There are two &quot;frames&quot; here -- main thread frames and compositor frames.
&gt; 
&gt; This list is persisted so we can have N drawLayers for a single update call. It is wrong to clear it, imo.
&gt; 
&gt; Hopefully this will be clearer when we get drawing moved to the impl.

gotcha

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:1124
&gt;&gt;&gt; +class LayerRendererChromiumImpl : public CCLayerTreeHostImpl {
&gt;&gt; 
&gt;&gt; it&apos;s very strange to have this class in LayerRendererChromium.cpp.  this should go into its own file with its own header
&gt; 
&gt; Yes, but I suggest we leave it here. LayerRendererChromiumImpl is a temporary class while we fix threading.

OK, but you gotta pinky swear to take it out.  we have an awful lot of &apos;temporary&apos; stuff in LayerRendererChromium.cpp

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h:190
&gt;&gt;&gt; +    bool m_committing;
&gt;&gt; 
&gt;&gt; since this bool is just for debugging please guard the defn and uses with with #ifndef NDEBUG/#endif.  do you think it&apos;s likely that we&apos;ll accidentally make commit() reentrant?
&gt; 
&gt; HHGTWKJVHEFH. You and asked me to add guards so could protect against WebKit being accessed during commit.

Guards are fine, but debugging guards need to be #ifdef guarded, both to avoid the runtime hit in release and to document that this isn&apos;t intended to provide functionality but just to help us with debugging.

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.cpp:39
&gt;&gt;&gt; +CCThread* ccThread;
&gt;&gt; 
&gt;&gt; should this be an OwnPtr&lt;&gt;?
&gt; 
&gt; Not sure. Given that this is global scope, I felt it was better to be explicit about cleanup than have a magical ~ that ran after main()

good point - better to leak this then to try to run its d&apos;tor

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.cpp:72
&gt;&gt;&gt; +        ccThread = 0;
&gt;&gt; 
&gt;&gt; if ccThread was an OwnPtr&lt;&gt; then this would be one line
&gt; 
&gt; Are you really comfortable with OwnPtrs with global scope?

upon reflection, nope :) this way is fine

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.h:44
&gt;&gt;&gt; +    void start(); // Must be called before using the proxy.
&gt;&gt; 
&gt;&gt; this is normally called init(). is there any reason that the c&apos;tor or the ::create() function for CCLayerTreeHostImplProxy can&apos;t call this for you?
&gt; 
&gt; WRt the c&apos;tor, we need to make virtual calls to start the proxy. Cant&apos; do that in the proxy.
&gt; 
&gt; Start vs init: we have a stop. Start seems a better match than stop. I can change it if you feel strongly. Also, the FileStreamProxy/FileThread seemed to use a start/stop convention

ah, i see that initImplOnCCThread() calls a virtual.

can the createLayerTreeHostImplProxy() functions be responsible for calling start() instead of the callers? it&apos;s always awkward to be given an object that is not ready to use yet.

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.h:45
&gt;&gt;&gt; +    void stop(); // Must be called before deleting the proxy.
&gt;&gt; 
&gt;&gt; why can&apos;t this happen in the d&apos;tor? no virtual calls are being made in the implementation
&gt; 
&gt; Same comment wrt vtbl

what virtual call is being made?  i see this in stop():

 95    TRACE_EVENT(&quot;CCLayerTreeHostImplProxy::stop&quot;, this, 0);
 96    ASSERT(isMainThread());
 97    CCCompletionEvent completion;
 98    ccThread-&gt;postTask(createCCThreadTask(this, &amp;CCLayerTreeHostImplProxy::layerTreeHostClosedOnCCThread, &amp;completion));
 99    completion.wait();
 100
 101    m_layerTreeHost = 0;
 102    ASSERT(!m_layerTreeHostImpl); // layerTreeHostClosedOnCCThread() should have already been called

and this in CCLayerTreeHostImplProxy::layerTreeHostClosedOnCCThread():

 206    TRACE_EVENT(&quot;CCLayerTreeHostImplProxy::layerTreeHostClosedOnCCThread&quot;, this, 0);
 207    ASSERT(isCCThread());
 208    m_layerTreeHostImpl.clear();
 209    completion-&gt;signal();


all looks static to me.

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.h:73
&gt;&gt;&gt; +    OwnPtr&lt;CCLayerTreeHostImpl&gt; m_layerTreeHostImpl;
&gt;&gt; 
&gt;&gt; can you add comments for each of these members indicating which thread the data can be accessed on? i&apos;m pretty sure the answer is mainthread/mainthread/ccthread but it doesn&apos;t hurt to be sure. might even be worth suffixing the member names just to make it super clear what is going on
&gt;&gt; 
&gt;&gt; also, the class will pack better when more members are added if you sort by size (larger members like ptrs first, smaller members like bools later).
&gt; 
&gt; I disagree with both points.
&gt; 
&gt; We shouldn&apos;t be adding more members to this class. This code concerns the two phase commit process. Nothing else will go in here. The only time we&apos;ll add stuff here is if we change the commit algorithm.
&gt; 
&gt; It isn&apos;t easy to name variables here. The impl and host are already obvious by the rule that &quot;impl lives on ccthread.&quot;
&gt; 
&gt; Then, for things like commit, the thing is that it really means &quot;m_commitPendingOnMainThread.&quot; But its access policy is on CCThread. And frankly, m_commitPendingOnMainThread_AccessONCCThread doesnt really do much for me.
&gt; 
&gt; If you look at FileStreamProxy, it follows the convention here.
&gt; 
&gt; You&apos;ll note we&apos;re using a convention on functions. I think this is sufficient.

Maybe document the conventions in comments, then?  I think this is a little less clear than it could be. For example, m_layerTreeHostImpl seems like a ccthread data structure from the &quot;impl&quot; in its name but it&apos;s being accessed from the main thread in multiple places in this patch.

&gt;&gt;&gt; Source/WebKit/chromium/public/WebWidget.h:88
&gt;&gt;&gt; +
&gt;&gt; 
&gt;&gt; how is this different from WebWidget::composite(false) ?
&gt; 
&gt; Composite is the single-threaded flow to draw the screen, immediately. It should never be called in threaded mode.
&gt; 
&gt; ScheduleComposite will schedule a screen redraw eventually, but no commit. This is for the case where a window receives damage.

composite(false) does not imply anything immediate - the fact that the GL commands are issued before the function returns is an implementation detail, not part of the API contract. composite(true) === please composite a new frame and block until the GPU has executed the rendering commands. composite(false) === please composite a new frame, but don&apos;t block.

so the difference is that composite(false) implies commit-then-draw and scheduleComposite() implies draw-but-no-commit?  that feels like something that should be an implementation detail inside WebViewImpl and not something exposed in the API since calls to composite() from the outside will always be in response to window damage since we don&apos;t route invalidations from inside WebKit out to the embedder.

&gt;&gt;&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:2492
&gt;&gt;&gt; +#endif
&gt;&gt; 
&gt;&gt; why are we setting these bits only in the USE(THREADED_COMPOSITOR) case?
&gt; 
&gt; Because in the regular case, we update the settings before every draw.

Aha!  I missed that bit.  Can we just call the update...() once per LayerRendererChromium creation for both codepaths?  The settings bits shouldn&apos;t change while the process is running, iirc.

&gt;&gt;&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:2531
&gt;&gt;&gt; +        return;
&gt;&gt; 
&gt;&gt; why does this change?
&gt; 
&gt; Because now we may call it without a layer renderer.

sorry to be thick but when?  the m_layerRenderer lifetime does not appear to be different in this patch than it was before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388807</commentid>
    <comment_count>25</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-04-19 14:38:36 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; &gt; 
&gt; &gt; this level of indirection doesn&apos;t seem necessary or helpful.  In the non-mock codepath WebViewImpl passes a GraphicsContext3D to LayerRendererChromium::create().  In the mock case, you can just pass 0 in to LRC::create().
&gt; 
&gt; This is for lost context. We call this in LayerRendererChromium::create becausee we have to. But when we need to *Recreate* the context after its been lost, we will call this.

Unless this is changing, we never recreate a GraphicsContext3D for a lost context unless we&apos;re recreating the whole LayerRendererChromium.  After the GraphicsContext3D is set on an LRC, that&apos;s the context for the lifetime of that LayerRendererChromium.

&gt; &gt;&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:1121
&gt; 
&gt; &gt; 
&gt; &gt; why does this early out? if finish==false, then this should just do m_layerRenderer-&gt;setNeedsRedraw(). if finish==true then we definitely need an ASSERT_NOT_REACHED just like we do in ::paint()
&gt; 
&gt; Ugh. You realize this all goes away the second I can make render_widget aware of the threaded compositing mode?

Not really - we&apos;ll still have cases where the embedder (render_widget or whoever) will want to trigger composite()s either async or synchronously.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388812</commentid>
    <comment_count>26</comment_count>
      <attachid>90257</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-04-19 14:45:51 -0700</bug_when>
    <thetext>Created attachment 90257
Cleaned up</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388816</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-19 14:55:01 -0700</bug_when>
    <thetext>Attachment 90257 did not build on chromium:
Build output: http://queues.webkit.org/results/8471453</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389355</commentid>
    <comment_count>28</comment_count>
      <attachid>90257</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-04-20 11:05:25 -0700</bug_when>
    <thetext>Comment on attachment 90257
Cleaned up

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

&gt; Source/WebCore/WebCore.gypi:4079
&gt; +            &apos;platform/graphics/chromium/cc/CCLayerTreeHost.cpp&apos;,
&gt; +            &apos;platform/graphics/chromium/cc/CCLayerTreeHost.h&apos;,
&gt; +            &apos;platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp&apos;,
&gt; +            &apos;platform/graphics/chromium/cc/CCLayerTreeHostImpl.h&apos;,
&gt; +            &apos;platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.cpp&apos;,
&gt; +            &apos;platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.h&apos;,

looks like you&apos;re missing CCLayerTreeHostCommitter.cpp from here (and possibly other files) which is why this isn&apos;t compiling</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390223</commentid>
    <comment_count>29</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-04-21 12:04:35 -0700</bug_when>
    <thetext>Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.h:45
&gt; &gt;&gt;&gt; +    void stop(); // Must be called before deleting the proxy.
&gt; &gt;&gt; 
&gt; &gt;&gt; why can&apos;t this happen in the d&apos;tor? no virtual calls are being made in the implementation
&gt; what virtual call is being made?  i see this in stop():

I started without start and end calls. The thing that steered me toward stop, if I remember right, was that stop forces being blocking might cause additional rendering commands in flight that in turn access  CCLayerTreeHostImplProxy virtual methods, e.g. postDrawLayersTaskOnCCThread.


&gt; &gt;&gt;&gt; Source/WebKit/chromium/public/WebWidget.h:88
&gt; &gt;&gt; how is this different from WebWidget::composite(false) ?

The bool flag on composite is a lingering argument that we don&apos;t use at all --- we added it when we were trying to sort out artifacts in window resizing. I&apos;m going to remove it, since I&apos;m dealing with WebWidget changes anyway.

I understand that we could do hide threaded compositing semantics behind a composite() call, but it the semantics of the call are pretty different:
- composite() in regular mode must be preceded by layout/animate and will issue gl calls immediately
- composite() in threaded mode will eventually call layout/animate/draw, but later

Given I&apos;m mucking with the WebWidget already, I think we&apos;re better off making this alternative rendering flow explicit. It is going to get more complex, not simpler, once we factor in Darin&apos;s &quot;inversion&quot; patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390232</commentid>
    <comment_count>30</comment_count>
      <attachid>90574</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-04-21 12:06:48 -0700</bug_when>
    <thetext>Created attachment 90574
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390270</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-21 13:01:01 -0700</bug_when>
    <thetext>Attachment 90574 did not build on chromium:
Build output: http://queues.webkit.org/results/8493229</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390282</commentid>
    <comment_count>32</comment_count>
      <attachid>90587</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-04-21 13:23:21 -0700</bug_when>
    <thetext>Created attachment 90587
Make builders happy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390311</commentid>
    <comment_count>33</comment_count>
      <attachid>90593</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-04-21 13:57:47 -0700</bug_when>
    <thetext>Created attachment 90593
Forgot to fix tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390449</commentid>
    <comment_count>34</comment_count>
      <attachid>90630</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-04-21 16:34:32 -0700</bug_when>
    <thetext>Created attachment 90630
Fixes for threading compiled out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390451</commentid>
    <comment_count>35</comment_count>
      <attachid>90631</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-04-21 16:41:03 -0700</bug_when>
    <thetext>Created attachment 90631
Death by a thousand corner cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393051</commentid>
    <comment_count>36</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-04-26 16:45:47 -0700</bug_when>
    <thetext>(note to people in the review hack-a-thon: I&apos;m planning to review this today or tomorrow)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393989</commentid>
    <comment_count>37</comment_count>
      <attachid>90631</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-04-27 16:49:20 -0700</bug_when>
    <thetext>Comment on attachment 90631
Death by a thousand corner cases.

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

Close!  You&apos;ll need Darin approval for the WebView changes - probably a good idea to start bothering him in parallel with fixing up the last nits.  Also, be sure this applies to ToT - the draw part of updateAndDrawLayers() has changed a bit and you might have some conflicts there.

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h:187
&gt; +    bool m_committing;

this version of m_committing is declared and initialized but never use. remove or use

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.h:43
&gt; +    virtual PassRefPtr&lt;GraphicsContext3D&gt; createLayerTreeHostContext3D() = 0;

This is still here but not needed in the current codepath since the LRC is recreated on lost context.  I&apos;m pretty sure you don&apos;t intend to rewrite lost context support in this patch, so please remove this for now.  We can add it if we need it later.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.h:71
&gt; +#ifndef NDEBUG
&gt; +    bool m_committing;
&gt; +#endif

now this is declared and updated but never actually used (there aren&apos;t any ASSERT()s or branches on this variable).  use it somewhere or nuke - it&apos;s just confusing this way.

&gt; Source/WebKit/chromium/public/WebWidget.h:67
&gt; +    // FIXME: remove default argument once render_widget has been updated to
&gt; +    // issue the correct value.
&gt; +    virtual void animate(double frameBeginTime) = 0;

there&apos;s a FIXME here but no default argument - which is wrong?

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:2347
&gt; +#if USE(THREADED_COMPOSITyING)

typo here.  this probably doesn&apos;t work at all then, right?

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:2517
&gt; +    if (!m_layerRenderer)
&gt; +        return;

it&apos;s still not clear when this is called with a null m_layerRenderer - as far as I can tell, the m_layerRenderer lifetime is not changed by this patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394085</commentid>
    <comment_count>38</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-04-27 18:47:07 -0700</bug_when>
    <thetext>fyi as soon as https://bugs.webkit.org/attachment.cgi?id=91390&amp;action=prettypatch lands you should probably sync it and do a build to make sure you don&apos;t need to do any fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405476</commentid>
    <comment_count>39</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-05-17 20:20:29 -0700</bug_when>
    <thetext>(In reply to comment #37)
&gt; (From update of attachment 90631 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=90631&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.h:43
&gt; &gt; +    virtual PassRefPtr&lt;GraphicsContext3D&gt; createLayerTreeHostContext3D() = 0;
&gt; 
&gt; This is still here but not needed in the current codepath since the LRC is recreated on lost context.  I&apos;m pretty sure you don&apos;t intend to rewrite lost context support in this patch, so please remove this for now.  We can add it if we need it later.

I&apos;d like to keep this init flow in. It is a good step toward what I think it is the right way to do things, though I&apos;m certainly open to the possibility that I&apos;m wrong about what I think is right. :)

10,000&apos;, I think the GraphicsContext and context-lost should be sealed inside the CCLayerTreeHost. The WebView should only ever see LayerTreeHosts and provide a factory method for creating a new context, should it be needed.

If we go down the route of re-using the context after context-lost, then I think this puts in a slightly cleaner position anyway --- we just remove this method from the client, rather than mucking with the constructors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405499</commentid>
    <comment_count>40</comment_count>
      <attachid>93866</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-05-17 21:21:48 -0700</bug_when>
    <thetext>Created attachment 93866
Rebase and minor updates.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406015</commentid>
    <comment_count>41</comment_count>
      <attachid>93982</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-05-18 14:06:06 -0700</bug_when>
    <thetext>Created attachment 93982
more rebasing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408205</commentid>
    <comment_count>42</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-05-23 13:21:37 -0700</bug_when>
    <thetext>Ping.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408322</commentid>
    <comment_count>43</comment_count>
      <attachid>93982</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-05-23 14:45:17 -0700</bug_when>
    <thetext>Comment on attachment 93982
more rebasing.

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

You have some merge conflicts to ToT in WebViewImpl.cpp, but otherwise this looks good.  Please ping darin on the WebWidget API change (although it seems good to me).

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommitter.h:44
&gt; +    explicit CCLayerTreeHostCommitter() { }

nit: the &apos;explicit&apos; isn&apos;t needed for no-arg c&apos;tor

&gt; Source/WebKit/chromium/WebKit.gypi:59
&gt; +            &apos;tests/DragImageTest.cpp&apos;,

hm? this change doesn&apos;t seem intentional

&gt; Source/WebKit/chromium/src/WebPopupMenuImpl.cpp:156
&gt; +void WebPopupMenuImpl::animate(double frameBeginTime)

nit: to avoid unused variable warnings, omit the parameter name here

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:2521
&gt; +            context-&gt;reshape(std::max(1, m_size.width), std::max(1, m_size.height));

nit: webkit style is to add a &apos;using namespace std&apos; declaration for the file and have the callsites just be max() (this is different from chromium style, but them&apos;s the breaks)

&gt; Source/WebKit/chromium/src/WebViewImpl.h:419
&gt; +

nit: spurious newline here

&gt; Source/WebKit/chromium/tests/CCThreadTest.cpp:54
&gt; +

nit: spurious newline here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426652</commentid>
    <comment_count>44</comment_count>
      <attachid>98441</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-06-23 17:25:03 -0700</bug_when>
    <thetext>Created attachment 98441
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426653</commentid>
    <comment_count>45</comment_count>
      <attachid>98441</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-06-23 17:30:35 -0700</bug_when>
    <thetext>Comment on attachment 98441
Patch

All indications by bots and tests are that this is ready... ~crosses fingers~</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426694</commentid>
    <comment_count>46</comment_count>
      <attachid>98441</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-06-23 19:04:16 -0700</bug_when>
    <thetext>Comment on attachment 98441
Patch

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

R=me, some nits but looks mostly the same as before.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.h:40
&gt; +class CCLayerTreeHostClient {

nit: this should probably have a protected, virtual d&apos;tor with an empty body so we can get nice compile warnings if somebody implements CCLayerTreeHostClient but forgets to declare a virtual d&apos;tor

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:37
&gt; +public:
&gt; +    virtual ~CCLayerTreeHostImplClient() { }

nit: i&apos;ve learned the preferred pattern for client interfaces is to make the d&apos;tor protected

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:1030
&gt; -        FrameView* view = webframe-&gt;frameView();
&gt; +       FrameView* view = webframe-&gt;frameView();

the diff makes it look like the indentation is messed up here, is it?

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:2580
&gt; +

spurious newline</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427049</commentid>
    <comment_count>47</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-06-24 12:29:33 -0700</bug_when>
    <thetext>Committed r89694: &lt;http://trac.webkit.org/changeset/89694&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427099</commentid>
    <comment_count>48</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-06-24 13:46:56 -0700</bug_when>
    <thetext>Reverted r89694 for reason:

Test shell still not ready for animate changes.

Committed r89700: &lt;http://trac.webkit.org/changeset/89700&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428101</commentid>
    <comment_count>49</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-06-27 11:06:25 -0700</bug_when>
    <thetext>Committed r89837: &lt;http://trac.webkit.org/changeset/89837&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89324</attachid>
            <date>2011-04-12 18:38:02 -0700</date>
            <delta_ts>2011-04-14 01:53:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58408-20110412183801.patch</filename>
            <type>text/plain</type>
            <size>59269</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODM1ODQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwNjNhODFkYzc1OWFkYzZk
ZDQxZTk4MzE5ZmZjNDI2MGY1NmNlMmU1Li42ZTU0NGQxZDU5YzRjNzNhZDRhMDI5YmUyMGEyOGRi
MTU4OWFiM2NhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjggQEAKKzIwMTEtMDQtMTIgIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gQWRkIENDVmlldyBhcyB0aHJlYWRlZCBiYXNl
IGNsYXNzIGZvciBMYXllclJlbmRlcmVyQ2hyb21pdW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU4NDA4CisKKyAgICAgICAgQ3JlYXRlIENDVmlldyBh
bmQgQ0NWaWV3SW1wbCwgd2hpY2ggYXJlIHRoZSBtYWluIHRocmVhZCBhbmQgY29tcG9zaXRvcgor
ICAgICAgICB0aHJlYWQgaGFsdmVzIG9mIGEgY29tcG9zaXRlZCB2aWV3LiBDb21tdW5pY2F0aW9u
IGJldHdlZW4gdGhlIHR3bworICAgICAgICBpcyBiYXNlZCBvbiB0aGUgZGVzaWduIHVzZWQgaW4g
RmlsZVN0cmVhbVByb3h5LgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1bSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb21taXQpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbDo6TGF5ZXJSZW5kZXJlckNocm9taXVt
SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsOjpkcmF3
TGF5ZXJzQW5kUHJlc2VudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21p
dW1JbXBsOjpkcmF3TGF5ZXJzT25NYWluVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
UmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlSW1wbE9uQ0NUaHJlYWQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNDSGVhZHNVcERpc3BsYXk6OmN1cnJlbnRGcmFtZU51bWJlcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWV3LmNwcDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1Vw
RGlzcGxheS5oLgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWV3OjpDQ1ZpZXcpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NWaWV3Ojp+Q0NWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlldzo6YWZ0
ZXJDb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWV3OjphbmltYXRlQW5kTGF5b3V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNDVmlldzo6Y29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkND
Vmlldzo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWV3
OjpzZXROZWVkc1JlZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NWaWV3Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaC4KKyAgICAgICAgKFdlYkNvcmU6OkNDVmll
dzo6dXBkYXRlTGF5ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1ZpZXdJbXBsLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oLgorICAgICAgICAoV2ViQ29yZTo6
Q0NWaWV3SW1wbDo6Q0NWaWV3SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZXdJbXBsOjp+
Q0NWaWV3SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZXdJbXBsOjphZnRlckNvbW1pdCk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZXdJbXBsOjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDVmlld0ltcGw6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KToKKyAgICAgICAgKFdl
YkNvcmU6OkNDVmlld0ltcGw6OnNldE5lZWRzUmVkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZXdJbXBsLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNDVmlld0ltcGw6OmZyYW1lTnVtYmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDVmlld0ltcGw6OnNvdXJjZUZyYW1lTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkND
Vmlld0ltcGw6OnNldFNvdXJjZUZyYW1lTnVtYmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1ZpZXdJbXBsUHJveHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNDVmlld0ltcGxQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmll
d0ltcGxQcm94eTo6Q0NWaWV3SW1wbFByb3h5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlld0lt
cGxQcm94eTo6fkNDVmlld0ltcGxQcm94eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZXdJbXBs
UHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmll
d0ltcGxQcm94eTo6c2V0TmVlZHNSZWRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWV3SW1w
bFByb3h5Ojp2aWV3Q2xvc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlld0ltcGxQcm94eTo6
Y3JlYXRlSW1wbE9uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWV3SW1wbFByb3h5
Ojppc01haW5UaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWV3SW1wbFByb3h5Ojppc0ND
VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlld0ltcGxQcm94eTo6cmVxdWVzdEZyYW1l
QW5kQ29tbWl0T25DQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZXdJbXBsUHJveHk6
OnJlcXVlc3RGcmFtZUFuZENvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZXdJbXBsUHJv
eHk6OmNvbW1pdE9uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWV3SW1wbFByb3h5
Ojpwb3N0VGFza09uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWV3SW1wbFByb3h5
OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NWaWV3SW1wbFByb3h5OjpzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NWaWV3SW1wbFByb3h5Ojp2aWV3Q2xvc2VkT25DQ1RocmVhZCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWV3SW1wbFByb3h5Lmg6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNV
cERpc3BsYXkuaC4KKwogMjAxMS0wNC0xMiAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGdvb2ds
ZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWXVyeSBTZW1pa2hhdHNreS4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQppbmRleCAxZjQ2YThlYTdjZTNiNmZjNGFiNTFhMDRmNzE4NzJlMTMzNDljNTgxLi5mOGQy
MWMwM2JhNjVkZWZhMzk5MmJiNDY3ODM2M2EzYjg2NWNkYTUzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBA
IC00MDU3LDYgKzQwNTcsMTIgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RocmVhZFRhc2suaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaCcsCisgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWV3LmNwcCcsCisgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWV3LmgnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlld0ltcGwuY3BwJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZXdJbXBsLmgnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlld0ltcGxQcm94eS5jcHAnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlld0ltcGxQcm94
eS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1E
YXRhQ29jb2EubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9Gb250RWZs
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0ljb25FZmwuY3BwJywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IDRiZDhlMDYyNGNmNmZk
YzkxMzgxNmZmYTFmNDA2ZjQwNjUyZGIyYmQuLmM2OTFkNzUzYTc5Zjk0NmRmMzQ2ZGY5MjQ4MDcx
NGE5ZTM2MmNjOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAt
NDgsNiArNDgsOCBAQAogI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKICNpbmNsdWRlICJXZWJHTExh
eWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgorI2luY2x1ZGUgImNj
L0NDTWFpblRocmVhZFRhc2suaCIKKyNpbmNsdWRlICJjYy9DQ1ZpZXdJbXBsLmgiCiAjaWYgVVNF
KFNLSUEpCiAjaW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1D
b250ZXh0U2tpYS5oIgpAQCAtOTQsMjAgKzk2LDIyIEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpjb21wYXJlTGF5ZXJaKGNvbnN0IFJlZlB0cjxDQ0xheWVySW1wbD4mIGEsIGNvbnN0IFJl
CiAgICAgcmV0dXJuIGEtPmRyYXdEZXB0aCgpIDwgYi0+ZHJhd0RlcHRoKCk7CiB9CiAKLVBhc3NS
ZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0
ZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0LCBQYXNzT3duUHRyPFRpbGVQ
YWludEludGVyZmFjZT4gY29udGVudFBhaW50LCBQYXNzT3duUHRyPFRpbGVQYWludEludGVyZmFj
ZT4gc2Nyb2xsYmFyUGFpbnQpCitQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUoQ0NWaWV3Q2xpZW50KiBjbGllbnQsIFBhc3NPd25Q
dHI8VGlsZVBhaW50SW50ZXJmYWNlPiBjb250ZW50UGFpbnQsIFBhc3NPd25QdHI8VGlsZVBhaW50
SW50ZXJmYWNlPiBzY3JvbGxiYXJQYWludCkKIHsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+IGNvbnRleHQgPSBjbGllbnQtPmNyZWF0ZVZpZXdDb250ZXh0M0QoKTsKICAgICBpZiAoIWNv
bnRleHQpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJv
bWl1bT4gbGF5ZXJSZW5kZXJlcihhZG9wdFJlZihuZXcgTGF5ZXJSZW5kZXJlckNocm9taXVtKGNv
bnRleHQsIGNvbnRlbnRQYWludCwgc2Nyb2xsYmFyUGFpbnQpKSk7CisgICAgUmVmUHRyPExheWVy
UmVuZGVyZXJDaHJvbWl1bT4gbGF5ZXJSZW5kZXJlcihhZG9wdFJlZihuZXcgTGF5ZXJSZW5kZXJl
ckNocm9taXVtKGNsaWVudCwgY29udGV4dCwgY29udGVudFBhaW50LCBzY3JvbGxiYXJQYWludCkp
KTsKICAgICBpZiAoIWxheWVyUmVuZGVyZXItPmhhcmR3YXJlQ29tcG9zaXRpbmcoKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAKICAgICByZXR1cm4gbGF5ZXJSZW5kZXJlci5yZWxlYXNlKCk7CiB9CiAK
LUxheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVtKFBhc3NSZWZQdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsIFBhc3NPd25QdHI8VGlsZVBhaW50SW50ZXJmYWNl
PiBjb250ZW50UGFpbnQsIFBhc3NPd25QdHI8VGlsZVBhaW50SW50ZXJmYWNlPiBzY3JvbGxiYXJQ
YWludCkKLSAgICA6IG1fdmlld3BvcnRTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgtMSwgLTEpKQor
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0oQ0NWaWV3Q2xpZW50
KiBjbGllbnQsIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsIFBhc3NPd25Q
dHI8VGlsZVBhaW50SW50ZXJmYWNlPiBjb250ZW50UGFpbnQsIFBhc3NPd25QdHI8VGlsZVBhaW50
SW50ZXJmYWNlPiBzY3JvbGxiYXJQYWludCkKKyAgICA6IENDVmlldyhjbGllbnQpCisgICAgLCBt
X3ZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoLTEsIC0xKSkKICAgICAsIG1fcm9vdExh
eWVyKDApCiAgICAgLCBtX3Jvb3RMYXllckNvbnRlbnRQYWludChjb250ZW50UGFpbnQpCiAgICAg
LCBtX3Jvb3RMYXllclNjcm9sbGJhclBhaW50KHNjcm9sbGJhclBhaW50KQpAQCAtMjU2LDEwICsy
NjAsMTAgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldFZpZXdwb3J0KGNvbnN0IElu
dFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWMKICAgICB9CiB9CiAKLXZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjp1cGRhdGVBbmREcmF3TGF5ZXJzKCkKLXsKLSAgICBBU1NFUlQobV9o
YXJkd2FyZUNvbXBvc2l0aW5nKTsKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVM
YXllcnMoKQogCit7CisgICAgQ0NWaWV3Ojp1cGRhdGVMYXllcnMoKTsKICAgICBpZiAoIW1fcm9v
dExheWVyKQogICAgICAgICByZXR1cm47CiAKQEAgLTI3Miw5ICsyNzYsMTMgQEAgdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUFuZERyYXdMYXllcnMoKQogCiAgICAgdXBkYXRlUm9v
dExheWVyU2Nyb2xsYmFycygpOwogCi0gICAgTGF5ZXJMaXN0IHJlbmRlclN1cmZhY2VMYXllckxp
c3Q7Ci0gICAgdXBkYXRlTGF5ZXJzKHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIG1fY29t
cHV0ZWRSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0ID0gYWRvcHRQdHIobmV3IExheWVyTGlzdCgpKTsK
KyAgICB1cGRhdGVMYXllcnMoKm1fY29tcHV0ZWRSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmdldCgp
KTsKK30KIAordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoKQoreworICAg
IEFTU0VSVChtX2NvbXB1dGVkUmVuZGVyU3VyZmFjZUxheWVyTGlzdC5nZXQoKSk7CiAgICAgLy8g
QmVmb3JlIGRyYXdMYXllcnM6CiAgICAgaWYgKGhhcmR3YXJlQ29tcG9zaXRpbmcoKSAmJiBtX2Nv
bnRleHRTdXBwb3J0c0xhdGNoKSB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGUgbXVsdGl0aHJlYWRl
ZCBjb21wb3NpdG9yIGNhc2Ugd2lsbCBub3Qgd29yayBhcyBsb25nIGFzCkBAIC0zMDAsNyArMzA4
LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUFuZERyYXdMYXllcnMoKQog
ICAgICAgICBtX2NoaWxkQ29udGV4dHNXZXJlQ29waWVkID0gZmFsc2U7CiAgICAgfQogCi0gICAg
ZHJhd0xheWVycyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBkcmF3TGF5ZXJzKCptX2Nv
bXB1dGVkUmVuZGVyU3VyZmFjZUxheWVyTGlzdC5nZXQoKSk7CiAKICAgICAvLyBBZnRlciBkcmF3
TGF5ZXJzOgogICAgIGlmIChoYXJkd2FyZUNvbXBvc2l0aW5nKCkgJiYgbV9jb250ZXh0U3VwcG9y
dHNMYXRjaCkgewpAQCAtMTE2Niw2ICsxMTc0LDU1IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkdW1wUmVuZGVyU3VyZmFjZXMoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQsIExheWVy
CiAgICAgICAgIGR1bXBSZW5kZXJTdXJmYWNlcyh0cywgaW5kZW50LCBsYXllci0+Z2V0U3VibGF5
ZXJzKClbaV0uZ2V0KCkpOwogfQogCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29tbWl0
KENDVmlld0ltcGwqIGltcGwpCit7CisgICAgQ0NWaWV3Ojpjb21taXQoaW1wbCk7CisgICAgaW1w
bC0+c2V0U291cmNlRnJhbWVOdW1iZXIobV9oZWFkc1VwRGlzcGxheS0+Y3VycmVudEZyYW1lTnVt
YmVyKCkpOworfQorCisKK2NsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bUltcGwgOiBwdWJsaWMg
Q0NWaWV3SW1wbCB7CitwdWJsaWM6CisgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbChDQ1Zp
ZXdJbXBsQ2xpZW50KiBjbGllbnQsIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbHJjKQorICAgICAg
ICA6IENDVmlld0ltcGwoY2xpZW50KQorICAgICAgICAsIG1fbGF5ZXJSZW5kZXJlcihscmMpIHsg
fQorCisgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNBbmRQcmVzZW50KCkKKyAgICB7CisgICAg
ICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CisgICAgICAgIGJvb2wgY29udGV4dExv
c3Q7CisgICAgICAgIENDTWFpblRocmVhZDo6cG9zdFRhc2soY3JlYXRlTWFpblRocmVhZFRhc2so
dGhpcywgJkxheWVyUmVuZGVyZXJDaHJvbWl1bUltcGw6OmRyYXdMYXllcnNPbk1haW5UaHJlYWQs
ICZjb21wbGV0aW9uLCAmY29udGV4dExvc3QpKTsKKyAgICAgICAgY29tcGxldGlvbi53YWl0KCk7
CisKKyAgICAgICAgLy8gRklYTUU6IFNlbmQgdGhlICJVcGRhdGVSZWN0IiBtZXNzYWdlIHVwIHRv
IHRoZSBSZW5kZXJXaWRnZXQgW29yIG1vdmVwbHVnaW4gZXF1aXZhbGVudHMuLi5dCisKKyAgICAg
ICAgLy8gRklYTUU6IGhhbmRsZSBjb250ZXh0IGxvc3QKKyAgICAgICAgaWYgKGNvbnRleHRMb3N0
KQorICAgICAgICAgICAgRkFUQUwoIkxheWVyUmVuZGVyZXJDaHJvbWl1bUltcGwgZG9lcyBub3Qg
aGFuZGxlIGNvbnRleHQgbG9zdCB5ZXQuIik7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQg
ZHJhd0xheWVyc09uTWFpblRocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbiwgYm9v
bCogY29udGV4dExvc3QpCisgICAgeworICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
CisgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVycygpOworICAgICAgICBtX2xheWVy
UmVuZGVyZXItPnByZXNlbnQoKTsKKworICAgICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCA9IG1fbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpOworICAgICAgICAqY29udGV4dExvc3QgPSBj
b250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSAhPSBH
cmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I7CisKKyAgICAgICAgY29tcGxldGlvbi0+c2lnbmFs
KCk7CisgICAgfQorCisgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBtX2xheWVyUmVuZGVyZXI7
Cit9OworCitQYXNzT3duUHRyPENDVmlld0ltcGw+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3Jl
YXRlSW1wbE9uQ0NUaHJlYWQoQ0NWaWV3SW1wbENsaWVudCogY2xpZW50KQoreworICAgIHJldHVy
biBhZG9wdFB0cihuZXcgTGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbChjbGllbnQsIHRoaXMpKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCA3MTA4
NzhhZTEzZmI1N2M1ODkzZjJjYTZlYThlZTFiMTRkMjdiYzUxLi4wMjkwYmZlZmMyMzQ3NjYzNGY3
YjU1ODM2ZTBhZjM1NjhiOGRhYjg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
aApAQCAtNDUsMTEgKzQ1LDEyIEBACiAjaW5jbHVkZSAiY2MvQ0NIZWFkc1VwRGlzcGxheS5oIgog
I2luY2x1ZGUgImNjL0NDUGx1Z2luTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NWaWRlb0xh
eWVySW1wbC5oIgorI2luY2x1ZGUgImNjL0NDVmlldy5oIgorI2luY2x1ZGUgImNjL0NDVmlld0lt
cGwuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KIAogI2lmIFBMQVRGT1JNKENHKQpAQCAtNjAsMTcgKzYxLDE5IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIENDTGF5ZXJJbXBsOworY2xhc3MgQ0NWaWV3SW1wbDsKIGNsYXNzIEdl
b21ldHJ5QmluZGluZzsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogY2xhc3MgQ0NIZWFkc1Vw
RGlzcGxheTsKIAogLy8gQ2xhc3MgdGhhdCBoYW5kbGVzIGRyYXdpbmcgb2YgY29tcG9zaXRlZCBy
ZW5kZXIgbGF5ZXJzIHVzaW5nIEdMLgotY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtIDogcHVi
bGljIFJlZkNvdW50ZWQ8TGF5ZXJSZW5kZXJlckNocm9taXVtPiB7CitjbGFzcyBMYXllclJlbmRl
cmVyQ2hyb21pdW0gOiBwdWJsaWMgQ0NWaWV3IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGNyZWF0ZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiwgUGFzc093blB0cjxUaWxlUGFpbnRJbnRlcmZhY2U+IGNvbnRlbnRQYWludCwgUGFz
c093blB0cjxUaWxlUGFpbnRJbnRlcmZhY2U+IHNjcm9sbGJhclBhaW50KTsKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGNyZWF0ZShDQ1ZpZXdDbGllbnQqLCBQ
YXNzT3duUHRyPFRpbGVQYWludEludGVyZmFjZT4gY29udGVudFBhaW50LCBQYXNzT3duUHRyPFRp
bGVQYWludEludGVyZmFjZT4gc2Nyb2xsYmFyUGFpbnQpOwogCiAgICAgfkxheWVyUmVuZGVyZXJD
aHJvbWl1bSgpOwogCisgICAgdmlydHVhbCBQYXNzT3duUHRyPENDVmlld0ltcGw+IGNyZWF0ZUlt
cGxPbkNDVGhyZWFkKENDVmlld0ltcGxDbGllbnQqKTsKICAgICBHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCgpOwogCiAgICAgdm9pZCBpbnZhbGlkYXRlUm9vdExheWVyUmVjdChjb25zdCBJbnRS
ZWN0JiBkaXJ0eVJlY3QpOwpAQCAtNzgsNyArODEsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRW
aWV3cG9ydChjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVu
dFJlY3QsIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbik7CiAKICAgICAvLyB1cGRhdGVz
IGFuZCBkcmF3cyB0aGUgY3VycmVudCBsYXllcnMgb250byB0aGUgYmFja2J1ZmZlcgotICAgIHZv
aWQgdXBkYXRlQW5kRHJhd0xheWVycygpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVMYXllcnMo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0KENDVmlld0ltcGwqKTsKKyAgICB2b2lkIGRyYXdM
YXllcnMoKTsKIAogICAgIC8vIHdhaXRzIGZvciByZW5kZXJpbmcgdG8gZmluaXNoCiAgICAgdm9p
ZCBmaW5pc2goKTsKQEAgLTEzOCw3ICsxNDMsNyBAQCBwcml2YXRlOgogICAgIHR5cGVkZWYgVmVj
dG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiBMYXllckxpc3Q7CiAgICAgdHlwZWRlZiBIYXNoTWFw
PFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4sIGludD4gQ2hpbGRDb250ZXh0TWFwOwogCi0gICAg
ZXhwbGljaXQgTGF5ZXJSZW5kZXJlckNocm9taXVtKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+LCBQYXNzT3duUHRyPFRpbGVQYWludEludGVyZmFjZT4gY29udGVudFBhaW50LCBQYXNzT3du
UHRyPFRpbGVQYWludEludGVyZmFjZT4gc2Nyb2xsYmFyUGFpbnQpOworICAgIGV4cGxpY2l0IExh
eWVyUmVuZGVyZXJDaHJvbWl1bShDQ1ZpZXdDbGllbnQqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiwgUGFzc093blB0cjxUaWxlUGFpbnRJbnRlcmZhY2U+IGNvbnRlbnRQYWludCwgUGFz
c093blB0cjxUaWxlUGFpbnRJbnRlcmZhY2U+IHNjcm9sbGJhclBhaW50KTsKIAogICAgIHZvaWQg
dXBkYXRlTGF5ZXJzKExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAgdm9p
ZCB1cGRhdGVSb290TGF5ZXJDb250ZW50cygpOwpAQCAtMTg3LDYgKzE5Miw4IEBAIHByaXZhdGU6
CiAKICAgICBib29sIG1faGFyZHdhcmVDb21wb3NpdGluZzsKIAorICAgIE93blB0cjxMYXllckxp
c3Q+IG1fY29tcHV0ZWRSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworCiAgICAgdW5zaWduZWQgbV9j
dXJyZW50U2hhZGVyOwogICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogbV9jdXJyZW50UmVuZGVy
U3VyZmFjZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oCmluZGV4IGQ1NmY4YWI4ODY3
MTk0NWVhZGNlNWNiMzQ5NDViZTIxMWFiMzk2OTQuLjM2ZmMxYjdmYTA4YmUxMzljYjU3NzlkYjhj
MjBhOWE2MWU5NTA2YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmgKQEAgLTQ1LDYg
KzQ1LDggQEAgcHVibGljOgogCiAgICAgfkNDSGVhZHNVcERpc3BsYXkoKTsKIAorICAgIGludCBj
dXJyZW50RnJhbWVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRGcmFtZU51bWJlcjsg
fQorCiAgICAgdm9pZCBvblByZXNlbnQoKTsKIAogICAgIHZvaWQgc2V0U2hvd0ZQU0NvdW50ZXIo
Ym9vbCBlbmFibGUpIHsgbV9zaG93RlBTQ291bnRlciA9IGVuYWJsZTsgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWV3LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlldy5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZmQwYzQ3YzRmMDgyMmJiOWU4ZjA5MjU4NjA5ZjFlOTU1MmJjYzA4NQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVmlldy5jcHAKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQ0NWaWV3LmgiCisKKyNpbmNsdWRlICJDQ1ZpZXdJbXBs
LmgiCisjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ND
Vmlldzo6Q0NWaWV3KENDVmlld0NsaWVudCogY2xpZW50KQorICAgIDogbV9jbGllbnQoY2xpZW50
KQorICAgICwgbV9mcmFtZU51bWJlcigwKQorI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykK
KyAgICAsIG1fcHJveHkoQ0NWaWV3SW1wbFByb3h5OjpjcmVhdGUodGhpcykpCisjZW5kaWYKK3sK
K30KKworQ0NWaWV3Ojp+Q0NWaWV3KCkKK3sKKyNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcp
CisgICAgbV9wcm94eS0+dmlld0Nsb3NlZCgpOworI2VuZGlmCit9CisKK3ZvaWQgQ0NWaWV3Ojph
ZnRlckNvbW1pdCgpCit7CisgICAgbV9mcmFtZU51bWJlcisrOworfQordm9pZCBDQ1ZpZXc6OmFu
aW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQoreworICAgIG1fY2xpZW50LT5h
bmltYXRlQW5kTGF5b3V0KGZyYW1lQmVnaW5UaW1lKTsKK30KKwordm9pZCBDQ1ZpZXc6OmNvbW1p
dChDQ1ZpZXdJbXBsKiBpbXBsKQoreworICAgIGltcGwtPnNldFNvdXJjZUZyYW1lTnVtYmVyKG1f
ZnJhbWVOdW1iZXIpOworfQorCit2b2lkIENDVmlldzo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXco
KQoreworICAgIG1fcHJveHktPnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7Cit9CisKK3ZvaWQg
Q0NWaWV3OjpzZXROZWVkc1JlZHJhdygpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDVmlldzo6c2V0
TmVlZHNDb21taXRBbmRSZWRyYXciLCB0aGlzLCAwKTsKKyAgICBtX3Byb3h5LT5zZXROZWVkc1Jl
ZHJhdygpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1ZpZXcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVmlldy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY5ZGRjZDQ4Y2IxMTk1ZGJhZGE4
MGVjM2ZkYzVkMWZkYTQyOTFlMGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZXcuaApAQCAtMCwwICsxLDY5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisg
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIENDVmlld19oCisjZGVmaW5lIENDVmlld19oCisKKyNpbmNs
dWRlICJjYy9DQ1ZpZXdJbXBsUHJveHkuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ1ZpZXdJbXBsOworY2xhc3MgQ0NWaWV3
SW1wbENsaWVudDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworCitjbGFzcyBDQ1ZpZXdDbGll
bnQgeworcHVibGljOgorICAgIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZVZp
ZXdDb250ZXh0M0QoKTsKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUFuZExheW91dChkb3VibGUg
ZnJhbWVCZWdpblRpbWUpID0gMDsKK307CisKKy8vIENDVmlldyAoZXF1aXZhbGVudCB0byBMYXll
clRyZWVIb3N0IGluIENBKQorY2xhc3MgQ0NWaWV3IDogcHVibGljIFJlZkNvdW50ZWQ8Q0NWaWV3
PiB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQ0NWaWV3KENDVmlld0NsaWVudCopOworICAgIHZp
cnR1YWwgfkNDVmlldygpOworICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ1ZpZXdJbXBsPiBjcmVh
dGVJbXBsT25DQ1RocmVhZChDQ1ZpZXdJbXBsQ2xpZW50KikgPSAwOworCisgICAgdmlydHVhbCB2
b2lkIGFmdGVyQ29tbWl0KCk7CisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVBbmRMYXlvdXQoZG91
YmxlIGZyYW1lQmVnaW5UaW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0KENDVmlld0ltcGwq
KTsKKworICAgIHZvaWQgc2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICB2b2lkIHNldE5l
ZWRzUmVkcmF3KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlTGF5ZXJzKCkgeyB9CisKK3By
aXZhdGU6CisgICAgQ0NWaWV3Q2xpZW50KiBtX2NsaWVudDsKKyAgICBpbnQgbV9mcmFtZU51bWJl
cjsKKyAgICBSZWZQdHI8Q0NWaWV3SW1wbFByb3h5PiBtX3Byb3h5OworfTsKKworfQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVmlld0ltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NWaWV3SW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGUwODY0ODA2YjY3NjViZDI2ZGIx
Y2NhZDhkNGNiZDdlZmNkYmNhYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlld0ltcGwuY3BwCkBAIC0wLDAgKzEsODYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkNDVmll
d0ltcGwuaCIKKworI2luY2x1ZGUgIkNDVGhyZWFkVGFzay5oIgorI2luY2x1ZGUgIkNDVmlldy5o
IgorI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDQ1ZpZXdJbXBsOjpDQ1ZpZXdJbXBsKFBhc3NSZWZQ
dHI8Q0NWaWV3SW1wbENsaWVudD4gY2xpZW50KQorICAgIDogbV9zb3VyY2VGcmFtZU51bWJlcigt
MSkKKyAgICAsIG1fZnJhbWVOdW1iZXIoMCkKKyAgICAsIG1fY2xpZW50KGNsaWVudCkKKyAgICAs
IG1fcmVkcmF3RW5xdWV1ZWQoZmFsc2UpCit7Cit9CisKK0NDVmlld0ltcGw6On5DQ1ZpZXdJbXBs
KCkKK3sKK30KKwordm9pZCBDQ1ZpZXdJbXBsOjphZnRlckNvbW1pdCgpCit7CisgICAgc2V0TmVl
ZHNSZWRyYXcoKTsKK30KKwordm9pZCBDQ1ZpZXdJbXBsOjpkcmF3TGF5ZXJzKCkKK3sKKyAgICBU
UkFDRV9FVkVOVCgiQ0NWaWV3SW1wbDo6ZHJhd0xheWVycyIsIHRoaXMsIDApOworICAgIEFTU0VS
VChtX3JlZHJhd0VucXVldWVkKTsKKyAgICBtX3JlZHJhd0VucXVldWVkID0gZmFsc2U7CisKKyAg
ICB7CisgICAgICAgIFRSQUNFX0VWRU5UKCJDQ1ZpZXdJbXBsOjpkcmF3TGF5ZXJzQW5kUHJlc2Vu
dCIsIHRoaXMsIDApOworICAgICAgICBkcmF3TGF5ZXJzQW5kUHJlc2VudCgpOworICAgIH0KKwor
ICAgIG1fZnJhbWVOdW1iZXIgKz0gMTsKK30KKwordm9pZCBDQ1ZpZXdJbXBsOjpzZXROZWVkc0Nv
bW1pdEFuZFJlZHJhdygpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDVmlld0ltcGw6OnNldE5lZWRz
Q29tbWl0QW5kUmVkcmF3IiwgdGhpcywgMCk7CisKKyAgICAvLyBGSVhNRTogbW92ZSB0aGUgcmVx
dWVzdEZyYW1lQW5kQ29tbWl0IG91dCBmcm9tIGhlcmUgb25jZSB3ZSBhZGQgZnJhbWVyYXRlIHRo
cm90dGxpbmcvYW5pbWF0aW9uCisgICAgZG91YmxlIGZyYW1lQmVnaW5UaW1lID0gY3VycmVudFRp
bWUoKTsKKyAgICBtX2NsaWVudC0+cmVxdWVzdEZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZChmcmFt
ZUJlZ2luVGltZSk7Cit9CisKK3ZvaWQgQ0NWaWV3SW1wbDo6c2V0TmVlZHNSZWRyYXcoKQorewor
ICAgIGlmIChtX3JlZHJhd0VucXVldWVkKQorICAgICAgICByZXR1cm47CisKKyAgICBUUkFDRV9F
VkVOVCgiQ0NWaWV3SW1wbDo6c2V0TmVlZHNSZWRyYXciLCB0aGlzLCAwKTsKKyAgICBtX3JlZHJh
d0VucXVldWVkID0gdHJ1ZTsKKyAgICBtX2NsaWVudC0+cG9zdFRhc2tPbkNDVGhyZWFkKGNyZWF0
ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NWaWV3SW1wbDo6ZHJhd0xheWVycykpOworfQorCit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1ZpZXdJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1ZpZXdJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDZjOTcxMGFhYTFmOTg5Y2ViM2E4ZjNmMjg4NTRh
OGM2MjdlMGNjMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVmlld0ltcGwuaApAQCAtMCwwICsxLDczIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIENDVmlld0ltcGxfaAorI2RlZmluZSBDQ1ZpZXdJbXBsX2gKKworI2lu
Y2x1ZGUgImNjL0NDVGhyZWFkLmgiCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8v
IFByb3ZpZGVzIHNjaGVkdWxpbmcgaW5mcmFzdHVyY3R1cmUgZm9yIGEgQ0NWaWV3SW1wbAorY2xh
c3MgQ0NWaWV3SW1wbENsaWVudCA6IHB1YmxpYyBXVEY6OlRocmVhZFNhZmVSZWZDb3VudGVkPEND
Vmlld0ltcGxDbGllbnQ+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdFRhc2tPbkND
VGhyZWFkKFBhc3NPd25QdHI8Q0NUaHJlYWQ6OlRhc2s+KSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHJlcXVlc3RGcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKSA9
IDA7Cit9OworCisvLyBDQ1ZpZXdJbXBsIG93bnMgdGhlIENDTGF5ZXJJbXBsIHRyZWUgYXMgd2Vs
bCBhcyBhc3NvY2lhdGVkIHJlbmRlcmluZyBzdGF0ZQorY2xhc3MgQ0NWaWV3SW1wbCAgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKENDVmlld0ltcGwpOworcHVibGljOgorICAgIGV4cGxpY2l0
IENDVmlld0ltcGwoUGFzc1JlZlB0cjxDQ1ZpZXdJbXBsQ2xpZW50Pik7CisgICAgdmlydHVhbCB+
Q0NWaWV3SW1wbCgpOworCisgICAgdm9pZCBhZnRlckNvbW1pdCgpOworCisgICAgdm9pZCBkcmF3
TGF5ZXJzKCk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNBbmRQcmVzZW50KCkgPSAwOwor
CisgICAgaW50IGZyYW1lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZU51bWJlcjsgfQor
CisgICAgdm9pZCBzZXROZWVkc1JlZHJhdygpOworICAgIHZvaWQgc2V0TmVlZHNDb21taXRBbmRS
ZWRyYXcoKTsKKworICAgIGludCBzb3VyY2VGcmFtZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1f
c291cmNlRnJhbWVOdW1iZXI7IH0KKyAgICB2b2lkIHNldFNvdXJjZUZyYW1lTnVtYmVyKGludCBm
cmFtZU51bWJlcikgeyBtX3NvdXJjZUZyYW1lTnVtYmVyID0gZnJhbWVOdW1iZXI7IH0KKworcHJv
dGVjdGVkOgorICAgIGludCBtX3NvdXJjZUZyYW1lTnVtYmVyOworICAgIGludCBtX2ZyYW1lTnVt
YmVyOworCitwcml2YXRlOgorICAgIFJlZlB0cjxDQ1ZpZXdJbXBsQ2xpZW50PiBtX2NsaWVudDsK
KyAgICBib29sIG1fcmVkcmF3RW5xdWV1ZWQ7CisKK307CisKK307CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWV3
SW1wbFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVmlld0ltcGxQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjA3YjFiOGZjYzYzNzkwYmNjOGQ3
ODhjOGRhYTQyODQwOTk4MmYwMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlld0ltcGxQcm94eS5jcHAKQEAgLTAsMCAr
MSwxNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUg
IkNDVmlld0ltcGxQcm94eS5oIgorCisjaW5jbHVkZSAiQ0NNYWluVGhyZWFkVGFzay5oIgorI2lu
Y2x1ZGUgIkNDVGhyZWFkVGFzay5oIgorI2luY2x1ZGUgIkNDVmlldy5oIgorI2luY2x1ZGUgIlRy
YWNlRXZlbnQuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCituYW1lc3BhY2UgeworQ0NUaHJlYWQqIGNjVGhyZWFkID0gMDsKK2ludCBudW1Qcm94aWVz
ID0gMDsKK30KKworLy8gc3RhdGljCitQYXNzUmVmUHRyPENDVmlld0ltcGxQcm94eT4gQ0NWaWV3
SW1wbFByb3h5OjpjcmVhdGUoQ0NWaWV3KiB2aWV3KQoreworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgQ0NWaWV3SW1wbFByb3h5KHZpZXcpKTsKK30KKworQ0NWaWV3SW1wbFByb3h5OjpDQ1ZpZXdJ
bXBsUHJveHkoQ0NWaWV3KiB2aWV3KQorICAgIDogbV9jb21taXRQZW5kaW5nKGZhbHNlKQorICAg
ICwgbV92aWV3KHZpZXcpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBudW1Q
cm94aWVzICs9IDE7CisgICAgaWYgKCFjY1RocmVhZCkKKyAgICAgICAgY2NUaHJlYWQgPSBDQ1Ro
cmVhZDo6Y3JlYXRlKCkubGVha1B0cigpOworCisgICAgLy8gY3JlYXRlIHZpZXcgb24gdGhlIHRo
cmVhZAorICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkND
Vmlld0ltcGxQcm94eTo6Y3JlYXRlSW1wbE9uQ0NUaHJlYWQpKTsKK30KKworQ0NWaWV3SW1wbFBy
b3h5Ojp+Q0NWaWV3SW1wbFByb3h5KCkKK3sKKyAgICAvLyBUYWtlIG5vdGU6IFRoaXMgY29kZSBt
aWdodCBydW4gb24gZWl0aGVyIHRoZSBjb21wb3NpdG9yIHRocmVhZCBvciB0aGUKKyAgICAvLyBt
YWluIHRocmVhZC4KKyAgICBBU1NFUlQoIW1fdmlldyk7IC8vIHZpZXdDbG9zZWQoKSBzaG91bGQg
aGF2ZSBhbHJlYWR5IGJlZW4gY2FsbGVkLgorICAgIEFTU0VSVCghbV92aWV3SW1wbC5nZXQoKSk7
IC8vIHZpZXdDbG9zZWRPbkNDVGhyZWFkKCkgc2hvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIGNhbGxl
ZAorICAgIG51bVByb3hpZXMgLT0gMTsKKyAgICBpZiAoIW51bVByb3hpZXMpIHsKKyAgICAgICAg
ZGVsZXRlIGNjVGhyZWFkOworICAgICAgICBjY1RocmVhZCA9IDA7CisgICAgfQorfQorCit2b2lk
IENDVmlld0ltcGxQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKQoreworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKG1fY29tbWl0UGVuZGluZykKKyAgICAgICAgcmV0
dXJuOworICAgIG1fY29tbWl0UGVuZGluZyA9IHRydWU7CisgICAgY2NUaHJlYWQtPnBvc3RUYXNr
KGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NWaWV3SW1wbFByb3h5OjpzZXROZWVkc0NvbW1p
dEFuZFJlZHJhd09uQ0NUaHJlYWQpKTsKK30KKwordm9pZCBDQ1ZpZXdJbXBsUHJveHk6OnNldE5l
ZWRzUmVkcmF3KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGNjVGhyZWFk
LT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVmlld0ltcGxQcm94eTo6c2V0
TmVlZHNSZWRyYXdPbkNDVGhyZWFkKSk7Cit9CisKK3ZvaWQgQ0NWaWV3SW1wbFByb3h5Ojp2aWV3
Q2xvc2VkKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGNjVGhyZWFkLT5w
b3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVmlld0ltcGxQcm94eTo6dmlld0Ns
b3NlZE9uQ0NUaHJlYWQpKTsKK30KKwordm9pZCBDQ1ZpZXdJbXBsUHJveHk6OmNyZWF0ZUltcGxP
bkNDVGhyZWFkKCkKK3sKKyAgICBBU1NFUlQoaXNDQ1RocmVhZCgpKTsKKyAgICBtX3ZpZXdJbXBs
ID0gbV92aWV3LT5jcmVhdGVJbXBsT25DQ1RocmVhZCh0aGlzKTsKK30KKworYm9vbCBDQ1ZpZXdJ
bXBsUHJveHk6OmlzTWFpblRocmVhZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIDo6aXNNYWluVGhy
ZWFkKCk7Cit9CisKK2Jvb2wgQ0NWaWV3SW1wbFByb3h5Ojppc0NDVGhyZWFkKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gY3VycmVudFRocmVhZCgpID09IGNjVGhyZWFkLT50aHJlYWRJRCgpOworfQor
Cit2b2lkIENDVmlld0ltcGxQcm94eTo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZChk
b3VibGUgZnJhbWVCZWdpblRpbWUpCit7CisgICAgQVNTRVJUKGlzQ0NUaHJlYWQoKSk7CisgICAg
Q0NNYWluVGhyZWFkOjpwb3N0VGFzayhjcmVhdGVNYWluVGhyZWFkVGFzayh0aGlzLCAmQ0NWaWV3
SW1wbFByb3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21taXQsIGZyYW1lQmVnaW5UaW1lKSk7Cit9CisK
K3ZvaWQgQ0NWaWV3SW1wbFByb3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21taXQoZG91YmxlIGZyYW1l
QmVnaW5UaW1lKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFtX3Zp
ZXcpCisgICAgICAgIHJldHVybjsKKworICAgIFRSQUNFX0VWRU5UKCJDQ1ZpZXdJbXBsUHJveHk6
OnJlcXVlc3RGcmFtZUFuZENvbW1pdE9uTWFpblRocmVhZCIsIHRoaXMsIDApOworICAgIHsKKyAg
ICAgICAgVFJBQ0VfRVZFTlQoIkNDVmlldzo6YW5pbWF0ZUFuZExheW91dCIsIHRoaXMsIDApOwor
ICAgICAgICBtX3ZpZXctPmFuaW1hdGVBbmRMYXlvdXQoZnJhbWVCZWdpblRpbWUpOworICAgIH0K
KworICAgIG1fY29tbWl0UGVuZGluZyA9IGZhbHNlOworICAgIHsKKyAgICAgICAgVFJBQ0VfRVZF
TlQoIkNDVmlldzo6dXBkYXRlTGF5ZXJzIiwgdGhpcywgMCk7CisgICAgICAgIG1fdmlldy0+dXBk
YXRlTGF5ZXJzKCk7CisgICAgfQorCisgICAgLy8gQmxvY2tpbmcgY2FsbCB0byBDQ1ZpZXdJbXBs
UHJveHk6OnBlcmZvcm1Db21taXQKKyAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOwor
ICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVmlld0lt
cGxQcm94eTo6Y29tbWl0T25DQ1RocmVhZCwgJmNvbXBsZXRpb24pKTsKKyAgICBjb21wbGV0aW9u
LndhaXQoKTsKKworICAgIG1fdmlldy0+YWZ0ZXJDb21taXQoKTsKK30KKwordm9pZCBDQ1ZpZXdJ
bXBsUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24p
Cit7CisgICAgQVNTRVJUKGlzQ0NUaHJlYWQoKSk7CisgICAgVFJBQ0VfRVZFTlQoIkNDVmlld0lt
cGxQcm94eTo6Y29tbWl0T25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIHsKKyAgICAgICAgVFJB
Q0VfRVZFTlQoIkNDVmlldzo6Y29tbWl0IiwgdGhpcywgMCk7CisgICAgICAgIG1fdmlldy0+Y29t
bWl0KG1fdmlld0ltcGwuZ2V0KCkpOworICAgIH0KKyAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsK
KworICAgIG1fdmlld0ltcGwtPmFmdGVyQ29tbWl0KCk7Cit9CisKK3ZvaWQgQ0NWaWV3SW1wbFBy
b3h5Ojpwb3N0VGFza09uQ0NUaHJlYWQoUGFzc093blB0cjxDQ1RocmVhZDo6VGFzaz4gdGFzaykK
K3sKKyAgICBBU1NFUlQoaXNDQ1RocmVhZCgpKTsKKyAgICBjY1RocmVhZC0+cG9zdFRhc2sodGFz
ayk7Cit9CisKK3ZvaWQgQ0NWaWV3SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09u
Q0NUaHJlYWQoKQoreworICAgIG1fdmlld0ltcGwtPnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7
Cit9CisKK3ZvaWQgQ0NWaWV3SW1wbFByb3h5OjpzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQoKQor
eworICAgIG1fdmlld0ltcGwtPnNldE5lZWRzUmVkcmF3KCk7Cit9CisKK3ZvaWQgQ0NWaWV3SW1w
bFByb3h5Ojp2aWV3Q2xvc2VkT25DQ1RocmVhZCgpCit7CisgICAgQVNTRVJUKGlzQ0NUaHJlYWQo
KSk7CisgICAgbV92aWV3SW1wbC5jbGVhcigpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZXdJbXBsUHJveHkuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlld0ltcGxQ
cm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjUwNjRlNzJjZWE5NWRmOTRmZWE2MTY5M2VhMjljNDNjZGVmNmFj
MjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1ZpZXdJbXBsUHJveHkuaApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIENDVmlld0ltcGxQcm94eV9oCisjZGVmaW5lIENDVmlld0ltcGxQcm94eV9o
CisKKyNpbmNsdWRlICJjYy9DQ0NvbXBsZXRpb25FdmVudC5oIgorI2luY2x1ZGUgImNjL0NDVmll
d0ltcGwuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgQ0NWaWV3OworCitjbGFzcyBDQ1ZpZXdJbXBsUHJveHkgOiBwdWJsaWMgQ0NWaWV3
SW1wbENsaWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NWaWV3SW1wbFBy
b3h5PiBjcmVhdGUoQ0NWaWV3Kik7CisgICAgdmlydHVhbCB+Q0NWaWV3SW1wbFByb3h5KCk7CisK
KyAgICB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgdm9pZCBzZXROZWVkc1Jl
ZHJhdygpOworCisgICAgLy8gU3RvcHMgdGhlIHByb3h5IGFuZCBzY2hlZHVsZXMgaXQgdG8gYmUg
ZGVzdHJveWVkLiBBbGwgcGVuZGluZyB0YXNrcyB3aWxsCisgICAgLy8gYmUgYWJvcnRlZC4KKyAg
ICB2b2lkIHZpZXdDbG9zZWQoKTsKKworICAgIC8vIENDVmlld0ltcGxDaWVudCAtLSBjYWxsZWQg
b24gQ0NUaHJlYWQKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdFRhc2tPbkNDVGhyZWFkKFBhc3NPd25Q
dHI8Q0NUaHJlYWQ6OlRhc2s+KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdEZyYW1lQW5kQ29t
bWl0T25DQ1RocmVhZChkb3VibGUgZnJhbWVCZWdpblRpbWUpOworCitwcml2YXRlOgorICAgIGV4
cGxpY2l0IENDVmlld0ltcGxQcm94eShDQ1ZpZXcqKTsKKworICAgIGJvb2wgaXNNYWluVGhyZWFk
KCkgY29uc3Q7CisgICAgYm9vbCBpc0NDVGhyZWFkKCkgY29uc3Q7CisKKyAgICAvLyBDYWxsZWQg
b24gQ0NNYWluVGhyZWFkCisgICAgdm9pZCByZXF1ZXN0RnJhbWVBbmRDb21taXQoZG91YmxlIGZy
YW1lQmVnaW5UaW1lKTsKKworICAgIC8vIENhbGxlZCBvbiBDQ1RocmVhZAorICAgIHZvaWQgY3Jl
YXRlSW1wbE9uQ0NUaHJlYWQoKTsKKyAgICB2b2lkIGNvbW1pdE9uQ0NUaHJlYWQoQ0NDb21wbGV0
aW9uRXZlbnQqKTsKKyAgICB2b2lkIGRyYXdMYXllcnNPbkNDVGhyZWFkKCk7CisgICAgdm9pZCBz
ZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQoKTsKKyAgICB2b2lkIHNldE5lZWRzUmVk
cmF3T25DQ1RocmVhZCgpOworICAgIHZvaWQgdmlld0Nsb3NlZE9uQ0NUaHJlYWQoKTsKKworICAg
IGJvb2wgbV9jb21taXRQZW5kaW5nOworICAgIENDVmlldyogbV92aWV3OworICAgIE93blB0cjxD
Q1ZpZXdJbXBsPiBtX3ZpZXdJbXBsOworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKaW5kZXggZmMwZWVlMzMwMzVhZjU0ZTJiMzQ1NTExNTJlODlmMTk0ODE1NDcwNC4u
MmU2MGJiNGEyZDAyNzk1NzI1ZmIyYTdhZDlmODllNjRiNjBjZjg4NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3NyBAQAorMjAxMS0wNC0xMiAgTmF0IER1Y2EgIDxuZHVj
YUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgW2Nocm9taXVtXSBBZGQgQ0NWaWV3IGFzIHRocmVhZGVkIGJhc2UgY2xhc3MgZm9y
IExheWVyUmVuZGVyZXJDaHJvbWl1bQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTg0MDgKKworICAgICAgICBBZGp1c3RtZW50cyB0byBXZWJWaWV3SW1w
bCB0byBpbXBsZW1lbnQgdGhlIENDVmlld0NsaWVudCBpbnRlcmZhY2UuCisKKyAgICAgICAgKiBX
ZWJLaXQuZ3lwaToKKyAgICAgICAgKiBwdWJsaWMvV2ViV2lkZ2V0Lmg6CisgICAgICAgIChXZWJL
aXQ6OldlYldpZGdldDo6c2NoZWR1bGVDb21wb3NpdGUpOgorICAgICAgICAqIHNyYy9XZWJWaWV3
SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjphbmltYXRlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmRvQW5pbWF0ZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXdJbXBsOjpwYWludCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjphbmltYXRl
QW5kTGF5b3V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNvbXBvc2l0ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzY2hlZHVsZUNvbXBvc2l0ZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmRvQ29tcG9zaXRlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlld0ltcGw6OmNyZWF0ZVZpZXdDb250ZXh0M0QpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3SW1wbDo6cmVhbGxvY2F0ZVJlbmRlcmVyKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlld0ltcGw6OnVwZGF0ZUxheWVyUmVuZGVyZXJTZXR0aW5ncyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXdJbXBsOjp1cGRhdGVMYXllclJlbmRlcmVyVmlld3BvcnQpOgorICAgICAgICAq
IHNyYy9XZWJWaWV3SW1wbC5oOgorICAgICAgICAqIHRlc3RzL0NDVmlld1Rlc3QuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdURjo6Q0NWaWV3VGVzdDo6Q0NWaWV3VGVzdCk6CisgICAgICAgIChXVEY6
OkNDVmlld1Rlc3Q6OmFuaW1hdGVBbmRMYXlvdXQpOgorICAgICAgICAoV1RGOjpDQ1ZpZXdUZXN0
OjpkcmF3TGF5ZXJzQW5kUHJlc2VudE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ1ZpZXdU
ZXN0Ojp1cGRhdGVMYXllcnMpOgorICAgICAgICAoV1RGOjpDQ1ZpZXdUZXN0Ojpjb21taXRPbkND
VGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NWaWV3VGVzdDo6b25CZWdpblRlc3QpOgorICAgICAg
ICAoV1RGOjpDQ1ZpZXdUZXN0Ojpkb0VuZFRlc3QpOgorICAgICAgICAoV1RGOjpDQ1ZpZXdUZXN0
OjpvbkVuZFRlc3QpOgorICAgICAgICAoV1RGOjpDQ1ZpZXdUZXN0OjpydW5UZXN0KToKKyAgICAg
ICAgKFdURjo6Q0NWaWV3VGVzdDo6dGVzdFRpbWVvdXQpOgorICAgICAgICAoV1RGOjpNb2NrVmll
d0NsaWVudDo6TW9ja1ZpZXdDbGllbnQpOgorICAgICAgICAoV1RGOjpNb2NrVmlld0NsaWVudDo6
Y3JlYXRlVmlld0NvbnRleHQzRCk6CisgICAgICAgIChXVEY6Ok1vY2tWaWV3Q2xpZW50Ojphbmlt
YXRlQW5kTGF5b3V0KToKKyAgICAgICAgKFdURjo6TW9ja1ZpZXdJbXBsOjpNb2NrVmlld0ltcGwp
OgorICAgICAgICAoV1RGOjpNb2NrVmlld0ltcGw6OmRyYXdMYXllcnNBbmRQcmVzZW50KToKKyAg
ICAgICAgKFdURjo6TW9ja1ZpZXc6Ok1vY2tWaWV3KToKKyAgICAgICAgKFdURjo6TW9ja1ZpZXc6
OmNyZWF0ZUltcGxPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6TW9ja1ZpZXc6OnVwZGF0ZUxh
eWVycyk6CisgICAgICAgIChXVEY6Ok1vY2tWaWV3Ojpjb21taXQpOgorICAgICAgICAoV1RGOjpD
Q1ZpZXdUZXN0Ojpkb0JlZ2luVGVzdCk6CisgICAgICAgIChXVEY6OkNDVmlld1Rlc3Q6OmVuZFRl
c3QpOgorICAgICAgICAoV1RGOjpDQ1ZpZXdUZXN0U2hvcnRsaXZlZFZpZXcxOjpDQ1ZpZXdUZXN0
U2hvcnRsaXZlZFZpZXcxKToKKyAgICAgICAgKFdURjo6Q0NWaWV3VGVzdFNob3J0bGl2ZWRWaWV3
MTo6YmVnaW5UZXN0KToKKyAgICAgICAgKFdURjo6Q0NWaWV3VGVzdFNob3J0bGl2ZWRWaWV3MTo6
YWZ0ZXJUZXN0KToKKyAgICAgICAgKFdURjo6Q0NWaWV3VGVzdFNob3J0bGl2ZWRWaWV3Mjo6Q0NW
aWV3VGVzdFNob3J0bGl2ZWRWaWV3Mik6CisgICAgICAgIChXVEY6OkNDVmlld1Rlc3RTaG9ydGxp
dmVkVmlldzI6OmJlZ2luVGVzdCk6CisgICAgICAgIChXVEY6OkNDVmlld1Rlc3RTaG9ydGxpdmVk
VmlldzI6OmFmdGVyVGVzdCk6CisgICAgICAgIChXVEY6OkNDVmlld1Rlc3RTaG9ydGxpdmVkVmll
dzM6OkNDVmlld1Rlc3RTaG9ydGxpdmVkVmlldzMpOgorICAgICAgICAoV1RGOjpDQ1ZpZXdUZXN0
U2hvcnRsaXZlZFZpZXczOjpiZWdpblRlc3QpOgorICAgICAgICAoV1RGOjpDQ1ZpZXdUZXN0U2hv
cnRsaXZlZFZpZXczOjphZnRlclRlc3QpOgorICAgICAgICAoV1RGOjpDQ1ZpZXdUZXN0U2V0TmVl
ZHNDb21taXQxOjpDQ1ZpZXdUZXN0U2V0TmVlZHNDb21taXQxKToKKyAgICAgICAgKFdURjo6Q0NW
aWV3VGVzdFNldE5lZWRzQ29tbWl0MTo6YmVnaW5UZXN0KToKKyAgICAgICAgKFdURjo6Q0NWaWV3
VGVzdFNldE5lZWRzQ29tbWl0MTo6ZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhyZWFkKToKKyAg
ICAgICAgKFdURjo6Q0NWaWV3VGVzdFNldE5lZWRzQ29tbWl0MTo6Y29tbWl0T25DQ1RocmVhZCk6
CisgICAgICAgIChXVEY6OkNDVmlld1Rlc3RTZXROZWVkc0NvbW1pdDE6OmFmdGVyVGVzdCk6Cisg
ICAgICAgIChXVEY6OkNDVmlld1Rlc3RTZXROZWVkc0NvbW1pdDI6OkNDVmlld1Rlc3RTZXROZWVk
c0NvbW1pdDIpOgorICAgICAgICAoV1RGOjpDQ1ZpZXdUZXN0U2V0TmVlZHNDb21taXQyOjpiZWdp
blRlc3QpOgorICAgICAgICAoV1RGOjpDQ1ZpZXdUZXN0U2V0TmVlZHNDb21taXQyOjpkcmF3TGF5
ZXJzQW5kUHJlc2VudE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ1ZpZXdUZXN0U2V0TmVl
ZHNDb21taXQyOjpjb21taXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NWaWV3VGVzdFNl
dE5lZWRzQ29tbWl0Mjo6YWZ0ZXJUZXN0KToKKyAgICAgICAgKFdURjo6Q0NWaWV3VGVzdFNldE5l
ZWRzUmVkcmF3OjpDQ1ZpZXdUZXN0U2V0TmVlZHNSZWRyYXcpOgorICAgICAgICAoV1RGOjpDQ1Zp
ZXdUZXN0U2V0TmVlZHNSZWRyYXc6OmJlZ2luVGVzdCk6CisgICAgICAgIChXVEY6OkNDVmlld1Rl
c3RTZXROZWVkc1JlZHJhdzo6ZHJhd0xheWVyc0FuZFByZXNlbnQpOgorICAgICAgICAoV1RGOjpD
Q1ZpZXdUZXN0U2V0TmVlZHNSZWRyYXc6OmNvbW1pdE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RG
OjpDQ1ZpZXdUZXN0U2V0TmVlZHNSZWRyYXc6OmFmdGVyVGVzdCk6CisKIDIwMTEtMDQtMTEgIFBh
dmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IGMy
M2M5ZWRjYjQ2ODJjYjA0MGVjMzY3ZjM3YjVlYTg5ZjcxOWI3MWQuLmY4Y2VkOTNjODRkZTI5ZTM2
NmYxNjlhZjFhNTM1ODNkZWZiMTI3OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpA
QCAtNTUsNiArNTUsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL0FyZW5hVGVzdEhlbHBlcnMuaCcs
CiAgICAgICAgICAgICAndGVzdHMvQ0NUaHJlYWRUYXNrVGVzdC5jcHAnLAogICAgICAgICAgICAg
J3Rlc3RzL0NDVGhyZWFkVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0NDVmlld1Rlc3Qu
Y3BwJywKICAgICAgICAgICAgICd0ZXN0cy9EcmFnSW1hZ2VUZXN0LmNwcCcsCiAgICAgICAgICAg
ICAndGVzdHMvSURCQmluZGluZ1V0aWxpdGllc1Rlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0
cy9JREJLZXlQYXRoVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViV2lkZ2V0LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJX
aWRnZXQuaAppbmRleCAxMjkwYWQ4MTYyYjY2MjNiYzM1OWEwZmNmYzU2MzE0NGY2ZmNmNzRiLi5j
YTdjMjhkYWUyZjE4OWQ2NDI3NzExOTllZTAzM2E0ZWI1ZTA3M2VhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaApAQCAtODEsNiArODEsMTEgQEAgcHVibGljOgog
ICAgIC8vIHRoZSBwYWludCBtZXRob2QgYWJvdmUuCiAgICAgdmlydHVhbCB2b2lkIGNvbXBvc2l0
ZShib29sIGZpbmlzaCkgPSAwOwogCisgICAgLy8gSW4gdGhyZWFkZWQgY29tcG9zaXRpbmcgbW9k
ZSwgaW5kaWNhdGVzIHRoYXQgdGhlIHdpZGdldCBzaG91bGQgcmVkcmF3CisgICAgLy8gaXRzZWxm
LCBmb3IgZXhhbXBsZSBkdWUgdG8gd2luZG93IGRhbWFnZS4gVGhlIHJlZHJhdyB3aWxsIGJlZ2lu
CisgICAgLy8gYXN5bmNocm9ub3VzbHkuCisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9z
aXRlKCkgIHsgfQorCiAgICAgLy8gQ2FsbGVkIHRvIGluZm9ybSB0aGUgV2ViV2lkZ2V0IG9mIGEg
Y2hhbmdlIGluIHRoZW1lLgogICAgIC8vIEltcGxlbWVudG9ycyB0aGF0IGNhY2hlIHJlbmRlcmVk
IGNvcGllcyBvZiB3aWRnZXRzIG5lZWQgdG8gcmUtcmVuZGVyCiAgICAgLy8gb24gcmVjZWl2aW5n
IHRoaXMgbWVzc2FnZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Vmlld0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3Bw
CmluZGV4IDM2ZjIxYWY5MTY2ZmI1YTZmYjNmNGU5YzY5OTI0MTA5NzAwYWQ0MTUuLmE4ZmRlMjBk
NGNjMDc4ZTFiMGFkZmY5OGVhNTA5YzI1NjI2YjY1ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTk5MiwxMiArOTkyLDE3IEBAIHZvaWQgV2ViVmll
d0ltcGw6OnJlc2l6ZShjb25zdCBXZWJTaXplJiBuZXdTaXplKQogCiB2b2lkIFdlYlZpZXdJbXBs
OjphbmltYXRlKCkKIHsKKyAgICBkb0FuaW1hdGUoY3VycmVudFRpbWUoKSk7Cit9CisKK3ZvaWQg
V2ViVmlld0ltcGw6OmRvQW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWUpCit7CiAjaWYgRU5B
QkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQogICAgIFdlYkZyYW1lSW1wbCogd2ViZnJhbWUg
PSBtYWluRnJhbWVJbXBsKCk7CiAgICAgaWYgKHdlYmZyYW1lKSB7CiAgICAgICAgIEZyYW1lVmll
dyogdmlldyA9IHdlYmZyYW1lLT5mcmFtZVZpZXcoKTsKICAgICAgICAgaWYgKHZpZXcpCi0gICAg
ICAgICAgICB2aWV3LT5zZXJ2aWNlU2NyaXB0ZWRBbmltYXRpb25zKGNvbnZlcnRTZWNvbmRzVG9E
T01UaW1lU3RhbXAoY3VycmVudFRpbWUoKSkpOworICAgICAgICAgICAgdmlldy0+c2VydmljZVNj
cmlwdGVkQW5pbWF0aW9ucyhjb252ZXJ0U2Vjb25kc1RvRE9NVGltZVN0YW1wKGZyYW1lQmVnaW5U
aW1lKSk7CiAgICAgfQogI2VuZGlmCiB9CkBAIC0xMDY3LDYgKzEwNzIsOSBAQCB2b2lkIFdlYlZp
ZXdJbXBsOjpwYWludChXZWJDYW52YXMqIGNhbnZhcywgY29uc3QgV2ViUmVjdCYgcmVjdCkKIHsK
ICAgICBpZiAoaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpIHsKICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAg
ICAgICByZXR1cm47CisjZW5kaWYKICAgICAgICAgZG9Db21wb3NpdGUoKTsKIAogICAgICAgICAv
LyBJZiBhIGNhbnZhcyB3YXMgcGFzc2VkIGluLCB3ZSB1c2UgaXQgdG8gZ3JhYiBhIGNvcHkgb2Yg
dGhlCkBAIC0xMDk1LDkgKzExMDMsMTkgQEAgdm9pZCBXZWJWaWV3SW1wbDo6dGhlbWVDaGFuZ2Vk
KCkKICAgICB2aWV3LT5pbnZhbGlkYXRlUmVjdChkYW1hZ2VkUmVjdCk7CiB9CiAKKwordm9pZCBX
ZWJWaWV3SW1wbDo6YW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpCit7Cisg
ICAgZG9BbmltYXRlKGZyYW1lQmVnaW5UaW1lKTsKKyAgICBsYXlvdXQoKTsKK30KKwogdm9pZCBX
ZWJWaWV3SW1wbDo6Y29tcG9zaXRlKGJvb2wgZmluaXNoKQogewogI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKKyNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgcmV0dXJu
OyAvLyBGSVhNRTogd2hlbiB0aGUgUmVuZGVyV2lkZ2V0IGlzIHVwZGF0ZWQsIHN3aXRjaCB0byBB
U1NFUlRfTk9UX1JFQUNIRUQuCisjZWxzZQogICAgIFRSQUNFX0VWRU5UKCJXZWJWaWV3SW1wbDo6
Y29tcG9zaXRlIiwgdGhpcywgMCk7CiAgICAgaWYgKG1fcmVjcmVhdGluZ0dyYXBoaWNzQ29udGV4
dCkgewogICAgICAgICAvLyByZWFsbG9jYXRlUmVuZGVyZXIgd2lsbCByZXF1ZXN0IGEgcmVwYWlu
dCB3aGV0aGVyIG9yIG5vdCBpdCBzdWNjZWVkZWQKQEAgLTExMjcsNiArMTE0NSw3IEBAIHZvaWQg
V2ViVmlld0ltcGw6OmNvbXBvc2l0ZShib29sIGZpbmlzaCkKICAgICAgICAgc2V0Um9vdExheWVy
TmVlZHNEaXNwbGF5KCk7CiAgICAgfQogI2VuZGlmCisjZW5kaWYKIH0KIAogY29uc3QgV2ViSW5w
dXRFdmVudCogV2ViVmlld0ltcGw6Om1fY3VycmVudElucHV0RXZlbnQgPSAwOwpAQCAtMjM0MSw5
ICsyMzYwLDI0IEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldFJvb3RHcmFwaGljc0xheWVyKFdlYkNv
cmU6OlBsYXRmb3JtTGF5ZXIqIGxheWVyKQogICAgICAgICBtX2NsaWVudC0+ZGlkSW52YWxpZGF0
ZVJlY3QoZGFtYWdlZFJlY3QpOwogfQogCit2b2lkIFdlYlZpZXdJbXBsOjpzY2hlZHVsZUNvbXBv
c2l0ZSgpCit7CisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgIGlmIChtX2xheWVy
UmVuZGVyZXIuZ2V0KCkpCisgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+c2V0TmVlZHNSZWRyYXco
KTsKKyNlbHNlCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKK30KKwogdm9pZCBX
ZWJWaWV3SW1wbDo6c2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCkKIHsKKyNpZiBVU0UoVEhSRUFE
RURfQ09NUE9TSVRJTkcpCisgICAgaWYgKG1fbGF5ZXJSZW5kZXJlci5nZXQoKSkKKyAgICAgICAg
bV9sYXllclJlbmRlcmVyLT5zZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOworI2Vsc2UKICAgICBt
X2NsaWVudC0+c2NoZWR1bGVDb21wb3NpdGUoKTsKKyNlbmRpZgogfQogCiAKQEAgLTI0NDQsMTQg
KzI0NzgsMTAgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5n
QWN0aXZlKGJvb2wgYWN0aXZlKQogCiAgICAgICAgIG1fY2xpZW50LT5kaWRBY3RpdmF0ZUFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmcodHJ1ZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgUmVmUHRyPEdy
YXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gbV90ZW1wb3JhcnlPbnNjcmVlbkdyYXBoaWNzQ29u
dGV4dDNELnJlbGVhc2UoKTsKLSAgICAgICAgaWYgKCFjb250ZXh0KSB7Ci0gICAgICAgICAgICBj
b250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShnZXRDb21wb3NpdG9yQ29udGV4dEF0
dHJpYnV0ZXMoKSwgbV9wYWdlLT5jaHJvbWUoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRp
cmVjdGx5VG9Ib3N0V2luZG93KTsKLSAgICAgICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlc2hhcGUoc3RkOjptYXgoMSwgbV9zaXplLndpZHRoKSwgc3RkOjpt
YXgoMSwgbV9zaXplLmhlaWdodCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9sYXllclJlbmRl
cmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUoY29udGV4dC5yZWxlYXNlKCksIFdl
YlZpZXdJbXBsQ29udGVudFBhaW50ZXI6OmNyZWF0ZSh0aGlzKSwgV2ViVmlld0ltcGxTY3JvbGxi
YXJQYWludGVyOjpjcmVhdGUodGhpcykpOworICAgICAgICBtX2xheWVyUmVuZGVyZXIgPSBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCBXZWJWaWV3SW1wbENvbnRlbnRQYWludGVy
OjpjcmVhdGUodGhpcyksIFdlYlZpZXdJbXBsU2Nyb2xsYmFyUGFpbnRlcjo6Y3JlYXRlKHRoaXMp
KTsKKyNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgICAgIHVwZGF0ZUxheWVyUmVu
ZGVyZXJTZXR0aW5ncygpOworI2VuZGlmCiAgICAgICAgIGlmIChtX2xheWVyUmVuZGVyZXIpIHsK
ICAgICAgICAgICAgIG1fY2xpZW50LT5kaWRBY3RpdmF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmco
dHJ1ZSk7CiAgICAgICAgICAgICBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSA9IHRy
dWU7CkBAIC0yNDc4LDIxICsyNTA4LDI5IEBAIHZvaWQgV2ViVmlld0ltcGw6OmRvQ29tcG9zaXRl
KCkKICAgICBpZiAoIXBhZ2UoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9sYXllclJlbmRl
cmVyLT5zZXRDb21wb3NpdGVPZmZzY3JlZW4oc2V0dGluZ3MoKS0+Y29tcG9zaXRlVG9UZXh0dXJl
RW5hYmxlZCgpKTsKLQotICAgIENDSGVhZHNVcERpc3BsYXkqIGh1ZCA9IG1fbGF5ZXJSZW5kZXJl
ci0+aGVhZHNVcERpc3BsYXkoKTsKLSAgICBodWQtPnNldFNob3dGUFNDb3VudGVyKHNldHRpbmdz
KCktPnNob3dGUFNDb3VudGVyKCkpOwotICAgIGh1ZC0+c2V0U2hvd1BsYXRmb3JtTGF5ZXJUcmVl
KHNldHRpbmdzKCktPnNob3dQbGF0Zm9ybUxheWVyVHJlZSgpKTsKKyAgICB1cGRhdGVMYXllclJl
bmRlcmVyU2V0dGluZ3MoKTsKKyAgICBtX2xheWVyUmVuZGVyZXItPnVwZGF0ZUxheWVycygpOwor
ICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVycygpOworfQogCi0gICAgbV9sYXllclJlbmRl
cmVyLT51cGRhdGVBbmREcmF3TGF5ZXJzKCk7CitQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiBXZWJWaWV3SW1wbDo6Y3JlYXRlVmlld0NvbnRleHQzRCgpCit7CisgICAgUmVmUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiBjb250ZXh0ID0gbV90ZW1wb3JhcnlPbnNjcmVlbkdyYXBoaWNzQ29udGV4
dDNELnJlbGVhc2UoKTsKKyAgICBpZiAoIWNvbnRleHQpIHsKKyAgICAgICAgY29udGV4dCA9IEdy
YXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoZ2V0Q29tcG9zaXRvckNvbnRleHRBdHRyaWJ1dGVzKCks
IG1fcGFnZS0+Y2hyb21lKCksIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9z
dFdpbmRvdyk7CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICAgICAgY29udGV4dC0+cmVz
aGFwZShzdGQ6Om1heCgxLCBtX3NpemUud2lkdGgpLCBzdGQ6Om1heCgxLCBtX3NpemUuaGVpZ2h0
KSk7CisgICAgfQorICAgIHJldHVybiBjb250ZXh0OwogfQogCiB2b2lkIFdlYlZpZXdJbXBsOjpy
ZWFsbG9jYXRlUmVuZGVyZXIoKQogewotICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbmV3
Q29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoCi0gICAgICAgICAgICBnZXRDb21w
b3NpdG9yQ29udGV4dEF0dHJpYnV0ZXMoKSwgbV9wYWdlLT5jaHJvbWUoKSwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKICAgICAvLyBHcmFwaGljc0NvbnRl
eHQzRDo6Y3JlYXRlIG1pZ2h0IGZhaWwgYW5kIHJldHVybiAwLCBpbiB0aGF0IGNhc2UgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpjcmVhdGUgd2lsbCBhbHNvIHJldHVybiAwLgotICAgIFJlZlB0cjxM
YXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmNyZWF0ZShuZXdDb250ZXh0LCBXZWJWaWV3SW1wbENvbnRlbnRQYWludGVyOjpjcmVhdGUo
dGhpcyksIFdlYlZpZXdJbXBsU2Nyb2xsYmFyUGFpbnRlcjo6Y3JlYXRlKHRoaXMpKTsKKyAgICBS
ZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpjcmVhdGUodGhpcywgV2ViVmlld0ltcGxDb250ZW50UGFpbnRlcjo6Y3JlYXRl
KHRoaXMpLCBXZWJWaWV3SW1wbFNjcm9sbGJhclBhaW50ZXI6OmNyZWF0ZSh0aGlzKSk7CisjaWYg
VVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgIHVwZGF0ZUxheWVyUmVuZGVyZXJTZXR0aW5n
cygpOworI2VuZGlmCiAKICAgICAvLyBSZWF0dGFjaCB0aGUgcm9vdCBsYXllci4gIENoaWxkIGxh
eWVycyB3aWxsIGdldCByZWF0dGFjaGVkIGFzIGEgc2lkZSBlZmZlY3Qgb2YgdXBkYXRlTGF5ZXJz
UmVjdXJzaXZlLgogICAgIGlmIChsYXllclJlbmRlcmVyKSB7CkBAIC0yNTAzLDcgKzI1NDEsNyBA
QCB2b2lkIFdlYlZpZXdJbXBsOjpyZWFsbG9jYXRlUmVuZGVyZXIoKQogICAgICAgICAvLyByZXNo
YXBlIHNob3VsZCByZWFsbHkgYmUgZXh0cmFjdGVkIGludG8gb25lIGZ1bmN0aW9uOyBpdCBpcyBu
b3QKICAgICAgICAgLy8gaW1tZWRpYXRlbHkgb2J2aW91cyB0aGF0IEdyYXBoaWNzQ29udGV4dDNE
IG9iamVjdCB3aWxsIG5vdAogICAgICAgICAvLyBmdW5jdGlvbiBwcm9wZXJseSB1bnRpbCBpdHMg
cmVzaGFwZSBtZXRob2QgaXMgY2FsbGVkLgotICAgICAgICBuZXdDb250ZXh0LT5yZXNoYXBlKHN0
ZDo6bWF4KDEsIG1fc2l6ZS53aWR0aCksIHN0ZDo6bWF4KDEsIG1fc2l6ZS5oZWlnaHQpKTsKKyAg
ICAgICAgbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpLT5yZXNoYXBlKHN0ZDo6bWF4KDEsIG1fc2l6
ZS53aWR0aCksIHN0ZDo6bWF4KDEsIG1fc2l6ZS5oZWlnaHQpKTsKICAgICAgICAgc2V0Um9vdEdy
YXBoaWNzTGF5ZXIobV9sYXllclJlbmRlcmVyLT5yb290TGF5ZXIoKSk7CiAgICAgICAgIC8vIEZv
cmNlcyBWaWV3SG9zdE1zZ19EaWRBY3RpdmF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcgdG8gYmUg
c2VudCBzbwogICAgICAgICAvLyB0aGF0IHRoZSBicm93c2VyIHByb2Nlc3MgY2FuIHJlYWNxdWly
ZSBzdXJmYWNlcy4KQEAgLTI1MTMsOSArMjU1MSwyMiBAQCB2b2lkIFdlYlZpZXdJbXBsOjpyZWFs
bG9jYXRlUmVuZGVyZXIoKQogfQogI2VuZGlmCiAKK3ZvaWQgV2ViVmlld0ltcGw6OnVwZGF0ZUxh
eWVyUmVuZGVyZXJTZXR0aW5ncygpCit7CisgICAgaWYgKCFtX2xheWVyUmVuZGVyZXIpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fbGF5ZXJSZW5kZXJlci0+c2V0Q29tcG9zaXRlT2Zmc2NyZWVu
KHNldHRpbmdzKCktPmNvbXBvc2l0ZVRvVGV4dHVyZUVuYWJsZWQoKSk7CisKKyAgICBDQ0hlYWRz
VXBEaXNwbGF5KiBodWQgPSBtX2xheWVyUmVuZGVyZXItPmhlYWRzVXBEaXNwbGF5KCk7CisgICAg
aHVkLT5zZXRTaG93RlBTQ291bnRlcihzZXR0aW5ncygpLT5zaG93RlBTQ291bnRlcigpKTsKKyAg
ICBodWQtPnNldFNob3dQbGF0Zm9ybUxheWVyVHJlZShzZXR0aW5ncygpLT5zaG93UGxhdGZvcm1M
YXllclRyZWUoKSk7Cit9CisKIHZvaWQgV2ViVmlld0ltcGw6OnVwZGF0ZUxheWVyUmVuZGVyZXJW
aWV3cG9ydCgpCiB7Ci0gICAgQVNTRVJUKG1fbGF5ZXJSZW5kZXJlcik7CisgICAgaWYgKCFtX2xh
eWVyUmVuZGVyZXIpCisgICAgICAgIHJldHVybjsKIAogICAgIGlmICghcGFnZSgpKQogICAgICAg
ICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3
SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAppbmRleCAw
NjAyN2VhYWM0M2QxNDAzMmUzMDAwYzhmYjU4MmY2MmQxZGZkODEyLi5iM2QwYjYwYTkxZTlkMGFm
N2Y5ZjdmYTA2ZWVjM2U3MTUzNDU1ZjA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJWaWV3SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmgKQEAgLTU1LDYgKzU1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
Q2hyb21pdW1EYXRhT2JqZWN0OwogY2xhc3MgRG9jdW1lbnRMb2FkZXI7CiBjbGFzcyBGcmFtZTsK
K2NsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogY2xhc3MgSGlzdG9yeUl0ZW07CiBjbGFzcyBIaXRU
ZXN0UmVzdWx0OwogY2xhc3MgS2V5Ym9hcmRFdmVudDsKQEAgLTg2LDcgKzg3LDcgQEAgY2xhc3Mg
V2ViTW91c2VXaGVlbEV2ZW50OwogY2xhc3MgV2ViU2V0dGluZ3NJbXBsOwogY2xhc3MgV2ViVG91
Y2hFdmVudDsKIAotY2xhc3MgV2ViVmlld0ltcGwgOiBwdWJsaWMgV2ViVmlldywgcHVibGljIFJl
ZkNvdW50ZWQ8V2ViVmlld0ltcGw+IHsKK2NsYXNzIFdlYlZpZXdJbXBsIDogcHVibGljIFdlYlZp
ZXcsIHB1YmxpYyBXZWJDb3JlOjpDQ1ZpZXdDbGllbnQsIHB1YmxpYyBSZWZDb3VudGVkPFdlYlZp
ZXdJbXBsPiB7CiBwdWJsaWM6CiAgICAgLy8gV2ViV2lkZ2V0IG1ldGhvZHM6CiAgICAgdmlydHVh
bCB2b2lkIGNsb3NlKCk7CkBAIC05Nyw2ICs5OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgcGFpbnQoV2ViQ2FudmFzKiwgY29uc3QgV2ViUmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCB0
aGVtZUNoYW5nZWQoKTsKICAgICB2aXJ0dWFsIHZvaWQgY29tcG9zaXRlKGJvb2wgZmluaXNoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGUoKTsKICAgICB2aXJ0dWFsIGJvb2wg
aGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50Jik7CiAgICAgdmlydHVhbCB2b2lk
IG1vdXNlQ2FwdHVyZUxvc3QoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoYm9vbCBlbmFi
bGUpOwpAQCAtMjAxLDYgKzIwMywxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbmFjdGl2ZUZvcmVncm91bmRDb2xvcik7CiAgICAgdmly
dHVhbCB2b2lkIHBlcmZvcm1DdXN0b21Db250ZXh0TWVudUFjdGlvbih1bnNpZ25lZCBhY3Rpb24p
OwogCisgICAgLy8gQ0NWaWV3Q2xpZW50CisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVBbmRMYXlv
dXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEPiBjcmVhdGVWaWV3Q29udGV4dDNEKCk7CisKKwogICAgIC8vIFdlYlZpZXdJ
bXBsCiAKICAgICB2b2lkIHNldElnbm9yZUlucHV0RXZlbnRzKGJvb2wgbmV3VmFsdWUpOwpAQCAt
MzQ0LDYgKzM1MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFJvb3RMYXllck5lZWRzRGlzcGxh
eSgpOwogICAgIHZvaWQgc2Nyb2xsUm9vdExheWVyUmVjdChjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JiBzY3JvbGxEZWx0YSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpOwogICAgIHZv
aWQgaW52YWxpZGF0ZVJvb3RMYXllclJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAg
IHZvaWQgZG9VcGRhdGVBbmRDb21wb3NpdGUoKTsKICNlbmRpZgogCiAgICAgLy8gUmV0dXJucyB0
aGUgb25zY3JlZW4gM0QgY29udGV4dCB1c2VkIGJ5IHRoZSBjb21wb3NpdG9yLiBUaGlzIGlzCkBA
IC00MDcsMTEgKzQxNSwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJQb2ludCYgc2NyZWVuUG9pbnQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERyYWdBY3Rpb24pOwogCisg
ICAgdm9pZCBkb0FuaW1hdGUoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKKwogI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKICAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0FjdGl2ZShib29sKTsKICAgICB2b2lkIGRvQ29tcG9zaXRlKCk7CiAgICAgdm9pZCBkb1BpeGVs
UmVhZGJhY2tUb0NhbnZhcyhXZWJDYW52YXMqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CiAg
ICAgdm9pZCByZWFsbG9jYXRlUmVuZGVyZXIoKTsKKyAgICB2b2lkIHVwZGF0ZUxheWVyUmVuZGVy
ZXJTZXR0aW5ncygpOwogICAgIHZvaWQgdXBkYXRlTGF5ZXJSZW5kZXJlclZpZXdwb3J0KCk7CiAj
ZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1ZpZXdU
ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NWaWV3VGVzdC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uOGM5ZjMxZGZkNWRkNjA5ZGY0MzMxZDAzZmIyNWQyNjMwZWFjMTg2NQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NWaWV3VGVzdC5jcHAK
QEAgLTAsMCArMSwzOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2luY2x1ZGUgImNjL0NDVmlldy5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIK
KyNpbmNsdWRlICJjYy9DQ01haW5UaHJlYWRUYXNrLmgiCisjaW5jbHVkZSAiY2MvQ0NUaHJlYWRU
YXNrLmgiCisjaW5jbHVkZSAiY2MvQ0NWaWV3SW1wbC5oIgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0
Lmg+CisjaW5jbHVkZSA8d2Via2l0L3N1cHBvcnQvd2Via2l0X3N1cHBvcnQuaD4KKyNpbmNsdWRl
IDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFt
ZXNwYWNlIFdURjsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgTW9ja1ZpZXdDbGllbnQ7CitjbGFz
cyBNb2NrVmlldzsKK2NsYXNzIE1vY2tWaWV3SW1wbDsKKworLy8gVGhlIENDVmlld1Rlc3QgcnVu
cyB3aXRoIHRoZSBtYWluIGxvb3AgcnVubmluZy4gSXQgaW5zdGFudGlhdGVzIGEgc2luZ2xlIE1v
Y2tWaWV3IGFuZCBhc3NvY2lhdGVkCisvLyBNb2NrVmlld0ltcGwvTW9ja1ZpZXdDbGllbnQuCisv
LworLy8gYmVnaW5UZXN0KCkgaXMgY2FsbGVkIG9uY2UgdGhlIG1haW4gbWVzc2FnZSBsb29wIGlz
IHJ1bm5pbmcgYW5kIHRoZSB2aWV3IGlzIGluaXRpYWxpemVkLgorLy8KKy8vIEtleSBzdGFnZXMg
b2YgdGhlIGRyYXdpbmcgbG9vcCwgZS5nLiBkcmF3aW5nIG9yIGNvbW1pdGluZywgcmVkaXJlY3Qg
dG8gQ0NWaWV3VGVzdCBtZXRob2RzIG9mIHNpbWlsYXIgbmFtZXMuCisvLyBUbyB0cmFjayB0aGUg
Y29tbWl0IHByb2Nlc3MsIG92ZXJyaWRlIHRoZXNlIGZ1bmN0aW9ucy4KKy8vCisvLyBUaGUgdGVz
dCBjb250aW51ZXMgdW50aWwgc29tZW9uZSBjYWxscyBlbmRUZXN0LiBlbmRUZXN0IGNhbiBiZSBj
YWxsZWQgb24gYW55IHRocmVhZCwgYnV0IGJlIGF3YXJlIHRoYXQKKy8vIGVuZGluZyB0aGUgdGVz
dCBpcyBhbiBhc3luY2hyb25vdXMgcHJvY2Vzcy4KK2NsYXNzIENDVmlld1Rlc3QgOiBwdWJsaWMg
dGVzdGluZzo6VGVzdCB7CitwdWJsaWM6CisgICAgQ0NWaWV3VGVzdCgpCisgICAgICAgIDogbV9i
ZWdpbm5pbmcoZmFsc2UpCisgICAgICAgICwgbV9lbmRXaGVuQmVnaW5SZXR1cm5zKGZhbHNlKQor
ICAgICAgICAsIG1fcnVubmluZyhmYWxzZSkKKyAgICAgICAgLCBtX3RpbWVkT3V0KGZhbHNlKSB7
IH0KKworICAgIHZpcnR1YWwgdm9pZCBhZnRlclRlc3QoKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZv
aWQgYmVnaW5UZXN0KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KE1v
Y2tWaWV3Q2xpZW50KiB2aWV3LCBkb3VibGUgZnJhbWVCZWdpblRpbWUpIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBkcmF3TGF5ZXJzQW5kUHJlc2VudE9uQ0NUaHJlYWQoTW9ja1ZpZXdJbXBsKiB2aWV3
SW1wbCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUxheWVycyhNb2NrVmlldyogdmlldykg
eyB9CisgICAgdmlydHVhbCB2b2lkIGNvbW1pdE9uQ0NUaHJlYWQoTW9ja1ZpZXcqIHZpZXcsIE1v
Y2tWaWV3SW1wbCogdmlld0ltcGwpIHsgfQorCisgICAgdm9pZCBlbmRUZXN0KCk7CisKK3Byb3Rl
Y3RlZDoKKyAgICB2b2lkIGRvQmVnaW5UZXN0KCk7CisKKyAgICBzdGF0aWMgdm9pZCBvbkJlZ2lu
VGVzdCh2b2lkKiBzZWxmKQorICAgIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8Q0NWaWV3VGVzdCo+
KHNlbGYpLT5kb0JlZ2luVGVzdCgpOworICAgIH0KKworICAgIHZvaWQgZG9FbmRUZXN0KCkKKyAg
ICB7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgb25FbmRUZXN0KHZvaWQqIHNlbGYpCisgICAg
eworICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgICAgICBDQ1ZpZXdUZXN0KiB0
ZXN0ID0gc3RhdGljX2Nhc3Q8Q0NWaWV3VGVzdCo+KHNlbGYpOworICAgICAgICB0ZXN0LT5tX3Zp
ZXcuY2xlYXIoKTsKKyAgICAgICAgdGVzdC0+bV9jbGllbnQuY2xlYXIoKTsKKyAgICAgICAgd2Vi
a2l0X3N1cHBvcnQ6OlF1aXRNZXNzYWdlTG9vcCgpOworICAgIH0KKworICAgIHZvaWQgcnVuVGVz
dCgpCisgICAgeworICAgICAgICB3ZWJraXRfc3VwcG9ydDo6UG9zdERlbGF5ZWRUYXNrKENDVmll
d1Rlc3Q6Om9uQmVnaW5UZXN0LCAodm9pZCopdGhpcywgMCk7CisgICAgICAgIHdlYmtpdF9zdXBw
b3J0OjpQb3N0RGVsYXllZFRhc2soQ0NWaWV3VGVzdDo6dGVzdFRpbWVvdXQsICh2b2lkKil0aGlz
LCA1MDAwKTsKKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlJ1bk1lc3NhZ2VMb29wKCk7CisgICAg
ICAgIG1fcnVubmluZyA9IGZhbHNlOworICAgICAgICB3ZWJraXRfc3VwcG9ydDo6UnVuQWxsUGVu
ZGluZ01lc3NhZ2VzKCk7CisgICAgICAgIGlmIChtX3RpbWVkT3V0KSB7CisgICAgICAgICAgICBw
cmludGYoIlRlc3QgdGltZWQgb3V0Iik7CisgICAgICAgICAgICBGQUlMKCkgPDwgIlRlc3QgdGlt
ZWQgb3V0IjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBhZnRlclRl
c3QoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCB0ZXN0VGltZW91dCh2b2lkKiBzZWxmKQor
ICAgIHsKKyAgICAgICAgQ0NWaWV3VGVzdCogdGVzdCA9IHN0YXRpY19jYXN0PENDVmlld1Rlc3Qq
PihzZWxmKTsKKyAgICAgICAgaWYgKCF0ZXN0LT5tX3J1bm5pbmcpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIHRlc3QtPm1fdGltZWRPdXQgPSB0cnVlOworICAgICAgICB0ZXN0LT5lbmRU
ZXN0KCk7CisgICAgfQorCisgICAgTXV0ZXggbV90cmFjZXNMb2NrOworICAgIFZlY3RvcjxzdGQ6
OnN0cmluZz4gbV90cmFjZXM7CisKKyAgICBPd25QdHI8TW9ja1ZpZXdDbGllbnQ+IG1fY2xpZW50
OworICAgIFJlZlB0cjxNb2NrVmlldz4gbV92aWV3OworCitwcml2YXRlOgorICAgIGJvb2wgbV9i
ZWdpbm5pbmc7CisgICAgYm9vbCBtX2VuZFdoZW5CZWdpblJldHVybnM7CisgICAgYm9vbCBtX3J1
bm5pbmc7CisgICAgYm9vbCBtX3RpbWVkT3V0OworfTsKKworI2RlZmluZSBDQ19WSUVXX1RFU1Qo
dGVzdENhc2VOYW1lKSBcCitURVNUX0YodGVzdENhc2VOYW1lLCBydW4pXAore1wKKyAgICBydW5U
ZXN0KCk7XAorfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworY2xhc3MgTW9ja1ZpZXdDbGllbnQg
OiBwdWJsaWMgQ0NWaWV3Q2xpZW50IHsKK3B1YmxpYzoKKyAgICBNb2NrVmlld0NsaWVudChDQ1Zp
ZXdUZXN0KiB0ZXN0KSA6IG1fdGVzdCh0ZXN0KSB7IH0KKworICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlVmlld0NvbnRleHQzRCgpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKEdyYXBoaWNzQ29udGV4dDNEKikwKTsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgYW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpCisgICAg
eworICAgICAgICBtX3Rlc3QtPmFuaW1hdGVBbmRMYXlvdXQodGhpcywgZnJhbWVCZWdpblRpbWUp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBDQ1ZpZXdUZXN0KiBtX3Rlc3Q7Cit9OworCitjbGFz
cyBNb2NrVmlld0ltcGwgOiBwdWJsaWMgQ0NWaWV3SW1wbCB7CitwdWJsaWM6CisgICAgTW9ja1Zp
ZXdJbXBsKENDVmlld0ltcGxDbGllbnQqIGNsaWVudCwgQ0NWaWV3VGVzdCogdGVzdCkKKyAgICAg
ICAgICAgIDogQ0NWaWV3SW1wbChjbGllbnQpCisgICAgICAgICAgICAsIG1fdGVzdCh0ZXN0KQor
ICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVyc0FuZFByZXNlbnQoKQor
ICAgIHsKKyAgICAgICAgbV90ZXN0LT5kcmF3TGF5ZXJzQW5kUHJlc2VudE9uQ0NUaHJlYWQodGhp
cyk7CisgICAgfQorCitwcml2YXRlOgorICAgIENDVmlld1Rlc3QqIG1fdGVzdDsKK307CisKK2Ns
YXNzIE1vY2tWaWV3IDogcHVibGljIENDVmlldyB7CitwdWJsaWM6CisgICAgTW9ja1ZpZXcoQ0NW
aWV3Q2xpZW50KiBjbGllbnQsIENDVmlld1Rlc3QqIHRlc3QpIDogQ0NWaWV3KGNsaWVudCksIG1f
dGVzdCh0ZXN0KSB7IH0KKworICAgIFBhc3NPd25QdHI8Q0NWaWV3SW1wbD4gY3JlYXRlSW1wbE9u
Q0NUaHJlYWQoQ0NWaWV3SW1wbENsaWVudCogY2xpZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBNb2NrVmlld0ltcGwoY2xpZW50LCBtX3Rlc3QpKTsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlTGF5ZXJzKCkKKyAgICB7CisgICAgICAgIG1fdGVzdC0+dXBk
YXRlTGF5ZXJzKHRoaXMpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBjb21taXQoQ0NWaWV3
SW1wbCogaW1wbCkKKyAgICB7CisgICAgICAgIENDVmlldzo6Y29tbWl0KGltcGwpOworICAgICAg
ICBtX3Rlc3QtPmNvbW1pdE9uQ0NUaHJlYWQodGhpcywgc3RhdGljX2Nhc3Q8TW9ja1ZpZXdJbXBs
Kj4oaW1wbCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDQ1ZpZXdUZXN0KiBtX3Rlc3Q7Cit9
OworCit2b2lkIENDVmlld1Rlc3Q6OmRvQmVnaW5UZXN0KCkKK3sKKyAgICBBU1NFUlQoIW1fcnVu
bmluZyk7CisgICAgbV9ydW5uaW5nID0gdHJ1ZTsKKyAgICBtX2NsaWVudCA9IGFkb3B0UHRyKG5l
dyBNb2NrVmlld0NsaWVudCh0aGlzKSk7CisgICAgbV92aWV3ID0gYWRvcHRSZWYobmV3IE1vY2tW
aWV3KG1fY2xpZW50LmdldCgpLCB0aGlzKSk7CisgICAgbV9iZWdpbm5pbmcgPSB0cnVlOworICAg
IGJlZ2luVGVzdCgpOworICAgIG1fYmVnaW5uaW5nID0gZmFsc2U7CisgICAgaWYgKG1fZW5kV2hl
bkJlZ2luUmV0dXJucykKKyAgICAgICAgb25FbmRUZXN0KCh2b2lkKil0aGlzKTsKK30KKwordm9p
ZCBDQ1ZpZXdUZXN0OjplbmRUZXN0KCkKK3sKKyAgICAvLyBJZiB3ZSBhcmUgY2FsbGVkIGZyb20g
dGhlIENDVGhyZWFkLCByZS1jYWxsIGVuZFRlc3Qgb24gdGhlIG1haW4gdGhyZWFkLgorICAgIGlm
ICghaXNNYWluVGhyZWFkKCkpCisgICAgICAgIENDTWFpblRocmVhZDo6cG9zdFRhc2soY3JlYXRl
TWFpblRocmVhZFRhc2sodGhpcywgJkNDVmlld1Rlc3Q6OmVuZFRlc3QpKTsKKyAgICBlbHNlIHsK
KyAgICAgICAgLy8gRm9yIHRoZSBjYXNlIHdoZXJlIHdlIGVuZFRlc3QgZHVyaW5nIGJlZ2luVGVz
dCgpLCBzZXQgYSBmbGFnIHRvIGluZGljYXRlIHRoYXQKKyAgICAgICAgLy8gdGhlIHRlc3Qgc2hv
dWxkIGVuZCB0aGUgc2Vjb25kIGJlZ2luVGVzdCByZWdhaW5zIGNvbnRyb2wuCisgICAgICAgIGlm
IChtX2JlZ2lubmluZykKKyAgICAgICAgICAgIG1fZW5kV2hlbkJlZ2luUmV0dXJucyA9IHRydWU7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG9uRW5kVGVzdCgodm9pZCopdGhpcyk7CisgICAg
fQorfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8gU2hvcnRsaXZlZCB2aWV3cyBzaG91ZG4n
dCBkaWUKK2NsYXNzIENDVmlld1Rlc3RTaG9ydGxpdmVkVmlldzEgOiBwdWJsaWMgQ0NWaWV3VGVz
dCB7CitwdWJsaWM6CisgICAgQ0NWaWV3VGVzdFNob3J0bGl2ZWRWaWV3MSgpIHt9CisKKyAgICB2
aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkKKyAgICB7CisgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkKKyAgICB7CisgICAgfQorfTsKK0NDX1ZJ
RVdfVEVTVChDQ1ZpZXdUZXN0U2hvcnRsaXZlZFZpZXcxKTsKKworLy8gU2hvcnRsaXZlZCB2aWV3
cyBzaG91ZG4ndCBkaWUgd2l0aCBhIGNvbW1pdCBpbiBmbGlnaHQKK2NsYXNzIENDVmlld1Rlc3RT
aG9ydGxpdmVkVmlldzIgOiBwdWJsaWMgQ0NWaWV3VGVzdCB7CitwdWJsaWM6CisgICAgQ0NWaWV3
VGVzdFNob3J0bGl2ZWRWaWV3MigpIHt9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkK
KyAgICB7CisgICAgICAgIG1fdmlldy0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICAg
ICAgZW5kVGVzdCgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhZnRlclRlc3QoKQorICAg
IHsKKyAgICB9Cit9OworQ0NfVklFV19URVNUKENDVmlld1Rlc3RTaG9ydGxpdmVkVmlldzIpOwor
CisvLyBTaG9ydGxpdmVkIHZpZXdzIHNob3Vkbid0IGRpZSB3aXRoIGEgcmVkcmF3IGluIGZsaWdo
dAorY2xhc3MgQ0NWaWV3VGVzdFNob3J0bGl2ZWRWaWV3MyA6IHB1YmxpYyBDQ1ZpZXdUZXN0IHsK
K3B1YmxpYzoKKyAgICBDQ1ZpZXdUZXN0U2hvcnRsaXZlZFZpZXczKCkge30KKworICAgIHZpcnR1
YWwgdm9pZCBiZWdpblRlc3QoKQorICAgIHsKKyAgICAgICAgbV92aWV3LT5zZXROZWVkc1JlZHJh
dygpOworICAgICAgICBlbmRUZXN0KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFmdGVy
VGVzdCgpCisgICAgeworICAgIH0KK307CitDQ19WSUVXX1RFU1QoQ0NWaWV3VGVzdFNob3J0bGl2
ZWRWaWV3Myk7CisKKworLy8gVHdvIHNldE5lZWRzQ29tbWl0cyBpbiBhIHJvdyBzaG91bGQgbGVh
ZCB0byBhdCBsZWFzdCAxIGNvbW1pdCBhbmQgYXQgbGVhc3QgMQorLy8gZHJhdyB3aXRoIGZyYW1l
IDAKK2NsYXNzIENDVmlld1Rlc3RTZXROZWVkc0NvbW1pdDEgOiBwdWJsaWMgQ0NWaWV3VGVzdCB7
CitwdWJsaWM6CisgICAgQ0NWaWV3VGVzdFNldE5lZWRzQ29tbWl0MSgpCisgICAgICAgICAgICA6
IG1fbnVtQ29tbWl0cygwKQorICAgICAgICAgICAgLCBtX251bURyYXdzKDApIHsgfQorCisgICAg
dmlydHVhbCB2b2lkIGJlZ2luVGVzdCgpCisgICAgeworICAgICAgICBtX3ZpZXctPnNldE5lZWRz
Q29tbWl0QW5kUmVkcmF3KCk7CisgICAgICAgIG1fdmlldy0+c2V0TmVlZHNDb21taXRBbmRSZWRy
YXcoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVyc0FuZFByZXNlbnRPbkND
VGhyZWFkKE1vY2tWaWV3SW1wbCogdmlld0ltcGwpCisgICAgeworICAgICAgICBtX251bURyYXdz
Kys7CisgICAgICAgIGlmICghdmlld0ltcGwtPnNvdXJjZUZyYW1lTnVtYmVyKCkpIC8vIGZyYW1l
IDAKKyAgICAgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY29t
bWl0T25DQ1RocmVhZChNb2NrVmlldyogdmlldywgTW9ja1ZpZXdJbXBsKiBpbXBsKQorICAgIHsK
KyAgICAgICAgbV9udW1Db21taXRzKys7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFmdGVy
VGVzdCgpCisgICAgeworICAgICAgICBFWFBFQ1RfR0UoMSwgbV9udW1Db21taXRzKTsKKyAgICAg
ICAgRVhQRUNUX0dFKDEsIG1fbnVtRHJhd3MpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBpbnQg
bV9udW1Db21taXRzOworICAgIGludCBtX251bURyYXdzOworfTsKK0NDX1ZJRVdfVEVTVChDQ1Zp
ZXdUZXN0U2V0TmVlZHNDb21taXQxKTsKKworCisvLyBBIHNldE5lZWRzQ29tbWl0IHNob3VsZCBs
ZWFkIHRvIDEgY29tbWl0LiBJc3N1aW5nIGEgc2Vjb25kIGNvbW1pdCBhZnRlciB0aGF0CisvLyBm
aXJzdCBjb21taXRlZCBmcmFtZSBkcmF3cyBzaG91bGQgbGVhZCB0byBhbm90aGVyIGNvbW1pdC4K
K2NsYXNzIENDVmlld1Rlc3RTZXROZWVkc0NvbW1pdDIgOiBwdWJsaWMgQ0NWaWV3VGVzdCB7Citw
dWJsaWM6CisgICAgQ0NWaWV3VGVzdFNldE5lZWRzQ29tbWl0MigpCisgICAgICAgICAgICA6IG1f
bnVtQ29tbWl0cygwKQorICAgICAgICAgICAgLCBtX251bURyYXdzKDApIHsgfQorCisgICAgdmly
dHVhbCB2b2lkIGJlZ2luVGVzdCgpCisgICAgeworICAgICAgICBtX3ZpZXctPnNldE5lZWRzQ29t
bWl0QW5kUmVkcmF3KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNBbmRQ
cmVzZW50T25DQ1RocmVhZChNb2NrVmlld0ltcGwqIHZpZXdJbXBsKQorICAgIHsKKyAgICAgICAg
aWYgKCF2aWV3SW1wbC0+c291cmNlRnJhbWVOdW1iZXIoKSkgLy8gZnJhbWUgMAorICAgICAgICAg
ICAgQ0NNYWluVGhyZWFkOjpwb3N0VGFzayhjcmVhdGVNYWluVGhyZWFkVGFzayhzdGF0aWNfY2Fz
dDxDQ1ZpZXcqPihtX3ZpZXcuZ2V0KCkpLCAmQ0NWaWV3OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJh
dykpOworICAgICAgICBlbHNlIGlmICh2aWV3SW1wbC0+c291cmNlRnJhbWVOdW1iZXIoKSA9PSAx
KQorICAgICAgICAgICAgZW5kVGVzdCgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBjb21t
aXRPbkNDVGhyZWFkKE1vY2tWaWV3KiB2aWV3LCBNb2NrVmlld0ltcGwqIGltcGwpCisgICAgewor
ICAgICAgICBtX251bUNvbW1pdHMrKzsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJU
ZXN0KCkKKyAgICB7CisgICAgICAgIEVYUEVDVF9FUSgyLCBtX251bUNvbW1pdHMpOworICAgICAg
ICBFWFBFQ1RfR0UoMiwgbV9udW1EcmF3cyk7CisgICAgfQorCitwcml2YXRlOgorICAgIGludCBt
X251bUNvbW1pdHM7CisgICAgaW50IG1fbnVtRHJhd3M7Cit9OworQ0NfVklFV19URVNUKENDVmll
d1Rlc3RTZXROZWVkc0NvbW1pdDIpOworCisKKy8vIDEgc2V0TmVlZHNSZWRyYXcgc2hvdWxkIGxl
YWQgdG8gYXQgbGVhc3QgMSBkcmF3IGJ1dCBubyBjb21taXQuCitjbGFzcyBDQ1ZpZXdUZXN0U2V0
TmVlZHNSZWRyYXcgOiBwdWJsaWMgQ0NWaWV3VGVzdCB7CitwdWJsaWM6CisgICAgQ0NWaWV3VGVz
dFNldE5lZWRzUmVkcmF3KCkKKyAgICAgICAgICAgIDogbV9udW1Db21taXRzKDApCisgICAgICAg
ICAgICAsIG1fbnVtRHJhd3MoMCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkK
KyAgICB7CisgICAgICAgIG1fdmlldy0+c2V0TmVlZHNSZWRyYXcoKTsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgZHJhd0xheWVyc0FuZFByZXNlbnQoTW9ja1ZpZXdJbXBsKiB2aWV3KQorICAg
IHsKKyAgICAgICAgRVhQRUNUX0VRKC0xLCB2aWV3LT5zb3VyY2VGcmFtZU51bWJlcigpKTsKKyAg
ICAgICAgRVhQRUNUX0VRKDAsIHZpZXctPmZyYW1lTnVtYmVyKCkpOworICAgICAgICBtX251bURy
YXdzICs9IDE7CisgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
Y29tbWl0T25DQ1RocmVhZChNb2NrVmlldyogdmlldywgTW9ja1ZpZXdJbXBsKiBpbXBsKQorICAg
IHsKKyAgICAgICAgbV9udW1Db21taXRzKys7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFm
dGVyVGVzdCgpCisgICAgeworICAgICAgICBFWFBFQ1RfR0UoMSwgbV9udW1EcmF3cyk7CisgICAg
ICAgIEVYUEVDVF9FUSgwLCBtX251bUNvbW1pdHMpOworICAgIH0KK3ByaXZhdGU6CisgICAgaW50
IG1fbnVtQ29tbWl0czsKKyAgICBpbnQgbV9udW1EcmF3czsKK307CitDQ19WSUVXX1RFU1QoQ0NW
aWV3VGVzdFNldE5lZWRzUmVkcmF3KTsKKworCisKK30gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89548</attachid>
            <date>2011-04-14 01:53:18 -0700</date>
            <delta_ts>2011-04-14 14:40:05 -0700</delta_ts>
            <desc>Deadlock and test fixes.</desc>
            <filename>bug-58408-20110414015317.patch</filename>
            <type>text/plain</type>
            <size>66673</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODM1ODQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwNjNhODFkYzc1OWFkYzZk
ZDQxZTk4MzE5ZmZjNDI2MGY1NmNlMmU1Li42ZTU0NGQxZDU5YzRjNzNhZDRhMDI5YmUyMGEyOGRi
MTU4OWFiM2NhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjggQEAKKzIwMTEtMDQtMTIgIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gQWRkIENDVmlldyBhcyB0aHJlYWRlZCBiYXNl
IGNsYXNzIGZvciBMYXllclJlbmRlcmVyQ2hyb21pdW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU4NDA4CisKKyAgICAgICAgQ3JlYXRlIENDVmlldyBh
bmQgQ0NWaWV3SW1wbCwgd2hpY2ggYXJlIHRoZSBtYWluIHRocmVhZCBhbmQgY29tcG9zaXRvcgor
ICAgICAgICB0aHJlYWQgaGFsdmVzIG9mIGEgY29tcG9zaXRlZCB2aWV3LiBDb21tdW5pY2F0aW9u
IGJldHdlZW4gdGhlIHR3bworICAgICAgICBpcyBiYXNlZCBvbiB0aGUgZGVzaWduIHVzZWQgaW4g
RmlsZVN0cmVhbVByb3h5LgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1bSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb21taXQpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbDo6TGF5ZXJSZW5kZXJlckNocm9taXVt
SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsOjpkcmF3
TGF5ZXJzQW5kUHJlc2VudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21p
dW1JbXBsOjpkcmF3TGF5ZXJzT25NYWluVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
UmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlSW1wbE9uQ0NUaHJlYWQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNDSGVhZHNVcERpc3BsYXk6OmN1cnJlbnRGcmFtZU51bWJlcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWV3LmNwcDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1Vw
RGlzcGxheS5oLgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWV3OjpDQ1ZpZXcpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NWaWV3Ojp+Q0NWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlldzo6YWZ0
ZXJDb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWV3OjphbmltYXRlQW5kTGF5b3V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNDVmlldzo6Y29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkND
Vmlldzo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWV3
OjpzZXROZWVkc1JlZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NWaWV3Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaC4KKyAgICAgICAgKFdlYkNvcmU6OkNDVmll
dzo6dXBkYXRlTGF5ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1ZpZXdJbXBsLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oLgorICAgICAgICAoV2ViQ29yZTo6
Q0NWaWV3SW1wbDo6Q0NWaWV3SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZXdJbXBsOjp+
Q0NWaWV3SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZXdJbXBsOjphZnRlckNvbW1pdCk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZXdJbXBsOjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDVmlld0ltcGw6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KToKKyAgICAgICAgKFdl
YkNvcmU6OkNDVmlld0ltcGw6OnNldE5lZWRzUmVkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZXdJbXBsLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNDVmlld0ltcGw6OmZyYW1lTnVtYmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDVmlld0ltcGw6OnNvdXJjZUZyYW1lTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkND
Vmlld0ltcGw6OnNldFNvdXJjZUZyYW1lTnVtYmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1ZpZXdJbXBsUHJveHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNDVmlld0ltcGxQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmll
d0ltcGxQcm94eTo6Q0NWaWV3SW1wbFByb3h5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlld0lt
cGxQcm94eTo6fkNDVmlld0ltcGxQcm94eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZXdJbXBs
UHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmll
d0ltcGxQcm94eTo6c2V0TmVlZHNSZWRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWV3SW1w
bFByb3h5Ojp2aWV3Q2xvc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlld0ltcGxQcm94eTo6
Y3JlYXRlSW1wbE9uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWV3SW1wbFByb3h5
Ojppc01haW5UaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWV3SW1wbFByb3h5Ojppc0ND
VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlld0ltcGxQcm94eTo6cmVxdWVzdEZyYW1l
QW5kQ29tbWl0T25DQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZXdJbXBsUHJveHk6
OnJlcXVlc3RGcmFtZUFuZENvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZXdJbXBsUHJv
eHk6OmNvbW1pdE9uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWV3SW1wbFByb3h5
Ojpwb3N0VGFza09uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWV3SW1wbFByb3h5
OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NWaWV3SW1wbFByb3h5OjpzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NWaWV3SW1wbFByb3h5Ojp2aWV3Q2xvc2VkT25DQ1RocmVhZCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWV3SW1wbFByb3h5Lmg6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNV
cERpc3BsYXkuaC4KKwogMjAxMS0wNC0xMiAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGdvb2ds
ZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWXVyeSBTZW1pa2hhdHNreS4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQppbmRleCAxZjQ2YThlYTdjZTNiNmZjNGFiNTFhMDRmNzE4NzJlMTMzNDljNTgxLi5mOGQy
MWMwM2JhNjVkZWZhMzk5MmJiNDY3ODM2M2EzYjg2NWNkYTUzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBA
IC00MDU3LDYgKzQwNTcsMTIgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RocmVhZFRhc2suaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaCcsCisgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWV3LmNwcCcsCisgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWV3LmgnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlld0ltcGwuY3BwJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZXdJbXBsLmgnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlld0ltcGxQcm94eS5jcHAnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlld0ltcGxQcm94
eS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1E
YXRhQ29jb2EubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9Gb250RWZs
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0ljb25FZmwuY3BwJywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IDRiZDhlMDYyNGNmNmZk
YzkxMzgxNmZmYTFmNDA2ZjQwNjUyZGIyYmQuLjQ5MTMzZTdjYjAxMTIyZTM2MDg3NWU1YTllN2Zi
MzBhZTZlZTU3ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAt
NDgsNiArNDgsOCBAQAogI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKICNpbmNsdWRlICJXZWJHTExh
eWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgorI2luY2x1ZGUgImNj
L0NDTWFpblRocmVhZFRhc2suaCIKKyNpbmNsdWRlICJjYy9DQ1ZpZXdJbXBsLmgiCiAjaWYgVVNF
KFNLSUEpCiAjaW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1D
b250ZXh0U2tpYS5oIgpAQCAtOTQsMjAgKzk2LDIzIEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpjb21wYXJlTGF5ZXJaKGNvbnN0IFJlZlB0cjxDQ0xheWVySW1wbD4mIGEsIGNvbnN0IFJl
CiAgICAgcmV0dXJuIGEtPmRyYXdEZXB0aCgpIDwgYi0+ZHJhd0RlcHRoKCk7CiB9CiAKLVBhc3NS
ZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0
ZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0LCBQYXNzT3duUHRyPFRpbGVQ
YWludEludGVyZmFjZT4gY29udGVudFBhaW50LCBQYXNzT3duUHRyPFRpbGVQYWludEludGVyZmFj
ZT4gc2Nyb2xsYmFyUGFpbnQpCitQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUoQ0NWaWV3Q2xpZW50KiBjbGllbnQsIFBhc3NPd25Q
dHI8VGlsZVBhaW50SW50ZXJmYWNlPiBjb250ZW50UGFpbnQsIFBhc3NPd25QdHI8VGlsZVBhaW50
SW50ZXJmYWNlPiBzY3JvbGxiYXJQYWludCkKIHsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+IGNvbnRleHQgPSBjbGllbnQtPmNyZWF0ZVZpZXdDb250ZXh0M0QoKTsKICAgICBpZiAoIWNv
bnRleHQpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJv
bWl1bT4gbGF5ZXJSZW5kZXJlcihhZG9wdFJlZihuZXcgTGF5ZXJSZW5kZXJlckNocm9taXVtKGNv
bnRleHQsIGNvbnRlbnRQYWludCwgc2Nyb2xsYmFyUGFpbnQpKSk7CisgICAgUmVmUHRyPExheWVy
UmVuZGVyZXJDaHJvbWl1bT4gbGF5ZXJSZW5kZXJlcihhZG9wdFJlZihuZXcgTGF5ZXJSZW5kZXJl
ckNocm9taXVtKGNsaWVudCwgY29udGV4dCwgY29udGVudFBhaW50LCBzY3JvbGxiYXJQYWludCkp
KTsKKyAgICBsYXllclJlbmRlcmVyLT5pbml0KCk7CiAgICAgaWYgKCFsYXllclJlbmRlcmVyLT5o
YXJkd2FyZUNvbXBvc2l0aW5nKCkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgcmV0dXJuIGxh
eWVyUmVuZGVyZXIucmVsZWFzZSgpOwogfQogCi1MYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVy
UmVuZGVyZXJDaHJvbWl1bShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0LCBQ
YXNzT3duUHRyPFRpbGVQYWludEludGVyZmFjZT4gY29udGVudFBhaW50LCBQYXNzT3duUHRyPFRp
bGVQYWludEludGVyZmFjZT4gc2Nyb2xsYmFyUGFpbnQpCi0gICAgOiBtX3ZpZXdwb3J0U2Nyb2xs
UG9zaXRpb24oSW50UG9pbnQoLTEsIC0xKSkKK0xheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtKENDVmlld0NsaWVudCogY2xpZW50LCBQYXNzUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiBjb250ZXh0LCBQYXNzT3duUHRyPFRpbGVQYWludEludGVyZmFjZT4gY29udGVu
dFBhaW50LCBQYXNzT3duUHRyPFRpbGVQYWludEludGVyZmFjZT4gc2Nyb2xsYmFyUGFpbnQpCisg
ICAgOiBDQ1ZpZXcoY2xpZW50KQorICAgICwgbV92aWV3cG9ydFNjcm9sbFBvc2l0aW9uKEludFBv
aW50KC0xLCAtMSkpCiAgICAgLCBtX3Jvb3RMYXllcigwKQogICAgICwgbV9yb290TGF5ZXJDb250
ZW50UGFpbnQoY29udGVudFBhaW50KQogICAgICwgbV9yb290TGF5ZXJTY3JvbGxiYXJQYWludChz
Y3JvbGxiYXJQYWludCkKQEAgLTI1NiwxMCArMjYxLDEwIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpzZXRWaWV3cG9ydChjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50
UmVjCiAgICAgfQogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQW5kRHJh
d0xheWVycygpCi17Ci0gICAgQVNTRVJUKG1faGFyZHdhcmVDb21wb3NpdGluZyk7Cit2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzKCkKIAoreworICAgIENDVmlldzo6dXBk
YXRlTGF5ZXJzKCk7CiAgICAgaWYgKCFtX3Jvb3RMYXllcikKICAgICAgICAgcmV0dXJuOwogCkBA
IC0yNzIsOSArMjc3LDEzIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVBbmRE
cmF3TGF5ZXJzKCkKIAogICAgIHVwZGF0ZVJvb3RMYXllclNjcm9sbGJhcnMoKTsKIAotICAgIExh
eWVyTGlzdCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwotICAgIHVwZGF0ZUxheWVycyhyZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBtX2NvbXB1dGVkUmVuZGVyU3VyZmFjZUxheWVyTGlzdCA9
IGFkb3B0UHRyKG5ldyBMYXllckxpc3QoKSk7CisgICAgdXBkYXRlTGF5ZXJzKCptX2NvbXB1dGVk
UmVuZGVyU3VyZmFjZUxheWVyTGlzdC5nZXQoKSk7Cit9CiAKK3ZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkcmF3TGF5ZXJzKCkKK3sKKyAgICBBU1NFUlQobV9jb21wdXRlZFJlbmRlclN1cmZh
Y2VMYXllckxpc3QuZ2V0KCkpOwogICAgIC8vIEJlZm9yZSBkcmF3TGF5ZXJzOgogICAgIGlmICho
YXJkd2FyZUNvbXBvc2l0aW5nKCkgJiYgbV9jb250ZXh0U3VwcG9ydHNMYXRjaCkgewogICAgICAg
ICAvLyBGSVhNRTogVGhlIG11bHRpdGhyZWFkZWQgY29tcG9zaXRvciBjYXNlIHdpbGwgbm90IHdv
cmsgYXMgbG9uZyBhcwpAQCAtMzAwLDcgKzMwOSw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjp1cGRhdGVBbmREcmF3TGF5ZXJzKCkKICAgICAgICAgbV9jaGlsZENvbnRleHRzV2VyZUNv
cGllZCA9IGZhbHNlOwogICAgIH0KIAotICAgIGRyYXdMYXllcnMocmVuZGVyU3VyZmFjZUxheWVy
TGlzdCk7CisgICAgZHJhd0xheWVycygqbV9jb21wdXRlZFJlbmRlclN1cmZhY2VMYXllckxpc3Qu
Z2V0KCkpOwogCiAgICAgLy8gQWZ0ZXIgZHJhd0xheWVyczoKICAgICBpZiAoaGFyZHdhcmVDb21w
b3NpdGluZygpICYmIG1fY29udGV4dFN1cHBvcnRzTGF0Y2gpIHsKQEAgLTExNjYsNiArMTE3NSw3
MyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHVtcFJlbmRlclN1cmZhY2VzKFRleHRT
dHJlYW0mIHRzLCBpbnQgaW5kZW50LCBMYXllcgogICAgICAgICBkdW1wUmVuZGVyU3VyZmFjZXMo
dHMsIGluZGVudCwgbGF5ZXItPmdldFN1YmxheWVycygpW2ldLmdldCgpKTsKIH0KIAordm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmNvbW1pdChDQ1ZpZXdJbXBsKiBpbXBsKQoreworICAgIEND
Vmlldzo6Y29tbWl0KGltcGwpOworICAgIGltcGwtPnNldFNvdXJjZUZyYW1lTnVtYmVyKG1faGVh
ZHNVcERpc3BsYXktPmN1cnJlbnRGcmFtZU51bWJlcigpKTsKK30KKworCitjbGFzcyBMYXllclJl
bmRlcmVyQ2hyb21pdW1JbXBsIDogcHVibGljIENDVmlld0ltcGwgeworcHVibGljOgorICAgIExh
eWVyUmVuZGVyZXJDaHJvbWl1bUltcGwoUmVmUHRyPENDVmlld0ltcGxDbGllbnQ+IGNsaWVudCwg
TGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQorICAgICAgICA6IENDVmlld0lt
cGwoY2xpZW50KQorICAgICAgICAsIG1fbGF5ZXJSZW5kZXJlcihsYXllclJlbmRlcmVyKSB7IH0K
KworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGF5ZXJzQW5kUHJlc2VudCgpCisgICAgeworICAgICAg
ICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOworICAgICAgICBib29sIGNvbnRleHRMb3N0
OworICAgICAgICBDQ01haW5UaHJlYWQ6OnBvc3RUYXNrKGNyZWF0ZU1haW5UaHJlYWRUYXNrKHRo
aXMsICZMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsOjpkcmF3TGF5ZXJzT25NYWluVGhyZWFkLCAm
Y29tcGxldGlvbiwgJmNvbnRleHRMb3N0KSk7CisgICAgICAgIGNvbXBsZXRpb24ud2FpdCgpOwor
CisgICAgICAgIC8vIEZJWE1FOiBTZW5kIHRoZSAiVXBkYXRlUmVjdCIgbWVzc2FnZSB1cCB0byB0
aGUgUmVuZGVyV2lkZ2V0IFtvciBtb3ZlcGx1Z2luIGVxdWl2YWxlbnRzLi4uXQorCisgICAgICAg
IC8vIEZJWE1FOiBoYW5kbGUgY29udGV4dCBsb3N0CisgICAgICAgIGlmIChjb250ZXh0TG9zdCkK
KyAgICAgICAgICAgIEZBVEFMKCJMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsIGRvZXMgbm90IGhh
bmRsZSBjb250ZXh0IGxvc3QgeWV0LiIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGRy
YXdMYXllcnNPbk1haW5UaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24sIGJvb2wq
IGNvbnRleHRMb3N0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKwor
ICAgICAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdMYXllcnMoKTsKKyAgICAgICAgbV9sYXllclJl
bmRlcmVyLT5wcmVzZW50KCk7CisKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQg
PSBtX2xheWVyUmVuZGVyZXItPmNvbnRleHQoKTsKKyAgICAgICAgKmNvbnRleHRMb3N0ID0gY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SOworCisgICAgICAgIGNvbXBsZXRpb24tPnNpZ25hbCgp
OworICAgIH0KKworICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbV9sYXllclJlbmRlcmVyOwor
fTsKKworY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbEZhY3RvcnkgOiBwdWJsaWMgQ0NW
aWV3SW1wbEZhY3RvcnkgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPExheWVyUmVu
ZGVyZXJDaHJvbWl1bUltcGxGYWN0b3J5PiBjcmVhdGUoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBs
YXllclJlbmRlcmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBMYXllclJl
bmRlcmVyQ2hyb21pdW1JbXBsRmFjdG9yeShsYXllclJlbmRlcmVyKSk7CisgICAgfQorCisgICAg
dmlydHVhbCBQYXNzT3duUHRyPENDVmlld0ltcGw+IGNyZWF0ZUltcGxPbkNDVGhyZWFkKFJlZlB0
cjxDQ1ZpZXdJbXBsQ2xpZW50PiBjbGllbnQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IExheWVyUmVuZGVyZXJDaHJvbWl1bUltcGwoY2xpZW50LCBtX2xheWVyUmVuZGVyZXIp
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbEZhY3Rv
cnkoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKSA6IG1fbGF5ZXJSZW5kZXJl
cihsYXllclJlbmRlcmVyKSB7IH0KKworICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbV9sYXll
clJlbmRlcmVyOworfTsKKworUGFzc093blB0cjxDQ1ZpZXdJbXBsRmFjdG9yeT4gTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpjcmVhdGVWaWV3SW1wbEZhY3RvcnkoKQoreworICAgIHJldHVybiBMYXll
clJlbmRlcmVyQ2hyb21pdW1JbXBsRmFjdG9yeTo6Y3JlYXRlKHRoaXMpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IDcxMDg3OGFlMTNmYjU3YzU4
OTNmMmNhNmVhOGVlMWIxNGQyN2JjNTEuLjVlNTU0M2UxNzk4ZWUwOTc5MzUwZWE0ZDk0NmQ0MWIx
ODJiNzNjZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC00NSwxMSAr
NDUsMTIgQEAKICNpbmNsdWRlICJjYy9DQ0hlYWRzVXBEaXNwbGF5LmgiCiAjaW5jbHVkZSAiY2Mv
Q0NQbHVnaW5MYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgiCisj
aW5jbHVkZSAiY2MvQ0NWaWV3LmgiCisjaW5jbHVkZSAiY2MvQ0NWaWV3SW1wbC5oIgogI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVk
ZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWYgUExB
VEZPUk0oQ0cpCkBAIC02MCwxNyArNjEsMTkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgQ0NMYXllckltcGw7CitjbGFzcyBDQ1ZpZXdJbXBsOwogY2xhc3MgR2VvbWV0cnlCaW5kaW5n
OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiBjbGFzcyBDQ0hlYWRzVXBEaXNwbGF5OwogCiAv
LyBDbGFzcyB0aGF0IGhhbmRsZXMgZHJhd2luZyBvZiBjb21wb3NpdGVkIHJlbmRlciBsYXllcnMg
dXNpbmcgR0wuCi1jbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW0gOiBwdWJsaWMgUmVmQ291bnRl
ZDxMYXllclJlbmRlcmVyQ2hyb21pdW0+IHsKK2NsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bSA6
IHB1YmxpYyBDQ1ZpZXcgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyUmVu
ZGVyZXJDaHJvbWl1bT4gY3JlYXRlKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBQYXNz
T3duUHRyPFRpbGVQYWludEludGVyZmFjZT4gY29udGVudFBhaW50LCBQYXNzT3duUHRyPFRpbGVQ
YWludEludGVyZmFjZT4gc2Nyb2xsYmFyUGFpbnQpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPExh
eWVyUmVuZGVyZXJDaHJvbWl1bT4gY3JlYXRlKENDVmlld0NsaWVudCosIFBhc3NPd25QdHI8VGls
ZVBhaW50SW50ZXJmYWNlPiBjb250ZW50UGFpbnQsIFBhc3NPd25QdHI8VGlsZVBhaW50SW50ZXJm
YWNlPiBzY3JvbGxiYXJQYWludCk7CiAKICAgICB+TGF5ZXJSZW5kZXJlckNocm9taXVtKCk7CiAK
KyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NWaWV3SW1wbEZhY3Rvcnk+IGNyZWF0ZVZpZXdJbXBs
RmFjdG9yeSgpOwogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCk7CiAKICAgICB2b2lk
IGludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7CkBAIC03
OCw3ICs4MSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFZpZXdwb3J0KGNvbnN0IEludFJlY3Qm
IHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50UG9pbnQm
IHNjcm9sbFBvc2l0aW9uKTsKIAogICAgIC8vIHVwZGF0ZXMgYW5kIGRyYXdzIHRoZSBjdXJyZW50
IGxheWVycyBvbnRvIHRoZSBiYWNrYnVmZmVyCi0gICAgdm9pZCB1cGRhdGVBbmREcmF3TGF5ZXJz
KCk7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUxheWVycygpOworICAgIHZpcnR1YWwgdm9pZCBj
b21taXQoQ0NWaWV3SW1wbCopOworICAgIHZvaWQgZHJhd0xheWVycygpOwogCiAgICAgLy8gd2Fp
dHMgZm9yIHJlbmRlcmluZyB0byBmaW5pc2gKICAgICB2b2lkIGZpbmlzaCgpOwpAQCAtMTM4LDcg
KzE0Myw3IEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBs
PiA+IExheWVyTGlzdDsKICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiwgaW50PiBDaGlsZENvbnRleHRNYXA7CiAKLSAgICBleHBsaWNpdCBMYXllclJlbmRlcmVy
Q2hyb21pdW0oUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4sIFBhc3NPd25QdHI8VGlsZVBh
aW50SW50ZXJmYWNlPiBjb250ZW50UGFpbnQsIFBhc3NPd25QdHI8VGlsZVBhaW50SW50ZXJmYWNl
PiBzY3JvbGxiYXJQYWludCk7CisgICAgZXhwbGljaXQgTGF5ZXJSZW5kZXJlckNocm9taXVtKEND
Vmlld0NsaWVudCosIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBQYXNzT3duUHRyPFRp
bGVQYWludEludGVyZmFjZT4gY29udGVudFBhaW50LCBQYXNzT3duUHRyPFRpbGVQYWludEludGVy
ZmFjZT4gc2Nyb2xsYmFyUGFpbnQpOwogCiAgICAgdm9pZCB1cGRhdGVMYXllcnMoTGF5ZXJMaXN0
JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKICAgICB2b2lkIHVwZGF0ZVJvb3RMYXllckNvbnRl
bnRzKCk7CkBAIC0xODcsNiArMTkyLDggQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9oYXJkd2Fy
ZUNvbXBvc2l0aW5nOwogCisgICAgT3duUHRyPExheWVyTGlzdD4gbV9jb21wdXRlZFJlbmRlclN1
cmZhY2VMYXllckxpc3Q7CisKICAgICB1bnNpZ25lZCBtX2N1cnJlbnRTaGFkZXI7CiAgICAgUmVu
ZGVyU3VyZmFjZUNocm9taXVtKiBtX2N1cnJlbnRSZW5kZXJTdXJmYWNlOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBE
aXNwbGF5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0hlYWRzVXBEaXNwbGF5LmgKaW5kZXggZDU2ZjhhYjg4NjcxOTQ1ZWFkY2U1Y2IzNDk0NWJlMjEx
YWIzOTY5NC4uMzZmYzFiN2ZhMDhiZTEzOWNiNTc3OWRiOGMyMGE5YTYxZTk1MDZiNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFk
c1VwRGlzcGxheS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaApAQCAtNDUsNiArNDUsOCBAQCBwdWJsaWM6CiAKICAg
ICB+Q0NIZWFkc1VwRGlzcGxheSgpOwogCisgICAgaW50IGN1cnJlbnRGcmFtZU51bWJlcigpIGNv
bnN0IHsgcmV0dXJuIG1fY3VycmVudEZyYW1lTnVtYmVyOyB9CisKICAgICB2b2lkIG9uUHJlc2Vu
dCgpOwogCiAgICAgdm9pZCBzZXRTaG93RlBTQ291bnRlcihib29sIGVuYWJsZSkgeyBtX3Nob3dG
UFNDb3VudGVyID0gZW5hYmxlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5jcHAKaW5kZXggOTU2NjU4NDVjNThj
NDhjYTA2MjIwMDI0MjQ4Yjc0N2FiYWI3NjBjZi4uYjU5ODViN2Y0ZTE3ZGRjNzE2OTk2NmRiNGQw
ZThmYmI1ZTNhN2M1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmNwcApAQCAtMzcsMTggKzM3LDIwIEBAIHVz
aW5nIG5hbWVzcGFjZSBXVEY7CiAKIENDVGhyZWFkOjpDQ1RocmVhZCgpCiB7CisgICAgbV9zZWxm
UmVmID0gdGhpczsKKwogICAgIE11dGV4TG9ja2VyIGxvY2sobV90aHJlYWRDcmVhdGlvbk11dGV4
KTsKICAgICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFkKENDVGhyZWFkOjpjb21wb3NpdG9yVGhy
ZWFkU3RhcnQsIHRoaXMsICJDaHJvbWl1bSBDb21wb3NpdG9yIik7CiB9CiAKIENDVGhyZWFkOjp+
Q0NUaHJlYWQoKQogewotICAgIG1fcXVldWUua2lsbCgpOworICAgIEFTU0VSVChtX3F1ZXVlLmtp
bGxlZCgpKTsKK30KIAotICAgIC8vIFN0b3AgdGhyZWFkLgotICAgIHZvaWQqIGV4aXRDb2RlOwot
ICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fdGhyZWFkSUQsICZleGl0Q29kZSk7Ci0gICAg
bV90aHJlYWRJRCA9IDA7Cit2b2lkIENDVGhyZWFkOjpzdG9wKCkKK3sKKyAgICBtX3F1ZXVlLmtp
bGwoKTsKIH0KIAogdm9pZCBDQ1RocmVhZDo6cG9zdFRhc2soUGFzc093blB0cjxUYXNrPiB0YXNr
KQpAQCAtNzMsNiArNzUsOCBAQCB2b2lkKiBDQ1RocmVhZDo6cnVuTG9vcCgpCiAgICAgd2hpbGUg
KE93blB0cjxUYXNrPiB0YXNrID0gbV9xdWV1ZS53YWl0Rm9yTWVzc2FnZSgpKQogICAgICAgICB0
YXNrLT5wZXJmb3JtVGFzaygpOwogCisgICAgZGV0YWNoVGhyZWFkKG1fdGhyZWFkSUQpOworCiAg
ICAgcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5oCmluZGV4IDE3N2QzZjM4YWJjNDIzY2Q2OWY4
NzA1OWNlN2I2YTdhOTVmMDMxMTYuLmRmNzE3MGIzY2VmNTlmZmIxZDExZWE2Y2FiNjRmNjRiNjM4
N2UyNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGhyZWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUaHJlYWQuaApAQCAtMzQsMTUgKzM0LDE3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogLy8gVGhlIENDVGhyZWFkIHNpbmdsZXRvbiBvd25zIHRoZSBjb21wb3NpdG9yIHRo
cmVhZCBhbmQgcHJvdmlkZXMKIC8vIGJhc2ljIGluZnJhc3RydWN0dXJlIGZvciBtZXNzYWdpbmcg
YmV0d2VlbiB0aGUgdHdvIHRocmVhZHMuCi1jbGFzcyBDQ1RocmVhZCB7CitjbGFzcyBDQ1RocmVh
ZCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxDQ1RocmVhZD4gewogcHVibGljOgotICAg
IHN0YXRpYyBQYXNzT3duUHRyPENDVGhyZWFkPiBjcmVhdGUoKQorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPENDVGhyZWFkPiBjcmVhdGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBDQ1RocmVhZCgpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ1RocmVhZCgpKTsK
ICAgICB9CiAKICAgICB2aXJ0dWFsIH5DQ1RocmVhZCgpOwogCisgICAgdm9pZCBzdG9wKCk7CisK
ICAgICBjbGFzcyBUYXNrIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGFzayk7CiAg
ICAgcHVibGljOgpAQCAtNjUsNiArNjcsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCogcnVuTG9v
cCgpOwogCiAgICAgV1RGOjpUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSUQ7CisgICAgUmVmUHRy
PENDVGhyZWFkPiBtX3NlbGZSZWY7CiAgICAgTWVzc2FnZVF1ZXVlPFRhc2s+IG1fcXVldWU7CiAK
ICAgICBNdXRleCBtX3RocmVhZENyZWF0aW9uTXV0ZXg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZXcuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWV3LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5hMGFiNmRjNzYxYWNkY2M5MzI1ZDgyNTNjZTViYTNlMDA3YWIwMGIyCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWV3
LmNwcApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpbmNsdWRlICJDQ1ZpZXcuaCIKKworI2luY2x1ZGUgIkNDVmlld0ltcGwuaCIKKyNpbmNs
dWRlICJUcmFjZUV2ZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ0NWaWV3OjpDQ1Zp
ZXcoQ0NWaWV3Q2xpZW50KiBjbGllbnQpCisgICAgOiBtX2NsaWVudChjbGllbnQpCisgICAgLCBt
X2ZyYW1lTnVtYmVyKDApCit7Cit9CisKK3ZvaWQgQ0NWaWV3Ojppbml0KCkKK3sKKyNpZiBVU0Uo
VEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgbV9wcm94eSA9IENDVmlld0ltcGxQcm94eTo6Y3Jl
YXRlKHRoaXMpOworI2VuZGlmCit9CisKK0NDVmlldzo6fkNDVmlldygpCit7CisgICAgVFJBQ0Vf
RVZFTlQoIkNDVmlldzo6fkNDVmlldyIsIHRoaXMsIDApOworI2lmIFVTRShUSFJFQURFRF9DT01Q
T1NJVElORykKKyAgICBtX3Byb3h5LT52aWV3Q2xvc2VkKCk7CisjZW5kaWYKK30KKwordm9pZCBD
Q1ZpZXc6OmFmdGVyQ29tbWl0KCkKK3sKKyAgICBtX2ZyYW1lTnVtYmVyKys7Cit9Cit2b2lkIEND
Vmlldzo6YW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpCit7CisgICAgbV9j
bGllbnQtPmFuaW1hdGVBbmRMYXlvdXQoZnJhbWVCZWdpblRpbWUpOworfQorCit2b2lkIENDVmll
dzo6Y29tbWl0KENDVmlld0ltcGwqIGltcGwpCit7CisgICAgaW1wbC0+c2V0U291cmNlRnJhbWVO
dW1iZXIobV9mcmFtZU51bWJlcik7Cit9CisKK3ZvaWQgQ0NWaWV3OjpzZXROZWVkc0NvbW1pdEFu
ZFJlZHJhdygpCit7CisgICAgbV9wcm94eS0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKK30K
Kwordm9pZCBDQ1ZpZXc6OnNldE5lZWRzUmVkcmF3KCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NW
aWV3OjpzZXROZWVkc1JlZHJhdyIsIHRoaXMsIDApOworICAgIG1fcHJveHktPnNldE5lZWRzUmVk
cmF3KCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVmlldy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NWaWV3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2E5YjA1ZWM1ZGJjZTMyMTEwNjVi
Zjc4NTQ4MTlkMTY4MmI2ZWUyNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlldy5oCkBAIC0wLDAgKzEsNzcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAq
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgQ0NWaWV3X2gKKyNkZWZpbmUgQ0NWaWV3X2gKKworI2luY2x1
ZGUgImNjL0NDVmlld0ltcGxQcm94eS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDVmlld0ltcGw7CitjbGFzcyBDQ1ZpZXdJ
bXBsQ2xpZW50OworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CisKK2NsYXNzIENDVmlld0NsaWVu
dCB7CitwdWJsaWM6CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBj
cmVhdGVWaWV3Q29udGV4dDNEKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5
b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkgPSAwOworfTsKKworY2xhc3MgQ0NWaWV3SW1wbEZh
Y3RvcnkgeworcHVibGljOgorICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ1ZpZXdJbXBsPiBjcmVh
dGVJbXBsT25DQ1RocmVhZChSZWZQdHI8Q0NWaWV3SW1wbENsaWVudD4pID0gMDsKK307CisKKy8v
IENDVmlldyAoZXF1aXZhbGVudCB0byBMYXllclRyZWVIb3N0IGluIENBKQorY2xhc3MgQ0NWaWV3
IDogcHVibGljIFJlZkNvdW50ZWQ8Q0NWaWV3PiB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQ0NW
aWV3KENDVmlld0NsaWVudCopOworICAgIHZvaWQgaW5pdCgpOworICAgIHZpcnR1YWwgfkNDVmll
dygpOworCisgICAgLy8gY2FsbGVkIG9uIG1haW4gdGhyZWFkLi4uIG5vdGUgdGhhdCB0aGUgZmFj
dG9yeSBtYXkgb3V0bGl2ZSB0aGUgdmlldyEKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NWaWV3
SW1wbEZhY3Rvcnk+IGNyZWF0ZVZpZXdJbXBsRmFjdG9yeSgpID0gMDsKKworICAgIHZpcnR1YWwg
dm9pZCBhZnRlckNvbW1pdCgpOworICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRv
dWJsZSBmcmFtZUJlZ2luVGltZSk7CisgICAgdmlydHVhbCB2b2lkIGNvbW1pdChDQ1ZpZXdJbXBs
Kik7CisKKyAgICB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgdm9pZCBzZXRO
ZWVkc1JlZHJhdygpOworCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUxheWVycygpIHsgfQorCitw
cml2YXRlOgorICAgIENDVmlld0NsaWVudCogbV9jbGllbnQ7CisgICAgaW50IG1fZnJhbWVOdW1i
ZXI7CisgICAgUmVmUHRyPENDVmlld0ltcGxQcm94eT4gbV9wcm94eTsKK307CisKK30KKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1ZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVmlld0ltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUzNDNiNmZlMzcwOGMzODFkYTdl
MjcyMzBjN2U4NDg2MGQ1MjU2NGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZXdJbXBsLmNwcApAQCAtMCwwICsxLDk1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJDQ1Zp
ZXdJbXBsLmgiCisKKyNpbmNsdWRlICJDQ1RocmVhZFRhc2suaCIKKyNpbmNsdWRlICJDQ1ZpZXcu
aCIKKyNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ0NWaWV3SW1wbDo6Q0NWaWV3SW1wbChSZWZQdHI8
Q0NWaWV3SW1wbENsaWVudD4gY2xpZW50KQorICAgIDogbV9zb3VyY2VGcmFtZU51bWJlcigtMSkK
KyAgICAsIG1fZnJhbWVOdW1iZXIoMCkKKyAgICAsIG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1f
Y29tbWl0UGVuZGluZyhmYWxzZSkKKyAgICAsIG1fcmVkcmF3RW5xdWV1ZWQoZmFsc2UpCit7Cit9
CisKK0NDVmlld0ltcGw6On5DQ1ZpZXdJbXBsKCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NWaWV3
SW1wbDo6fkNDVmlld0ltcGwoKSIsIHRoaXMsIDApOworfQorCit2b2lkIENDVmlld0ltcGw6OmFm
dGVyQ29tbWl0KCkKK3sKKyAgICBtX2NvbW1pdFBlbmRpbmcgPSBmYWxzZTsKKyAgICBzZXROZWVk
c1JlZHJhdygpOworfQorCit2b2lkIENDVmlld0ltcGw6OmRyYXdMYXllcnMoKQoreworICAgIC8v
IElmIGEgY29tbWl0IGlzIHBlbmRpbmcsIGRvIG5vdCBkcmF3LiBUaGlzIGlzIGEgdGVtcG9yYXJ5
IHJlc3RyaWN0aW9uIHRoYXQKKyAgICAvLyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBkcmF3TGF5ZXJz
IGlzIGN1cnJlbnRseSBhIGJsb2NraW5nIG9wZXJhdGlvbiBvbiB0aGUgbWFpbiB0aHJlYWQuCisg
ICAgaWYgKG1fY29tbWl0UGVuZGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgVFJBQ0VfRVZF
TlQoIkNDVmlld0ltcGw6OmRyYXdMYXllcnMiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQobV9yZWRy
YXdFbnF1ZXVlZCk7CisgICAgbV9yZWRyYXdFbnF1ZXVlZCA9IGZhbHNlOworCisgICAgeworICAg
ICAgICBUUkFDRV9FVkVOVCgiQ0NWaWV3SW1wbDo6ZHJhd0xheWVyc0FuZFByZXNlbnQiLCB0aGlz
LCAwKTsKKyAgICAgICAgZHJhd0xheWVyc0FuZFByZXNlbnQoKTsKKyAgICB9CisKKyAgICBtX2Zy
YW1lTnVtYmVyICs9IDE7Cit9CisKK3ZvaWQgQ0NWaWV3SW1wbDo6c2V0TmVlZHNDb21taXRBbmRS
ZWRyYXcoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ1ZpZXdJbXBsOjpzZXROZWVkc0NvbW1pdEFu
ZFJlZHJhdyIsIHRoaXMsIDApOworCisgICAgLy8gRklYTUU6IG1vdmUgdGhlIHJlcXVlc3RGcmFt
ZUFuZENvbW1pdCBvdXQgZnJvbSBoZXJlIG9uY2Ugd2UgYWRkIGZyYW1lcmF0ZSB0aHJvdHRsaW5n
L2FuaW1hdGlvbgorICAgIGRvdWJsZSBmcmFtZUJlZ2luVGltZSA9IGN1cnJlbnRUaW1lKCk7Cisg
ICAgbV9jb21taXRQZW5kaW5nID0gdHJ1ZTsKKyAgICBtX2NsaWVudC0+cmVxdWVzdEZyYW1lQW5k
Q29tbWl0T25DQ1RocmVhZChmcmFtZUJlZ2luVGltZSk7Cit9CisKK3ZvaWQgQ0NWaWV3SW1wbDo6
c2V0TmVlZHNSZWRyYXcoKQoreworICAgIGlmIChtX3JlZHJhd0VucXVldWVkIHx8IG1fY29tbWl0
UGVuZGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgVFJBQ0VfRVZFTlQoIkNDVmlld0ltcGw6
OnNldE5lZWRzUmVkcmF3IiwgdGhpcywgMCk7CisgICAgbV9yZWRyYXdFbnF1ZXVlZCA9IHRydWU7
CisgICAgbV9jbGllbnQtPnBvc3REcmF3TGF5ZXJzVGFza09uQ0NUaHJlYWQoKTsKK30KKworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NWaWV3SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NWaWV3SW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY1ZGUwNjM3YzkwNGVlMGQwOWE4Y2QxNDRmNTZj
NmI1ZDcwNmEzNTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZXdJbXBsLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBDQ1ZpZXdJbXBsX2gKKyNkZWZpbmUgQ0NWaWV3SW1wbF9oCisKKyNp
bmNsdWRlICJjYy9DQ1RocmVhZC5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisv
LyBQcm92aWRlcyBzY2hlZHVsaW5nIGluZnJhc3R1cmN0dXJlIGZvciBhIENDVmlld0ltcGwKK2Ns
YXNzIENDVmlld0ltcGxDbGllbnQgOiBwdWJsaWMgV1RGOjpUaHJlYWRTYWZlUmVmQ291bnRlZDxD
Q1ZpZXdJbXBsQ2xpZW50PiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+Q0NWaWV3SW1wbENsaWVu
dCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwb3N0RHJhd0xheWVyc1Rhc2tPbkNDVGhyZWFkKCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKGRv
dWJsZSBmcmFtZUJlZ2luVGltZSkgPSAwOworfTsKKworLy8gQ0NWaWV3SW1wbCBvd25zIHRoZSBD
Q0xheWVySW1wbCB0cmVlIGFzIHdlbGwgYXMgYXNzb2NpYXRlZCByZW5kZXJpbmcgc3RhdGUKK2Ns
YXNzIENDVmlld0ltcGwgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDVmlld0ltcGwpOwor
cHVibGljOgorICAgIGV4cGxpY2l0IENDVmlld0ltcGwoUmVmUHRyPENDVmlld0ltcGxDbGllbnQ+
KTsKKyAgICB2aXJ0dWFsIH5DQ1ZpZXdJbXBsKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJD
b21taXQoKTsKKworICAgIHZvaWQgZHJhd0xheWVycygpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3
TGF5ZXJzQW5kUHJlc2VudCgpID0gMDsKKworICAgIGludCBmcmFtZU51bWJlcigpIGNvbnN0IHsg
cmV0dXJuIG1fZnJhbWVOdW1iZXI7IH0KKworICAgIHZvaWQgc2V0TmVlZHNSZWRyYXcoKTsKKyAg
ICB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisKKyAgICBpbnQgc291cmNlRnJhbWVO
dW1iZXIoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZUZyYW1lTnVtYmVyOyB9CisgICAgdm9pZCBz
ZXRTb3VyY2VGcmFtZU51bWJlcihpbnQgZnJhbWVOdW1iZXIpIHsgbV9zb3VyY2VGcmFtZU51bWJl
ciA9IGZyYW1lTnVtYmVyOyB9CisKK3Byb3RlY3RlZDoKKyAgICBpbnQgbV9zb3VyY2VGcmFtZU51
bWJlcjsKKyAgICBpbnQgbV9mcmFtZU51bWJlcjsKKworcHJpdmF0ZToKKyAgICBSZWZQdHI8Q0NW
aWV3SW1wbENsaWVudD4gbV9jbGllbnQ7CisgICAgYm9vbCBtX2NvbW1pdFBlbmRpbmc7CisgICAg
Ym9vbCBtX3JlZHJhd0VucXVldWVkOworfTsKKworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZXdJbXBsUHJv
eHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NW
aWV3SW1wbFByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYWM3YmRiZDZhMzkyZjk1MTUxYjY3YmRkZDM5
ZTMwNDA3OTEyMDAxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWV3SW1wbFByb3h5LmNwcApAQCAtMCwwICsxLDIwMyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQ0NWaWV3
SW1wbFByb3h5LmgiCisKKyNpbmNsdWRlICJDQ01haW5UaHJlYWRUYXNrLmgiCisjaW5jbHVkZSAi
Q0NUaHJlYWRUYXNrLmgiCisjaW5jbHVkZSAiQ0NWaWV3LmgiCisjaW5jbHVkZSAiVHJhY2VFdmVu
dC5oIgorCit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25h
bWVzcGFjZSB7CitSZWZQdHI8Q0NUaHJlYWQ+IGNjVGhyZWFkOworaW50IG51bVByb3hpZXMgPSAw
OworfQorCitQYXNzUmVmUHRyPENDVmlld0ltcGxQcm94eT4gQ0NWaWV3SW1wbFByb3h5OjpjcmVh
dGUoQ0NWaWV3KiB2aWV3KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ0NWaWV3SW1wbFBy
b3h5KHZpZXcpKTsKK30KKworQ0NWaWV3SW1wbFByb3h5OjpDQ1ZpZXdJbXBsUHJveHkoQ0NWaWV3
KiB2aWV3KQorICAgIDogbV9jb21taXRQZW5kaW5nKGZhbHNlKQorICAgICwgbV92aWV3KHZpZXcp
Cit7CisgICAgVFJBQ0VfRVZFTlQoIkNDVmlld0ltcGxQcm94eTo6Q0NWaWV3SW1wbFByb3h5Iiwg
dGhpcywgMCk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBudW1Qcm94aWVzICs9
IDE7CisgICAgaWYgKCFjY1RocmVhZCkKKyAgICAgICAgY2NUaHJlYWQgPSBDQ1RocmVhZDo6Y3Jl
YXRlKCk7CisKKyAgICAvLyBDcmVhdGUgVmlld0ltcGwuCisgICAgY2NUaHJlYWQtPnBvc3RUYXNr
KGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NWaWV3SW1wbFByb3h5OjpjcmVhdGVJbXBsT25D
Q1RocmVhZCwgbV92aWV3LT5jcmVhdGVWaWV3SW1wbEZhY3RvcnkoKSkpOworfQorCitDQ1ZpZXdJ
bXBsUHJveHk6On5DQ1ZpZXdJbXBsUHJveHkoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ1ZpZXdJ
bXBsUHJveHk6On5DQ1ZpZXdJbXBsUHJveHkiLCB0aGlzLCAwKTsKKyAgICAvLyBUYWtlIG5vdGU6
IFRoaXMgY29kZSBtaWdodCBydW4gb24gZWl0aGVyIHRoZSBjb21wb3NpdG9yIHRocmVhZCBvciB0
aGUKKyAgICAvLyBtYWluIHRocmVhZC4KKyAgICBBU1NFUlQoIW1fdmlldyk7IC8vIHZpZXdDbG9z
ZWQoKSBzaG91bGQgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsbGVkLgorICAgIEFTU0VSVCghbV92aWV3
SW1wbC5nZXQoKSk7IC8vIHZpZXdDbG9zZWRPbkNDVGhyZWFkKCkgc2hvdWxkIGhhdmUgYWxyZWFk
eSBiZWVuIGNhbGxlZAorICAgIG51bVByb3hpZXMgLT0gMTsKKyAgICBpZiAoIW51bVByb3hpZXMp
IHsKKyAgICAgICAgY2NUaHJlYWQtPnN0b3AoKTsKKyAgICAgICAgY2NUaHJlYWQuY2xlYXIoKTsK
KyAgICB9Cit9CisKK3ZvaWQgQ0NWaWV3SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJh
dygpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAobV9jb21taXRQZW5k
aW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBUUkFDRV9FVkVOVCgiQ0NWaWV3SW1wbFByb3h5
OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdyIsIHRoaXMsIDApOworICAgIG1fY29tbWl0UGVuZGlu
ZyA9IHRydWU7CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlz
LCAmQ0NWaWV3SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQpKTsK
K30KKwordm9pZCBDQ1ZpZXdJbXBsUHJveHk6OnNldE5lZWRzUmVkcmF3KCkKK3sKKyAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOworICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVh
ZFRhc2sodGhpcywgJkNDVmlld0ltcGxQcm94eTo6c2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKSk7
Cit9CisKK3ZvaWQgQ0NWaWV3SW1wbFByb3h5Ojp2aWV3Q2xvc2VkKCkKK3sKKyAgICBUUkFDRV9F
VkVOVCgiQ0NWaWV3SW1wbFByb3h5Ojp2aWV3Q2xvc2VkIiwgdGhpcywgMCk7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKyAgICBtX3ZpZXcgPSAwOworICAgIGNjVGhyZWFkLT5wb3N0VGFz
ayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVmlld0ltcGxQcm94eTo6dmlld0Nsb3NlZE9u
Q0NUaHJlYWQpKTsKK30KKwordm9pZCBDQ1ZpZXdJbXBsUHJveHk6OnBvc3REcmF3TGF5ZXJzVGFz
a09uQ0NUaHJlYWQoKQoreworICAgIEFTU0VSVChpc0NDVGhyZWFkKCkpOworICAgIGlmIChtX3Zp
ZXdJbXBsKQorICAgICAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRo
aXMsICZDQ1ZpZXdJbXBsUHJveHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkKSk7Cit9CisKK3ZvaWQg
Q0NWaWV3SW1wbFByb3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKGRvdWJsZSBm
cmFtZUJlZ2luVGltZSkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NWaWV3SW1wbFByb3h5OjpyZXF1
ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFkIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzQ0NU
aHJlYWQoKSk7CisgICAgaWYgKG1fdmlld0ltcGwpCisgICAgICAgIENDTWFpblRocmVhZDo6cG9z
dFRhc2soY3JlYXRlTWFpblRocmVhZFRhc2sodGhpcywgJkNDVmlld0ltcGxQcm94eTo6cmVxdWVz
dEZyYW1lQW5kQ29tbWl0LCBmcmFtZUJlZ2luVGltZSkpOworfQorCitib29sIENDVmlld0ltcGxQ
cm94eTo6aXNNYWluVGhyZWFkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gOjppc01haW5UaHJlYWQo
KTsKK30KKworYm9vbCBDQ1ZpZXdJbXBsUHJveHk6OmlzQ0NUaHJlYWQoKSBjb25zdAoreworICAg
IHJldHVybiBjdXJyZW50VGhyZWFkKCkgPT0gY2NUaHJlYWQtPnRocmVhZElEKCk7Cit9CisKK3Zv
aWQgQ0NWaWV3SW1wbFByb3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21taXQoZG91YmxlIGZyYW1lQmVn
aW5UaW1lKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFtX3ZpZXcp
CisgICAgICAgIHJldHVybjsKKworICAgIFRSQUNFX0VWRU5UKCJDQ1ZpZXdJbXBsUHJveHk6OnJl
cXVlc3RGcmFtZUFuZENvbW1pdCIsIHRoaXMsIDApOworICAgIHsKKyAgICAgICAgVFJBQ0VfRVZF
TlQoIkNDVmlldzo6YW5pbWF0ZUFuZExheW91dCIsIHRoaXMsIDApOworICAgICAgICBtX3ZpZXct
PmFuaW1hdGVBbmRMYXlvdXQoZnJhbWVCZWdpblRpbWUpOworICAgIH0KKworICAgIG1fY29tbWl0
UGVuZGluZyA9IGZhbHNlOworICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoIkNDVmlldzo6dXBk
YXRlTGF5ZXJzIiwgdGhpcywgMCk7CisgICAgICAgIG1fdmlldy0+dXBkYXRlTGF5ZXJzKCk7Cisg
ICAgfQorCisgICAgLy8gQmxvY2tpbmcgY2FsbCB0byBDQ1ZpZXdJbXBsUHJveHk6OnBlcmZvcm1D
b21taXQKKyAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOworICAgIGNjVGhyZWFkLT5w
b3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVmlld0ltcGxQcm94eTo6Y29tbWl0
T25DQ1RocmVhZCwgJmNvbXBsZXRpb24pKTsKKyAgICBjb21wbGV0aW9uLndhaXQoKTsKKworICAg
IG1fdmlldy0+YWZ0ZXJDb21taXQoKTsKK30KKwordm9pZCBDQ1ZpZXdJbXBsUHJveHk6OmNvbW1p
dE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24pCit7CisgICAgQVNTRVJU
KGlzQ0NUaHJlYWQoKSk7CisgICAgVFJBQ0VfRVZFTlQoIkNDVmlld0ltcGxQcm94eTo6Y29tbWl0
T25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoIkNDVmll
dzo6Y29tbWl0IiwgdGhpcywgMCk7CisgICAgICAgIG1fdmlldy0+Y29tbWl0KG1fdmlld0ltcGwu
Z2V0KCkpOworICAgIH0KKyAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKKworICAgIG1fdmlld0lt
cGwtPmFmdGVyQ29tbWl0KCk7Cit9CisKK3ZvaWQgQ0NWaWV3SW1wbFByb3h5OjpjcmVhdGVJbXBs
T25DQ1RocmVhZChQYXNzT3duUHRyPENDVmlld0ltcGxGYWN0b3J5PiB2aWV3SW1wbEZhY3Rvcnkp
Cit7CisgICAgVFJBQ0VfRVZFTlQoIkNDVmlld0ltcGxQcm94eTo6Y3JlYXRlSW1wbE9uQ0NUaHJl
YWQiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNDQ1RocmVhZCgpKTsKKyAgICBtX3ZpZXdJbXBs
ID0gdmlld0ltcGxGYWN0b3J5LT5jcmVhdGVJbXBsT25DQ1RocmVhZCh0aGlzKTsKK30KKwordm9p
ZCBDQ1ZpZXdJbXBsUHJveHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkKCkKK3sKKyAgICBUUkFDRV9F
VkVOVCgiQ0NWaWV3SW1wbFByb3h5OjpkcmF3TGF5ZXJzT25DQ1RocmVhZCIsIHRoaXMsIDApOwor
ICAgIEFTU0VSVChpc0NDVGhyZWFkKCkpOworICAgIGlmIChtX3ZpZXdJbXBsKQorICAgICAgICBt
X3ZpZXdJbXBsLT5kcmF3TGF5ZXJzKCk7Cit9CisKK3ZvaWQgQ0NWaWV3SW1wbFByb3h5OjpzZXRO
ZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ1Zp
ZXdJbXBsUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCIsIHRoaXMsIDAp
OworICAgIEFTU0VSVChpc0NDVGhyZWFkKCkpOworICAgIGlmIChtX3ZpZXdJbXBsKQorICAgICAg
ICBtX3ZpZXdJbXBsLT5zZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOworfQorCit2b2lkIENDVmll
d0ltcGxQcm94eTo6c2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKCkKK3sKKyAgICBUUkFDRV9FVkVO
VCgiQ0NWaWV3SW1wbFByb3h5OjpzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQiLCB0aGlzLCAwKTsK
KyAgICBBU1NFUlQoaXNDQ1RocmVhZCgpKTsKKyAgICBpZiAobV92aWV3SW1wbCkKKyAgICAgICAg
bV92aWV3SW1wbC0+c2V0TmVlZHNSZWRyYXcoKTsKK30KKwordm9pZCBDQ1ZpZXdJbXBsUHJveHk6
OnZpZXdDbG9zZWRPbkNDVGhyZWFkKCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NWaWV3SW1wbFBy
b3h5Ojp2aWV3Q2xvc2VkT25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc0NDVGhy
ZWFkKCkpOworICAgIG1fdmlld0ltcGwuY2xlYXIoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWV3SW1wbFByb3h5
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZXdJ
bXBsUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZTFkMWIwMzJlYzYyYzA2ZWIyZjFhNGRhN2M5ZmVjZDdj
YjU4ZWNmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NWaWV3SW1wbFByb3h5LmgKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBDQ1ZpZXdJbXBsUHJveHlfaAorI2RlZmluZSBDQ1ZpZXdJbXBsUHJv
eHlfaAorCisjaW5jbHVkZSAiY2MvQ0NDb21wbGV0aW9uRXZlbnQuaCIKKyNpbmNsdWRlICJjYy9D
Q1ZpZXdJbXBsLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIENDVmlldzsKK2NsYXNzIENDVmlld0ltcGxGYWN0b3J5OworCitjbGFzcyBD
Q1ZpZXdJbXBsUHJveHkgOiBwdWJsaWMgQ0NWaWV3SW1wbENsaWVudCB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8Q0NWaWV3SW1wbFByb3h5PiBjcmVhdGUoQ0NWaWV3Kik7CisgICAg
dmlydHVhbCB+Q0NWaWV3SW1wbFByb3h5KCk7CisKKyAgICB2b2lkIHNldE5lZWRzQ29tbWl0QW5k
UmVkcmF3KCk7CisgICAgdm9pZCBzZXROZWVkc1JlZHJhdygpOworCisgICAgLy8gU3RvcHMgdGhl
IHByb3h5IGFuZCBzY2hlZHVsZXMgaXQgdG8gYmUgZGVzdHJveWVkLiBBbGwgcGVuZGluZyB0YXNr
cyB3aWxsCisgICAgLy8gYmUgYWJvcnRlZC4KKyAgICB2b2lkIHZpZXdDbG9zZWQoKTsKKworICAg
IC8vIENDVmlld0ltcGxDaWVudCAtLSBjYWxsZWQgb24gQ0NUaHJlYWQKKyAgICB2aXJ0dWFsIHZv
aWQgcG9zdERyYXdMYXllcnNUYXNrT25DQ1RocmVhZCgpOworICAgIHZpcnR1YWwgdm9pZCByZXF1
ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CisKK3By
aXZhdGU6CisgICAgZXhwbGljaXQgQ0NWaWV3SW1wbFByb3h5KENDVmlldyopOworCisgICAgYm9v
bCBpc01haW5UaHJlYWQoKSBjb25zdDsKKyAgICBib29sIGlzQ0NUaHJlYWQoKSBjb25zdDsKKwor
ICAgIC8vIENhbGxlZCBvbiBDQ01haW5UaHJlYWQKKyAgICB2b2lkIHJlcXVlc3RGcmFtZUFuZENv
bW1pdChkb3VibGUgZnJhbWVCZWdpblRpbWUpOworCisgICAgLy8gQ2FsbGVkIG9uIENDVGhyZWFk
CisgICAgdm9pZCBjb21taXRPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50Kik7CisgICAgdm9p
ZCBjcmVhdGVJbXBsT25DQ1RocmVhZChQYXNzT3duUHRyPENDVmlld0ltcGxGYWN0b3J5Pik7Cisg
ICAgdm9pZCBkcmF3TGF5ZXJzT25DQ1RocmVhZCgpOworICAgIHZvaWQgc2V0TmVlZHNDb21taXRB
bmRSZWRyYXdPbkNDVGhyZWFkKCk7CisgICAgdm9pZCBzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQo
KTsKKyAgICB2b2lkIHZpZXdDbG9zZWRPbkNDVGhyZWFkKCk7CisKKyAgICBib29sIG1fY29tbWl0
UGVuZGluZzsKKyAgICBDQ1ZpZXcqIG1fdmlldzsKKyAgICBPd25QdHI8Q0NWaWV3SW1wbD4gbV92
aWV3SW1wbDsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IGZjMGVlZTMzMDM1YWY1NGUyYjM0NTUxMTUyZTg5ZjE5NDgxNTQ3MDQuLjJlNjBiYjRhMmQwMjc5
NTcyNWZiMmE3YWQ5Zjg5ZTY0YjYwY2Y4ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNzcgQEAKKzIwMTEtMDQtMTIgIE5hdCBEdWNhICA8bmR1Y2FAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJv
bWl1bV0gQWRkIENDVmlldyBhcyB0aHJlYWRlZCBiYXNlIGNsYXNzIGZvciBMYXllclJlbmRlcmVy
Q2hyb21pdW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTU4NDA4CisKKyAgICAgICAgQWRqdXN0bWVudHMgdG8gV2ViVmlld0ltcGwgdG8gaW1wbGVtZW50
IHRoZSBDQ1ZpZXdDbGllbnQgaW50ZXJmYWNlLgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6Cisg
ICAgICAgICogcHVibGljL1dlYldpZGdldC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJXaWRnZXQ6
OnNjaGVkdWxlQ29tcG9zaXRlKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6YW5pbWF0ZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXdJbXBsOjpkb0FuaW1hdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cGFp
bnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6YW5pbWF0ZUFuZExheW91dCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjb21wb3NpdGUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3SW1wbDo6c2NoZWR1bGVDb21wb3NpdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3SW1wbDo6c2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjpkb0NvbXBvc2l0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXdJbXBsOjpjcmVhdGVWaWV3Q29udGV4dDNEKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0lt
cGw6OnJlYWxsb2NhdGVSZW5kZXJlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp1
cGRhdGVMYXllclJlbmRlcmVyU2V0dGluZ3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1w
bDo6dXBkYXRlTGF5ZXJSZW5kZXJlclZpZXdwb3J0KToKKyAgICAgICAgKiBzcmMvV2ViVmlld0lt
cGwuaDoKKyAgICAgICAgKiB0ZXN0cy9DQ1ZpZXdUZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChX
VEY6OkNDVmlld1Rlc3Q6OkNDVmlld1Rlc3QpOgorICAgICAgICAoV1RGOjpDQ1ZpZXdUZXN0Ojph
bmltYXRlQW5kTGF5b3V0KToKKyAgICAgICAgKFdURjo6Q0NWaWV3VGVzdDo6ZHJhd0xheWVyc0Fu
ZFByZXNlbnRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NWaWV3VGVzdDo6dXBkYXRlTGF5
ZXJzKToKKyAgICAgICAgKFdURjo6Q0NWaWV3VGVzdDo6Y29tbWl0T25DQ1RocmVhZCk6CisgICAg
ICAgIChXVEY6OkNDVmlld1Rlc3Q6Om9uQmVnaW5UZXN0KToKKyAgICAgICAgKFdURjo6Q0NWaWV3
VGVzdDo6ZG9FbmRUZXN0KToKKyAgICAgICAgKFdURjo6Q0NWaWV3VGVzdDo6b25FbmRUZXN0KToK
KyAgICAgICAgKFdURjo6Q0NWaWV3VGVzdDo6cnVuVGVzdCk6CisgICAgICAgIChXVEY6OkNDVmll
d1Rlc3Q6OnRlc3RUaW1lb3V0KToKKyAgICAgICAgKFdURjo6TW9ja1ZpZXdDbGllbnQ6Ok1vY2tW
aWV3Q2xpZW50KToKKyAgICAgICAgKFdURjo6TW9ja1ZpZXdDbGllbnQ6OmNyZWF0ZVZpZXdDb250
ZXh0M0QpOgorICAgICAgICAoV1RGOjpNb2NrVmlld0NsaWVudDo6YW5pbWF0ZUFuZExheW91dCk6
CisgICAgICAgIChXVEY6Ok1vY2tWaWV3SW1wbDo6TW9ja1ZpZXdJbXBsKToKKyAgICAgICAgKFdU
Rjo6TW9ja1ZpZXdJbXBsOjpkcmF3TGF5ZXJzQW5kUHJlc2VudCk6CisgICAgICAgIChXVEY6Ok1v
Y2tWaWV3OjpNb2NrVmlldyk6CisgICAgICAgIChXVEY6Ok1vY2tWaWV3OjpjcmVhdGVJbXBsT25D
Q1RocmVhZCk6CisgICAgICAgIChXVEY6Ok1vY2tWaWV3Ojp1cGRhdGVMYXllcnMpOgorICAgICAg
ICAoV1RGOjpNb2NrVmlldzo6Y29tbWl0KToKKyAgICAgICAgKFdURjo6Q0NWaWV3VGVzdDo6ZG9C
ZWdpblRlc3QpOgorICAgICAgICAoV1RGOjpDQ1ZpZXdUZXN0OjplbmRUZXN0KToKKyAgICAgICAg
KFdURjo6Q0NWaWV3VGVzdFNob3J0bGl2ZWRWaWV3MTo6Q0NWaWV3VGVzdFNob3J0bGl2ZWRWaWV3
MSk6CisgICAgICAgIChXVEY6OkNDVmlld1Rlc3RTaG9ydGxpdmVkVmlldzE6OmJlZ2luVGVzdCk6
CisgICAgICAgIChXVEY6OkNDVmlld1Rlc3RTaG9ydGxpdmVkVmlldzE6OmFmdGVyVGVzdCk6Cisg
ICAgICAgIChXVEY6OkNDVmlld1Rlc3RTaG9ydGxpdmVkVmlldzI6OkNDVmlld1Rlc3RTaG9ydGxp
dmVkVmlldzIpOgorICAgICAgICAoV1RGOjpDQ1ZpZXdUZXN0U2hvcnRsaXZlZFZpZXcyOjpiZWdp
blRlc3QpOgorICAgICAgICAoV1RGOjpDQ1ZpZXdUZXN0U2hvcnRsaXZlZFZpZXcyOjphZnRlclRl
c3QpOgorICAgICAgICAoV1RGOjpDQ1ZpZXdUZXN0U2hvcnRsaXZlZFZpZXczOjpDQ1ZpZXdUZXN0
U2hvcnRsaXZlZFZpZXczKToKKyAgICAgICAgKFdURjo6Q0NWaWV3VGVzdFNob3J0bGl2ZWRWaWV3
Mzo6YmVnaW5UZXN0KToKKyAgICAgICAgKFdURjo6Q0NWaWV3VGVzdFNob3J0bGl2ZWRWaWV3Mzo6
YWZ0ZXJUZXN0KToKKyAgICAgICAgKFdURjo6Q0NWaWV3VGVzdFNldE5lZWRzQ29tbWl0MTo6Q0NW
aWV3VGVzdFNldE5lZWRzQ29tbWl0MSk6CisgICAgICAgIChXVEY6OkNDVmlld1Rlc3RTZXROZWVk
c0NvbW1pdDE6OmJlZ2luVGVzdCk6CisgICAgICAgIChXVEY6OkNDVmlld1Rlc3RTZXROZWVkc0Nv
bW1pdDE6OmRyYXdMYXllcnNBbmRQcmVzZW50T25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6OkND
Vmlld1Rlc3RTZXROZWVkc0NvbW1pdDE6OmNvbW1pdE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RG
OjpDQ1ZpZXdUZXN0U2V0TmVlZHNDb21taXQxOjphZnRlclRlc3QpOgorICAgICAgICAoV1RGOjpD
Q1ZpZXdUZXN0U2V0TmVlZHNDb21taXQyOjpDQ1ZpZXdUZXN0U2V0TmVlZHNDb21taXQyKToKKyAg
ICAgICAgKFdURjo6Q0NWaWV3VGVzdFNldE5lZWRzQ29tbWl0Mjo6YmVnaW5UZXN0KToKKyAgICAg
ICAgKFdURjo6Q0NWaWV3VGVzdFNldE5lZWRzQ29tbWl0Mjo6ZHJhd0xheWVyc0FuZFByZXNlbnRP
bkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NWaWV3VGVzdFNldE5lZWRzQ29tbWl0Mjo6Y29t
bWl0T25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6OkNDVmlld1Rlc3RTZXROZWVkc0NvbW1pdDI6
OmFmdGVyVGVzdCk6CisgICAgICAgIChXVEY6OkNDVmlld1Rlc3RTZXROZWVkc1JlZHJhdzo6Q0NW
aWV3VGVzdFNldE5lZWRzUmVkcmF3KToKKyAgICAgICAgKFdURjo6Q0NWaWV3VGVzdFNldE5lZWRz
UmVkcmF3OjpiZWdpblRlc3QpOgorICAgICAgICAoV1RGOjpDQ1ZpZXdUZXN0U2V0TmVlZHNSZWRy
YXc6OmRyYXdMYXllcnNBbmRQcmVzZW50KToKKyAgICAgICAgKFdURjo6Q0NWaWV3VGVzdFNldE5l
ZWRzUmVkcmF3Ojpjb21taXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NWaWV3VGVzdFNl
dE5lZWRzUmVkcmF3OjphZnRlclRlc3QpOgorCiAyMDExLTA0LTExICBQYXZlbCBQb2Rpdmlsb3Yg
IDxwb2Rpdmlsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFBhdmVsIEZl
bGRtYW4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCBjMjNjOWVkY2I0NjgyY2Iw
NDBlYzM2N2YzN2I1ZWE4OWY3MTliNzFkLi5mOGNlZDkzYzg0ZGUyOWUzNjZmMTY5YWYxYTUzNTgz
ZGVmYjEyNzk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBp
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTU1LDYgKzU1LDcg
QEAKICAgICAgICAgICAgICd0ZXN0cy9BcmVuYVRlc3RIZWxwZXJzLmgnLAogICAgICAgICAgICAg
J3Rlc3RzL0NDVGhyZWFkVGFza1Rlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1RocmVh
ZFRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9DQ1ZpZXdUZXN0LmNwcCcsCiAgICAgICAg
ICAgICAndGVzdHMvRHJhZ0ltYWdlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0lEQkJp
bmRpbmdVdGlsaXRpZXNUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvSURCS2V5UGF0aFRl
c3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldp
ZGdldC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0LmgKaW5kZXgg
MTI5MGFkODE2MmI2NjIzYmMzNTlhMGZjZmM1NjMxNDRmNmZjZjc0Yi4uY2E3YzI4ZGFlMmYxODlk
NjQyNzcxMTk5ZWUwMzNhNGViNWUwNzNlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViV2lkZ2V0LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViV2lkZ2V0LmgKQEAgLTgxLDYgKzgxLDExIEBAIHB1YmxpYzoKICAgICAvLyB0aGUgcGFp
bnQgbWV0aG9kIGFib3ZlLgogICAgIHZpcnR1YWwgdm9pZCBjb21wb3NpdGUoYm9vbCBmaW5pc2gp
ID0gMDsKIAorICAgIC8vIEluIHRocmVhZGVkIGNvbXBvc2l0aW5nIG1vZGUsIGluZGljYXRlcyB0
aGF0IHRoZSB3aWRnZXQgc2hvdWxkIHJlZHJhdworICAgIC8vIGl0c2VsZiwgZm9yIGV4YW1wbGUg
ZHVlIHRvIHdpbmRvdyBkYW1hZ2UuIFRoZSByZWRyYXcgd2lsbCBiZWdpbgorICAgIC8vIGFzeW5j
aHJvbm91c2x5LgorICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0ZSgpICB7IH0KKwog
ICAgIC8vIENhbGxlZCB0byBpbmZvcm0gdGhlIFdlYldpZGdldCBvZiBhIGNoYW5nZSBpbiB0aGVt
ZS4KICAgICAvLyBJbXBsZW1lbnRvcnMgdGhhdCBjYWNoZSByZW5kZXJlZCBjb3BpZXMgb2Ygd2lk
Z2V0cyBuZWVkIHRvIHJlLXJlbmRlcgogICAgIC8vIG9uIHJlY2VpdmluZyB0aGlzIG1lc3NhZ2UK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAppbmRleCAzNmYyMWFm
OTE2NmZiNWE2ZmIzZjRlOWM2OTkyNDEwOTcwMGFkNDE1Li40OGQ3MDE4OGFjN2JkNGNiOTUyN2Nh
ZmQ0ZmNlYTg0ZjEzYjc3NmNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmll
d0ltcGwuY3BwCkBAIC05OTIsMTIgKzk5MiwxNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpyZXNpemUo
Y29uc3QgV2ViU2l6ZSYgbmV3U2l6ZSkKIAogdm9pZCBXZWJWaWV3SW1wbDo6YW5pbWF0ZSgpCiB7
CisgICAgZG9BbmltYXRlKGN1cnJlbnRUaW1lKCkpOworfQorCit2b2lkIFdlYlZpZXdJbXBsOjpk
b0FuaW1hdGUoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQorewogI2lmIEVOQUJMRShSRVFVRVNUX0FO
SU1BVElPTl9GUkFNRSkKICAgICBXZWJGcmFtZUltcGwqIHdlYmZyYW1lID0gbWFpbkZyYW1lSW1w
bCgpOwogICAgIGlmICh3ZWJmcmFtZSkgewogICAgICAgICBGcmFtZVZpZXcqIHZpZXcgPSB3ZWJm
cmFtZS0+ZnJhbWVWaWV3KCk7CiAgICAgICAgIGlmICh2aWV3KQotICAgICAgICAgICAgdmlldy0+
c2VydmljZVNjcmlwdGVkQW5pbWF0aW9ucyhjb252ZXJ0U2Vjb25kc1RvRE9NVGltZVN0YW1wKGN1
cnJlbnRUaW1lKCkpKTsKKyAgICAgICAgICAgIHZpZXctPnNlcnZpY2VTY3JpcHRlZEFuaW1hdGlv
bnMoY29udmVydFNlY29uZHNUb0RPTVRpbWVTdGFtcChmcmFtZUJlZ2luVGltZSkpOwogICAgIH0K
ICNlbmRpZgogfQpAQCAtMTA2Nyw2ICsxMDcyLDkgQEAgdm9pZCBXZWJWaWV3SW1wbDo6cGFpbnQo
V2ViQ2FudmFzKiBjYW52YXMsIGNvbnN0IFdlYlJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKGlzQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKSB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQorI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICAgICAgcmV0dXJuOwor
I2VuZGlmCiAgICAgICAgIGRvQ29tcG9zaXRlKCk7CiAKICAgICAgICAgLy8gSWYgYSBjYW52YXMg
d2FzIHBhc3NlZCBpbiwgd2UgdXNlIGl0IHRvIGdyYWIgYSBjb3B5IG9mIHRoZQpAQCAtMTA5NSw5
ICsxMTAzLDE5IEBAIHZvaWQgV2ViVmlld0ltcGw6OnRoZW1lQ2hhbmdlZCgpCiAgICAgdmlldy0+
aW52YWxpZGF0ZVJlY3QoZGFtYWdlZFJlY3QpOwogfQogCisKK3ZvaWQgV2ViVmlld0ltcGw6OmFu
aW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQoreworICAgIGRvQW5pbWF0ZShm
cmFtZUJlZ2luVGltZSk7CisgICAgbGF5b3V0KCk7Cit9CisKIHZvaWQgV2ViVmlld0ltcGw6OmNv
bXBvc2l0ZShib29sIGZpbmlzaCkKIHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgIHJldHVybjsgLy8gRklYTUU6IHdo
ZW4gdGhlIFJlbmRlcldpZGdldCBpcyB1cGRhdGVkLCBzd2l0Y2ggdG8gQVNTRVJUX05PVF9SRUFD
SEVELgorI2Vsc2UKICAgICBUUkFDRV9FVkVOVCgiV2ViVmlld0ltcGw6OmNvbXBvc2l0ZSIsIHRo
aXMsIDApOwogICAgIGlmIChtX3JlY3JlYXRpbmdHcmFwaGljc0NvbnRleHQpIHsKICAgICAgICAg
Ly8gcmVhbGxvY2F0ZVJlbmRlcmVyIHdpbGwgcmVxdWVzdCBhIHJlcGFpbnQgd2hldGhlciBvciBu
b3QgaXQgc3VjY2VlZGVkCkBAIC0xMTI3LDYgKzExNDUsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpj
b21wb3NpdGUoYm9vbCBmaW5pc2gpCiAgICAgICAgIHNldFJvb3RMYXllck5lZWRzRGlzcGxheSgp
OwogICAgIH0KICNlbmRpZgorI2VuZGlmCiB9CiAKIGNvbnN0IFdlYklucHV0RXZlbnQqIFdlYlZp
ZXdJbXBsOjptX2N1cnJlbnRJbnB1dEV2ZW50ID0gMDsKQEAgLTIzNDEsOSArMjM2MCwyNCBAQCB2
b2lkIFdlYlZpZXdJbXBsOjpzZXRSb290R3JhcGhpY3NMYXllcihXZWJDb3JlOjpQbGF0Zm9ybUxh
eWVyKiBsYXllcikKICAgICAgICAgbV9jbGllbnQtPmRpZEludmFsaWRhdGVSZWN0KGRhbWFnZWRS
ZWN0KTsKIH0KIAordm9pZCBXZWJWaWV3SW1wbDo6c2NoZWR1bGVDb21wb3NpdGUoKQoreworI2lm
IFVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICBpZiAobV9sYXllclJlbmRlcmVyLmdldCgp
KQorICAgICAgICBtX2xheWVyUmVuZGVyZXItPnNldE5lZWRzUmVkcmF3KCk7CisjZWxzZQorICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCit9CisKIHZvaWQgV2ViVmlld0ltcGw6OnNl
dFJvb3RMYXllck5lZWRzRGlzcGxheSgpCiB7CisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5H
KQorICAgIGlmIChtX2xheWVyUmVuZGVyZXIuZ2V0KCkpCisgICAgICAgIG1fbGF5ZXJSZW5kZXJl
ci0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyNlbHNlCiAgICAgbV9jbGllbnQtPnNjaGVk
dWxlQ29tcG9zaXRlKCk7CisjZW5kaWYKIH0KIAogCkBAIC0yNDQ0LDE0ICsyNDc4LDEwIEBAIHZv
aWQgV2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZShib29sIGFj
dGl2ZSkKIAogICAgICAgICBtX2NsaWVudC0+ZGlkQWN0aXZhdGVBY2NlbGVyYXRlZENvbXBvc2l0
aW5nKHRydWUpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4gY29udGV4dCA9IG1fdGVtcG9yYXJ5T25zY3JlZW5HcmFwaGljc0NvbnRleHQzRC5yZWxlYXNl
KCk7Ci0gICAgICAgIGlmICghY29udGV4dCkgewotICAgICAgICAgICAgY29udGV4dCA9IEdyYXBo
aWNzQ29udGV4dDNEOjpjcmVhdGUoZ2V0Q29tcG9zaXRvckNvbnRleHRBdHRyaWJ1dGVzKCksIG1f
cGFnZS0+Y2hyb21lKCksIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdp
bmRvdyk7Ci0gICAgICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgICAgICAgICBjb250ZXh0
LT5yZXNoYXBlKHN0ZDo6bWF4KDEsIG1fc2l6ZS53aWR0aCksIHN0ZDo6bWF4KDEsIG1fc2l6ZS5o
ZWlnaHQpKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1fbGF5ZXJSZW5kZXJlciA9IExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKGNvbnRleHQucmVsZWFzZSgpLCBXZWJWaWV3SW1wbENvbnRl
bnRQYWludGVyOjpjcmVhdGUodGhpcyksIFdlYlZpZXdJbXBsU2Nyb2xsYmFyUGFpbnRlcjo6Y3Jl
YXRlKHRoaXMpKTsKKyAgICAgICAgbV9sYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpjcmVhdGUodGhpcywgV2ViVmlld0ltcGxDb250ZW50UGFpbnRlcjo6Y3JlYXRlKHRoaXMp
LCBXZWJWaWV3SW1wbFNjcm9sbGJhclBhaW50ZXI6OmNyZWF0ZSh0aGlzKSk7CisjaWYgVVNFKFRI
UkVBREVEX0NPTVBPU0lUSU5HKQorICAgICAgICB1cGRhdGVMYXllclJlbmRlcmVyU2V0dGluZ3Mo
KTsKKyNlbmRpZgogICAgICAgICBpZiAobV9sYXllclJlbmRlcmVyKSB7CiAgICAgICAgICAgICBt
X2NsaWVudC0+ZGlkQWN0aXZhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nKHRydWUpOwogICAgICAg
ICAgICAgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUgPSB0cnVlOwpAQCAtMjQ3OCwy
MSArMjUwOCwyNiBAQCB2b2lkIFdlYlZpZXdJbXBsOjpkb0NvbXBvc2l0ZSgpCiAgICAgaWYgKCFw
YWdlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fbGF5ZXJSZW5kZXJlci0+c2V0Q29tcG9z
aXRlT2Zmc2NyZWVuKHNldHRpbmdzKCktPmNvbXBvc2l0ZVRvVGV4dHVyZUVuYWJsZWQoKSk7Ci0K
LSAgICBDQ0hlYWRzVXBEaXNwbGF5KiBodWQgPSBtX2xheWVyUmVuZGVyZXItPmhlYWRzVXBEaXNw
bGF5KCk7Ci0gICAgaHVkLT5zZXRTaG93RlBTQ291bnRlcihzZXR0aW5ncygpLT5zaG93RlBTQ291
bnRlcigpKTsKLSAgICBodWQtPnNldFNob3dQbGF0Zm9ybUxheWVyVHJlZShzZXR0aW5ncygpLT5z
aG93UGxhdGZvcm1MYXllclRyZWUoKSk7CisgICAgdXBkYXRlTGF5ZXJSZW5kZXJlclNldHRpbmdz
KCk7CisgICAgbV9sYXllclJlbmRlcmVyLT51cGRhdGVMYXllcnMoKTsKKyAgICBtX2xheWVyUmVu
ZGVyZXItPmRyYXdMYXllcnMoKTsKK30KIAotICAgIG1fbGF5ZXJSZW5kZXJlci0+dXBkYXRlQW5k
RHJhd0xheWVycygpOworUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gV2ViVmlld0ltcGw6
OmNyZWF0ZVZpZXdDb250ZXh0M0QoKQoreworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
Y29udGV4dCA9IG1fdGVtcG9yYXJ5T25zY3JlZW5HcmFwaGljc0NvbnRleHQzRC5yZWxlYXNlKCk7
CisgICAgaWYgKCFjb250ZXh0KSB7CisgICAgICAgIGNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQz
RDo6Y3JlYXRlKGdldENvbXBvc2l0b3JDb250ZXh0QXR0cmlidXRlcygpLCBtX3BhZ2UtPmNocm9t
ZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlc2hhcGUoc3RkOjptYXgo
MSwgbV9zaXplLndpZHRoKSwgc3RkOjptYXgoMSwgbV9zaXplLmhlaWdodCkpOworICAgIH0KKyAg
ICByZXR1cm4gY29udGV4dDsKIH0KIAogdm9pZCBXZWJWaWV3SW1wbDo6cmVhbGxvY2F0ZVJlbmRl
cmVyKCkKIHsKLSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG5ld0NvbnRleHQgPSBHcmFw
aGljc0NvbnRleHQzRDo6Y3JlYXRlKAotICAgICAgICAgICAgZ2V0Q29tcG9zaXRvckNvbnRleHRB
dHRyaWJ1dGVzKCksIG1fcGFnZS0+Y2hyb21lKCksIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJE
aXJlY3RseVRvSG9zdFdpbmRvdyk7CiAgICAgLy8gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSBt
aWdodCBmYWlsIGFuZCByZXR1cm4gMCwgaW4gdGhhdCBjYXNlIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6Y3JlYXRlIHdpbGwgYWxzbyByZXR1cm4gMC4KLSAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNo
cm9taXVtPiBsYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUobmV3
Q29udGV4dCwgV2ViVmlld0ltcGxDb250ZW50UGFpbnRlcjo6Y3JlYXRlKHRoaXMpLCBXZWJWaWV3
SW1wbFNjcm9sbGJhclBhaW50ZXI6OmNyZWF0ZSh0aGlzKSk7CisgICAgUmVmUHRyPExheWVyUmVu
ZGVyZXJDaHJvbWl1bT4gbGF5ZXJSZW5kZXJlciA9IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3Jl
YXRlKHRoaXMsIFdlYlZpZXdJbXBsQ29udGVudFBhaW50ZXI6OmNyZWF0ZSh0aGlzKSwgV2ViVmll
d0ltcGxTY3JvbGxiYXJQYWludGVyOjpjcmVhdGUodGhpcykpOwogCiAgICAgLy8gUmVhdHRhY2gg
dGhlIHJvb3QgbGF5ZXIuICBDaGlsZCBsYXllcnMgd2lsbCBnZXQgcmVhdHRhY2hlZCBhcyBhIHNp
ZGUgZWZmZWN0IG9mIHVwZGF0ZUxheWVyc1JlY3Vyc2l2ZS4KICAgICBpZiAobGF5ZXJSZW5kZXJl
cikgewpAQCAtMjUwMyw3ICsyNTM4LDEwIEBAIHZvaWQgV2ViVmlld0ltcGw6OnJlYWxsb2NhdGVS
ZW5kZXJlcigpCiAgICAgICAgIC8vIHJlc2hhcGUgc2hvdWxkIHJlYWxseSBiZSBleHRyYWN0ZWQg
aW50byBvbmUgZnVuY3Rpb247IGl0IGlzIG5vdAogICAgICAgICAvLyBpbW1lZGlhdGVseSBvYnZp
b3VzIHRoYXQgR3JhcGhpY3NDb250ZXh0M0Qgb2JqZWN0IHdpbGwgbm90CiAgICAgICAgIC8vIGZ1
bmN0aW9uIHByb3Blcmx5IHVudGlsIGl0cyByZXNoYXBlIG1ldGhvZCBpcyBjYWxsZWQuCi0gICAg
ICAgIG5ld0NvbnRleHQtPnJlc2hhcGUoc3RkOjptYXgoMSwgbV9zaXplLndpZHRoKSwgc3RkOjpt
YXgoMSwgbV9zaXplLmhlaWdodCkpOworICAgICAgICBsYXllclJlbmRlcmVyLT5jb250ZXh0KCkt
PnJlc2hhcGUoc3RkOjptYXgoMSwgbV9zaXplLndpZHRoKSwgc3RkOjptYXgoMSwgbV9zaXplLmhl
aWdodCkpOworI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICAgICAgdXBkYXRlTGF5
ZXJSZW5kZXJlclNldHRpbmdzKCk7CisjZW5kaWYKICAgICAgICAgc2V0Um9vdEdyYXBoaWNzTGF5
ZXIobV9sYXllclJlbmRlcmVyLT5yb290TGF5ZXIoKSk7CiAgICAgICAgIC8vIEZvcmNlcyBWaWV3
SG9zdE1zZ19EaWRBY3RpdmF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcgdG8gYmUgc2VudCBzbwog
ICAgICAgICAvLyB0aGF0IHRoZSBicm93c2VyIHByb2Nlc3MgY2FuIHJlYWNxdWlyZSBzdXJmYWNl
cy4KQEAgLTI1MTMsOSArMjU1MSwyMiBAQCB2b2lkIFdlYlZpZXdJbXBsOjpyZWFsbG9jYXRlUmVu
ZGVyZXIoKQogfQogI2VuZGlmCiAKK3ZvaWQgV2ViVmlld0ltcGw6OnVwZGF0ZUxheWVyUmVuZGVy
ZXJTZXR0aW5ncygpCit7CisgICAgaWYgKCFtX2xheWVyUmVuZGVyZXIpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fbGF5ZXJSZW5kZXJlci0+c2V0Q29tcG9zaXRlT2Zmc2NyZWVuKHNldHRpbmdz
KCktPmNvbXBvc2l0ZVRvVGV4dHVyZUVuYWJsZWQoKSk7CisKKyAgICBDQ0hlYWRzVXBEaXNwbGF5
KiBodWQgPSBtX2xheWVyUmVuZGVyZXItPmhlYWRzVXBEaXNwbGF5KCk7CisgICAgaHVkLT5zZXRT
aG93RlBTQ291bnRlcihzZXR0aW5ncygpLT5zaG93RlBTQ291bnRlcigpKTsKKyAgICBodWQtPnNl
dFNob3dQbGF0Zm9ybUxheWVyVHJlZShzZXR0aW5ncygpLT5zaG93UGxhdGZvcm1MYXllclRyZWUo
KSk7Cit9CisKIHZvaWQgV2ViVmlld0ltcGw6OnVwZGF0ZUxheWVyUmVuZGVyZXJWaWV3cG9ydCgp
CiB7Ci0gICAgQVNTRVJUKG1fbGF5ZXJSZW5kZXJlcik7CisgICAgaWYgKCFtX2xheWVyUmVuZGVy
ZXIpCisgICAgICAgIHJldHVybjsKIAogICAgIGlmICghcGFnZSgpKQogICAgICAgICByZXR1cm47
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAppbmRleCAwNjAyN2VhYWM0
M2QxNDAzMmUzMDAwYzhmYjU4MmY2MmQxZGZkODEyLi5iM2QwYjYwYTkxZTlkMGFmN2Y5ZjdmYTA2
ZWVjM2U3MTUzNDU1ZjA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJWaWV3SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBs
LmgKQEAgLTU1LDYgKzU1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ2hyb21pdW1E
YXRhT2JqZWN0OwogY2xhc3MgRG9jdW1lbnRMb2FkZXI7CiBjbGFzcyBGcmFtZTsKK2NsYXNzIEdy
YXBoaWNzQ29udGV4dDNEOwogY2xhc3MgSGlzdG9yeUl0ZW07CiBjbGFzcyBIaXRUZXN0UmVzdWx0
OwogY2xhc3MgS2V5Ym9hcmRFdmVudDsKQEAgLTg2LDcgKzg3LDcgQEAgY2xhc3MgV2ViTW91c2VX
aGVlbEV2ZW50OwogY2xhc3MgV2ViU2V0dGluZ3NJbXBsOwogY2xhc3MgV2ViVG91Y2hFdmVudDsK
IAotY2xhc3MgV2ViVmlld0ltcGwgOiBwdWJsaWMgV2ViVmlldywgcHVibGljIFJlZkNvdW50ZWQ8
V2ViVmlld0ltcGw+IHsKK2NsYXNzIFdlYlZpZXdJbXBsIDogcHVibGljIFdlYlZpZXcsIHB1Ymxp
YyBXZWJDb3JlOjpDQ1ZpZXdDbGllbnQsIHB1YmxpYyBSZWZDb3VudGVkPFdlYlZpZXdJbXBsPiB7
CiBwdWJsaWM6CiAgICAgLy8gV2ViV2lkZ2V0IG1ldGhvZHM6CiAgICAgdmlydHVhbCB2b2lkIGNs
b3NlKCk7CkBAIC05Nyw2ICs5OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQo
V2ViQ2FudmFzKiwgY29uc3QgV2ViUmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCB0aGVtZUNoYW5n
ZWQoKTsKICAgICB2aXJ0dWFsIHZvaWQgY29tcG9zaXRlKGJvb2wgZmluaXNoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGUoKTsKICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlSW5w
dXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50Jik7CiAgICAgdmlydHVhbCB2b2lkIG1vdXNlQ2Fw
dHVyZUxvc3QoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoYm9vbCBlbmFibGUpOwpAQCAt
MjAxLDYgKzIwMywxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbmFjdGl2ZUZvcmVncm91bmRDb2xvcik7CiAgICAgdmlydHVhbCB2b2lk
IHBlcmZvcm1DdXN0b21Db250ZXh0TWVudUFjdGlvbih1bnNpZ25lZCBhY3Rpb24pOwogCisgICAg
Ly8gQ0NWaWV3Q2xpZW50CisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVBbmRMYXlvdXQoZG91Ymxl
IGZyYW1lQmVnaW5UaW1lKTsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEPiBjcmVhdGVWaWV3Q29udGV4dDNEKCk7CisKKwogICAgIC8vIFdlYlZpZXdJbXBsCiAKICAg
ICB2b2lkIHNldElnbm9yZUlucHV0RXZlbnRzKGJvb2wgbmV3VmFsdWUpOwpAQCAtMzQ0LDYgKzM1
MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpOwogICAg
IHZvaWQgc2Nyb2xsUm9vdExheWVyUmVjdChjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxE
ZWx0YSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpOwogICAgIHZvaWQgaW52YWxp
ZGF0ZVJvb3RMYXllclJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQgZG9V
cGRhdGVBbmRDb21wb3NpdGUoKTsKICNlbmRpZgogCiAgICAgLy8gUmV0dXJucyB0aGUgb25zY3Jl
ZW4gM0QgY29udGV4dCB1c2VkIGJ5IHRoZSBjb21wb3NpdG9yLiBUaGlzIGlzCkBAIC00MDcsMTEg
KzQxNSwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBXZWJQb2ludCYgc2NyZWVuUG9pbnQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERyYWdBY3Rpb24pOwogCisgICAgdm9pZCBk
b0FuaW1hdGUoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKKwogI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKICAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZShi
b29sKTsKICAgICB2b2lkIGRvQ29tcG9zaXRlKCk7CiAgICAgdm9pZCBkb1BpeGVsUmVhZGJhY2tU
b0NhbnZhcyhXZWJDYW52YXMqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CiAgICAgdm9pZCBy
ZWFsbG9jYXRlUmVuZGVyZXIoKTsKKyAgICB2b2lkIHVwZGF0ZUxheWVyUmVuZGVyZXJTZXR0aW5n
cygpOwogICAgIHZvaWQgdXBkYXRlTGF5ZXJSZW5kZXJlclZpZXdwb3J0KCk7CiAjZW5kaWYKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RocmVhZFRlc3QuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RocmVhZFRlc3QuY3BwCmluZGV4IDA0
ZmJhNDY1MzNkYjc1ZGQ3M2Y2OGFiN2I3YjJkNjAxZTdjYjQwNjcuLmVhMDJkMmFlZDAzMTMzZTg1
NTY4YWYyNmIyYmFlMDQ0MTMzZTA2MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NUaHJlYWRUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDVGhyZWFkVGVzdC5jcHAKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogCiBURVNUKEND
VGhyZWFkVGVzdCwgcGluZ1BvbmdVc2luZ0NvbmRpdGlvbikKIHsKLSAgICBPd25QdHI8Q0NUaHJl
YWQ+IHRocmVhZCA9IENDVGhyZWFkOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8Q0NUaHJlYWQ+IHRo
cmVhZCA9IENDVGhyZWFkOjpjcmVhdGUoKTsKICAgICBQaW5nUG9uZ1VzaW5nQ29uZGl0aW9uIHRh
cmdldDsKICAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOwogICAgIHRocmVhZC0+cG9z
dFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKCZ0YXJnZXQsICZQaW5nUG9uZ1VzaW5nQ29uZGl0aW9u
OjpwaW5nLCAmY29tcGxldGlvbikpOwpAQCAtNzgsNyArNzgsNyBAQCBwdWJsaWM6CiAKIFRFU1Qo
Q0NUaHJlYWRUZXN0LCBzdGFydFBvc3RBbmRXYWl0T25Db25kaXRpb24pCiB7Ci0gICAgT3duUHRy
PENDVGhyZWFkPiB0aHJlYWQgPSBDQ1RocmVhZDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPENDVGhy
ZWFkPiB0aHJlYWQgPSBDQ1RocmVhZDo6Y3JlYXRlKCk7CiAKICAgICBQaW5nUG9uZ1Rlc3RVc2lu
Z1Rhc2tzIHRhcmdldDsKICAgICB0aHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzaygm
dGFyZ2V0LCAmUGluZ1BvbmdUZXN0VXNpbmdUYXNrczo6cGluZykpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1ZpZXdUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NWaWV3VGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2NjODNjZWVkN2E0MzIy
NTZlNjhkZTJhYzdkZjczMTYyNmMxODg3YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NWaWV3VGVzdC5jcHAKQEAgLTAsMCArMSw0NjQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDVmlldy5oIgor
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJjYy9DQ01haW5UaHJl
YWRUYXNrLmgiCisjaW5jbHVkZSAiY2MvQ0NUaHJlYWRUYXNrLmgiCisjaW5jbHVkZSAiY2MvQ0NW
aWV3SW1wbC5oIgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8d2Via2l0L3N1
cHBvcnQvd2Via2l0X3N1cHBvcnQuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNl
IHsKKworY2xhc3MgTW9ja1ZpZXdDbGllbnQ7CitjbGFzcyBNb2NrVmlldzsKK2NsYXNzIE1vY2tW
aWV3SW1wbDsKKworLy8gVGhlIENDVmlld1Rlc3QgcnVucyB3aXRoIHRoZSBtYWluIGxvb3AgcnVu
bmluZy4gSXQgaW5zdGFudGlhdGVzIGEgc2luZ2xlIE1vY2tWaWV3IGFuZCBhc3NvY2lhdGVkCisv
LyBNb2NrVmlld0ltcGwvTW9ja1ZpZXdDbGllbnQuCisvLworLy8gYmVnaW5UZXN0KCkgaXMgY2Fs
bGVkIG9uY2UgdGhlIG1haW4gbWVzc2FnZSBsb29wIGlzIHJ1bm5pbmcgYW5kIHRoZSB2aWV3IGlz
IGluaXRpYWxpemVkLgorLy8KKy8vIEtleSBzdGFnZXMgb2YgdGhlIGRyYXdpbmcgbG9vcCwgZS5n
LiBkcmF3aW5nIG9yIGNvbW1pdGluZywgcmVkaXJlY3QgdG8gQ0NWaWV3VGVzdCBtZXRob2RzIG9m
IHNpbWlsYXIgbmFtZXMuCisvLyBUbyB0cmFjayB0aGUgY29tbWl0IHByb2Nlc3MsIG92ZXJyaWRl
IHRoZXNlIGZ1bmN0aW9ucy4KKy8vCisvLyBUaGUgdGVzdCBjb250aW51ZXMgdW50aWwgc29tZW9u
ZSBjYWxscyBlbmRUZXN0LiBlbmRUZXN0IGNhbiBiZSBjYWxsZWQgb24gYW55IHRocmVhZCwgYnV0
IGJlIGF3YXJlIHRoYXQKKy8vIGVuZGluZyB0aGUgdGVzdCBpcyBhbiBhc3luY2hyb25vdXMgcHJv
Y2Vzcy4KK2NsYXNzIENDVmlld1Rlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7CitwdWJsaWM6
CisgICAgQ0NWaWV3VGVzdCgpCisgICAgICAgIDogbV9iZWdpbm5pbmcoZmFsc2UpCisgICAgICAg
ICwgbV9lbmRXaGVuQmVnaW5SZXR1cm5zKGZhbHNlKQorICAgICAgICAsIG1fcnVubmluZyhmYWxz
ZSkKKyAgICAgICAgLCBtX3RpbWVkT3V0KGZhbHNlKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBh
ZnRlclRlc3QoKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KE1vY2tWaWV3Q2xpZW50KiB2aWV3LCBkb3Vi
bGUgZnJhbWVCZWdpblRpbWUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBhZnRlckNvbW1pdE9uQ0NU
aHJlYWQoTW9ja1ZpZXdJbXBsKiB2aWV3SW1wbCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRyYXdM
YXllcnNBbmRQcmVzZW50T25DQ1RocmVhZChNb2NrVmlld0ltcGwqIHZpZXdJbXBsKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlTGF5ZXJzKE1vY2tWaWV3KiB2aWV3KSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgY29tbWl0T25DQ1RocmVhZChNb2NrVmlldyogdmlldywgTW9ja1ZpZXdJbXBsKiB2
aWV3SW1wbCkgeyB9CisKKyAgICB2b2lkIGVuZFRlc3QoKTsKKworcHJvdGVjdGVkOgorICAgIHZv
aWQgZG9CZWdpblRlc3QoKTsKKworICAgIHN0YXRpYyB2b2lkIG9uQmVnaW5UZXN0KHZvaWQqIHNl
bGYpCisgICAgeworICAgICAgICBzdGF0aWNfY2FzdDxDQ1ZpZXdUZXN0Kj4oc2VsZiktPmRvQmVn
aW5UZXN0KCk7CisgICAgfQorCisgICAgdm9pZCBkb0VuZFRlc3QoKQorICAgIHsKKyAgICB9CisK
KyAgICBzdGF0aWMgdm9pZCBvbkVuZFRlc3Qodm9pZCogc2VsZikKKyAgICB7CisgICAgICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgICAgIENDVmlld1Rlc3QqIHRlc3QgPSBzdGF0aWNf
Y2FzdDxDQ1ZpZXdUZXN0Kj4oc2VsZik7CisgICAgICAgIHRlc3QtPm1fdmlldy5jbGVhcigpOwor
ICAgICAgICB0ZXN0LT5tX2NsaWVudC5jbGVhcigpOworICAgICAgICB3ZWJraXRfc3VwcG9ydDo6
UXVpdE1lc3NhZ2VMb29wKCk7CisgICAgfQorCisgICAgdm9pZCBydW5UZXN0KCkKKyAgICB7Cisg
ICAgICAgIHdlYmtpdF9zdXBwb3J0OjpQb3N0RGVsYXllZFRhc2soQ0NWaWV3VGVzdDo6b25CZWdp
blRlc3QsIHN0YXRpY19jYXN0PHZvaWQqPih0aGlzKSwgMCk7CisgICAgICAgIHdlYmtpdF9zdXBw
b3J0OjpQb3N0RGVsYXllZFRhc2soQ0NWaWV3VGVzdDo6dGVzdFRpbWVvdXQsIHN0YXRpY19jYXN0
PHZvaWQqPih0aGlzKSwgNTAwMCk7CisgICAgICAgIHdlYmtpdF9zdXBwb3J0OjpSdW5NZXNzYWdl
TG9vcCgpOworICAgICAgICBtX3J1bm5pbmcgPSBmYWxzZTsKKyAgICAgICAgYm9vbCB0aW1lZE91
dCA9IG1fdGltZWRPdXQ7IC8vIFNhdmUgd2hldGhlciB3ZSdyZSB0aW1lZCBvdXQgaW4gY2FzZSBS
dW5BbGxQZW5kaW5nTWVzc2FnZXMgaGFzIHRoZSB0aW1lb3V0LgorICAgICAgICB3ZWJraXRfc3Vw
cG9ydDo6UnVuQWxsUGVuZGluZ01lc3NhZ2VzKCk7CisgICAgICAgIGlmICh0aW1lZE91dCkgewor
ICAgICAgICAgICAgcHJpbnRmKCJUZXN0IHRpbWVkIG91dCIpOworICAgICAgICAgICAgRkFJTCgp
IDw8ICJUZXN0IHRpbWVkIG91dCI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgYWZ0ZXJUZXN0KCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgdGVzdFRpbWVvdXQo
dm9pZCogc2VsZikKKyAgICB7CisgICAgICAgIENDVmlld1Rlc3QqIHRlc3QgPSBzdGF0aWNfY2Fz
dDxDQ1ZpZXdUZXN0Kj4oc2VsZik7CisgICAgICAgIGlmICghdGVzdC0+bV9ydW5uaW5nKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB0ZXN0LT5tX3RpbWVkT3V0ID0gdHJ1ZTsKKyAgICAg
ICAgdGVzdC0+ZW5kVGVzdCgpOworICAgIH0KKworICAgIE11dGV4IG1fdHJhY2VzTG9jazsKKyAg
ICBWZWN0b3I8c3RkOjpzdHJpbmc+IG1fdHJhY2VzOworCisgICAgT3duUHRyPE1vY2tWaWV3Q2xp
ZW50PiBtX2NsaWVudDsKKyAgICBSZWZQdHI8TW9ja1ZpZXc+IG1fdmlldzsKKworcHJpdmF0ZToK
KyAgICBib29sIG1fYmVnaW5uaW5nOworICAgIGJvb2wgbV9lbmRXaGVuQmVnaW5SZXR1cm5zOwor
ICAgIGJvb2wgbV9ydW5uaW5nOworICAgIGJvb2wgbV90aW1lZE91dDsKK307CisKK2NsYXNzIE1v
Y2tWaWV3Q2xpZW50IDogcHVibGljIENDVmlld0NsaWVudCB7CitwdWJsaWM6CisgICAgTW9ja1Zp
ZXdDbGllbnQoQ0NWaWV3VGVzdCogdGVzdCkgOiBtX3Rlc3QodGVzdCkgeyB9CisKKyAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZVZpZXdDb250ZXh0M0QoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmPEdyYXBoaWNzQ29udGV4dDNEPigwKTsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdp
blRpbWUpCisgICAgeworICAgICAgICBtX3Rlc3QtPmFuaW1hdGVBbmRMYXlvdXQodGhpcywgZnJh
bWVCZWdpblRpbWUpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDQ1ZpZXdUZXN0KiBtX3Rlc3Q7
Cit9OworCitjbGFzcyBNb2NrVmlld0ltcGwgOiBwdWJsaWMgQ0NWaWV3SW1wbCB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NPd25QdHI8TW9ja1ZpZXdJbXBsPiBjcmVhdGUoUmVmUHRyPENDVmll
d0ltcGxDbGllbnQ+IGNsaWVudCwgQ0NWaWV3VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgTW9ja1ZpZXdJbXBsKGNsaWVudCwgdGVzdCkpOworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBhZnRlckNvbW1pdCgpCisgICAgeworICAgICAgICBDQ1ZpZXdJbXBs
OjphZnRlckNvbW1pdCgpOworICAgICAgICBtX3Rlc3QtPmFmdGVyQ29tbWl0T25DQ1RocmVhZCh0
aGlzKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVyc0FuZFByZXNlbnQoKQor
ICAgIHsKKyAgICAgICAgbV90ZXN0LT5kcmF3TGF5ZXJzQW5kUHJlc2VudE9uQ0NUaHJlYWQodGhp
cyk7CisgICAgfQorCitwcml2YXRlOgorICAgIE1vY2tWaWV3SW1wbChSZWZQdHI8Q0NWaWV3SW1w
bENsaWVudD4gY2xpZW50LCBDQ1ZpZXdUZXN0KiB0ZXN0KQorICAgICAgICAgICAgOiBDQ1ZpZXdJ
bXBsKGNsaWVudCkKKyAgICAgICAgICAgICwgbV90ZXN0KHRlc3QpCisgICAgeworICAgIH0KKwor
ICAgIENDVmlld1Rlc3QqIG1fdGVzdDsKK307CisKK2NsYXNzIE1vY2tWaWV3SW1wbEZhY3Rvcnkg
OiBwdWJsaWMgQ0NWaWV3SW1wbEZhY3RvcnkgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3du
UHRyPE1vY2tWaWV3SW1wbEZhY3Rvcnk+IGNyZWF0ZShDQ1ZpZXdUZXN0KiB0ZXN0KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBNb2NrVmlld0ltcGxGYWN0b3J5KHRlc3QpKTsK
KyAgICB9CisKKyAgICBQYXNzT3duUHRyPENDVmlld0ltcGw+IGNyZWF0ZUltcGxPbkNDVGhyZWFk
KFJlZlB0cjxDQ1ZpZXdJbXBsQ2xpZW50PiBjbGllbnQpCisgICAgeworICAgICAgICByZXR1cm4g
TW9ja1ZpZXdJbXBsOjpjcmVhdGUoY2xpZW50LCBtX3Rlc3QpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBNb2NrVmlld0ltcGxGYWN0b3J5KENDVmlld1Rlc3QqIHRlc3QpIDogbV90ZXN0KHRlc3Qp
IHsgfQorICAgIENDVmlld1Rlc3QqIG1fdGVzdDsKK307CisKK2NsYXNzIE1vY2tWaWV3IDogcHVi
bGljIENDVmlldyB7CitwdWJsaWM6CisgICAgTW9ja1ZpZXcoQ0NWaWV3Q2xpZW50KiBjbGllbnQs
IENDVmlld1Rlc3QqIHRlc3QpIDogQ0NWaWV3KGNsaWVudCksIG1fdGVzdCh0ZXN0KSB7IH0KKwor
ICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ1ZpZXdJbXBsRmFjdG9yeT4gY3JlYXRlVmlld0ltcGxG
YWN0b3J5KCkKKyAgICB7CisgICAgICAgIHJldHVybiBNb2NrVmlld0ltcGxGYWN0b3J5OjpjcmVh
dGUobV90ZXN0KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlTGF5ZXJzKCkKKyAg
ICB7CisgICAgICAgIG1fdGVzdC0+dXBkYXRlTGF5ZXJzKHRoaXMpOworICAgIH0KKworICAgIHZp
cnR1YWwgdm9pZCBjb21taXQoQ0NWaWV3SW1wbCogaW1wbCkKKyAgICB7CisgICAgICAgIENDVmll
dzo6Y29tbWl0KGltcGwpOworICAgICAgICBtX3Rlc3QtPmNvbW1pdE9uQ0NUaHJlYWQodGhpcywg
c3RhdGljX2Nhc3Q8TW9ja1ZpZXdJbXBsKj4oaW1wbCkpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBDQ1ZpZXdUZXN0KiBtX3Rlc3Q7Cit9OworCit2b2lkIENDVmlld1Rlc3Q6OmRvQmVnaW5UZXN0
KCkKK3sKKyAgICBBU1NFUlQoIW1fcnVubmluZyk7CisgICAgbV9ydW5uaW5nID0gdHJ1ZTsKKyAg
ICBtX2NsaWVudCA9IGFkb3B0UHRyKG5ldyBNb2NrVmlld0NsaWVudCh0aGlzKSk7CisgICAgbV92
aWV3ID0gYWRvcHRSZWYobmV3IE1vY2tWaWV3KG1fY2xpZW50LmdldCgpLCB0aGlzKSk7CisgICAg
bV92aWV3LT5pbml0KCk7CisgICAgbV9iZWdpbm5pbmcgPSB0cnVlOworICAgIGJlZ2luVGVzdCgp
OworICAgIG1fYmVnaW5uaW5nID0gZmFsc2U7CisgICAgaWYgKG1fZW5kV2hlbkJlZ2luUmV0dXJu
cykKKyAgICAgICAgb25FbmRUZXN0KHN0YXRpY19jYXN0PHZvaWQqPih0aGlzKSk7Cit9CisKK3Zv
aWQgQ0NWaWV3VGVzdDo6ZW5kVGVzdCgpCit7CisgICAgLy8gSWYgd2UgYXJlIGNhbGxlZCBmcm9t
IHRoZSBDQ1RocmVhZCwgcmUtY2FsbCBlbmRUZXN0IG9uIHRoZSBtYWluIHRocmVhZC4KKyAgICBp
ZiAoIWlzTWFpblRocmVhZCgpKQorICAgICAgICBDQ01haW5UaHJlYWQ6OnBvc3RUYXNrKGNyZWF0
ZU1haW5UaHJlYWRUYXNrKHRoaXMsICZDQ1ZpZXdUZXN0OjplbmRUZXN0KSk7CisgICAgZWxzZSB7
CisgICAgICAgIC8vIEZvciB0aGUgY2FzZSB3aGVyZSB3ZSBlbmRUZXN0IGR1cmluZyBiZWdpblRl
c3QoKSwgc2V0IGEgZmxhZyB0byBpbmRpY2F0ZSB0aGF0CisgICAgICAgIC8vIHRoZSB0ZXN0IHNo
b3VsZCBlbmQgdGhlIHNlY29uZCBiZWdpblRlc3QgcmVnYWlucyBjb250cm9sLgorICAgICAgICBp
ZiAobV9iZWdpbm5pbmcpCisgICAgICAgICAgICBtX2VuZFdoZW5CZWdpblJldHVybnMgPSB0cnVl
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBvbkVuZFRlc3Qoc3RhdGljX2Nhc3Q8dm9pZCo+
KHRoaXMpKTsKKyAgICB9Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLyBTaG9ydGxpdmVk
IHZpZXdzIHNob3VsZG4ndCBkaWUuCitjbGFzcyBDQ1ZpZXdUZXN0U2hvcnRsaXZlZFZpZXcxIDog
cHVibGljIENDVmlld1Rlc3QgeworcHVibGljOgorICAgIENDVmlld1Rlc3RTaG9ydGxpdmVkVmll
dzEoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKQorICAgIHsKKyAgICAgICAg
ZW5kVGVzdCgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhZnRlclRlc3QoKQorICAgIHsK
KyAgICB9Cit9OworVEVTVF9GKENDVmlld1Rlc3RTaG9ydGxpdmVkVmlldzEsIHJ1bikgeyBydW5U
ZXN0KCk7IH0KKworLy8gU2hvcnRsaXZlZCB2aWV3cyBzaG91ZG4ndCBkaWUgd2l0aCBhIGNvbW1p
dCBpbiBmbGlnaHQuCitjbGFzcyBDQ1ZpZXdUZXN0U2hvcnRsaXZlZFZpZXcyIDogcHVibGljIEND
Vmlld1Rlc3QgeworcHVibGljOgorICAgIENDVmlld1Rlc3RTaG9ydGxpdmVkVmlldzIoKSB7IH0K
KworICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKQorICAgIHsKKyAgICAgICAgbV92aWV3LT5z
ZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOworICAgICAgICBlbmRUZXN0KCk7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIGFmdGVyVGVzdCgpCisgICAgeworICAgIH0KK307CitURVNUX0YoQ0NW
aWV3VGVzdFNob3J0bGl2ZWRWaWV3MiwgcnVuKSB7IHJ1blRlc3QoKTsgfQorCisvLyBTaG9ydGxp
dmVkIHZpZXdzIHNob3Vkbid0IGRpZSB3aXRoIGEgcmVkcmF3IGluIGZsaWdodC4KK2NsYXNzIEND
Vmlld1Rlc3RTaG9ydGxpdmVkVmlldzMgOiBwdWJsaWMgQ0NWaWV3VGVzdCB7CitwdWJsaWM6Cisg
ICAgQ0NWaWV3VGVzdFNob3J0bGl2ZWRWaWV3MygpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGJl
Z2luVGVzdCgpCisgICAgeworICAgICAgICBtX3ZpZXctPnNldE5lZWRzUmVkcmF3KCk7CisgICAg
ICAgIGVuZFRlc3QoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkKKyAg
ICB7CisgICAgfQorfTsKK1RFU1RfRihDQ1ZpZXdUZXN0U2hvcnRsaXZlZFZpZXczLCBydW4pIHsg
cnVuVGVzdCgpOyB9CisKKworLy8gQ29uc3RhbnRseSByZWRyYXdpbmcgdmlld3Mgc2hvdWxkbnQg
ZGllIHdoZW4gdGhleSBjb21taXQKK2NsYXNzIENDVmlld1Rlc3RDb21taXRpbmdXaXRoQ29udGlu
dW91c1JlZHJhdyA6IHB1YmxpYyBDQ1ZpZXdUZXN0IHsKK3B1YmxpYzoKKyAgICBDQ1ZpZXdUZXN0
Q29tbWl0aW5nV2l0aENvbnRpbnVvdXNSZWRyYXcoKQorICAgICAgICA6IG1fbnVtQWZ0ZXJDb21t
aXRzKDApCisgICAgICAgICwgbV9udW1EcmF3cygwKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgYmVnaW5UZXN0KCkKKyAgICB7CisgICAgICAgIG1fdmlldy0+c2V0TmVlZHNDb21t
aXRBbmRSZWRyYXcoKTsKKyAgICAgICAgZW5kVGVzdCgpOworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCBhZnRlckNvbW1pdE9uQ0NUaHJlYWQoTW9ja1ZpZXdJbXBsKiB2aWV3SW1wbCkKKyAgICB7
CisgICAgICAgIG1fbnVtQWZ0ZXJDb21taXRzICs9IDE7CisgICAgICAgIGlmIChtX251bUFmdGVy
Q29tbWl0cyA9PSAyKQorICAgICAgICAgICAgZW5kVGVzdCgpOworICAgIH0KKworICAgIHZpcnR1
YWwgdm9pZCBkcmF3TGF5ZXJzQW5kUHJlc2VudE9uQ0NUaHJlYWQoTW9ja1ZpZXdJbXBsKiB2aWV3
SW1wbCkKKyAgICB7CisgICAgICAgIGlmIChtX251bURyYXdzID09IDEpCisgICAgICAgICAgICB2
aWV3SW1wbC0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICAgICAgbV9udW1EcmF3cysr
OworICAgICAgICB2aWV3SW1wbC0+c2V0TmVlZHNSZWRyYXcoKTsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgYWZ0ZXJUZXN0KCkKKyAgICB7CisgICAgfQorCitwcml2YXRlOgorICAgIGludCBt
X251bUFmdGVyQ29tbWl0czsKKyAgICBpbnQgbV9udW1EcmF3czsKK307CitURVNUX0YoQ0NWaWV3
VGVzdENvbW1pdGluZ1dpdGhDb250aW51b3VzUmVkcmF3LCBydW4pIHsgcnVuVGVzdCgpOyB9CisK
KworCisvLyBUd28gc2V0TmVlZHNDb21taXRzIGluIGEgcm93IHNob3VsZCBsZWFkIHRvIGF0IGxl
YXN0IDEgY29tbWl0IGFuZCBhdCBsZWFzdCAxCisvLyBkcmF3IHdpdGggZnJhbWUgMC4KK2NsYXNz
IENDVmlld1Rlc3RTZXROZWVkc0NvbW1pdDEgOiBwdWJsaWMgQ0NWaWV3VGVzdCB7CitwdWJsaWM6
CisgICAgQ0NWaWV3VGVzdFNldE5lZWRzQ29tbWl0MSgpCisgICAgICAgIDogbV9udW1Db21taXRz
KDApCisgICAgICAgICwgbV9udW1EcmF3cygwKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdp
blRlc3QoKQorICAgIHsKKyAgICAgICAgbV92aWV3LT5zZXROZWVkc0NvbW1pdEFuZFJlZHJhdygp
OworICAgICAgICBtX3ZpZXctPnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNBbmRQcmVzZW50T25DQ1RocmVhZChNb2NrVmlld0lt
cGwqIHZpZXdJbXBsKQorICAgIHsKKyAgICAgICAgbV9udW1EcmF3cysrOworICAgICAgICBpZiAo
IXZpZXdJbXBsLT5zb3VyY2VGcmFtZU51bWJlcigpKSAvLyBmcmFtZSAwCisgICAgICAgICAgICBl
bmRUZXN0KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGNvbW1pdE9uQ0NUaHJlYWQoTW9j
a1ZpZXcqIHZpZXcsIE1vY2tWaWV3SW1wbCogaW1wbCkKKyAgICB7CisgICAgICAgIG1fbnVtQ29t
bWl0cysrOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhZnRlclRlc3QoKQorICAgIHsKKyAg
ICAgICAgRVhQRUNUX0dFKDEsIG1fbnVtQ29tbWl0cyk7CisgICAgICAgIEVYUEVDVF9HRSgxLCBt
X251bURyYXdzKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgaW50IG1fbnVtQ29tbWl0czsKKyAg
ICBpbnQgbV9udW1EcmF3czsKK307CitURVNUX0YoQ0NWaWV3VGVzdFNldE5lZWRzQ29tbWl0MSwg
cnVuKSB7IHJ1blRlc3QoKTsgfQorCisKKy8vIEEgc2V0TmVlZHNDb21taXQgc2hvdWxkIGxlYWQg
dG8gMSBjb21taXQuIElzc3VpbmcgYSBzZWNvbmQgY29tbWl0IGFmdGVyIHRoYXQKKy8vIGZpcnN0
IGNvbW1pdGVkIGZyYW1lIGRyYXdzIHNob3VsZCBsZWFkIHRvIGFub3RoZXIgY29tbWl0LgorY2xh
c3MgQ0NWaWV3VGVzdFNldE5lZWRzQ29tbWl0MiA6IHB1YmxpYyBDQ1ZpZXdUZXN0IHsKK3B1Ymxp
YzoKKyAgICBDQ1ZpZXdUZXN0U2V0TmVlZHNDb21taXQyKCkKKyAgICAgICAgOiBtX251bUNvbW1p
dHMoMCkKKyAgICAgICAgLCBtX251bURyYXdzKDApIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGJl
Z2luVGVzdCgpCisgICAgeworICAgICAgICBtX3ZpZXctPnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3
KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNBbmRQcmVzZW50T25DQ1Ro
cmVhZChNb2NrVmlld0ltcGwqIHZpZXdJbXBsKQorICAgIHsKKyAgICAgICAgaWYgKCF2aWV3SW1w
bC0+c291cmNlRnJhbWVOdW1iZXIoKSkgLy8gZnJhbWUgMAorICAgICAgICAgICAgdmlld0ltcGwt
PnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgICAgIGVsc2UgaWYgKHZpZXdJbXBsLT5z
b3VyY2VGcmFtZU51bWJlcigpID09IDEpCisgICAgICAgICAgICBlbmRUZXN0KCk7CisgICAgfQor
CisgICAgdmlydHVhbCB2b2lkIGNvbW1pdE9uQ0NUaHJlYWQoTW9ja1ZpZXcqIHZpZXcsIE1vY2tW
aWV3SW1wbCogaW1wbCkKKyAgICB7CisgICAgICAgIG1fbnVtQ29tbWl0cysrOworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBhZnRlclRlc3QoKQorICAgIHsKKyAgICAgICAgRVhQRUNUX0VRKDIs
IG1fbnVtQ29tbWl0cyk7CisgICAgICAgIEVYUEVDVF9HRSgyLCBtX251bURyYXdzKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgaW50IG1fbnVtQ29tbWl0czsKKyAgICBpbnQgbV9udW1EcmF3czsK
K307CitURVNUX0YoQ0NWaWV3VGVzdFNldE5lZWRzQ29tbWl0MiwgcnVuKSB7IHJ1blRlc3QoKTsg
fQorCisKKy8vIDEgc2V0TmVlZHNSZWRyYXcgc2hvdWxkIGxlYWQgdG8gYXQgbGVhc3QgMSBkcmF3
IGJ1dCBubyBjb21taXQuCitjbGFzcyBDQ1ZpZXdUZXN0U2V0TmVlZHNSZWRyYXcgOiBwdWJsaWMg
Q0NWaWV3VGVzdCB7CitwdWJsaWM6CisgICAgQ0NWaWV3VGVzdFNldE5lZWRzUmVkcmF3KCkKKyAg
ICAgICAgOiBtX251bUNvbW1pdHMoMCkKKyAgICAgICAgLCBtX251bURyYXdzKDApIHsgfQorCisg
ICAgdmlydHVhbCB2b2lkIGJlZ2luVGVzdCgpCisgICAgeworICAgICAgICBtX3ZpZXctPnNldE5l
ZWRzUmVkcmF3KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNBbmRQcmVz
ZW50T25DQ1RocmVhZChNb2NrVmlld0ltcGwqIHZpZXcpCisgICAgeworICAgICAgICBFWFBFQ1Rf
RVEoLTEsIHZpZXctPnNvdXJjZUZyYW1lTnVtYmVyKCkpOworICAgICAgICBFWFBFQ1RfRVEoMCwg
dmlldy0+ZnJhbWVOdW1iZXIoKSk7CisgICAgICAgIG1fbnVtRHJhd3MgKz0gMTsKKyAgICAgICAg
ZW5kVGVzdCgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBjb21taXRPbkNDVGhyZWFkKE1v
Y2tWaWV3KiB2aWV3LCBNb2NrVmlld0ltcGwqIGltcGwpCisgICAgeworICAgICAgICBtX251bUNv
bW1pdHMrKzsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkKKyAgICB7Cisg
ICAgICAgIEVYUEVDVF9HRSgxLCBtX251bURyYXdzKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIG1f
bnVtQ29tbWl0cyk7CisgICAgfQorcHJpdmF0ZToKKyAgICBpbnQgbV9udW1Db21taXRzOworICAg
IGludCBtX251bURyYXdzOworfTsKK1RFU1RfRihDQ1ZpZXdUZXN0U2V0TmVlZHNSZWRyYXcsIHJ1
bikgeyBydW5UZXN0KCk7IH0KKworCisKK30gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89653</attachid>
            <date>2011-04-14 14:40:08 -0700</date>
            <delta_ts>2011-04-18 16:25:51 -0700</delta_ts>
            <desc>Shutdown impl before proxy dies.</desc>
            <filename>bug-58408-20110414144007.patch</filename>
            <type>text/plain</type>
            <size>64791</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODM1ODQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwNjNhODFkYzc1OWFkYzZk
ZDQxZTk4MzE5ZmZjNDI2MGY1NmNlMmU1Li5hMjczMTVkYzQ5YzMyMTBhN2ZiNDAwNTcxMzcwMmFh
MzhiOGZiNjM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzMgQEAKKzIwMTEtMDQtMTQgIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50IENDVmlldyBhbmQgQ0NWaWV3
SW1wbCBwb3J0aW9ucyBvZiB0aHJlYWRlZCBjb21wb3NpdG9yCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODQwOAorCisgICAgICAgIENyZWF0ZSBDQ1Zp
ZXcgYW5kIENDVmlld0ltcGwsIHdoaWNoIGFyZSB0aGUgbWFpbiB0aHJlYWQgYW5kIGNvbXBvc2l0
b3IKKyAgICAgICAgdGhyZWFkIGhhbHZlcyBvZiBhIGNvbXBvc2l0ZWQgdmlldy4gQ29tbXVuaWNh
dGlvbiBiZXR3ZWVuIHRoZSB0d28KKyAgICAgICAgaXMgYmFzZWQgb24gdGhlIGRlc2lnbiB1c2Vk
IGluIEZpbGVTdHJlYW1Qcm94eS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0p
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29tbWl0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bUltcGw6OkxheWVyUmVuZGVyZXJDaHJv
bWl1bUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbDo6
ZHJhd0xheWVyc0FuZFByZXNlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNo
cm9taXVtSW1wbDo6ZHJhd0xheWVyc09uTWFpblRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXllclJlbmRlcmVyQ2hyb21pdW1JbXBsRmFjdG9yeTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bUltcGxGYWN0b3J5OjpjcmVhdGVJbXBsT25DQ1RocmVh
ZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsRmFjdG9yeTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbEZhY3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGVWaWV3SW1wbEZhY3RvcnkpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDSGVhZHNVcERpc3BsYXk6OmN1cnJlbnRGcmFtZU51bWJlcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWV3LmNwcDogQ29waWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFk
c1VwRGlzcGxheS5oLgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWV3OjpDQ1ZpZXcpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NWaWV3Ojppbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlldzo6fkND
Vmlldyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZXc6OmFmdGVyQ29tbWl0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNDVmlldzo6YW5pbWF0ZUFuZExheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1ZpZXc6OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZXc6OnNldE5lZWRzQ29tbWl0
QW5kUmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlldzo6c2V0TmVlZHNSZWRyYXcpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlldy5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRz
VXBEaXNwbGF5LmguCisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZXc6OnVwZGF0ZUxheWVycyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWV3SW1wbC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWV3SW1wbDo6Q0NWaWV3SW1wbCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1ZpZXdJbXBsOjp+Q0NWaWV3SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1ZpZXdJbXBsOjphZnRlckNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZXdJbXBsOjpk
cmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlld0ltcGw6OnNldE5lZWRzQ29tbWl0
QW5kUmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlld0ltcGw6OnNldE5lZWRzUmVkcmF3
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZXdJbXBsLmg6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDSGVhZHNVcERpc3BsYXkuaC4KKyAgICAgICAgKFdlYkNvcmU6OkNDVmlld0ltcGxDbGllbnQ6
On5DQ1ZpZXdJbXBsQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlld0ltcGw6OmZyYW1l
TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlld0ltcGw6OnNvdXJjZUZyYW1lTnVtYmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlld0ltcGw6OnNldFNvdXJjZUZyYW1lTnVtYmVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZXdJbXBsUHJveHku
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDVmlld0ltcGxQcm94eTo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDVmlld0ltcGxQcm94eTo6Q0NWaWV3SW1wbFByb3h5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDVmlld0ltcGxQcm94eTo6fkNDVmlld0ltcGxQcm94eSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1ZpZXdJbXBsUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KToK
KyAgICAgICAgKFdlYkNvcmU6OkNDVmlld0ltcGxQcm94eTo6c2V0TmVlZHNSZWRyYXcpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NWaWV3SW1wbFByb3h5Ojpwb3N0RHJhd0xheWVyc1Rhc2tPbkNDVGhy
ZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlld0ltcGxQcm94eTo6cmVxdWVzdEZyYW1lQW5k
Q29tbWl0T25DQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZXdJbXBsUHJveHk6Omlz
TWFpblRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZXdJbXBsUHJveHk6OmlzQ0NUaHJl
YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWV3SW1wbFByb3h5OjpyZXF1ZXN0RnJhbWVBbmRD
b21taXQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWV3SW1wbFByb3h5Ojpjb21taXRPbkNDVGhy
ZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlld0ltcGxQcm94eTo6Y3JlYXRlSW1wbE9uQ0NU
aHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWV3SW1wbFByb3h5OjpkcmF3TGF5ZXJzT25D
Q1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZXdJbXBsUHJveHk6OnNldE5lZWRzQ29t
bWl0QW5kUmVkcmF3T25DQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZXdJbXBsUHJv
eHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZXdJ
bXBsUHJveHk6OnZpZXdDbG9zZWRPbkNDVGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1ZpZXdJbXBsUHJveHkuaDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oLgor
CiAyMDExLTA0LTEyICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AZ29vZ2xlLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBZdXJ5IFNlbWlraGF0c2t5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDFm
NDZhOGVhN2NlM2I2ZmM0YWI1MWEwNGY3MTg3MmUxMzM0OWM1ODEuLmY4ZDIxYzAzYmE2NWRlZmEz
OTkyYmI0Njc4MzYzYTNiODY1Y2RhNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTQwNTcsNiArNDA1
NywxMiBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhy
ZWFkVGFzay5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1ZpZGVvTGF5ZXJJbXBsLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1ZpZXcuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1ZpZXcuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NWaWV3SW1wbC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVmlld0ltcGwuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWV3SW1wbFByb3h5LmNwcCcsCisgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWV3SW1wbFByb3h5LmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbScs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0ZvbnRFZmwuY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9lZmwvSWNvbkVmbC5jcHAnLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggNGJkOGUwNjI0Y2Y2ZmRjOTEzODE2ZmZhMWY0
MDZmNDA2NTJkYjJiZC4uNDkzOTBhOTJhNGYzMTdlYzI2ZTkxNmQ5MjUxNGMxMWYzNWIzYmVlNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC00OCw2ICs0OCw4IEBA
CiAjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgogI2luY2x1ZGUgIldlYkdMTGF5ZXJDaHJvbWl1bS5o
IgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NNYWluVGhyZWFk
VGFzay5oIgorI2luY2x1ZGUgImNjL0NDVmlld0ltcGwuaCIKICNpZiBVU0UoU0tJQSkKICNpbmNs
dWRlICJOYXRpdmVJbWFnZVNraWEuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgi
CkBAIC05NCwyMCArOTYsMjMgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNvbXBhcmVM
YXllclooY29uc3QgUmVmUHRyPENDTGF5ZXJJbXBsPiYgYSwgY29uc3QgUmUKICAgICByZXR1cm4g
YS0+ZHJhd0RlcHRoKCkgPCBiLT5kcmF3RGVwdGgoKTsKIH0KIAotUGFzc1JlZlB0cjxMYXllclJl
bmRlcmVyQ2hyb21pdW0+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKFBhc3NSZWZQdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsIFBhc3NPd25QdHI8VGlsZVBhaW50SW50ZXJmYWNl
PiBjb250ZW50UGFpbnQsIFBhc3NPd25QdHI8VGlsZVBhaW50SW50ZXJmYWNlPiBzY3JvbGxiYXJQ
YWludCkKK1Bhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmNyZWF0ZShDQ1ZpZXdDbGllbnQqIGNsaWVudCwgUGFzc093blB0cjxUaWxlUGFpbnRJ
bnRlcmZhY2U+IGNvbnRlbnRQYWludCwgUGFzc093blB0cjxUaWxlUGFpbnRJbnRlcmZhY2U+IHNj
cm9sbGJhclBhaW50KQogeworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9
IGNsaWVudC0+Y3JlYXRlVmlld0NvbnRleHQzRCgpOwogICAgIGlmICghY29udGV4dCkKICAgICAg
ICAgcmV0dXJuIDA7CiAKLSAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJl
bmRlcmVyKGFkb3B0UmVmKG5ldyBMYXllclJlbmRlcmVyQ2hyb21pdW0oY29udGV4dCwgY29udGVu
dFBhaW50LCBzY3JvbGxiYXJQYWludCkpKTsKKyAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9t
aXVtPiBsYXllclJlbmRlcmVyKGFkb3B0UmVmKG5ldyBMYXllclJlbmRlcmVyQ2hyb21pdW0oY2xp
ZW50LCBjb250ZXh0LCBjb250ZW50UGFpbnQsIHNjcm9sbGJhclBhaW50KSkpOworICAgIGxheWVy
UmVuZGVyZXItPmluaXQoKTsKICAgICBpZiAoIWxheWVyUmVuZGVyZXItPmhhcmR3YXJlQ29tcG9z
aXRpbmcoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICByZXR1cm4gbGF5ZXJSZW5kZXJlci5y
ZWxlYXNlKCk7CiB9CiAKLUxheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9t
aXVtKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsIFBhc3NPd25QdHI8VGls
ZVBhaW50SW50ZXJmYWNlPiBjb250ZW50UGFpbnQsIFBhc3NPd25QdHI8VGlsZVBhaW50SW50ZXJm
YWNlPiBzY3JvbGxiYXJQYWludCkKLSAgICA6IG1fdmlld3BvcnRTY3JvbGxQb3NpdGlvbihJbnRQ
b2ludCgtMSwgLTEpKQorTGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21p
dW0oQ0NWaWV3Q2xpZW50KiBjbGllbnQsIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNv
bnRleHQsIFBhc3NPd25QdHI8VGlsZVBhaW50SW50ZXJmYWNlPiBjb250ZW50UGFpbnQsIFBhc3NP
d25QdHI8VGlsZVBhaW50SW50ZXJmYWNlPiBzY3JvbGxiYXJQYWludCkKKyAgICA6IENDVmlldyhj
bGllbnQpCisgICAgLCBtX3ZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoLTEsIC0xKSkK
ICAgICAsIG1fcm9vdExheWVyKDApCiAgICAgLCBtX3Jvb3RMYXllckNvbnRlbnRQYWludChjb250
ZW50UGFpbnQpCiAgICAgLCBtX3Jvb3RMYXllclNjcm9sbGJhclBhaW50KHNjcm9sbGJhclBhaW50
KQpAQCAtMjU2LDEwICsyNjEsMTAgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldFZp
ZXdwb3J0KGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWMKICAgICB9CiB9
CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVBbmREcmF3TGF5ZXJzKCkKLXsK
LSAgICBBU1NFUlQobV9oYXJkd2FyZUNvbXBvc2l0aW5nKTsKK3ZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjp1cGRhdGVMYXllcnMoKQogCit7CisgICAgQ0NWaWV3Ojp1cGRhdGVMYXllcnMoKTsK
ICAgICBpZiAoIW1fcm9vdExheWVyKQogICAgICAgICByZXR1cm47CiAKQEAgLTI3Miw5ICsyNzcs
MTMgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUFuZERyYXdMYXllcnMoKQog
CiAgICAgdXBkYXRlUm9vdExheWVyU2Nyb2xsYmFycygpOwogCi0gICAgTGF5ZXJMaXN0IHJlbmRl
clN1cmZhY2VMYXllckxpc3Q7Ci0gICAgdXBkYXRlTGF5ZXJzKHJlbmRlclN1cmZhY2VMYXllckxp
c3QpOworICAgIG1fY29tcHV0ZWRSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0ID0gYWRvcHRQdHIobmV3
IExheWVyTGlzdCgpKTsKKyAgICB1cGRhdGVMYXllcnMoKm1fY29tcHV0ZWRSZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LmdldCgpKTsKK30KIAordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdM
YXllcnMoKQoreworICAgIEFTU0VSVChtX2NvbXB1dGVkUmVuZGVyU3VyZmFjZUxheWVyTGlzdC5n
ZXQoKSk7CiAgICAgLy8gQmVmb3JlIGRyYXdMYXllcnM6CiAgICAgaWYgKGhhcmR3YXJlQ29tcG9z
aXRpbmcoKSAmJiBtX2NvbnRleHRTdXBwb3J0c0xhdGNoKSB7CiAgICAgICAgIC8vIEZJWE1FOiBU
aGUgbXVsdGl0aHJlYWRlZCBjb21wb3NpdG9yIGNhc2Ugd2lsbCBub3Qgd29yayBhcyBsb25nIGFz
CkBAIC0zMDAsNyArMzA5LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUFu
ZERyYXdMYXllcnMoKQogICAgICAgICBtX2NoaWxkQ29udGV4dHNXZXJlQ29waWVkID0gZmFsc2U7
CiAgICAgfQogCi0gICAgZHJhd0xheWVycyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBk
cmF3TGF5ZXJzKCptX2NvbXB1dGVkUmVuZGVyU3VyZmFjZUxheWVyTGlzdC5nZXQoKSk7CiAKICAg
ICAvLyBBZnRlciBkcmF3TGF5ZXJzOgogICAgIGlmIChoYXJkd2FyZUNvbXBvc2l0aW5nKCkgJiYg
bV9jb250ZXh0U3VwcG9ydHNMYXRjaCkgewpAQCAtMTE2Niw2ICsxMTc1LDczIEBAIHZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkdW1wUmVuZGVyU3VyZmFjZXMoVGV4dFN0cmVhbSYgdHMsIGlu
dCBpbmRlbnQsIExheWVyCiAgICAgICAgIGR1bXBSZW5kZXJTdXJmYWNlcyh0cywgaW5kZW50LCBs
YXllci0+Z2V0U3VibGF5ZXJzKClbaV0uZ2V0KCkpOwogfQogCit2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6Y29tbWl0KENDVmlld0ltcGwqIGltcGwpCit7CisgICAgQ0NWaWV3Ojpjb21taXQo
aW1wbCk7CisgICAgaW1wbC0+c2V0U291cmNlRnJhbWVOdW1iZXIobV9oZWFkc1VwRGlzcGxheS0+
Y3VycmVudEZyYW1lTnVtYmVyKCkpOworfQorCisKK2NsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1
bUltcGwgOiBwdWJsaWMgQ0NWaWV3SW1wbCB7CitwdWJsaWM6CisgICAgTGF5ZXJSZW5kZXJlckNo
cm9taXVtSW1wbChDQ1ZpZXdJbXBsQ2xpZW50KiBjbGllbnQsIExheWVyUmVuZGVyZXJDaHJvbWl1
bSogbGF5ZXJSZW5kZXJlcikKKyAgICAgICAgOiBDQ1ZpZXdJbXBsKGNsaWVudCkKKyAgICAgICAg
LCBtX2xheWVyUmVuZGVyZXIobGF5ZXJSZW5kZXJlcikgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
ZHJhd0xheWVyc0FuZFByZXNlbnQoKQorICAgIHsKKyAgICAgICAgQ0NDb21wbGV0aW9uRXZlbnQg
Y29tcGxldGlvbjsKKyAgICAgICAgYm9vbCBjb250ZXh0TG9zdDsKKyAgICAgICAgQ0NNYWluVGhy
ZWFkOjpwb3N0VGFzayhjcmVhdGVNYWluVGhyZWFkVGFzayh0aGlzLCAmTGF5ZXJSZW5kZXJlckNo
cm9taXVtSW1wbDo6ZHJhd0xheWVyc09uTWFpblRocmVhZCwgJmNvbXBsZXRpb24sICZjb250ZXh0
TG9zdCkpOworICAgICAgICBjb21wbGV0aW9uLndhaXQoKTsKKworICAgICAgICAvLyBGSVhNRTog
U2VuZCB0aGUgIlVwZGF0ZVJlY3QiIG1lc3NhZ2UgdXAgdG8gdGhlIFJlbmRlcldpZGdldCBbb3Ig
bW92ZXBsdWdpbiBlcXVpdmFsZW50cy4uLl0KKworICAgICAgICAvLyBGSVhNRTogaGFuZGxlIGNv
bnRleHQgbG9zdAorICAgICAgICBpZiAoY29udGV4dExvc3QpCisgICAgICAgICAgICBGQVRBTCgi
TGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbCBkb2VzIG5vdCBoYW5kbGUgY29udGV4dCBsb3N0IHll
dC4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBkcmF3TGF5ZXJzT25NYWluVGhyZWFk
KENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uLCBib29sKiBjb250ZXh0TG9zdCkKKyAgICB7
CisgICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICAgICAgbV9sYXllclJlbmRl
cmVyLT5kcmF3TGF5ZXJzKCk7CisgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+cHJlc2VudCgpOwor
CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbV9sYXllclJlbmRlcmVyLT5j
b250ZXh0KCk7CisgICAgICAgICpjb250ZXh0TG9zdCA9IGNvbnRleHQtPmdldEV4dGVuc2lvbnMo
KS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19F
UlJPUjsKKworICAgICAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKKyAgICB9CisKKyAgICBMYXll
clJlbmRlcmVyQ2hyb21pdW0qIG1fbGF5ZXJSZW5kZXJlcjsKK307CisKK2NsYXNzIExheWVyUmVu
ZGVyZXJDaHJvbWl1bUltcGxGYWN0b3J5IDogcHVibGljIENDVmlld0ltcGxGYWN0b3J5IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsRmFj
dG9yeT4gY3JlYXRlKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgTGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbEZh
Y3RvcnkobGF5ZXJSZW5kZXJlcikpOworICAgIH0KKworICAgIHZpcnR1YWwgUGFzc093blB0cjxD
Q1ZpZXdJbXBsPiBjcmVhdGVJbXBsT25DQ1RocmVhZChDQ1ZpZXdJbXBsQ2xpZW50KiBjbGllbnQp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IExheWVyUmVuZGVyZXJDaHJvbWl1
bUltcGwoY2xpZW50LCBtX2xheWVyUmVuZGVyZXIpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
TGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbEZhY3RvcnkoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBs
YXllclJlbmRlcmVyKSA6IG1fbGF5ZXJSZW5kZXJlcihsYXllclJlbmRlcmVyKSB7IH0KKworICAg
IExheWVyUmVuZGVyZXJDaHJvbWl1bSogbV9sYXllclJlbmRlcmVyOworfTsKKworUGFzc093blB0
cjxDQ1ZpZXdJbXBsRmFjdG9yeT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGVWaWV3SW1w
bEZhY3RvcnkoKQoreworICAgIHJldHVybiBMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsRmFjdG9y
eTo6Y3JlYXRlKHRoaXMpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAv
LyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5oCmluZGV4IDcxMDg3OGFlMTNmYjU3YzU4OTNmMmNhNmVhOGVlMWIxNGQyN2JjNTEuLjVl
NTU0M2UxNzk4ZWUwOTc5MzUwZWE0ZDk0NmQ0MWIxODJiNzNjZTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5oCkBAIC00NSwxMSArNDUsMTIgQEAKICNpbmNsdWRlICJjYy9DQ0hl
YWRzVXBEaXNwbGF5LmgiCiAjaW5jbHVkZSAiY2MvQ0NQbHVnaW5MYXllckltcGwuaCIKICNpbmNs
dWRlICJjYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NWaWV3LmgiCisjaW5j
bHVkZSAiY2MvQ0NWaWV3SW1wbC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWYgUExBVEZPUk0oQ0cpCkBAIC02MCwxNyArNjEsMTkg
QEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NMYXllckltcGw7CitjbGFzcyBDQ1Zp
ZXdJbXBsOwogY2xhc3MgR2VvbWV0cnlCaW5kaW5nOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7
CiBjbGFzcyBDQ0hlYWRzVXBEaXNwbGF5OwogCiAvLyBDbGFzcyB0aGF0IGhhbmRsZXMgZHJhd2lu
ZyBvZiBjb21wb3NpdGVkIHJlbmRlciBsYXllcnMgdXNpbmcgR0wuCi1jbGFzcyBMYXllclJlbmRl
cmVyQ2hyb21pdW0gOiBwdWJsaWMgUmVmQ291bnRlZDxMYXllclJlbmRlcmVyQ2hyb21pdW0+IHsK
K2NsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bSA6IHB1YmxpYyBDQ1ZpZXcgewogcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gY3JlYXRlKFBhc3NS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBQYXNzT3duUHRyPFRpbGVQYWludEludGVyZmFjZT4g
Y29udGVudFBhaW50LCBQYXNzT3duUHRyPFRpbGVQYWludEludGVyZmFjZT4gc2Nyb2xsYmFyUGFp
bnQpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gY3JlYXRl
KENDVmlld0NsaWVudCosIFBhc3NPd25QdHI8VGlsZVBhaW50SW50ZXJmYWNlPiBjb250ZW50UGFp
bnQsIFBhc3NPd25QdHI8VGlsZVBhaW50SW50ZXJmYWNlPiBzY3JvbGxiYXJQYWludCk7CiAKICAg
ICB+TGF5ZXJSZW5kZXJlckNocm9taXVtKCk7CiAKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NW
aWV3SW1wbEZhY3Rvcnk+IGNyZWF0ZVZpZXdJbXBsRmFjdG9yeSgpOwogICAgIEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0KCk7CiAKICAgICB2b2lkIGludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNv
bnN0IEludFJlY3QmIGRpcnR5UmVjdCk7CkBAIC03OCw3ICs4MSw5IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldFZpZXdwb3J0KGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0
JiBjb250ZW50UmVjdCwgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKTsKIAogICAgIC8v
IHVwZGF0ZXMgYW5kIGRyYXdzIHRoZSBjdXJyZW50IGxheWVycyBvbnRvIHRoZSBiYWNrYnVmZmVy
Ci0gICAgdm9pZCB1cGRhdGVBbmREcmF3TGF5ZXJzKCk7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZUxheWVycygpOworICAgIHZpcnR1YWwgdm9pZCBjb21taXQoQ0NWaWV3SW1wbCopOworICAgIHZv
aWQgZHJhd0xheWVycygpOwogCiAgICAgLy8gd2FpdHMgZm9yIHJlbmRlcmluZyB0byBmaW5pc2gK
ICAgICB2b2lkIGZpbmlzaCgpOwpAQCAtMTM4LDcgKzE0Myw3IEBAIHByaXZhdGU6CiAgICAgdHlw
ZWRlZiBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+IExheWVyTGlzdDsKICAgICB0eXBlZGVm
IEhhc2hNYXA8UmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgaW50PiBDaGlsZENvbnRleHRNYXA7
CiAKLSAgICBleHBsaWNpdCBMYXllclJlbmRlcmVyQ2hyb21pdW0oUGFzc1JlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4sIFBhc3NPd25QdHI8VGlsZVBhaW50SW50ZXJmYWNlPiBjb250ZW50UGFpbnQs
IFBhc3NPd25QdHI8VGlsZVBhaW50SW50ZXJmYWNlPiBzY3JvbGxiYXJQYWludCk7CisgICAgZXhw
bGljaXQgTGF5ZXJSZW5kZXJlckNocm9taXVtKENDVmlld0NsaWVudCosIFBhc3NSZWZQdHI8R3Jh
cGhpY3NDb250ZXh0M0Q+LCBQYXNzT3duUHRyPFRpbGVQYWludEludGVyZmFjZT4gY29udGVudFBh
aW50LCBQYXNzT3duUHRyPFRpbGVQYWludEludGVyZmFjZT4gc2Nyb2xsYmFyUGFpbnQpOwogCiAg
ICAgdm9pZCB1cGRhdGVMYXllcnMoTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsK
ICAgICB2b2lkIHVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKCk7CkBAIC0xODcsNiArMTkyLDggQEAg
cHJpdmF0ZToKIAogICAgIGJvb2wgbV9oYXJkd2FyZUNvbXBvc2l0aW5nOwogCisgICAgT3duUHRy
PExheWVyTGlzdD4gbV9jb21wdXRlZFJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisKICAgICB1bnNp
Z25lZCBtX2N1cnJlbnRTaGFkZXI7CiAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBtX2N1cnJl
bnRSZW5kZXJTdXJmYWNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmgKaW5kZXggZDU2
ZjhhYjg4NjcxOTQ1ZWFkY2U1Y2IzNDk0NWJlMjExYWIzOTY5NC4uMzZmYzFiN2ZhMDhiZTEzOWNi
NTc3OWRiOGMyMGE5YTYxZTk1MDZiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaApA
QCAtNDUsNiArNDUsOCBAQCBwdWJsaWM6CiAKICAgICB+Q0NIZWFkc1VwRGlzcGxheSgpOwogCisg
ICAgaW50IGN1cnJlbnRGcmFtZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEZyYW1l
TnVtYmVyOyB9CisKICAgICB2b2lkIG9uUHJlc2VudCgpOwogCiAgICAgdm9pZCBzZXRTaG93RlBT
Q291bnRlcihib29sIGVuYWJsZSkgeyBtX3Nob3dGUFNDb3VudGVyID0gZW5hYmxlOyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Zp
ZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NW
aWV3LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5jOTk3OTAzZDAyMjBkY2NkOTA3YTAwZGY0MmRjM2U5OTI1OTU2
ZTczCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NWaWV3LmNwcApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICog
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJDQ1ZpZXcuaCIKKworI2luY2x1ZGUgIkND
Vmlld0ltcGwuaCIKKyNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworQ0NWaWV3OjpDQ1ZpZXcoQ0NWaWV3Q2xpZW50KiBjbGllbnQpCisgICAgOiBtX2NsaWVu
dChjbGllbnQpCisgICAgLCBtX2ZyYW1lTnVtYmVyKDApCit7Cit9CisKK3ZvaWQgQ0NWaWV3Ojpp
bml0KCkKK3sKKyNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgbV9wcm94eSA9IEND
Vmlld0ltcGxQcm94eTo6Y3JlYXRlKHRoaXMpOworI2VuZGlmCit9CisKK0NDVmlldzo6fkNDVmll
dygpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDVmlldzo6fkNDVmlldyIsIHRoaXMsIDApOworICAg
IG1fcHJveHkuY2xlYXIoKTsKK30KKwordm9pZCBDQ1ZpZXc6OmFmdGVyQ29tbWl0KCkKK3sKKyAg
ICBtX2ZyYW1lTnVtYmVyKys7Cit9Cit2b2lkIENDVmlldzo6YW5pbWF0ZUFuZExheW91dChkb3Vi
bGUgZnJhbWVCZWdpblRpbWUpCit7CisgICAgbV9jbGllbnQtPmFuaW1hdGVBbmRMYXlvdXQoZnJh
bWVCZWdpblRpbWUpOworfQorCit2b2lkIENDVmlldzo6Y29tbWl0KENDVmlld0ltcGwqIGltcGwp
Cit7CisgICAgaW1wbC0+c2V0U291cmNlRnJhbWVOdW1iZXIobV9mcmFtZU51bWJlcik7Cit9CisK
K3ZvaWQgQ0NWaWV3OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpCit7CisgICAgbV9wcm94eS0+
c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKK30KKwordm9pZCBDQ1ZpZXc6OnNldE5lZWRzUmVk
cmF3KCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NWaWV3OjpzZXROZWVkc1JlZHJhdyIsIHRoaXMs
IDApOworICAgIG1fcHJveHktPnNldE5lZWRzUmVkcmF3KCk7Cit9CisKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlldy5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWV3LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNDIwZjQ2YzkyOTA3ZGJiYjhmMTgxMjcyYjRiOTNiNGI4Njk3OWM4OAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVmlldy5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NWaWV3
X2gKKyNkZWZpbmUgQ0NWaWV3X2gKKworI2luY2x1ZGUgImNjL0NDVmlld0ltcGxQcm94eS5oIgor
I2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIENDVmlld0ltcGw7CitjbGFzcyBDQ1ZpZXdJbXBsQ2xpZW50OworY2xhc3MgR3JhcGhpY3ND
b250ZXh0M0Q7CisKK2NsYXNzIENDVmlld0NsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGVWaWV3Q29udGV4dDNEKCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkg
PSAwOworfTsKKworY2xhc3MgQ0NWaWV3SW1wbEZhY3RvcnkgeworcHVibGljOgorICAgIHZpcnR1
YWwgUGFzc093blB0cjxDQ1ZpZXdJbXBsPiBjcmVhdGVJbXBsT25DQ1RocmVhZChDQ1ZpZXdJbXBs
Q2xpZW50KikgPSAwOworfTsKKworLy8gQ0NWaWV3IChlcXVpdmFsZW50IHRvIExheWVyVHJlZUhv
c3QgaW4gQ0EpCitjbGFzcyBDQ1ZpZXcgOiBwdWJsaWMgUmVmQ291bnRlZDxDQ1ZpZXc+IHsKK3B1
YmxpYzoKKyAgICBleHBsaWNpdCBDQ1ZpZXcoQ0NWaWV3Q2xpZW50Kik7CisgICAgdm9pZCBpbml0
KCk7CisgICAgdmlydHVhbCB+Q0NWaWV3KCk7CisKKyAgICAvLyBjYWxsZWQgb24gbWFpbiB0aHJl
YWQuLi4gbm90ZSB0aGF0IHRoZSBmYWN0b3J5IG1heSBvdXRsaXZlIHRoZSB2aWV3IQorICAgIHZp
cnR1YWwgUGFzc093blB0cjxDQ1ZpZXdJbXBsRmFjdG9yeT4gY3JlYXRlVmlld0ltcGxGYWN0b3J5
KCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGFmdGVyQ29tbWl0KCk7CisgICAgdmlydHVhbCB2
b2lkIGFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKKyAgICB2aXJ0dWFs
IHZvaWQgY29tbWl0KENDVmlld0ltcGwqKTsKKworICAgIHZvaWQgc2V0TmVlZHNDb21taXRBbmRS
ZWRyYXcoKTsKKyAgICB2b2lkIHNldE5lZWRzUmVkcmF3KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlTGF5ZXJzKCkgeyB9CisKK3ByaXZhdGU6CisgICAgQ0NWaWV3Q2xpZW50KiBtX2NsaWVu
dDsKKyAgICBpbnQgbV9mcmFtZU51bWJlcjsKKyAgICBPd25QdHI8Q0NWaWV3SW1wbFByb3h5PiBt
X3Byb3h5OworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlld0ltcGwuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWV3SW1wbC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOTk2NzQ2MmJkMmI2N2U5MDI1MTZiNTJmZDZmNTgxYjU0NDZkOGVmNQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmll
d0ltcGwuY3BwCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2luY2x1ZGUgIkNDVmlld0ltcGwuaCIKKworI2luY2x1ZGUgIkNDVGhyZWFkVGFz
ay5oIgorI2luY2x1ZGUgIkNDVmlldy5oIgorI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKKyNpbmNs
dWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDQ1ZpZXdJ
bXBsOjpDQ1ZpZXdJbXBsKENDVmlld0ltcGxDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fc291cmNl
RnJhbWVOdW1iZXIoLTEpCisgICAgLCBtX2ZyYW1lTnVtYmVyKDApCisgICAgLCBtX2NsaWVudChj
bGllbnQpCisgICAgLCBtX2NvbW1pdFBlbmRpbmcoZmFsc2UpCisgICAgLCBtX3JlZHJhd0VucXVl
dWVkKGZhbHNlKQoreworfQorCitDQ1ZpZXdJbXBsOjp+Q0NWaWV3SW1wbCgpCit7CisgICAgVFJB
Q0VfRVZFTlQoIkNDVmlld0ltcGw6On5DQ1ZpZXdJbXBsKCkiLCB0aGlzLCAwKTsKK30KKwordm9p
ZCBDQ1ZpZXdJbXBsOjphZnRlckNvbW1pdCgpCit7CisgICAgbV9jb21taXRQZW5kaW5nID0gZmFs
c2U7CisgICAgc2V0TmVlZHNSZWRyYXcoKTsKK30KKwordm9pZCBDQ1ZpZXdJbXBsOjpkcmF3TGF5
ZXJzKCkKK3sKKyAgICAvLyBJZiBhIGNvbW1pdCBpcyBwZW5kaW5nLCBkbyBub3QgZHJhdy4gVGhp
cyBpcyBhIHRlbXBvcmFyeSByZXN0cmljdGlvbiB0aGF0CisgICAgLy8gaXMgbmVjZXNzYXJ5IGJl
Y2F1c2UgZHJhd0xheWVycyBpcyBjdXJyZW50bHkgYSBibG9ja2luZyBvcGVyYXRpb24gb24gdGhl
IG1haW4gdGhyZWFkLgorICAgIGlmIChtX2NvbW1pdFBlbmRpbmcpCisgICAgICAgIHJldHVybjsK
KworICAgIFRSQUNFX0VWRU5UKCJDQ1ZpZXdJbXBsOjpkcmF3TGF5ZXJzIiwgdGhpcywgMCk7Cisg
ICAgQVNTRVJUKG1fcmVkcmF3RW5xdWV1ZWQpOworICAgIG1fcmVkcmF3RW5xdWV1ZWQgPSBmYWxz
ZTsKKworICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoIkNDVmlld0ltcGw6OmRyYXdMYXllcnNB
bmRQcmVzZW50IiwgdGhpcywgMCk7CisgICAgICAgIGRyYXdMYXllcnNBbmRQcmVzZW50KCk7Cisg
ICAgfQorCisgICAgbV9mcmFtZU51bWJlciArPSAxOworfQorCit2b2lkIENDVmlld0ltcGw6OnNl
dE5lZWRzQ29tbWl0QW5kUmVkcmF3KCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NWaWV3SW1wbDo6
c2V0TmVlZHNDb21taXRBbmRSZWRyYXciLCB0aGlzLCAwKTsKKworICAgIC8vIEZJWE1FOiBtb3Zl
IHRoZSByZXF1ZXN0RnJhbWVBbmRDb21taXQgb3V0IGZyb20gaGVyZSBvbmNlIHdlIGFkZCBmcmFt
ZXJhdGUgdGhyb3R0bGluZy9hbmltYXRpb24KKyAgICBkb3VibGUgZnJhbWVCZWdpblRpbWUgPSBj
dXJyZW50VGltZSgpOworICAgIG1fY29tbWl0UGVuZGluZyA9IHRydWU7CisgICAgbV9jbGllbnQt
PnJlcXVlc3RGcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQoZnJhbWVCZWdpblRpbWUpOworfQorCit2
b2lkIENDVmlld0ltcGw6OnNldE5lZWRzUmVkcmF3KCkKK3sKKyAgICBpZiAobV9yZWRyYXdFbnF1
ZXVlZCB8fCBtX2NvbW1pdFBlbmRpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIFRSQUNFX0VW
RU5UKCJDQ1ZpZXdJbXBsOjpzZXROZWVkc1JlZHJhdyIsIHRoaXMsIDApOworICAgIG1fcmVkcmF3
RW5xdWV1ZWQgPSB0cnVlOworICAgIG1fY2xpZW50LT5wb3N0RHJhd0xheWVyc1Rhc2tPbkNDVGhy
ZWFkKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVmlld0ltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVmlld0ltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hN2RmMTg4NzFkMzk4
ZmVmOTk0NjI5NDY5NGY2ZWNkNmMwYmZmYWU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWV3SW1wbC5oCkBAIC0wLDAg
KzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NWaWV3SW1wbF9oCisjZGVmaW5lIEND
Vmlld0ltcGxfaAorCisjaW5jbHVkZSAiY2MvQ0NUaHJlYWQuaCIKKyNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworLy8gUHJvdmlkZXMgc2NoZWR1bGluZyBpbmZyYXN0dXJjdHVyZSBmb3Ig
YSBDQ1ZpZXdJbXBsCitjbGFzcyBDQ1ZpZXdJbXBsQ2xpZW50ICB7CitwdWJsaWM6CisgICAgdmly
dHVhbCB+Q0NWaWV3SW1wbENsaWVudCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwb3N0RHJhd0xh
eWVyc1Rhc2tPbkNDVGhyZWFkKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0RnJhbWVB
bmRDb21taXRPbkNDVGhyZWFkKGRvdWJsZSBmcmFtZUJlZ2luVGltZSkgPSAwOworfTsKKworLy8g
Q0NWaWV3SW1wbCBvd25zIHRoZSBDQ0xheWVySW1wbCB0cmVlIGFzIHdlbGwgYXMgYXNzb2NpYXRl
ZCByZW5kZXJpbmcgc3RhdGUKK2NsYXNzIENDVmlld0ltcGwgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKENDVmlld0ltcGwpOworcHVibGljOgorICAgIGV4cGxpY2l0IENDVmlld0ltcGwoQ0NW
aWV3SW1wbENsaWVudCopOworICAgIHZpcnR1YWwgfkNDVmlld0ltcGwoKTsKKworICAgIHZpcnR1
YWwgdm9pZCBhZnRlckNvbW1pdCgpOworCisgICAgdm9pZCBkcmF3TGF5ZXJzKCk7CisgICAgdmly
dHVhbCB2b2lkIGRyYXdMYXllcnNBbmRQcmVzZW50KCkgPSAwOworCisgICAgaW50IGZyYW1lTnVt
YmVyKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZU51bWJlcjsgfQorCisgICAgdm9pZCBzZXROZWVk
c1JlZHJhdygpOworICAgIHZvaWQgc2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKworICAgIGlu
dCBzb3VyY2VGcmFtZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlRnJhbWVOdW1iZXI7
IH0KKyAgICB2b2lkIHNldFNvdXJjZUZyYW1lTnVtYmVyKGludCBmcmFtZU51bWJlcikgeyBtX3Nv
dXJjZUZyYW1lTnVtYmVyID0gZnJhbWVOdW1iZXI7IH0KKworcHJvdGVjdGVkOgorICAgIGludCBt
X3NvdXJjZUZyYW1lTnVtYmVyOworICAgIGludCBtX2ZyYW1lTnVtYmVyOworCitwcml2YXRlOgor
ICAgIENDVmlld0ltcGxDbGllbnQqIG1fY2xpZW50OworICAgIGJvb2wgbV9jb21taXRQZW5kaW5n
OworICAgIGJvb2wgbV9yZWRyYXdFbnF1ZXVlZDsKK307CisKK307CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWV3
SW1wbFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVmlld0ltcGxQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDgyZDZiMjZmYmY5YzJmMTBhYTA0
NGQwM2I0MzE5ZTAyYzdkMjhmMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlld0ltcGxQcm94eS5jcHAKQEAgLTAsMCAr
MSwyMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUg
IkNDVmlld0ltcGxQcm94eS5oIgorCisjaW5jbHVkZSAiQ0NNYWluVGhyZWFkVGFzay5oIgorI2lu
Y2x1ZGUgIkNDVGhyZWFkVGFzay5oIgorI2luY2x1ZGUgIkNDVmlldy5oIgorI2luY2x1ZGUgIlRy
YWNlRXZlbnQuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCituYW1lc3BhY2UgeworQ0NUaHJlYWQqIGNjVGhyZWFkOworaW50IG51bVByb3hpZXMgPSAw
OworfQorCitQYXNzT3duUHRyPENDVmlld0ltcGxQcm94eT4gQ0NWaWV3SW1wbFByb3h5OjpjcmVh
dGUoQ0NWaWV3KiB2aWV3KQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NWaWV3SW1wbFBy
b3h5KHZpZXcpKTsKK30KKworQ0NWaWV3SW1wbFByb3h5OjpDQ1ZpZXdJbXBsUHJveHkoQ0NWaWV3
KiB2aWV3KQorICAgIDogbV9jb21taXRQZW5kaW5nKGZhbHNlKQorICAgICwgbV92aWV3KHZpZXcp
Cit7CisgICAgVFJBQ0VfRVZFTlQoIkNDVmlld0ltcGxQcm94eTo6Q0NWaWV3SW1wbFByb3h5Iiwg
dGhpcywgMCk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBudW1Qcm94aWVzICs9
IDE7CisgICAgaWYgKCFjY1RocmVhZCkKKyAgICAgICAgY2NUaHJlYWQgPSBDQ1RocmVhZDo6Y3Jl
YXRlKCkubGVha1B0cigpOworCisgICAgLy8gQ3JlYXRlIFZpZXdJbXBsLgorICAgIGNjVGhyZWFk
LT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVmlld0ltcGxQcm94eTo6Y3Jl
YXRlSW1wbE9uQ0NUaHJlYWQsIG1fdmlldy0+Y3JlYXRlVmlld0ltcGxGYWN0b3J5KCkpKTsKK30K
KworQ0NWaWV3SW1wbFByb3h5Ojp+Q0NWaWV3SW1wbFByb3h5KCkKK3sKKyAgICBUUkFDRV9FVkVO
VCgiQ0NWaWV3SW1wbFByb3h5Ojp+Q0NWaWV3SW1wbFByb3h5IiwgdGhpcywgMCk7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBtX3ZpZXcgPSAwOworICAgIENDQ29tcGxldGlvbkV2
ZW50IGNvbXBsZXRpb247CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFz
ayh0aGlzLCAmQ0NWaWV3SW1wbFByb3h5Ojp2aWV3Q2xvc2VkT25DQ1RocmVhZCwgJmNvbXBsZXRp
b24pKTsKKyAgICBjb21wbGV0aW9uLndhaXQoKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworICAgIEFTU0VSVCghbV92aWV3SW1wbC5nZXQoKSk7IC8vIHZpZXdDbG9zZWRPbkNDVGhyZWFk
KCkgc2hvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIGNhbGxlZAorCisgICAgbnVtUHJveGllcyAtPSAx
OworICAgIGlmICghbnVtUHJveGllcykgeworICAgICAgICBkZWxldGUgY2NUaHJlYWQ7CisgICAg
ICAgIGNjVGhyZWFkID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgQ0NWaWV3SW1wbFByb3h5OjpzZXRO
ZWVkc0NvbW1pdEFuZFJlZHJhdygpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAg
ICBpZiAobV9jb21taXRQZW5kaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBUUkFDRV9FVkVO
VCgiQ0NWaWV3SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdyIsIHRoaXMsIDApOwor
ICAgIG1fY29tbWl0UGVuZGluZyA9IHRydWU7CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0
ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NWaWV3SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJl
ZHJhd09uQ0NUaHJlYWQpKTsKK30KKwordm9pZCBDQ1ZpZXdJbXBsUHJveHk6OnNldE5lZWRzUmVk
cmF3KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGNjVGhyZWFkLT5wb3N0
VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVmlld0ltcGxQcm94eTo6c2V0TmVlZHNS
ZWRyYXdPbkNDVGhyZWFkKSk7Cit9CisKK3ZvaWQgQ0NWaWV3SW1wbFByb3h5Ojpwb3N0RHJhd0xh
eWVyc1Rhc2tPbkNDVGhyZWFkKCkKK3sKKyAgICBBU1NFUlQoaXNDQ1RocmVhZCgpKTsKKyAgICBp
ZiAobV92aWV3SW1wbCkKKyAgICAgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFk
VGFzayh0aGlzLCAmQ0NWaWV3SW1wbFByb3h5OjpkcmF3TGF5ZXJzT25DQ1RocmVhZCkpOworfQor
Cit2b2lkIENDVmlld0ltcGxQcm94eTo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZChk
b3VibGUgZnJhbWVCZWdpblRpbWUpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDVmlld0ltcGxQcm94
eTo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VS
VChpc0NDVGhyZWFkKCkpOworICAgIGlmIChtX3ZpZXdJbXBsKQorICAgICAgICBDQ01haW5UaHJl
YWQ6OnBvc3RUYXNrKGNyZWF0ZU1haW5UaHJlYWRUYXNrKHRoaXMsICZDQ1ZpZXdJbXBsUHJveHk6
OnJlcXVlc3RGcmFtZUFuZENvbW1pdCwgZnJhbWVCZWdpblRpbWUpKTsKK30KKworYm9vbCBDQ1Zp
ZXdJbXBsUHJveHk6OmlzTWFpblRocmVhZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIDo6aXNNYWlu
VGhyZWFkKCk7Cit9CisKK2Jvb2wgQ0NWaWV3SW1wbFByb3h5Ojppc0NDVGhyZWFkKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gY3VycmVudFRocmVhZCgpID09IGNjVGhyZWFkLT50aHJlYWRJRCgpOwor
fQorCit2b2lkIENDVmlld0ltcGxQcm94eTo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0KGRvdWJsZSBm
cmFtZUJlZ2luVGltZSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlmICgh
bV92aWV3KQorICAgICAgICByZXR1cm47CisKKyAgICBUUkFDRV9FVkVOVCgiQ0NWaWV3SW1wbFBy
b3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21taXQiLCB0aGlzLCAwKTsKKyAgICB7CisgICAgICAgIFRS
QUNFX0VWRU5UKCJDQ1ZpZXc6OmFuaW1hdGVBbmRMYXlvdXQiLCB0aGlzLCAwKTsKKyAgICAgICAg
bV92aWV3LT5hbmltYXRlQW5kTGF5b3V0KGZyYW1lQmVnaW5UaW1lKTsKKyAgICB9CisKKyAgICBt
X2NvbW1pdFBlbmRpbmcgPSBmYWxzZTsKKyAgICB7CisgICAgICAgIFRSQUNFX0VWRU5UKCJDQ1Zp
ZXc6OnVwZGF0ZUxheWVycyIsIHRoaXMsIDApOworICAgICAgICBtX3ZpZXctPnVwZGF0ZUxheWVy
cygpOworICAgIH0KKworICAgIC8vIEJsb2NraW5nIGNhbGwgdG8gQ0NWaWV3SW1wbFByb3h5Ojpw
ZXJmb3JtQ29tbWl0CisgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKKyAgICBjY1Ro
cmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1ZpZXdJbXBsUHJveHk6
OmNvbW1pdE9uQ0NUaHJlYWQsICZjb21wbGV0aW9uKSk7CisgICAgY29tcGxldGlvbi53YWl0KCk7
CisKKyAgICBtX3ZpZXctPmFmdGVyQ29tbWl0KCk7Cit9CisKK3ZvaWQgQ0NWaWV3SW1wbFByb3h5
Ojpjb21taXRPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQoreworICAg
IEFTU0VSVChpc0NDVGhyZWFkKCkpOworICAgIFRSQUNFX0VWRU5UKCJDQ1ZpZXdJbXBsUHJveHk6
OmNvbW1pdE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICB7CisgICAgICAgIFRSQUNFX0VWRU5U
KCJDQ1ZpZXc6OmNvbW1pdCIsIHRoaXMsIDApOworICAgICAgICBtX3ZpZXctPmNvbW1pdChtX3Zp
ZXdJbXBsLmdldCgpKTsKKyAgICB9CisgICAgY29tcGxldGlvbi0+c2lnbmFsKCk7CisKKyAgICBt
X3ZpZXdJbXBsLT5hZnRlckNvbW1pdCgpOworfQorCit2b2lkIENDVmlld0ltcGxQcm94eTo6Y3Jl
YXRlSW1wbE9uQ0NUaHJlYWQoUGFzc093blB0cjxDQ1ZpZXdJbXBsRmFjdG9yeT4gdmlld0ltcGxG
YWN0b3J5KQoreworICAgIFRSQUNFX0VWRU5UKCJDQ1ZpZXdJbXBsUHJveHk6OmNyZWF0ZUltcGxP
bkNDVGhyZWFkIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzQ0NUaHJlYWQoKSk7CisgICAgbV92
aWV3SW1wbCA9IHZpZXdJbXBsRmFjdG9yeS0+Y3JlYXRlSW1wbE9uQ0NUaHJlYWQodGhpcyk7Cit9
CisKK3ZvaWQgQ0NWaWV3SW1wbFByb3h5OjpkcmF3TGF5ZXJzT25DQ1RocmVhZCgpCit7CisgICAg
VFJBQ0VfRVZFTlQoIkNDVmlld0ltcGxQcm94eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQiLCB0aGlz
LCAwKTsKKyAgICBBU1NFUlQoaXNDQ1RocmVhZCgpKTsKKyAgICBpZiAobV92aWV3SW1wbCkKKyAg
ICAgICAgbV92aWV3SW1wbC0+ZHJhd0xheWVycygpOworfQorCit2b2lkIENDVmlld0ltcGxQcm94
eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhyZWFkKCkKK3sKKyAgICBUUkFDRV9FVkVO
VCgiQ0NWaWV3SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQiLCB0
aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNDQ1RocmVhZCgpKTsKKyAgICBpZiAobV92aWV3SW1wbCkK
KyAgICAgICAgbV92aWV3SW1wbC0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKK30KKwordm9p
ZCBDQ1ZpZXdJbXBsUHJveHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCgpCit7CisgICAgVFJB
Q0VfRVZFTlQoIkNDVmlld0ltcGxQcm94eTo6c2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkIiwgdGhp
cywgMCk7CisgICAgQVNTRVJUKGlzQ0NUaHJlYWQoKSk7CisgICAgaWYgKG1fdmlld0ltcGwpCisg
ICAgICAgIG1fdmlld0ltcGwtPnNldE5lZWRzUmVkcmF3KCk7Cit9CisKK3ZvaWQgQ0NWaWV3SW1w
bFByb3h5Ojp2aWV3Q2xvc2VkT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlv
bikKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NWaWV3SW1wbFByb3h5Ojp2aWV3Q2xvc2VkT25DQ1Ro
cmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc0NDVGhyZWFkKCkpOworICAgIG1fdmlld0lt
cGwuY2xlYXIoKTsKKyAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKK30KKworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWV3SW1w
bFByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1ZpZXdJbXBsUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYzlkZWNhOThiYzZhOTdkZDc5N2Y5OTVlZWJj
N2ZlY2YwY2U5ZjZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWV3SW1wbFByb3h5LmgKQEAgLTAsMCArMSw3MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ1ZpZXdJbXBsUHJveHlfaAorI2RlZmluZSBDQ1ZpZXdJ
bXBsUHJveHlfaAorCisjaW5jbHVkZSAiY2MvQ0NDb21wbGV0aW9uRXZlbnQuaCIKKyNpbmNsdWRl
ICJjYy9DQ1ZpZXdJbXBsLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIENDVmlldzsKK2NsYXNzIENDVmlld0ltcGxGYWN0b3J5OworCitj
bGFzcyBDQ1ZpZXdJbXBsUHJveHkgOiBwdWJsaWMgQ0NWaWV3SW1wbENsaWVudCB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NWaWV3SW1wbFByb3h5PiBjcmVhdGUoQ0NWaWV3Kik7
CisgICAgdmlydHVhbCB+Q0NWaWV3SW1wbFByb3h5KCk7CisKKyAgICB2b2lkIHNldE5lZWRzQ29t
bWl0QW5kUmVkcmF3KCk7CisgICAgdm9pZCBzZXROZWVkc1JlZHJhdygpOworCisgICAgLy8gQ0NW
aWV3SW1wbENpZW50IC0tIGNhbGxlZCBvbiBDQ1RocmVhZAorICAgIHZpcnR1YWwgdm9pZCBwb3N0
RHJhd0xheWVyc1Rhc2tPbkNDVGhyZWFkKCk7CisgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RGcmFt
ZUFuZENvbW1pdE9uQ0NUaHJlYWQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKKworcHJpdmF0ZToK
KyAgICBleHBsaWNpdCBDQ1ZpZXdJbXBsUHJveHkoQ0NWaWV3Kik7CisKKyAgICBib29sIGlzTWFp
blRocmVhZCgpIGNvbnN0OworICAgIGJvb2wgaXNDQ1RocmVhZCgpIGNvbnN0OworCisgICAgLy8g
Q2FsbGVkIG9uIENDTWFpblRocmVhZAorICAgIHZvaWQgcmVxdWVzdEZyYW1lQW5kQ29tbWl0KGRv
dWJsZSBmcmFtZUJlZ2luVGltZSk7CisKKyAgICAvLyBDYWxsZWQgb24gQ0NUaHJlYWQKKyAgICB2
b2lkIGNvbW1pdE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsKKyAgICB2b2lkIGNyZWF0
ZUltcGxPbkNDVGhyZWFkKFBhc3NPd25QdHI8Q0NWaWV3SW1wbEZhY3Rvcnk+KTsKKyAgICB2b2lk
IGRyYXdMYXllcnNPbkNDVGhyZWFkKCk7CisgICAgdm9pZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJh
d09uQ0NUaHJlYWQoKTsKKyAgICB2b2lkIHNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCgpOworICAg
IHZvaWQgdmlld0Nsb3NlZE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsKKworICAgIGJv
b2wgbV9jb21taXRQZW5kaW5nOworICAgIENDVmlldyogbV92aWV3OworICAgIE93blB0cjxDQ1Zp
ZXdJbXBsPiBtX3ZpZXdJbXBsOworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKaW5kZXggZmMwZWVlMzMwMzVhZjU0ZTJiMzQ1NTExNTJlODlmMTk0ODE1NDcwNC4uNDMz
YTZlMTQwMzhiN2VkNDM1OGU5M2UzMDdhMGE5NjU4MDQyZGNlYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSw5MSBAQAorMjAxMS0wNC0xNCAgTmF0IER1Y2EgIDxuZHVjYUBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgW2Nocm9taXVtXSBJbXBsZW1lbnQgQ0NWaWV3IGFuZCBDQ1ZpZXdJbXBsIHBvcnRpb25z
IG9mIHRocmVhZGVkIGNvbXBvc2l0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTU4NDA4CisKKyAgICAgICAgVGVzdHMgZm9yIENDVmlldyBhbmQgQ0NW
aWV3SW1wbC4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHB1YmxpYy9XZWJX
aWRnZXQuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViV2lkZ2V0OjpzY2hlZHVsZUNvbXBvc2l0ZSk6
CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
d0ltcGw6OmFuaW1hdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6ZG9BbmltYXRl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnBhaW50KToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6OmFuaW1hdGVBbmRMYXlvdXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3SW1wbDo6Y29tcG9zaXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNjaGVk
dWxlQ29tcG9zaXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldFJvb3RMYXll
ck5lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRJc0FjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
ZG9Db21wb3NpdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Y3JlYXRlVmlld0Nv
bnRleHQzRCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyZWFsbG9jYXRlUmVuZGVy
ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6dXBkYXRlTGF5ZXJSZW5kZXJlclNl
dHRpbmdzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnVwZGF0ZUxheWVyUmVuZGVy
ZXJWaWV3cG9ydCk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6CisgICAgICAgICogdGVz
dHMvQ0NUaHJlYWRUZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorICAgICAgICAq
IHRlc3RzL0NDVmlld1Rlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Q0NWaWV3VGVzdDo6
Q0NWaWV3VGVzdCk6CisgICAgICAgIChXVEY6OkNDVmlld1Rlc3Q6OmFuaW1hdGVBbmRMYXlvdXQp
OgorICAgICAgICAoV1RGOjpDQ1ZpZXdUZXN0OjphZnRlckNvbW1pdE9uQ0NUaHJlYWQpOgorICAg
ICAgICAoV1RGOjpDQ1ZpZXdUZXN0OjpkcmF3TGF5ZXJzQW5kUHJlc2VudE9uQ0NUaHJlYWQpOgor
ICAgICAgICAoV1RGOjpDQ1ZpZXdUZXN0Ojp1cGRhdGVMYXllcnMpOgorICAgICAgICAoV1RGOjpD
Q1ZpZXdUZXN0Ojpjb21taXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NWaWV3VGVzdDo6
b25CZWdpblRlc3QpOgorICAgICAgICAoV1RGOjpDQ1ZpZXdUZXN0Ojpkb0VuZFRlc3QpOgorICAg
ICAgICAoV1RGOjpDQ1ZpZXdUZXN0OjpvbkVuZFRlc3QpOgorICAgICAgICAoV1RGOjpDQ1ZpZXdU
ZXN0OjpydW5UZXN0KToKKyAgICAgICAgKFdURjo6Q0NWaWV3VGVzdDo6dGVzdFRpbWVvdXQpOgor
ICAgICAgICAoV1RGOjpNb2NrVmlld0NsaWVudDo6TW9ja1ZpZXdDbGllbnQpOgorICAgICAgICAo
V1RGOjpNb2NrVmlld0NsaWVudDo6Y3JlYXRlVmlld0NvbnRleHQzRCk6CisgICAgICAgIChXVEY6
Ok1vY2tWaWV3Q2xpZW50OjphbmltYXRlQW5kTGF5b3V0KToKKyAgICAgICAgKFdURjo6TW9ja1Zp
ZXdJbXBsOjpjcmVhdGUpOgorICAgICAgICAoV1RGOjpNb2NrVmlld0ltcGw6OmFmdGVyQ29tbWl0
KToKKyAgICAgICAgKFdURjo6TW9ja1ZpZXdJbXBsOjpkcmF3TGF5ZXJzQW5kUHJlc2VudCk6Cisg
ICAgICAgIChXVEY6Ok1vY2tWaWV3SW1wbDo6TW9ja1ZpZXdJbXBsKToKKyAgICAgICAgKFdURjo6
TW9ja1ZpZXdJbXBsRmFjdG9yeTo6Y3JlYXRlKToKKyAgICAgICAgKFdURjo6TW9ja1ZpZXdJbXBs
RmFjdG9yeTo6Y3JlYXRlSW1wbE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpNb2NrVmlld0lt
cGxGYWN0b3J5OjpNb2NrVmlld0ltcGxGYWN0b3J5KToKKyAgICAgICAgKFdURjo6TW9ja1ZpZXc6
Ok1vY2tWaWV3KToKKyAgICAgICAgKFdURjo6TW9ja1ZpZXc6OmNyZWF0ZVZpZXdJbXBsRmFjdG9y
eSk6CisgICAgICAgIChXVEY6Ok1vY2tWaWV3Ojp1cGRhdGVMYXllcnMpOgorICAgICAgICAoV1RG
OjpNb2NrVmlldzo6Y29tbWl0KToKKyAgICAgICAgKFdURjo6Q0NWaWV3VGVzdDo6ZG9CZWdpblRl
c3QpOgorICAgICAgICAoV1RGOjpDQ1ZpZXdUZXN0OjplbmRUZXN0KToKKyAgICAgICAgKFdURjo6
Q0NWaWV3VGVzdFNob3J0bGl2ZWRWaWV3MTo6Q0NWaWV3VGVzdFNob3J0bGl2ZWRWaWV3MSk6Cisg
ICAgICAgIChXVEY6OkNDVmlld1Rlc3RTaG9ydGxpdmVkVmlldzE6OmJlZ2luVGVzdCk6CisgICAg
ICAgIChXVEY6OkNDVmlld1Rlc3RTaG9ydGxpdmVkVmlldzE6OmFmdGVyVGVzdCk6CisgICAgICAg
IChXVEY6OlRFU1RfRik6CisgICAgICAgIChXVEY6OkNDVmlld1Rlc3RTaG9ydGxpdmVkVmlldzI6
OkNDVmlld1Rlc3RTaG9ydGxpdmVkVmlldzIpOgorICAgICAgICAoV1RGOjpDQ1ZpZXdUZXN0U2hv
cnRsaXZlZFZpZXcyOjpiZWdpblRlc3QpOgorICAgICAgICAoV1RGOjpDQ1ZpZXdUZXN0U2hvcnRs
aXZlZFZpZXcyOjphZnRlclRlc3QpOgorICAgICAgICAoV1RGOjpDQ1ZpZXdUZXN0U2hvcnRsaXZl
ZFZpZXczOjpDQ1ZpZXdUZXN0U2hvcnRsaXZlZFZpZXczKToKKyAgICAgICAgKFdURjo6Q0NWaWV3
VGVzdFNob3J0bGl2ZWRWaWV3Mzo6YmVnaW5UZXN0KToKKyAgICAgICAgKFdURjo6Q0NWaWV3VGVz
dFNob3J0bGl2ZWRWaWV3Mzo6YWZ0ZXJUZXN0KToKKyAgICAgICAgKFdURjo6Q0NWaWV3VGVzdENv
bW1pdGluZ1dpdGhDb250aW51b3VzUmVkcmF3OjpDQ1ZpZXdUZXN0Q29tbWl0aW5nV2l0aENvbnRp
bnVvdXNSZWRyYXcpOgorICAgICAgICAoV1RGOjpDQ1ZpZXdUZXN0Q29tbWl0aW5nV2l0aENvbnRp
bnVvdXNSZWRyYXc6OmJlZ2luVGVzdCk6CisgICAgICAgIChXVEY6OkNDVmlld1Rlc3RDb21taXRp
bmdXaXRoQ29udGludW91c1JlZHJhdzo6YWZ0ZXJDb21taXRPbkNDVGhyZWFkKToKKyAgICAgICAg
KFdURjo6Q0NWaWV3VGVzdENvbW1pdGluZ1dpdGhDb250aW51b3VzUmVkcmF3OjpkcmF3TGF5ZXJz
QW5kUHJlc2VudE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ1ZpZXdUZXN0Q29tbWl0aW5n
V2l0aENvbnRpbnVvdXNSZWRyYXc6OmFmdGVyVGVzdCk6CisgICAgICAgIChXVEY6OkNDVmlld1Rl
c3RTZXROZWVkc0NvbW1pdDE6OkNDVmlld1Rlc3RTZXROZWVkc0NvbW1pdDEpOgorICAgICAgICAo
V1RGOjpDQ1ZpZXdUZXN0U2V0TmVlZHNDb21taXQxOjpiZWdpblRlc3QpOgorICAgICAgICAoV1RG
OjpDQ1ZpZXdUZXN0U2V0TmVlZHNDb21taXQxOjpkcmF3TGF5ZXJzQW5kUHJlc2VudE9uQ0NUaHJl
YWQpOgorICAgICAgICAoV1RGOjpDQ1ZpZXdUZXN0U2V0TmVlZHNDb21taXQxOjpjb21taXRPbkND
VGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NWaWV3VGVzdFNldE5lZWRzQ29tbWl0MTo6YWZ0ZXJU
ZXN0KToKKyAgICAgICAgKFdURjo6Q0NWaWV3VGVzdFNldE5lZWRzQ29tbWl0Mjo6Q0NWaWV3VGVz
dFNldE5lZWRzQ29tbWl0Mik6CisgICAgICAgIChXVEY6OkNDVmlld1Rlc3RTZXROZWVkc0NvbW1p
dDI6OmJlZ2luVGVzdCk6CisgICAgICAgIChXVEY6OkNDVmlld1Rlc3RTZXROZWVkc0NvbW1pdDI6
OmRyYXdMYXllcnNBbmRQcmVzZW50T25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6OkNDVmlld1Rl
c3RTZXROZWVkc0NvbW1pdDI6OmNvbW1pdE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ1Zp
ZXdUZXN0U2V0TmVlZHNDb21taXQyOjphZnRlclRlc3QpOgorICAgICAgICAoV1RGOjpDQ1ZpZXdU
ZXN0U2V0TmVlZHNSZWRyYXc6OkNDVmlld1Rlc3RTZXROZWVkc1JlZHJhdyk6CisgICAgICAgIChX
VEY6OkNDVmlld1Rlc3RTZXROZWVkc1JlZHJhdzo6YmVnaW5UZXN0KToKKyAgICAgICAgKFdURjo6
Q0NWaWV3VGVzdFNldE5lZWRzUmVkcmF3OjpkcmF3TGF5ZXJzQW5kUHJlc2VudE9uQ0NUaHJlYWQp
OgorICAgICAgICAoV1RGOjpDQ1ZpZXdUZXN0U2V0TmVlZHNSZWRyYXc6OmNvbW1pdE9uQ0NUaHJl
YWQpOgorICAgICAgICAoV1RGOjpDQ1ZpZXdUZXN0U2V0TmVlZHNSZWRyYXc6OmFmdGVyVGVzdCk6
CisKIDIwMTEtMDQtMTEgIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dl
YktpdC5neXBpCmluZGV4IGMyM2M5ZWRjYjQ2ODJjYjA0MGVjMzY3ZjM3YjVlYTg5ZjcxOWI3MWQu
LmY4Y2VkOTNjODRkZTI5ZTM2NmYxNjlhZjFhNTM1ODNkZWZiMTI3OTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwaQpAQCAtNTUsNiArNTUsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL0Fy
ZW5hVGVzdEhlbHBlcnMuaCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NUaHJlYWRUYXNrVGVzdC5j
cHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDVGhyZWFkVGVzdC5jcHAnLAorICAgICAgICAgICAg
J3Rlc3RzL0NDVmlld1Rlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9EcmFnSW1hZ2VUZXN0
LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvSURCQmluZGluZ1V0aWxpdGllc1Rlc3QuY3BwJywK
ICAgICAgICAgICAgICd0ZXN0cy9JREJLZXlQYXRoVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0LmggYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaAppbmRleCAxMjkwYWQ4MTYyYjY2MjNiYzM1OWEwZmNm
YzU2MzE0NGY2ZmNmNzRiLi5jYTdjMjhkYWUyZjE4OWQ2NDI3NzExOTllZTAzM2E0ZWI1ZTA3M2Vh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaApAQCAtODEsNiAr
ODEsMTEgQEAgcHVibGljOgogICAgIC8vIHRoZSBwYWludCBtZXRob2QgYWJvdmUuCiAgICAgdmly
dHVhbCB2b2lkIGNvbXBvc2l0ZShib29sIGZpbmlzaCkgPSAwOwogCisgICAgLy8gSW4gdGhyZWFk
ZWQgY29tcG9zaXRpbmcgbW9kZSwgaW5kaWNhdGVzIHRoYXQgdGhlIHdpZGdldCBzaG91bGQgcmVk
cmF3CisgICAgLy8gaXRzZWxmLCBmb3IgZXhhbXBsZSBkdWUgdG8gd2luZG93IGRhbWFnZS4gVGhl
IHJlZHJhdyB3aWxsIGJlZ2luCisgICAgLy8gYXN5bmNocm9ub3VzbHkuCisgICAgdmlydHVhbCB2
b2lkIHNjaGVkdWxlQ29tcG9zaXRlKCkgIHsgfQorCiAgICAgLy8gQ2FsbGVkIHRvIGluZm9ybSB0
aGUgV2ViV2lkZ2V0IG9mIGEgY2hhbmdlIGluIHRoZW1lLgogICAgIC8vIEltcGxlbWVudG9ycyB0
aGF0IGNhY2hlIHJlbmRlcmVkIGNvcGllcyBvZiB3aWRnZXRzIG5lZWQgdG8gcmUtcmVuZGVyCiAg
ICAgLy8gb24gcmVjZWl2aW5nIHRoaXMgbWVzc2FnZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViVmlld0ltcGwuY3BwCmluZGV4IDM2ZjIxYWY5MTY2ZmI1YTZmYjNmNGU5YzY5OTI0MTA5
NzAwYWQ0MTUuLjQ4ZDcwMTg4YWM3YmQ0Y2I5NTI3Y2FmZDRmY2VhODRmMTNiNzc2Y2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTk5MiwxMiArOTky
LDE3IEBAIHZvaWQgV2ViVmlld0ltcGw6OnJlc2l6ZShjb25zdCBXZWJTaXplJiBuZXdTaXplKQog
CiB2b2lkIFdlYlZpZXdJbXBsOjphbmltYXRlKCkKIHsKKyAgICBkb0FuaW1hdGUoY3VycmVudFRp
bWUoKSk7Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OmRvQW5pbWF0ZShkb3VibGUgZnJhbWVCZWdp
blRpbWUpCit7CiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQogICAgIFdlYkZy
YW1lSW1wbCogd2ViZnJhbWUgPSBtYWluRnJhbWVJbXBsKCk7CiAgICAgaWYgKHdlYmZyYW1lKSB7
CiAgICAgICAgIEZyYW1lVmlldyogdmlldyA9IHdlYmZyYW1lLT5mcmFtZVZpZXcoKTsKICAgICAg
ICAgaWYgKHZpZXcpCi0gICAgICAgICAgICB2aWV3LT5zZXJ2aWNlU2NyaXB0ZWRBbmltYXRpb25z
KGNvbnZlcnRTZWNvbmRzVG9ET01UaW1lU3RhbXAoY3VycmVudFRpbWUoKSkpOworICAgICAgICAg
ICAgdmlldy0+c2VydmljZVNjcmlwdGVkQW5pbWF0aW9ucyhjb252ZXJ0U2Vjb25kc1RvRE9NVGlt
ZVN0YW1wKGZyYW1lQmVnaW5UaW1lKSk7CiAgICAgfQogI2VuZGlmCiB9CkBAIC0xMDY3LDYgKzEw
NzIsOSBAQCB2b2lkIFdlYlZpZXdJbXBsOjpwYWludChXZWJDYW52YXMqIGNhbnZhcywgY29uc3Qg
V2ViUmVjdCYgcmVjdCkKIHsKICAgICBpZiAoaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZl
KCkpIHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisjaWYgVVNFKFRIUkVBREVE
X0NPTVBPU0lUSU5HKQorICAgICAgICByZXR1cm47CisjZW5kaWYKICAgICAgICAgZG9Db21wb3Np
dGUoKTsKIAogICAgICAgICAvLyBJZiBhIGNhbnZhcyB3YXMgcGFzc2VkIGluLCB3ZSB1c2UgaXQg
dG8gZ3JhYiBhIGNvcHkgb2YgdGhlCkBAIC0xMDk1LDkgKzExMDMsMTkgQEAgdm9pZCBXZWJWaWV3
SW1wbDo6dGhlbWVDaGFuZ2VkKCkKICAgICB2aWV3LT5pbnZhbGlkYXRlUmVjdChkYW1hZ2VkUmVj
dCk7CiB9CiAKKwordm9pZCBXZWJWaWV3SW1wbDo6YW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJh
bWVCZWdpblRpbWUpCit7CisgICAgZG9BbmltYXRlKGZyYW1lQmVnaW5UaW1lKTsKKyAgICBsYXlv
dXQoKTsKK30KKwogdm9pZCBXZWJWaWV3SW1wbDo6Y29tcG9zaXRlKGJvb2wgZmluaXNoKQogewog
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpZiBVU0UoVEhSRUFERURfQ09NUE9T
SVRJTkcpCisgICAgcmV0dXJuOyAvLyBGSVhNRTogd2hlbiB0aGUgUmVuZGVyV2lkZ2V0IGlzIHVw
ZGF0ZWQsIHN3aXRjaCB0byBBU1NFUlRfTk9UX1JFQUNIRUQuCisjZWxzZQogICAgIFRSQUNFX0VW
RU5UKCJXZWJWaWV3SW1wbDo6Y29tcG9zaXRlIiwgdGhpcywgMCk7CiAgICAgaWYgKG1fcmVjcmVh
dGluZ0dyYXBoaWNzQ29udGV4dCkgewogICAgICAgICAvLyByZWFsbG9jYXRlUmVuZGVyZXIgd2ls
bCByZXF1ZXN0IGEgcmVwYWludCB3aGV0aGVyIG9yIG5vdCBpdCBzdWNjZWVkZWQKQEAgLTExMjcs
NiArMTE0NSw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OmNvbXBvc2l0ZShib29sIGZpbmlzaCkKICAg
ICAgICAgc2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7CiAgICAgfQogI2VuZGlmCisjZW5kaWYK
IH0KIAogY29uc3QgV2ViSW5wdXRFdmVudCogV2ViVmlld0ltcGw6Om1fY3VycmVudElucHV0RXZl
bnQgPSAwOwpAQCAtMjM0MSw5ICsyMzYwLDI0IEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldFJvb3RH
cmFwaGljc0xheWVyKFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXIqIGxheWVyKQogICAgICAgICBtX2Ns
aWVudC0+ZGlkSW52YWxpZGF0ZVJlY3QoZGFtYWdlZFJlY3QpOwogfQogCit2b2lkIFdlYlZpZXdJ
bXBsOjpzY2hlZHVsZUNvbXBvc2l0ZSgpCit7CisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5H
KQorICAgIGlmIChtX2xheWVyUmVuZGVyZXIuZ2V0KCkpCisgICAgICAgIG1fbGF5ZXJSZW5kZXJl
ci0+c2V0TmVlZHNSZWRyYXcoKTsKKyNlbHNlCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisj
ZW5kaWYKK30KKwogdm9pZCBXZWJWaWV3SW1wbDo6c2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCkK
IHsKKyNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgaWYgKG1fbGF5ZXJSZW5kZXJl
ci5nZXQoKSkKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5zZXROZWVkc0NvbW1pdEFuZFJlZHJh
dygpOworI2Vsc2UKICAgICBtX2NsaWVudC0+c2NoZWR1bGVDb21wb3NpdGUoKTsKKyNlbmRpZgog
fQogCiAKQEAgLTI0NDQsMTQgKzI0NzgsMTAgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0SXNBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGJvb2wgYWN0aXZlKQogCiAgICAgICAgIG1fY2xpZW50
LT5kaWRBY3RpdmF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcodHJ1ZSk7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gbV90ZW1wb3JhcnlP
bnNjcmVlbkdyYXBoaWNzQ29udGV4dDNELnJlbGVhc2UoKTsKLSAgICAgICAgaWYgKCFjb250ZXh0
KSB7Ci0gICAgICAgICAgICBjb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShnZXRD
b21wb3NpdG9yQ29udGV4dEF0dHJpYnV0ZXMoKSwgbV9wYWdlLT5jaHJvbWUoKSwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKLSAgICAgICAgICAgIGlmIChj
b250ZXh0KQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlc2hhcGUoc3RkOjptYXgoMSwgbV9z
aXplLndpZHRoKSwgc3RkOjptYXgoMSwgbV9zaXplLmhlaWdodCkpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgbV9sYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUoY29u
dGV4dC5yZWxlYXNlKCksIFdlYlZpZXdJbXBsQ29udGVudFBhaW50ZXI6OmNyZWF0ZSh0aGlzKSwg
V2ViVmlld0ltcGxTY3JvbGxiYXJQYWludGVyOjpjcmVhdGUodGhpcykpOworICAgICAgICBtX2xh
eWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCBXZWJWaWV3
SW1wbENvbnRlbnRQYWludGVyOjpjcmVhdGUodGhpcyksIFdlYlZpZXdJbXBsU2Nyb2xsYmFyUGFp
bnRlcjo6Y3JlYXRlKHRoaXMpKTsKKyNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAg
ICAgIHVwZGF0ZUxheWVyUmVuZGVyZXJTZXR0aW5ncygpOworI2VuZGlmCiAgICAgICAgIGlmICht
X2xheWVyUmVuZGVyZXIpIHsKICAgICAgICAgICAgIG1fY2xpZW50LT5kaWRBY3RpdmF0ZUFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmcodHJ1ZSk7CiAgICAgICAgICAgICBtX2lzQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0FjdGl2ZSA9IHRydWU7CkBAIC0yNDc4LDIxICsyNTA4LDI2IEBAIHZvaWQgV2ViVmll
d0ltcGw6OmRvQ29tcG9zaXRlKCkKICAgICBpZiAoIXBhZ2UoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgbV9sYXllclJlbmRlcmVyLT5zZXRDb21wb3NpdGVPZmZzY3JlZW4oc2V0dGluZ3MoKS0+
Y29tcG9zaXRlVG9UZXh0dXJlRW5hYmxlZCgpKTsKLQotICAgIENDSGVhZHNVcERpc3BsYXkqIGh1
ZCA9IG1fbGF5ZXJSZW5kZXJlci0+aGVhZHNVcERpc3BsYXkoKTsKLSAgICBodWQtPnNldFNob3dG
UFNDb3VudGVyKHNldHRpbmdzKCktPnNob3dGUFNDb3VudGVyKCkpOwotICAgIGh1ZC0+c2V0U2hv
d1BsYXRmb3JtTGF5ZXJUcmVlKHNldHRpbmdzKCktPnNob3dQbGF0Zm9ybUxheWVyVHJlZSgpKTsK
KyAgICB1cGRhdGVMYXllclJlbmRlcmVyU2V0dGluZ3MoKTsKKyAgICBtX2xheWVyUmVuZGVyZXIt
PnVwZGF0ZUxheWVycygpOworICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVycygpOworfQog
Ci0gICAgbV9sYXllclJlbmRlcmVyLT51cGRhdGVBbmREcmF3TGF5ZXJzKCk7CitQYXNzUmVmUHRy
PEdyYXBoaWNzQ29udGV4dDNEPiBXZWJWaWV3SW1wbDo6Y3JlYXRlVmlld0NvbnRleHQzRCgpCit7
CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gbV90ZW1wb3JhcnlPbnNj
cmVlbkdyYXBoaWNzQ29udGV4dDNELnJlbGVhc2UoKTsKKyAgICBpZiAoIWNvbnRleHQpIHsKKyAg
ICAgICAgY29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoZ2V0Q29tcG9zaXRvckNv
bnRleHRBdHRyaWJ1dGVzKCksIG1fcGFnZS0+Y2hyb21lKCksIEdyYXBoaWNzQ29udGV4dDNEOjpS
ZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAg
ICAgICAgY29udGV4dC0+cmVzaGFwZShzdGQ6Om1heCgxLCBtX3NpemUud2lkdGgpLCBzdGQ6Om1h
eCgxLCBtX3NpemUuaGVpZ2h0KSk7CisgICAgfQorICAgIHJldHVybiBjb250ZXh0OwogfQogCiB2
b2lkIFdlYlZpZXdJbXBsOjpyZWFsbG9jYXRlUmVuZGVyZXIoKQogewotICAgIFJlZlB0cjxHcmFw
aGljc0NvbnRleHQzRD4gbmV3Q29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoCi0g
ICAgICAgICAgICBnZXRDb21wb3NpdG9yQ29udGV4dEF0dHJpYnV0ZXMoKSwgbV9wYWdlLT5jaHJv
bWUoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKICAg
ICAvLyBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlIG1pZ2h0IGZhaWwgYW5kIHJldHVybiAwLCBp
biB0aGF0IGNhc2UgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUgd2lsbCBhbHNvIHJldHVy
biAwLgotICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVyUmVuZGVyZXIgPSBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShuZXdDb250ZXh0LCBXZWJWaWV3SW1wbENvbnRl
bnRQYWludGVyOjpjcmVhdGUodGhpcyksIFdlYlZpZXdJbXBsU2Nyb2xsYmFyUGFpbnRlcjo6Y3Jl
YXRlKHRoaXMpKTsKKyAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRl
cmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUodGhpcywgV2ViVmlld0ltcGxDb250
ZW50UGFpbnRlcjo6Y3JlYXRlKHRoaXMpLCBXZWJWaWV3SW1wbFNjcm9sbGJhclBhaW50ZXI6OmNy
ZWF0ZSh0aGlzKSk7CiAKICAgICAvLyBSZWF0dGFjaCB0aGUgcm9vdCBsYXllci4gIENoaWxkIGxh
eWVycyB3aWxsIGdldCByZWF0dGFjaGVkIGFzIGEgc2lkZSBlZmZlY3Qgb2YgdXBkYXRlTGF5ZXJz
UmVjdXJzaXZlLgogICAgIGlmIChsYXllclJlbmRlcmVyKSB7CkBAIC0yNTAzLDcgKzI1MzgsMTAg
QEAgdm9pZCBXZWJWaWV3SW1wbDo6cmVhbGxvY2F0ZVJlbmRlcmVyKCkKICAgICAgICAgLy8gcmVz
aGFwZSBzaG91bGQgcmVhbGx5IGJlIGV4dHJhY3RlZCBpbnRvIG9uZSBmdW5jdGlvbjsgaXQgaXMg
bm90CiAgICAgICAgIC8vIGltbWVkaWF0ZWx5IG9idmlvdXMgdGhhdCBHcmFwaGljc0NvbnRleHQz
RCBvYmplY3Qgd2lsbCBub3QKICAgICAgICAgLy8gZnVuY3Rpb24gcHJvcGVybHkgdW50aWwgaXRz
IHJlc2hhcGUgbWV0aG9kIGlzIGNhbGxlZC4KLSAgICAgICAgbmV3Q29udGV4dC0+cmVzaGFwZShz
dGQ6Om1heCgxLCBtX3NpemUud2lkdGgpLCBzdGQ6Om1heCgxLCBtX3NpemUuaGVpZ2h0KSk7Cisg
ICAgICAgIGxheWVyUmVuZGVyZXItPmNvbnRleHQoKS0+cmVzaGFwZShzdGQ6Om1heCgxLCBtX3Np
emUud2lkdGgpLCBzdGQ6Om1heCgxLCBtX3NpemUuaGVpZ2h0KSk7CisjaWYgVVNFKFRIUkVBREVE
X0NPTVBPU0lUSU5HKQorICAgICAgICB1cGRhdGVMYXllclJlbmRlcmVyU2V0dGluZ3MoKTsKKyNl
bmRpZgogICAgICAgICBzZXRSb290R3JhcGhpY3NMYXllcihtX2xheWVyUmVuZGVyZXItPnJvb3RM
YXllcigpKTsKICAgICAgICAgLy8gRm9yY2VzIFZpZXdIb3N0TXNnX0RpZEFjdGl2YXRlQWNjZWxl
cmF0ZWRDb21wb3NpdGluZyB0byBiZSBzZW50IHNvCiAgICAgICAgIC8vIHRoYXQgdGhlIGJyb3dz
ZXIgcHJvY2VzcyBjYW4gcmVhY3F1aXJlIHN1cmZhY2VzLgpAQCAtMjUxMyw5ICsyNTUxLDIyIEBA
IHZvaWQgV2ViVmlld0ltcGw6OnJlYWxsb2NhdGVSZW5kZXJlcigpCiB9CiAjZW5kaWYKIAordm9p
ZCBXZWJWaWV3SW1wbDo6dXBkYXRlTGF5ZXJSZW5kZXJlclNldHRpbmdzKCkKK3sKKyAgICBpZiAo
IW1fbGF5ZXJSZW5kZXJlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9sYXllclJlbmRlcmVy
LT5zZXRDb21wb3NpdGVPZmZzY3JlZW4oc2V0dGluZ3MoKS0+Y29tcG9zaXRlVG9UZXh0dXJlRW5h
YmxlZCgpKTsKKworICAgIENDSGVhZHNVcERpc3BsYXkqIGh1ZCA9IG1fbGF5ZXJSZW5kZXJlci0+
aGVhZHNVcERpc3BsYXkoKTsKKyAgICBodWQtPnNldFNob3dGUFNDb3VudGVyKHNldHRpbmdzKCkt
PnNob3dGUFNDb3VudGVyKCkpOworICAgIGh1ZC0+c2V0U2hvd1BsYXRmb3JtTGF5ZXJUcmVlKHNl
dHRpbmdzKCktPnNob3dQbGF0Zm9ybUxheWVyVHJlZSgpKTsKK30KKwogdm9pZCBXZWJWaWV3SW1w
bDo6dXBkYXRlTGF5ZXJSZW5kZXJlclZpZXdwb3J0KCkKIHsKLSAgICBBU1NFUlQobV9sYXllclJl
bmRlcmVyKTsKKyAgICBpZiAoIW1fbGF5ZXJSZW5kZXJlcikKKyAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKCFwYWdlKCkpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJWaWV3SW1wbC5oCmluZGV4IDA2MDI3ZWFhYzQzZDE0MDMyZTMwMDBjOGZiNTgyZjYyZDFk
ZmQ4MTIuLmIzZDBiNjBhOTFlOWQwYWY3ZjlmN2ZhMDZlZWMzZTcxNTM0NTVmMDYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaApAQCAtNTUsNiArNTUsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDaHJvbWl1bURhdGFPYmplY3Q7CiBjbGFzcyBEb2N1bWVu
dExvYWRlcjsKIGNsYXNzIEZyYW1lOworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiBjbGFzcyBI
aXN0b3J5SXRlbTsKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CiBjbGFzcyBLZXlib2FyZEV2ZW50OwpA
QCAtODYsNyArODcsNyBAQCBjbGFzcyBXZWJNb3VzZVdoZWVsRXZlbnQ7CiBjbGFzcyBXZWJTZXR0
aW5nc0ltcGw7CiBjbGFzcyBXZWJUb3VjaEV2ZW50OwogCi1jbGFzcyBXZWJWaWV3SW1wbCA6IHB1
YmxpYyBXZWJWaWV3LCBwdWJsaWMgUmVmQ291bnRlZDxXZWJWaWV3SW1wbD4geworY2xhc3MgV2Vi
Vmlld0ltcGwgOiBwdWJsaWMgV2ViVmlldywgcHVibGljIFdlYkNvcmU6OkNDVmlld0NsaWVudCwg
cHVibGljIFJlZkNvdW50ZWQ8V2ViVmlld0ltcGw+IHsKIHB1YmxpYzoKICAgICAvLyBXZWJXaWRn
ZXQgbWV0aG9kczoKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsKQEAgLTk3LDYgKzk4LDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJDYW52YXMqLCBjb25zdCBXZWJSZWN0
Jik7CiAgICAgdmlydHVhbCB2b2lkIHRoZW1lQ2hhbmdlZCgpOwogICAgIHZpcnR1YWwgdm9pZCBj
b21wb3NpdGUoYm9vbCBmaW5pc2gpOworICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0
ZSgpOwogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0RXZl
bnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgbW91c2VDYXB0dXJlTG9zdCgpOwogICAgIHZpcnR1YWwg
dm9pZCBzZXRGb2N1cyhib29sIGVuYWJsZSk7CkBAIC0yMDEsNiArMjAzLDExIEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluYWN0aXZlRm9y
ZWdyb3VuZENvbG9yKTsKICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybUN1c3RvbUNvbnRleHRNZW51
QWN0aW9uKHVuc2lnbmVkIGFjdGlvbik7CiAKKyAgICAvLyBDQ1ZpZXdDbGllbnQKKyAgICB2aXJ0
dWFsIHZvaWQgYW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpOworICAgIFBh
c3NSZWZQdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZVZpZXdDb250ZXh0M0Qo
KTsKKworCiAgICAgLy8gV2ViVmlld0ltcGwKIAogICAgIHZvaWQgc2V0SWdub3JlSW5wdXRFdmVu
dHMoYm9vbCBuZXdWYWx1ZSk7CkBAIC0zNDQsNiArMzUxLDcgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7CiAgICAgdm9pZCBzY3JvbGxSb290TGF5ZXJSZWN0
KGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbERlbHRhLCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiBjbGlwUmVjdCk7CiAgICAgdm9pZCBpbnZhbGlkYXRlUm9vdExheWVyUmVjdChjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCBkb1VwZGF0ZUFuZENvbXBvc2l0ZSgpOwogI2Vu
ZGlmCiAKICAgICAvLyBSZXR1cm5zIHRoZSBvbnNjcmVlbiAzRCBjb250ZXh0IHVzZWQgYnkgdGhl
IGNvbXBvc2l0b3IuIFRoaXMgaXMKQEAgLTQwNywxMSArNDE1LDE0IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlBvaW50
JiBzY3JlZW5Qb2ludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRHJhZ0FjdGlvbik7CiAKKyAgICB2b2lkIGRvQW5pbWF0ZShkb3VibGUgZnJhbWVCZWdp
blRpbWUpOworCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIHZvaWQgc2V0
SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGJvb2wpOwogICAgIHZvaWQgZG9Db21wb3Np
dGUoKTsKICAgICB2b2lkIGRvUGl4ZWxSZWFkYmFja1RvQ2FudmFzKFdlYkNhbnZhcyosIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKTsKICAgICB2b2lkIHJlYWxsb2NhdGVSZW5kZXJlcigpOworICAg
IHZvaWQgdXBkYXRlTGF5ZXJSZW5kZXJlclNldHRpbmdzKCk7CiAgICAgdm9pZCB1cGRhdGVMYXll
clJlbmRlcmVyVmlld3BvcnQoKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDVGhyZWFkVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDVGhyZWFkVGVzdC5jcHAKaW5kZXggMDRmYmE0NjUzM2RiNzVkZDczZjY4YWI3Yjdi
MmQ2MDFlN2NiNDA2Ny4uZmFiMzU0ZWMwMGM5NzMzY2MyODVhMTJiOTAwY2NmMGYzZWUyYTMxZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RocmVhZFRlc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaHJlYWRUZXN0LmNwcApAQCAt
NTEsNiArNTEsNyBAQCBwdWJsaWM6CiBURVNUKENDVGhyZWFkVGVzdCwgcGluZ1BvbmdVc2luZ0Nv
bmRpdGlvbikKIHsKICAgICBPd25QdHI8Q0NUaHJlYWQ+IHRocmVhZCA9IENDVGhyZWFkOjpjcmVh
dGUoKTsKKwogICAgIFBpbmdQb25nVXNpbmdDb25kaXRpb24gdGFyZ2V0OwogICAgIENDQ29tcGxl
dGlvbkV2ZW50IGNvbXBsZXRpb247CiAgICAgdGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVh
ZFRhc2soJnRhcmdldCwgJlBpbmdQb25nVXNpbmdDb25kaXRpb246OnBpbmcsICZjb21wbGV0aW9u
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVmlld1Rlc3Qu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1ZpZXdUZXN0LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi43MTk0MzFmZDQ2ODBkZDA2ZTI4NjZhMTk1MzBjNTEyY2ZkZWIzNjFiCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1ZpZXdUZXN0LmNwcApAQCAt
MCwwICsxLDQ2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5j
bHVkZSAiY2MvQ0NWaWV3LmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2lu
Y2x1ZGUgImNjL0NDTWFpblRocmVhZFRhc2suaCIKKyNpbmNsdWRlICJjYy9DQ1RocmVhZFRhc2su
aCIKKyNpbmNsdWRlICJjYy9DQ1ZpZXdJbXBsLmgiCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4K
KyNpbmNsdWRlIDx3ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oPgorI2luY2x1ZGUgPHd0
Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3Bh
Y2UgV1RGOworCituYW1lc3BhY2UgeworCitjbGFzcyBNb2NrVmlld0NsaWVudDsKK2NsYXNzIE1v
Y2tWaWV3OworY2xhc3MgTW9ja1ZpZXdJbXBsOworCisvLyBUaGUgQ0NWaWV3VGVzdCBydW5zIHdp
dGggdGhlIG1haW4gbG9vcCBydW5uaW5nLiBJdCBpbnN0YW50aWF0ZXMgYSBzaW5nbGUgTW9ja1Zp
ZXcgYW5kIGFzc29jaWF0ZWQKKy8vIE1vY2tWaWV3SW1wbC9Nb2NrVmlld0NsaWVudC4KKy8vCisv
LyBiZWdpblRlc3QoKSBpcyBjYWxsZWQgb25jZSB0aGUgbWFpbiBtZXNzYWdlIGxvb3AgaXMgcnVu
bmluZyBhbmQgdGhlIHZpZXcgaXMgaW5pdGlhbGl6ZWQuCisvLworLy8gS2V5IHN0YWdlcyBvZiB0
aGUgZHJhd2luZyBsb29wLCBlLmcuIGRyYXdpbmcgb3IgY29tbWl0aW5nLCByZWRpcmVjdCB0byBD
Q1ZpZXdUZXN0IG1ldGhvZHMgb2Ygc2ltaWxhciBuYW1lcy4KKy8vIFRvIHRyYWNrIHRoZSBjb21t
aXQgcHJvY2Vzcywgb3ZlcnJpZGUgdGhlc2UgZnVuY3Rpb25zLgorLy8KKy8vIFRoZSB0ZXN0IGNv
bnRpbnVlcyB1bnRpbCBzb21lb25lIGNhbGxzIGVuZFRlc3QuIGVuZFRlc3QgY2FuIGJlIGNhbGxl
ZCBvbiBhbnkgdGhyZWFkLCBidXQgYmUgYXdhcmUgdGhhdAorLy8gZW5kaW5nIHRoZSB0ZXN0IGlz
IGFuIGFzeW5jaHJvbm91cyBwcm9jZXNzLgorY2xhc3MgQ0NWaWV3VGVzdCA6IHB1YmxpYyB0ZXN0
aW5nOjpUZXN0IHsKK3B1YmxpYzoKKyAgICBDQ1ZpZXdUZXN0KCkKKyAgICAgICAgOiBtX2JlZ2lu
bmluZyhmYWxzZSkKKyAgICAgICAgLCBtX2VuZFdoZW5CZWdpblJldHVybnMoZmFsc2UpCisgICAg
ICAgICwgbV9ydW5uaW5nKGZhbHNlKQorICAgICAgICAsIG1fdGltZWRPdXQoZmFsc2UpIHsgfQor
CisgICAgdmlydHVhbCB2b2lkIGFmdGVyVGVzdCgpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBi
ZWdpblRlc3QoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVBbmRMYXlvdXQoTW9ja1Zp
ZXdDbGllbnQqIHZpZXcsIGRvdWJsZSBmcmFtZUJlZ2luVGltZSkgeyB9CisgICAgdmlydHVhbCB2
b2lkIGFmdGVyQ29tbWl0T25DQ1RocmVhZChNb2NrVmlld0ltcGwqIHZpZXdJbXBsKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhyZWFkKE1vY2tWaWV3SW1w
bCogdmlld0ltcGwpIHsgfQorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVMYXllcnMoTW9ja1ZpZXcq
IHZpZXcpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjb21taXRPbkNDVGhyZWFkKE1vY2tWaWV3KiB2
aWV3LCBNb2NrVmlld0ltcGwqIHZpZXdJbXBsKSB7IH0KKworICAgIHZvaWQgZW5kVGVzdCgpOwor
Citwcm90ZWN0ZWQ6CisgICAgdm9pZCBkb0JlZ2luVGVzdCgpOworCisgICAgc3RhdGljIHZvaWQg
b25CZWdpblRlc3Qodm9pZCogc2VsZikKKyAgICB7CisgICAgICAgIHN0YXRpY19jYXN0PENDVmll
d1Rlc3QqPihzZWxmKS0+ZG9CZWdpblRlc3QoKTsKKyAgICB9CisKKyAgICB2b2lkIGRvRW5kVGVz
dCgpCisgICAgeworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIG9uRW5kVGVzdCh2b2lkKiBzZWxm
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAgICAgQ0NWaWV3
VGVzdCogdGVzdCA9IHN0YXRpY19jYXN0PENDVmlld1Rlc3QqPihzZWxmKTsKKyAgICAgICAgdGVz
dC0+bV92aWV3LmNsZWFyKCk7CisgICAgICAgIHRlc3QtPm1fY2xpZW50LmNsZWFyKCk7CisgICAg
ICAgIHdlYmtpdF9zdXBwb3J0OjpRdWl0TWVzc2FnZUxvb3AoKTsKKyAgICB9CisKKyAgICB2b2lk
IHJ1blRlc3QoKQorICAgIHsKKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlBvc3REZWxheWVkVGFz
ayhDQ1ZpZXdUZXN0OjpvbkJlZ2luVGVzdCwgc3RhdGljX2Nhc3Q8dm9pZCo+KHRoaXMpLCAwKTsK
KyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlBvc3REZWxheWVkVGFzayhDQ1ZpZXdUZXN0Ojp0ZXN0
VGltZW91dCwgc3RhdGljX2Nhc3Q8dm9pZCo+KHRoaXMpLCA1MDAwKTsKKyAgICAgICAgd2Via2l0
X3N1cHBvcnQ6OlJ1bk1lc3NhZ2VMb29wKCk7CisgICAgICAgIG1fcnVubmluZyA9IGZhbHNlOwor
ICAgICAgICBib29sIHRpbWVkT3V0ID0gbV90aW1lZE91dDsgLy8gU2F2ZSB3aGV0aGVyIHdlJ3Jl
IHRpbWVkIG91dCBpbiBjYXNlIFJ1bkFsbFBlbmRpbmdNZXNzYWdlcyBoYXMgdGhlIHRpbWVvdXQu
CisgICAgICAgIHdlYmtpdF9zdXBwb3J0OjpSdW5BbGxQZW5kaW5nTWVzc2FnZXMoKTsKKyAgICAg
ICAgaWYgKHRpbWVkT3V0KSB7CisgICAgICAgICAgICBwcmludGYoIlRlc3QgdGltZWQgb3V0Iik7
CisgICAgICAgICAgICBGQUlMKCkgPDwgIlRlc3QgdGltZWQgb3V0IjsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICBhZnRlclRlc3QoKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgdm9pZCB0ZXN0VGltZW91dCh2b2lkKiBzZWxmKQorICAgIHsKKyAgICAgICAgQ0NWaWV3VGVz
dCogdGVzdCA9IHN0YXRpY19jYXN0PENDVmlld1Rlc3QqPihzZWxmKTsKKyAgICAgICAgaWYgKCF0
ZXN0LT5tX3J1bm5pbmcpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRlc3QtPm1fdGlt
ZWRPdXQgPSB0cnVlOworICAgICAgICB0ZXN0LT5lbmRUZXN0KCk7CisgICAgfQorCisgICAgTXV0
ZXggbV90cmFjZXNMb2NrOworICAgIFZlY3RvcjxzdGQ6OnN0cmluZz4gbV90cmFjZXM7CisKKyAg
ICBPd25QdHI8TW9ja1ZpZXdDbGllbnQ+IG1fY2xpZW50OworICAgIFJlZlB0cjxNb2NrVmlldz4g
bV92aWV3OworCitwcml2YXRlOgorICAgIGJvb2wgbV9iZWdpbm5pbmc7CisgICAgYm9vbCBtX2Vu
ZFdoZW5CZWdpblJldHVybnM7CisgICAgYm9vbCBtX3J1bm5pbmc7CisgICAgYm9vbCBtX3RpbWVk
T3V0OworfTsKKworY2xhc3MgTW9ja1ZpZXdDbGllbnQgOiBwdWJsaWMgQ0NWaWV3Q2xpZW50IHsK
K3B1YmxpYzoKKyAgICBNb2NrVmlld0NsaWVudChDQ1ZpZXdUZXN0KiB0ZXN0KSA6IG1fdGVzdCh0
ZXN0KSB7IH0KKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3Jl
YXRlVmlld0NvbnRleHQzRCgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWY8R3JhcGhp
Y3NDb250ZXh0M0Q+KDApOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5
b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKKyAgICB7CisgICAgICAgIG1fdGVzdC0+YW5pbWF0
ZUFuZExheW91dCh0aGlzLCBmcmFtZUJlZ2luVGltZSk7CisgICAgfQorCitwcml2YXRlOgorICAg
IENDVmlld1Rlc3QqIG1fdGVzdDsKK307CisKK2NsYXNzIE1vY2tWaWV3SW1wbCA6IHB1YmxpYyBD
Q1ZpZXdJbXBsIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxNb2NrVmlld0ltcGw+
IGNyZWF0ZShDQ1ZpZXdJbXBsQ2xpZW50KiBjbGllbnQsIENDVmlld1Rlc3QqIHRlc3QpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE1vY2tWaWV3SW1wbChjbGllbnQsIHRlc3Qp
KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJDb21taXQoKQorICAgIHsKKyAgICAg
ICAgQ0NWaWV3SW1wbDo6YWZ0ZXJDb21taXQoKTsKKyAgICAgICAgbV90ZXN0LT5hZnRlckNvbW1p
dE9uQ0NUaHJlYWQodGhpcyk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNB
bmRQcmVzZW50KCkKKyAgICB7CisgICAgICAgIG1fdGVzdC0+ZHJhd0xheWVyc0FuZFByZXNlbnRP
bkNDVGhyZWFkKHRoaXMpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNb2NrVmlld0ltcGwoQ0NW
aWV3SW1wbENsaWVudCogY2xpZW50LCBDQ1ZpZXdUZXN0KiB0ZXN0KQorICAgICAgICAgICAgOiBD
Q1ZpZXdJbXBsKGNsaWVudCkKKyAgICAgICAgICAgICwgbV90ZXN0KHRlc3QpCisgICAgeworICAg
IH0KKworICAgIENDVmlld1Rlc3QqIG1fdGVzdDsKK307CisKK2NsYXNzIE1vY2tWaWV3SW1wbEZh
Y3RvcnkgOiBwdWJsaWMgQ0NWaWV3SW1wbEZhY3RvcnkgeworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzT3duUHRyPE1vY2tWaWV3SW1wbEZhY3Rvcnk+IGNyZWF0ZShDQ1ZpZXdUZXN0KiB0ZXN0KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBNb2NrVmlld0ltcGxGYWN0b3J5KHRl
c3QpKTsKKyAgICB9CisKKyAgICBQYXNzT3duUHRyPENDVmlld0ltcGw+IGNyZWF0ZUltcGxPbkND
VGhyZWFkKENDVmlld0ltcGxDbGllbnQqIGNsaWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBN
b2NrVmlld0ltcGw6OmNyZWF0ZShjbGllbnQsIG1fdGVzdCk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIE1vY2tWaWV3SW1wbEZhY3RvcnkoQ0NWaWV3VGVzdCogdGVzdCkgOiBtX3Rlc3QodGVzdCkg
eyB9CisgICAgQ0NWaWV3VGVzdCogbV90ZXN0OworfTsKKworY2xhc3MgTW9ja1ZpZXcgOiBwdWJs
aWMgQ0NWaWV3IHsKK3B1YmxpYzoKKyAgICBNb2NrVmlldyhDQ1ZpZXdDbGllbnQqIGNsaWVudCwg
Q0NWaWV3VGVzdCogdGVzdCkgOiBDQ1ZpZXcoY2xpZW50KSwgbV90ZXN0KHRlc3QpIHsgfQorCisg
ICAgdmlydHVhbCBQYXNzT3duUHRyPENDVmlld0ltcGxGYWN0b3J5PiBjcmVhdGVWaWV3SW1wbEZh
Y3RvcnkoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE1vY2tWaWV3SW1wbEZhY3Rvcnk6OmNyZWF0
ZShtX3Rlc3QpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVMYXllcnMoKQorICAg
IHsKKyAgICAgICAgbV90ZXN0LT51cGRhdGVMYXllcnModGhpcyk7CisgICAgfQorCisgICAgdmly
dHVhbCB2b2lkIGNvbW1pdChDQ1ZpZXdJbXBsKiBpbXBsKQorICAgIHsKKyAgICAgICAgQ0NWaWV3
Ojpjb21taXQoaW1wbCk7CisgICAgICAgIG1fdGVzdC0+Y29tbWl0T25DQ1RocmVhZCh0aGlzLCBz
dGF0aWNfY2FzdDxNb2NrVmlld0ltcGwqPihpbXBsKSk7CisgICAgfQorCitwcml2YXRlOgorICAg
IENDVmlld1Rlc3QqIG1fdGVzdDsKK307CisKK3ZvaWQgQ0NWaWV3VGVzdDo6ZG9CZWdpblRlc3Qo
KQoreworICAgIEFTU0VSVCghbV9ydW5uaW5nKTsKKyAgICBtX3J1bm5pbmcgPSB0cnVlOworICAg
IG1fY2xpZW50ID0gYWRvcHRQdHIobmV3IE1vY2tWaWV3Q2xpZW50KHRoaXMpKTsKKyAgICBtX3Zp
ZXcgPSBhZG9wdFJlZihuZXcgTW9ja1ZpZXcobV9jbGllbnQuZ2V0KCksIHRoaXMpKTsKKyAgICBt
X3ZpZXctPmluaXQoKTsKKyAgICBtX2JlZ2lubmluZyA9IHRydWU7CisgICAgYmVnaW5UZXN0KCk7
CisgICAgbV9iZWdpbm5pbmcgPSBmYWxzZTsKKyAgICBpZiAobV9lbmRXaGVuQmVnaW5SZXR1cm5z
KQorICAgICAgICBvbkVuZFRlc3Qoc3RhdGljX2Nhc3Q8dm9pZCo+KHRoaXMpKTsKK30KKwordm9p
ZCBDQ1ZpZXdUZXN0OjplbmRUZXN0KCkKK3sKKyAgICAvLyBJZiB3ZSBhcmUgY2FsbGVkIGZyb20g
dGhlIENDVGhyZWFkLCByZS1jYWxsIGVuZFRlc3Qgb24gdGhlIG1haW4gdGhyZWFkLgorICAgIGlm
ICghaXNNYWluVGhyZWFkKCkpCisgICAgICAgIENDTWFpblRocmVhZDo6cG9zdFRhc2soY3JlYXRl
TWFpblRocmVhZFRhc2sodGhpcywgJkNDVmlld1Rlc3Q6OmVuZFRlc3QpKTsKKyAgICBlbHNlIHsK
KyAgICAgICAgLy8gRm9yIHRoZSBjYXNlIHdoZXJlIHdlIGVuZFRlc3QgZHVyaW5nIGJlZ2luVGVz
dCgpLCBzZXQgYSBmbGFnIHRvIGluZGljYXRlIHRoYXQKKyAgICAgICAgLy8gdGhlIHRlc3Qgc2hv
dWxkIGVuZCB0aGUgc2Vjb25kIGJlZ2luVGVzdCByZWdhaW5zIGNvbnRyb2wuCisgICAgICAgIGlm
IChtX2JlZ2lubmluZykKKyAgICAgICAgICAgIG1fZW5kV2hlbkJlZ2luUmV0dXJucyA9IHRydWU7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG9uRW5kVGVzdChzdGF0aWNfY2FzdDx2b2lkKj4o
dGhpcykpOworICAgIH0KK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vIFNob3J0bGl2ZWQg
dmlld3Mgc2hvdWxkbid0IGRpZS4KK2NsYXNzIENDVmlld1Rlc3RTaG9ydGxpdmVkVmlldzEgOiBw
dWJsaWMgQ0NWaWV3VGVzdCB7CitwdWJsaWM6CisgICAgQ0NWaWV3VGVzdFNob3J0bGl2ZWRWaWV3
MSgpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGJlZ2luVGVzdCgpCisgICAgeworICAgICAgICBl
bmRUZXN0KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFmdGVyVGVzdCgpCisgICAgewor
ICAgIH0KK307CitURVNUX0YoQ0NWaWV3VGVzdFNob3J0bGl2ZWRWaWV3MSwgcnVuKSB7IHJ1blRl
c3QoKTsgfQorCisvLyBTaG9ydGxpdmVkIHZpZXdzIHNob3Vkbid0IGRpZSB3aXRoIGEgY29tbWl0
IGluIGZsaWdodC4KK2NsYXNzIENDVmlld1Rlc3RTaG9ydGxpdmVkVmlldzIgOiBwdWJsaWMgQ0NW
aWV3VGVzdCB7CitwdWJsaWM6CisgICAgQ0NWaWV3VGVzdFNob3J0bGl2ZWRWaWV3MigpIHsgfQor
CisgICAgdmlydHVhbCB2b2lkIGJlZ2luVGVzdCgpCisgICAgeworICAgICAgICBtX3ZpZXctPnNl
dE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkKKyAgICB7CisgICAgfQorfTsKK1RFU1RfRihDQ1Zp
ZXdUZXN0U2hvcnRsaXZlZFZpZXcyLCBydW4pIHsgcnVuVGVzdCgpOyB9CisKKy8vIFNob3J0bGl2
ZWQgdmlld3Mgc2hvdWRuJ3QgZGllIHdpdGggYSByZWRyYXcgaW4gZmxpZ2h0LgorY2xhc3MgQ0NW
aWV3VGVzdFNob3J0bGl2ZWRWaWV3MyA6IHB1YmxpYyBDQ1ZpZXdUZXN0IHsKK3B1YmxpYzoKKyAg
ICBDQ1ZpZXdUZXN0U2hvcnRsaXZlZFZpZXczKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVn
aW5UZXN0KCkKKyAgICB7CisgICAgICAgIG1fdmlldy0+c2V0TmVlZHNSZWRyYXcoKTsKKyAgICAg
ICAgZW5kVGVzdCgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhZnRlclRlc3QoKQorICAg
IHsKKyAgICB9Cit9OworVEVTVF9GKENDVmlld1Rlc3RTaG9ydGxpdmVkVmlldzMsIHJ1bikgeyBy
dW5UZXN0KCk7IH0KKworCisvLyBDb25zdGFudGx5IHJlZHJhd2luZyB2aWV3cyBzaG91bGRudCBk
aWUgd2hlbiB0aGV5IGNvbW1pdAorY2xhc3MgQ0NWaWV3VGVzdENvbW1pdGluZ1dpdGhDb250aW51
b3VzUmVkcmF3IDogcHVibGljIENDVmlld1Rlc3QgeworcHVibGljOgorICAgIENDVmlld1Rlc3RD
b21taXRpbmdXaXRoQ29udGludW91c1JlZHJhdygpCisgICAgICAgIDogbV9udW1BZnRlckNvbW1p
dHMoMCkKKyAgICAgICAgLCBtX251bURyYXdzKDApCisgICAgeworICAgIH0KKworICAgIHZpcnR1
YWwgdm9pZCBiZWdpblRlc3QoKQorICAgIHsKKyAgICAgICAgbV92aWV3LT5zZXROZWVkc0NvbW1p
dEFuZFJlZHJhdygpOworICAgICAgICBlbmRUZXN0KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIGFmdGVyQ29tbWl0T25DQ1RocmVhZChNb2NrVmlld0ltcGwqIHZpZXdJbXBsKQorICAgIHsK
KyAgICAgICAgbV9udW1BZnRlckNvbW1pdHMgKz0gMTsKKyAgICAgICAgaWYgKG1fbnVtQWZ0ZXJD
b21taXRzID09IDIpCisgICAgICAgICAgICBlbmRUZXN0KCk7CisgICAgfQorCisgICAgdmlydHVh
bCB2b2lkIGRyYXdMYXllcnNBbmRQcmVzZW50T25DQ1RocmVhZChNb2NrVmlld0ltcGwqIHZpZXdJ
bXBsKQorICAgIHsKKyAgICAgICAgaWYgKG1fbnVtRHJhd3MgPT0gMSkKKyAgICAgICAgICAgIHZp
ZXdJbXBsLT5zZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOworICAgICAgICBtX251bURyYXdzKys7
CisgICAgICAgIHZpZXdJbXBsLT5zZXROZWVkc1JlZHJhdygpOworICAgIH0KKworICAgIHZpcnR1
YWwgdm9pZCBhZnRlclRlc3QoKQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgaW50IG1f
bnVtQWZ0ZXJDb21taXRzOworICAgIGludCBtX251bURyYXdzOworfTsKK1RFU1RfRihDQ1ZpZXdU
ZXN0Q29tbWl0aW5nV2l0aENvbnRpbnVvdXNSZWRyYXcsIHJ1bikgeyBydW5UZXN0KCk7IH0KKwor
CisKKy8vIFR3byBzZXROZWVkc0NvbW1pdHMgaW4gYSByb3cgc2hvdWxkIGxlYWQgdG8gYXQgbGVh
c3QgMSBjb21taXQgYW5kIGF0IGxlYXN0IDEKKy8vIGRyYXcgd2l0aCBmcmFtZSAwLgorY2xhc3Mg
Q0NWaWV3VGVzdFNldE5lZWRzQ29tbWl0MSA6IHB1YmxpYyBDQ1ZpZXdUZXN0IHsKK3B1YmxpYzoK
KyAgICBDQ1ZpZXdUZXN0U2V0TmVlZHNDb21taXQxKCkKKyAgICAgICAgOiBtX251bUNvbW1pdHMo
MCkKKyAgICAgICAgLCBtX251bURyYXdzKDApIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGJlZ2lu
VGVzdCgpCisgICAgeworICAgICAgICBtX3ZpZXctPnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7
CisgICAgICAgIG1fdmlldy0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhyZWFkKE1vY2tWaWV3SW1w
bCogdmlld0ltcGwpCisgICAgeworICAgICAgICBtX251bURyYXdzKys7CisgICAgICAgIGlmICgh
dmlld0ltcGwtPnNvdXJjZUZyYW1lTnVtYmVyKCkpIC8vIGZyYW1lIDAKKyAgICAgICAgICAgIGVu
ZFRlc3QoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0T25DQ1RocmVhZChNb2Nr
VmlldyogdmlldywgTW9ja1ZpZXdJbXBsKiBpbXBsKQorICAgIHsKKyAgICAgICAgbV9udW1Db21t
aXRzKys7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFmdGVyVGVzdCgpCisgICAgeworICAg
ICAgICBFWFBFQ1RfR0UoMSwgbV9udW1Db21taXRzKTsKKyAgICAgICAgRVhQRUNUX0dFKDEsIG1f
bnVtRHJhd3MpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBpbnQgbV9udW1Db21taXRzOworICAg
IGludCBtX251bURyYXdzOworfTsKK1RFU1RfRihDQ1ZpZXdUZXN0U2V0TmVlZHNDb21taXQxLCBy
dW4pIHsgcnVuVGVzdCgpOyB9CisKKworLy8gQSBzZXROZWVkc0NvbW1pdCBzaG91bGQgbGVhZCB0
byAxIGNvbW1pdC4gSXNzdWluZyBhIHNlY29uZCBjb21taXQgYWZ0ZXIgdGhhdAorLy8gZmlyc3Qg
Y29tbWl0ZWQgZnJhbWUgZHJhd3Mgc2hvdWxkIGxlYWQgdG8gYW5vdGhlciBjb21taXQuCitjbGFz
cyBDQ1ZpZXdUZXN0U2V0TmVlZHNDb21taXQyIDogcHVibGljIENDVmlld1Rlc3QgeworcHVibGlj
OgorICAgIENDVmlld1Rlc3RTZXROZWVkc0NvbW1pdDIoKQorICAgICAgICA6IG1fbnVtQ29tbWl0
cygwKQorICAgICAgICAsIG1fbnVtRHJhd3MoMCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVn
aW5UZXN0KCkKKyAgICB7CisgICAgICAgIG1fdmlldy0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXco
KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhy
ZWFkKE1vY2tWaWV3SW1wbCogdmlld0ltcGwpCisgICAgeworICAgICAgICBpZiAoIXZpZXdJbXBs
LT5zb3VyY2VGcmFtZU51bWJlcigpKSAvLyBmcmFtZSAwCisgICAgICAgICAgICB2aWV3SW1wbC0+
c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICAgICAgZWxzZSBpZiAodmlld0ltcGwtPnNv
dXJjZUZyYW1lTnVtYmVyKCkgPT0gMSkKKyAgICAgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0T25DQ1RocmVhZChNb2NrVmlldyogdmlldywgTW9ja1Zp
ZXdJbXBsKiBpbXBsKQorICAgIHsKKyAgICAgICAgbV9udW1Db21taXRzKys7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIGFmdGVyVGVzdCgpCisgICAgeworICAgICAgICBFWFBFQ1RfRVEoMiwg
bV9udW1Db21taXRzKTsKKyAgICAgICAgRVhQRUNUX0dFKDIsIG1fbnVtRHJhd3MpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBpbnQgbV9udW1Db21taXRzOworICAgIGludCBtX251bURyYXdzOwor
fTsKK1RFU1RfRihDQ1ZpZXdUZXN0U2V0TmVlZHNDb21taXQyLCBydW4pIHsgcnVuVGVzdCgpOyB9
CisKKworLy8gMSBzZXROZWVkc1JlZHJhdyBzaG91bGQgbGVhZCB0byBhdCBsZWFzdCAxIGRyYXcg
YnV0IG5vIGNvbW1pdC4KK2NsYXNzIENDVmlld1Rlc3RTZXROZWVkc1JlZHJhdyA6IHB1YmxpYyBD
Q1ZpZXdUZXN0IHsKK3B1YmxpYzoKKyAgICBDQ1ZpZXdUZXN0U2V0TmVlZHNSZWRyYXcoKQorICAg
ICAgICA6IG1fbnVtQ29tbWl0cygwKQorICAgICAgICAsIG1fbnVtRHJhd3MoMCkgeyB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkKKyAgICB7CisgICAgICAgIG1fdmlldy0+c2V0TmVl
ZHNSZWRyYXcoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVyc0FuZFByZXNl
bnRPbkNDVGhyZWFkKE1vY2tWaWV3SW1wbCogdmlldykKKyAgICB7CisgICAgICAgIEVYUEVDVF9F
USgtMSwgdmlldy0+c291cmNlRnJhbWVOdW1iZXIoKSk7CisgICAgICAgIEVYUEVDVF9FUSgwLCB2
aWV3LT5mcmFtZU51bWJlcigpKTsKKyAgICAgICAgbV9udW1EcmF3cyArPSAxOworICAgICAgICBl
bmRUZXN0KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGNvbW1pdE9uQ0NUaHJlYWQoTW9j
a1ZpZXcqIHZpZXcsIE1vY2tWaWV3SW1wbCogaW1wbCkKKyAgICB7CisgICAgICAgIG1fbnVtQ29t
bWl0cysrOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhZnRlclRlc3QoKQorICAgIHsKKyAg
ICAgICAgRVhQRUNUX0dFKDEsIG1fbnVtRHJhd3MpOworICAgICAgICBFWFBFQ1RfRVEoMCwgbV9u
dW1Db21taXRzKTsKKyAgICB9Citwcml2YXRlOgorICAgIGludCBtX251bUNvbW1pdHM7CisgICAg
aW50IG1fbnVtRHJhd3M7Cit9OworVEVTVF9GKENDVmlld1Rlc3RTZXROZWVkc1JlZHJhdywgcnVu
KSB7IHJ1blRlc3QoKTsgfQorCisKKworfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90113</attachid>
            <date>2011-04-18 16:25:59 -0700</date>
            <delta_ts>2011-04-18 16:35:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58408-20110418162553.patch</filename>
            <type>text/plain</type>
            <size>73575</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODM4OTYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjOTM0YWFkNjVlYzRjNzE5
YWQwNDI1ZDMwOTdjZTBmNzZjZmRjNDljLi5lMDJlMzMyMGIyNzA2NmM0MGE5ZjYxNGE4NDk2OTM0
OWMwNTE5YjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODIgQEAKKzIwMTEtMDQtMTggIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50IENDTGF5ZXJUcmVlSG9zdCBh
bmQgQ0NMYXllclRyZWVIb3N0SW1wbCBwb3J0aW9ucyBvZiB0aHJlYWRlZCBjb21wb3NpdG9yCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODQwOAorCisg
ICAgICAgIENyZWF0ZSBDQ0xheWVyVHJlZUhvc3QgYW5kIENDTGF5ZXJUcmVlSG9zdEltcGwsIHdo
aWNoIGFyZSB0aGUgbWFpbgorICAgICAgICB0aHJlYWQgYW5kIGNvbXBvc2l0b3IgdGhyZWFkIGhh
bHZlcyBvZiBhIGNvbXBvc2l0ZWQgdmlldy4gQ29tbXVuaWNhdGlvbgorICAgICAgICBiZXR3ZWVu
IHRoZSB0d28gaXMgYmFzZWQgb24gdGhlIGRlc2lnbiB1c2VkIGluIEZpbGVTdHJlYW1Qcm94eS4K
KworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bUNvbW1pdHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyUmVuZGVyZXJDaHJvbWl1bUNvbW1pdHRlcjo6Y29tbWl0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bUNvbW1pdHRlcjo6TGF5ZXJSZW5kZXJlckNocm9taXVt
Q29tbWl0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6YmVn
aW5Db21taXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb21t
aXRDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBs
OjpMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJDaHJvbWl1bUltcGw6OmRyYXdMYXllcnNBbmRQcmVzZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bUltcGw6OmRyYXdMYXllcnNPbk1haW5UaHJlYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbFByb3h5OjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbFByb3h5OjpjcmVh
dGVMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW1JbXBsUHJveHk6OkxheWVyUmVuZGVyZXJDaHJvbWl1bUltcGxQcm94eSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZUxheWVyVHJlZUhvc3RJbXBs
UHJveHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
SGVhZHNVcERpc3BsYXkuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDSGVhZHNVcERpc3BsYXk6OmN1
cnJlbnRGcmFtZU51bWJlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuY3BwLgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0OjpDQ0xheWVyVHJlZUhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0Ojppbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6
fkNDTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNv
bW1pdENvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0
ZUFuZExheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI6
OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnNldE5lZWRzQ29t
bWl0QW5kUmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2V0TmVl
ZHNSZWRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmguCisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3Q6OmZyYW1lTnVtYmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6On5DQ0xheWVyVHJlZUhvc3RJbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmJlZ2luQ29tbWl0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbW1pdENvbXBsZXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNSZWRyYXcpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oLgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0SW1wbENsaWVudDo6fkNDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6ZnJhbWVOdW1iZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c291cmNlRnJhbWVOdW1iZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0U291cmNlRnJhbWVOdW1iZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5
OjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5OjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHk6On5DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVkcmF3
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c3RvcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnBvc3REcmF3TGF5ZXJz
VGFza09uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFBy
b3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNNYWluVGhyZWFkKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNDQ1RocmVhZCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmNvbW1pdE9uQ0NUaHJl
YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpkcmF3TGF5
ZXJzT25DQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmluaXRJbXBsT25DQ1Ro
cmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmxheWVy
VHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6Omhvc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNDVGhyZWFkOjpydW5Mb29wKToKKwogMjAxMS0wNC0xNCAgQW50dGkgS29pdmlzdG8gIDxhbnR0
aUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgT2xpdmVyIEh1bnQuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKaW5kZXggNmI2MWJhMzU3MmUwNjZkYTY0ZDQzOTM2OWM4NjljYTJiNWI5ODU4Zi4uZmUy
ZmQ0MTFkZjAxMTkyYTg1Y2UwYWZhMWQzYTczNzNiMTAyZDc3ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpA
QCAtNDA1NCw2ICs0MDU0LDEyIEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuY3BwJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkLmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhy
ZWFkLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFp
blRocmVhZFRhc2suaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRl
eCBmYzdlNDMzNzA4YjgyYzYxN2ZkNWM5YjZmZjlmYWMyOWZlNTAzZWQ4Li5lOTQyZDhlYWI0MjEz
MjJkYjJhNGY3ZDUxOTg0Yjk3ZWJiZWQ0MGUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5jcHAKQEAgLTQ3LDYgKzQ3LDggQEAKICNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCiAj
aW5jbHVkZSAiV2ViR0xMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwu
aCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NN
YWluVGhyZWFkVGFzay5oIgogI2lmIFVTRShTS0lBKQogI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tp
YS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKQEAgLTkzLDIzICs5NSwyOCBA
QCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29tcGFyZUxheWVyWihjb25zdCBSZWZQdHI8
Q0NMYXllckltcGw+JiBhLCBjb25zdCBSZQogICAgIHJldHVybiBhLT5kcmF3RGVwdGgoKSA8IGIt
PmRyYXdEZXB0aCgpOwogfQogCi1QYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
Y29udGV4dCwgUGFzc093blB0cjxUaWxlUGFpbnRJbnRlcmZhY2U+IGNvbnRlbnRQYWludCkKK1Bh
c3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNy
ZWF0ZShDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVudCwgUGFzc093blB0cjxUaWxlUGFpbnRJ
bnRlcmZhY2U+IGNvbnRlbnRQYWludCkKIHsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+
IGNvbnRleHQgPSBjbGllbnQtPmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKTsKICAgICBp
ZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgUmVmUHRyPExheWVyUmVuZGVy
ZXJDaHJvbWl1bT4gbGF5ZXJSZW5kZXJlcihhZG9wdFJlZihuZXcgTGF5ZXJSZW5kZXJlckNocm9t
aXVtKGNvbnRleHQsIGNvbnRlbnRQYWludCkpKTsKKyAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNo
cm9taXVtPiBsYXllclJlbmRlcmVyKGFkb3B0UmVmKG5ldyBMYXllclJlbmRlcmVyQ2hyb21pdW0o
Y2xpZW50LCBjb250ZXh0LCBjb250ZW50UGFpbnQpKSk7CisgICAgbGF5ZXJSZW5kZXJlci0+aW5p
dCgpOwogICAgIGlmICghbGF5ZXJSZW5kZXJlci0+aGFyZHdhcmVDb21wb3NpdGluZygpKQogICAg
ICAgICByZXR1cm4gMDsKIAogICAgIHJldHVybiBsYXllclJlbmRlcmVyLnJlbGVhc2UoKTsKIH0K
IAotTGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0oUGFzc1JlZlB0
cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCwKK0xheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5
ZXJSZW5kZXJlckNocm9taXVtKENDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xpZW50LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFBhc3NPd25QdHI8VGlsZVBhaW50SW50ZXJmYWNlPiBjb250ZW50UGFpbnQpCi0g
ICAgOiBtX3ZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoLTEsIC0xKSkKKyAgICA6IEND
TGF5ZXJUcmVlSG9zdChjbGllbnQpCisgICAgLCBtX3ZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oSW50
UG9pbnQoLTEsIC0xKSkKICAgICAsIG1fcm9vdExheWVyKDApCiAgICAgLCBtX3Jvb3RMYXllckNv
bnRlbnRQYWludChjb250ZW50UGFpbnQpCisgICAgLCBtX2NvbW1pdHRpbmcoZmFsc2UpCiAgICAg
LCBtX2N1cnJlbnRTaGFkZXIoMCkKICAgICAsIG1fY3VycmVudFJlbmRlclN1cmZhY2UoMCkKICAg
ICAsIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCgwKQpAQCAtMTg1LDEwICsxOTIsOCBAQCB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0Vmlld3BvcnQoY29uc3QgSW50UmVjdCYgdmlzaWJs
ZVJlY3QsIGNvbnN0IEludFJlYwogICAgIH0KIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OnVwZGF0ZUFuZERyYXdMYXllcnMoKQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVw
ZGF0ZUxheWVycygpCiB7Ci0gICAgQVNTRVJUKG1faGFyZHdhcmVDb21wb3NpdGluZyk7Ci0KICAg
ICBpZiAoIW1fcm9vdExheWVyKQogICAgICAgICByZXR1cm47CiAKQEAgLTE5OSwxMCArMjA0LDEz
IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVBbmREcmF3TGF5ZXJzKCkKICAg
ICBpZiAoIW1fcm9vdExheWVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBMYXllckxpc3QgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdDsKLQotICAgIHVwZGF0ZUxheWVycyhyZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0KTsKKyAgICBtX2NvbXB1dGVkUmVuZGVyU3VyZmFjZUxheWVyTGlzdCA9IGFkb3B0UHRy
KG5ldyBMYXllckxpc3QoKSk7CisgICAgdXBkYXRlTGF5ZXJzKCptX2NvbXB1dGVkUmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCk7Cit9CiAKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5
ZXJzKCkKK3sKKyAgICBBU1NFUlQobV9jb21wdXRlZFJlbmRlclN1cmZhY2VMYXllckxpc3QpOwog
ICAgIC8vIEJlZm9yZSBkcmF3TGF5ZXJzOgogICAgIGlmIChoYXJkd2FyZUNvbXBvc2l0aW5nKCkg
JiYgbV9jb250ZXh0U3VwcG9ydHNMYXRjaCkgewogICAgICAgICAvLyBGSVhNRTogVGhlIG11bHRp
dGhyZWFkZWQgY29tcG9zaXRvciBjYXNlIHdpbGwgbm90IHdvcmsgYXMgbG9uZyBhcwpAQCAtMjI4
LDcgKzIzNiw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVBbmREcmF3TGF5
ZXJzKCkKICAgICAgICAgbV9jaGlsZENvbnRleHRzV2VyZUNvcGllZCA9IGZhbHNlOwogICAgIH0K
IAotICAgIGRyYXdMYXllcnMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgZHJhd0xheWVy
cygqbV9jb21wdXRlZFJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogCiAgICAgLy8gQWZ0ZXIgZHJh
d0xheWVyczoKICAgICBpZiAoaGFyZHdhcmVDb21wb3NpdGluZygpICYmIG1fY29udGV4dFN1cHBv
cnRzTGF0Y2gpIHsKQEAgLTEwODUsNiArMTA5Myw5MyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHVtcFJlbmRlclN1cmZhY2VzKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50LCBMYXll
cgogICAgICAgICBkdW1wUmVuZGVyU3VyZmFjZXModHMsIGluZGVudCwgbGF5ZXItPmdldFN1Ymxh
eWVycygpW2ldLmdldCgpKTsKIH0KIAorY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtQ29tbWl0
dGVyIDogcHVibGljIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlciB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NPd25QdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtQ29tbWl0dGVyPiBjcmVhdGUoKSB7
IHJldHVybiBuZXcgTGF5ZXJSZW5kZXJlckNocm9taXVtQ29tbWl0dGVyKCk7IH0KKworICAgIHZp
cnR1YWwgdm9pZCBjb21taXQoQ0NMYXllclRyZWVIb3N0KiBob3N0LCBDQ0xheWVyVHJlZUhvc3RJ
bXBsKiBob3N0SW1wbCkKKyAgICB7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcjo6
Y29tbWl0KGhvc3QsIGhvc3RJbXBsKTsKKyAgICAgICAgLy8gRklYTUU6IHB1dCB0cmVlIHN5bmMg
Y29kZSBpbiBoZXJlLgorICAgIH0KK3ByaXZhdGU6CisgICAgTGF5ZXJSZW5kZXJlckNocm9taXVt
Q29tbWl0dGVyKCkgeyB9Cit9OworCitQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdENvbW1pdHRl
cj4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpiZWdpbkNvbW1pdCgpCit7CisgICAgQVNTRVJUKCFt
X2NvbW1pdHRpbmcpOworICAgIG1fY29tbWl0dGluZyA9IHRydWU7CisgICAgcmV0dXJuIExheWVy
UmVuZGVyZXJDaHJvbWl1bUNvbW1pdHRlcjo6Y3JlYXRlKCk7Cit9CisKK3ZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpjb21taXRDb21wbGV0ZSgpCit7CisgICAgQVNTRVJUKG1fY29tbWl0dGlu
Zyk7CisgICAgQ0NMYXllclRyZWVIb3N0Ojpjb21taXRDb21wbGV0ZSgpOworICAgIG1fY29tbWl0
dGluZyA9IGZhbHNlOworfQorCisKK2NsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bUltcGwgOiBw
dWJsaWMgQ0NMYXllclRyZWVIb3N0SW1wbCB7CitwdWJsaWM6CisgICAgTGF5ZXJSZW5kZXJlckNo
cm9taXVtSW1wbChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQsIExheWVyUmVuZGVy
ZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKKyAgICAgICAgOiBDQ0xheWVyVHJlZUhvc3RJbXBs
KGNsaWVudCkKKyAgICAgICAgLCBtX2xheWVyUmVuZGVyZXIobGF5ZXJSZW5kZXJlcikgeyB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVyc0FuZFByZXNlbnQoKQorICAgIHsKKyAgICAgICAg
Q0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKKyAgICAgICAgYm9vbCBjb250ZXh0TG9zdDsK
KyAgICAgICAgQ0NNYWluVGhyZWFkOjpwb3N0VGFzayhjcmVhdGVNYWluVGhyZWFkVGFzayh0aGlz
LCAmTGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbDo6ZHJhd0xheWVyc09uTWFpblRocmVhZCwgJmNv
bXBsZXRpb24sICZjb250ZXh0TG9zdCkpOworICAgICAgICBjb21wbGV0aW9uLndhaXQoKTsKKwor
ICAgICAgICAvLyBGSVhNRTogU2VuZCB0aGUgIlVwZGF0ZVJlY3QiIG1lc3NhZ2UgdXAgdG8gdGhl
IFJlbmRlcldpZGdldCBbb3IgbW92ZXBsdWdpbiBlcXVpdmFsZW50cy4uLl0KKworICAgICAgICAv
LyBGSVhNRTogaGFuZGxlIGNvbnRleHQgbG9zdAorICAgICAgICBpZiAoY29udGV4dExvc3QpCisg
ICAgICAgICAgICBGQVRBTCgiTGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbCBkb2VzIG5vdCBoYW5k
bGUgY29udGV4dCBsb3N0IHlldC4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBkcmF3
TGF5ZXJzT25NYWluVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uLCBib29sKiBj
b250ZXh0TG9zdCkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAg
ICAgICAgbV9sYXllclJlbmRlcmVyLT5kcmF3TGF5ZXJzKCk7CisgICAgICAgIG1fbGF5ZXJSZW5k
ZXJlci0+cHJlc2VudCgpOworCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0g
bV9sYXllclJlbmRlcmVyLT5jb250ZXh0KCk7CisgICAgICAgICpjb250ZXh0TG9zdCA9IGNvbnRl
eHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpICE9IEdyYXBo
aWNzQ29udGV4dDNEOjpOT19FUlJPUjsKKworICAgICAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsK
KyAgICB9CisKKyAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0qIG1fbGF5ZXJSZW5kZXJlcjsKK307
CisKK2NsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bUltcGxQcm94eSA6IHB1YmxpYyBDQ0xheWVy
VHJlZUhvc3RJbXBsUHJveHkgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPExheWVy
UmVuZGVyZXJDaHJvbWl1bUltcGxQcm94eT4gY3JlYXRlKExheWVyUmVuZGVyZXJDaHJvbWl1bSog
bGF5ZXJSZW5kZXJlcikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgTGF5ZXJS
ZW5kZXJlckNocm9taXVtSW1wbFByb3h5KGxheWVyUmVuZGVyZXIpKTsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gY3JlYXRlTGF5ZXJUcmVlSG9z
dEltcGwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBMYXllclJlbmRlcmVy
Q2hyb21pdW1JbXBsKHRoaXMsIHN0YXRpY19jYXN0PExheWVyUmVuZGVyZXJDaHJvbWl1bSo+KGhv
c3QoKSkpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtSW1w
bFByb3h5KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKKyAgICAgICAgOiBD
Q0xheWVyVHJlZUhvc3RJbXBsUHJveHkobGF5ZXJSZW5kZXJlcikgeyB9Cit9OworCitQYXNzT3du
UHRyPENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVh
dGVMYXllclRyZWVIb3N0SW1wbFByb3h5KCkKK3sKKyAgICByZXR1cm4gTGF5ZXJSZW5kZXJlckNo
cm9taXVtSW1wbFByb3h5OjpjcmVhdGUodGhpcyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmgKaW5kZXggYTE5OTU0NjE4N2FkMTA5N2E5OTYzNTUwZmE4ZDZm
ZDRjZWY4ZDRiYy4uMTNlODJmMThjZTg5NzRkNmM1MTI0MzU1NzRjY2E2YjE5NGJhNWRiNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKQEAgLTQzLDEzICs0MywxMyBAQAogI2lu
Y2x1ZGUgIlZpZGVvTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgImNjL0NDQ2FudmFzTGF5ZXJJ
bXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NIZWFkc1VwRGlzcGxheS5oIgorI2luY2x1ZGUgImNjL0ND
TGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgImNjL0NDUGx1Z2luTGF5ZXJJbXBsLmgiCiAjaW5j
bHVkZSAiY2MvQ0NWaWRlb0xheWVySW1wbC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAj
aW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
ICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWYgUExBVEZPUk0oQ0cpCkBAIC02MSwxMyAr
NjEsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDQ0hlYWRzVXBEaXNwbGF5Owog
Y2xhc3MgQ0NMYXllckltcGw7CitjbGFzcyBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI7CitjbGFz
cyBDQ0xheWVyVHJlZUhvc3RJbXBsOwogY2xhc3MgR2VvbWV0cnlCaW5kaW5nOwogY2xhc3MgR3Jh
cGhpY3NDb250ZXh0M0Q7CiAKIC8vIENsYXNzIHRoYXQgaGFuZGxlcyBkcmF3aW5nIG9mIGNvbXBv
c2l0ZWQgcmVuZGVyIGxheWVycyB1c2luZyBHTC4KLWNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1
bSA6IHB1YmxpYyBSZWZDb3VudGVkPExheWVyUmVuZGVyZXJDaHJvbWl1bT4geworY2xhc3MgTGF5
ZXJSZW5kZXJlckNocm9taXVtIDogcHVibGljIENDTGF5ZXJUcmVlSG9zdCB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBjcmVhdGUoUGFzc1Jl
ZlB0cjxHcmFwaGljc0NvbnRleHQzRD4sIFBhc3NPd25QdHI8VGlsZVBhaW50SW50ZXJmYWNlPiBj
b250ZW50UGFpbnQpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1
bT4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdENsaWVudCosIFBhc3NPd25QdHI8VGlsZVBhaW50SW50
ZXJmYWNlPiBjb250ZW50UGFpbnQpOwogCiAgICAgfkxheWVyUmVuZGVyZXJDaHJvbWl1bSgpOwog
CkBAIC03OCw3ICs4MCwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRWaWV3cG9ydChjb25zdCBJ
bnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IElu
dFBvaW50JiBzY3JvbGxQb3NpdGlvbik7CiAKICAgICAvLyB1cGRhdGVzIGFuZCBkcmF3cyB0aGUg
Y3VycmVudCBsYXllcnMgb250byB0aGUgYmFja2J1ZmZlcgotICAgIHZvaWQgdXBkYXRlQW5kRHJh
d0xheWVycygpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVMYXllcnMoKTsKKyAgICB2aXJ0dWFs
IFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyPiBiZWdpbkNvbW1pdCgpOworICAg
IHZpcnR1YWwgdm9pZCBjb21taXRDb21wbGV0ZSgpOworICAgIHZvaWQgZHJhd0xheWVycygpOwog
CiAgICAgLy8gd2FpdHMgZm9yIHJlbmRlcmluZyB0byBmaW5pc2gKICAgICB2b2lkIGZpbmlzaCgp
OwpAQCAtMTM0LDExICsxMzksMTQgQEAgcHVibGljOgogICAgIHZvaWQgYWRkQ2hpbGRDb250ZXh0
KEdyYXBoaWNzQ29udGV4dDNEKik7CiAgICAgdm9pZCByZW1vdmVDaGlsZENvbnRleHQoR3JhcGhp
Y3NDb250ZXh0M0QqKTsKIAorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xh
eWVyVHJlZUhvc3RJbXBsUHJveHk+IGNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsUHJveHkoKTsKKwog
cHJpdmF0ZToKICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4gTGF5ZXJM
aXN0OwogICAgIHR5cGVkZWYgSGFzaE1hcDxHcmFwaGljc0NvbnRleHQzRCosIGludD4gQ2hpbGRD
b250ZXh0TWFwOwogCi0gICAgZXhwbGljaXQgTGF5ZXJSZW5kZXJlckNocm9taXVtKFBhc3NSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBQYXNzT3duUHRyPFRpbGVQYWludEludGVyZmFjZT4gY29u
dGVudFBhaW50KTsKKyAgICBleHBsaWNpdCBMYXllclJlbmRlcmVyQ2hyb21pdW0oQ0NMYXllclRy
ZWVIb3N0Q2xpZW50KiwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4sIFBhc3NPd25QdHI8
VGlsZVBhaW50SW50ZXJmYWNlPiBjb250ZW50UGFpbnQpOwogCiAgICAgdm9pZCB1cGRhdGVMYXll
cnMoTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKICAgICB2b2lkIHVwZGF0ZVJv
b3RMYXllckNvbnRlbnRzKCk7CkBAIC0xNzksOCArMTg3LDExIEBAIHByaXZhdGU6CiAgICAgT3du
UHRyPFRpbGVQYWludEludGVyZmFjZT4gbV9yb290TGF5ZXJDb250ZW50UGFpbnQ7CiAgICAgT3du
UHRyPExheWVyVGlsZXJDaHJvbWl1bT4gbV9yb290TGF5ZXJDb250ZW50VGlsZXI7CiAKKyAgICBi
b29sIG1fY29tbWl0dGluZzsKICAgICBib29sIG1faGFyZHdhcmVDb21wb3NpdGluZzsKIAorICAg
IE93blB0cjxMYXllckxpc3Q+IG1fY29tcHV0ZWRSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworCiAg
ICAgdW5zaWduZWQgbV9jdXJyZW50U2hhZGVyOwogICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSog
bV9jdXJyZW50UmVuZGVyU3VyZmFjZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oCmlu
ZGV4IGQ1NmY4YWI4ODY3MTk0NWVhZGNlNWNiMzQ5NDViZTIxMWFiMzk2OTQuLjM2ZmMxYjdmYTA4
YmUxMzljYjU3NzlkYjhjMjBhOWE2MWU5NTA2YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNw
bGF5LmgKQEAgLTQ1LDYgKzQ1LDggQEAgcHVibGljOgogCiAgICAgfkNDSGVhZHNVcERpc3BsYXko
KTsKIAorICAgIGludCBjdXJyZW50RnJhbWVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2N1cnJl
bnRGcmFtZU51bWJlcjsgfQorCiAgICAgdm9pZCBvblByZXNlbnQoKTsKIAogICAgIHZvaWQgc2V0
U2hvd0ZQU0NvdW50ZXIoYm9vbCBlbmFibGUpIHsgbV9zaG93RlBTQ291bnRlciA9IGVuYWJsZTsg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzExYWU4M2U1ZWRm
MTJjNmE3ZTc3ZDdjODc4OWRjMTM5YmVkMWYyOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAK
QEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aW5jbHVkZSAiQ0NMYXllclRyZWVIb3N0LmgiCisKKyNpbmNsdWRlICJDQ0xheWVyVHJlZUhvc3RJ
bXBsLmgiCisjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0NDTGF5ZXJUcmVlSG9zdDo6Q0NMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9zdENsaWVudCog
Y2xpZW50KQorICAgIDogbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9mcmFtZU51bWJlcigwKQor
eworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6aW5pdCgpCit7CisjaWYgVVNFKFRIUkVBREVE
X0NPTVBPU0lUSU5HKQorICAgIG1fcHJveHkgPSBjcmVhdGVMYXllclRyZWVIb3N0SW1wbFByb3h5
KCk7CisgICAgbV9wcm94eS0+c3RhcnQoKTsKKyNlbmRpZgorfQorCitDQ0xheWVyVHJlZUhvc3Q6
On5DQ0xheWVyVHJlZUhvc3QoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3Q6
On5DQ0xheWVyVHJlZUhvc3QiLCB0aGlzLCAwKTsKKyAgICBtX3Byb3h5LT5zdG9wKCk7CisgICAg
bV9wcm94eS5jbGVhcigpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0Q29tcGxl
dGUoKQoreworICAgIG1fZnJhbWVOdW1iZXIrKzsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3Q6
OmFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQoreworICAgIG1fY2xpZW50
LT5hbmltYXRlQW5kTGF5b3V0KGZyYW1lQmVnaW5UaW1lKTsKK30KKwordm9pZCBDQ0xheWVyVHJl
ZUhvc3RDb21taXR0ZXI6OmNvbW1pdChDQ0xheWVyVHJlZUhvc3QqIGhvc3QsIENDTGF5ZXJUcmVl
SG9zdEltcGwqIGhvc3RJbXBsKQoreworICAgIGhvc3RJbXBsLT5zZXRTb3VyY2VGcmFtZU51bWJl
cihob3N0LT5mcmFtZU51bWJlcigpKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldE5l
ZWRzQ29tbWl0QW5kUmVkcmF3KCkKK3sKKyAgICBtX3Byb3h5LT5zZXROZWVkc0NvbW1pdEFuZFJl
ZHJhdygpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0TmVlZHNSZWRyYXcoKQorewor
ICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3Q6OnNldE5lZWRzUmVkcmF3IiwgdGhpcywg
MCk7CisgICAgbV9wcm94eS0+c2V0TmVlZHNSZWRyYXcoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNmVmZDRjY2FiNGRlODM1NWJjYTdjNzk0MTBhNzZi
M2FjN2FhOWViCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTAsMCArMSw3OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBDQ0xheWVyVHJlZUhvc3RfaAorI2RlZmluZSBDQ0xheWVyVHJl
ZUhvc3RfaAorCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmgiCisjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
Q0NMYXllclRyZWVIb3N0SW1wbDsKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQ7Citj
bGFzcyBHcmFwaGljc0NvbnRleHQzRDsKKworY2xhc3MgQ0NMYXllclRyZWVIb3N0Q2xpZW50IHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVC
ZWdpblRpbWUpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+
IGNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKSA9IDA7Cit9OworCitjbGFzcyBDQ0xheWVy
VHJlZUhvc3RDb21taXR0ZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBjb21taXQoQ0NM
YXllclRyZWVIb3N0KiwgQ0NMYXllclRyZWVIb3N0SW1wbCopOworfTsKKworY2xhc3MgQ0NMYXll
clRyZWVIb3N0IDogcHVibGljIFJlZkNvdW50ZWQ8Q0NMYXllclRyZWVIb3N0PiB7CitwdWJsaWM6
CisgICAgZXhwbGljaXQgQ0NMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9zdENsaWVudCopOwor
ICAgIHZvaWQgaW5pdCgpOworICAgIHZpcnR1YWwgfkNDTGF5ZXJUcmVlSG9zdCgpOworCisgICAg
dmlydHVhbCB2b2lkIGFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKKyAg
ICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyPiBiZWdpbkNvbW1p
dCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q29tcGxldGUoKTsKKworICAgIGludCBm
cmFtZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVOdW1iZXI7IH0KKworICAgIHZvaWQg
c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICB2b2lkIHNldE5lZWRzUmVkcmF3KCk7CisK
KyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlTGF5ZXJzKCkgPSAwOworCitwcm90ZWN0ZWQ6CisgICAg
dmlydHVhbCBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eT4gY3JlYXRlTGF5ZXJU
cmVlSG9zdEltcGxQcm94eSgpID0gMDsKKworcHJpdmF0ZToKKyAgICBDQ0xheWVyVHJlZUhvc3RD
bGllbnQqIG1fY2xpZW50OworICAgIGludCBtX2ZyYW1lTnVtYmVyOworICAgIE93blB0cjxDQ0xh
eWVyVHJlZUhvc3RJbXBsUHJveHk+IG1fcHJveHk7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iY2EyMjA5YjdlOTEy
MmQyY2VjMzg5YThmZWJkM2M0NTU3NGNmMmU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5j
cHAKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaW5jbHVkZSAiQ0NMYXllclRyZWVIb3N0SW1wbC5oIgorCisjaW5jbHVkZSAiQ0NMYXllclRy
ZWVIb3N0LmgiCisjaW5jbHVkZSAiQ0NUaHJlYWRUYXNrLmgiCisjaW5jbHVkZSAiVHJhY2VFdmVu
dC5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK0NDTGF5ZXJUcmVlSG9zdEltcGw6OkNDTGF5ZXJUcmVlSG9zdEltcGwoQ0NMYXllclRyZWVI
b3N0SW1wbENsaWVudCogY2xpZW50KQorICAgIDogbV9zb3VyY2VGcmFtZU51bWJlcigtMSkKKyAg
ICAsIG1fZnJhbWVOdW1iZXIoMCkKKyAgICAsIG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fY29t
bWl0UGVuZGluZyhmYWxzZSkKKyAgICAsIG1fcmVkcmF3RW5xdWV1ZWQoZmFsc2UpCit7Cit9CisK
K0NDTGF5ZXJUcmVlSG9zdEltcGw6On5DQ0xheWVyVHJlZUhvc3RJbXBsKCkKK3sKKyAgICBUUkFD
RV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6fkNDTGF5ZXJUcmVlSG9zdEltcGwoKSIsIHRo
aXMsIDApOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmJlZ2luQ29tbWl0KCkKK3sK
K30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb21taXRDb21wbGV0ZSgpCit7CisgICAg
bV9jb21taXRQZW5kaW5nID0gZmFsc2U7CisgICAgc2V0TmVlZHNSZWRyYXcoKTsKK30KKwordm9p
ZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzKCkKK3sKKyAgICAvLyBJZiBhIGNvbW1p
dCBpcyBwZW5kaW5nLCBkbyBub3QgZHJhdy4gVGhpcyBpcyBhIHRlbXBvcmFyeSByZXN0cmljdGlv
biB0aGF0CisgICAgLy8gaXMgbmVjZXNzYXJ5IGJlY2F1c2UgZHJhd0xheWVycyBpcyBjdXJyZW50
bHkgYSBibG9ja2luZyBvcGVyYXRpb24gb24gdGhlIG1haW4gdGhyZWFkLgorICAgIGlmIChtX2Nv
bW1pdFBlbmRpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVy
VHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKG1fcmVkcmF3
RW5xdWV1ZWQpOworICAgIG1fcmVkcmF3RW5xdWV1ZWQgPSBmYWxzZTsKKworICAgIHsKKyAgICAg
ICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnNBbmRQcmVzZW50
IiwgdGhpcywgMCk7CisgICAgICAgIGRyYXdMYXllcnNBbmRQcmVzZW50KCk7CisgICAgfQorCisg
ICAgbV9mcmFtZU51bWJlciArPSAxOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNl
dE5lZWRzQ29tbWl0QW5kUmVkcmF3KCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVI
b3N0SW1wbDo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXciLCB0aGlzLCAwKTsKKworICAgIC8vIEZJ
WE1FOiBtb3ZlIHRoZSByZXF1ZXN0RnJhbWVBbmRDb21taXQgb3V0IGZyb20gaGVyZSBvbmNlIHdl
IGFkZCBmcmFtZXJhdGUgdGhyb3R0bGluZy9hbmltYXRpb24KKyAgICBkb3VibGUgZnJhbWVCZWdp
blRpbWUgPSBjdXJyZW50VGltZSgpOworICAgIG1fY29tbWl0UGVuZGluZyA9IHRydWU7CisgICAg
bV9jbGllbnQtPnJlcXVlc3RGcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQoZnJhbWVCZWdpblRpbWUp
OworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldE5lZWRzUmVkcmF3KCkKK3sKKyAg
ICBpZiAobV9yZWRyYXdFbnF1ZXVlZCB8fCBtX2NvbW1pdFBlbmRpbmcpCisgICAgICAgIHJldHVy
bjsKKworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXROZWVkc1JlZHJh
dyIsIHRoaXMsIDApOworICAgIG1fcmVkcmF3RW5xdWV1ZWQgPSB0cnVlOworICAgIG1fY2xpZW50
LT5wb3N0RHJhd0xheWVyc1Rhc2tPbkNDVGhyZWFkKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdEltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMDlhMmJjNTFjNzQxZWQ5MGJhMjk0ZDE4
YzZkYmVmYjQ2MjZmNDcxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCkBAIC0wLDAgKzEs
NzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NMYXllclRyZWVIb3N0SW1wbF9oCisjZGVm
aW5lIENDTGF5ZXJUcmVlSG9zdEltcGxfaAorCisjaW5jbHVkZSAiY2MvQ0NUaHJlYWQuaCIKKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVk
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gUHJvdmlkZXMgc2NoZWR1bGluZyBpbmZy
YXN0cnVjdHVyZSBmb3IgYSBDQ0xheWVyVHJlZUhvc3RJbXBsCitjbGFzcyBDQ0xheWVyVHJlZUhv
c3RJbXBsQ2xpZW50ICB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+Q0NMYXllclRyZWVIb3N0SW1w
bENsaWVudCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwb3N0RHJhd0xheWVyc1Rhc2tPbkNDVGhy
ZWFkKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhy
ZWFkKGRvdWJsZSBmcmFtZUJlZ2luVGltZSkgPSAwOworfTsKKworLy8gQ0NMYXllclRyZWVIb3N0
SW1wbCBvd25zIHRoZSBDQ0xheWVySW1wbCB0cmVlIGFzIHdlbGwgYXMgYXNzb2NpYXRlZCByZW5k
ZXJpbmcgc3RhdGUKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGwgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKENDTGF5ZXJUcmVlSG9zdEltcGwpOworcHVibGljOgorICAgIGV4cGxpY2l0IEND
TGF5ZXJUcmVlSG9zdEltcGwoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCopOworICAgIHZpcnR1
YWwgfkNDTGF5ZXJUcmVlSG9zdEltcGwoKTsKKworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1p
dCgpOworICAgIHZpcnR1YWwgdm9pZCBjb21taXRDb21wbGV0ZSgpOworCisgICAgdm9pZCBkcmF3
TGF5ZXJzKCk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNBbmRQcmVzZW50KCkgPSAwOwor
CisgICAgaW50IGZyYW1lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZU51bWJlcjsgfQor
CisgICAgdm9pZCBzZXROZWVkc1JlZHJhdygpOworICAgIHZvaWQgc2V0TmVlZHNDb21taXRBbmRS
ZWRyYXcoKTsKKworICAgIGludCBzb3VyY2VGcmFtZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1f
c291cmNlRnJhbWVOdW1iZXI7IH0KKyAgICB2b2lkIHNldFNvdXJjZUZyYW1lTnVtYmVyKGludCBm
cmFtZU51bWJlcikgeyBtX3NvdXJjZUZyYW1lTnVtYmVyID0gZnJhbWVOdW1iZXI7IH0KKworcHJv
dGVjdGVkOgorICAgIGludCBtX3NvdXJjZUZyYW1lTnVtYmVyOworICAgIGludCBtX2ZyYW1lTnVt
YmVyOworCitwcml2YXRlOgorICAgIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqIG1fY2xpZW50
OworICAgIGJvb2wgbV9jb21taXRQZW5kaW5nOworICAgIGJvb2wgbV9yZWRyYXdFbnF1ZXVlZDsK
K307CisKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGxQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDQ1YmUyMGU4N2Q3ZTNmOTNiZjJiZGViMTRlMjk2OTAx
YTVmZmRjYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5jcHAKQEAgLTAsMCArMSwy
MTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkND
TGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oIgorCisjaW5jbHVkZSAiQ0NMYXllclRyZWVIb3N0Lmgi
CisjaW5jbHVkZSAiQ0NNYWluVGhyZWFkVGFzay5oIgorI2luY2x1ZGUgIkNDVGhyZWFkVGFzay5o
IgorI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgeworQ0NUaHJlYWQqIGNjVGhyZWFkOworaW50
IG51bVByb3hpZXMgPSAwOworfQorCitDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OkNDTGF5ZXJU
cmVlSG9zdEltcGxQcm94eShDQ0xheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QpCisgICAgOiBt
X2NvbW1pdFBlbmRpbmcoZmFsc2UpCisgICAgLCBtX2xheWVyVHJlZUhvc3QobGF5ZXJUcmVlSG9z
dCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpDQ0xheWVy
VHJlZUhvc3RJbXBsUHJveHkiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworICAgIG51bVByb3hpZXMgKz0gMTsKKyAgICBpZiAoIWNjVGhyZWFkKQorICAgICAgICBjY1Ro
cmVhZCA9IENDVGhyZWFkOjpjcmVhdGUoKS5sZWFrUHRyKCk7Cit9CisKKwordm9pZCBDQ0xheWVy
VHJlZUhvc3RJbXBsUHJveHk6OnN0YXJ0KCkKK3sKKyAgICAvLyBDcmVhdGUgTGF5ZXJUcmVlSG9z
dEltcGwuCisgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKKyAgICBjY1RocmVhZC0+
cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHk6OmluaXRJbXBsT25DQ1RocmVhZCwgJmNvbXBsZXRpb24pKTsKKyAgICBjb21wbGV0aW9uLndh
aXQoKTsKK30KKworQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojp+Q0NMYXllclRyZWVIb3N0SW1w
bFByb3h5KCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojp+
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5IiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKyAgICBBU1NFUlQoIW1fbGF5ZXJUcmVlSG9zdEltcGwgJiYgIW1fbGF5ZXJUcmVl
SG9zdCk7CisKKyAgICBudW1Qcm94aWVzIC09IDE7CisgICAgaWYgKCFudW1Qcm94aWVzKSB7Cisg
ICAgICAgIGRlbGV0ZSBjY1RocmVhZDsKKyAgICAgICAgY2NUaHJlYWQgPSAwOworICAgIH0KK30K
Kwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3
KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlmIChtX2NvbW1pdFBlbmRp
bmcpCisgICAgICAgIHJldHVybjsKKworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJ
bXBsUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3IiwgdGhpcywgMCk7CisgICAgbV9jb21t
aXRQZW5kaW5nID0gdHJ1ZTsKKyAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRU
YXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVk
cmF3T25DQ1RocmVhZCkpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0
TmVlZHNSZWRyYXcoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgY2NUaHJl
YWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1w
bFByb3h5OjpzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQpKTsKK30KKwordm9pZCBDQ0xheWVyVHJl
ZUhvc3RJbXBsUHJveHk6OnN0b3AoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHk6OnN0b3AiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CisgICAgY2NUaHJlYWQtPnBvc3RU
YXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojps
YXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZCwgJmNvbXBsZXRpb24pKTsKKyAgICBjb21wbGV0
aW9uLndhaXQoKTsKKworICAgIG1fbGF5ZXJUcmVlSG9zdCA9IDA7CisgICAgQVNTRVJUKCFtX2xh
eWVyVHJlZUhvc3RJbXBsKTsgLy8gbGF5ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJlYWQoKSBzaG91
bGQgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsbGVkCit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1w
bFByb3h5Ojpwb3N0RHJhd0xheWVyc1Rhc2tPbkNDVGhyZWFkKCkKK3sKKyAgICBBU1NFUlQoaXND
Q1RocmVhZCgpKTsKKyAgICBpZiAobV9sYXllclRyZWVIb3N0SW1wbCkKKyAgICAgICAgY2NUaHJl
YWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1w
bFByb3h5OjpkcmF3TGF5ZXJzT25DQ1RocmVhZCkpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eTo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZChkb3VibGUgZnJhbWVC
ZWdpblRpbWUpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6
cmVxdWVzdEZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChp
c0NDVGhyZWFkKCkpOworICAgIGlmIChtX2xheWVyVHJlZUhvc3RJbXBsKQorICAgICAgICBDQ01h
aW5UaHJlYWQ6OnBvc3RUYXNrKGNyZWF0ZU1haW5UaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJl
ZUhvc3RJbXBsUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdCwgZnJhbWVCZWdpblRpbWUpKTsK
K30KKworYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmlzTWFpblRocmVhZCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIDo6aXNNYWluVGhyZWFkKCk7Cit9CisKK2Jvb2wgQ0NMYXllclRyZWVI
b3N0SW1wbFByb3h5Ojppc0NDVGhyZWFkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY3VycmVudFRo
cmVhZCgpID09IGNjVGhyZWFkLT50aHJlYWRJRCgpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eTo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkK
K3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlmICghbV9sYXllclRyZWVIb3N0
KQorICAgICAgICByZXR1cm47CisKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1w
bFByb3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21taXQiLCB0aGlzLCAwKTsKKyAgICB7CisgICAgICAg
IFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3Q6OmFuaW1hdGVBbmRMYXlvdXQiLCB0aGlzLCAw
KTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5hbmltYXRlQW5kTGF5b3V0KGZyYW1lQmVnaW5U
aW1lKTsKKyAgICB9CisKKyAgICBtX2NvbW1pdFBlbmRpbmcgPSBmYWxzZTsKKyAgICB7CisgICAg
ICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVycyIsIHRoaXMsIDAp
OworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVycygpOworICAgIH0KKworICAg
IE93blB0cjxDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI+IGNvbW1pdHRlciA9IG1fbGF5ZXJUcmVl
SG9zdC0+YmVnaW5Db21taXQoKTsKKworICAgIC8vIEJsb2NraW5nIGNhbGwgdG8gQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5OjpwZXJmb3JtQ29tbWl0CisgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29t
cGxldGlvbjsKKyAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMs
ICZDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQsIGNvbW1pdHRlci5n
ZXQoKSwgJmNvbXBsZXRpb24pKTsKKyAgICBjb21wbGV0aW9uLndhaXQoKTsKKworICAgIGNvbW1p
dHRlci5jbGVhcigpOworCisgICAgbV9sYXllclRyZWVIb3N0LT5jb21taXRDb21wbGV0ZSgpOwor
fQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6Y29tbWl0T25DQ1RocmVhZChDQ0xh
eWVyVHJlZUhvc3RDb21taXR0ZXIqIGNvbW1pdHRlciwgQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBs
ZXRpb24pCit7CisgICAgQVNTRVJUKGlzQ0NUaHJlYWQoKSk7CisgICAgVFJBQ0VfRVZFTlQoIkND
TGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6Y29tbWl0T25DQ1RocmVhZCIsIHRoaXMsIDApOworICAg
IG1fbGF5ZXJUcmVlSG9zdEltcGwtPmJlZ2luQ29tbWl0KCk7CisgICAgeworICAgICAgICBUUkFD
RV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojpjb21taXQiLCB0aGlzLCAwKTsKKyAgICAgICAgY29t
bWl0dGVyLT5jb21taXQobV9sYXllclRyZWVIb3N0LCBtX2xheWVyVHJlZUhvc3RJbXBsLmdldCgp
KTsKKyAgICB9CisgICAgY29tcGxldGlvbi0+c2lnbmFsKCk7CisKKyAgICBtX2xheWVyVHJlZUhv
c3RJbXBsLT5jb21taXRDb21wbGV0ZSgpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVy
VHJlZUhvc3RJbXBsUHJveHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkIiwgdGhpcywgMCk7CisgICAg
QVNTRVJUKGlzQ0NUaHJlYWQoKSk7CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdEltcGwpCisgICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmRyYXdMYXllcnMoKTsKK30KKwordm9pZCBDQ0xheWVy
VHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCgpCit7
CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHNDb21t
aXRBbmRSZWRyYXdPbkNDVGhyZWFkIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzQ0NUaHJlYWQo
KSAmJiBtX2xheWVyVHJlZUhvc3RJbXBsKTsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5zZXRO
ZWVkc0NvbW1pdEFuZFJlZHJhdygpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eTo6c2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXll
clRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQiLCB0aGlzLCAwKTsK
KyAgICBBU1NFUlQoaXNDQ1RocmVhZCgpICYmIG1fbGF5ZXJUcmVlSG9zdEltcGwpOworICAgIG1f
bGF5ZXJUcmVlSG9zdEltcGwtPnNldE5lZWRzUmVkcmF3KCk7Cit9CisKK3ZvaWQgQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5Ojppbml0SW1wbE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNv
bXBsZXRpb24pCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6
aW5pdEltcGxPbkNDVGhyZWFkIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzQ0NUaHJlYWQoKSk7
CisgICAgbV9sYXllclRyZWVIb3N0SW1wbCA9IGNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsKCk7Cisg
ICAgY29tcGxldGlvbi0+c2lnbmFsKCk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFBy
b3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29t
cGxldGlvbikKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojps
YXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc0ND
VGhyZWFkKCkpOworICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwuY2xlYXIoKTsKKyAgICBjb21wbGV0
aW9uLT5zaWduYWwoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNzlmNThhNjY5ZWFhNTMyZDNhNzAwMWUwOTM3OTEyZGY1
ZWRjNTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmgKQEAgLTAsMCArMSw3OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHlfaAorI2Rl
ZmluZSBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHlfaAorCisjaW5jbHVkZSAiY2MvQ0NDb21wbGV0
aW9uRXZlbnQuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCisjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDTGF5ZXJU
cmVlSG9zdDsKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcjsKKworY2xhc3MgQ0NMYXll
clRyZWVIb3N0SW1wbFByb3h5IDogcHVibGljIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQgewor
cHVibGljOgorICAgIHZpcnR1YWwgfkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSgpOworCisgICAg
dm9pZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOworICAgIHZvaWQgc2V0TmVlZHNSZWRyYXco
KTsKKworICAgIHZvaWQgc3RhcnQoKTsgLy8gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIHVzaW5nIHRo
ZSBwcm94eS4KKyAgICB2b2lkIHN0b3AoKTsgLy8gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIGRlbGV0
aW5nIHRoZSBwcm94eS4KKworICAgIC8vIENDTGF5ZXJUcmVlSG9zdEltcGxDaWVudCAtLSBjYWxs
ZWQgb24gQ0NUaHJlYWQKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdERyYXdMYXllcnNUYXNrT25DQ1Ro
cmVhZCgpOworICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFk
KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CisKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBDQ0xh
eWVyVHJlZUhvc3RJbXBsUHJveHkoQ0NMYXllclRyZWVIb3N0Kik7CisgICAgdmlydHVhbCBQYXNz
T3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IGNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsKCkgPSAw
OworICAgIENDTGF5ZXJUcmVlSG9zdCogaG9zdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJUcmVl
SG9zdDsgfQorCitwcml2YXRlOgorICAgIGJvb2wgaXNNYWluVGhyZWFkKCkgY29uc3Q7CisgICAg
Ym9vbCBpc0NDVGhyZWFkKCkgY29uc3Q7CisKKyAgICAvLyBDYWxsZWQgb24gQ0NNYWluVGhyZWFk
CisgICAgdm9pZCByZXF1ZXN0RnJhbWVBbmRDb21taXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsK
KworICAgIC8vIENhbGxlZCBvbiBDQ1RocmVhZAorICAgIHZvaWQgY29tbWl0T25DQ1RocmVhZChD
Q0xheWVyVHJlZUhvc3RDb21taXR0ZXIqLCBDQ0NvbXBsZXRpb25FdmVudCopOworICAgIHZvaWQg
ZHJhd0xheWVyc09uQ0NUaHJlYWQoKTsKKyAgICB2b2lkIGluaXRJbXBsT25DQ1RocmVhZChDQ0Nv
bXBsZXRpb25FdmVudCopOworICAgIHZvaWQgc2V0TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhy
ZWFkKCk7CisgICAgdm9pZCBzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQoKTsKKyAgICB2b2lkIGxh
eWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50Kik7CisKKyAgICBi
b29sIG1fY29tbWl0UGVuZGluZzsKKyAgICBDQ0xheWVyVHJlZUhvc3QqIG1fbGF5ZXJUcmVlSG9z
dDsKKyAgICBPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gbV9sYXllclRyZWVIb3N0SW1wbDsK
K307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5jcHAKaW5kZXggOTU2NjU4NDVjNThjNDhj
YTA2MjIwMDI0MjQ4Yjc0N2FiYWI3NjBjZi4uZGUxNzNhMTM0OTgyNGFmOTBmYWRjZTc4MTkwZmJi
ODNjYzQwZWI4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1
ZGUgIkNDVGhyZWFkLmgiCiAKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKKyNp
bmNsdWRlICJUcmFjZUV2ZW50LmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZl
cy5oPgpAQCAtNjQsNiArNjUsNyBAQCB2b2lkKiBDQ1RocmVhZDo6Y29tcG9zaXRvclRocmVhZFN0
YXJ0KHZvaWQqIHVzZXJkYXRhKQogCiB2b2lkKiBDQ1RocmVhZDo6cnVuTG9vcCgpCiB7CisgICAg
VFJBQ0VfRVZFTlQoIkNDVGhyZWFkOjpydW5Mb29wIiwgdGhpcywgMCk7CiAgICAgewogICAgICAg
ICAvLyBXYWl0IGZvciBDQ1RocmVhZDo6c3RhcnQoKSB0byBjb21wbGV0ZSB0byBoYXZlIG1fdGhy
ZWFkSUQKICAgICAgICAgLy8gZXN0YWJsaXNoZWQgYmVmb3JlIHN0YXJ0aW5nIHRoZSBtYWluIGxv
b3AuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGJhMTJjNjI3NTcwMDNkMmZkYjYxYmYz
NDUwYTQxY2RlNTM0N2UzNjYuLjNmOTM3MzMzODRlNTY1NTI5ZjU3OWUwZGIxYzE5OThiZWMzMDlk
NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTkgQEAKKzIwMTEtMDQt
MTggIE5hdCBEdWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50IENDTGF5ZXJU
cmVlSG9zdCBhbmQgQ0NMYXllclRyZWVIb3N0SW1wbCBwb3J0aW9ucyBvZiB0aHJlYWRlZCBjb21w
b3NpdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
ODQwOAorCisgICAgICAgIFN0cmVzcyB0ZXN0cyBmb3IgQ0NMYXllclRyZWVIb3N0LgorCisgICAg
ICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogcHVibGljL1dlYldpZGdldC5oOgorICAgICAg
ICAoV2ViS2l0OjpXZWJXaWRnZXQ6OnNjaGVkdWxlQ29tcG9zaXRlKToKKyAgICAgICAgKiBzcmMv
V2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6YW5pbWF0ZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpkb0FuaW1hdGUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3SW1wbDo6cGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
YW5pbWF0ZUFuZExheW91dCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjb21wb3Np
dGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2NoZWR1bGVDb21wb3NpdGUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0FjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpkb0NvbXBvc2l0ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNE
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnJlYWxsb2NhdGVSZW5kZXJlcik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp1cGRhdGVMYXllclJlbmRlcmVyU2V0dGluZ3Mp
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6dXBkYXRlTGF5ZXJSZW5kZXJlclZpZXdw
b3J0KToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKyAgICAgICAgKiB0ZXN0cy9DQ0xh
eWVyVHJlZUhvc3RUZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9z
dFRlc3Q6OkNDTGF5ZXJUcmVlSG9zdFRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhv
c3RUZXN0OjphbmltYXRlQW5kTGF5b3V0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0
VGVzdDo6YmVnaW5Db21taXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVI
b3N0VGVzdDo6YmVnaW5Db21taXRPbk1haW5UaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ0xheWVy
VHJlZUhvc3RUZXN0Ojpjb21taXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRy
ZWVIb3N0VGVzdDo6Y29tbWl0Q29tcGxldGVPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NM
YXllclRyZWVIb3N0VGVzdDo6Y29tbWl0Q29tcGxldGVPbk1haW5UaHJlYWQpOgorICAgICAgICAo
V1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0OjpkcmF3TGF5ZXJzQW5kUHJlc2VudE9uQ0NUaHJlYWQp
OgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0Ojp1cGRhdGVMYXllcnMpOgorICAg
ICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0OjpvbkJlZ2luVGVzdCk6CisgICAgICAgIChX
VEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3Q6OmRvRW5kVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5
ZXJUcmVlSG9zdFRlc3Q6Om9uRW5kVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9z
dFRlc3Q6OnJ1blRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0Ojp0ZXN0
VGltZW91dCk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0Q2xpZW50OjpNb2NrTGF5
ZXJUcmVlSG9zdENsaWVudCk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0Q2xpZW50
OjpjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKToKKyAgICAgICAgKFdURjo6TW9ja0xheWVy
VHJlZUhvc3RDbGllbnQ6OmFuaW1hdGVBbmRMYXlvdXQpOgorICAgICAgICAoV1RGOjpNb2NrTGF5
ZXJUcmVlSG9zdENvbW1pdHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJl
ZUhvc3RDb21taXR0ZXI6OmNvbW1pdCk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0
Q29tbWl0dGVyOjpNb2NrTGF5ZXJUcmVlSG9zdENvbW1pdHRlcik6CisgICAgICAgIChXVEY6Ok1v
Y2tMYXllclRyZWVIb3N0SW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJl
ZUhvc3RJbXBsOjpiZWdpbkNvbW1pdCk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0
SW1wbDo6Y29tbWl0Q29tcGxldGUpOgorICAgICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdElt
cGw6OmRyYXdMYXllcnNBbmRQcmVzZW50KToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhv
c3RJbXBsOjpNb2NrTGF5ZXJUcmVlSG9zdEltcGwpOgorICAgICAgICAoV1RGOjpNb2NrTGF5ZXJU
cmVlSG9zdEltcGxQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhv
c3RJbXBsUHJveHk6OmNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAgKFdURjo6TW9j
a0xheWVyVHJlZUhvc3RJbXBsUHJveHk6Ok1vY2tMYXllclRyZWVIb3N0SW1wbFByb3h5KToKKyAg
ICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3Q6Ok1vY2tMYXllclRyZWVIb3N0KToKKyAgICAg
ICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3Q6OmNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsUHJveHkp
OgorICAgICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdDo6dXBkYXRlTGF5ZXJzKToKKyAgICAg
ICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3Q6OmJlZ2luQ29tbWl0KToKKyAgICAgICAgKFdURjo6
TW9ja0xheWVyVHJlZUhvc3Q6OmNvbW1pdENvbXBsZXRlKToKKyAgICAgICAgKFdURjo6Q0NMYXll
clRyZWVIb3N0VGVzdDo6ZG9CZWdpblRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhv
c3RUZXN0OjplbmRUZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNob3J0
bGl2ZWQxOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDEpOgorICAgICAgICAoV1RGOjpD
Q0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDE6OmJlZ2luVGVzdCk6CisgICAgICAgIChXVEY6
OkNDTGF5ZXJUcmVlSG9zdFRlc3RTaG9ydGxpdmVkMTo6YWZ0ZXJUZXN0KToKKyAgICAgICAgKFdU
Rjo6VEVTVF9GKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQy
OjpDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDIpOgorICAgICAgICAoV1RGOjpDQ0xheWVy
VHJlZUhvc3RUZXN0U2hvcnRsaXZlZDI6OmJlZ2luVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5
ZXJUcmVlSG9zdFRlc3RTaG9ydGxpdmVkMjo6YWZ0ZXJUZXN0KToKKyAgICAgICAgKFdURjo6Q0NM
YXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQzOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZl
ZDMpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDM6OmJlZ2lu
VGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTaG9ydGxpdmVkMzo6YWZ0
ZXJUZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdENvbW1pdGluZ1dpdGhD
b250aW51b3VzUmVkcmF3OjpDQ0xheWVyVHJlZUhvc3RUZXN0Q29tbWl0aW5nV2l0aENvbnRpbnVv
dXNSZWRyYXcpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0Q29tbWl0aW5nV2l0
aENvbnRpbnVvdXNSZWRyYXc6OmJlZ2luVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVl
SG9zdFRlc3RDb21taXRpbmdXaXRoQ29udGludW91c1JlZHJhdzo6Y29tbWl0Q29tcGxldGVPbkND
VGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdENvbW1pdGluZ1dpdGhD
b250aW51b3VzUmVkcmF3OjpkcmF3TGF5ZXJzQW5kUHJlc2VudE9uQ0NUaHJlYWQpOgorICAgICAg
ICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0Q29tbWl0aW5nV2l0aENvbnRpbnVvdXNSZWRyYXc6
OmFmdGVyVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc0Nv
bW1pdDE6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc0NvbW1pdDEpOgorICAgICAgICAoV1RG
OjpDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQxOjpiZWdpblRlc3QpOgorICAgICAg
ICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQxOjpkcmF3TGF5ZXJzQW5k
UHJlc2VudE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2V0
TmVlZHNDb21taXQxOjpjb21taXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRy
ZWVIb3N0VGVzdFNldE5lZWRzQ29tbWl0MTo6YWZ0ZXJUZXN0KToKKyAgICAgICAgKFdURjo6Q0NM
YXllclRyZWVIb3N0VGVzdFNldE5lZWRzQ29tbWl0Mjo6Q0NMYXllclRyZWVIb3N0VGVzdFNldE5l
ZWRzQ29tbWl0Mik6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc0Nv
bW1pdDI6OmJlZ2luVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTZXRO
ZWVkc0NvbW1pdDI6OmRyYXdMYXllcnNBbmRQcmVzZW50T25DQ1RocmVhZCk6CisgICAgICAgIChX
VEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc0NvbW1pdDI6OmNvbW1pdE9uQ0NUaHJlYWQp
OgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQyOjphZnRl
clRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNSZWRyYXc6
OkNDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc1JlZHJhdyk6CisgICAgICAgIChXVEY6OkNDTGF5
ZXJUcmVlSG9zdFRlc3RTZXROZWVkc1JlZHJhdzo6YmVnaW5UZXN0KToKKyAgICAgICAgKFdURjo6
Q0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzUmVkcmF3OjpkcmF3TGF5ZXJzQW5kUHJlc2VudE9u
Q0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNSZWRy
YXc6OmNvbW1pdE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0
U2V0TmVlZHNSZWRyYXc6OmFmdGVyVGVzdCk6CisgICAgICAgICogdGVzdHMvQ0NUaHJlYWRUZXN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorCiAyMDExLTA0LTE0ICBBZHJpZW5uZSBX
YWxrZXIgIDxlbm5lQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmFtZXMgUm9i
aW5zb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCBjMjNjOWVkY2I0NjgyY2Iw
NDBlYzM2N2YzN2I1ZWE4OWY3MTliNzFkLi40ZTJhMzVlMWQzODdhNGI2NmM4Yjk1YmUyMTZkZTg2
NjgzNzQxZGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBp
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTUzLDYgKzUzLDcg
QEAKICAgICAgICAgXSwKICAgICAgICAgJ3dlYmtpdF91bml0dGVzdF9maWxlcyc6IFsKICAgICAg
ICAgICAgICd0ZXN0cy9BcmVuYVRlc3RIZWxwZXJzLmgnLAorICAgICAgICAgICAgJ3Rlc3RzL0ND
TGF5ZXJUcmVlSG9zdFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1RocmVhZFRhc2tU
ZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NUaHJlYWRUZXN0LmNwcCcsCiAgICAgICAg
ICAgICAndGVzdHMvRHJhZ0ltYWdlVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJXaWRnZXQuaAppbmRleCAxMjkwYWQ4MTYyYjY2MjNiYzM1OWEwZmNmYzU2MzE0NGY2
ZmNmNzRiLi5jYTdjMjhkYWUyZjE4OWQ2NDI3NzExOTllZTAzM2E0ZWI1ZTA3M2VhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaApAQCAtODEsNiArODEsMTEgQEAg
cHVibGljOgogICAgIC8vIHRoZSBwYWludCBtZXRob2QgYWJvdmUuCiAgICAgdmlydHVhbCB2b2lk
IGNvbXBvc2l0ZShib29sIGZpbmlzaCkgPSAwOwogCisgICAgLy8gSW4gdGhyZWFkZWQgY29tcG9z
aXRpbmcgbW9kZSwgaW5kaWNhdGVzIHRoYXQgdGhlIHdpZGdldCBzaG91bGQgcmVkcmF3CisgICAg
Ly8gaXRzZWxmLCBmb3IgZXhhbXBsZSBkdWUgdG8gd2luZG93IGRhbWFnZS4gVGhlIHJlZHJhdyB3
aWxsIGJlZ2luCisgICAgLy8gYXN5bmNocm9ub3VzbHkuCisgICAgdmlydHVhbCB2b2lkIHNjaGVk
dWxlQ29tcG9zaXRlKCkgIHsgfQorCiAgICAgLy8gQ2FsbGVkIHRvIGluZm9ybSB0aGUgV2ViV2lk
Z2V0IG9mIGEgY2hhbmdlIGluIHRoZW1lLgogICAgIC8vIEltcGxlbWVudG9ycyB0aGF0IGNhY2hl
IHJlbmRlcmVkIGNvcGllcyBvZiB3aWRnZXRzIG5lZWQgdG8gcmUtcmVuZGVyCiAgICAgLy8gb24g
cmVjZWl2aW5nIHRoaXMgbWVzc2FnZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViVmlld0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmll
d0ltcGwuY3BwCmluZGV4IGU4OWQxMDQ1OTFlMmI4MDEyNmIyNDUxNGJiMzZiYzc0Y2RlMmZjMzIu
LjU2ODQ0MGJmNTllNGQ0ZDUzNmU1NGVlYjdhZmNkZmQzM2JjYjY2ZWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTk5MywxMiArOTkzLDE3IEBAIHZv
aWQgV2ViVmlld0ltcGw6OnJlc2l6ZShjb25zdCBXZWJTaXplJiBuZXdTaXplKQogCiB2b2lkIFdl
YlZpZXdJbXBsOjphbmltYXRlKCkKIHsKKyAgICBkb0FuaW1hdGUoY3VycmVudFRpbWUoKSk7Cit9
CisKK3ZvaWQgV2ViVmlld0ltcGw6OmRvQW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWUpCit7
CiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQogICAgIFdlYkZyYW1lSW1wbCog
d2ViZnJhbWUgPSBtYWluRnJhbWVJbXBsKCk7CiAgICAgaWYgKHdlYmZyYW1lKSB7CiAgICAgICAg
IEZyYW1lVmlldyogdmlldyA9IHdlYmZyYW1lLT5mcmFtZVZpZXcoKTsKICAgICAgICAgaWYgKHZp
ZXcpCi0gICAgICAgICAgICB2aWV3LT5zZXJ2aWNlU2NyaXB0ZWRBbmltYXRpb25zKGNvbnZlcnRT
ZWNvbmRzVG9ET01UaW1lU3RhbXAoY3VycmVudFRpbWUoKSkpOworICAgICAgICAgICAgdmlldy0+
c2VydmljZVNjcmlwdGVkQW5pbWF0aW9ucyhjb252ZXJ0U2Vjb25kc1RvRE9NVGltZVN0YW1wKGZy
YW1lQmVnaW5UaW1lKSk7CiAgICAgfQogI2VuZGlmCiB9CkBAIC0xMDY4LDYgKzEwNzMsMTEgQEAg
dm9pZCBXZWJWaWV3SW1wbDo6cGFpbnQoV2ViQ2FudmFzKiBjYW52YXMsIGNvbnN0IFdlYlJlY3Qm
IHJlY3QpCiB7CiAgICAgaWYgKGlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKSB7CiAj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2lmIFVTRShUSFJFQURFRF9DT01QT1NJ
VElORykKKyAgICAgICAgLy8gRklYTUU6IGZpeCByZWFkYmFjayBpbiB0aHJlYWRlZCBjb21wb3Np
dGluZyBtb2RlCisgICAgICAgIEFTU0VSVCgwKTsKKyAgICAgICAgcmV0dXJuOworI2VuZGlmCiAg
ICAgICAgIGRvQ29tcG9zaXRlKCk7CiAKICAgICAgICAgLy8gSWYgYSBjYW52YXMgd2FzIHBhc3Nl
ZCBpbiwgd2UgdXNlIGl0IHRvIGdyYWIgYSBjb3B5IG9mIHRoZQpAQCAtMTA5Niw5ICsxMTA2LDE5
IEBAIHZvaWQgV2ViVmlld0ltcGw6OnRoZW1lQ2hhbmdlZCgpCiAgICAgdmlldy0+aW52YWxpZGF0
ZVJlY3QoZGFtYWdlZFJlY3QpOwogfQogCisKK3ZvaWQgV2ViVmlld0ltcGw6OmFuaW1hdGVBbmRM
YXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQoreworICAgIGRvQW5pbWF0ZShmcmFtZUJlZ2lu
VGltZSk7CisgICAgbGF5b3V0KCk7Cit9CisKIHZvaWQgV2ViVmlld0ltcGw6OmNvbXBvc2l0ZShi
b29sIGZpbmlzaCkKIHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisjaWYgVVNF
KFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgIHJldHVybjsgLy8gRklYTUU6IHdoZW4gdGhlIFJl
bmRlcldpZGdldCBpcyB1cGRhdGVkLCBzd2l0Y2ggdG8gQVNTRVJUX05PVF9SRUFDSEVELgorI2Vs
c2UKICAgICBUUkFDRV9FVkVOVCgiV2ViVmlld0ltcGw6OmNvbXBvc2l0ZSIsIHRoaXMsIDApOwog
ICAgIGlmIChtX3JlY3JlYXRpbmdHcmFwaGljc0NvbnRleHQpIHsKICAgICAgICAgLy8gcmVhbGxv
Y2F0ZVJlbmRlcmVyIHdpbGwgcmVxdWVzdCBhIHJlcGFpbnQgd2hldGhlciBvciBub3QgaXQgc3Vj
Y2VlZGVkCkBAIC0xMTI4LDYgKzExNDgsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpjb21wb3NpdGUo
Ym9vbCBmaW5pc2gpCiAgICAgICAgIHNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpOwogICAgIH0K
ICNlbmRpZgorI2VuZGlmCiB9CiAKIGNvbnN0IFdlYklucHV0RXZlbnQqIFdlYlZpZXdJbXBsOjpt
X2N1cnJlbnRJbnB1dEV2ZW50ID0gMDsKQEAgLTIzMjcsOSArMjM0OCwyNCBAQCB2b2lkIFdlYlZp
ZXdJbXBsOjpzZXRSb290R3JhcGhpY3NMYXllcihXZWJDb3JlOjpQbGF0Zm9ybUxheWVyKiBsYXll
cikKICAgICAgICAgbV9jbGllbnQtPmRpZEludmFsaWRhdGVSZWN0KGRhbWFnZWRSZWN0KTsKIH0K
IAordm9pZCBXZWJWaWV3SW1wbDo6c2NoZWR1bGVDb21wb3NpdGUoKQoreworI2lmIFVTRShUSFJF
QURFRF9DT01QT1NJVElORykKKyAgICBpZiAobV9sYXllclJlbmRlcmVyKQorICAgICAgICBtX2xh
eWVyUmVuZGVyZXItPnNldE5lZWRzUmVkcmF3KCk7CisjZWxzZQorICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworI2VuZGlmCit9CisKIHZvaWQgV2ViVmlld0ltcGw6OnNldFJvb3RMYXllck5lZWRz
RGlzcGxheSgpCiB7CisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgIGlmIChtX2xh
eWVyUmVuZGVyZXIpCisgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+c2V0TmVlZHNDb21taXRBbmRS
ZWRyYXcoKTsKKyNlbHNlCiAgICAgbV9jbGllbnQtPnNjaGVkdWxlQ29tcG9zaXRlKCk7CisjZW5k
aWYKIH0KIAogCkBAIC0yNDAxLDE1ICsyNDM3LDEwIEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldElz
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZShib29sIGFjdGl2ZSkKIAogICAgICAgICBtX2Ns
aWVudC0+ZGlkQWN0aXZhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nKHRydWUpOwogICAgIH0gZWxz
ZSB7Ci0gICAgICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IG1fdGVtcG9y
YXJ5T25zY3JlZW5HcmFwaGljc0NvbnRleHQzRC5yZWxlYXNlKCk7Ci0gICAgICAgIGlmICghY29u
dGV4dCkgewotICAgICAgICAgICAgY29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUo
Z2V0Q29tcG9zaXRvckNvbnRleHRBdHRyaWJ1dGVzKCksIG1fcGFnZS0+Y2hyb21lKCksIEdyYXBo
aWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7Ci0gICAgICAgICAgICBp
ZiAoY29udGV4dCkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZXNoYXBlKHN0ZDo6bWF4KDEs
IG1fc2l6ZS53aWR0aCksIHN0ZDo6bWF4KDEsIG1fc2l6ZS5oZWlnaHQpKTsKLSAgICAgICAgfQot
Ci0KLSAgICAgICAgbV9sYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVh
dGUoY29udGV4dC5yZWxlYXNlKCksIFdlYlZpZXdJbXBsQ29udGVudFBhaW50ZXI6OmNyZWF0ZSh0
aGlzKSk7CisgICAgICAgIG1fbGF5ZXJSZW5kZXJlciA9IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
Y3JlYXRlKHRoaXMsIFdlYlZpZXdJbXBsQ29udGVudFBhaW50ZXI6OmNyZWF0ZSh0aGlzKSk7Cisj
aWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgICAgICB1cGRhdGVMYXllclJlbmRlcmVy
U2V0dGluZ3MoKTsKKyNlbmRpZgogICAgICAgICBpZiAobV9sYXllclJlbmRlcmVyKSB7CiAgICAg
ICAgICAgICBtX2NsaWVudC0+ZGlkQWN0aXZhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nKHRydWUp
OwogICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUgPSB0cnVlOwpA
QCAtMjQzNiwyNCArMjQ2NywyOSBAQCB2b2lkIFdlYlZpZXdJbXBsOjpkb0NvbXBvc2l0ZSgpCiAg
ICAgaWYgKCFwYWdlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fbGF5ZXJSZW5kZXJlci0+
c2V0Q29tcG9zaXRlT2Zmc2NyZWVuKHNldHRpbmdzKCktPmNvbXBvc2l0ZVRvVGV4dHVyZUVuYWJs
ZWQoKSk7Ci0KLSAgICBDQ0hlYWRzVXBEaXNwbGF5KiBodWQgPSBtX2xheWVyUmVuZGVyZXItPmhl
YWRzVXBEaXNwbGF5KCk7Ci0gICAgaHVkLT5zZXRTaG93RlBTQ291bnRlcihzZXR0aW5ncygpLT5z
aG93RlBTQ291bnRlcigpKTsKLSAgICBodWQtPnNldFNob3dQbGF0Zm9ybUxheWVyVHJlZShzZXR0
aW5ncygpLT5zaG93UGxhdGZvcm1MYXllclRyZWUoKSk7CisgICAgdXBkYXRlTGF5ZXJSZW5kZXJl
clNldHRpbmdzKCk7CisgICAgbV9sYXllclJlbmRlcmVyLT51cGRhdGVMYXllcnMoKTsKKyAgICBt
X2xheWVyUmVuZGVyZXItPmRyYXdMYXllcnMoKTsKK30KIAotICAgIG1fbGF5ZXJSZW5kZXJlci0+
dXBkYXRlQW5kRHJhd0xheWVycygpOworUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gV2Vi
Vmlld0ltcGw6OmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKQoreworICAgIFJlZlB0cjxH
cmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IG1fdGVtcG9yYXJ5T25zY3JlZW5HcmFwaGljc0Nv
bnRleHQzRC5yZWxlYXNlKCk7CisgICAgaWYgKCFjb250ZXh0KSB7CisgICAgICAgIGNvbnRleHQg
PSBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKGdldENvbXBvc2l0b3JDb250ZXh0QXR0cmlidXRl
cygpLCBtX3BhZ2UtPmNocm9tZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlU
b0hvc3RXaW5kb3cpOworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgICAgIGNvbnRleHQt
PnJlc2hhcGUoc3RkOjptYXgoMSwgbV9zaXplLndpZHRoKSwgc3RkOjptYXgoMSwgbV9zaXplLmhl
aWdodCkpOworICAgIH0KKyAgICByZXR1cm4gY29udGV4dDsKIH0KIAogdm9pZCBXZWJWaWV3SW1w
bDo6cmVhbGxvY2F0ZVJlbmRlcmVyKCkKIHsKLSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+
IG5ld0NvbnRleHQgPSBtX3RlbXBvcmFyeU9uc2NyZWVuR3JhcGhpY3NDb250ZXh0M0QuZ2V0KCk7
Ci0gICAgV2ViR3JhcGhpY3NDb250ZXh0M0QqIHdlYkNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQz
REludGVybmFsOjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0QobmV3Q29udGV4dC5nZXQoKSk7
Ci0gICAgaWYgKCFuZXdDb250ZXh0IHx8ICF3ZWJDb250ZXh0IHx8IHdlYkNvbnRleHQtPmlzQ29u
dGV4dExvc3QoKSkKLSAgICAgICAgbmV3Q29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVh
dGUoCi0gICAgICAgICAgICBnZXRDb21wb3NpdG9yQ29udGV4dEF0dHJpYnV0ZXMoKSwgbV9wYWdl
LT5jaHJvbWUoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93
KTsKICAgICAvLyBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlIG1pZ2h0IGZhaWwgYW5kIHJldHVy
biAwLCBpbiB0aGF0IGNhc2UgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUgd2lsbCBhbHNv
IHJldHVybiAwLgotICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVyUmVuZGVy
ZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShuZXdDb250ZXh0LCBXZWJWaWV3SW1w
bENvbnRlbnRQYWludGVyOjpjcmVhdGUodGhpcykpOworICAgIFJlZlB0cjxMYXllclJlbmRlcmVy
Q2hyb21pdW0+IGxheWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSh0
aGlzLCBXZWJWaWV3SW1wbENvbnRlbnRQYWludGVyOjpjcmVhdGUodGhpcykpOworI2lmIFVTRShU
SFJFQURFRF9DT01QT1NJVElORykKKyAgICB1cGRhdGVMYXllclJlbmRlcmVyU2V0dGluZ3MoKTsK
KyNlbmRpZgogCiAgICAgLy8gUmVhdHRhY2ggdGhlIHJvb3QgbGF5ZXIuICBDaGlsZCBsYXllcnMg
d2lsbCBnZXQgcmVhdHRhY2hlZCBhcyBhIHNpZGUgZWZmZWN0IG9mIHVwZGF0ZUxheWVyc1JlY3Vy
c2l2ZS4KICAgICBpZiAobGF5ZXJSZW5kZXJlcikgewpAQCAtMjQ2NCw3ICsyNTAwLDEwIEBAIHZv
aWQgV2ViVmlld0ltcGw6OnJlYWxsb2NhdGVSZW5kZXJlcigpCiAgICAgICAgIC8vIHJlc2hhcGUg
c2hvdWxkIHJlYWxseSBiZSBleHRyYWN0ZWQgaW50byBvbmUgZnVuY3Rpb247IGl0IGlzIG5vdAog
ICAgICAgICAvLyBpbW1lZGlhdGVseSBvYnZpb3VzIHRoYXQgR3JhcGhpY3NDb250ZXh0M0Qgb2Jq
ZWN0IHdpbGwgbm90CiAgICAgICAgIC8vIGZ1bmN0aW9uIHByb3Blcmx5IHVudGlsIGl0cyByZXNo
YXBlIG1ldGhvZCBpcyBjYWxsZWQuCi0gICAgICAgIG5ld0NvbnRleHQtPnJlc2hhcGUoc3RkOjpt
YXgoMSwgbV9zaXplLndpZHRoKSwgc3RkOjptYXgoMSwgbV9zaXplLmhlaWdodCkpOworICAgICAg
ICBsYXllclJlbmRlcmVyLT5jb250ZXh0KCktPnJlc2hhcGUoc3RkOjptYXgoMSwgbV9zaXplLndp
ZHRoKSwgc3RkOjptYXgoMSwgbV9zaXplLmhlaWdodCkpOworI2lmIFVTRShUSFJFQURFRF9DT01Q
T1NJVElORykKKyAgICAgICAgdXBkYXRlTGF5ZXJSZW5kZXJlclNldHRpbmdzKCk7CisjZW5kaWYK
ICAgICAgICAgc2V0Um9vdEdyYXBoaWNzTGF5ZXIobV9sYXllclJlbmRlcmVyLT5yb290TGF5ZXIo
KSk7CiAgICAgICAgIC8vIEZvcmNlcyBWaWV3SG9zdE1zZ19EaWRBY3RpdmF0ZUFjY2VsZXJhdGVk
Q29tcG9zaXRpbmcgdG8gYmUgc2VudCBzbwogICAgICAgICAvLyB0aGF0IHRoZSBicm93c2VyIHBy
b2Nlc3MgY2FuIHJlYWNxdWlyZSBzdXJmYWNlcy4KQEAgLTI0NzQsOSArMjUxMywyMiBAQCB2b2lk
IFdlYlZpZXdJbXBsOjpyZWFsbG9jYXRlUmVuZGVyZXIoKQogfQogI2VuZGlmCiAKK3ZvaWQgV2Vi
Vmlld0ltcGw6OnVwZGF0ZUxheWVyUmVuZGVyZXJTZXR0aW5ncygpCit7CisgICAgaWYgKCFtX2xh
eWVyUmVuZGVyZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbGF5ZXJSZW5kZXJlci0+c2V0
Q29tcG9zaXRlT2Zmc2NyZWVuKHNldHRpbmdzKCktPmNvbXBvc2l0ZVRvVGV4dHVyZUVuYWJsZWQo
KSk7CisKKyAgICBDQ0hlYWRzVXBEaXNwbGF5KiBodWQgPSBtX2xheWVyUmVuZGVyZXItPmhlYWRz
VXBEaXNwbGF5KCk7CisgICAgaHVkLT5zZXRTaG93RlBTQ291bnRlcihzZXR0aW5ncygpLT5zaG93
RlBTQ291bnRlcigpKTsKKyAgICBodWQtPnNldFNob3dQbGF0Zm9ybUxheWVyVHJlZShzZXR0aW5n
cygpLT5zaG93UGxhdGZvcm1MYXllclRyZWUoKSk7Cit9CisKIHZvaWQgV2ViVmlld0ltcGw6OnVw
ZGF0ZUxheWVyUmVuZGVyZXJWaWV3cG9ydCgpCiB7Ci0gICAgQVNTRVJUKG1fbGF5ZXJSZW5kZXJl
cik7CisgICAgaWYgKCFtX2xheWVyUmVuZGVyZXIpCisgICAgICAgIHJldHVybjsKIAogICAgIGlm
ICghcGFnZSgpKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Vmlld0ltcGwuaAppbmRleCBmMTAyMDJmNzZkYTZjZGUzMjY1OTA5YjRmZTY1ZjcwYWFkYjhiZjkz
Li45N2ExZDA4YmM0ZDA5ZjBmMjQ1YTA5YzE3NmY5NTA0ZjBiYzc3ZDBjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKQEAgLTU1LDYgKzU1LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogY2xhc3MgQ2hyb21pdW1EYXRhT2JqZWN0OwogY2xhc3MgRG9jdW1lbnRMb2Fk
ZXI7CiBjbGFzcyBGcmFtZTsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogY2xhc3MgSGlzdG9y
eUl0ZW07CiBjbGFzcyBIaXRUZXN0UmVzdWx0OwogY2xhc3MgS2V5Ym9hcmRFdmVudDsKQEAgLTg2
LDcgKzg3LDcgQEAgY2xhc3MgV2ViTW91c2VXaGVlbEV2ZW50OwogY2xhc3MgV2ViU2V0dGluZ3NJ
bXBsOwogY2xhc3MgV2ViVG91Y2hFdmVudDsKIAotY2xhc3MgV2ViVmlld0ltcGwgOiBwdWJsaWMg
V2ViVmlldywgcHVibGljIFJlZkNvdW50ZWQ8V2ViVmlld0ltcGw+IHsKK2NsYXNzIFdlYlZpZXdJ
bXBsIDogcHVibGljIFdlYlZpZXcsIHB1YmxpYyBXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RDbGll
bnQsIHB1YmxpYyBSZWZDb3VudGVkPFdlYlZpZXdJbXBsPiB7CiBwdWJsaWM6CiAgICAgLy8gV2Vi
V2lkZ2V0IG1ldGhvZHM6CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCk7CkBAIC05Nyw2ICs5OCw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoV2ViQ2FudmFzKiwgY29uc3QgV2Vi
UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCB0aGVtZUNoYW5nZWQoKTsKICAgICB2aXJ0dWFsIHZv
aWQgY29tcG9zaXRlKGJvb2wgZmluaXNoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21w
b3NpdGUoKTsKICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1
dEV2ZW50Jik7CiAgICAgdmlydHVhbCB2b2lkIG1vdXNlQ2FwdHVyZUxvc3QoKTsKICAgICB2aXJ0
dWFsIHZvaWQgc2V0Rm9jdXMoYm9vbCBlbmFibGUpOwpAQCAtMTk2LDYgKzE5OCwxMSBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmFjdGl2
ZUZvcmVncm91bmRDb2xvcik7CiAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1DdXN0b21Db250ZXh0
TWVudUFjdGlvbih1bnNpZ25lZCBhY3Rpb24pOwogCisgICAgLy8gQ0NMYXllclRyZWVIb3N0Q2xp
ZW50CisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5U
aW1lKTsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGVM
YXllclRyZWVIb3N0Q29udGV4dDNEKCk7CisKKwogICAgIC8vIFdlYlZpZXdJbXBsCiAKICAgICB2
b2lkIHNldElnbm9yZUlucHV0RXZlbnRzKGJvb2wgbmV3VmFsdWUpOwpAQCAtMzM5LDYgKzM0Niw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpOwogICAgIHZv
aWQgc2Nyb2xsUm9vdExheWVyUmVjdChjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxEZWx0
YSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpOwogICAgIHZvaWQgaW52YWxpZGF0
ZVJvb3RMYXllclJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQgZG9VcGRh
dGVBbmRDb21wb3NpdGUoKTsKICNlbmRpZgogCiAgICAgLy8gUmV0dXJucyB0aGUgb25zY3JlZW4g
M0QgY29udGV4dCB1c2VkIGJ5IHRoZSBjb21wb3NpdG9yLiBUaGlzIGlzCkBAIC00MDIsMTEgKzQx
MCwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBXZWJQb2ludCYgc2NyZWVuUG9pbnQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERyYWdBY3Rpb24pOwogCisgICAgdm9pZCBkb0Fu
aW1hdGUoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKKwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKICAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZShib29s
KTsKICAgICB2b2lkIGRvQ29tcG9zaXRlKCk7CiAgICAgdm9pZCBkb1BpeGVsUmVhZGJhY2tUb0Nh
bnZhcyhXZWJDYW52YXMqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CiAgICAgdm9pZCByZWFs
bG9jYXRlUmVuZGVyZXIoKTsKKyAgICB2b2lkIHVwZGF0ZUxheWVyUmVuZGVyZXJTZXR0aW5ncygp
OwogICAgIHZvaWQgdXBkYXRlTGF5ZXJSZW5kZXJlclZpZXdwb3J0KCk7CiAjZW5kaWYKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNDQ3YmI3ZGI0ZWY2ODcxZDY5MGM4MTJkNDU2MTU3NWMwN2NmNjgyMwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRy
ZWVIb3N0VGVzdC5jcHAKQEAgLTAsMCArMSw1MDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUg
ImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIK
KyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NNYWlu
VGhyZWFkVGFzay5oIgorI2luY2x1ZGUgImNjL0NDVGhyZWFkVGFzay5oIgorI2luY2x1ZGUgPGd0
ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8d2Via2l0L3N1cHBvcnQvd2Via2l0X3N1cHBvcnQuaD4K
KyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
dXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgTW9ja0xheWVyVHJl
ZUhvc3RDbGllbnQ7CitjbGFzcyBNb2NrTGF5ZXJUcmVlSG9zdDsKK2NsYXNzIE1vY2tMYXllclRy
ZWVIb3N0SW1wbDsKKworLy8gVGhlIENDTGF5ZXJUcmVlSG9zdFRlc3QgcnVucyB3aXRoIHRoZSBt
YWluIGxvb3AgcnVubmluZy4gSXQgaW5zdGFudGlhdGVzIGEgc2luZ2xlIE1vY2tMYXllclRyZWVI
b3N0IGFuZCBhc3NvY2lhdGVkCisvLyBNb2NrTGF5ZXJUcmVlSG9zdEltcGwvTW9ja0xheWVyVHJl
ZUhvc3RDbGllbnQuCisvLworLy8gYmVnaW5UZXN0KCkgaXMgY2FsbGVkIG9uY2UgdGhlIG1haW4g
bWVzc2FnZSBsb29wIGlzIHJ1bm5pbmcgYW5kIHRoZSBsYXllciB0cmVlIGhvc3QgaXMgaW5pdGlh
bGl6ZWQuCisvLworLy8gS2V5IHN0YWdlcyBvZiB0aGUgZHJhd2luZyBsb29wLCBlLmcuIGRyYXdp
bmcgb3IgY29tbWl0aW5nLCByZWRpcmVjdCB0byBDQ0xheWVyVHJlZUhvc3RUZXN0IG1ldGhvZHMg
b2Ygc2ltaWxhciBuYW1lcy4KKy8vIFRvIHRyYWNrIHRoZSBjb21taXQgcHJvY2Vzcywgb3ZlcnJp
ZGUgdGhlc2UgZnVuY3Rpb25zLgorLy8KKy8vIFRoZSB0ZXN0IGNvbnRpbnVlcyB1bnRpbCBzb21l
b25lIGNhbGxzIGVuZFRlc3QuIGVuZFRlc3QgY2FuIGJlIGNhbGxlZCBvbiBhbnkgdGhyZWFkLCBi
dXQgYmUgYXdhcmUgdGhhdAorLy8gZW5kaW5nIHRoZSB0ZXN0IGlzIGFuIGFzeW5jaHJvbm91cyBw
cm9jZXNzLgorY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0
IHsKK3B1YmxpYzoKKyAgICBDQ0xheWVyVHJlZUhvc3RUZXN0KCkKKyAgICAgICAgOiBtX2JlZ2lu
bmluZyhmYWxzZSkKKyAgICAgICAgLCBtX2VuZFdoZW5CZWdpblJldHVybnMoZmFsc2UpCisgICAg
ICAgICwgbV9ydW5uaW5nKGZhbHNlKQorICAgICAgICAsIG1fdGltZWRPdXQoZmFsc2UpIHsgfQor
CisgICAgdmlydHVhbCB2b2lkIGFmdGVyVGVzdCgpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBi
ZWdpblRlc3QoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVBbmRMYXlvdXQoTW9ja0xh
eWVyVHJlZUhvc3RDbGllbnQqIGxheWVyVHJlZUhvc3QsIGRvdWJsZSBmcmFtZUJlZ2luVGltZSkg
eyB9CisgICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0T25DQ1RocmVhZChNb2NrTGF5ZXJUcmVl
SG9zdEltcGwqIGxheWVyVHJlZUhvc3RJbXBsKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5D
b21taXRPbk1haW5UaHJlYWQoTW9ja0xheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QpIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBjb21taXRPbkNDVGhyZWFkKE1vY2tMYXllclRyZWVIb3N0KiBsYXll
clRyZWVIb3N0LCBNb2NrTGF5ZXJUcmVlSG9zdEltcGwqIGxheWVyVHJlZUhvc3RJbXBsKSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q29tcGxldGVPbkNDVGhyZWFkKE1vY2tMYXllclRyZWVI
b3N0SW1wbCogbGF5ZXJUcmVlSG9zdEltcGwpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjb21taXRD
b21wbGV0ZU9uTWFpblRocmVhZChNb2NrTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCkgeyB9
CisgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNBbmRQcmVzZW50T25DQ1RocmVhZChNb2NrTGF5
ZXJUcmVlSG9zdEltcGwqIGxheWVyVHJlZUhvc3RJbXBsKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlTGF5ZXJzKE1vY2tMYXllclRyZWVIb3N0KiBsYXllclRyZWVIb3N0KSB7IH0KKworICAg
IHZvaWQgZW5kVGVzdCgpOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkb0JlZ2luVGVzdCgpOwor
CisgICAgc3RhdGljIHZvaWQgb25CZWdpblRlc3Qodm9pZCogc2VsZikKKyAgICB7CisgICAgICAg
IHN0YXRpY19jYXN0PENDTGF5ZXJUcmVlSG9zdFRlc3QqPihzZWxmKS0+ZG9CZWdpblRlc3QoKTsK
KyAgICB9CisKKyAgICB2b2lkIGRvRW5kVGVzdCgpCisgICAgeworICAgIH0KKworICAgIHN0YXRp
YyB2b2lkIG9uRW5kVGVzdCh2b2lkKiBzZWxmKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0VGVzdCogdGVzdCA9IHN0YXRpY19j
YXN0PENDTGF5ZXJUcmVlSG9zdFRlc3QqPihzZWxmKTsKKyAgICAgICAgdGVzdC0+bV9sYXllclRy
ZWVIb3N0LmNsZWFyKCk7CisgICAgICAgIHRlc3QtPm1fY2xpZW50LmNsZWFyKCk7CisgICAgICAg
IHdlYmtpdF9zdXBwb3J0OjpRdWl0TWVzc2FnZUxvb3AoKTsKKyAgICB9CisKKyAgICB2b2lkIHJ1
blRlc3QoKQorICAgIHsKKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlBvc3REZWxheWVkVGFzayhD
Q0xheWVyVHJlZUhvc3RUZXN0OjpvbkJlZ2luVGVzdCwgc3RhdGljX2Nhc3Q8dm9pZCo+KHRoaXMp
LCAwKTsKKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlBvc3REZWxheWVkVGFzayhDQ0xheWVyVHJl
ZUhvc3RUZXN0Ojp0ZXN0VGltZW91dCwgc3RhdGljX2Nhc3Q8dm9pZCo+KHRoaXMpLCA1MDAwKTsK
KyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlJ1bk1lc3NhZ2VMb29wKCk7CisgICAgICAgIG1fcnVu
bmluZyA9IGZhbHNlOworICAgICAgICBib29sIHRpbWVkT3V0ID0gbV90aW1lZE91dDsgLy8gU2F2
ZSB3aGV0aGVyIHdlJ3JlIHRpbWVkIG91dCBpbiBjYXNlIFJ1bkFsbFBlbmRpbmdNZXNzYWdlcyBo
YXMgdGhlIHRpbWVvdXQuCisgICAgICAgIHdlYmtpdF9zdXBwb3J0OjpSdW5BbGxQZW5kaW5nTWVz
c2FnZXMoKTsKKyAgICAgICAgaWYgKHRpbWVkT3V0KSB7CisgICAgICAgICAgICBwcmludGYoIlRl
c3QgdGltZWQgb3V0Iik7CisgICAgICAgICAgICBGQUlMKCkgPDwgIlRlc3QgdGltZWQgb3V0IjsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBhZnRlclRlc3QoKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgdm9pZCB0ZXN0VGltZW91dCh2b2lkKiBzZWxmKQorICAgIHsKKyAg
ICAgICAgQ0NMYXllclRyZWVIb3N0VGVzdCogdGVzdCA9IHN0YXRpY19jYXN0PENDTGF5ZXJUcmVl
SG9zdFRlc3QqPihzZWxmKTsKKyAgICAgICAgaWYgKCF0ZXN0LT5tX3J1bm5pbmcpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIHRlc3QtPm1fdGltZWRPdXQgPSB0cnVlOworICAgICAgICB0
ZXN0LT5lbmRUZXN0KCk7CisgICAgfQorCisgICAgTXV0ZXggbV90cmFjZXNMb2NrOworICAgIFZl
Y3RvcjxzdGQ6OnN0cmluZz4gbV90cmFjZXM7CisKKyAgICBPd25QdHI8TW9ja0xheWVyVHJlZUhv
c3RDbGllbnQ+IG1fY2xpZW50OworICAgIFJlZlB0cjxNb2NrTGF5ZXJUcmVlSG9zdD4gbV9sYXll
clRyZWVIb3N0OworCitwcml2YXRlOgorICAgIGJvb2wgbV9iZWdpbm5pbmc7CisgICAgYm9vbCBt
X2VuZFdoZW5CZWdpblJldHVybnM7CisgICAgYm9vbCBtX3J1bm5pbmc7CisgICAgYm9vbCBtX3Rp
bWVkT3V0OworfTsKKworY2xhc3MgTW9ja0xheWVyVHJlZUhvc3RDbGllbnQgOiBwdWJsaWMgQ0NM
YXllclRyZWVIb3N0Q2xpZW50IHsKK3B1YmxpYzoKKyAgICBNb2NrTGF5ZXJUcmVlSG9zdENsaWVu
dChDQ0xheWVyVHJlZUhvc3RUZXN0KiB0ZXN0KSA6IG1fdGVzdCh0ZXN0KSB7IH0KKworICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlTGF5ZXJUcmVlSG9zdENv
bnRleHQzRCgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWY8R3JhcGhpY3NDb250ZXh0
M0Q+KDApOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJs
ZSBmcmFtZUJlZ2luVGltZSkKKyAgICB7CisgICAgICAgIG1fdGVzdC0+YW5pbWF0ZUFuZExheW91
dCh0aGlzLCBmcmFtZUJlZ2luVGltZSk7CisgICAgfQorCitwcml2YXRlOgorICAgIENDTGF5ZXJU
cmVlSG9zdFRlc3QqIG1fdGVzdDsKK307CisKK2NsYXNzIE1vY2tMYXllclRyZWVIb3N0Q29tbWl0
dGVyIDogcHVibGljIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlciB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NPd25QdHI8TW9ja0xheWVyVHJlZUhvc3RDb21taXR0ZXI+IGNyZWF0ZShDQ0xheWVy
VHJlZUhvc3RUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBN
b2NrTGF5ZXJUcmVlSG9zdENvbW1pdHRlcih0ZXN0KSk7CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIGNvbW1pdChDQ0xheWVyVHJlZUhvc3QqIGhvc3QsIENDTGF5ZXJUcmVlSG9zdEltcGwqIGhv
c3RJbXBsKQorICAgIHsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyOjpjb21taXQo
aG9zdCwgaG9zdEltcGwpOworICAgICAgICBtX3Rlc3QtPmNvbW1pdE9uQ0NUaHJlYWQocmVpbnRl
cnByZXRfY2FzdDxNb2NrTGF5ZXJUcmVlSG9zdCo+KGhvc3QpLCByZWludGVycHJldF9jYXN0PE1v
Y2tMYXllclRyZWVIb3N0SW1wbCo+KGhvc3RJbXBsKSk7CisgICAgfQorCitwcml2YXRlOgorICAg
IE1vY2tMYXllclRyZWVIb3N0Q29tbWl0dGVyKENDTGF5ZXJUcmVlSG9zdFRlc3QqIHRlc3QpIDog
bV90ZXN0KHRlc3QpIHsgfQorICAgIENDTGF5ZXJUcmVlSG9zdFRlc3QqIG1fdGVzdDsKK307CisK
K2NsYXNzIE1vY2tMYXllclRyZWVIb3N0SW1wbCA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RJbXBs
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxNb2NrTGF5ZXJUcmVlSG9zdEltcGw+
IGNyZWF0ZShDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQsIENDTGF5ZXJUcmVlSG9z
dFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE1vY2tMYXll
clRyZWVIb3N0SW1wbChjbGllbnQsIHRlc3QpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
YmVnaW5Db21taXQoKQorICAgIHsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0SW1wbDo6YmVnaW5D
b21taXQoKTsKKyAgICAgICAgbV90ZXN0LT5iZWdpbkNvbW1pdE9uQ0NUaHJlYWQodGhpcyk7Cisg
ICAgfQorCisgICAgdmlydHVhbCB2b2lkIGNvbW1pdENvbXBsZXRlKCkKKyAgICB7CisgICAgICAg
IENDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbW1pdENvbXBsZXRlKCk7CisgICAgICAgIG1fdGVzdC0+
Y29tbWl0Q29tcGxldGVPbkNDVGhyZWFkKHRoaXMpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9p
ZCBkcmF3TGF5ZXJzQW5kUHJlc2VudCgpCisgICAgeworICAgICAgICBtX3Rlc3QtPmRyYXdMYXll
cnNBbmRQcmVzZW50T25DQ1RocmVhZCh0aGlzKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTW9j
a0xheWVyVHJlZUhvc3RJbXBsKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqIGNsaWVudCwgQ0NM
YXllclRyZWVIb3N0VGVzdCogdGVzdCkKKyAgICAgICAgICAgIDogQ0NMYXllclRyZWVIb3N0SW1w
bChjbGllbnQpCisgICAgICAgICAgICAsIG1fdGVzdCh0ZXN0KQorICAgIHsKKyAgICB9CisKKyAg
ICBDQ0xheWVyVHJlZUhvc3RUZXN0KiBtX3Rlc3Q7Cit9OworCitjbGFzcyBNb2NrTGF5ZXJUcmVl
SG9zdEltcGxQcm94eSA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkgeworcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzT3duUHRyPE1vY2tMYXllclRyZWVIb3N0SW1wbFByb3h5PiBjcmVh
dGUoQ0NMYXllclRyZWVIb3N0KiBob3N0LCBDQ0xheWVyVHJlZUhvc3RUZXN0KiB0ZXN0KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBNb2NrTGF5ZXJUcmVlSG9zdEltcGxQcm94
eShob3N0LCB0ZXN0KSk7CisgICAgfQorCisgICAgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJ
bXBsPiBjcmVhdGVMYXllclRyZWVIb3N0SW1wbCgpCisgICAgeworICAgICAgICByZXR1cm4gTW9j
a0xheWVyVHJlZUhvc3RJbXBsOjpjcmVhdGUodGhpcywgbV90ZXN0KTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgTW9ja0xheWVyVHJlZUhvc3RJbXBsUHJveHkoQ0NMYXllclRyZWVIb3N0KiBob3N0
LCBDQ0xheWVyVHJlZUhvc3RUZXN0KiB0ZXN0KQorICAgICAgICA6IENDTGF5ZXJUcmVlSG9zdElt
cGxQcm94eShob3N0KQorICAgICAgICAsIG1fdGVzdCh0ZXN0KSB7IH0KKworICAgIENDTGF5ZXJU
cmVlSG9zdFRlc3QqIG1fdGVzdDsKK307CisKK2NsYXNzIE1vY2tMYXllclRyZWVIb3N0IDogcHVi
bGljIENDTGF5ZXJUcmVlSG9zdCB7CitwdWJsaWM6CisgICAgTW9ja0xheWVyVHJlZUhvc3QoQ0NM
YXllclRyZWVIb3N0Q2xpZW50KiBjbGllbnQsIENDTGF5ZXJUcmVlSG9zdFRlc3QqIHRlc3QpCisg
ICAgICAgIDogQ0NMYXllclRyZWVIb3N0KGNsaWVudCkKKyAgICAgICAgLCBtX3Rlc3QodGVzdCkg
eyB9CisKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5PiBj
cmVhdGVMYXllclRyZWVIb3N0SW1wbFByb3h5KCkKKyAgICB7CisgICAgICAgIHJldHVybiBNb2Nr
TGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6Y3JlYXRlKHRoaXMsIG1fdGVzdCk7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZUxheWVycygpCisgICAgeworICAgICAgICBtX3Rlc3QtPnVw
ZGF0ZUxheWVycyh0aGlzKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NMYXll
clRyZWVIb3N0Q29tbWl0dGVyPiBiZWdpbkNvbW1pdCgpCisgICAgeworICAgICAgICBtX3Rlc3Qt
PmJlZ2luQ29tbWl0T25NYWluVGhyZWFkKHRoaXMpOworICAgICAgICByZXR1cm4gTW9ja0xheWVy
VHJlZUhvc3RDb21taXR0ZXI6OmNyZWF0ZShtX3Rlc3QpOworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCBjb21taXRDb21wbGV0ZSgpCisgICAgeworICAgICAgICBDQ0xheWVyVHJlZUhvc3Q6OmNv
bW1pdENvbXBsZXRlKCk7CisgICAgICAgIG1fdGVzdC0+Y29tbWl0Q29tcGxldGVPbk1haW5UaHJl
YWQodGhpcyk7CisgICAgfQorCitwcml2YXRlOgorICAgIENDTGF5ZXJUcmVlSG9zdFRlc3QqIG1f
dGVzdDsKK307CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0VGVzdDo6ZG9CZWdpblRlc3QoKQorewor
ICAgIEFTU0VSVCghbV9ydW5uaW5nKTsKKyAgICBtX3J1bm5pbmcgPSB0cnVlOworICAgIG1fY2xp
ZW50ID0gYWRvcHRQdHIobmV3IE1vY2tMYXllclRyZWVIb3N0Q2xpZW50KHRoaXMpKTsKKyAgICBt
X2xheWVyVHJlZUhvc3QgPSBhZG9wdFJlZihuZXcgTW9ja0xheWVyVHJlZUhvc3QobV9jbGllbnQu
Z2V0KCksIHRoaXMpKTsKKyAgICBtX2xheWVyVHJlZUhvc3QtPmluaXQoKTsKKyAgICBtX2JlZ2lu
bmluZyA9IHRydWU7CisgICAgYmVnaW5UZXN0KCk7CisgICAgbV9iZWdpbm5pbmcgPSBmYWxzZTsK
KyAgICBpZiAobV9lbmRXaGVuQmVnaW5SZXR1cm5zKQorICAgICAgICBvbkVuZFRlc3Qoc3RhdGlj
X2Nhc3Q8dm9pZCo+KHRoaXMpKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RUZXN0OjplbmRU
ZXN0KCkKK3sKKyAgICAvLyBJZiB3ZSBhcmUgY2FsbGVkIGZyb20gdGhlIENDVGhyZWFkLCByZS1j
YWxsIGVuZFRlc3Qgb24gdGhlIG1haW4gdGhyZWFkLgorICAgIGlmICghaXNNYWluVGhyZWFkKCkp
CisgICAgICAgIENDTWFpblRocmVhZDo6cG9zdFRhc2soY3JlYXRlTWFpblRocmVhZFRhc2sodGhp
cywgJkNDTGF5ZXJUcmVlSG9zdFRlc3Q6OmVuZFRlc3QpKTsKKyAgICBlbHNlIHsKKyAgICAgICAg
Ly8gRm9yIHRoZSBjYXNlIHdoZXJlIHdlIGVuZFRlc3QgZHVyaW5nIGJlZ2luVGVzdCgpLCBzZXQg
YSBmbGFnIHRvIGluZGljYXRlIHRoYXQKKyAgICAgICAgLy8gdGhlIHRlc3Qgc2hvdWxkIGVuZCB0
aGUgc2Vjb25kIGJlZ2luVGVzdCByZWdhaW5zIGNvbnRyb2wuCisgICAgICAgIGlmIChtX2JlZ2lu
bmluZykKKyAgICAgICAgICAgIG1fZW5kV2hlbkJlZ2luUmV0dXJucyA9IHRydWU7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG9uRW5kVGVzdChzdGF0aWNfY2FzdDx2b2lkKj4odGhpcykpOwor
ICAgIH0KK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vIFNob3J0bGl2ZWQgbGF5ZXJUcmVl
SG9zdHMgc2hvdWxkbid0IGRpZS4KK2NsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3RTaG9ydGxpdmVk
MSA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0IHsKK3B1YmxpYzoKKyAgICBDQ0xheWVyVHJl
ZUhvc3RUZXN0U2hvcnRsaXZlZDEoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3Qo
KQorICAgIHsKKyAgICAgICAgZW5kVGVzdCgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBh
ZnRlclRlc3QoKQorICAgIHsKKyAgICB9Cit9OworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RT
aG9ydGxpdmVkMSwgcnVuKSB7IHJ1blRlc3QoKTsgfQorCisvLyBTaG9ydGxpdmVkIGxheWVyVHJl
ZUhvc3RzIHNob3Vkbid0IGRpZSB3aXRoIGEgY29tbWl0IGluIGZsaWdodC4KK2NsYXNzIENDTGF5
ZXJUcmVlSG9zdFRlc3RTaG9ydGxpdmVkMiA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0IHsK
K3B1YmxpYzoKKyAgICBDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDIoKSB7IH0KKworICAg
IHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKQorICAgIHsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0
LT5zZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOworICAgICAgICBlbmRUZXN0KCk7CisgICAgfQor
CisgICAgdmlydHVhbCB2b2lkIGFmdGVyVGVzdCgpCisgICAgeworICAgIH0KK307CitURVNUX0Yo
Q0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQyLCBydW4pIHsgcnVuVGVzdCgpOyB9CisKKy8v
IFNob3J0bGl2ZWQgbGF5ZXJUcmVlSG9zdHMgc2hvdWRuJ3QgZGllIHdpdGggYSByZWRyYXcgaW4g
ZmxpZ2h0LgorY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQzIDogcHVibGljIEND
TGF5ZXJUcmVlSG9zdFRlc3QgeworcHVibGljOgorICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RTaG9y
dGxpdmVkMygpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGJlZ2luVGVzdCgpCisgICAgeworICAg
ICAgICBtX2xheWVyVHJlZUhvc3QtPnNldE5lZWRzUmVkcmF3KCk7CisgICAgICAgIGVuZFRlc3Qo
KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkKKyAgICB7CisgICAgfQor
fTsKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDMsIHJ1bikgeyBydW5UZXN0
KCk7IH0KKworCisvLyBDb25zdGFudGx5IHJlZHJhd2luZyBsYXllclRyZWVIb3N0cyBzaG91bGRu
dCBkaWUgd2hlbiB0aGV5IGNvbW1pdAorY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdENvbW1pdGlu
Z1dpdGhDb250aW51b3VzUmVkcmF3IDogcHVibGljIENDTGF5ZXJUcmVlSG9zdFRlc3QgeworcHVi
bGljOgorICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RDb21taXRpbmdXaXRoQ29udGludW91c1JlZHJh
dygpCisgICAgICAgIDogbV9udW1Db21wbGV0ZUNvbW1pdHMoMCkKKyAgICAgICAgLCBtX251bURy
YXdzKDApCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKQorICAg
IHsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOwor
ICAgICAgICBlbmRUZXN0KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGNvbW1pdENvbXBs
ZXRlT25DQ1RocmVhZChNb2NrTGF5ZXJUcmVlSG9zdEltcGwqIGxheWVyVHJlZUhvc3RJbXBsKQor
ICAgIHsKKyAgICAgICAgbV9udW1Db21wbGV0ZUNvbW1pdHMgKz0gMTsKKyAgICAgICAgaWYgKG1f
bnVtQ29tcGxldGVDb21taXRzID09IDIpCisgICAgICAgICAgICBlbmRUZXN0KCk7CisgICAgfQor
CisgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNBbmRQcmVzZW50T25DQ1RocmVhZChNb2NrTGF5
ZXJUcmVlSG9zdEltcGwqIGxheWVyVHJlZUhvc3RJbXBsKQorICAgIHsKKyAgICAgICAgaWYgKG1f
bnVtRHJhd3MgPT0gMSkKKyAgICAgICAgICAgIGxheWVyVHJlZUhvc3RJbXBsLT5zZXROZWVkc0Nv
bW1pdEFuZFJlZHJhdygpOworICAgICAgICBtX251bURyYXdzKys7CisgICAgICAgIGxheWVyVHJl
ZUhvc3RJbXBsLT5zZXROZWVkc1JlZHJhdygpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBh
ZnRlclRlc3QoKQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgaW50IG1fbnVtQ29tcGxl
dGVDb21taXRzOworICAgIGludCBtX251bURyYXdzOworfTsKK1RFU1RfRihDQ0xheWVyVHJlZUhv
c3RUZXN0Q29tbWl0aW5nV2l0aENvbnRpbnVvdXNSZWRyYXcsIHJ1bikgeyBydW5UZXN0KCk7IH0K
KworCisKKy8vIFR3byBzZXROZWVkc0NvbW1pdHMgaW4gYSByb3cgc2hvdWxkIGxlYWQgdG8gYXQg
bGVhc3QgMSBjb21taXQgYW5kIGF0IGxlYXN0IDEKKy8vIGRyYXcgd2l0aCBmcmFtZSAwLgorY2xh
c3MgQ0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzQ29tbWl0MSA6IHB1YmxpYyBDQ0xheWVyVHJl
ZUhvc3RUZXN0IHsKK3B1YmxpYzoKKyAgICBDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNDb21t
aXQxKCkKKyAgICAgICAgOiBtX251bUNvbW1pdHMoMCkKKyAgICAgICAgLCBtX251bURyYXdzKDAp
IHsgfQorCisgICAgdmlydHVhbCB2b2lkIGJlZ2luVGVzdCgpCisgICAgeworICAgICAgICBtX2xh
eWVyVHJlZUhvc3QtPnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgICAgIG1fbGF5ZXJU
cmVlSG9zdC0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhyZWFkKE1vY2tMYXllclRyZWVIb3N0SW1w
bCogbGF5ZXJUcmVlSG9zdEltcGwpCisgICAgeworICAgICAgICBtX251bURyYXdzKys7CisgICAg
ICAgIGlmICghbGF5ZXJUcmVlSG9zdEltcGwtPnNvdXJjZUZyYW1lTnVtYmVyKCkpIC8vIGZyYW1l
IDAKKyAgICAgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY29t
bWl0T25DQ1RocmVhZChNb2NrTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCwgTW9ja0xheWVy
VHJlZUhvc3RJbXBsKiBpbXBsKQorICAgIHsKKyAgICAgICAgbV9udW1Db21taXRzKys7CisgICAg
fQorCisgICAgdmlydHVhbCB2b2lkIGFmdGVyVGVzdCgpCisgICAgeworICAgICAgICBFWFBFQ1Rf
R0UoMSwgbV9udW1Db21taXRzKTsKKyAgICAgICAgRVhQRUNUX0dFKDEsIG1fbnVtRHJhd3MpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBpbnQgbV9udW1Db21taXRzOworICAgIGludCBtX251bURy
YXdzOworfTsKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQxLCBydW4p
IHsgcnVuVGVzdCgpOyB9CisKKworLy8gQSBzZXROZWVkc0NvbW1pdCBzaG91bGQgbGVhZCB0byAx
IGNvbW1pdC4gSXNzdWluZyBhIHNlY29uZCBjb21taXQgYWZ0ZXIgdGhhdAorLy8gZmlyc3QgY29t
bWl0ZWQgZnJhbWUgZHJhd3Mgc2hvdWxkIGxlYWQgdG8gYW5vdGhlciBjb21taXQuCitjbGFzcyBD
Q0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQyIDogcHVibGljIENDTGF5ZXJUcmVlSG9z
dFRlc3QgeworcHVibGljOgorICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc0NvbW1pdDIo
KQorICAgICAgICA6IG1fbnVtQ29tbWl0cygwKQorICAgICAgICAsIG1fbnVtRHJhd3MoMCkgeyB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkKKyAgICB7CisgICAgICAgIG1fbGF5ZXJU
cmVlSG9zdC0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhyZWFkKE1vY2tMYXllclRyZWVIb3N0SW1w
bCogbGF5ZXJUcmVlSG9zdEltcGwpCisgICAgeworICAgICAgICBpZiAoIWxheWVyVHJlZUhvc3RJ
bXBsLT5zb3VyY2VGcmFtZU51bWJlcigpKSAvLyBmcmFtZSAwCisgICAgICAgICAgICBsYXllclRy
ZWVIb3N0SW1wbC0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICAgICAgZWxzZSBpZiAo
bGF5ZXJUcmVlSG9zdEltcGwtPnNvdXJjZUZyYW1lTnVtYmVyKCkgPT0gMSkKKyAgICAgICAgICAg
IGVuZFRlc3QoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0T25DQ1RocmVhZChN
b2NrTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCwgTW9ja0xheWVyVHJlZUhvc3RJbXBsKiBp
bXBsKQorICAgIHsKKyAgICAgICAgbV9udW1Db21taXRzKys7CisgICAgfQorCisgICAgdmlydHVh
bCB2b2lkIGFmdGVyVGVzdCgpCisgICAgeworICAgICAgICBFWFBFQ1RfRVEoMiwgbV9udW1Db21t
aXRzKTsKKyAgICAgICAgRVhQRUNUX0dFKDIsIG1fbnVtRHJhd3MpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBpbnQgbV9udW1Db21taXRzOworICAgIGludCBtX251bURyYXdzOworfTsKK1RFU1Rf
RihDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQyLCBydW4pIHsgcnVuVGVzdCgpOyB9
CisKKworLy8gMSBzZXROZWVkc1JlZHJhdyBzaG91bGQgbGVhZCB0byBhdCBsZWFzdCAxIGRyYXcg
YnV0IG5vIGNvbW1pdC4KK2NsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc1JlZHJhdyA6
IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0IHsKK3B1YmxpYzoKKyAgICBDQ0xheWVyVHJlZUhv
c3RUZXN0U2V0TmVlZHNSZWRyYXcoKQorICAgICAgICA6IG1fbnVtQ29tbWl0cygwKQorICAgICAg
ICAsIG1fbnVtRHJhd3MoMCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkKKyAg
ICB7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0TmVlZHNSZWRyYXcoKTsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhyZWFkKE1vY2tMYXll
clRyZWVIb3N0SW1wbCogbGF5ZXJUcmVlSG9zdCkKKyAgICB7CisgICAgICAgIEVYUEVDVF9FUSgt
MSwgbGF5ZXJUcmVlSG9zdC0+c291cmNlRnJhbWVOdW1iZXIoKSk7CisgICAgICAgIEVYUEVDVF9F
USgwLCBsYXllclRyZWVIb3N0LT5mcmFtZU51bWJlcigpKTsKKyAgICAgICAgbV9udW1EcmF3cyAr
PSAxOworICAgICAgICBlbmRUZXN0KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGNvbW1p
dE9uQ0NUaHJlYWQoTW9ja0xheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QsIE1vY2tMYXllclRy
ZWVIb3N0SW1wbCogaW1wbCkKKyAgICB7CisgICAgICAgIG1fbnVtQ29tbWl0cysrOworICAgIH0K
KworICAgIHZpcnR1YWwgdm9pZCBhZnRlclRlc3QoKQorICAgIHsKKyAgICAgICAgRVhQRUNUX0dF
KDEsIG1fbnVtRHJhd3MpOworICAgICAgICBFWFBFQ1RfRVEoMCwgbV9udW1Db21taXRzKTsKKyAg
ICB9Citwcml2YXRlOgorICAgIGludCBtX251bUNvbW1pdHM7CisgICAgaW50IG1fbnVtRHJhd3M7
Cit9OworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc1JlZHJhdywgcnVuKSB7IHJ1
blRlc3QoKTsgfQorCisKKworfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmIC8vIFVTRShUSFJFQURF
RF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NUaHJlYWRUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaHJlYWRU
ZXN0LmNwcAppbmRleCAwNGZiYTQ2NTMzZGI3NWRkNzNmNjhhYjdiN2IyZDYwMWU3Y2I0MDY3Li5m
YWIzNTRlYzAwYzk3MzNjYzI4NWExMmI5MDBjY2YwZjNlZTJhMzFlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGhyZWFkVGVzdC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RocmVhZFRlc3QuY3BwCkBAIC01MSw2ICs1MSw3IEBAIHB1
YmxpYzoKIFRFU1QoQ0NUaHJlYWRUZXN0LCBwaW5nUG9uZ1VzaW5nQ29uZGl0aW9uKQogewogICAg
IE93blB0cjxDQ1RocmVhZD4gdGhyZWFkID0gQ0NUaHJlYWQ6OmNyZWF0ZSgpOworCiAgICAgUGlu
Z1BvbmdVc2luZ0NvbmRpdGlvbiB0YXJnZXQ7CiAgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxl
dGlvbjsKICAgICB0aHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzaygmdGFyZ2V0LCAm
UGluZ1BvbmdVc2luZ0NvbmRpdGlvbjo6cGluZywgJmNvbXBsZXRpb24pKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90116</attachid>
            <date>2011-04-18 16:35:13 -0700</date>
            <delta_ts>2011-04-19 14:45:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58408-20110418163512.patch</filename>
            <type>text/plain</type>
            <size>73877</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODM4OTYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjOTM0YWFkNjVlYzRjNzE5
YWQwNDI1ZDMwOTdjZTBmNzZjZmRjNDljLi5lMDJlMzMyMGIyNzA2NmM0MGE5ZjYxNGE4NDk2OTM0
OWMwNTE5YjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODIgQEAKKzIwMTEtMDQtMTggIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50IENDTGF5ZXJUcmVlSG9zdCBh
bmQgQ0NMYXllclRyZWVIb3N0SW1wbCBwb3J0aW9ucyBvZiB0aHJlYWRlZCBjb21wb3NpdG9yCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODQwOAorCisg
ICAgICAgIENyZWF0ZSBDQ0xheWVyVHJlZUhvc3QgYW5kIENDTGF5ZXJUcmVlSG9zdEltcGwsIHdo
aWNoIGFyZSB0aGUgbWFpbgorICAgICAgICB0aHJlYWQgYW5kIGNvbXBvc2l0b3IgdGhyZWFkIGhh
bHZlcyBvZiBhIGNvbXBvc2l0ZWQgdmlldy4gQ29tbXVuaWNhdGlvbgorICAgICAgICBiZXR3ZWVu
IHRoZSB0d28gaXMgYmFzZWQgb24gdGhlIGRlc2lnbiB1c2VkIGluIEZpbGVTdHJlYW1Qcm94eS4K
KworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bUNvbW1pdHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyUmVuZGVyZXJDaHJvbWl1bUNvbW1pdHRlcjo6Y29tbWl0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bUNvbW1pdHRlcjo6TGF5ZXJSZW5kZXJlckNocm9taXVt
Q29tbWl0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6YmVn
aW5Db21taXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb21t
aXRDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBs
OjpMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJDaHJvbWl1bUltcGw6OmRyYXdMYXllcnNBbmRQcmVzZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bUltcGw6OmRyYXdMYXllcnNPbk1haW5UaHJlYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbFByb3h5OjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbFByb3h5OjpjcmVh
dGVMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW1JbXBsUHJveHk6OkxheWVyUmVuZGVyZXJDaHJvbWl1bUltcGxQcm94eSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZUxheWVyVHJlZUhvc3RJbXBs
UHJveHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
SGVhZHNVcERpc3BsYXkuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDSGVhZHNVcERpc3BsYXk6OmN1
cnJlbnRGcmFtZU51bWJlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuY3BwLgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0OjpDQ0xheWVyVHJlZUhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0Ojppbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6
fkNDTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNv
bW1pdENvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0
ZUFuZExheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI6
OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnNldE5lZWRzQ29t
bWl0QW5kUmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2V0TmVl
ZHNSZWRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmguCisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3Q6OmZyYW1lTnVtYmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6On5DQ0xheWVyVHJlZUhvc3RJbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmJlZ2luQ29tbWl0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbW1pdENvbXBsZXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNSZWRyYXcpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oLgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0SW1wbENsaWVudDo6fkNDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6ZnJhbWVOdW1iZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c291cmNlRnJhbWVOdW1iZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0U291cmNlRnJhbWVOdW1iZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5
OjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5OjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHk6On5DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVkcmF3
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c3RvcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnBvc3REcmF3TGF5ZXJz
VGFza09uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFBy
b3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNNYWluVGhyZWFkKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNDQ1RocmVhZCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmNvbW1pdE9uQ0NUaHJl
YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpkcmF3TGF5
ZXJzT25DQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmluaXRJbXBsT25DQ1Ro
cmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmxheWVy
VHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6Omhvc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNDVGhyZWFkOjpydW5Mb29wKToKKwogMjAxMS0wNC0xNCAgQW50dGkgS29pdmlzdG8gIDxhbnR0
aUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgT2xpdmVyIEh1bnQuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKaW5kZXggNmI2MWJhMzU3MmUwNjZkYTY0ZDQzOTM2OWM4NjljYTJiNWI5ODU4Zi4uZmUy
ZmQ0MTFkZjAxMTkyYTg1Y2UwYWZhMWQzYTczNzNiMTAyZDc3ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpA
QCAtNDA1NCw2ICs0MDU0LDEyIEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuY3BwJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkLmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhy
ZWFkLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFp
blRocmVhZFRhc2suaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRl
eCBmYzdlNDMzNzA4YjgyYzYxN2ZkNWM5YjZmZjlmYWMyOWZlNTAzZWQ4Li5kZGQwNGFjODcwNGVl
YjA1MWI5NzMzMzQxMTkyMzJjMWYzN2MxNTk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5jcHAKQEAgLTQ3LDYgKzQ3LDggQEAKICNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCiAj
aW5jbHVkZSAiV2ViR0xMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwu
aCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NN
YWluVGhyZWFkVGFzay5oIgogI2lmIFVTRShTS0lBKQogI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tp
YS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKQEAgLTkzLDIzICs5NSwyOCBA
QCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29tcGFyZUxheWVyWihjb25zdCBSZWZQdHI8
Q0NMYXllckltcGw+JiBhLCBjb25zdCBSZQogICAgIHJldHVybiBhLT5kcmF3RGVwdGgoKSA8IGIt
PmRyYXdEZXB0aCgpOwogfQogCi1QYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
Y29udGV4dCwgUGFzc093blB0cjxUaWxlUGFpbnRJbnRlcmZhY2U+IGNvbnRlbnRQYWludCkKK1Bh
c3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNy
ZWF0ZShDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVudCwgUGFzc093blB0cjxUaWxlUGFpbnRJ
bnRlcmZhY2U+IGNvbnRlbnRQYWludCkKIHsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+
IGNvbnRleHQgPSBjbGllbnQtPmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKTsKICAgICBp
ZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgUmVmUHRyPExheWVyUmVuZGVy
ZXJDaHJvbWl1bT4gbGF5ZXJSZW5kZXJlcihhZG9wdFJlZihuZXcgTGF5ZXJSZW5kZXJlckNocm9t
aXVtKGNvbnRleHQsIGNvbnRlbnRQYWludCkpKTsKKyAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNo
cm9taXVtPiBsYXllclJlbmRlcmVyKGFkb3B0UmVmKG5ldyBMYXllclJlbmRlcmVyQ2hyb21pdW0o
Y2xpZW50LCBjb250ZXh0LCBjb250ZW50UGFpbnQpKSk7CisgICAgbGF5ZXJSZW5kZXJlci0+aW5p
dCgpOwogICAgIGlmICghbGF5ZXJSZW5kZXJlci0+aGFyZHdhcmVDb21wb3NpdGluZygpKQogICAg
ICAgICByZXR1cm4gMDsKIAogICAgIHJldHVybiBsYXllclJlbmRlcmVyLnJlbGVhc2UoKTsKIH0K
IAotTGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0oUGFzc1JlZlB0
cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCwKK0xheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5
ZXJSZW5kZXJlckNocm9taXVtKENDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xpZW50LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFBhc3NPd25QdHI8VGlsZVBhaW50SW50ZXJmYWNlPiBjb250ZW50UGFpbnQpCi0g
ICAgOiBtX3ZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoLTEsIC0xKSkKKyAgICA6IEND
TGF5ZXJUcmVlSG9zdChjbGllbnQpCisgICAgLCBtX3ZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oSW50
UG9pbnQoLTEsIC0xKSkKICAgICAsIG1fcm9vdExheWVyKDApCiAgICAgLCBtX3Jvb3RMYXllckNv
bnRlbnRQYWludChjb250ZW50UGFpbnQpCisgICAgLCBtX2NvbW1pdHRpbmcoZmFsc2UpCiAgICAg
LCBtX2N1cnJlbnRTaGFkZXIoMCkKICAgICAsIG1fY3VycmVudFJlbmRlclN1cmZhY2UoMCkKICAg
ICAsIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCgwKQpAQCAtMTg1LDEwICsxOTIsOCBAQCB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0Vmlld3BvcnQoY29uc3QgSW50UmVjdCYgdmlzaWJs
ZVJlY3QsIGNvbnN0IEludFJlYwogICAgIH0KIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OnVwZGF0ZUFuZERyYXdMYXllcnMoKQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVw
ZGF0ZUxheWVycygpCiB7Ci0gICAgQVNTRVJUKG1faGFyZHdhcmVDb21wb3NpdGluZyk7Ci0KICAg
ICBpZiAoIW1fcm9vdExheWVyKQogICAgICAgICByZXR1cm47CiAKQEAgLTE5OSwxMCArMjA0LDEz
IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVBbmREcmF3TGF5ZXJzKCkKICAg
ICBpZiAoIW1fcm9vdExheWVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBMYXllckxpc3QgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdDsKLQotICAgIHVwZGF0ZUxheWVycyhyZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0KTsKKyAgICBtX2NvbXB1dGVkUmVuZGVyU3VyZmFjZUxheWVyTGlzdCA9IGFkb3B0UHRy
KG5ldyBMYXllckxpc3QoKSk7CisgICAgdXBkYXRlTGF5ZXJzKCptX2NvbXB1dGVkUmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCk7Cit9CiAKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5
ZXJzKCkKK3sKKyAgICBBU1NFUlQobV9jb21wdXRlZFJlbmRlclN1cmZhY2VMYXllckxpc3QpOwog
ICAgIC8vIEJlZm9yZSBkcmF3TGF5ZXJzOgogICAgIGlmIChoYXJkd2FyZUNvbXBvc2l0aW5nKCkg
JiYgbV9jb250ZXh0U3VwcG9ydHNMYXRjaCkgewogICAgICAgICAvLyBGSVhNRTogVGhlIG11bHRp
dGhyZWFkZWQgY29tcG9zaXRvciBjYXNlIHdpbGwgbm90IHdvcmsgYXMgbG9uZyBhcwpAQCAtMjI4
LDcgKzIzNiw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVBbmREcmF3TGF5
ZXJzKCkKICAgICAgICAgbV9jaGlsZENvbnRleHRzV2VyZUNvcGllZCA9IGZhbHNlOwogICAgIH0K
IAotICAgIGRyYXdMYXllcnMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgZHJhd0xheWVy
cygqbV9jb21wdXRlZFJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogCiAgICAgLy8gQWZ0ZXIgZHJh
d0xheWVyczoKICAgICBpZiAoaGFyZHdhcmVDb21wb3NpdGluZygpICYmIG1fY29udGV4dFN1cHBv
cnRzTGF0Y2gpIHsKQEAgLTEwODUsNiArMTA5Myw5OCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHVtcFJlbmRlclN1cmZhY2VzKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50LCBMYXll
cgogICAgICAgICBkdW1wUmVuZGVyU3VyZmFjZXModHMsIGluZGVudCwgbGF5ZXItPmdldFN1Ymxh
eWVycygpW2ldLmdldCgpKTsKIH0KIAorY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtQ29tbWl0
dGVyIDogcHVibGljIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlciB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NPd25QdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtQ29tbWl0dGVyPiBjcmVhdGUoKSB7
IHJldHVybiBuZXcgTGF5ZXJSZW5kZXJlckNocm9taXVtQ29tbWl0dGVyKCk7IH0KKworICAgIHZp
cnR1YWwgdm9pZCBjb21taXQoQ0NMYXllclRyZWVIb3N0KiBob3N0LCBDQ0xheWVyVHJlZUhvc3RJ
bXBsKiBob3N0SW1wbCkKKyAgICB7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcjo6
Y29tbWl0KGhvc3QsIGhvc3RJbXBsKTsKKyAgICAgICAgLy8gRklYTUU6IHB1dCB0cmVlIHN5bmMg
Y29kZSBpbiBoZXJlLgorICAgIH0KK3ByaXZhdGU6CisgICAgTGF5ZXJSZW5kZXJlckNocm9taXVt
Q29tbWl0dGVyKCkgeyB9Cit9OworCitQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdENvbW1pdHRl
cj4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpiZWdpbkNvbW1pdCgpCit7CisgICAgQVNTRVJUKCFt
X2NvbW1pdHRpbmcpOworICAgIG1fY29tbWl0dGluZyA9IHRydWU7CisgICAgcmV0dXJuIExheWVy
UmVuZGVyZXJDaHJvbWl1bUNvbW1pdHRlcjo6Y3JlYXRlKCk7Cit9CisKK3ZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpjb21taXRDb21wbGV0ZSgpCit7CisgICAgQVNTRVJUKG1fY29tbWl0dGlu
Zyk7CisgICAgQ0NMYXllclRyZWVIb3N0Ojpjb21taXRDb21wbGV0ZSgpOworICAgIG1fY29tbWl0
dGluZyA9IGZhbHNlOworfQorCisKK2NsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bUltcGwgOiBw
dWJsaWMgQ0NMYXllclRyZWVIb3N0SW1wbCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25Q
dHI8TGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbD4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdEltcGxD
bGllbnQqIGNsaWVudCwgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBs
KGNsaWVudCwgbGF5ZXJSZW5kZXJlcikpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkcmF3
TGF5ZXJzQW5kUHJlc2VudCgpCisgICAgeworICAgICAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21w
bGV0aW9uOworICAgICAgICBib29sIGNvbnRleHRMb3N0OworICAgICAgICBDQ01haW5UaHJlYWQ6
OnBvc3RUYXNrKGNyZWF0ZU1haW5UaHJlYWRUYXNrKHRoaXMsICZMYXllclJlbmRlcmVyQ2hyb21p
dW1JbXBsOjpkcmF3TGF5ZXJzT25NYWluVGhyZWFkLCAmY29tcGxldGlvbiwgJmNvbnRleHRMb3N0
KSk7CisgICAgICAgIGNvbXBsZXRpb24ud2FpdCgpOworCisgICAgICAgIC8vIEZJWE1FOiBTZW5k
IHRoZSAiVXBkYXRlUmVjdCIgbWVzc2FnZSB1cCB0byB0aGUgUmVuZGVyV2lkZ2V0IFtvciBtb3Zl
cGx1Z2luIGVxdWl2YWxlbnRzLi4uXQorCisgICAgICAgIC8vIEZJWE1FOiBoYW5kbGUgY29udGV4
dCBsb3N0CisgICAgICAgIGlmIChjb250ZXh0TG9zdCkKKyAgICAgICAgICAgIEZBVEFMKCJMYXll
clJlbmRlcmVyQ2hyb21pdW1JbXBsIGRvZXMgbm90IGhhbmRsZSBjb250ZXh0IGxvc3QgeWV0LiIp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsKENDTGF5
ZXJUcmVlSG9zdEltcGxDbGllbnQqIGNsaWVudCwgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXll
clJlbmRlcmVyKQorICAgICAgICA6IENDTGF5ZXJUcmVlSG9zdEltcGwoY2xpZW50KQorICAgICAg
ICAsIG1fbGF5ZXJSZW5kZXJlcihsYXllclJlbmRlcmVyKSB7IH0KKworICAgIHZvaWQgZHJhd0xh
eWVyc09uTWFpblRocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbiwgYm9vbCogY29u
dGV4dExvc3QpCisgICAgeworICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAg
ICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVycygpOworICAgICAgICBtX2xheWVyUmVuZGVy
ZXItPnByZXNlbnQoKTsKKworICAgICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IG1f
bGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpOworICAgICAgICAqY29udGV4dExvc3QgPSBjb250ZXh0
LT5nZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6Tk9fRVJST1I7CisKKyAgICAgICAgY29tcGxldGlvbi0+c2lnbmFsKCk7Cisg
ICAgfQorCisgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBtX2xheWVyUmVuZGVyZXI7Cit9Owor
CitjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsUHJveHkgOiBwdWJsaWMgQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxMYXllclJl
bmRlcmVyQ2hyb21pdW1JbXBsUHJveHk+IGNyZWF0ZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxh
eWVyUmVuZGVyZXIpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IExheWVyUmVu
ZGVyZXJDaHJvbWl1bUltcGxQcm94eShsYXllclJlbmRlcmVyKSk7CisgICAgfQorCisgICAgdmly
dHVhbCBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IGNyZWF0ZUxheWVyVHJlZUhvc3RJ
bXBsKCkKKyAgICB7CisgICAgICAgIHJldHVybiBMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsOjpj
cmVhdGUodGhpcywgc3RhdGljX2Nhc3Q8TGF5ZXJSZW5kZXJlckNocm9taXVtKj4oaG9zdCgpKSk7
CisgICAgfQorCitwcml2YXRlOgorICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bUltcGxQcm94eShM
YXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCisgICAgICAgIDogQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5KGxheWVyUmVuZGVyZXIpIHsgfQorfTsKKworUGFzc093blB0cjxDQ0xh
eWVyVHJlZUhvc3RJbXBsUHJveHk+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlTGF5ZXJU
cmVlSG9zdEltcGxQcm94eSgpCit7CisgICAgcmV0dXJuIExheWVyUmVuZGVyZXJDaHJvbWl1bUlt
cGxQcm94eTo6Y3JlYXRlKHRoaXMpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5oCmluZGV4IGExOTk1NDYxODdhZDEwOTdhOTk2MzU1MGZhOGQ2ZmQ0Y2VmOGQ0
YmMuLjEzZTgyZjE4Y2U4OTc0ZDZjNTEyNDM1NTc0Y2NhNmIxOTRiYTVkYjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC00MywxMyArNDMsMTMgQEAKICNpbmNsdWRlICJW
aWRlb0xheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJjYy9DQ0NhbnZhc0xheWVySW1wbC5oIgog
I2luY2x1ZGUgImNjL0NDSGVhZHNVcERpc3BsYXkuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJl
ZUhvc3QuaCIKICNpbmNsdWRlICJjYy9DQ1BsdWdpbkxheWVySW1wbC5oIgogI2luY2x1ZGUgImNj
L0NDVmlkZW9MYXllckltcGwuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIAogI2lmIFBMQVRGT1JNKENHKQpAQCAtNjEsMTMgKzYxLDE1IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NIZWFkc1VwRGlzcGxheTsKIGNsYXNzIEND
TGF5ZXJJbXBsOworY2xhc3MgQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyOworY2xhc3MgQ0NMYXll
clRyZWVIb3N0SW1wbDsKIGNsYXNzIEdlb21ldHJ5QmluZGluZzsKIGNsYXNzIEdyYXBoaWNzQ29u
dGV4dDNEOwogCiAvLyBDbGFzcyB0aGF0IGhhbmRsZXMgZHJhd2luZyBvZiBjb21wb3NpdGVkIHJl
bmRlciBsYXllcnMgdXNpbmcgR0wuCi1jbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW0gOiBwdWJs
aWMgUmVmQ291bnRlZDxMYXllclJlbmRlcmVyQ2hyb21pdW0+IHsKK2NsYXNzIExheWVyUmVuZGVy
ZXJDaHJvbWl1bSA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3QgewogcHVibGljOgotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gY3JlYXRlKFBhc3NSZWZQdHI8R3Jh
cGhpY3NDb250ZXh0M0Q+LCBQYXNzT3duUHRyPFRpbGVQYWludEludGVyZmFjZT4gY29udGVudFBh
aW50KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGNyZWF0
ZShDQ0xheWVyVHJlZUhvc3RDbGllbnQqLCBQYXNzT3duUHRyPFRpbGVQYWludEludGVyZmFjZT4g
Y29udGVudFBhaW50KTsKIAogICAgIH5MYXllclJlbmRlcmVyQ2hyb21pdW0oKTsKIApAQCAtNzgs
NyArODAsMTAgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Vmlld3BvcnQoY29uc3QgSW50UmVjdCYg
dmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRQb2ludCYg
c2Nyb2xsUG9zaXRpb24pOwogCiAgICAgLy8gdXBkYXRlcyBhbmQgZHJhd3MgdGhlIGN1cnJlbnQg
bGF5ZXJzIG9udG8gdGhlIGJhY2tidWZmZXIKLSAgICB2b2lkIHVwZGF0ZUFuZERyYXdMYXllcnMo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlTGF5ZXJzKCk7CisgICAgdmlydHVhbCBQYXNzT3du
UHRyPENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcj4gYmVnaW5Db21taXQoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgY29tbWl0Q29tcGxldGUoKTsKKyAgICB2b2lkIGRyYXdMYXllcnMoKTsKIAogICAgIC8v
IHdhaXRzIGZvciByZW5kZXJpbmcgdG8gZmluaXNoCiAgICAgdm9pZCBmaW5pc2goKTsKQEAgLTEz
NCwxMSArMTM5LDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZENoaWxkQ29udGV4dChHcmFwaGlj
c0NvbnRleHQzRCopOwogICAgIHZvaWQgcmVtb3ZlQ2hpbGRDb250ZXh0KEdyYXBoaWNzQ29udGV4
dDNEKik7CiAKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NMYXllclRyZWVI
b3N0SW1wbFByb3h5PiBjcmVhdGVMYXllclRyZWVIb3N0SW1wbFByb3h5KCk7CisKIHByaXZhdGU6
CiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+IExheWVyTGlzdDsKICAg
ICB0eXBlZGVmIEhhc2hNYXA8R3JhcGhpY3NDb250ZXh0M0QqLCBpbnQ+IENoaWxkQ29udGV4dE1h
cDsKIAotICAgIGV4cGxpY2l0IExheWVyUmVuZGVyZXJDaHJvbWl1bShQYXNzUmVmUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiwgUGFzc093blB0cjxUaWxlUGFpbnRJbnRlcmZhY2U+IGNvbnRlbnRQYWlu
dCk7CisgICAgZXhwbGljaXQgTGF5ZXJSZW5kZXJlckNocm9taXVtKENDTGF5ZXJUcmVlSG9zdENs
aWVudCosIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBQYXNzT3duUHRyPFRpbGVQYWlu
dEludGVyZmFjZT4gY29udGVudFBhaW50KTsKIAogICAgIHZvaWQgdXBkYXRlTGF5ZXJzKExheWVy
TGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAgdm9pZCB1cGRhdGVSb290TGF5ZXJD
b250ZW50cygpOwpAQCAtMTc5LDggKzE4NywxMSBAQCBwcml2YXRlOgogICAgIE93blB0cjxUaWxl
UGFpbnRJbnRlcmZhY2U+IG1fcm9vdExheWVyQ29udGVudFBhaW50OwogICAgIE93blB0cjxMYXll
clRpbGVyQ2hyb21pdW0+IG1fcm9vdExheWVyQ29udGVudFRpbGVyOwogCisgICAgYm9vbCBtX2Nv
bW1pdHRpbmc7CiAgICAgYm9vbCBtX2hhcmR3YXJlQ29tcG9zaXRpbmc7CiAKKyAgICBPd25QdHI8
TGF5ZXJMaXN0PiBtX2NvbXB1dGVkUmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKwogICAgIHVuc2ln
bmVkIG1fY3VycmVudFNoYWRlcjsKICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIG1fY3VycmVu
dFJlbmRlclN1cmZhY2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaAppbmRleCBkNTZm
OGFiODg2NzE5NDVlYWRjZTVjYjM0OTQ1YmUyMTFhYjM5Njk0Li4zNmZjMWI3ZmEwOGJlMTM5Y2I1
Nzc5ZGI4YzIwYTlhNjFlOTUwNmI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oCkBA
IC00NSw2ICs0NSw4IEBAIHB1YmxpYzoKIAogICAgIH5DQ0hlYWRzVXBEaXNwbGF5KCk7CiAKKyAg
ICBpbnQgY3VycmVudEZyYW1lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50RnJhbWVO
dW1iZXI7IH0KKwogICAgIHZvaWQgb25QcmVzZW50KCk7CiAKICAgICB2b2lkIHNldFNob3dGUFND
b3VudGVyKGJvb2wgZW5hYmxlKSB7IG1fc2hvd0ZQU0NvdW50ZXIgPSBlbmFibGU7IH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcxMWFlODNlNWVkZjEyYzZhN2U3
N2Q3Yzg3ODlkYzEzOWJlZDFmMjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC0wLDAg
KzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUg
IkNDTGF5ZXJUcmVlSG9zdC5oIgorCisjaW5jbHVkZSAiQ0NMYXllclRyZWVIb3N0SW1wbC5oIgor
I2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDQ0xheWVy
VHJlZUhvc3Q6OkNDTGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVudCkK
KyAgICA6IG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fZnJhbWVOdW1iZXIoMCkKK3sKK30KKwor
dm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmluaXQoKQoreworI2lmIFVTRShUSFJFQURFRF9DT01QT1NJ
VElORykKKyAgICBtX3Byb3h5ID0gY3JlYXRlTGF5ZXJUcmVlSG9zdEltcGxQcm94eSgpOworICAg
IG1fcHJveHktPnN0YXJ0KCk7CisjZW5kaWYKK30KKworQ0NMYXllclRyZWVIb3N0Ojp+Q0NMYXll
clRyZWVIb3N0KCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojp+Q0NMYXll
clRyZWVIb3N0IiwgdGhpcywgMCk7CisgICAgbV9wcm94eS0+c3RvcCgpOworICAgIG1fcHJveHku
Y2xlYXIoKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmNvbW1pdENvbXBsZXRlKCkKK3sK
KyAgICBtX2ZyYW1lTnVtYmVyKys7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjphbmltYXRl
QW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKK3sKKyAgICBtX2NsaWVudC0+YW5pbWF0
ZUFuZExheW91dChmcmFtZUJlZ2luVGltZSk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0Q29t
bWl0dGVyOjpjb21taXQoQ0NMYXllclRyZWVIb3N0KiBob3N0LCBDQ0xheWVyVHJlZUhvc3RJbXBs
KiBob3N0SW1wbCkKK3sKKyAgICBob3N0SW1wbC0+c2V0U291cmNlRnJhbWVOdW1iZXIoaG9zdC0+
ZnJhbWVOdW1iZXIoKSk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXROZWVkc0NvbW1p
dEFuZFJlZHJhdygpCit7CisgICAgbV9wcm94eS0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsK
K30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldE5lZWRzUmVkcmF3KCkKK3sKKyAgICBUUkFD
RV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0OjpzZXROZWVkc1JlZHJhdyIsIHRoaXMsIDApOworICAg
IG1fcHJveHktPnNldE5lZWRzUmVkcmF3KCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZDZlZmQ0Y2NhYjRkZTgzNTViY2E3Yzc5NDEwYTc2YjNhYzdhYTll
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
CisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgQ0NMYXllclRyZWVIb3N0X2gKKyNkZWZpbmUgQ0NMYXllclRyZWVIb3N0X2gK
KworI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oIgorI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDTGF5ZXJU
cmVlSG9zdEltcGw7CitjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50OworY2xhc3MgR3Jh
cGhpY3NDb250ZXh0M0Q7CisKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdENsaWVudCB7CitwdWJsaWM6
CisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1l
KSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGVM
YXllclRyZWVIb3N0Q29udGV4dDNEKCkgPSAwOworfTsKKworY2xhc3MgQ0NMYXllclRyZWVIb3N0
Q29tbWl0dGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0KENDTGF5ZXJUcmVl
SG9zdCosIENDTGF5ZXJUcmVlSG9zdEltcGwqKTsKK307CisKK2NsYXNzIENDTGF5ZXJUcmVlSG9z
dCA6IHB1YmxpYyBSZWZDb3VudGVkPENDTGF5ZXJUcmVlSG9zdD4geworcHVibGljOgorICAgIGV4
cGxpY2l0IENDTGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3RDbGllbnQqKTsKKyAgICB2b2lk
IGluaXQoKTsKKyAgICB2aXJ0dWFsIH5DQ0xheWVyVHJlZUhvc3QoKTsKKworICAgIHZpcnR1YWwg
dm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CisgICAgdmlydHVh
bCBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcj4gYmVnaW5Db21taXQoKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGNvbW1pdENvbXBsZXRlKCk7CisKKyAgICBpbnQgZnJhbWVOdW1i
ZXIoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lTnVtYmVyOyB9CisKKyAgICB2b2lkIHNldE5lZWRz
Q29tbWl0QW5kUmVkcmF3KCk7CisgICAgdm9pZCBzZXROZWVkc1JlZHJhdygpOworCisgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZUxheWVycygpID0gMDsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwg
UGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk+IGNyZWF0ZUxheWVyVHJlZUhvc3RJ
bXBsUHJveHkoKSA9IDA7CisKK3ByaXZhdGU6CisgICAgQ0NMYXllclRyZWVIb3N0Q2xpZW50KiBt
X2NsaWVudDsKKyAgICBpbnQgbV9mcmFtZU51bWJlcjsKKyAgICBPd25QdHI8Q0NMYXllclRyZWVI
b3N0SW1wbFByb3h5PiBtX3Byb3h5OworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmNhMjIwOWI3ZTkxMjJkMmNlYzM4
OWE4ZmViZDNjNDU1NzRjZjJlOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC0w
LDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1
ZGUgIkNDTGF5ZXJUcmVlSG9zdEltcGwuaCIKKworI2luY2x1ZGUgIkNDTGF5ZXJUcmVlSG9zdC5o
IgorI2luY2x1ZGUgIkNDVGhyZWFkVGFzay5oIgorI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKKyNp
bmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJlZUhvc3RJbXBsKENDTGF5ZXJUcmVlSG9zdEltcGxD
bGllbnQqIGNsaWVudCkKKyAgICA6IG1fc291cmNlRnJhbWVOdW1iZXIoLTEpCisgICAgLCBtX2Zy
YW1lTnVtYmVyKDApCisgICAgLCBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX2NvbW1pdFBlbmRp
bmcoZmFsc2UpCisgICAgLCBtX3JlZHJhd0VucXVldWVkKGZhbHNlKQoreworfQorCitDQ0xheWVy
VHJlZUhvc3RJbXBsOjp+Q0NMYXllclRyZWVIb3N0SW1wbCgpCit7CisgICAgVFJBQ0VfRVZFTlQo
IkNDTGF5ZXJUcmVlSG9zdEltcGw6On5DQ0xheWVyVHJlZUhvc3RJbXBsKCkiLCB0aGlzLCAwKTsK
K30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpiZWdpbkNvbW1pdCgpCit7Cit9CisKK3Zv
aWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29tbWl0Q29tcGxldGUoKQoreworICAgIG1fY29tbWl0
UGVuZGluZyA9IGZhbHNlOworICAgIHNldE5lZWRzUmVkcmF3KCk7Cit9CisKK3ZvaWQgQ0NMYXll
clRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycygpCit7CisgICAgLy8gSWYgYSBjb21taXQgaXMgcGVu
ZGluZywgZG8gbm90IGRyYXcuIFRoaXMgaXMgYSB0ZW1wb3JhcnkgcmVzdHJpY3Rpb24gdGhhdAor
ICAgIC8vIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGRyYXdMYXllcnMgaXMgY3VycmVudGx5IGEgYmxv
Y2tpbmcgb3BlcmF0aW9uIG9uIHRoZSBtYWluIHRocmVhZC4KKyAgICBpZiAobV9jb21taXRQZW5k
aW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0
SW1wbDo6ZHJhd0xheWVycyIsIHRoaXMsIDApOworICAgIEFTU0VSVChtX3JlZHJhd0VucXVldWVk
KTsKKyAgICBtX3JlZHJhd0VucXVldWVkID0gZmFsc2U7CisKKyAgICB7CisgICAgICAgIFRSQUNF
X0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzQW5kUHJlc2VudCIsIHRoaXMs
IDApOworICAgICAgICBkcmF3TGF5ZXJzQW5kUHJlc2VudCgpOworICAgIH0KKworICAgIG1fZnJh
bWVOdW1iZXIgKz0gMTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXROZWVkc0Nv
bW1pdEFuZFJlZHJhdygpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6
OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3IiwgdGhpcywgMCk7CisKKyAgICAvLyBGSVhNRTogbW92
ZSB0aGUgcmVxdWVzdEZyYW1lQW5kQ29tbWl0IG91dCBmcm9tIGhlcmUgb25jZSB3ZSBhZGQgZnJh
bWVyYXRlIHRocm90dGxpbmcvYW5pbWF0aW9uCisgICAgZG91YmxlIGZyYW1lQmVnaW5UaW1lID0g
Y3VycmVudFRpbWUoKTsKKyAgICBtX2NvbW1pdFBlbmRpbmcgPSB0cnVlOworICAgIG1fY2xpZW50
LT5yZXF1ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKGZyYW1lQmVnaW5UaW1lKTsKK30KKwor
dm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXROZWVkc1JlZHJhdygpCit7CisgICAgaWYgKG1f
cmVkcmF3RW5xdWV1ZWQgfHwgbV9jb21taXRQZW5kaW5nKQorICAgICAgICByZXR1cm47CisKKyAg
ICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNSZWRyYXciLCB0aGlz
LCAwKTsKKyAgICBtX3JlZHJhd0VucXVldWVkID0gdHJ1ZTsKKyAgICBtX2NsaWVudC0+cG9zdERy
YXdMYXllcnNUYXNrT25DQ1RocmVhZCgpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDA5YTJiYzUxYzc0MWVkOTBiYTI5NGQxOGM2ZGJlZmI0
NjI2ZjQ3MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApAQCAtMCwwICsxLDc1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisg
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIENDTGF5ZXJUcmVlSG9zdEltcGxfaAorI2RlZmluZSBDQ0xh
eWVyVHJlZUhvc3RJbXBsX2gKKworI2luY2x1ZGUgImNjL0NDVGhyZWFkLmgiCisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFByb3ZpZGVzIHNjaGVkdWxpbmcgaW5mcmFzdHJ1Y3R1
cmUgZm9yIGEgQ0NMYXllclRyZWVIb3N0SW1wbAorY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbENs
aWVudCAgeworcHVibGljOgorICAgIHZpcnR1YWwgfkNDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQo
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcG9zdERyYXdMYXllcnNUYXNrT25DQ1RocmVhZCgpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdEZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZChkb3Vi
bGUgZnJhbWVCZWdpblRpbWUpID0gMDsKK307CisKKy8vIENDTGF5ZXJUcmVlSG9zdEltcGwgb3du
cyB0aGUgQ0NMYXllckltcGwgdHJlZSBhcyB3ZWxsIGFzIGFzc29jaWF0ZWQgcmVuZGVyaW5nIHN0
YXRlCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShDQ0xheWVyVHJlZUhvc3RJbXBsKTsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBDQ0xheWVyVHJl
ZUhvc3RJbXBsKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqKTsKKyAgICB2aXJ0dWFsIH5DQ0xh
eWVyVHJlZUhvc3RJbXBsKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21taXQoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgY29tbWl0Q29tcGxldGUoKTsKKworICAgIHZvaWQgZHJhd0xheWVycygp
OworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGF5ZXJzQW5kUHJlc2VudCgpID0gMDsKKworICAgIGlu
dCBmcmFtZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVOdW1iZXI7IH0KKworICAgIHZv
aWQgc2V0TmVlZHNSZWRyYXcoKTsKKyAgICB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7
CisKKyAgICBpbnQgc291cmNlRnJhbWVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZUZy
YW1lTnVtYmVyOyB9CisgICAgdm9pZCBzZXRTb3VyY2VGcmFtZU51bWJlcihpbnQgZnJhbWVOdW1i
ZXIpIHsgbV9zb3VyY2VGcmFtZU51bWJlciA9IGZyYW1lTnVtYmVyOyB9CisKK3Byb3RlY3RlZDoK
KyAgICBpbnQgbV9zb3VyY2VGcmFtZU51bWJlcjsKKyAgICBpbnQgbV9mcmFtZU51bWJlcjsKKwor
cHJpdmF0ZToKKyAgICBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBtX2NsaWVudDsKKyAgICBi
b29sIG1fY29tbWl0UGVuZGluZzsKKyAgICBib29sIG1fcmVkcmF3RW5xdWV1ZWQ7Cit9OworCit9
OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHku
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjQ0NWJlMjBlODdkN2UzZjkzYmYyYmRlYjE0ZTI5NjkwMWE1ZmZkY2EK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuY3BwCkBAIC0wLDAgKzEsMjEyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisg
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJDQ0xheWVyVHJl
ZUhvc3RJbXBsUHJveHkuaCIKKworI2luY2x1ZGUgIkNDTGF5ZXJUcmVlSG9zdC5oIgorI2luY2x1
ZGUgIkNDTWFpblRocmVhZFRhc2suaCIKKyNpbmNsdWRlICJDQ1RocmVhZFRhc2suaCIKKyNpbmNs
dWRlICJUcmFjZUV2ZW50LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworbmFtZXNwYWNlIHsKK0NDVGhyZWFkKiBjY1RocmVhZDsKK2ludCBudW1Qcm94
aWVzID0gMDsKK30KKworQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpDQ0xheWVyVHJlZUhvc3RJ
bXBsUHJveHkoQ0NMYXllclRyZWVIb3N0KiBsYXllclRyZWVIb3N0KQorICAgIDogbV9jb21taXRQ
ZW5kaW5nKGZhbHNlKQorICAgICwgbV9sYXllclRyZWVIb3N0KGxheWVyVHJlZUhvc3QpCit7Cisg
ICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6Q0NMYXllclRyZWVIb3N0
SW1wbFByb3h5IiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBu
dW1Qcm94aWVzICs9IDE7CisgICAgaWYgKCFjY1RocmVhZCkKKyAgICAgICAgY2NUaHJlYWQgPSBD
Q1RocmVhZDo6Y3JlYXRlKCkubGVha1B0cigpOworfQorCisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0
SW1wbFByb3h5OjpzdGFydCgpCit7CisgICAgLy8gQ3JlYXRlIExheWVyVHJlZUhvc3RJbXBsLgor
ICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CisgICAgY2NUaHJlYWQtPnBvc3RUYXNr
KGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppbml0
SW1wbE9uQ0NUaHJlYWQsICZjb21wbGV0aW9uKSk7CisgICAgY29tcGxldGlvbi53YWl0KCk7Cit9
CisKK0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6fkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSgp
Cit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6fkNDTGF5ZXJU
cmVlSG9zdEltcGxQcm94eSIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisgICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3RJbXBsICYmICFtX2xheWVyVHJlZUhvc3QpOwor
CisgICAgbnVtUHJveGllcyAtPSAxOworICAgIGlmICghbnVtUHJveGllcykgeworICAgICAgICBk
ZWxldGUgY2NUaHJlYWQ7CisgICAgICAgIGNjVGhyZWFkID0gMDsKKyAgICB9Cit9CisKK3ZvaWQg
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAobV9jb21taXRQZW5kaW5nKQorICAg
ICAgICByZXR1cm47CisKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5
OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdyIsIHRoaXMsIDApOworICAgIG1fY29tbWl0UGVuZGlu
ZyA9IHRydWU7CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlz
LCAmQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NU
aHJlYWQpKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVk
cmF3KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGNjVGhyZWFkLT5wb3N0
VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6
c2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKSk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1w
bFByb3h5OjpzdG9wKCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFBy
b3h5OjpzdG9wIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBD
Q0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOworICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVh
dGVDQ1RocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6bGF5ZXJUcmVl
SG9zdENsb3NlZE9uQ0NUaHJlYWQsICZjb21wbGV0aW9uKSk7CisgICAgY29tcGxldGlvbi53YWl0
KCk7CisKKyAgICBtX2xheWVyVHJlZUhvc3QgPSAwOworICAgIEFTU0VSVCghbV9sYXllclRyZWVI
b3N0SW1wbCk7IC8vIGxheWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkKCkgc2hvdWxkIGhhdmUg
YWxyZWFkeSBiZWVuIGNhbGxlZAorfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6
cG9zdERyYXdMYXllcnNUYXNrT25DQ1RocmVhZCgpCit7CisgICAgQVNTRVJUKGlzQ0NUaHJlYWQo
KSk7CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdEltcGwpCisgICAgICAgIGNjVGhyZWFkLT5wb3N0
VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6
ZHJhd0xheWVyc09uQ0NUaHJlYWQpKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQoZG91YmxlIGZyYW1lQmVnaW5UaW1l
KQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJlcXVlc3RG
cmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNDQ1RocmVh
ZCgpKTsKKyAgICBpZiAobV9sYXllclRyZWVIb3N0SW1wbCkKKyAgICAgICAgQ0NNYWluVGhyZWFk
Ojpwb3N0VGFzayhjcmVhdGVNYWluVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1w
bFByb3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21taXQsIGZyYW1lQmVnaW5UaW1lKSk7Cit9CisKK2Jv
b2wgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppc01haW5UaHJlYWQoKSBjb25zdAoreworICAg
IHJldHVybiA6OmlzTWFpblRocmVhZCgpOworfQorCitib29sIENDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eTo6aXNDQ1RocmVhZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGN1cnJlbnRUaHJlYWQoKSA9
PSBjY1RocmVhZC0+dGhyZWFkSUQoKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdChkb3VibGUgZnJhbWVCZWdpblRpbWUpCit7CisgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6
cmVxdWVzdEZyYW1lQW5kQ29tbWl0IiwgdGhpcywgMCk7CisgICAgeworICAgICAgICBUUkFDRV9F
VkVOVCgiQ0NMYXllclRyZWVIb3N0OjphbmltYXRlQW5kTGF5b3V0IiwgdGhpcywgMCk7CisgICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdC0+YW5pbWF0ZUFuZExheW91dChmcmFtZUJlZ2luVGltZSk7Cisg
ICAgfQorCisgICAgbV9jb21taXRQZW5kaW5nID0gZmFsc2U7CisgICAgeworICAgICAgICBUUkFD
RV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMiLCB0aGlzLCAwKTsKKyAgICAg
ICAgbV9sYXllclRyZWVIb3N0LT51cGRhdGVMYXllcnMoKTsKKyAgICB9CisKKyAgICBPd25QdHI8
Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyPiBjb21taXR0ZXIgPSBtX2xheWVyVHJlZUhvc3QtPmJl
Z2luQ29tbWl0KCk7CisKKyAgICAvLyBCbG9ja2luZyBjYWxsIHRvIENDTGF5ZXJUcmVlSG9zdElt
cGxQcm94eTo6cGVyZm9ybUNvbW1pdAorICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247
CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXll
clRyZWVIb3N0SW1wbFByb3h5Ojpjb21taXRPbkNDVGhyZWFkLCBjb21taXR0ZXIuZ2V0KCksICZj
b21wbGV0aW9uKSk7CisgICAgY29tcGxldGlvbi53YWl0KCk7CisKKyAgICBjb21taXR0ZXIuY2xl
YXIoKTsKKworICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0Q29tcGxldGUoKTsKK30KKwordm9p
ZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQoQ0NMYXllclRyZWVI
b3N0Q29tbWl0dGVyKiBjb21taXR0ZXIsIENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQor
eworICAgIEFTU0VSVChpc0NDVGhyZWFkKCkpOworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJl
ZUhvc3RJbXBsUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICBtX2xheWVy
VHJlZUhvc3RJbXBsLT5iZWdpbkNvbW1pdCgpOworICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQo
IkNDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0IiwgdGhpcywgMCk7CisgICAgICAgIGNvbW1pdHRlci0+
Y29tbWl0KG1fbGF5ZXJUcmVlSG9zdCwgbV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSk7CisgICAg
fQorICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOworCisgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+
Y29tbWl0Q29tcGxldGUoKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmRy
YXdMYXllcnNPbkNDVGhyZWFkKCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0
SW1wbFByb3h5OjpkcmF3TGF5ZXJzT25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChp
c0NDVGhyZWFkKCkpOworICAgIGlmIChtX2xheWVyVHJlZUhvc3RJbXBsKQorICAgICAgICBtX2xh
eWVyVHJlZUhvc3RJbXBsLT5kcmF3TGF5ZXJzKCk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0
SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQoKQoreworICAgIFRS
QUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVk
cmF3T25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc0NDVGhyZWFkKCkgJiYgbV9s
YXllclRyZWVIb3N0SW1wbCk7CisgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+c2V0TmVlZHNDb21t
aXRBbmRSZWRyYXcoKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5l
ZWRzUmVkcmF3T25DQ1RocmVhZCgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eTo6c2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkIiwgdGhpcywgMCk7CisgICAgQVNT
RVJUKGlzQ0NUaHJlYWQoKSAmJiBtX2xheWVyVHJlZUhvc3RJbXBsKTsKKyAgICBtX2xheWVyVHJl
ZUhvc3RJbXBsLT5zZXROZWVkc1JlZHJhdygpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdElt
cGxQcm94eTo6aW5pdEltcGxPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9u
KQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmluaXRJbXBs
T25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc0NDVGhyZWFkKCkpOworICAgIG1f
bGF5ZXJUcmVlSG9zdEltcGwgPSBjcmVhdGVMYXllclRyZWVIb3N0SW1wbCgpOworICAgIGNvbXBs
ZXRpb24tPnNpZ25hbCgpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6bGF5
ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24p
Cit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6bGF5ZXJUcmVl
SG9zdENsb3NlZE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNDQ1RocmVhZCgp
KTsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLmNsZWFyKCk7CisgICAgY29tcGxldGlvbi0+c2ln
bmFsKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMTc5ZjU4YTY2OWVhYTUzMmQzYTcwMDFlMDkzNzkxMmRmNWVkYzU0Nwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5X2gKKyNkZWZpbmUgQ0NM
YXllclRyZWVIb3N0SW1wbFByb3h5X2gKKworI2luY2x1ZGUgImNjL0NDQ29tcGxldGlvbkV2ZW50
LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgorI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ0xheWVyVHJlZUhvc3Q7
CitjbGFzcyBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI7CisKK2NsYXNzIENDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eSA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50IHsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIH5DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkoKTsKKworICAgIHZvaWQgc2V0
TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICB2b2lkIHNldE5lZWRzUmVkcmF3KCk7CisKKyAg
ICB2b2lkIHN0YXJ0KCk7IC8vIE11c3QgYmUgY2FsbGVkIGJlZm9yZSB1c2luZyB0aGUgcHJveHku
CisgICAgdm9pZCBzdG9wKCk7IC8vIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBkZWxldGluZyB0aGUg
cHJveHkuCisKKyAgICAvLyBDQ0xheWVyVHJlZUhvc3RJbXBsQ2llbnQgLS0gY2FsbGVkIG9uIEND
VGhyZWFkCisgICAgdmlydHVhbCB2b2lkIHBvc3REcmF3TGF5ZXJzVGFza09uQ0NUaHJlYWQoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdEZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZChkb3VibGUg
ZnJhbWVCZWdpblRpbWUpOworCitwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQgQ0NMYXllclRyZWVI
b3N0SW1wbFByb3h5KENDTGF5ZXJUcmVlSG9zdCopOworICAgIHZpcnR1YWwgUGFzc093blB0cjxD
Q0xheWVyVHJlZUhvc3RJbXBsPiBjcmVhdGVMYXllclRyZWVIb3N0SW1wbCgpID0gMDsKKyAgICBD
Q0xheWVyVHJlZUhvc3QqIGhvc3QoKSBjb25zdCB7IHJldHVybiBtX2xheWVyVHJlZUhvc3Q7IH0K
KworcHJpdmF0ZToKKyAgICBib29sIGlzTWFpblRocmVhZCgpIGNvbnN0OworICAgIGJvb2wgaXND
Q1RocmVhZCgpIGNvbnN0OworCisgICAgLy8gQ2FsbGVkIG9uIENDTWFpblRocmVhZAorICAgIHZv
aWQgcmVxdWVzdEZyYW1lQW5kQ29tbWl0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CisKKyAgICAv
LyBDYWxsZWQgb24gQ0NUaHJlYWQKKyAgICB2b2lkIGNvbW1pdE9uQ0NUaHJlYWQoQ0NMYXllclRy
ZWVIb3N0Q29tbWl0dGVyKiwgQ0NDb21wbGV0aW9uRXZlbnQqKTsKKyAgICB2b2lkIGRyYXdMYXll
cnNPbkNDVGhyZWFkKCk7CisgICAgdm9pZCBpbml0SW1wbE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9u
RXZlbnQqKTsKKyAgICB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCgpOwor
ICAgIHZvaWQgc2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKCk7CisgICAgdm9pZCBsYXllclRyZWVI
b3N0Q2xvc2VkT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCopOworCisgICAgYm9vbCBtX2Nv
bW1pdFBlbmRpbmc7CisgICAgQ0NMYXllclRyZWVIb3N0KiBtX2xheWVyVHJlZUhvc3Q7CisgICAg
T3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IG1fbGF5ZXJUcmVlSG9zdEltcGw7Cit9OworCit9
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuY3BwCmluZGV4IDk1NjY1ODQ1YzU4YzQ4Y2EwNjIyMDAy
NDI0OGI3NDdhYmFiNzYwY2YuLmRlMTczYTEzNDk4MjRhZjkwZmFkY2U3ODE5MGZiYjgzY2M0MGVi
ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RocmVhZC5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJDQ1Ro
cmVhZC5oIgogCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCisjaW5jbHVkZSAi
VHJhY2VFdmVudC5oIgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KQEAg
LTY0LDYgKzY1LDcgQEAgdm9pZCogQ0NUaHJlYWQ6OmNvbXBvc2l0b3JUaHJlYWRTdGFydCh2b2lk
KiB1c2VyZGF0YSkKIAogdm9pZCogQ0NUaHJlYWQ6OnJ1bkxvb3AoKQogeworICAgIFRSQUNFX0VW
RU5UKCJDQ1RocmVhZDo6cnVuTG9vcCIsIHRoaXMsIDApOwogICAgIHsKICAgICAgICAgLy8gV2Fp
dCBmb3IgQ0NUaHJlYWQ6OnN0YXJ0KCkgdG8gY29tcGxldGUgdG8gaGF2ZSBtX3RocmVhZElECiAg
ICAgICAgIC8vIGVzdGFibGlzaGVkIGJlZm9yZSBzdGFydGluZyB0aGUgbWFpbiBsb29wLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBiYTEyYzYyNzU3MDAzZDJmZGI2MWJmMzQ1MGE0MWNk
ZTUzNDdlMzY2Li4zZjkzNzMzMzg0ZTU2NTUyOWY1NzllMGRiMWMxOTk4YmVjMzA5ZDY5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk5IEBACisyMDExLTA0LTE4ICBOYXQg
RHVjYSAgPG5kdWNhQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIEltcGxlbWVudCBDQ0xheWVyVHJlZUhvc3Qg
YW5kIENDTGF5ZXJUcmVlSG9zdEltcGwgcG9ydGlvbnMgb2YgdGhyZWFkZWQgY29tcG9zaXRvcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg0MDgKKwor
ICAgICAgICBTdHJlc3MgdGVzdHMgZm9yIENDTGF5ZXJUcmVlSG9zdC4KKworICAgICAgICAqIFdl
YktpdC5neXBpOgorICAgICAgICAqIHB1YmxpYy9XZWJXaWRnZXQuaDoKKyAgICAgICAgKFdlYktp
dDo6V2ViV2lkZ2V0OjpzY2hlZHVsZUNvbXBvc2l0ZSk6CisgICAgICAgICogc3JjL1dlYlZpZXdJ
bXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmFuaW1hdGUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6ZG9BbmltYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld0ltcGw6OnBhaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmFuaW1hdGVB
bmRMYXlvdXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Y29tcG9zaXRlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNjaGVkdWxlQ29tcG9zaXRlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlld0ltcGw6OnNldFJvb3RMYXllck5lZWRzRGlzcGxheSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6ZG9Db21wb3NpdGUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3SW1wbDo6Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyZWFsbG9jYXRlUmVuZGVyZXIpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3SW1wbDo6dXBkYXRlTGF5ZXJSZW5kZXJlclNldHRpbmdzKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnVwZGF0ZUxheWVyUmVuZGVyZXJWaWV3cG9ydCk6Cisg
ICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6CisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVI
b3N0VGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0OjpD
Q0xheWVyVHJlZUhvc3RUZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6
YW5pbWF0ZUFuZExheW91dCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3Q6OmJl
Z2luQ29tbWl0T25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3Q6
OmJlZ2luQ29tbWl0T25NYWluVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0
VGVzdDo6Y29tbWl0T25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRl
c3Q6OmNvbW1pdENvbXBsZXRlT25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVl
SG9zdFRlc3Q6OmNvbW1pdENvbXBsZXRlT25NYWluVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NM
YXllclRyZWVIb3N0VGVzdDo6ZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhyZWFkKToKKyAgICAg
ICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6dXBkYXRlTGF5ZXJzKToKKyAgICAgICAgKFdU
Rjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6b25CZWdpblRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xh
eWVyVHJlZUhvc3RUZXN0Ojpkb0VuZFRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhv
c3RUZXN0OjpvbkVuZFRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0Ojpy
dW5UZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6dGVzdFRpbWVvdXQp
OgorICAgICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdENsaWVudDo6TW9ja0xheWVyVHJlZUhv
c3RDbGllbnQpOgorICAgICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdENsaWVudDo6Y3JlYXRl
TGF5ZXJUcmVlSG9zdENvbnRleHQzRCk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0
Q2xpZW50OjphbmltYXRlQW5kTGF5b3V0KToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhv
c3RDb21taXR0ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0Q29t
bWl0dGVyOjpjb21taXQpOgorICAgICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdENvbW1pdHRl
cjo6TW9ja0xheWVyVHJlZUhvc3RDb21taXR0ZXIpOgorICAgICAgICAoV1RGOjpNb2NrTGF5ZXJU
cmVlSG9zdEltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0SW1w
bDo6YmVnaW5Db21taXQpOgorICAgICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdEltcGw6OmNv
bW1pdENvbXBsZXRlKToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3
TGF5ZXJzQW5kUHJlc2VudCk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0SW1wbDo6
TW9ja0xheWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3RJ
bXBsUHJveHk6OmNyZWF0ZSk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0SW1wbFBy
b3h5OjpjcmVhdGVMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRy
ZWVIb3N0SW1wbFByb3h5OjpNb2NrTGF5ZXJUcmVlSG9zdEltcGxQcm94eSk6CisgICAgICAgIChX
VEY6Ok1vY2tMYXllclRyZWVIb3N0OjpNb2NrTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXVEY6
Ok1vY2tMYXllclRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVIb3N0SW1wbFByb3h5KToKKyAgICAg
ICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVycyk6CisgICAgICAgIChXVEY6
Ok1vY2tMYXllclRyZWVIb3N0OjpiZWdpbkNvbW1pdCk6CisgICAgICAgIChXVEY6Ok1vY2tMYXll
clRyZWVIb3N0Ojpjb21taXRDb21wbGV0ZSk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9z
dFRlc3Q6OmRvQmVnaW5UZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6
ZW5kVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTaG9ydGxpdmVkMTo6
Q0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQxKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRy
ZWVIb3N0VGVzdFNob3J0bGl2ZWQxOjpiZWdpblRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVy
VHJlZUhvc3RUZXN0U2hvcnRsaXZlZDE6OmFmdGVyVGVzdCk6CisgICAgICAgIChXVEY6OlRFU1Rf
Rik6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTaG9ydGxpdmVkMjo6Q0NMYXll
clRyZWVIb3N0VGVzdFNob3J0bGl2ZWQyKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0
VGVzdFNob3J0bGl2ZWQyOjpiZWdpblRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhv
c3RUZXN0U2hvcnRsaXZlZDI6OmFmdGVyVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVl
SG9zdFRlc3RTaG9ydGxpdmVkMzo6Q0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQzKToKKyAg
ICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQzOjpiZWdpblRlc3QpOgor
ICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDM6OmFmdGVyVGVzdCk6
CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RDb21taXRpbmdXaXRoQ29udGludW91
c1JlZHJhdzo6Q0NMYXllclRyZWVIb3N0VGVzdENvbW1pdGluZ1dpdGhDb250aW51b3VzUmVkcmF3
KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdENvbW1pdGluZ1dpdGhDb250aW51
b3VzUmVkcmF3OjpiZWdpblRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0
Q29tbWl0aW5nV2l0aENvbnRpbnVvdXNSZWRyYXc6OmNvbW1pdENvbXBsZXRlT25DQ1RocmVhZCk6
CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RDb21taXRpbmdXaXRoQ29udGludW91
c1JlZHJhdzo6ZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6
Q0NMYXllclRyZWVIb3N0VGVzdENvbW1pdGluZ1dpdGhDb250aW51b3VzUmVkcmF3OjphZnRlclRl
c3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQxOjpD
Q0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQxKToKKyAgICAgICAgKFdURjo6Q0NMYXll
clRyZWVIb3N0VGVzdFNldE5lZWRzQ29tbWl0MTo6YmVnaW5UZXN0KToKKyAgICAgICAgKFdURjo6
Q0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzQ29tbWl0MTo6ZHJhd0xheWVyc0FuZFByZXNlbnRP
bkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzQ29t
bWl0MTo6Y29tbWl0T25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRl
c3RTZXROZWVkc0NvbW1pdDE6OmFmdGVyVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVl
SG9zdFRlc3RTZXROZWVkc0NvbW1pdDI6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc0NvbW1p
dDIpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQyOjpi
ZWdpblRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNDb21t
aXQyOjpkcmF3TGF5ZXJzQW5kUHJlc2VudE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ0xh
eWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQyOjpjb21taXRPbkNDVGhyZWFkKToKKyAgICAg
ICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzQ29tbWl0Mjo6YWZ0ZXJUZXN0KToK
KyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzUmVkcmF3OjpDQ0xheWVy
VHJlZUhvc3RUZXN0U2V0TmVlZHNSZWRyYXcpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhv
c3RUZXN0U2V0TmVlZHNSZWRyYXc6OmJlZ2luVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJU
cmVlSG9zdFRlc3RTZXROZWVkc1JlZHJhdzo6ZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhyZWFk
KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzUmVkcmF3Ojpjb21t
aXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRz
UmVkcmF3OjphZnRlclRlc3QpOgorICAgICAgICAqIHRlc3RzL0NDVGhyZWFkVGVzdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpURVNUKToKKwogMjAxMS0wNC0xNCAgQWRyaWVubmUgV2Fsa2VyICA8
ZW5uZUBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEphbWVzIFJvYmluc29uLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggYzIzYzllZGNiNDY4MmNiMDQwZWMzNjdm
MzdiNWVhODlmNzE5YjcxZC4uNGUyYTM1ZTFkMzg3YTRiNjZjOGI5NWJlMjE2ZGU4NjY4Mzc0MWRm
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC01Myw2ICs1Myw3IEBACiAgICAg
ICAgIF0sCiAgICAgICAgICd3ZWJraXRfdW5pdHRlc3RfZmlsZXMnOiBbCiAgICAgICAgICAgICAn
dGVzdHMvQXJlbmFUZXN0SGVscGVycy5oJywKKyAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyVHJl
ZUhvc3RUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NUaHJlYWRUYXNrVGVzdC5jcHAn
LAogICAgICAgICAgICAgJ3Rlc3RzL0NDVGhyZWFkVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rl
c3RzL0RyYWdJbWFnZVRlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYldpZGdldC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
V2lkZ2V0LmgKaW5kZXggMTI5MGFkODE2MmI2NjIzYmMzNTlhMGZjZmM1NjMxNDRmNmZjZjc0Yi4u
Y2E3YzI4ZGFlMmYxODlkNjQyNzcxMTk5ZWUwMzNhNGViNWUwNzNlYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0LmgKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0LmgKQEAgLTgxLDYgKzgxLDExIEBAIHB1YmxpYzoK
ICAgICAvLyB0aGUgcGFpbnQgbWV0aG9kIGFib3ZlLgogICAgIHZpcnR1YWwgdm9pZCBjb21wb3Np
dGUoYm9vbCBmaW5pc2gpID0gMDsKIAorICAgIC8vIEluIHRocmVhZGVkIGNvbXBvc2l0aW5nIG1v
ZGUsIGluZGljYXRlcyB0aGF0IHRoZSB3aWRnZXQgc2hvdWxkIHJlZHJhdworICAgIC8vIGl0c2Vs
ZiwgZm9yIGV4YW1wbGUgZHVlIHRvIHdpbmRvdyBkYW1hZ2UuIFRoZSByZWRyYXcgd2lsbCBiZWdp
bgorICAgIC8vIGFzeW5jaHJvbm91c2x5LgorICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBv
c2l0ZSgpICB7IH0KKwogICAgIC8vIENhbGxlZCB0byBpbmZvcm0gdGhlIFdlYldpZGdldCBvZiBh
IGNoYW5nZSBpbiB0aGVtZS4KICAgICAvLyBJbXBsZW1lbnRvcnMgdGhhdCBjYWNoZSByZW5kZXJl
ZCBjb3BpZXMgb2Ygd2lkZ2V0cyBuZWVkIHRvIHJlLXJlbmRlcgogICAgIC8vIG9uIHJlY2Vpdmlu
ZyB0aGlzIG1lc3NhZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNw
cAppbmRleCBlODlkMTA0NTkxZTJiODAxMjZiMjQ1MTRiYjM2YmM3NGNkZTJmYzMyLi41Njg0NDBi
ZjU5ZTRkNGQ1MzZlNTRlZWI3YWZjZGZkMzNiY2I2NmVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC05OTMsMTIgKzk5MywxNyBAQCB2b2lkIFdlYlZp
ZXdJbXBsOjpyZXNpemUoY29uc3QgV2ViU2l6ZSYgbmV3U2l6ZSkKIAogdm9pZCBXZWJWaWV3SW1w
bDo6YW5pbWF0ZSgpCiB7CisgICAgZG9BbmltYXRlKGN1cnJlbnRUaW1lKCkpOworfQorCit2b2lk
IFdlYlZpZXdJbXBsOjpkb0FuaW1hdGUoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQorewogI2lmIEVO
QUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKICAgICBXZWJGcmFtZUltcGwqIHdlYmZyYW1l
ID0gbWFpbkZyYW1lSW1wbCgpOwogICAgIGlmICh3ZWJmcmFtZSkgewogICAgICAgICBGcmFtZVZp
ZXcqIHZpZXcgPSB3ZWJmcmFtZS0+ZnJhbWVWaWV3KCk7CiAgICAgICAgIGlmICh2aWV3KQotICAg
ICAgICAgICAgdmlldy0+c2VydmljZVNjcmlwdGVkQW5pbWF0aW9ucyhjb252ZXJ0U2Vjb25kc1Rv
RE9NVGltZVN0YW1wKGN1cnJlbnRUaW1lKCkpKTsKKyAgICAgICAgICAgIHZpZXctPnNlcnZpY2VT
Y3JpcHRlZEFuaW1hdGlvbnMoY29udmVydFNlY29uZHNUb0RPTVRpbWVTdGFtcChmcmFtZUJlZ2lu
VGltZSkpOwogICAgIH0KICNlbmRpZgogfQpAQCAtMTA2OCw2ICsxMDczLDExIEBAIHZvaWQgV2Vi
Vmlld0ltcGw6OnBhaW50KFdlYkNhbnZhcyogY2FudmFzLCBjb25zdCBXZWJSZWN0JiByZWN0KQog
ewogICAgIGlmIChpc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSkgewogI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisg
ICAgICAgIC8vIEZJWE1FOiBmaXggcmVhZGJhY2sgaW4gdGhyZWFkZWQgY29tcG9zaXRpbmcgbW9k
ZQorICAgICAgICBBU1NFUlQoMCk7CisgICAgICAgIHJldHVybjsKKyNlbmRpZgogICAgICAgICBk
b0NvbXBvc2l0ZSgpOwogCiAgICAgICAgIC8vIElmIGEgY2FudmFzIHdhcyBwYXNzZWQgaW4sIHdl
IHVzZSBpdCB0byBncmFiIGEgY29weSBvZiB0aGUKQEAgLTEwOTYsOSArMTEwNiwxOSBAQCB2b2lk
IFdlYlZpZXdJbXBsOjp0aGVtZUNoYW5nZWQoKQogICAgIHZpZXctPmludmFsaWRhdGVSZWN0KGRh
bWFnZWRSZWN0KTsKIH0KIAorCit2b2lkIFdlYlZpZXdJbXBsOjphbmltYXRlQW5kTGF5b3V0KGRv
dWJsZSBmcmFtZUJlZ2luVGltZSkKK3sKKyAgICBkb0FuaW1hdGUoZnJhbWVCZWdpblRpbWUpOwor
ICAgIGxheW91dCgpOworfQorCiB2b2lkIFdlYlZpZXdJbXBsOjpjb21wb3NpdGUoYm9vbCBmaW5p
c2gpCiB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2lmIFVTRShUSFJFQURF
RF9DT01QT1NJVElORykKKyAgICByZXR1cm47IC8vIEZJWE1FOiB3aGVuIHRoZSBSZW5kZXJXaWRn
ZXQgaXMgdXBkYXRlZCwgc3dpdGNoIHRvIEFTU0VSVF9OT1RfUkVBQ0hFRC4KKyNlbHNlCiAgICAg
VFJBQ0VfRVZFTlQoIldlYlZpZXdJbXBsOjpjb21wb3NpdGUiLCB0aGlzLCAwKTsKICAgICBpZiAo
bV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0KSB7CiAgICAgICAgIC8vIHJlYWxsb2NhdGVSZW5k
ZXJlciB3aWxsIHJlcXVlc3QgYSByZXBhaW50IHdoZXRoZXIgb3Igbm90IGl0IHN1Y2NlZWRlZApA
QCAtMTEyOCw2ICsxMTQ4LDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6Y29tcG9zaXRlKGJvb2wgZmlu
aXNoKQogICAgICAgICBzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKTsKICAgICB9CiAjZW5kaWYK
KyNlbmRpZgogfQogCiBjb25zdCBXZWJJbnB1dEV2ZW50KiBXZWJWaWV3SW1wbDo6bV9jdXJyZW50
SW5wdXRFdmVudCA9IDA7CkBAIC0yMzI3LDkgKzIzNDgsMjQgQEAgdm9pZCBXZWJWaWV3SW1wbDo6
c2V0Um9vdEdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6UGxhdGZvcm1MYXllciogbGF5ZXIpCiAgICAg
ICAgIG1fY2xpZW50LT5kaWRJbnZhbGlkYXRlUmVjdChkYW1hZ2VkUmVjdCk7CiB9CiAKK3ZvaWQg
V2ViVmlld0ltcGw6OnNjaGVkdWxlQ29tcG9zaXRlKCkKK3sKKyNpZiBVU0UoVEhSRUFERURfQ09N
UE9TSVRJTkcpCisgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKKyAgICAgICAgbV9sYXllclJlbmRl
cmVyLT5zZXROZWVkc1JlZHJhdygpOworI2Vsc2UKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyNlbmRpZgorfQorCiB2b2lkIFdlYlZpZXdJbXBsOjpzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXko
KQogeworI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICBpZiAobV9sYXllclJlbmRl
cmVyKQorICAgICAgICBtX2xheWVyUmVuZGVyZXItPnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7
CisjZWxzZQogICAgIG1fY2xpZW50LT5zY2hlZHVsZUNvbXBvc2l0ZSgpOworI2VuZGlmCiB9CiAK
IApAQCAtMjQwMSwxNSArMjQzNywxMCBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmdBY3RpdmUoYm9vbCBhY3RpdmUpCiAKICAgICAgICAgbV9jbGllbnQtPmRp
ZEFjdGl2YXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyh0cnVlKTsKICAgICB9IGVsc2UgewotICAg
ICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBtX3RlbXBvcmFyeU9uc2Ny
ZWVuR3JhcGhpY3NDb250ZXh0M0QucmVsZWFzZSgpOwotICAgICAgICBpZiAoIWNvbnRleHQpIHsK
LSAgICAgICAgICAgIGNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKGdldENvbXBv
c2l0b3JDb250ZXh0QXR0cmlidXRlcygpLCBtX3BhZ2UtPmNocm9tZSgpLCBHcmFwaGljc0NvbnRl
eHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOwotICAgICAgICAgICAgaWYgKGNvbnRl
eHQpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVzaGFwZShzdGQ6Om1heCgxLCBtX3NpemUu
d2lkdGgpLCBzdGQ6Om1heCgxLCBtX3NpemUuaGVpZ2h0KSk7Ci0gICAgICAgIH0KLQotCi0gICAg
ICAgIG1fbGF5ZXJSZW5kZXJlciA9IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKGNvbnRl
eHQucmVsZWFzZSgpLCBXZWJWaWV3SW1wbENvbnRlbnRQYWludGVyOjpjcmVhdGUodGhpcykpOwor
ICAgICAgICBtX2xheWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSh0
aGlzLCBXZWJWaWV3SW1wbENvbnRlbnRQYWludGVyOjpjcmVhdGUodGhpcykpOworI2lmIFVTRShU
SFJFQURFRF9DT01QT1NJVElORykKKyAgICAgICAgdXBkYXRlTGF5ZXJSZW5kZXJlclNldHRpbmdz
KCk7CisjZW5kaWYKICAgICAgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikgewogICAgICAgICAgICAg
bV9jbGllbnQtPmRpZEFjdGl2YXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyh0cnVlKTsKICAgICAg
ICAgICAgIG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlID0gdHJ1ZTsKQEAgLTI0MzYs
MjQgKzI0NjcsMjkgQEAgdm9pZCBXZWJWaWV3SW1wbDo6ZG9Db21wb3NpdGUoKQogICAgIGlmICgh
cGFnZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2xheWVyUmVuZGVyZXItPnNldENvbXBv
c2l0ZU9mZnNjcmVlbihzZXR0aW5ncygpLT5jb21wb3NpdGVUb1RleHR1cmVFbmFibGVkKCkpOwot
Ci0gICAgQ0NIZWFkc1VwRGlzcGxheSogaHVkID0gbV9sYXllclJlbmRlcmVyLT5oZWFkc1VwRGlz
cGxheSgpOwotICAgIGh1ZC0+c2V0U2hvd0ZQU0NvdW50ZXIoc2V0dGluZ3MoKS0+c2hvd0ZQU0Nv
dW50ZXIoKSk7Ci0gICAgaHVkLT5zZXRTaG93UGxhdGZvcm1MYXllclRyZWUoc2V0dGluZ3MoKS0+
c2hvd1BsYXRmb3JtTGF5ZXJUcmVlKCkpOworICAgIHVwZGF0ZUxheWVyUmVuZGVyZXJTZXR0aW5n
cygpOworICAgIG1fbGF5ZXJSZW5kZXJlci0+dXBkYXRlTGF5ZXJzKCk7CisgICAgbV9sYXllclJl
bmRlcmVyLT5kcmF3TGF5ZXJzKCk7Cit9CiAKLSAgICBtX2xheWVyUmVuZGVyZXItPnVwZGF0ZUFu
ZERyYXdMYXllcnMoKTsKK1Bhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IFdlYlZpZXdJbXBs
OjpjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCkKK3sKKyAgICBSZWZQdHI8R3JhcGhpY3ND
b250ZXh0M0Q+IGNvbnRleHQgPSBtX3RlbXBvcmFyeU9uc2NyZWVuR3JhcGhpY3NDb250ZXh0M0Qu
cmVsZWFzZSgpOworICAgIGlmICghY29udGV4dCkgeworICAgICAgICBjb250ZXh0ID0gR3JhcGhp
Y3NDb250ZXh0M0Q6OmNyZWF0ZShnZXRDb21wb3NpdG9yQ29udGV4dEF0dHJpYnV0ZXMoKSwgbV9w
YWdlLT5jaHJvbWUoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2lu
ZG93KTsKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgICAgICBjb250ZXh0LT5yZXNoYXBl
KHN0ZDo6bWF4KDEsIG1fc2l6ZS53aWR0aCksIHN0ZDo6bWF4KDEsIG1fc2l6ZS5oZWlnaHQpKTsK
KyAgICB9CisgICAgcmV0dXJuIGNvbnRleHQ7CiB9CiAKIHZvaWQgV2ViVmlld0ltcGw6OnJlYWxs
b2NhdGVSZW5kZXJlcigpCiB7Ci0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBuZXdDb250
ZXh0ID0gbV90ZW1wb3JhcnlPbnNjcmVlbkdyYXBoaWNzQ29udGV4dDNELmdldCgpOwotICAgIFdl
YkdyYXBoaWNzQ29udGV4dDNEKiB3ZWJDb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29udGV4dDNEKG5ld0NvbnRleHQuZ2V0KCkpOwotICAgIGlm
ICghbmV3Q29udGV4dCB8fCAhd2ViQ29udGV4dCB8fCB3ZWJDb250ZXh0LT5pc0NvbnRleHRMb3N0
KCkpCi0gICAgICAgIG5ld0NvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKAotICAg
ICAgICAgICAgZ2V0Q29tcG9zaXRvckNvbnRleHRBdHRyaWJ1dGVzKCksIG1fcGFnZS0+Y2hyb21l
KCksIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7CiAgICAg
Ly8gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSBtaWdodCBmYWlsIGFuZCByZXR1cm4gMCwgaW4g
dGhhdCBjYXNlIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlIHdpbGwgYWxzbyByZXR1cm4g
MC4KLSAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyID0gTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUobmV3Q29udGV4dCwgV2ViVmlld0ltcGxDb250ZW50
UGFpbnRlcjo6Y3JlYXRlKHRoaXMpKTsKKyAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVt
PiBsYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUodGhpcywgV2Vi
Vmlld0ltcGxDb250ZW50UGFpbnRlcjo6Y3JlYXRlKHRoaXMpKTsKKyNpZiBVU0UoVEhSRUFERURf
Q09NUE9TSVRJTkcpCisgICAgdXBkYXRlTGF5ZXJSZW5kZXJlclNldHRpbmdzKCk7CisjZW5kaWYK
IAogICAgIC8vIFJlYXR0YWNoIHRoZSByb290IGxheWVyLiAgQ2hpbGQgbGF5ZXJzIHdpbGwgZ2V0
IHJlYXR0YWNoZWQgYXMgYSBzaWRlIGVmZmVjdCBvZiB1cGRhdGVMYXllcnNSZWN1cnNpdmUuCiAg
ICAgaWYgKGxheWVyUmVuZGVyZXIpIHsKQEAgLTI0NjQsNyArMjUwMCwxMCBAQCB2b2lkIFdlYlZp
ZXdJbXBsOjpyZWFsbG9jYXRlUmVuZGVyZXIoKQogICAgICAgICAvLyByZXNoYXBlIHNob3VsZCBy
ZWFsbHkgYmUgZXh0cmFjdGVkIGludG8gb25lIGZ1bmN0aW9uOyBpdCBpcyBub3QKICAgICAgICAg
Ly8gaW1tZWRpYXRlbHkgb2J2aW91cyB0aGF0IEdyYXBoaWNzQ29udGV4dDNEIG9iamVjdCB3aWxs
IG5vdAogICAgICAgICAvLyBmdW5jdGlvbiBwcm9wZXJseSB1bnRpbCBpdHMgcmVzaGFwZSBtZXRo
b2QgaXMgY2FsbGVkLgotICAgICAgICBuZXdDb250ZXh0LT5yZXNoYXBlKHN0ZDo6bWF4KDEsIG1f
c2l6ZS53aWR0aCksIHN0ZDo6bWF4KDEsIG1fc2l6ZS5oZWlnaHQpKTsKKyAgICAgICAgbGF5ZXJS
ZW5kZXJlci0+Y29udGV4dCgpLT5yZXNoYXBlKHN0ZDo6bWF4KDEsIG1fc2l6ZS53aWR0aCksIHN0
ZDo6bWF4KDEsIG1fc2l6ZS5oZWlnaHQpKTsKKyNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcp
CisgICAgICAgIHVwZGF0ZUxheWVyUmVuZGVyZXJTZXR0aW5ncygpOworI2VuZGlmCiAgICAgICAg
IHNldFJvb3RHcmFwaGljc0xheWVyKG1fbGF5ZXJSZW5kZXJlci0+cm9vdExheWVyKCkpOwogICAg
ICAgICAvLyBGb3JjZXMgVmlld0hvc3RNc2dfRGlkQWN0aXZhdGVBY2NlbGVyYXRlZENvbXBvc2l0
aW5nIHRvIGJlIHNlbnQgc28KICAgICAgICAgLy8gdGhhdCB0aGUgYnJvd3NlciBwcm9jZXNzIGNh
biByZWFjcXVpcmUgc3VyZmFjZXMuCkBAIC0yNDc0LDkgKzI1MTMsMjIgQEAgdm9pZCBXZWJWaWV3
SW1wbDo6cmVhbGxvY2F0ZVJlbmRlcmVyKCkKIH0KICNlbmRpZgogCit2b2lkIFdlYlZpZXdJbXBs
Ojp1cGRhdGVMYXllclJlbmRlcmVyU2V0dGluZ3MoKQoreworICAgIGlmICghbV9sYXllclJlbmRl
cmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2xheWVyUmVuZGVyZXItPnNldENvbXBvc2l0
ZU9mZnNjcmVlbihzZXR0aW5ncygpLT5jb21wb3NpdGVUb1RleHR1cmVFbmFibGVkKCkpOworCisg
ICAgQ0NIZWFkc1VwRGlzcGxheSogaHVkID0gbV9sYXllclJlbmRlcmVyLT5oZWFkc1VwRGlzcGxh
eSgpOworICAgIGh1ZC0+c2V0U2hvd0ZQU0NvdW50ZXIoc2V0dGluZ3MoKS0+c2hvd0ZQU0NvdW50
ZXIoKSk7CisgICAgaHVkLT5zZXRTaG93UGxhdGZvcm1MYXllclRyZWUoc2V0dGluZ3MoKS0+c2hv
d1BsYXRmb3JtTGF5ZXJUcmVlKCkpOworfQorCiB2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVMYXll
clJlbmRlcmVyVmlld3BvcnQoKQogewotICAgIEFTU0VSVChtX2xheWVyUmVuZGVyZXIpOworICAg
IGlmICghbV9sYXllclJlbmRlcmVyKQorICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIXBhZ2Uo
KSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViVmlld0ltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBs
LmgKaW5kZXggZjEwMjAyZjc2ZGE2Y2RlMzI2NTkwOWI0ZmU2NWY3MGFhZGI4YmY5My4uOTdhMWQw
OGJjNGQwOWYwZjI0NWEwOWMxNzZmOTUwNGYwYmM3N2QwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJWaWV3SW1wbC5oCkBAIC01NSw2ICs1NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIGNsYXNzIENocm9taXVtRGF0YU9iamVjdDsKIGNsYXNzIERvY3VtZW50TG9hZGVyOwogY2xh
c3MgRnJhbWU7CitjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIGNsYXNzIEhpc3RvcnlJdGVtOwog
Y2xhc3MgSGl0VGVzdFJlc3VsdDsKIGNsYXNzIEtleWJvYXJkRXZlbnQ7CkBAIC04Niw3ICs4Nyw3
IEBAIGNsYXNzIFdlYk1vdXNlV2hlZWxFdmVudDsKIGNsYXNzIFdlYlNldHRpbmdzSW1wbDsKIGNs
YXNzIFdlYlRvdWNoRXZlbnQ7CiAKLWNsYXNzIFdlYlZpZXdJbXBsIDogcHVibGljIFdlYlZpZXcs
IHB1YmxpYyBSZWZDb3VudGVkPFdlYlZpZXdJbXBsPiB7CitjbGFzcyBXZWJWaWV3SW1wbCA6IHB1
YmxpYyBXZWJWaWV3LCBwdWJsaWMgV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Q2xpZW50LCBwdWJs
aWMgUmVmQ291bnRlZDxXZWJWaWV3SW1wbD4gewogcHVibGljOgogICAgIC8vIFdlYldpZGdldCBt
ZXRob2RzOgogICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpOwpAQCAtOTcsNiArOTgsNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFdlYkNhbnZhcyosIGNvbnN0IFdlYlJlY3QmKTsK
ICAgICB2aXJ0dWFsIHZvaWQgdGhlbWVDaGFuZ2VkKCk7CiAgICAgdmlydHVhbCB2b2lkIGNvbXBv
c2l0ZShib29sIGZpbmlzaCk7CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRlKCk7
CiAgICAgdmlydHVhbCBib29sIGhhbmRsZUlucHV0RXZlbnQoY29uc3QgV2ViSW5wdXRFdmVudCYp
OwogICAgIHZpcnR1YWwgdm9pZCBtb3VzZUNhcHR1cmVMb3N0KCk7CiAgICAgdmlydHVhbCB2b2lk
IHNldEZvY3VzKGJvb2wgZW5hYmxlKTsKQEAgLTE5Niw2ICsxOTgsMTEgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5hY3RpdmVGb3JlZ3Jv
dW5kQ29sb3IpOwogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtQ3VzdG9tQ29udGV4dE1lbnVBY3Rp
b24odW5zaWduZWQgYWN0aW9uKTsKIAorICAgIC8vIENDTGF5ZXJUcmVlSG9zdENsaWVudAorICAg
IHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7Cisg
ICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlTGF5ZXJUcmVl
SG9zdENvbnRleHQzRCgpOworCisKICAgICAvLyBXZWJWaWV3SW1wbAogCiAgICAgdm9pZCBzZXRJ
Z25vcmVJbnB1dEV2ZW50cyhib29sIG5ld1ZhbHVlKTsKQEAgLTMzOSw2ICszNDYsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKTsKICAgICB2b2lkIHNjcm9s
bFJvb3RMYXllclJlY3QoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KTsKICAgICB2b2lkIGludmFsaWRhdGVSb290TGF5
ZXJSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2b2lkIGRvVXBkYXRlQW5kQ29t
cG9zaXRlKCk7CiAjZW5kaWYKIAogICAgIC8vIFJldHVybnMgdGhlIG9uc2NyZWVuIDNEIGNvbnRl
eHQgdXNlZCBieSB0aGUgY29tcG9zaXRvci4gVGhpcyBpcwpAQCAtNDAyLDExICs0MTAsMTQgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgV2ViUG9pbnQmIHNjcmVlblBvaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBEcmFnQWN0aW9uKTsKIAorICAgIHZvaWQgZG9BbmltYXRlKGRv
dWJsZSBmcmFtZUJlZ2luVGltZSk7CisKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CiAgICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoYm9vbCk7CiAgICAg
dm9pZCBkb0NvbXBvc2l0ZSgpOwogICAgIHZvaWQgZG9QaXhlbFJlYWRiYWNrVG9DYW52YXMoV2Vi
Q2FudmFzKiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwogICAgIHZvaWQgcmVhbGxvY2F0ZVJl
bmRlcmVyKCk7CisgICAgdm9pZCB1cGRhdGVMYXllclJlbmRlcmVyU2V0dGluZ3MoKTsKICAgICB2
b2lkIHVwZGF0ZUxheWVyUmVuZGVyZXJWaWV3cG9ydCgpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjE3OTkxMmIxNGM2MGU2ZTRmYmJlMDg0YWM2N2QxNGFhOTYxZDU3NzMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRl
c3QuY3BwCkBAIC0wLDAgKzEsNTM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJjYy9DQ0xh
eWVyVHJlZUhvc3QuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVk
ZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgorI2luY2x1ZGUgImNjL0NDTWFpblRocmVhZFRh
c2suaCIKKyNpbmNsdWRlICJjYy9DQ1RocmVhZFRhc2suaCIKKyNpbmNsdWRlIDxndGVzdC9ndGVz
dC5oPgorI2luY2x1ZGUgPHdlYmtpdC9zdXBwb3J0L3dlYmtpdF9zdXBwb3J0Lmg+CisjaW5jbHVk
ZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5h
bWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIE1vY2tMYXllclRyZWVIb3N0Owor
Y2xhc3MgTW9ja0xheWVyVHJlZUhvc3RDbGllbnQ7CitjbGFzcyBNb2NrTGF5ZXJUcmVlSG9zdElt
cGw7CisKKy8vIFRoZSBDQ0xheWVyVHJlZUhvc3RUZXN0IHJ1bnMgd2l0aCB0aGUgbWFpbiBsb29w
IHJ1bm5pbmcuIEl0IGluc3RhbnRpYXRlcyBhIHNpbmdsZSBNb2NrTGF5ZXJUcmVlSG9zdCBhbmQg
YXNzb2NpYXRlZAorLy8gTW9ja0xheWVyVHJlZUhvc3RJbXBsL01vY2tMYXllclRyZWVIb3N0Q2xp
ZW50LgorLy8KKy8vIGJlZ2luVGVzdCgpIGlzIGNhbGxlZCBvbmNlIHRoZSBtYWluIG1lc3NhZ2Ug
bG9vcCBpcyBydW5uaW5nIGFuZCB0aGUgbGF5ZXIgdHJlZSBob3N0IGlzIGluaXRpYWxpemVkLgor
Ly8KKy8vIEtleSBzdGFnZXMgb2YgdGhlIGRyYXdpbmcgbG9vcCwgZS5nLiBkcmF3aW5nIG9yIGNv
bW1pdGluZywgcmVkaXJlY3QgdG8gQ0NMYXllclRyZWVIb3N0VGVzdCBtZXRob2RzIG9mIHNpbWls
YXIgbmFtZXMuCisvLyBUbyB0cmFjayB0aGUgY29tbWl0IHByb2Nlc3MsIG92ZXJyaWRlIHRoZXNl
IGZ1bmN0aW9ucy4KKy8vCisvLyBUaGUgdGVzdCBjb250aW51ZXMgdW50aWwgc29tZW9uZSBjYWxs
cyBlbmRUZXN0LiBlbmRUZXN0IGNhbiBiZSBjYWxsZWQgb24gYW55IHRocmVhZCwgYnV0IGJlIGF3
YXJlIHRoYXQKKy8vIGVuZGluZyB0aGUgdGVzdCBpcyBhbiBhc3luY2hyb25vdXMgcHJvY2Vzcy4K
K2NsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7CitwdWJs
aWM6CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdCgpCisgICAgICAgIDogbV9iZWdpbm5pbmcoZmFs
c2UpCisgICAgICAgICwgbV9lbmRXaGVuQmVnaW5SZXR1cm5zKGZhbHNlKQorICAgICAgICAsIG1f
cnVubmluZyhmYWxzZSkKKyAgICAgICAgLCBtX3RpbWVkT3V0KGZhbHNlKSB7IH0KKworICAgIHZp
cnR1YWwgdm9pZCBhZnRlclRlc3QoKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0
KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KE1vY2tMYXllclRyZWVI
b3N0Q2xpZW50KiBsYXllclRyZWVIb3N0LCBkb3VibGUgZnJhbWVCZWdpblRpbWUpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdE9uQ0NUaHJlYWQoTW9ja0xheWVyVHJlZUhvc3RJbXBs
KiBsYXllclRyZWVIb3N0SW1wbCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0T25N
YWluVGhyZWFkKE1vY2tMYXllclRyZWVIb3N0KiBsYXllclRyZWVIb3N0KSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgY29tbWl0T25DQ1RocmVhZChNb2NrTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9z
dCwgTW9ja0xheWVyVHJlZUhvc3RJbXBsKiBsYXllclRyZWVIb3N0SW1wbCkgeyB9CisgICAgdmly
dHVhbCB2b2lkIGNvbW1pdENvbXBsZXRlT25DQ1RocmVhZChNb2NrTGF5ZXJUcmVlSG9zdEltcGwq
IGxheWVyVHJlZUhvc3RJbXBsKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q29tcGxldGVP
bk1haW5UaHJlYWQoTW9ja0xheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QpIHsgfQorICAgIHZp
cnR1YWwgdm9pZCBkcmF3TGF5ZXJzQW5kUHJlc2VudE9uQ0NUaHJlYWQoTW9ja0xheWVyVHJlZUhv
c3RJbXBsKiBsYXllclRyZWVIb3N0SW1wbCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUxh
eWVycyhNb2NrTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCkgeyB9CisKKyAgICB2b2lkIGVu
ZFRlc3QoKTsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZG9CZWdpblRlc3QoKTsKKworICAgIHN0
YXRpYyB2b2lkIG9uQmVnaW5UZXN0KHZvaWQqIHNlbGYpCisgICAgeworICAgICAgICBzdGF0aWNf
Y2FzdDxDQ0xheWVyVHJlZUhvc3RUZXN0Kj4oc2VsZiktPmRvQmVnaW5UZXN0KCk7CisgICAgfQor
CisgICAgdm9pZCBkb0VuZFRlc3QoKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBv
bkVuZFRlc3Qodm9pZCogc2VsZikKKyAgICB7CisgICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdFRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxDQ0xh
eWVyVHJlZUhvc3RUZXN0Kj4oc2VsZik7CisgICAgICAgIHRlc3QtPm1fbGF5ZXJUcmVlSG9zdC5j
bGVhcigpOworICAgICAgICB0ZXN0LT5tX2NsaWVudC5jbGVhcigpOworICAgICAgICB3ZWJraXRf
c3VwcG9ydDo6UXVpdE1lc3NhZ2VMb29wKCk7CisgICAgfQorCisgICAgdm9pZCBydW5UZXN0KCkK
KyAgICB7CisgICAgICAgIHdlYmtpdF9zdXBwb3J0OjpQb3N0RGVsYXllZFRhc2soQ0NMYXllclRy
ZWVIb3N0VGVzdDo6b25CZWdpblRlc3QsIHN0YXRpY19jYXN0PHZvaWQqPih0aGlzKSwgMCk7Cisg
ICAgICAgIHdlYmtpdF9zdXBwb3J0OjpQb3N0RGVsYXllZFRhc2soQ0NMYXllclRyZWVIb3N0VGVz
dDo6dGVzdFRpbWVvdXQsIHN0YXRpY19jYXN0PHZvaWQqPih0aGlzKSwgNTAwMCk7CisgICAgICAg
IHdlYmtpdF9zdXBwb3J0OjpSdW5NZXNzYWdlTG9vcCgpOworICAgICAgICBtX3J1bm5pbmcgPSBm
YWxzZTsKKyAgICAgICAgYm9vbCB0aW1lZE91dCA9IG1fdGltZWRPdXQ7IC8vIFNhdmUgd2hldGhl
ciB3ZSdyZSB0aW1lZCBvdXQgaW4gY2FzZSBSdW5BbGxQZW5kaW5nTWVzc2FnZXMgaGFzIHRoZSB0
aW1lb3V0LgorICAgICAgICB3ZWJraXRfc3VwcG9ydDo6UnVuQWxsUGVuZGluZ01lc3NhZ2VzKCk7
CisgICAgICAgIGlmICh0aW1lZE91dCkgeworICAgICAgICAgICAgcHJpbnRmKCJUZXN0IHRpbWVk
IG91dCIpOworICAgICAgICAgICAgRkFJTCgpIDw8ICJUZXN0IHRpbWVkIG91dCI7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYWZ0ZXJUZXN0KCk7CisgICAgfQorCisg
ICAgc3RhdGljIHZvaWQgdGVzdFRpbWVvdXQodm9pZCogc2VsZikKKyAgICB7CisgICAgICAgIEND
TGF5ZXJUcmVlSG9zdFRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxDQ0xheWVyVHJlZUhvc3RUZXN0
Kj4oc2VsZik7CisgICAgICAgIGlmICghdGVzdC0+bV9ydW5uaW5nKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB0ZXN0LT5tX3RpbWVkT3V0ID0gdHJ1ZTsKKyAgICAgICAgdGVzdC0+ZW5k
VGVzdCgpOworICAgIH0KKworICAgIE11dGV4IG1fdHJhY2VzTG9jazsKKyAgICBWZWN0b3I8c3Rk
OjpzdHJpbmc+IG1fdHJhY2VzOworCisgICAgT3duUHRyPE1vY2tMYXllclRyZWVIb3N0Q2xpZW50
PiBtX2NsaWVudDsKKyAgICBSZWZQdHI8TW9ja0xheWVyVHJlZUhvc3Q+IG1fbGF5ZXJUcmVlSG9z
dDsKKworcHJpdmF0ZToKKyAgICBib29sIG1fYmVnaW5uaW5nOworICAgIGJvb2wgbV9lbmRXaGVu
QmVnaW5SZXR1cm5zOworICAgIGJvb2wgbV9ydW5uaW5nOworICAgIGJvb2wgbV90aW1lZE91dDsK
K307CisKK2NsYXNzIE1vY2tMYXllclRyZWVIb3N0Q2xpZW50IDogcHVibGljIENDTGF5ZXJUcmVl
SG9zdENsaWVudCB7CitwdWJsaWM6CisgICAgTW9ja0xheWVyVHJlZUhvc3RDbGllbnQoQ0NMYXll
clRyZWVIb3N0VGVzdCogdGVzdCkgOiBtX3Rlc3QodGVzdCkgeyB9CisKKyAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0Qo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmPEdyYXBoaWNzQ29udGV4dDNEPigwKTsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVC
ZWdpblRpbWUpCisgICAgeworICAgICAgICBtX3Rlc3QtPmFuaW1hdGVBbmRMYXlvdXQodGhpcywg
ZnJhbWVCZWdpblRpbWUpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDQ0xheWVyVHJlZUhvc3RU
ZXN0KiBtX3Rlc3Q7Cit9OworCitjbGFzcyBNb2NrTGF5ZXJUcmVlSG9zdENvbW1pdHRlciA6IHB1
YmxpYyBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
T3duUHRyPE1vY2tMYXllclRyZWVIb3N0Q29tbWl0dGVyPiBjcmVhdGUoQ0NMYXllclRyZWVIb3N0
VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgTW9ja0xheWVy
VHJlZUhvc3RDb21taXR0ZXIodGVzdCkpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBjb21t
aXQoQ0NMYXllclRyZWVIb3N0KiBob3N0LCBDQ0xheWVyVHJlZUhvc3RJbXBsKiBob3N0SW1wbCkK
KyAgICB7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcjo6Y29tbWl0KGhvc3QsIGhv
c3RJbXBsKTsKKyAgICAgICAgbV90ZXN0LT5jb21taXRPbkNDVGhyZWFkKHJlaW50ZXJwcmV0X2Nh
c3Q8TW9ja0xheWVyVHJlZUhvc3QqPihob3N0KSwgcmVpbnRlcnByZXRfY2FzdDxNb2NrTGF5ZXJU
cmVlSG9zdEltcGwqPihob3N0SW1wbCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNb2NrTGF5
ZXJUcmVlSG9zdENvbW1pdHRlcihDQ0xheWVyVHJlZUhvc3RUZXN0KiB0ZXN0KSA6IG1fdGVzdCh0
ZXN0KSB7IH0KKyAgICBDQ0xheWVyVHJlZUhvc3RUZXN0KiBtX3Rlc3Q7Cit9OworCitjbGFzcyBN
b2NrTGF5ZXJUcmVlSG9zdEltcGwgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0SW1wbCB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8TW9ja0xheWVyVHJlZUhvc3RJbXBsPiBjcmVhdGUo
Q0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogY2xpZW50LCBDQ0xheWVyVHJlZUhvc3RUZXN0KiB0
ZXN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBNb2NrTGF5ZXJUcmVlSG9z
dEltcGwoY2xpZW50LCB0ZXN0KSk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGJlZ2luQ29t
bWl0KCkKKyAgICB7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6OmJlZ2luQ29tbWl0KCk7
CisgICAgICAgIG1fdGVzdC0+YmVnaW5Db21taXRPbkNDVGhyZWFkKHRoaXMpOworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBjb21taXRDb21wbGV0ZSgpCisgICAgeworICAgICAgICBDQ0xheWVy
VHJlZUhvc3RJbXBsOjpjb21taXRDb21wbGV0ZSgpOworICAgICAgICBtX3Rlc3QtPmNvbW1pdENv
bXBsZXRlT25DQ1RocmVhZCh0aGlzKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xh
eWVyc0FuZFByZXNlbnQoKQorICAgIHsKKyAgICAgICAgbV90ZXN0LT5kcmF3TGF5ZXJzQW5kUHJl
c2VudE9uQ0NUaHJlYWQodGhpcyk7CisgICAgfQorCitwcml2YXRlOgorICAgIE1vY2tMYXllclRy
ZWVIb3N0SW1wbChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQsIENDTGF5ZXJUcmVl
SG9zdFRlc3QqIHRlc3QpCisgICAgICAgICAgICA6IENDTGF5ZXJUcmVlSG9zdEltcGwoY2xpZW50
KQorICAgICAgICAgICAgLCBtX3Rlc3QodGVzdCkKKyAgICB7CisgICAgfQorCisgICAgQ0NMYXll
clRyZWVIb3N0VGVzdCogbV90ZXN0OworfTsKKworY2xhc3MgTW9ja0xheWVyVHJlZUhvc3RJbXBs
UHJveHkgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5IHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc093blB0cjxNb2NrTGF5ZXJUcmVlSG9zdEltcGxQcm94eT4gY3JlYXRlKENDTGF5
ZXJUcmVlSG9zdCogaG9zdCwgQ0NMYXllclRyZWVIb3N0VGVzdCogdGVzdCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgTW9ja0xheWVyVHJlZUhvc3RJbXBsUHJveHkoaG9zdCwg
dGVzdCkpOworICAgIH0KKworICAgIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gY3Jl
YXRlTGF5ZXJUcmVlSG9zdEltcGwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE1vY2tMYXllclRy
ZWVIb3N0SW1wbDo6Y3JlYXRlKHRoaXMsIG1fdGVzdCk7CisgICAgfQorCitwcml2YXRlOgorICAg
IE1vY2tMYXllclRyZWVIb3N0SW1wbFByb3h5KENDTGF5ZXJUcmVlSG9zdCogaG9zdCwgQ0NMYXll
clRyZWVIb3N0VGVzdCogdGVzdCkKKyAgICAgICAgOiBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHko
aG9zdCkKKyAgICAgICAgLCBtX3Rlc3QodGVzdCkgeyB9CisKKyAgICBDQ0xheWVyVHJlZUhvc3RU
ZXN0KiBtX3Rlc3Q7Cit9OworCitjbGFzcyBNb2NrTGF5ZXJUcmVlSG9zdCA6IHB1YmxpYyBDQ0xh
eWVyVHJlZUhvc3QgeworcHVibGljOgorICAgIE1vY2tMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVl
SG9zdENsaWVudCogY2xpZW50LCBDQ0xheWVyVHJlZUhvc3RUZXN0KiB0ZXN0KQorICAgICAgICA6
IENDTGF5ZXJUcmVlSG9zdChjbGllbnQpCisgICAgICAgICwgbV90ZXN0KHRlc3QpIHsgfQorCisg
ICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eT4gY3JlYXRlTGF5
ZXJUcmVlSG9zdEltcGxQcm94eSgpCisgICAgeworICAgICAgICByZXR1cm4gTW9ja0xheWVyVHJl
ZUhvc3RJbXBsUHJveHk6OmNyZWF0ZSh0aGlzLCBtX3Rlc3QpOworICAgIH0KKworICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVMYXllcnMoKQorICAgIHsKKyAgICAgICAgbV90ZXN0LT51cGRhdGVMYXll
cnModGhpcyk7CisgICAgfQorCisgICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9z
dENvbW1pdHRlcj4gYmVnaW5Db21taXQoKQorICAgIHsKKyAgICAgICAgbV90ZXN0LT5iZWdpbkNv
bW1pdE9uTWFpblRocmVhZCh0aGlzKTsKKyAgICAgICAgcmV0dXJuIE1vY2tMYXllclRyZWVIb3N0
Q29tbWl0dGVyOjpjcmVhdGUobV90ZXN0KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY29t
bWl0Q29tcGxldGUoKQorICAgIHsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0Ojpjb21taXRDb21w
bGV0ZSgpOworICAgICAgICBtX3Rlc3QtPmNvbW1pdENvbXBsZXRlT25NYWluVGhyZWFkKHRoaXMp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBDQ0xheWVyVHJlZUhvc3RUZXN0KiBtX3Rlc3Q7Cit9
OworCit2b2lkIENDTGF5ZXJUcmVlSG9zdFRlc3Q6OmRvQmVnaW5UZXN0KCkKK3sKKyAgICBBU1NF
UlQoIW1fcnVubmluZyk7CisgICAgbV9ydW5uaW5nID0gdHJ1ZTsKKyAgICBtX2NsaWVudCA9IGFk
b3B0UHRyKG5ldyBNb2NrTGF5ZXJUcmVlSG9zdENsaWVudCh0aGlzKSk7CisgICAgbV9sYXllclRy
ZWVIb3N0ID0gYWRvcHRSZWYobmV3IE1vY2tMYXllclRyZWVIb3N0KG1fY2xpZW50LmdldCgpLCB0
aGlzKSk7CisgICAgbV9sYXllclRyZWVIb3N0LT5pbml0KCk7CisgICAgbV9iZWdpbm5pbmcgPSB0
cnVlOworICAgIGJlZ2luVGVzdCgpOworICAgIG1fYmVnaW5uaW5nID0gZmFsc2U7CisgICAgaWYg
KG1fZW5kV2hlbkJlZ2luUmV0dXJucykKKyAgICAgICAgb25FbmRUZXN0KHN0YXRpY19jYXN0PHZv
aWQqPih0aGlzKSk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0VGVzdDo6ZW5kVGVzdCgpCit7
CisgICAgLy8gSWYgd2UgYXJlIGNhbGxlZCBmcm9tIHRoZSBDQ1RocmVhZCwgcmUtY2FsbCBlbmRU
ZXN0IG9uIHRoZSBtYWluIHRocmVhZC4KKyAgICBpZiAoIWlzTWFpblRocmVhZCgpKQorICAgICAg
ICBDQ01haW5UaHJlYWQ6OnBvc3RUYXNrKGNyZWF0ZU1haW5UaHJlYWRUYXNrKHRoaXMsICZDQ0xh
eWVyVHJlZUhvc3RUZXN0OjplbmRUZXN0KSk7CisgICAgZWxzZSB7CisgICAgICAgIC8vIEZvciB0
aGUgY2FzZSB3aGVyZSB3ZSBlbmRUZXN0IGR1cmluZyBiZWdpblRlc3QoKSwgc2V0IGEgZmxhZyB0
byBpbmRpY2F0ZSB0aGF0CisgICAgICAgIC8vIHRoZSB0ZXN0IHNob3VsZCBlbmQgdGhlIHNlY29u
ZCBiZWdpblRlc3QgcmVnYWlucyBjb250cm9sLgorICAgICAgICBpZiAobV9iZWdpbm5pbmcpCisg
ICAgICAgICAgICBtX2VuZFdoZW5CZWdpblJldHVybnMgPSB0cnVlOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBvbkVuZFRlc3Qoc3RhdGljX2Nhc3Q8dm9pZCo+KHRoaXMpKTsKKyAgICB9Cit9
CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLyBTaG9ydGxpdmVkIGxheWVyVHJlZUhvc3RzIHNo
b3VsZG4ndCBkaWUuCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDEgOiBwdWJs
aWMgQ0NMYXllclRyZWVIb3N0VGVzdCB7CitwdWJsaWM6CisgICAgQ0NMYXllclRyZWVIb3N0VGVz
dFNob3J0bGl2ZWQxKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkKKyAgICB7
CisgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0
KCkKKyAgICB7CisgICAgfQorfTsKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZl
ZDEsIHJ1bikKK3sKKyAgICBydW5UZXN0KCk7Cit9CisKKy8vIFNob3J0bGl2ZWQgbGF5ZXJUcmVl
SG9zdHMgc2hvdWRuJ3QgZGllIHdpdGggYSBjb21taXQgaW4gZmxpZ2h0LgorY2xhc3MgQ0NMYXll
clRyZWVIb3N0VGVzdFNob3J0bGl2ZWQyIDogcHVibGljIENDTGF5ZXJUcmVlSG9zdFRlc3Qgewor
cHVibGljOgorICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RTaG9ydGxpdmVkMigpIHsgfQorCisgICAg
dmlydHVhbCB2b2lkIGJlZ2luVGVzdCgpCisgICAgeworICAgICAgICBtX2xheWVyVHJlZUhvc3Qt
PnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkKKyAgICB7CisgICAgfQorfTsKK1RFU1RfRihD
Q0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDIsIHJ1bikKK3sKKyAgICBydW5UZXN0KCk7Cit9
CisKKy8vIFNob3J0bGl2ZWQgbGF5ZXJUcmVlSG9zdHMgc2hvdWRuJ3QgZGllIHdpdGggYSByZWRy
YXcgaW4gZmxpZ2h0LgorY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQzIDogcHVi
bGljIENDTGF5ZXJUcmVlSG9zdFRlc3QgeworcHVibGljOgorICAgIENDTGF5ZXJUcmVlSG9zdFRl
c3RTaG9ydGxpdmVkMygpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGJlZ2luVGVzdCgpCisgICAg
eworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldE5lZWRzUmVkcmF3KCk7CisgICAgICAgIGVu
ZFRlc3QoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkKKyAgICB7Cisg
ICAgfQorfTsKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDMsIHJ1bikKK3sK
KyAgICBydW5UZXN0KCk7Cit9CisKKworLy8gQ29uc3RhbnRseSByZWRyYXdpbmcgbGF5ZXJUcmVl
SG9zdHMgc2hvdWxkbid0IGRpZSB3aGVuIHRoZXkgY29tbWl0CitjbGFzcyBDQ0xheWVyVHJlZUhv
c3RUZXN0Q29tbWl0aW5nV2l0aENvbnRpbnVvdXNSZWRyYXcgOiBwdWJsaWMgQ0NMYXllclRyZWVI
b3N0VGVzdCB7CitwdWJsaWM6CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdENvbW1pdGluZ1dpdGhD
b250aW51b3VzUmVkcmF3KCkKKyAgICAgICAgOiBtX251bUNvbXBsZXRlQ29tbWl0cygwKQorICAg
ICAgICAsIG1fbnVtRHJhd3MoMCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGJl
Z2luVGVzdCgpCisgICAgeworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldE5lZWRzQ29tbWl0
QW5kUmVkcmF3KCk7CisgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgY29tbWl0Q29tcGxldGVPbkNDVGhyZWFkKE1vY2tMYXllclRyZWVIb3N0SW1wbCogbGF5ZXJU
cmVlSG9zdEltcGwpCisgICAgeworICAgICAgICBtX251bUNvbXBsZXRlQ29tbWl0cyArPSAxOwor
ICAgICAgICBpZiAobV9udW1Db21wbGV0ZUNvbW1pdHMgPT0gMikKKyAgICAgICAgICAgIGVuZFRl
c3QoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVyc0FuZFByZXNlbnRPbkND
VGhyZWFkKE1vY2tMYXllclRyZWVIb3N0SW1wbCogbGF5ZXJUcmVlSG9zdEltcGwpCisgICAgewor
ICAgICAgICBpZiAobV9udW1EcmF3cyA9PSAxKQorICAgICAgICAgICAgbGF5ZXJUcmVlSG9zdElt
cGwtPnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgICAgIG1fbnVtRHJhd3MrKzsKKyAg
ICAgICAgbGF5ZXJUcmVlSG9zdEltcGwtPnNldE5lZWRzUmVkcmF3KCk7CisgICAgfQorCisgICAg
dmlydHVhbCB2b2lkIGFmdGVyVGVzdCgpCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICBp
bnQgbV9udW1Db21wbGV0ZUNvbW1pdHM7CisgICAgaW50IG1fbnVtRHJhd3M7Cit9OworVEVTVF9G
KENDTGF5ZXJUcmVlSG9zdFRlc3RDb21taXRpbmdXaXRoQ29udGludW91c1JlZHJhdywgcnVuKQor
eworICAgIHJ1blRlc3QoKTsKK30KKworCisKKy8vIFR3byBzZXROZWVkc0NvbW1pdHMgaW4gYSBy
b3cgc2hvdWxkIGxlYWQgdG8gYXQgbGVhc3QgMSBjb21taXQgYW5kIGF0IGxlYXN0IDEKKy8vIGRy
YXcgd2l0aCBmcmFtZSAwLgorY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzQ29tbWl0
MSA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0IHsKK3B1YmxpYzoKKyAgICBDQ0xheWVyVHJl
ZUhvc3RUZXN0U2V0TmVlZHNDb21taXQxKCkKKyAgICAgICAgOiBtX251bUNvbW1pdHMoMCkKKyAg
ICAgICAgLCBtX251bURyYXdzKDApCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBi
ZWdpblRlc3QoKQorICAgIHsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXROZWVkc0NvbW1p
dEFuZFJlZHJhdygpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldE5lZWRzQ29tbWl0QW5k
UmVkcmF3KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNBbmRQcmVzZW50
T25DQ1RocmVhZChNb2NrTGF5ZXJUcmVlSG9zdEltcGwqIGxheWVyVHJlZUhvc3RJbXBsKQorICAg
IHsKKyAgICAgICAgbV9udW1EcmF3cysrOworICAgICAgICBpZiAoIWxheWVyVHJlZUhvc3RJbXBs
LT5zb3VyY2VGcmFtZU51bWJlcigpKSAvLyBmcmFtZSAwCisgICAgICAgICAgICBlbmRUZXN0KCk7
CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGNvbW1pdE9uQ0NUaHJlYWQoTW9ja0xheWVyVHJl
ZUhvc3QqIGxheWVyVHJlZUhvc3QsIE1vY2tMYXllclRyZWVIb3N0SW1wbCogaW1wbCkKKyAgICB7
CisgICAgICAgIG1fbnVtQ29tbWl0cysrOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhZnRl
clRlc3QoKQorICAgIHsKKyAgICAgICAgRVhQRUNUX0dFKDEsIG1fbnVtQ29tbWl0cyk7CisgICAg
ICAgIEVYUEVDVF9HRSgxLCBtX251bURyYXdzKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgaW50
IG1fbnVtQ29tbWl0czsKKyAgICBpbnQgbV9udW1EcmF3czsKK307CitURVNUX0YoQ0NMYXllclRy
ZWVIb3N0VGVzdFNldE5lZWRzQ29tbWl0MSwgcnVuKQoreworICAgIHJ1blRlc3QoKTsKK30KKwor
CisvLyBBIHNldE5lZWRzQ29tbWl0IHNob3VsZCBsZWFkIHRvIDEgY29tbWl0LiBJc3N1aW5nIGEg
c2Vjb25kIGNvbW1pdCBhZnRlciB0aGF0CisvLyBmaXJzdCBjb21taXRlZCBmcmFtZSBkcmF3cyBz
aG91bGQgbGVhZCB0byBhbm90aGVyIGNvbW1pdC4KK2NsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3RT
ZXROZWVkc0NvbW1pdDIgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdCB7CitwdWJsaWM6Cisg
ICAgQ0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzQ29tbWl0MigpCisgICAgICAgIDogbV9udW1D
b21taXRzKDApCisgICAgICAgICwgbV9udW1EcmF3cygwKQorICAgIHsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkKKyAgICB7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+
c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJh
d0xheWVyc0FuZFByZXNlbnRPbkNDVGhyZWFkKE1vY2tMYXllclRyZWVIb3N0SW1wbCogbGF5ZXJU
cmVlSG9zdEltcGwpCisgICAgeworICAgICAgICBpZiAoIWxheWVyVHJlZUhvc3RJbXBsLT5zb3Vy
Y2VGcmFtZU51bWJlcigpKSAvLyBmcmFtZSAwCisgICAgICAgICAgICBsYXllclRyZWVIb3N0SW1w
bC0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICAgICAgZWxzZSBpZiAobGF5ZXJUcmVl
SG9zdEltcGwtPnNvdXJjZUZyYW1lTnVtYmVyKCkgPT0gMSkKKyAgICAgICAgICAgIGVuZFRlc3Qo
KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0T25DQ1RocmVhZChNb2NrTGF5ZXJU
cmVlSG9zdCogbGF5ZXJUcmVlSG9zdCwgTW9ja0xheWVyVHJlZUhvc3RJbXBsKiBpbXBsKQorICAg
IHsKKyAgICAgICAgbV9udW1Db21taXRzKys7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFm
dGVyVGVzdCgpCisgICAgeworICAgICAgICBFWFBFQ1RfRVEoMiwgbV9udW1Db21taXRzKTsKKyAg
ICAgICAgRVhQRUNUX0dFKDIsIG1fbnVtRHJhd3MpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBp
bnQgbV9udW1Db21taXRzOworICAgIGludCBtX251bURyYXdzOworfTsKK1RFU1RfRihDQ0xheWVy
VHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQyLCBydW4pCit7CisgICAgcnVuVGVzdCgpOworfQor
CisKKy8vIDEgc2V0TmVlZHNSZWRyYXcgc2hvdWxkIGxlYWQgdG8gYXQgbGVhc3QgMSBkcmF3IGJ1
dCBubyBjb21taXQuCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNSZWRyYXcgOiBw
dWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdCB7CitwdWJsaWM6CisgICAgQ0NMYXllclRyZWVIb3N0
VGVzdFNldE5lZWRzUmVkcmF3KCkKKyAgICAgICAgOiBtX251bUNvbW1pdHMoMCkKKyAgICAgICAg
LCBtX251bURyYXdzKDApCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpblRl
c3QoKQorICAgIHsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXROZWVkc1JlZHJhdygpOwor
ICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGF5ZXJzQW5kUHJlc2VudE9uQ0NUaHJlYWQo
TW9ja0xheWVyVHJlZUhvc3RJbXBsKiBsYXllclRyZWVIb3N0KQorICAgIHsKKyAgICAgICAgRVhQ
RUNUX0VRKC0xLCBsYXllclRyZWVIb3N0LT5zb3VyY2VGcmFtZU51bWJlcigpKTsKKyAgICAgICAg
RVhQRUNUX0VRKDAsIGxheWVyVHJlZUhvc3QtPmZyYW1lTnVtYmVyKCkpOworICAgICAgICBtX251
bURyYXdzICs9IDE7CisgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgY29tbWl0T25DQ1RocmVhZChNb2NrTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCwgTW9j
a0xheWVyVHJlZUhvc3RJbXBsKiBpbXBsKQorICAgIHsKKyAgICAgICAgbV9udW1Db21taXRzKys7
CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFmdGVyVGVzdCgpCisgICAgeworICAgICAgICBF
WFBFQ1RfR0UoMSwgbV9udW1EcmF3cyk7CisgICAgICAgIEVYUEVDVF9FUSgwLCBtX251bUNvbW1p
dHMpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBpbnQgbV9udW1Db21taXRzOworICAgIGludCBt
X251bURyYXdzOworfTsKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNSZWRyYXcs
IHJ1bikKK3sKKyAgICBydW5UZXN0KCk7Cit9CisKKworCit9IC8vIG5hbWVzcGFjZQorCisjZW5k
aWYgLy8gVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ1RocmVhZFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ1RocmVhZFRlc3QuY3BwCmluZGV4IDA0ZmJhNDY1MzNkYjc1ZGQ3M2Y2OGFiN2I3
YjJkNjAxZTdjYjQwNjcuLmZhYjM1NGVjMDBjOTczM2NjMjg1YTEyYjkwMGNjZjBmM2VlMmEzMWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaHJlYWRUZXN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGhyZWFkVGVzdC5jcHAKQEAg
LTUxLDYgKzUxLDcgQEAgcHVibGljOgogVEVTVChDQ1RocmVhZFRlc3QsIHBpbmdQb25nVXNpbmdD
b25kaXRpb24pCiB7CiAgICAgT3duUHRyPENDVGhyZWFkPiB0aHJlYWQgPSBDQ1RocmVhZDo6Y3Jl
YXRlKCk7CisKICAgICBQaW5nUG9uZ1VzaW5nQ29uZGl0aW9uIHRhcmdldDsKICAgICBDQ0NvbXBs
ZXRpb25FdmVudCBjb21wbGV0aW9uOwogICAgIHRocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJl
YWRUYXNrKCZ0YXJnZXQsICZQaW5nUG9uZ1VzaW5nQ29uZGl0aW9uOjpwaW5nLCAmY29tcGxldGlv
bikpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90257</attachid>
            <date>2011-04-19 14:45:51 -0700</date>
            <delta_ts>2011-04-21 12:06:45 -0700</delta_ts>
            <desc>Cleaned up</desc>
            <filename>bug-58408-20110419144545.patch</filename>
            <type>text/plain</type>
            <size>82418</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODQyMDgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyM2FjNDdhODIxMTY3MmFl
ZGM4YTUxOTA2YzA2YzQ0NWJiOTYzODUxLi4zOWU5ZDdjYjkwMmMwMTgwNmFmYmM3ZjcxNTA4ZGUw
OGU4MTBhNGFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODIgQEAKKzIwMTEtMDQtMTggIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50IENDTGF5ZXJUcmVlSG9zdCBh
bmQgQ0NMYXllclRyZWVIb3N0SW1wbCBwb3J0aW9ucyBvZiB0aHJlYWRlZCBjb21wb3NpdG9yCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODQwOAorCisg
ICAgICAgIENyZWF0ZSBDQ0xheWVyVHJlZUhvc3QgYW5kIENDTGF5ZXJUcmVlSG9zdEltcGwsIHdo
aWNoIGFyZSB0aGUgbWFpbgorICAgICAgICB0aHJlYWQgYW5kIGNvbXBvc2l0b3IgdGhyZWFkIGhh
bHZlcyBvZiBhIGNvbXBvc2l0ZWQgdmlldy4gQ29tbXVuaWNhdGlvbgorICAgICAgICBiZXR3ZWVu
IHRoZSB0d28gaXMgYmFzZWQgb24gdGhlIGRlc2lnbiB1c2VkIGluIEZpbGVTdHJlYW1Qcm94eS4K
KworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bUNvbW1pdHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyUmVuZGVyZXJDaHJvbWl1bUNvbW1pdHRlcjo6Y29tbWl0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bUNvbW1pdHRlcjo6TGF5ZXJSZW5kZXJlckNocm9taXVt
Q29tbWl0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6YmVn
aW5Db21taXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb21t
aXRDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBs
OjpMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJDaHJvbWl1bUltcGw6OmRyYXdMYXllcnNBbmRQcmVzZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bUltcGw6OmRyYXdMYXllcnNPbk1haW5UaHJlYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbFByb3h5OjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbFByb3h5OjpjcmVh
dGVMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW1JbXBsUHJveHk6OkxheWVyUmVuZGVyZXJDaHJvbWl1bUltcGxQcm94eSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZUxheWVyVHJlZUhvc3RJbXBs
UHJveHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
SGVhZHNVcERpc3BsYXkuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDSGVhZHNVcERpc3BsYXk6OmN1
cnJlbnRGcmFtZU51bWJlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuY3BwLgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0OjpDQ0xheWVyVHJlZUhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0Ojppbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6
fkNDTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNv
bW1pdENvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0
ZUFuZExheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI6
OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnNldE5lZWRzQ29t
bWl0QW5kUmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2V0TmVl
ZHNSZWRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmguCisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3Q6OmZyYW1lTnVtYmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6On5DQ0xheWVyVHJlZUhvc3RJbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmJlZ2luQ29tbWl0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbW1pdENvbXBsZXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNSZWRyYXcpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oLgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0SW1wbENsaWVudDo6fkNDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6ZnJhbWVOdW1iZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c291cmNlRnJhbWVOdW1iZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0U291cmNlRnJhbWVOdW1iZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5
OjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5OjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHk6On5DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVkcmF3
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c3RvcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnBvc3REcmF3TGF5ZXJz
VGFza09uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFBy
b3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNNYWluVGhyZWFkKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNDQ1RocmVhZCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmNvbW1pdE9uQ0NUaHJl
YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpkcmF3TGF5
ZXJzT25DQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmluaXRJbXBsT25DQ1Ro
cmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmxheWVy
VHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6Omhvc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNDVGhyZWFkOjpydW5Mb29wKToKKwogMjAxMS0wNC0xOCAgSmVzc2llIEJlcmxpbiAgPGpiZXJs
aW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFN0ZXZlIEZhbGtlbmJ1cmcuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKaW5kZXggYThkN2IyZDNmMjY5YjE4OGNhMjc1OTFkZGNjNjQ5ZmM5NDc5Njhj
Mi4uYjRmZjc1ZWZhNjY3NjJiZjBhOWMwZjVjODkxODkxYzY0ZTdjY2UxMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQpAQCAtNDA3MSw2ICs0MDcxLDEyIEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5o
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuY3BwJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHku
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhy
ZWFkLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NN
YWluVGhyZWFkLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTWFpblRocmVhZFRhc2suaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNw
cAppbmRleCAyN2E2N2U5MDI4OTY1NjdjMzQ5M2FmZjQ5OWE3NDY5NjU1ZTcwM2JmLi5iNjM1NTQy
MWIxMDYzNDY5YmJjYzJlZTFlOTUxMmI2ZmUzMjY0YzM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTQ3LDYgKzQ3LDggQEAKICNpbmNsdWRlICJUcmFjZUV2ZW50
LmgiCiAjaW5jbHVkZSAiV2ViR0xMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXll
ckltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCisjaW5jbHVkZSAi
Y2MvQ0NNYWluVGhyZWFkVGFzay5oIgogI2lmIFVTRShTS0lBKQogI2luY2x1ZGUgIk5hdGl2ZUlt
YWdlU2tpYS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKQEAgLTkzLDIzICs5
NSwyOCBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29tcGFyZUxheWVyWihjb25zdCBS
ZWZQdHI8Q0NMYXllckltcGw+JiBhLCBjb25zdCBSZQogICAgIHJldHVybiBhLT5kcmF3RGVwdGgo
KSA8IGItPmRyYXdEZXB0aCgpOwogfQogCi1QYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1
bT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRl
eHQzRD4gY29udGV4dCwgUGFzc093blB0cjxUaWxlUGFpbnRJbnRlcmZhY2U+IGNvbnRlbnRQYWlu
dCkKK1Bhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmNyZWF0ZShDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVudCwgUGFzc093blB0cjxUaWxl
UGFpbnRJbnRlcmZhY2U+IGNvbnRlbnRQYWludCkKIHsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+IGNvbnRleHQgPSBjbGllbnQtPmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKTsK
ICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgUmVmUHRyPExheWVy
UmVuZGVyZXJDaHJvbWl1bT4gbGF5ZXJSZW5kZXJlcihhZG9wdFJlZihuZXcgTGF5ZXJSZW5kZXJl
ckNocm9taXVtKGNvbnRleHQsIGNvbnRlbnRQYWludCkpKTsKKyAgICBSZWZQdHI8TGF5ZXJSZW5k
ZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyKGFkb3B0UmVmKG5ldyBMYXllclJlbmRlcmVyQ2hy
b21pdW0oY2xpZW50LCBjb250ZXh0LCBjb250ZW50UGFpbnQpKSk7CisgICAgbGF5ZXJSZW5kZXJl
ci0+aW5pdCgpOwogICAgIGlmICghbGF5ZXJSZW5kZXJlci0+aGFyZHdhcmVDb21wb3NpdGluZygp
KQogICAgICAgICByZXR1cm4gMDsKIAogICAgIHJldHVybiBsYXllclJlbmRlcmVyLnJlbGVhc2Uo
KTsKIH0KIAotTGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0oUGFz
c1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCwKK0xheWVyUmVuZGVyZXJDaHJvbWl1
bTo6TGF5ZXJSZW5kZXJlckNocm9taXVtKENDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xpZW50LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxH
cmFwaGljc0NvbnRleHQzRD4gY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBhc3NPd25QdHI8VGlsZVBhaW50SW50ZXJmYWNlPiBjb250ZW50UGFp
bnQpCi0gICAgOiBtX3ZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoLTEsIC0xKSkKKyAg
ICA6IENDTGF5ZXJUcmVlSG9zdChjbGllbnQpCisgICAgLCBtX3ZpZXdwb3J0U2Nyb2xsUG9zaXRp
b24oSW50UG9pbnQoLTEsIC0xKSkKICAgICAsIG1fcm9vdExheWVyKDApCiAgICAgLCBtX3Jvb3RM
YXllckNvbnRlbnRQYWludChjb250ZW50UGFpbnQpCisgICAgLCBtX2NvbW1pdHRpbmcoZmFsc2Up
CiAgICAgLCBtX2N1cnJlbnRTaGFkZXIoMCkKICAgICAsIG1fY3VycmVudFJlbmRlclN1cmZhY2Uo
MCkKICAgICAsIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCgwKQpAQCAtMTkwLDEwICsxOTcsOCBA
QCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0Vmlld3BvcnQoY29uc3QgSW50UmVjdCYg
dmlzaWJsZVJlY3QsIGNvbnN0IEludFJlYwogICAgIH0KIH0KIAotdm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OnVwZGF0ZUFuZERyYXdMYXllcnMoKQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OnVwZGF0ZUxheWVycygpCiB7Ci0gICAgQVNTRVJUKG1faGFyZHdhcmVDb21wb3NpdGluZyk7
Ci0KICAgICBpZiAoIW1fcm9vdExheWVyKQogICAgICAgICByZXR1cm47CiAKQEAgLTIwNCwxMCAr
MjA5LDE0IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVBbmREcmF3TGF5ZXJz
KCkKICAgICBpZiAoIW1fcm9vdExheWVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBMYXllckxp
c3QgcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKLQotICAgIHVwZGF0ZUxheWVycyhyZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0KTsKKyAgICBtX2NvbXB1dGVkUmVuZGVyU3VyZmFjZUxheWVyTGlzdCA9IGFk
b3B0UHRyKG5ldyBMYXllckxpc3QoKSk7CisgICAgdXBkYXRlTGF5ZXJzKCptX2NvbXB1dGVkUmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCk7Cit9CiAKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3TGF5ZXJzKCkKK3sKKyAgICBBU1NFUlQobV9oYXJkd2FyZUNvbXBvc2l0aW5nKTsKKyAgICBB
U1NFUlQobV9jb21wdXRlZFJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgIC8vIEJlZm9yZSBk
cmF3TGF5ZXJzOgogICAgIGlmIChoYXJkd2FyZUNvbXBvc2l0aW5nKCkgJiYgbV9jb250ZXh0U3Vw
cG9ydHNMYXRjaCkgewogICAgICAgICAvLyBGSVhNRTogVGhlIG11bHRpdGhyZWFkZWQgY29tcG9z
aXRvciBjYXNlIHdpbGwgbm90IHdvcmsgYXMgbG9uZyBhcwpAQCAtMjMzLDcgKzI0Miw3IEBAIHZv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVBbmREcmF3TGF5ZXJzKCkKICAgICAgICAg
bV9jaGlsZENvbnRleHRzV2VyZUNvcGllZCA9IGZhbHNlOwogICAgIH0KIAotICAgIGRyYXdMYXll
cnMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgZHJhd0xheWVycygqbV9jb21wdXRlZFJl
bmRlclN1cmZhY2VMYXllckxpc3QpOwogCiAgICAgLy8gQWZ0ZXIgZHJhd0xheWVyczoKICAgICBp
ZiAoaGFyZHdhcmVDb21wb3NpdGluZygpICYmIG1fY29udGV4dFN1cHBvcnRzTGF0Y2gpIHsKQEAg
LTEwOTEsNiArMTEwMCw3MCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHVtcFJlbmRl
clN1cmZhY2VzKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50LCBMYXllcgogICAgICAgICBkdW1w
UmVuZGVyU3VyZmFjZXModHMsIGluZGVudCwgbGF5ZXItPmdldFN1YmxheWVycygpW2ldLmdldCgp
KTsKIH0KIAorY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbCA6IHB1YmxpYyBDQ0xheWVy
VHJlZUhvc3RJbXBsIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxMYXllclJlbmRl
cmVyQ2hyb21pdW1JbXBsPiBjcmVhdGUoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogY2xpZW50
LCBMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IExheWVyUmVuZGVyZXJDaHJvbWl1bUltcGwoY2xpZW50LCBsYXll
clJlbmRlcmVyKSk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNBbmRQcmVz
ZW50KCkKKyAgICB7CisgICAgICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CisgICAg
ICAgIGJvb2wgY29udGV4dExvc3Q7CisgICAgICAgIENDTWFpblRocmVhZDo6cG9zdFRhc2soY3Jl
YXRlTWFpblRocmVhZFRhc2sodGhpcywgJkxheWVyUmVuZGVyZXJDaHJvbWl1bUltcGw6OmRyYXdM
YXllcnNPbk1haW5UaHJlYWQsICZjb21wbGV0aW9uLCAmY29udGV4dExvc3QpKTsKKyAgICAgICAg
Y29tcGxldGlvbi53YWl0KCk7CisKKyAgICAgICAgLy8gRklYTUU6IFNlbmQgdGhlICJVcGRhdGVS
ZWN0IiBtZXNzYWdlIHVwIHRvIHRoZSBSZW5kZXJXaWRnZXQgW29yIG1vdmVwbHVnaW4gZXF1aXZh
bGVudHMuLi5dCisKKyAgICAgICAgLy8gRklYTUU6IGhhbmRsZSBjb250ZXh0IGxvc3QKKyAgICAg
ICAgaWYgKGNvbnRleHRMb3N0KQorICAgICAgICAgICAgRkFUQUwoIkxheWVyUmVuZGVyZXJDaHJv
bWl1bUltcGwgZG9lcyBub3QgaGFuZGxlIGNvbnRleHQgbG9zdCB5ZXQuIik7CisgICAgfQorCitw
cml2YXRlOgorICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bUltcGwoQ0NMYXllclRyZWVIb3N0SW1w
bENsaWVudCogY2xpZW50LCBMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCisg
ICAgICAgIDogQ0NMYXllclRyZWVIb3N0SW1wbChjbGllbnQpCisgICAgICAgICwgbV9sYXllclJl
bmRlcmVyKGxheWVyUmVuZGVyZXIpIHsgfQorCisgICAgdm9pZCBkcmF3TGF5ZXJzT25NYWluVGhy
ZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uLCBib29sKiBjb250ZXh0TG9zdCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICAgICAgbV9sYXllclJl
bmRlcmVyLT5kcmF3TGF5ZXJzKCk7CisgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+cHJlc2VudCgp
OworCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbV9sYXllclJlbmRlcmVy
LT5jb250ZXh0KCk7CisgICAgICAgICpjb250ZXh0TG9zdCA9IGNvbnRleHQtPmdldEV4dGVuc2lv
bnMoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpO
T19FUlJPUjsKKworICAgICAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKKyAgICB9CisKKyAgICBM
YXllclJlbmRlcmVyQ2hyb21pdW0qIG1fbGF5ZXJSZW5kZXJlcjsKK307CisKK2NsYXNzIExheWVy
UmVuZGVyZXJDaHJvbWl1bUltcGxQcm94eSA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHkgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1
bUltcGxQcm94eT4gY3JlYXRlKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgTGF5ZXJSZW5kZXJlckNocm9taXVt
SW1wbFByb3h5KGxheWVyUmVuZGVyZXIpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIFBhc3NPd25Q
dHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gY3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIExheWVyUmVuZGVyZXJDaHJvbWl1bUltcGw6OmNyZWF0ZSh0aGlzLCBz
dGF0aWNfY2FzdDxMYXllclJlbmRlcmVyQ2hyb21pdW0qPihob3N0KCkpKTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbFByb3h5KExheWVyUmVuZGVyZXJD
aHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKKyAgICAgICAgOiBDQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHkobGF5ZXJSZW5kZXJlcikgeyB9Cit9OworCitQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdElt
cGxQcm94eT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGVMYXllclRyZWVIb3N0SW1wbFBy
b3h5KCkKK3sKKyAgICByZXR1cm4gTGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbFByb3h5OjpjcmVh
dGUodGhpcyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgK
aW5kZXggODEzZWI0NmUwYmFhMzY1MTNkNjA3OGRhMjVhNDI1ZDQ0NWFlYmVlOS4uNmM5MmMyYTk4
NzVmNmQ4MmU2MDA1MzdkZWY4YjcxOGI4MjQyY2U5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmgKQEAgLTQzLDEzICs0MywxMyBAQAogI2luY2x1ZGUgIlZpZGVvTGF5ZXJDaHJv
bWl1bS5oIgogI2luY2x1ZGUgImNjL0NDQ2FudmFzTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2Mv
Q0NIZWFkc1VwRGlzcGxheS5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2lu
Y2x1ZGUgImNjL0NDUGx1Z2luTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NWaWRlb0xheWVy
SW1wbC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCiAjaWYgVVNFKENHKQpAQCAtNjEsMTMgKzYxLDE1IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgQ0NIZWFkc1VwRGlzcGxheTsKIGNsYXNzIENDTGF5ZXJJbXBsOworY2xhc3Mg
Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyOworY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbDsKIGNs
YXNzIEdlb21ldHJ5QmluZGluZzsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogCiAvLyBDbGFz
cyB0aGF0IGhhbmRsZXMgZHJhd2luZyBvZiBjb21wb3NpdGVkIHJlbmRlciBsYXllcnMgdXNpbmcg
R0wuCi1jbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW0gOiBwdWJsaWMgUmVmQ291bnRlZDxMYXll
clJlbmRlcmVyQ2hyb21pdW0+IHsKK2NsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bSA6IHB1Ymxp
YyBDQ0xheWVyVHJlZUhvc3QgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVy
UmVuZGVyZXJDaHJvbWl1bT4gY3JlYXRlKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBQ
YXNzT3duUHRyPFRpbGVQYWludEludGVyZmFjZT4gY29udGVudFBhaW50KTsKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGNyZWF0ZShDQ0xheWVyVHJlZUhvc3RD
bGllbnQqLCBQYXNzT3duUHRyPFRpbGVQYWludEludGVyZmFjZT4gY29udGVudFBhaW50KTsKIAog
ICAgIH5MYXllclJlbmRlcmVyQ2hyb21pdW0oKTsKIApAQCAtNzgsNyArODAsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRWaWV3cG9ydChjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3Qg
SW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbik7CiAK
ICAgICAvLyB1cGRhdGVzIGFuZCBkcmF3cyB0aGUgY3VycmVudCBsYXllcnMgb250byB0aGUgYmFj
a2J1ZmZlcgotICAgIHZvaWQgdXBkYXRlQW5kRHJhd0xheWVycygpOworICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVMYXllcnMoKTsKKyAgICB2b2lkIGRyYXdMYXllcnMoKTsKIAogICAgIC8vIHdhaXRz
IGZvciByZW5kZXJpbmcgdG8gZmluaXNoCiAgICAgdm9pZCBmaW5pc2goKTsKQEAgLTEzMywxMSAr
MTM2LDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZENoaWxkQ29udGV4dChHcmFwaGljc0NvbnRl
eHQzRCopOwogICAgIHZvaWQgcmVtb3ZlQ2hpbGRDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEKik7
CiAKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1w
bFByb3h5PiBjcmVhdGVMYXllclRyZWVIb3N0SW1wbFByb3h5KCk7CisKIHByaXZhdGU6CiAgICAg
dHlwZWRlZiBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+IExheWVyTGlzdDsKICAgICB0eXBl
ZGVmIEhhc2hNYXA8R3JhcGhpY3NDb250ZXh0M0QqLCBpbnQ+IENoaWxkQ29udGV4dE1hcDsKIAot
ICAgIGV4cGxpY2l0IExheWVyUmVuZGVyZXJDaHJvbWl1bShQYXNzUmVmUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiwgUGFzc093blB0cjxUaWxlUGFpbnRJbnRlcmZhY2U+IGNvbnRlbnRQYWludCk7Cisg
ICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKENDTGF5ZXJUcmVlSG9zdENsaWVudCosIFBhc3NSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBQYXNzT3duUHRyPFRpbGVQYWludEludGVyZmFjZT4gY29u
dGVudFBhaW50KTsKIAogICAgIHZvaWQgdXBkYXRlTGF5ZXJzKExheWVyTGlzdCYgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCk7CiAgICAgdm9pZCB1cGRhdGVSb290TGF5ZXJDb250ZW50cygpOwpAQCAt
MTc4LDggKzE4NCwxMSBAQCBwcml2YXRlOgogICAgIE93blB0cjxUaWxlUGFpbnRJbnRlcmZhY2U+
IG1fcm9vdExheWVyQ29udGVudFBhaW50OwogICAgIE93blB0cjxMYXllclRpbGVyQ2hyb21pdW0+
IG1fcm9vdExheWVyQ29udGVudFRpbGVyOwogCisgICAgYm9vbCBtX2NvbW1pdHRpbmc7CiAgICAg
Ym9vbCBtX2hhcmR3YXJlQ29tcG9zaXRpbmc7CiAKKyAgICBPd25QdHI8TGF5ZXJMaXN0PiBtX2Nv
bXB1dGVkUmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKwogICAgIHVuc2lnbmVkIG1fY3VycmVudFNo
YWRlcjsKICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIG1fY3VycmVudFJlbmRlclN1cmZhY2U7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDSGVhZHNVcERpc3BsYXkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaAppbmRleCAwOWYxOThhYzE0NWQ3NzYzNGQx
YjFmNTQzOWY3MTBkODQ2ZTM3ZTI4Li43ZWFkZDE4MmFmMjE0OWU3YmU5NTkyYTdlNjJiMDA2ZDYy
NTM1OWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oCkBAIC00Nyw2ICs0Nyw4IEBA
IHB1YmxpYzoKIAogICAgIH5DQ0hlYWRzVXBEaXNwbGF5KCk7CiAKKyAgICBpbnQgY3VycmVudEZy
YW1lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50RnJhbWVOdW1iZXI7IH0KKwogICAg
IHZvaWQgb25QcmVzZW50KCk7CiAKICAgICB2b2lkIHNldFNob3dGUFNDb3VudGVyKGJvb2wgZW5h
YmxlKSB7IG1fc2hvd0ZQU0NvdW50ZXIgPSBlbmFibGU7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMxZjM0NzgzOGVhYjhkYTZiMTIxNjhiYTkwMzZlOTg5NDEy
YTRiNjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC0wLDAgKzEsOTggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVl
SG9zdC5oIgorCisjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJU
cmVlSG9zdENvbW1pdHRlci5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIK
KworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NDTGF5ZXJUcmVlSG9zdDo6Q0NMYXllclRyZWVI
b3N0KENDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xpZW50KQorICAgIDogbV9jbGllbnQoY2xpZW50
KQorI2lmbmRlZiBOREVCVUcKKyAgICAsIG1fY29tbWl0dGluZyhmYWxzZSkKKyNlbmRpZgorICAg
ICwgbV9mcmFtZU51bWJlcigwKQoreworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6aW5pdCgp
Cit7CisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgIG1fcHJveHkgPSBjcmVhdGVM
YXllclRyZWVIb3N0SW1wbFByb3h5KCk7CisgICAgbV9wcm94eS0+c3RhcnQoKTsKKyNlbmRpZgor
fQorCitDQ0xheWVyVHJlZUhvc3Q6On5DQ0xheWVyVHJlZUhvc3QoKQoreworICAgIFRSQUNFX0VW
RU5UKCJDQ0xheWVyVHJlZUhvc3Q6On5DQ0xheWVyVHJlZUhvc3QiLCB0aGlzLCAwKTsKKyNpZiBV
U0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgbV9wcm94eS0+c3RvcCgpOworICAgIG1fcHJv
eHkuY2xlYXIoKTsKKyNlbmRpZgorfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6YmVnaW5Db21t
aXQoKQoreworI2lmbmRlZiBOREVCVUcKKyAgICBtX2NvbW1pdHRpbmcgPSB0cnVlOworI2VuZGlm
Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0Ojpjb21taXRDb21wbGV0ZSgpCit7CisjaWZuZGVm
IE5ERUJVRworICAgIG1fY29tbWl0dGluZyA9IGZhbHNlOworI2VuZGlmCisgICAgbV9mcmFtZU51
bWJlcisrOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0ZUFuZExheW91dChkb3Vi
bGUgZnJhbWVCZWdpblRpbWUpCit7CisgICAgbV9jbGllbnQtPmFuaW1hdGVBbmRMYXlvdXQoZnJh
bWVCZWdpblRpbWUpOworfQorCitQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcj4g
Q0NMYXllclRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVIb3N0Q29tbWl0dGVyKCkKK3sKKyAgICBy
ZXR1cm4gQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyOjpjcmVhdGUoKTsKK30KKwordm9pZCBDQ0xh
eWVyVHJlZUhvc3Q6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCkKK3sKKyAgICBtX3Byb3h5LT5z
ZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0
TmVlZHNSZWRyYXcoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3Q6OnNldE5l
ZWRzUmVkcmF3IiwgdGhpcywgMCk7CisgICAgbV9wcm94eS0+c2V0TmVlZHNSZWRyYXcoKTsKK30K
KworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mM2FlYWMwNTQzZTYw
NDBiNjExZWYwMjFkZTdiYzkwNWVhZGY1YWU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAg
LTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0xheWVyVHJlZUhvc3RfaAor
I2RlZmluZSBDQ0xheWVyVHJlZUhvc3RfaAorCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0
Q29tbWl0dGVyLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmgiCisj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgQ0NMYXllclRyZWVIb3N0SW1wbDsKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQ7
CitjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKKworY2xhc3MgQ0NMYXllclRyZWVIb3N0Q2xpZW50
IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJh
bWVCZWdpblRpbWUpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+IGNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKSA9IDA7Cit9OworCitjbGFzcyBDQ0xh
eWVyVHJlZUhvc3QgOiBwdWJsaWMgUmVmQ291bnRlZDxDQ0xheWVyVHJlZUhvc3Q+IHsKK3B1Ymxp
YzoKKyAgICBleHBsaWNpdCBDQ0xheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0Q2xpZW50Kik7
CisgICAgdm9pZCBpbml0KCk7CisgICAgdmlydHVhbCB+Q0NMYXllclRyZWVIb3N0KCk7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpOwor
ICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdCgpOworICAgIHZpcnR1YWwgdm9pZCBjb21taXRD
b21wbGV0ZSgpOworICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RDb21taXR0
ZXI+IGNyZWF0ZUxheWVyVHJlZUhvc3RDb21taXR0ZXIoKTsKKworICAgIGludCBmcmFtZU51bWJl
cigpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVOdW1iZXI7IH0KKworICAgIHZvaWQgc2V0TmVlZHND
b21taXRBbmRSZWRyYXcoKTsKKyAgICB2b2lkIHNldE5lZWRzUmVkcmF3KCk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlTGF5ZXJzKCkgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBQ
YXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eT4gY3JlYXRlTGF5ZXJUcmVlSG9zdElt
cGxQcm94eSgpID0gMDsKKworcHJpdmF0ZToKKyAgICBDQ0xheWVyVHJlZUhvc3RDbGllbnQqIG1f
Y2xpZW50OworI2lmbmRlZiBOREVCVUcKKyAgICBib29sIG1fY29tbWl0dGluZzsKKyNlbmRpZgor
ICAgIGludCBtX2ZyYW1lTnVtYmVyOworICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHk+IG1fcHJveHk7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdENvbW1pdHRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzU3MjZhZmU4MTlkY2I3OWMxYzcx
ZTA4Mjk5NzNmNjhjZDRhZTE4ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5jcHAK
QEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmgiCisKKworUGFzc093blB0cjxD
Q0xheWVyVHJlZUhvc3RDb21taXR0ZXI+IENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcjo6Y3JlYXRl
KCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcigp
KTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI6OmNvbW1pdChDQ0xheWVyVHJl
ZUhvc3QqIGhvc3QsIENDTGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJbXBsKQoreworICAgIGhvc3RJ
bXBsLT5zZXRTb3VyY2VGcmFtZU51bWJlcihob3N0LT5mcmFtZU51bWJlcigpKTsKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdENvbW1pdHRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2JjYWRl
YTY1NjM2ZDllNjAwYzdlYzc5MGJhZTE0NzcyODg2NWJiNQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dENvbW1pdHRlci5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NM
YXllclRyZWVIb3N0Q29tbWl0dGVyX2gKKyNkZWZpbmUgQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVy
X2gKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3du
UHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NMYXllclRyZWVIb3N0Owor
Y2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbDsKKworY2xhc3MgQ0NMYXllclRyZWVIb3N0Q29tbWl0
dGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIp
OworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdENvbW1pdHRl
cj4gY3JlYXRlKCk7CisgICAgdmlydHVhbCB2b2lkIGNvbW1pdChDQ0xheWVyVHJlZUhvc3QqLCBD
Q0xheWVyVHJlZUhvc3RJbXBsKik7CisKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBDQ0xheWVy
VHJlZUhvc3RDb21taXR0ZXIoKSB7IH0KK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEzYWEyYmEyMTBkYmRkZDE2Yjlj
YTFhZDEyZTYxMTU1NThiMmFiMzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAt
MCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNs
dWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCisKKyNpbmNsdWRlICJUcmFjZUV2ZW50Lmgi
CisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCisjaW5jbHVkZSAiY2MvQ0NUaHJlYWRU
YXNrLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworQ0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVIb3N0SW1wbChDQ0xheWVyVHJl
ZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX3NvdXJjZUZyYW1lTnVtYmVyKC0xKQor
ICAgICwgbV9mcmFtZU51bWJlcigwKQorICAgICwgbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9j
b21taXRQZW5kaW5nKGZhbHNlKQorICAgICwgbV9yZWRyYXdQZW5kaW5nKGZhbHNlKQoreworfQor
CitDQ0xheWVyVHJlZUhvc3RJbXBsOjp+Q0NMYXllclRyZWVIb3N0SW1wbCgpCit7CisgICAgVFJB
Q0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6On5DQ0xheWVyVHJlZUhvc3RJbXBsKCkiLCB0
aGlzLCAwKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpiZWdpbkNvbW1pdCgpCit7
Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29tbWl0Q29tcGxldGUoKQoreworICAg
IG1fY29tbWl0UGVuZGluZyA9IGZhbHNlOworICAgIHNldE5lZWRzUmVkcmF3KCk7Cit9CisKK3Zv
aWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycygpCit7CisgICAgLy8gSWYgYSBjb21t
aXQgaXMgcGVuZGluZywgZG8gbm90IGRyYXcuIFRoaXMgaXMgYSB0ZW1wb3JhcnkgcmVzdHJpY3Rp
b24gdGhhdAorICAgIC8vIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGRyYXdMYXllcnMgaXMgY3VycmVu
dGx5IGEgYmxvY2tpbmcgb3BlcmF0aW9uIG9uIHRoZSBtYWluIHRocmVhZC4KKyAgICBpZiAobV9j
b21taXRQZW5kaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXll
clRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycyIsIHRoaXMsIDApOworICAgIEFTU0VSVChtX3JlZHJh
d1BlbmRpbmcpOworICAgIG1fcmVkcmF3UGVuZGluZyA9IGZhbHNlOworCisgICAgeworICAgICAg
ICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVyc0FuZFByZXNlbnQi
LCB0aGlzLCAwKTsKKyAgICAgICAgZHJhd0xheWVyc0FuZFByZXNlbnQoKTsKKyAgICB9CisKKyAg
ICArK21fZnJhbWVOdW1iZXI7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVl
ZHNDb21taXRBbmRSZWRyYXcoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdyIsIHRoaXMsIDApOworCisgICAgLy8gRklYTUU6
IG1vdmUgdGhlIHJlcXVlc3RGcmFtZUFuZENvbW1pdCBvdXQgZnJvbSBoZXJlIG9uY2Ugd2UgYWRk
IGZyYW1lcmF0ZSB0aHJvdHRsaW5nL2FuaW1hdGlvbgorICAgIGRvdWJsZSBmcmFtZUJlZ2luVGlt
ZSA9IGN1cnJlbnRUaW1lKCk7CisgICAgbV9jb21taXRQZW5kaW5nID0gdHJ1ZTsKKyAgICBtX2Ns
aWVudC0+cmVxdWVzdEZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZChmcmFtZUJlZ2luVGltZSk7Cit9
CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNSZWRyYXcoKQoreworICAgIGlm
IChtX3JlZHJhd1BlbmRpbmcgfHwgbV9jb21taXRQZW5kaW5nKQorICAgICAgICByZXR1cm47CisK
KyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNSZWRyYXciLCB0
aGlzLCAwKTsKKyAgICBtX3JlZHJhd1BlbmRpbmcgPSB0cnVlOworICAgIG1fY2xpZW50LT5wb3N0
RHJhd0xheWVyc1Rhc2tPbkNDVGhyZWFkKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdEltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZDkwNDk1ZGVkMmM4MGMzOWY4ZjNhMTk1YjJlMDE1
ZDZhMDhjYWI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCkBAIC0wLDAgKzEsNzUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
KyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NMYXllclRyZWVIb3N0SW1wbF9oCisjZGVmaW5lIEND
TGF5ZXJUcmVlSG9zdEltcGxfaAorCisjaW5jbHVkZSAiY2MvQ0NUaHJlYWQuaCIKKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gUHJvdmlkZXMgc2NoZWR1bGluZyBpbmZyYXN0cnVj
dHVyZSBmb3IgYSBDQ0xheWVyVHJlZUhvc3RJbXBsCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBs
Q2xpZW50ICB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+Q0NMYXllclRyZWVIb3N0SW1wbENsaWVu
dCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwb3N0RHJhd0xheWVyc1Rhc2tPbkNDVGhyZWFkKCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKGRv
dWJsZSBmcmFtZUJlZ2luVGltZSkgPSAwOworfTsKKworLy8gQ0NMYXllclRyZWVIb3N0SW1wbCBv
d25zIHRoZSBDQ0xheWVySW1wbCB0cmVlIGFzIHdlbGwgYXMgYXNzb2NpYXRlZCByZW5kZXJpbmcg
c3RhdGUKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGwgeworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKENDTGF5ZXJUcmVlSG9zdEltcGwpOworcHVibGljOgorICAgIGV4cGxpY2l0IENDTGF5ZXJU
cmVlSG9zdEltcGwoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCopOworICAgIHZpcnR1YWwgfkND
TGF5ZXJUcmVlSG9zdEltcGwoKTsKKworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdCgpOwor
ICAgIHZpcnR1YWwgdm9pZCBjb21taXRDb21wbGV0ZSgpOworCisgICAgdm9pZCBkcmF3TGF5ZXJz
KCk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNBbmRQcmVzZW50KCkgPSAwOworCisgICAg
aW50IGZyYW1lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZU51bWJlcjsgfQorCisgICAg
dm9pZCBzZXROZWVkc1JlZHJhdygpOworICAgIHZvaWQgc2V0TmVlZHNDb21taXRBbmRSZWRyYXco
KTsKKworICAgIGludCBzb3VyY2VGcmFtZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNl
RnJhbWVOdW1iZXI7IH0KKyAgICB2b2lkIHNldFNvdXJjZUZyYW1lTnVtYmVyKGludCBmcmFtZU51
bWJlcikgeyBtX3NvdXJjZUZyYW1lTnVtYmVyID0gZnJhbWVOdW1iZXI7IH0KKworcHJvdGVjdGVk
OgorICAgIGludCBtX3NvdXJjZUZyYW1lTnVtYmVyOworICAgIGludCBtX2ZyYW1lTnVtYmVyOwor
Citwcml2YXRlOgorICAgIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqIG1fY2xpZW50OworICAg
IGJvb2wgbV9jb21taXRQZW5kaW5nOworICAgIGJvb2wgbV9yZWRyYXdQZW5kaW5nOworfTsKKwor
fTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi45NTViMmVmNTFkMmE0ODg1N2FjMjMyZTIzMTIxNGQ0YTFjMjYyZmE2
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmNwcApAQCAtMCwwICsxLDIxNSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NMYXll
clRyZWVIb3N0SW1wbFByb3h5LmgiCisKKyNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCisjaW5jbHVk
ZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCisjaW5jbHVkZSAiY2MvQ0NNYWluVGhyZWFkVGFzay5o
IgorI2luY2x1ZGUgImNjL0NDVGhyZWFkVGFzay5oIgorCisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIHsKK0NDVGhyZWFkKiBjY1RocmVh
ZDsKK2ludCBudW1Qcm94aWVzID0gMDsKK30KKworQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpD
Q0xheWVyVHJlZUhvc3RJbXBsUHJveHkoQ0NMYXllclRyZWVIb3N0KiBsYXllclRyZWVIb3N0KQor
ICAgIDogbV9jb21taXRQZW5kaW5nKGZhbHNlKQorICAgICwgbV9sYXllclRyZWVIb3N0KGxheWVy
VHJlZUhvc3QpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5IiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKyAgICBudW1Qcm94aWVzKys7CisgICAgaWYgKCFjY1RocmVhZCkKKyAgICAgICAg
Y2NUaHJlYWQgPSBDQ1RocmVhZDo6Y3JlYXRlKCkubGVha1B0cigpOworfQorCisKK3ZvaWQgQ0NM
YXllclRyZWVIb3N0SW1wbFByb3h5OjpzdGFydCgpCit7CisgICAgLy8gQ3JlYXRlIExheWVyVHJl
ZUhvc3RJbXBsLgorICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CisgICAgY2NUaHJl
YWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1w
bFByb3h5Ojppbml0SW1wbE9uQ0NUaHJlYWQsICZjb21wbGV0aW9uKSk7CisgICAgY29tcGxldGlv
bi53YWl0KCk7Cit9CisKK0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6fkNDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eSgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eTo6fkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3RJbXBsICYmICFtX2xheWVy
VHJlZUhvc3QpOyAvLyBtYWtlIHN1cmUgc3RvcCgpIGdvdCBjYWxsZWQuCisKKyAgICBudW1Qcm94
aWVzLS07CisgICAgaWYgKCFudW1Qcm94aWVzKSB7CisgICAgICAgIGRlbGV0ZSBjY1RocmVhZDsK
KyAgICAgICAgY2NUaHJlYWQgPSAwOworICAgIH0KK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJ
bXBsUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCkKK3sKKyAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworICAgIGlmIChtX2NvbW1pdFBlbmRpbmcpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzQ29tbWl0
QW5kUmVkcmF3IiwgdGhpcywgMCk7CisgICAgbV9jb21taXRQZW5kaW5nID0gdHJ1ZTsKKyAgICBj
Y1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCkpOworfQorCit2
b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHNSZWRyYXcoKQoreworICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhy
ZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc1JlZHJhd09u
Q0NUaHJlYWQpKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnN0b3AoKQor
eworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnN0b3AiLCB0aGlz
LCAwKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIC8vIFN5bmNocm9ub3VzbHkg
ZGVsZXRlcyB0aGUgaW1wbC4KKyAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOworICAg
IGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVl
SG9zdEltcGxQcm94eTo6bGF5ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJlYWQsICZjb21wbGV0aW9u
KSk7CisgICAgY29tcGxldGlvbi53YWl0KCk7CisKKyAgICBBU1NFUlQoIW1fbGF5ZXJUcmVlSG9z
dEltcGwpOyAvLyB2ZXJpZnkgdGhhdCB0aGUgaW1wbCBkZWxldGVkLgorICAgIG1fbGF5ZXJUcmVl
SG9zdCA9IDA7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpwb3N0RHJhd0xh
eWVyc1Rhc2tPbkNDVGhyZWFkKCkKK3sKKyAgICBBU1NFUlQoaXNDQ1RocmVhZCgpKTsKKyAgICBp
ZiAobV9sYXllclRyZWVIb3N0SW1wbCkKKyAgICAgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0
ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpkcmF3TGF5ZXJz
T25DQ1RocmVhZCkpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6cmVxdWVz
dEZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZChkb3VibGUgZnJhbWVCZWdpblRpbWUpCit7CisgICAg
VFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6cmVxdWVzdEZyYW1lQW5kQ29t
bWl0T25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc0NDVGhyZWFkKCkpOworICAg
IGlmIChtX2xheWVyVHJlZUhvc3RJbXBsKQorICAgICAgICBDQ01haW5UaHJlYWQ6OnBvc3RUYXNr
KGNyZWF0ZU1haW5UaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJl
cXVlc3RGcmFtZUFuZENvbW1pdCwgZnJhbWVCZWdpblRpbWUpKTsKK30KKworYm9vbCBDQ0xheWVy
VHJlZUhvc3RJbXBsUHJveHk6OmlzTWFpblRocmVhZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIDo6
aXNNYWluVGhyZWFkKCk7Cit9CisKK2Jvb2wgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppc0ND
VGhyZWFkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY3VycmVudFRocmVhZCgpID09IGNjVGhyZWFk
LT50aHJlYWRJRCgpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6cmVxdWVz
dEZyYW1lQW5kQ29tbWl0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKK3sKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworICAgIGlmICghbV9sYXllclRyZWVIb3N0KQorICAgICAgICByZXR1cm47
CisKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpyZXF1ZXN0RnJh
bWVBbmRDb21taXQiLCB0aGlzLCAwKTsKKyAgICB7CisgICAgICAgIFRSQUNFX0VWRU5UKCJDQ0xh
eWVyVHJlZUhvc3Q6OmFuaW1hdGVBbmRMYXlvdXQiLCB0aGlzLCAwKTsKKyAgICAgICAgbV9sYXll
clRyZWVIb3N0LT5hbmltYXRlQW5kTGF5b3V0KGZyYW1lQmVnaW5UaW1lKTsKKyAgICB9CisKKyAg
ICBtX2NvbW1pdFBlbmRpbmcgPSBmYWxzZTsKKyAgICB7CisgICAgICAgIFRSQUNFX0VWRU5UKCJD
Q0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVycyIsIHRoaXMsIDApOworICAgICAgICBtX2xheWVy
VHJlZUhvc3QtPnVwZGF0ZUxheWVycygpOworICAgIH0KKworICAgIE93blB0cjxDQ0xheWVyVHJl
ZUhvc3RDb21taXR0ZXI+IGNvbW1pdHRlciA9IG1fbGF5ZXJUcmVlSG9zdC0+Y3JlYXRlTGF5ZXJU
cmVlSG9zdENvbW1pdHRlcigpOworICAgIG1fbGF5ZXJUcmVlSG9zdC0+YmVnaW5Db21taXQoKTsK
KworICAgIC8vIEJsb2NraW5nIGNhbGwgdG8gQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpwZXJm
b3JtQ29tbWl0CisgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKKyAgICBjY1RocmVh
ZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RJbXBs
UHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQsIGNvbW1pdHRlci5nZXQoKSwgJmNvbXBsZXRpb24pKTsK
KyAgICBjb21wbGV0aW9uLndhaXQoKTsKKworICAgIGNvbW1pdHRlci5jbGVhcigpOworCisgICAg
bV9sYXllclRyZWVIb3N0LT5jb21taXRDb21wbGV0ZSgpOworfQorCit2b2lkIENDTGF5ZXJUcmVl
SG9zdEltcGxQcm94eTo6Y29tbWl0T25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIq
IGNvbW1pdHRlciwgQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24pCit7CisgICAgQVNTRVJU
KGlzQ0NUaHJlYWQoKSk7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eTo6Y29tbWl0T25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwt
PmJlZ2luQ29tbWl0KCk7CisgICAgeworICAgICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVI
b3N0Ojpjb21taXQiLCB0aGlzLCAwKTsKKyAgICAgICAgY29tbWl0dGVyLT5jb21taXQobV9sYXll
clRyZWVIb3N0LCBtX2xheWVyVHJlZUhvc3RJbXBsLmdldCgpKTsKKyAgICB9CisgICAgY29tcGxl
dGlvbi0+c2lnbmFsKCk7CisKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5jb21taXRDb21wbGV0
ZSgpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6ZHJhd0xheWVyc09uQ0NU
aHJlYWQoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmRy
YXdMYXllcnNPbkNDVGhyZWFkIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzQ0NUaHJlYWQoKSk7
CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdEltcGwpCisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdElt
cGwtPmRyYXdMYXllcnMoKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNl
dE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkND
TGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhyZWFk
IiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzQ0NUaHJlYWQoKSAmJiBtX2xheWVyVHJlZUhvc3RJ
bXBsKTsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5zZXROZWVkc0NvbW1pdEFuZFJlZHJhdygp
OworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHNSZWRyYXdPbkND
VGhyZWFkKCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpz
ZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNDQ1RocmVh
ZCgpICYmIG1fbGF5ZXJUcmVlSG9zdEltcGwpOworICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPnNl
dE5lZWRzUmVkcmF3KCk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppbml0
SW1wbE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24pCit7CisgICAgVFJB
Q0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aW5pdEltcGxPbkNDVGhyZWFkIiwg
dGhpcywgMCk7CisgICAgQVNTRVJUKGlzQ0NUaHJlYWQoKSk7CisgICAgbV9sYXllclRyZWVIb3N0
SW1wbCA9IGNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsKCk7CisgICAgY29tcGxldGlvbi0+c2lnbmFs
KCk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpsYXllclRyZWVIb3N0Q2xv
c2VkT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbikKK3sKKyAgICBUUkFD
RV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25D
Q1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc0NDVGhyZWFkKCkpOworICAgIG1fbGF5
ZXJUcmVlSG9zdEltcGwuY2xlYXIoKTsKKyAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKK30KKwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4yZDkzZTY3NDcxNWNmNGU1NmJkMjMzYjY3ZjczYWQ3NjBiYzljYWIzCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0SW1wbFByb3h5LmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHlfaAorI2RlZmluZSBDQ0xheWVyVHJlZUhvc3RJ
bXBsUHJveHlfaAorCisjaW5jbHVkZSAiY2MvQ0NDb21wbGV0aW9uRXZlbnQuaCIKKyNpbmNsdWRl
ICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdDsKK2NsYXNzIENDTGF5
ZXJUcmVlSG9zdENvbW1pdHRlcjsKKworY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5IDog
cHVibGljIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSk7CitwdWJsaWM6CisgICAgdmlydHVhbCB+Q0NM
YXllclRyZWVIb3N0SW1wbFByb3h5KCk7CisKKyAgICB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVk
cmF3KCk7CisgICAgdm9pZCBzZXROZWVkc1JlZHJhdygpOworCisgICAgdm9pZCBzdGFydCgpOyAv
LyBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgdXNpbmcgdGhlIHByb3h5LgorICAgIHZvaWQgc3RvcCgp
OyAvLyBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgZGVsZXRpbmcgdGhlIHByb3h5LgorCisgICAgLy8g
Q0NMYXllclRyZWVIb3N0SW1wbENpZW50IC0tIGNhbGxlZCBvbiBDQ1RocmVhZAorICAgIHZpcnR1
YWwgdm9pZCBwb3N0RHJhd0xheWVyc1Rhc2tPbkNDVGhyZWFkKCk7CisgICAgdmlydHVhbCB2b2lk
IHJlcXVlc3RGcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsK
KworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eShDQ0xh
eWVyVHJlZUhvc3QqKTsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1w
bD4gY3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwoKSA9IDA7CisgICAgQ0NMYXllclRyZWVIb3N0KiBo
b3N0KCkgY29uc3QgeyByZXR1cm4gbV9sYXllclRyZWVIb3N0OyB9CisKK3ByaXZhdGU6CisgICAg
Ym9vbCBpc01haW5UaHJlYWQoKSBjb25zdDsKKyAgICBib29sIGlzQ0NUaHJlYWQoKSBjb25zdDsK
KworICAgIC8vIENhbGxlZCBvbiBDQ01haW5UaHJlYWQKKyAgICB2b2lkIHJlcXVlc3RGcmFtZUFu
ZENvbW1pdChkb3VibGUgZnJhbWVCZWdpblRpbWUpOworCisgICAgLy8gQ2FsbGVkIG9uIENDVGhy
ZWFkCisgICAgdm9pZCBjb21taXRPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcios
IENDQ29tcGxldGlvbkV2ZW50Kik7CisgICAgdm9pZCBkcmF3TGF5ZXJzT25DQ1RocmVhZCgpOwor
ICAgIHZvaWQgaW5pdEltcGxPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50Kik7CisgICAgdm9p
ZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQoKTsKKyAgICB2b2lkIHNldE5lZWRz
UmVkcmF3T25DQ1RocmVhZCgpOworICAgIHZvaWQgbGF5ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJl
YWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsKKworICAgIGJvb2wgbV9jb21taXRQZW5kaW5nOworICAg
IENDTGF5ZXJUcmVlSG9zdCogbV9sYXllclRyZWVIb3N0OworICAgIE93blB0cjxDQ0xheWVyVHJl
ZUhvc3RJbXBsPiBtX2xheWVyVHJlZUhvc3RJbXBsOworfTsKKworfQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFp
blRocmVhZFRhc2suaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTWFpblRocmVhZFRhc2suaAppbmRleCA3ZGU4ZDcxM2U4OGM4ODQyMjI0MDc5M2ZmMjc3
ZDU5ZGY1M2FkZTdiLi5mYWM2ZTY0M2YwNWExOGJiYmFhZDU3YjI5YmJjMDNhNjI4MGVhYzhhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q01haW5UaHJlYWRUYXNrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkVGFzay5oCkBAIC0yNCw5ICsyNCw5IEBACiAjaWZuZGVm
IENDTWFpblRocmVhZFRhc2tfaAogI2RlZmluZSBDQ01haW5UaHJlYWRUYXNrX2gKIAotI2luY2x1
ZGUgIkNDTWFpblRocmVhZC5oIgogI2luY2x1ZGUgIkNyb3NzVGhyZWFkQ29waWVyLmgiCiAjaW5j
bHVkZSAiQ3Jvc3NUaHJlYWRUYXNrLmgiCisjaW5jbHVkZSAiY2MvQ0NNYWluVGhyZWFkLmgiCiAj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RocmVhZC5jcHAKaW5kZXggOTU2NjU4NDVjNThjNDhjYTA2MjIwMDI0MjQ4Yjc0N2Fi
YWI3NjBjZi4uZGUxNzNhMTM0OTgyNGFmOTBmYWRjZTc4MTkwZmJiODNjYzQwZWI4NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJl
YWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGhyZWFkLmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkNDVGhyZWFkLmgiCiAK
ICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJUcmFjZUV2ZW50
LmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgpAQCAtNjQsNiArNjUs
NyBAQCB2b2lkKiBDQ1RocmVhZDo6Y29tcG9zaXRvclRocmVhZFN0YXJ0KHZvaWQqIHVzZXJkYXRh
KQogCiB2b2lkKiBDQ1RocmVhZDo6cnVuTG9vcCgpCiB7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhy
ZWFkOjpydW5Mb29wIiwgdGhpcywgMCk7CiAgICAgewogICAgICAgICAvLyBXYWl0IGZvciBDQ1Ro
cmVhZDo6c3RhcnQoKSB0byBjb21wbGV0ZSB0byBoYXZlIG1fdGhyZWFkSUQKICAgICAgICAgLy8g
ZXN0YWJsaXNoZWQgYmVmb3JlIHN0YXJ0aW5nIHRoZSBtYWluIGxvb3AuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFRhc2su
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFk
VGFzay5oCmluZGV4IDcxMjQ1ZDNlNGUwZWNlNTM1MDVhMGRlZGU3NTM2OGVjYzZkMGZjNDcuLjkx
YzU4ZTVkMjViN2JiMjg2ZTIxNmM0ZTA2OGNiZTEwOTU3OGYxODMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkVGFzay5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFk
VGFzay5oCkBAIC0yNCw5ICsyNCw5IEBACiAjaWZuZGVmIENDVGhyZWFkVGFza19oCiAjZGVmaW5l
IENDVGhyZWFkVGFza19oCiAKLSNpbmNsdWRlICJDQ1RocmVhZC5oIgogI2luY2x1ZGUgIkNyb3Nz
VGhyZWFkQ29waWVyLmgiCiAjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRUYXNrLmgiCisjaW5jbHVkZSAi
Y2MvQ0NUaHJlYWQuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZDI4ZDhiZTFk
YjFlZTc3NjAwMTMwNDI4N2U5MzJkMTI5OWQ3N2M3Ni4uMDFkN2U2YmI1ZDNmMDE1MWQ5Y2NkNWJj
MjZiMWNlYWRkMTdhYzVmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
MDEgQEAKKzIwMTEtMDQtMTggIE5hdCBEdWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1w
bGVtZW50IENDTGF5ZXJUcmVlSG9zdCBhbmQgQ0NMYXllclRyZWVIb3N0SW1wbCBwb3J0aW9ucyBv
ZiB0aHJlYWRlZCBjb21wb3NpdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01ODQwOAorCisgICAgICAgIFJlZGlyZWN0IGludmFsaWRhdGVzIGFuZCBz
Y2hlZHVsaW5nIGludG8gY29tcG9zaXRvciB3aGVuIGluCisgICAgICAgIHRocmVhZGVkIGNvbXBv
c2l0aW5nIG1vZGUuIEFkZCBDQ0xTdHJlc3MgdGVzdHMgZm9yCisgICAgICAgIENDTGF5ZXJUcmVl
SG9zdC4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHB1YmxpYy9XZWJXaWRn
ZXQuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViV2lkZ2V0OjpzY2hlZHVsZUNvbXBvc2l0ZSk6Cisg
ICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0lt
cGw6OmFuaW1hdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6ZG9BbmltYXRlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnBhaW50KToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlld0ltcGw6OmFuaW1hdGVBbmRMYXlvdXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
SW1wbDo6Y29tcG9zaXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNjaGVkdWxl
Q29tcG9zaXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldFJvb3RMYXllck5l
ZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmdBY3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6ZG9D
b21wb3NpdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Y3JlYXRlTGF5ZXJUcmVl
SG9zdENvbnRleHQzRCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyZWFsbG9jYXRl
UmVuZGVyZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6dXBkYXRlTGF5ZXJSZW5k
ZXJlclNldHRpbmdzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnVwZGF0ZUxheWVy
UmVuZGVyZXJWaWV3cG9ydCk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6CisgICAgICAg
ICogdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpD
Q0xheWVyVHJlZUhvc3RUZXN0OjpDQ0xheWVyVHJlZUhvc3RUZXN0KToKKyAgICAgICAgKFdURjo6
Q0NMYXllclRyZWVIb3N0VGVzdDo6YW5pbWF0ZUFuZExheW91dCk6CisgICAgICAgIChXVEY6OkND
TGF5ZXJUcmVlSG9zdFRlc3Q6OmJlZ2luQ29tbWl0T25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6
OkNDTGF5ZXJUcmVlSG9zdFRlc3Q6OmJlZ2luQ29tbWl0T25NYWluVGhyZWFkKToKKyAgICAgICAg
KFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6Y29tbWl0T25DQ1RocmVhZCk6CisgICAgICAgIChX
VEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3Q6OmNvbW1pdENvbXBsZXRlT25DQ1RocmVhZCk6CisgICAg
ICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3Q6OmNvbW1pdENvbXBsZXRlT25NYWluVGhyZWFk
KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6ZHJhd0xheWVyc0FuZFByZXNl
bnRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6dXBkYXRl
TGF5ZXJzKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6b25CZWdpblRlc3Qp
OgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0Ojpkb0VuZFRlc3QpOgorICAgICAg
ICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0OjpvbkVuZFRlc3QpOgorICAgICAgICAoV1RGOjpD
Q0xheWVyVHJlZUhvc3RUZXN0OjpydW5UZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVI
b3N0VGVzdDo6dGVzdFRpbWVvdXQpOgorICAgICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdENs
aWVudDo6TW9ja0xheWVyVHJlZUhvc3RDbGllbnQpOgorICAgICAgICAoV1RGOjpNb2NrTGF5ZXJU
cmVlSG9zdENsaWVudDo6Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCk6CisgICAgICAgIChX
VEY6Ok1vY2tMYXllclRyZWVIb3N0Q2xpZW50OjphbmltYXRlQW5kTGF5b3V0KToKKyAgICAgICAg
KFdURjo6TW9ja0xheWVyVHJlZUhvc3RDb21taXR0ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXVEY6
Ok1vY2tMYXllclRyZWVIb3N0Q29tbWl0dGVyOjpjb21taXQpOgorICAgICAgICAoV1RGOjpNb2Nr
TGF5ZXJUcmVlSG9zdENvbW1pdHRlcjo6TW9ja0xheWVyVHJlZUhvc3RDb21taXR0ZXIpOgorICAg
ICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdEltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXVEY6
Ok1vY2tMYXllclRyZWVIb3N0SW1wbDo6YmVnaW5Db21taXQpOgorICAgICAgICAoV1RGOjpNb2Nr
TGF5ZXJUcmVlSG9zdEltcGw6OmNvbW1pdENvbXBsZXRlKToKKyAgICAgICAgKFdURjo6TW9ja0xh
eWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzQW5kUHJlc2VudCk6CisgICAgICAgIChXVEY6Ok1v
Y2tMYXllclRyZWVIb3N0SW1wbDo6TW9ja0xheWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAgKFdU
Rjo6TW9ja0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmNyZWF0ZSk6CisgICAgICAgIChXVEY6Ok1v
Y2tMYXllclRyZWVIb3N0SW1wbFByb3h5OjpjcmVhdGVMYXllclRyZWVIb3N0SW1wbCk6CisgICAg
ICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0SW1wbFByb3h5OjpNb2NrTGF5ZXJUcmVlSG9zdElt
cGxQcm94eSk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0OjpNb2NrTGF5ZXJUcmVl
SG9zdCk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVI
b3N0SW1wbFByb3h5KToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxh
eWVycyk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0OjpiZWdpbkNvbW1pdCk6Cisg
ICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0Ojpjb21taXRDb21wbGV0ZSk6CisgICAgICAg
IChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3Q6OmRvQmVnaW5UZXN0KToKKyAgICAgICAgKFdURjo6
Q0NMYXllclRyZWVIb3N0VGVzdDo6ZW5kVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVl
SG9zdFRlc3RTaG9ydGxpdmVkMTo6Q0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQxKToKKyAg
ICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQxOjpiZWdpblRlc3QpOgor
ICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDE6OmFmdGVyVGVzdCk6
CisgICAgICAgIChXVEY6OlRFU1RfRik6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRl
c3RTaG9ydGxpdmVkMjo6Q0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQyKToKKyAgICAgICAg
KFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQyOjpiZWdpblRlc3QpOgorICAgICAg
ICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDI6OmFmdGVyVGVzdCk6CisgICAg
ICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTaG9ydGxpdmVkMzo6Q0NMYXllclRyZWVIb3N0
VGVzdFNob3J0bGl2ZWQzKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNob3J0
bGl2ZWQzOjpiZWdpblRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2hv
cnRsaXZlZDM6OmFmdGVyVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RD
b21taXRpbmdXaXRoQ29udGludW91c1JlZHJhdzo6Q0NMYXllclRyZWVIb3N0VGVzdENvbW1pdGlu
Z1dpdGhDb250aW51b3VzUmVkcmF3KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVz
dENvbW1pdGluZ1dpdGhDb250aW51b3VzUmVkcmF3OjpiZWdpblRlc3QpOgorICAgICAgICAoV1RG
OjpDQ0xheWVyVHJlZUhvc3RUZXN0Q29tbWl0aW5nV2l0aENvbnRpbnVvdXNSZWRyYXc6OmNvbW1p
dENvbXBsZXRlT25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RD
b21taXRpbmdXaXRoQ29udGludW91c1JlZHJhdzo6ZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhy
ZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdENvbW1pdGluZ1dpdGhDb250
aW51b3VzUmVkcmF3OjphZnRlclRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RU
ZXN0U2V0TmVlZHNDb21taXQxOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQxKToK
KyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzQ29tbWl0MTo6YmVnaW5U
ZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzQ29tbWl0MTo6
ZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRy
ZWVIb3N0VGVzdFNldE5lZWRzQ29tbWl0MTo6Y29tbWl0T25DQ1RocmVhZCk6CisgICAgICAgIChX
VEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc0NvbW1pdDE6OmFmdGVyVGVzdCk6CisgICAg
ICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc0NvbW1pdDI6OkNDTGF5ZXJUcmVl
SG9zdFRlc3RTZXROZWVkc0NvbW1pdDIpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RU
ZXN0U2V0TmVlZHNDb21taXQyOjpiZWdpblRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJl
ZUhvc3RUZXN0U2V0TmVlZHNDb21taXQyOjpkcmF3TGF5ZXJzQW5kUHJlc2VudE9uQ0NUaHJlYWQp
OgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQyOjpjb21t
aXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRz
Q29tbWl0Mjo6YWZ0ZXJUZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNl
dE5lZWRzUmVkcmF3OjpDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNSZWRyYXcpOgorICAgICAg
ICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNSZWRyYXc6OmJlZ2luVGVzdCk6Cisg
ICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc1JlZHJhdzo6ZHJhd0xheWVy
c0FuZFByZXNlbnRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVz
dFNldE5lZWRzUmVkcmF3Ojpjb21taXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXll
clRyZWVIb3N0VGVzdFNldE5lZWRzUmVkcmF3OjphZnRlclRlc3QpOgorICAgICAgICAqIHRlc3Rz
L0NDVGhyZWFkVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKwogMjAxMS0wNC0x
OCAgRXZhbiBNYXJ0aW4gIDxldmFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBFcmljIFNlaWRlbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IGMyM2M5ZWRj
YjQ2ODJjYjA0MGVjMzY3ZjM3YjVlYTg5ZjcxOWI3MWQuLjRlMmEzNWUxZDM4N2E0YjY2YzhiOTVi
ZTIxNmRlODY2ODM3NDFkZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtNTMs
NiArNTMsNyBAQAogICAgICAgICBdLAogICAgICAgICAnd2Via2l0X3VuaXR0ZXN0X2ZpbGVzJzog
WwogICAgICAgICAgICAgJ3Rlc3RzL0FyZW5hVGVzdEhlbHBlcnMuaCcsCisgICAgICAgICAgICAn
dGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDVGhy
ZWFkVGFza1Rlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1RocmVhZFRlc3QuY3BwJywK
ICAgICAgICAgICAgICd0ZXN0cy9EcmFnSW1hZ2VUZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYldpZGdldC5oCmluZGV4IDEyOTBhZDgxNjJiNjYyM2JjMzU5YTBmY2Zj
NTYzMTQ0ZjZmY2Y3NGIuLjEwZGUzYWRlMmQzYzU4ODVkMzRmMzlmNjc1Y2YxZDVhZDcwZmI4OTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oCkBAIC01NywxNSAr
NTcsMTcgQEAgcHVibGljOgogICAgIC8vIENhbGxlZCB0byByZXNpemUgdGhlIFdlYldpZGdldC4K
ICAgICB2aXJ0dWFsIHZvaWQgcmVzaXplKGNvbnN0IFdlYlNpemUmKSA9IDA7CiAKLSAgICAvLyBD
YWxsZWQgdG8gdXBkYXRlIGltcGVyYXRpdmUgYW5pbWF0aW9uIHN0YXRlLiAgVGhpcyBzaG91bGQg
YmUgY2FsbGVkIGJlZm9yZQotICAgIC8vIHBhaW50LCBhbHRob3VnaCB0aGUgY2xpZW50IGNhbiBy
YXRlLWxpbWl0IHRoZXNlIGNhbGxzLgotICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlKCkgPSAwOwor
ICAgIC8vIENhbGxlZCB0byB1cGRhdGUgaW1wZXJhdGl2ZSBhbmltYXRpb24gc3RhdGUuIFRoaXMg
c2hvdWxkIGJlIGNhbGxlZAorICAgIC8vIGJlZm9yZSBwYWludCwgYWx0aG91Z2ggdGhlIGNsaWVu
dCBjYW4gcmF0ZS1saW1pdCB0aGVzZSBjYWxscy4KKyAgICAvLyBGSVhNRTogcmVtb3ZlIGRlZmF1
bHQgYXJndW1lbnQgb25jZSByZW5kZXJfd2lkZ2V0IGhhcyBiZWVuIHVwZGF0ZWQgdG8KKyAgICAv
LyBpc3N1ZSB0aGUgY29ycmVjdCB2YWx1ZS4KKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZShkb3Vi
bGUgZnJhbWVCZWdpblRpbWUgPSAwKSA9IDA7CiAKICAgICAvLyBDYWxsZWQgdG8gbGF5b3V0IHRo
ZSBXZWJXaWRnZXQuICBUaGlzIE1VU1QgYmUgY2FsbGVkIGJlZm9yZSBQYWludCwKICAgICAvLyBh
bmQgaXQgbWF5IHJlc3VsdCBpbiBjYWxscyB0byBXZWJXaWRnZXRDbGllbnQ6OmRpZEludmFsaWRh
dGVSZWN0LgogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKSA9IDA7CiAKLSAgICAvLyBDYWxsZWQg
dG8gcGFpbnQgdGhlIHJlY3Rhbmd1bGFyIHJlZ2lvbiB3aXRoaW4gdGhlIFdlYldpZGdldCAKKyAg
ICAvLyBDYWxsZWQgdG8gcGFpbnQgdGhlIHJlY3Rhbmd1bGFyIHJlZ2lvbiB3aXRoaW4gdGhlIFdl
YldpZGdldAogICAgIC8vIG9udG8gdGhlIHNwZWNpZmllZCBjYW52YXMgYXQgKHZpZXdQb3J0Lngs
dmlld1BvcnQueSkuIFlvdSBNVVNUIGNhbGwKICAgICAvLyBMYXlvdXQgYmVmb3JlIGNhbGxpbmcg
dGhpcyBtZXRob2QuICBJdCBpcyBva2F5IHRvIGNhbGwgcGFpbnQKICAgICAvLyBtdWx0aXBsZSB0
aW1lcyBvbmNlIGxheW91dCBoYXMgYmVlbiBjYWxsZWQsIGFzc3VtaW5nIG5vIG90aGVyCkBAIC04
MSw2ICs4MywxMSBAQCBwdWJsaWM6CiAgICAgLy8gdGhlIHBhaW50IG1ldGhvZCBhYm92ZS4KICAg
ICB2aXJ0dWFsIHZvaWQgY29tcG9zaXRlKGJvb2wgZmluaXNoKSA9IDA7CiAKKyAgICAvLyBJbiB0
aHJlYWRlZCBjb21wb3NpdGluZyBtb2RlLCBpbmRpY2F0ZXMgdGhhdCB0aGUgd2lkZ2V0IHNob3Vs
ZCByZWRyYXcKKyAgICAvLyBpdHNlbGYsIGZvciBleGFtcGxlIGR1ZSB0byB3aW5kb3cgZGFtYWdl
LiBUaGUgcmVkcmF3IHdpbGwgYmVnaW4KKyAgICAvLyBhc3luY2hyb25vdXNseS4KKyAgICB2aXJ0
dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGUoKSAgeyB9CisKICAgICAvLyBDYWxsZWQgdG8gaW5m
b3JtIHRoZSBXZWJXaWRnZXQgb2YgYSBjaGFuZ2UgaW4gdGhlbWUuCiAgICAgLy8gSW1wbGVtZW50
b3JzIHRoYXQgY2FjaGUgcmVuZGVyZWQgY29waWVzIG9mIHdpZGdldHMgbmVlZCB0byByZS1yZW5k
ZXIKICAgICAvLyBvbiByZWNlaXZpbmcgdGhpcyBtZXNzYWdlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuY3BwCmluZGV4IGI0ZDQyNDZjM2Y2MDEwYmNh
ZjUwMjFkNGNkOTY4MWFiZmMzOTNkYjUuLmE1ZGRjNDZkOTM4ZmUwODQzNWEzODhkYmQ4MGY1N2Zl
OGE1MzNlOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVw
TWVudUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVu
dUltcGwuY3BwCkBAIC0xNTEsNyArMTUxLDcgQEAgdm9pZCBXZWJQb3B1cE1lbnVJbXBsOjpyZXNp
emUoY29uc3QgV2ViU2l6ZSYgbmV3U2l6ZSkKICAgICB9CiB9CiAKLXZvaWQgV2ViUG9wdXBNZW51
SW1wbDo6YW5pbWF0ZSgpCit2b2lkIFdlYlBvcHVwTWVudUltcGw6OmFuaW1hdGUoZG91YmxlIGZy
YW1lQmVnaW5UaW1lKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJQb3B1cE1lbnVJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQ
b3B1cE1lbnVJbXBsLmgKaW5kZXggNThhODgzZjU2OGY3ZWYzMGY5ZjJlMDAzNGExNzhlMWVhYmMw
YTgwNi4uY2UzNjMxOGJjNDZiMGM2MGE0MTg4MjA4NDc0NWFkN2M3NmEyOGMxZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuaApAQCAtNjIsNyArNjIs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCk7CiAgICAgdmlydHVhbCBXZWJT
aXplIHNpemUoKSB7IHJldHVybiBtX3NpemU7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVzaXplKGNv
bnN0IFdlYlNpemUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZSgpOworICAgIHZpcnR1YWwg
dm9pZCBhbmltYXRlKGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CiAgICAgdmlydHVhbCB2b2lkIGxh
eW91dCgpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJDYW52YXMqIGNhbnZhcywgY29uc3Qg
V2ViUmVjdCYgcmVjdCk7CiAgICAgdmlydHVhbCB2b2lkIHRoZW1lQ2hhbmdlZCgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCmluZGV4IDI0MzhhOTQ4MWQwMTcw
YzU2YjM2MzJhMGZiMDFkNmMzZDAxODdiOGQuLmEzZWJlNTJhYjAyMzIzYjkzMmJjZGFkNTJhZjY5
YmE5ZDI2ZmE2ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZp
ZXdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5j
cHAKQEAgLTk5MSwxNCArOTkxLDE4IEBAIHZvaWQgV2ViVmlld0ltcGw6OnJlc2l6ZShjb25zdCBX
ZWJTaXplJiBuZXdTaXplKQogI2VuZGlmCiB9CiAKLXZvaWQgV2ViVmlld0ltcGw6OmFuaW1hdGUo
KQordm9pZCBXZWJWaWV3SW1wbDo6YW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWUpCiB7CiAj
aWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQorICAgIC8vIEZJWE1FOiByZW1vdmUg
dGhpcyBvbmNlIHJlbmRlcl93aWRnZXQgaGFzIGJlZW4gbW9kaWZpZWQgdG8gcGFzcyBpbiBhCisg
ICAgLy8gZnJhbWVCZWdpblRpbWUuCisgICAgaWYgKCFmcmFtZUJlZ2luVGltZSkKKyAgICAgICAg
ZnJhbWVCZWdpblRpbWUgPSBjdXJyZW50VGltZSgpOwogICAgIFdlYkZyYW1lSW1wbCogd2ViZnJh
bWUgPSBtYWluRnJhbWVJbXBsKCk7CiAgICAgaWYgKHdlYmZyYW1lKSB7CiAgICAgICAgIEZyYW1l
VmlldyogdmlldyA9IHdlYmZyYW1lLT5mcmFtZVZpZXcoKTsKICAgICAgICAgaWYgKHZpZXcpCi0g
ICAgICAgICAgICB2aWV3LT5zZXJ2aWNlU2NyaXB0ZWRBbmltYXRpb25zKGNvbnZlcnRTZWNvbmRz
VG9ET01UaW1lU3RhbXAoY3VycmVudFRpbWUoKSkpOworICAgICAgICAgICAgdmlldy0+c2Vydmlj
ZVNjcmlwdGVkQW5pbWF0aW9ucyhjb252ZXJ0U2Vjb25kc1RvRE9NVGltZVN0YW1wKGZyYW1lQmVn
aW5UaW1lKSk7CiAgICAgfQogI2VuZGlmCiB9CkBAIC0xMDY4LDYgKzEwNzIsMTEgQEAgdm9pZCBX
ZWJWaWV3SW1wbDo6cGFpbnQoV2ViQ2FudmFzKiBjYW52YXMsIGNvbnN0IFdlYlJlY3QmIHJlY3Qp
CiB7CiAgICAgaWYgKGlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKSB7CiAjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykK
KyAgICAgICAgLy8gRklYTUU6IGZpeCByZWFkYmFjayBpbiB0aHJlYWRlZCBjb21wb3NpdGluZyBt
b2RlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisjZW5k
aWYKICAgICAgICAgZG9Db21wb3NpdGUoKTsKIAogICAgICAgICAvLyBJZiBhIGNhbnZhcyB3YXMg
cGFzc2VkIGluLCB3ZSB1c2UgaXQgdG8gZ3JhYiBhIGNvcHkgb2YgdGhlCkBAIC0xMDk2LDkgKzEx
MDUsMjIgQEAgdm9pZCBXZWJWaWV3SW1wbDo6dGhlbWVDaGFuZ2VkKCkKICAgICB2aWV3LT5pbnZh
bGlkYXRlUmVjdChkYW1hZ2VkUmVjdCk7CiB9CiAKKwordm9pZCBXZWJWaWV3SW1wbDo6YW5pbWF0
ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpCit7CisgICAgYW5pbWF0ZShmcmFtZUJl
Z2luVGltZSk7CisgICAgbGF5b3V0KCk7Cit9CisKIHZvaWQgV2ViVmlld0ltcGw6OmNvbXBvc2l0
ZShib29sIGZpbmlzaCkKIHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisjaWYg
VVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgIGlmIChmaW5pc2gpCisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIGVsc2UKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5zZXRO
ZWVkc1JlZHJhdygpOworI2Vsc2UKICAgICBUUkFDRV9FVkVOVCgiV2ViVmlld0ltcGw6OmNvbXBv
c2l0ZSIsIHRoaXMsIDApOwogICAgIGlmIChtX3JlY3JlYXRpbmdHcmFwaGljc0NvbnRleHQpIHsK
ICAgICAgICAgLy8gcmVhbGxvY2F0ZVJlbmRlcmVyIHdpbGwgcmVxdWVzdCBhIHJlcGFpbnQgd2hl
dGhlciBvciBub3QgaXQgc3VjY2VlZGVkCkBAIC0xMTI4LDYgKzExNTAsNyBAQCB2b2lkIFdlYlZp
ZXdJbXBsOjpjb21wb3NpdGUoYm9vbCBmaW5pc2gpCiAgICAgICAgIHNldFJvb3RMYXllck5lZWRz
RGlzcGxheSgpOwogICAgIH0KICNlbmRpZgorI2VuZGlmCiB9CiAKIGNvbnN0IFdlYklucHV0RXZl
bnQqIFdlYlZpZXdJbXBsOjptX2N1cnJlbnRJbnB1dEV2ZW50ID0gMDsKQEAgLTIzMjcsOSArMjM1
MCwyNCBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRSb290R3JhcGhpY3NMYXllcihXZWJDb3JlOjpQ
bGF0Zm9ybUxheWVyKiBsYXllcikKICAgICAgICAgbV9jbGllbnQtPmRpZEludmFsaWRhdGVSZWN0
KGRhbWFnZWRSZWN0KTsKIH0KIAordm9pZCBXZWJWaWV3SW1wbDo6c2NoZWR1bGVDb21wb3NpdGUo
KQoreworI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICBpZiAobV9sYXllclJlbmRl
cmVyKQorICAgICAgICBtX2xheWVyUmVuZGVyZXItPnNldE5lZWRzUmVkcmF3KCk7CisjZWxzZQor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCit9CisKIHZvaWQgV2ViVmlld0ltcGw6
OnNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpCiB7CisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lU
SU5HKQorICAgIGlmIChtX2xheWVyUmVuZGVyZXIpCisgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+
c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyNlbHNlCiAgICAgbV9jbGllbnQtPnNjaGVkdWxl
Q29tcG9zaXRlKCk7CisjZW5kaWYKIH0KIAogCkBAIC0yNDAxLDE1ICsyNDM5LDEwIEBAIHZvaWQg
V2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZShib29sIGFjdGl2
ZSkKIAogICAgICAgICBtX2NsaWVudC0+ZGlkQWN0aXZhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5n
KHRydWUpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
Y29udGV4dCA9IG1fdGVtcG9yYXJ5T25zY3JlZW5HcmFwaGljc0NvbnRleHQzRC5yZWxlYXNlKCk7
Ci0gICAgICAgIGlmICghY29udGV4dCkgewotICAgICAgICAgICAgY29udGV4dCA9IEdyYXBoaWNz
Q29udGV4dDNEOjpjcmVhdGUoZ2V0Q29tcG9zaXRvckNvbnRleHRBdHRyaWJ1dGVzKCksIG1fcGFn
ZS0+Y2hyb21lKCksIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRv
dyk7Ci0gICAgICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZXNoYXBlKHN0ZDo6bWF4KDEsIG1fc2l6ZS53aWR0aCksIHN0ZDo6bWF4KDEsIG1fc2l6ZS5oZWln
aHQpKTsKLSAgICAgICAgfQotCi0KLSAgICAgICAgbV9sYXllclJlbmRlcmVyID0gTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpjcmVhdGUoY29udGV4dC5yZWxlYXNlKCksIFdlYlZpZXdJbXBsQ29udGVu
dFBhaW50ZXI6OmNyZWF0ZSh0aGlzKSk7CisgICAgICAgIG1fbGF5ZXJSZW5kZXJlciA9IExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMsIFdlYlZpZXdJbXBsQ29udGVudFBhaW50ZXI6
OmNyZWF0ZSh0aGlzKSk7CisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgICAgICB1
cGRhdGVMYXllclJlbmRlcmVyU2V0dGluZ3MoKTsKKyNlbmRpZgogICAgICAgICBpZiAobV9sYXll
clJlbmRlcmVyKSB7CiAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkQWN0aXZhdGVBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nKHRydWUpOwogICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRp
bmdBY3RpdmUgPSB0cnVlOwpAQCAtMjQzNiwyNCArMjQ2OSwyOSBAQCB2b2lkIFdlYlZpZXdJbXBs
Ojpkb0NvbXBvc2l0ZSgpCiAgICAgaWYgKCFwYWdlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IG1fbGF5ZXJSZW5kZXJlci0+c2V0Q29tcG9zaXRlT2Zmc2NyZWVuKHNldHRpbmdzKCktPmNvbXBv
c2l0ZVRvVGV4dHVyZUVuYWJsZWQoKSk7Ci0KLSAgICBDQ0hlYWRzVXBEaXNwbGF5KiBodWQgPSBt
X2xheWVyUmVuZGVyZXItPmhlYWRzVXBEaXNwbGF5KCk7Ci0gICAgaHVkLT5zZXRTaG93RlBTQ291
bnRlcihzZXR0aW5ncygpLT5zaG93RlBTQ291bnRlcigpKTsKLSAgICBodWQtPnNldFNob3dQbGF0
Zm9ybUxheWVyVHJlZShzZXR0aW5ncygpLT5zaG93UGxhdGZvcm1MYXllclRyZWUoKSk7CisgICAg
dXBkYXRlTGF5ZXJSZW5kZXJlclNldHRpbmdzKCk7CisgICAgbV9sYXllclJlbmRlcmVyLT51cGRh
dGVMYXllcnMoKTsKKyAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdMYXllcnMoKTsKK30KIAotICAg
IG1fbGF5ZXJSZW5kZXJlci0+dXBkYXRlQW5kRHJhd0xheWVycygpOworUGFzc1JlZlB0cjxHcmFw
aGljc0NvbnRleHQzRD4gV2ViVmlld0ltcGw6OmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0Qo
KQoreworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IG1fdGVtcG9yYXJ5
T25zY3JlZW5HcmFwaGljc0NvbnRleHQzRC5yZWxlYXNlKCk7CisgICAgaWYgKCFjb250ZXh0KSB7
CisgICAgICAgIGNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKGdldENvbXBvc2l0
b3JDb250ZXh0QXR0cmlidXRlcygpLCBtX3BhZ2UtPmNocm9tZSgpLCBHcmFwaGljc0NvbnRleHQz
RDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOworICAgICAgICBpZiAoY29udGV4dCkKKyAg
ICAgICAgICAgIGNvbnRleHQtPnJlc2hhcGUoc3RkOjptYXgoMSwgbV9zaXplLndpZHRoKSwgc3Rk
OjptYXgoMSwgbV9zaXplLmhlaWdodCkpOworICAgIH0KKyAgICByZXR1cm4gY29udGV4dDsKIH0K
IAogdm9pZCBXZWJWaWV3SW1wbDo6cmVhbGxvY2F0ZVJlbmRlcmVyKCkKIHsKLSAgICBSZWZQdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IG5ld0NvbnRleHQgPSBtX3RlbXBvcmFyeU9uc2NyZWVuR3JhcGhp
Y3NDb250ZXh0M0QuZ2V0KCk7Ci0gICAgV2ViR3JhcGhpY3NDb250ZXh0M0QqIHdlYkNvbnRleHQg
PSBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0Qo
bmV3Q29udGV4dC5nZXQoKSk7Ci0gICAgaWYgKCFuZXdDb250ZXh0IHx8ICF3ZWJDb250ZXh0IHx8
IHdlYkNvbnRleHQtPmlzQ29udGV4dExvc3QoKSkKLSAgICAgICAgbmV3Q29udGV4dCA9IEdyYXBo
aWNzQ29udGV4dDNEOjpjcmVhdGUoCi0gICAgICAgICAgICBnZXRDb21wb3NpdG9yQ29udGV4dEF0
dHJpYnV0ZXMoKSwgbV9wYWdlLT5jaHJvbWUoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRp
cmVjdGx5VG9Ib3N0V2luZG93KTsKICAgICAvLyBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlIG1p
Z2h0IGZhaWwgYW5kIHJldHVybiAwLCBpbiB0aGF0IGNhc2UgTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpjcmVhdGUgd2lsbCBhbHNvIHJldHVybiAwLgotICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hy
b21pdW0+IGxheWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShuZXdD
b250ZXh0LCBXZWJWaWV3SW1wbENvbnRlbnRQYWludGVyOjpjcmVhdGUodGhpcykpOworICAgIFJl
ZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmNyZWF0ZSh0aGlzLCBXZWJWaWV3SW1wbENvbnRlbnRQYWludGVyOjpjcmVhdGUo
dGhpcykpOworI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICB1cGRhdGVMYXllclJl
bmRlcmVyU2V0dGluZ3MoKTsKKyNlbmRpZgogCiAgICAgLy8gUmVhdHRhY2ggdGhlIHJvb3QgbGF5
ZXIuICBDaGlsZCBsYXllcnMgd2lsbCBnZXQgcmVhdHRhY2hlZCBhcyBhIHNpZGUgZWZmZWN0IG9m
IHVwZGF0ZUxheWVyc1JlY3Vyc2l2ZS4KICAgICBpZiAobGF5ZXJSZW5kZXJlcikgewpAQCAtMjQ2
NCw3ICsyNTAyLDEwIEBAIHZvaWQgV2ViVmlld0ltcGw6OnJlYWxsb2NhdGVSZW5kZXJlcigpCiAg
ICAgICAgIC8vIHJlc2hhcGUgc2hvdWxkIHJlYWxseSBiZSBleHRyYWN0ZWQgaW50byBvbmUgZnVu
Y3Rpb247IGl0IGlzIG5vdAogICAgICAgICAvLyBpbW1lZGlhdGVseSBvYnZpb3VzIHRoYXQgR3Jh
cGhpY3NDb250ZXh0M0Qgb2JqZWN0IHdpbGwgbm90CiAgICAgICAgIC8vIGZ1bmN0aW9uIHByb3Bl
cmx5IHVudGlsIGl0cyByZXNoYXBlIG1ldGhvZCBpcyBjYWxsZWQuCi0gICAgICAgIG5ld0NvbnRl
eHQtPnJlc2hhcGUoc3RkOjptYXgoMSwgbV9zaXplLndpZHRoKSwgc3RkOjptYXgoMSwgbV9zaXpl
LmhlaWdodCkpOworICAgICAgICBsYXllclJlbmRlcmVyLT5jb250ZXh0KCktPnJlc2hhcGUoc3Rk
OjptYXgoMSwgbV9zaXplLndpZHRoKSwgc3RkOjptYXgoMSwgbV9zaXplLmhlaWdodCkpOworI2lm
IFVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICAgICAgdXBkYXRlTGF5ZXJSZW5kZXJlclNl
dHRpbmdzKCk7CisjZW5kaWYKICAgICAgICAgc2V0Um9vdEdyYXBoaWNzTGF5ZXIobV9sYXllclJl
bmRlcmVyLT5yb290TGF5ZXIoKSk7CiAgICAgICAgIC8vIEZvcmNlcyBWaWV3SG9zdE1zZ19EaWRB
Y3RpdmF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcgdG8gYmUgc2VudCBzbwogICAgICAgICAvLyB0
aGF0IHRoZSBicm93c2VyIHByb2Nlc3MgY2FuIHJlYWNxdWlyZSBzdXJmYWNlcy4KQEAgLTI0NzQs
OSArMjUxNSwyMiBAQCB2b2lkIFdlYlZpZXdJbXBsOjpyZWFsbG9jYXRlUmVuZGVyZXIoKQogfQog
I2VuZGlmCiAKK3ZvaWQgV2ViVmlld0ltcGw6OnVwZGF0ZUxheWVyUmVuZGVyZXJTZXR0aW5ncygp
Cit7CisgICAgaWYgKCFtX2xheWVyUmVuZGVyZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
bGF5ZXJSZW5kZXJlci0+c2V0Q29tcG9zaXRlT2Zmc2NyZWVuKHNldHRpbmdzKCktPmNvbXBvc2l0
ZVRvVGV4dHVyZUVuYWJsZWQoKSk7CisKKyAgICBDQ0hlYWRzVXBEaXNwbGF5KiBodWQgPSBtX2xh
eWVyUmVuZGVyZXItPmhlYWRzVXBEaXNwbGF5KCk7CisgICAgaHVkLT5zZXRTaG93RlBTQ291bnRl
cihzZXR0aW5ncygpLT5zaG93RlBTQ291bnRlcigpKTsKKyAgICBodWQtPnNldFNob3dQbGF0Zm9y
bUxheWVyVHJlZShzZXR0aW5ncygpLT5zaG93UGxhdGZvcm1MYXllclRyZWUoKSk7Cit9CisKIHZv
aWQgV2ViVmlld0ltcGw6OnVwZGF0ZUxheWVyUmVuZGVyZXJWaWV3cG9ydCgpCiB7Ci0gICAgQVNT
RVJUKG1fbGF5ZXJSZW5kZXJlcik7CisgICAgaWYgKCFtX2xheWVyUmVuZGVyZXIpCisgICAgICAg
IHJldHVybjsKIAogICAgIGlmICghcGFnZSgpKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAppbmRleCBmMTAyMDJmNzZkYTZjZGUzMjY1OTA5
YjRmZTY1ZjcwYWFkYjhiZjkzLi4wZGY3MjJiNGJmYjVjMDE0NDRhZWQ3YzU2Y2UxNTA2ZTBiYjM1
ZGU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKQEAgLTU1LDYg
KzU1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ2hyb21pdW1EYXRhT2JqZWN0Owog
Y2xhc3MgRG9jdW1lbnRMb2FkZXI7CiBjbGFzcyBGcmFtZTsKK2NsYXNzIEdyYXBoaWNzQ29udGV4
dDNEOwogY2xhc3MgSGlzdG9yeUl0ZW07CiBjbGFzcyBIaXRUZXN0UmVzdWx0OwogY2xhc3MgS2V5
Ym9hcmRFdmVudDsKQEAgLTg2LDE3ICs4NywxOCBAQCBjbGFzcyBXZWJNb3VzZVdoZWVsRXZlbnQ7
CiBjbGFzcyBXZWJTZXR0aW5nc0ltcGw7CiBjbGFzcyBXZWJUb3VjaEV2ZW50OwogCi1jbGFzcyBX
ZWJWaWV3SW1wbCA6IHB1YmxpYyBXZWJWaWV3LCBwdWJsaWMgUmVmQ291bnRlZDxXZWJWaWV3SW1w
bD4geworY2xhc3MgV2ViVmlld0ltcGwgOiBwdWJsaWMgV2ViVmlldywgcHVibGljIFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdENsaWVudCwgcHVibGljIFJlZkNvdW50ZWQ8V2ViVmlld0ltcGw+IHsK
IHB1YmxpYzoKICAgICAvLyBXZWJXaWRnZXQgbWV0aG9kczoKICAgICB2aXJ0dWFsIHZvaWQgY2xv
c2UoKTsKICAgICB2aXJ0dWFsIFdlYlNpemUgc2l6ZSgpIHsgcmV0dXJuIG1fc2l6ZTsgfQogICAg
IHZpcnR1YWwgdm9pZCByZXNpemUoY29uc3QgV2ViU2l6ZSYpOwotICAgIHZpcnR1YWwgdm9pZCBh
bmltYXRlKCk7CisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGUoZG91YmxlIGZyYW1lQmVnaW5UaW1l
KTsKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFdl
YkNhbnZhcyosIGNvbnN0IFdlYlJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgdGhlbWVDaGFuZ2Vk
KCk7CiAgICAgdmlydHVhbCB2b2lkIGNvbXBvc2l0ZShib29sIGZpbmlzaCk7CisgICAgdmlydHVh
bCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRlKCk7CiAgICAgdmlydHVhbCBib29sIGhhbmRsZUlucHV0
RXZlbnQoY29uc3QgV2ViSW5wdXRFdmVudCYpOwogICAgIHZpcnR1YWwgdm9pZCBtb3VzZUNhcHR1
cmVMb3N0KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKGJvb2wgZW5hYmxlKTsKQEAgLTE5
Niw2ICsxOTgsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgaW5hY3RpdmVGb3JlZ3JvdW5kQ29sb3IpOwogICAgIHZpcnR1YWwgdm9pZCBw
ZXJmb3JtQ3VzdG9tQ29udGV4dE1lbnVBY3Rpb24odW5zaWduZWQgYWN0aW9uKTsKIAorICAgIC8v
IENDTGF5ZXJUcmVlSG9zdENsaWVudAorICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0
KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRD4gY3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpOworCisKICAgICAvLyBX
ZWJWaWV3SW1wbAogCiAgICAgdm9pZCBzZXRJZ25vcmVJbnB1dEV2ZW50cyhib29sIG5ld1ZhbHVl
KTsKQEAgLTMzOSw2ICszNDYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRSb290TGF5ZXJOZWVk
c0Rpc3BsYXkoKTsKICAgICB2b2lkIHNjcm9sbFJvb3RMYXllclJlY3QoY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KTsK
ICAgICB2b2lkIGludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
KTsKKyAgICB2b2lkIGRvVXBkYXRlQW5kQ29tcG9zaXRlKCk7CiAjZW5kaWYKIAogICAgIC8vIFJl
dHVybnMgdGhlIG9uc2NyZWVuIDNEIGNvbnRleHQgdXNlZCBieSB0aGUgY29tcG9zaXRvci4gVGhp
cyBpcwpAQCAtNDAyLDExICs0MTAsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViUG9pbnQmIHNjcmVlblBvaW50LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEcmFnQWN0aW9u
KTsKIAorCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIHZvaWQgc2V0SXNB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGJvb2wpOwogICAgIHZvaWQgZG9Db21wb3NpdGUo
KTsKICAgICB2b2lkIGRvUGl4ZWxSZWFkYmFja1RvQ2FudmFzKFdlYkNhbnZhcyosIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmKTsKICAgICB2b2lkIHJlYWxsb2NhdGVSZW5kZXJlcigpOworICAgIHZv
aWQgdXBkYXRlTGF5ZXJSZW5kZXJlclNldHRpbmdzKCk7CiAgICAgdm9pZCB1cGRhdGVMYXllclJl
bmRlcmVyVmlld3BvcnQoKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMWZjNzYyY2U0
NTZjNjUxOGVhZjQxNGZiNjE0NmZmZmJlMjI4MjY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcApAQCAtMCwwICsx
LDUzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKFRI
UkVBREVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCisK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVl
SG9zdEltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ01haW5UaHJlYWRUYXNrLmgiCisjaW5jbHVkZSAi
Y2MvQ0NUaHJlYWRUYXNrLmgiCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDx3
ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFk
Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV1RGOworCitu
YW1lc3BhY2UgeworCitjbGFzcyBNb2NrTGF5ZXJUcmVlSG9zdDsKK2NsYXNzIE1vY2tMYXllclRy
ZWVIb3N0Q2xpZW50OworY2xhc3MgTW9ja0xheWVyVHJlZUhvc3RJbXBsOworCisvLyBUaGUgQ0NM
YXllclRyZWVIb3N0VGVzdCBydW5zIHdpdGggdGhlIG1haW4gbG9vcCBydW5uaW5nLiBJdCBpbnN0
YW50aWF0ZXMgYSBzaW5nbGUgTW9ja0xheWVyVHJlZUhvc3QgYW5kIGFzc29jaWF0ZWQKKy8vIE1v
Y2tMYXllclRyZWVIb3N0SW1wbC9Nb2NrTGF5ZXJUcmVlSG9zdENsaWVudC4KKy8vCisvLyBiZWdp
blRlc3QoKSBpcyBjYWxsZWQgb25jZSB0aGUgbWFpbiBtZXNzYWdlIGxvb3AgaXMgcnVubmluZyBh
bmQgdGhlIGxheWVyIHRyZWUgaG9zdCBpcyBpbml0aWFsaXplZC4KKy8vCisvLyBLZXkgc3RhZ2Vz
IG9mIHRoZSBkcmF3aW5nIGxvb3AsIGUuZy4gZHJhd2luZyBvciBjb21taXRpbmcsIHJlZGlyZWN0
IHRvIENDTGF5ZXJUcmVlSG9zdFRlc3QgbWV0aG9kcyBvZiBzaW1pbGFyIG5hbWVzLgorLy8gVG8g
dHJhY2sgdGhlIGNvbW1pdCBwcm9jZXNzLCBvdmVycmlkZSB0aGVzZSBmdW5jdGlvbnMuCisvLwor
Ly8gVGhlIHRlc3QgY29udGludWVzIHVudGlsIHNvbWVvbmUgY2FsbHMgZW5kVGVzdC4gZW5kVGVz
dCBjYW4gYmUgY2FsbGVkIG9uIGFueSB0aHJlYWQsIGJ1dCBiZSBhd2FyZSB0aGF0CisvLyBlbmRp
bmcgdGhlIHRlc3QgaXMgYW4gYXN5bmNocm9ub3VzIHByb2Nlc3MuCitjbGFzcyBDQ0xheWVyVHJl
ZUhvc3RUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworcHVibGljOgorICAgIENDTGF5ZXJU
cmVlSG9zdFRlc3QoKQorICAgICAgICA6IG1fYmVnaW5uaW5nKGZhbHNlKQorICAgICAgICAsIG1f
ZW5kV2hlbkJlZ2luUmV0dXJucyhmYWxzZSkKKyAgICAgICAgLCBtX3J1bm5pbmcoZmFsc2UpCisg
ICAgICAgICwgbV90aW1lZE91dChmYWxzZSkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJU
ZXN0KCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGJlZ2luVGVzdCgpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgYW5pbWF0ZUFuZExheW91dChNb2NrTGF5ZXJUcmVlSG9zdENsaWVudCogbGF5ZXJU
cmVlSG9zdCwgZG91YmxlIGZyYW1lQmVnaW5UaW1lKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYmVn
aW5Db21taXRPbkNDVGhyZWFkKE1vY2tMYXllclRyZWVIb3N0SW1wbCogbGF5ZXJUcmVlSG9zdElt
cGwpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdE9uTWFpblRocmVhZChNb2NrTGF5
ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGNvbW1pdE9u
Q0NUaHJlYWQoTW9ja0xheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QsIE1vY2tMYXllclRyZWVI
b3N0SW1wbCogbGF5ZXJUcmVlSG9zdEltcGwpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjb21taXRD
b21wbGV0ZU9uQ0NUaHJlYWQoTW9ja0xheWVyVHJlZUhvc3RJbXBsKiBsYXllclRyZWVIb3N0SW1w
bCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGNvbW1pdENvbXBsZXRlT25NYWluVGhyZWFkKE1vY2tM
YXllclRyZWVIb3N0KiBsYXllclRyZWVIb3N0KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xh
eWVyc0FuZFByZXNlbnRPbkNDVGhyZWFkKE1vY2tMYXllclRyZWVIb3N0SW1wbCogbGF5ZXJUcmVl
SG9zdEltcGwpIHsgfQorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVMYXllcnMoTW9ja0xheWVyVHJl
ZUhvc3QqIGxheWVyVHJlZUhvc3QpIHsgfQorCisgICAgdm9pZCBlbmRUZXN0KCk7CisKK3Byb3Rl
Y3RlZDoKKyAgICB2b2lkIGRvQmVnaW5UZXN0KCk7CisKKyAgICBzdGF0aWMgdm9pZCBvbkJlZ2lu
VGVzdCh2b2lkKiBzZWxmKQorICAgIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8Q0NMYXllclRyZWVI
b3N0VGVzdCo+KHNlbGYpLT5kb0JlZ2luVGVzdCgpOworICAgIH0KKworICAgIHZvaWQgZG9FbmRU
ZXN0KCkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgb25FbmRUZXN0KHZvaWQqIHNl
bGYpCisgICAgeworICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgICAgICBDQ0xh
eWVyVHJlZUhvc3RUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8Q0NMYXllclRyZWVIb3N0VGVzdCo+
KHNlbGYpOworICAgICAgICB0ZXN0LT5tX2xheWVyVHJlZUhvc3QuY2xlYXIoKTsKKyAgICAgICAg
dGVzdC0+bV9jbGllbnQuY2xlYXIoKTsKKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlF1aXRNZXNz
YWdlTG9vcCgpOworICAgIH0KKworICAgIHZvaWQgcnVuVGVzdCgpCisgICAgeworICAgICAgICB3
ZWJraXRfc3VwcG9ydDo6UG9zdERlbGF5ZWRUYXNrKENDTGF5ZXJUcmVlSG9zdFRlc3Q6Om9uQmVn
aW5UZXN0LCBzdGF0aWNfY2FzdDx2b2lkKj4odGhpcyksIDApOworICAgICAgICB3ZWJraXRfc3Vw
cG9ydDo6UG9zdERlbGF5ZWRUYXNrKENDTGF5ZXJUcmVlSG9zdFRlc3Q6OnRlc3RUaW1lb3V0LCBz
dGF0aWNfY2FzdDx2b2lkKj4odGhpcyksIDUwMDApOworICAgICAgICB3ZWJraXRfc3VwcG9ydDo6
UnVuTWVzc2FnZUxvb3AoKTsKKyAgICAgICAgbV9ydW5uaW5nID0gZmFsc2U7CisgICAgICAgIGJv
b2wgdGltZWRPdXQgPSBtX3RpbWVkT3V0OyAvLyBTYXZlIHdoZXRoZXIgd2UncmUgdGltZWQgb3V0
IGluIGNhc2UgUnVuQWxsUGVuZGluZ01lc3NhZ2VzIGhhcyB0aGUgdGltZW91dC4KKyAgICAgICAg
d2Via2l0X3N1cHBvcnQ6OlJ1bkFsbFBlbmRpbmdNZXNzYWdlcygpOworICAgICAgICBpZiAodGlt
ZWRPdXQpIHsKKyAgICAgICAgICAgIHByaW50ZigiVGVzdCB0aW1lZCBvdXQiKTsKKyAgICAgICAg
ICAgIEZBSUwoKSA8PCAiVGVzdCB0aW1lZCBvdXQiOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIGFmdGVyVGVzdCgpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHRl
c3RUaW1lb3V0KHZvaWQqIHNlbGYpCisgICAgeworICAgICAgICBDQ0xheWVyVHJlZUhvc3RUZXN0
KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8Q0NMYXllclRyZWVIb3N0VGVzdCo+KHNlbGYpOworICAgICAg
ICBpZiAoIXRlc3QtPm1fcnVubmluZykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGVz
dC0+bV90aW1lZE91dCA9IHRydWU7CisgICAgICAgIHRlc3QtPmVuZFRlc3QoKTsKKyAgICB9CisK
KyAgICBNdXRleCBtX3RyYWNlc0xvY2s7CisgICAgVmVjdG9yPHN0ZDo6c3RyaW5nPiBtX3RyYWNl
czsKKworICAgIE93blB0cjxNb2NrTGF5ZXJUcmVlSG9zdENsaWVudD4gbV9jbGllbnQ7CisgICAg
UmVmUHRyPE1vY2tMYXllclRyZWVIb3N0PiBtX2xheWVyVHJlZUhvc3Q7CisKK3ByaXZhdGU6Cisg
ICAgYm9vbCBtX2JlZ2lubmluZzsKKyAgICBib29sIG1fZW5kV2hlbkJlZ2luUmV0dXJuczsKKyAg
ICBib29sIG1fcnVubmluZzsKKyAgICBib29sIG1fdGltZWRPdXQ7Cit9OworCitjbGFzcyBNb2Nr
TGF5ZXJUcmVlSG9zdENsaWVudCA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RDbGllbnQgeworcHVi
bGljOgorICAgIE1vY2tMYXllclRyZWVIb3N0Q2xpZW50KENDTGF5ZXJUcmVlSG9zdFRlc3QqIHRl
c3QpIDogbV90ZXN0KHRlc3QpIHsgfQorCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiBjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZjxHcmFwaGljc0NvbnRleHQzRD4oMCk7CisgICAgfQorCisgICAgdmly
dHVhbCB2b2lkIGFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQorICAgIHsK
KyAgICAgICAgbV90ZXN0LT5hbmltYXRlQW5kTGF5b3V0KHRoaXMsIGZyYW1lQmVnaW5UaW1lKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdCogbV90ZXN0OworfTsK
KworY2xhc3MgTW9ja0xheWVyVHJlZUhvc3RDb21taXR0ZXIgOiBwdWJsaWMgQ0NMYXllclRyZWVI
b3N0Q29tbWl0dGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxNb2NrTGF5ZXJU
cmVlSG9zdENvbW1pdHRlcj4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdFRlc3QqIHRlc3QpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE1vY2tMYXllclRyZWVIb3N0Q29tbWl0dGVy
KHRlc3QpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0KENDTGF5ZXJUcmVlSG9z
dCogaG9zdCwgQ0NMYXllclRyZWVIb3N0SW1wbCogaG9zdEltcGwpCisgICAgeworICAgICAgICBD
Q0xheWVyVHJlZUhvc3RDb21taXR0ZXI6OmNvbW1pdChob3N0LCBob3N0SW1wbCk7CisgICAgICAg
IG1fdGVzdC0+Y29tbWl0T25DQ1RocmVhZChyZWludGVycHJldF9jYXN0PE1vY2tMYXllclRyZWVI
b3N0Kj4oaG9zdCksIHJlaW50ZXJwcmV0X2Nhc3Q8TW9ja0xheWVyVHJlZUhvc3RJbXBsKj4oaG9z
dEltcGwpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTW9ja0xheWVyVHJlZUhvc3RDb21taXR0
ZXIoQ0NMYXllclRyZWVIb3N0VGVzdCogdGVzdCkgOiBtX3Rlc3QodGVzdCkgeyB9CisgICAgQ0NM
YXllclRyZWVIb3N0VGVzdCogbV90ZXN0OworfTsKKworY2xhc3MgTW9ja0xheWVyVHJlZUhvc3RJ
bXBsIDogcHVibGljIENDTGF5ZXJUcmVlSG9zdEltcGwgeworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzT3duUHRyPE1vY2tMYXllclRyZWVIb3N0SW1wbD4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdElt
cGxDbGllbnQqIGNsaWVudCwgQ0NMYXllclRyZWVIb3N0VGVzdCogdGVzdCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgTW9ja0xheWVyVHJlZUhvc3RJbXBsKGNsaWVudCwgdGVz
dCkpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdCgpCisgICAgeworICAg
ICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsOjpiZWdpbkNvbW1pdCgpOworICAgICAgICBtX3Rlc3Qt
PmJlZ2luQ29tbWl0T25DQ1RocmVhZCh0aGlzKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
Y29tbWl0Q29tcGxldGUoKQorICAgIHsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29t
bWl0Q29tcGxldGUoKTsKKyAgICAgICAgbV90ZXN0LT5jb21taXRDb21wbGV0ZU9uQ0NUaHJlYWQo
dGhpcyk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNBbmRQcmVzZW50KCkK
KyAgICB7CisgICAgICAgIG1fdGVzdC0+ZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhyZWFkKHRo
aXMpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNb2NrTGF5ZXJUcmVlSG9zdEltcGwoQ0NMYXll
clRyZWVIb3N0SW1wbENsaWVudCogY2xpZW50LCBDQ0xheWVyVHJlZUhvc3RUZXN0KiB0ZXN0KQor
ICAgICAgICAgICAgOiBDQ0xheWVyVHJlZUhvc3RJbXBsKGNsaWVudCkKKyAgICAgICAgICAgICwg
bV90ZXN0KHRlc3QpCisgICAgeworICAgIH0KKworICAgIENDTGF5ZXJUcmVlSG9zdFRlc3QqIG1f
dGVzdDsKK307CisKK2NsYXNzIE1vY2tMYXllclRyZWVIb3N0SW1wbFByb3h5IDogcHVibGljIEND
TGF5ZXJUcmVlSG9zdEltcGxQcm94eSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8
TW9ja0xheWVyVHJlZUhvc3RJbXBsUHJveHk+IGNyZWF0ZShDQ0xheWVyVHJlZUhvc3QqIGhvc3Qs
IENDTGF5ZXJUcmVlSG9zdFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IE1vY2tMYXllclRyZWVIb3N0SW1wbFByb3h5KGhvc3QsIHRlc3QpKTsKKyAgICB9CisK
KyAgICBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IGNyZWF0ZUxheWVyVHJlZUhvc3RJ
bXBsKCkKKyAgICB7CisgICAgICAgIHJldHVybiBNb2NrTGF5ZXJUcmVlSG9zdEltcGw6OmNyZWF0
ZSh0aGlzLCBtX3Rlc3QpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNb2NrTGF5ZXJUcmVlSG9z
dEltcGxQcm94eShDQ0xheWVyVHJlZUhvc3QqIGhvc3QsIENDTGF5ZXJUcmVlSG9zdFRlc3QqIHRl
c3QpCisgICAgICAgIDogQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5KGhvc3QpCisgICAgICAgICwg
bV90ZXN0KHRlc3QpIHsgfQorCisgICAgQ0NMYXllclRyZWVIb3N0VGVzdCogbV90ZXN0OworfTsK
KworY2xhc3MgTW9ja0xheWVyVHJlZUhvc3QgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0IHsKK3B1
YmxpYzoKKyAgICBNb2NrTGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVu
dCwgQ0NMYXllclRyZWVIb3N0VGVzdCogdGVzdCkKKyAgICAgICAgOiBDQ0xheWVyVHJlZUhvc3Qo
Y2xpZW50KQorICAgICAgICAsIG1fdGVzdCh0ZXN0KSB7IH0KKworICAgIHZpcnR1YWwgUGFzc093
blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk+IGNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsUHJv
eHkoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE1vY2tMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpj
cmVhdGUodGhpcywgbV90ZXN0KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlTGF5
ZXJzKCkKKyAgICB7CisgICAgICAgIG1fdGVzdC0+dXBkYXRlTGF5ZXJzKHRoaXMpOworICAgIH0K
KworICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI+IGNyZWF0
ZUxheWVyVHJlZUhvc3RDb21taXR0ZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE1vY2tMYXll
clRyZWVIb3N0Q29tbWl0dGVyOjpjcmVhdGUodGhpcyk7CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIGJlZ2luQ29tbWl0KCkKKyAgICB7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdDo6YmVnaW5D
b21taXQoKTsKKyAgICAgICAgbV90ZXN0LT5iZWdpbkNvbW1pdE9uTWFpblRocmVhZCh0aGlzKTsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q29tcGxldGUoKQorICAgIHsKKyAgICAg
ICAgbV90ZXN0LT5jb21taXRDb21wbGV0ZU9uTWFpblRocmVhZCh0aGlzKTsKKyAgICAgICAgQ0NM
YXllclRyZWVIb3N0Ojpjb21taXRDb21wbGV0ZSgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBD
Q0xheWVyVHJlZUhvc3RUZXN0KiBtX3Rlc3Q7Cit9OworCit2b2lkIENDTGF5ZXJUcmVlSG9zdFRl
c3Q6OmRvQmVnaW5UZXN0KCkKK3sKKyAgICBBU1NFUlQoIW1fcnVubmluZyk7CisgICAgbV9ydW5u
aW5nID0gdHJ1ZTsKKyAgICBtX2NsaWVudCA9IGFkb3B0UHRyKG5ldyBNb2NrTGF5ZXJUcmVlSG9z
dENsaWVudCh0aGlzKSk7CisgICAgbV9sYXllclRyZWVIb3N0ID0gYWRvcHRSZWYobmV3IE1vY2tM
YXllclRyZWVIb3N0KG1fY2xpZW50LmdldCgpLCB0aGlzKSk7CisgICAgbV9sYXllclRyZWVIb3N0
LT5pbml0KCk7CisgICAgbV9iZWdpbm5pbmcgPSB0cnVlOworICAgIGJlZ2luVGVzdCgpOworICAg
IG1fYmVnaW5uaW5nID0gZmFsc2U7CisgICAgaWYgKG1fZW5kV2hlbkJlZ2luUmV0dXJucykKKyAg
ICAgICAgb25FbmRUZXN0KHN0YXRpY19jYXN0PHZvaWQqPih0aGlzKSk7Cit9CisKK3ZvaWQgQ0NM
YXllclRyZWVIb3N0VGVzdDo6ZW5kVGVzdCgpCit7CisgICAgLy8gSWYgd2UgYXJlIGNhbGxlZCBm
cm9tIHRoZSBDQ1RocmVhZCwgcmUtY2FsbCBlbmRUZXN0IG9uIHRoZSBtYWluIHRocmVhZC4KKyAg
ICBpZiAoIWlzTWFpblRocmVhZCgpKQorICAgICAgICBDQ01haW5UaHJlYWQ6OnBvc3RUYXNrKGNy
ZWF0ZU1haW5UaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RUZXN0OjplbmRUZXN0KSk7
CisgICAgZWxzZSB7CisgICAgICAgIC8vIEZvciB0aGUgY2FzZSB3aGVyZSB3ZSBlbmRUZXN0IGR1
cmluZyBiZWdpblRlc3QoKSwgc2V0IGEgZmxhZyB0byBpbmRpY2F0ZSB0aGF0CisgICAgICAgIC8v
IHRoZSB0ZXN0IHNob3VsZCBlbmQgdGhlIHNlY29uZCBiZWdpblRlc3QgcmVnYWlucyBjb250cm9s
LgorICAgICAgICBpZiAobV9iZWdpbm5pbmcpCisgICAgICAgICAgICBtX2VuZFdoZW5CZWdpblJl
dHVybnMgPSB0cnVlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvbkVuZFRlc3Qoc3RhdGlj
X2Nhc3Q8dm9pZCo+KHRoaXMpKTsKKyAgICB9Cit9CisKKy8vIFNob3J0bGl2ZWQgbGF5ZXJUcmVl
SG9zdHMgc2hvdWxkbid0IGRpZS4KK2NsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3RTaG9ydGxpdmVk
MSA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0IHsKK3B1YmxpYzoKKyAgICBDQ0xheWVyVHJl
ZUhvc3RUZXN0U2hvcnRsaXZlZDEoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3Qo
KQorICAgIHsKKyAgICAgICAgZW5kVGVzdCgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBh
ZnRlclRlc3QoKQorICAgIHsKKyAgICB9Cit9OworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RT
aG9ydGxpdmVkMSwgcnVuKQoreworICAgIHJ1blRlc3QoKTsKK30KKworLy8gU2hvcnRsaXZlZCBs
YXllclRyZWVIb3N0cyBzaG91bGRuJ3QgZGllIHdpdGggYSBjb21taXQgaW4gZmxpZ2h0LgorY2xh
c3MgQ0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQyIDogcHVibGljIENDTGF5ZXJUcmVlSG9z
dFRlc3QgeworcHVibGljOgorICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RTaG9ydGxpdmVkMigpIHsg
fQorCisgICAgdmlydHVhbCB2b2lkIGJlZ2luVGVzdCgpCisgICAgeworICAgICAgICBtX2xheWVy
VHJlZUhvc3QtPnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgICAgIGVuZFRlc3QoKTsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkKKyAgICB7CisgICAgfQorfTsK
K1RFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDIsIHJ1bikKK3sKKyAgICBydW5U
ZXN0KCk7Cit9CisKKy8vIFNob3J0bGl2ZWQgbGF5ZXJUcmVlSG9zdHMgc2hvdWxkbid0IGRpZSB3
aXRoIGEgcmVkcmF3IGluIGZsaWdodC4KK2NsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3RTaG9ydGxp
dmVkMyA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0IHsKK3B1YmxpYzoKKyAgICBDQ0xheWVy
VHJlZUhvc3RUZXN0U2hvcnRsaXZlZDMoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpblRl
c3QoKQorICAgIHsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXROZWVkc1JlZHJhdygpOwor
ICAgICAgICBlbmRUZXN0KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFmdGVyVGVzdCgp
CisgICAgeworICAgIH0KK307CitURVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQz
LCBydW4pCit7CisgICAgcnVuVGVzdCgpOworfQorCisvLyBDb25zdGFudGx5IHJlZHJhd2luZyBs
YXllclRyZWVIb3N0cyBzaG91bGRuJ3QgZGllIHdoZW4gdGhleSBjb21taXQKK2NsYXNzIENDTGF5
ZXJUcmVlSG9zdFRlc3RDb21taXRpbmdXaXRoQ29udGludW91c1JlZHJhdyA6IHB1YmxpYyBDQ0xh
eWVyVHJlZUhvc3RUZXN0IHsKK3B1YmxpYzoKKyAgICBDQ0xheWVyVHJlZUhvc3RUZXN0Q29tbWl0
aW5nV2l0aENvbnRpbnVvdXNSZWRyYXcoKQorICAgICAgICA6IG1fbnVtQ29tcGxldGVDb21taXRz
KDApCisgICAgICAgICwgbV9udW1EcmF3cygwKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgYmVnaW5UZXN0KCkKKyAgICB7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0TmVl
ZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICAgICAgZW5kVGVzdCgpOworICAgIH0KKworICAgIHZp
cnR1YWwgdm9pZCBjb21taXRDb21wbGV0ZU9uQ0NUaHJlYWQoTW9ja0xheWVyVHJlZUhvc3RJbXBs
KiBsYXllclRyZWVIb3N0SW1wbCkKKyAgICB7CisgICAgICAgIG1fbnVtQ29tcGxldGVDb21taXRz
Kys7CisgICAgICAgIGlmIChtX251bUNvbXBsZXRlQ29tbWl0cyA9PSAyKQorICAgICAgICAgICAg
ZW5kVGVzdCgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGF5ZXJzQW5kUHJlc2Vu
dE9uQ0NUaHJlYWQoTW9ja0xheWVyVHJlZUhvc3RJbXBsKiBsYXllclRyZWVIb3N0SW1wbCkKKyAg
ICB7CisgICAgICAgIGlmIChtX251bURyYXdzID09IDEpCisgICAgICAgICAgICBsYXllclRyZWVI
b3N0SW1wbC0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICAgICAgbV9udW1EcmF3cysr
OworICAgICAgICBsYXllclRyZWVIb3N0SW1wbC0+c2V0TmVlZHNSZWRyYXcoKTsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkKKyAgICB7CisgICAgfQorCitwcml2YXRlOgor
ICAgIGludCBtX251bUNvbXBsZXRlQ29tbWl0czsKKyAgICBpbnQgbV9udW1EcmF3czsKK307CitU
RVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdENvbW1pdGluZ1dpdGhDb250aW51b3VzUmVkcmF3LCBy
dW4pCit7CisgICAgcnVuVGVzdCgpOworfQorCisvLyBUd28gc2V0TmVlZHNDb21taXRzIGluIGEg
cm93IHNob3VsZCBsZWFkIHRvIGF0IGxlYXN0IDEgY29tbWl0IGFuZCBhdCBsZWFzdCAxCisvLyBk
cmF3IHdpdGggZnJhbWUgMC4KK2NsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc0NvbW1p
dDEgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdCB7CitwdWJsaWM6CisgICAgQ0NMYXllclRy
ZWVIb3N0VGVzdFNldE5lZWRzQ29tbWl0MSgpCisgICAgICAgIDogbV9udW1Db21taXRzKDApCisg
ICAgICAgICwgbV9udW1EcmF3cygwKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
YmVnaW5UZXN0KCkKKyAgICB7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0TmVlZHNDb21t
aXRBbmRSZWRyYXcoKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXROZWVkc0NvbW1pdEFu
ZFJlZHJhdygpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGF5ZXJzQW5kUHJlc2Vu
dE9uQ0NUaHJlYWQoTW9ja0xheWVyVHJlZUhvc3RJbXBsKiBsYXllclRyZWVIb3N0SW1wbCkKKyAg
ICB7CisgICAgICAgIG1fbnVtRHJhd3MrKzsKKyAgICAgICAgaWYgKCFsYXllclRyZWVIb3N0SW1w
bC0+c291cmNlRnJhbWVOdW1iZXIoKSkKKyAgICAgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0T25DQ1RocmVhZChNb2NrTGF5ZXJUcmVlSG9zdCogbGF5
ZXJUcmVlSG9zdCwgTW9ja0xheWVyVHJlZUhvc3RJbXBsKiBpbXBsKQorICAgIHsKKyAgICAgICAg
bV9udW1Db21taXRzKys7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFmdGVyVGVzdCgpCisg
ICAgeworICAgICAgICBFWFBFQ1RfR0UoMSwgbV9udW1Db21taXRzKTsKKyAgICAgICAgRVhQRUNU
X0dFKDEsIG1fbnVtRHJhd3MpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBpbnQgbV9udW1Db21t
aXRzOworICAgIGludCBtX251bURyYXdzOworfTsKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0
U2V0TmVlZHNDb21taXQxLCBydW4pCit7CisgICAgcnVuVGVzdCgpOworfQorCisvLyBBIHNldE5l
ZWRzQ29tbWl0IHNob3VsZCBsZWFkIHRvIDEgY29tbWl0LiBJc3N1aW5nIGEgc2Vjb25kIGNvbW1p
dCBhZnRlciB0aGF0CisvLyBmaXJzdCBjb21taXR0ZWQgZnJhbWUgZHJhd3Mgc2hvdWxkIGxlYWQg
dG8gYW5vdGhlciBjb21taXQuCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNDb21t
aXQyIDogcHVibGljIENDTGF5ZXJUcmVlSG9zdFRlc3QgeworcHVibGljOgorICAgIENDTGF5ZXJU
cmVlSG9zdFRlc3RTZXROZWVkc0NvbW1pdDIoKQorICAgICAgICA6IG1fbnVtQ29tbWl0cygwKQor
ICAgICAgICAsIG1fbnVtRHJhd3MoMCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lk
IGJlZ2luVGVzdCgpCisgICAgeworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldE5lZWRzQ29t
bWl0QW5kUmVkcmF3KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNBbmRQ
cmVzZW50T25DQ1RocmVhZChNb2NrTGF5ZXJUcmVlSG9zdEltcGwqIGxheWVyVHJlZUhvc3RJbXBs
KQorICAgIHsKKyAgICAgICAgaWYgKCFsYXllclRyZWVIb3N0SW1wbC0+c291cmNlRnJhbWVOdW1i
ZXIoKSkKKyAgICAgICAgICAgIGxheWVyVHJlZUhvc3RJbXBsLT5zZXROZWVkc0NvbW1pdEFuZFJl
ZHJhdygpOworICAgICAgICBlbHNlIGlmIChsYXllclRyZWVIb3N0SW1wbC0+c291cmNlRnJhbWVO
dW1iZXIoKSA9PSAxKQorICAgICAgICAgICAgZW5kVGVzdCgpOworICAgIH0KKworICAgIHZpcnR1
YWwgdm9pZCBjb21taXRPbkNDVGhyZWFkKE1vY2tMYXllclRyZWVIb3N0KiBsYXllclRyZWVIb3N0
LCBNb2NrTGF5ZXJUcmVlSG9zdEltcGwqIGltcGwpCisgICAgeworICAgICAgICBtX251bUNvbW1p
dHMrKzsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkKKyAgICB7CisgICAg
ICAgIEVYUEVDVF9FUSgyLCBtX251bUNvbW1pdHMpOworICAgICAgICBFWFBFQ1RfR0UoMiwgbV9u
dW1EcmF3cyk7CisgICAgfQorCitwcml2YXRlOgorICAgIGludCBtX251bUNvbW1pdHM7CisgICAg
aW50IG1fbnVtRHJhd3M7Cit9OworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc0Nv
bW1pdDIsIHJ1bikKK3sKKyAgICBydW5UZXN0KCk7Cit9CisKKy8vIDEgc2V0TmVlZHNSZWRyYXcg
c2hvdWxkIGxlYWQgdG8gYXQgbGVhc3QgMSBkcmF3IGJ1dCBubyBjb21taXQuCitjbGFzcyBDQ0xh
eWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNSZWRyYXcgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVz
dCB7CitwdWJsaWM6CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzUmVkcmF3KCkKKyAg
ICAgICAgOiBtX251bUNvbW1pdHMoMCkKKyAgICAgICAgLCBtX251bURyYXdzKDApCisgICAgewor
ICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKQorICAgIHsKKyAgICAgICAgbV9s
YXllclRyZWVIb3N0LT5zZXROZWVkc1JlZHJhdygpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9p
ZCBkcmF3TGF5ZXJzQW5kUHJlc2VudE9uQ0NUaHJlYWQoTW9ja0xheWVyVHJlZUhvc3RJbXBsKiBs
YXllclRyZWVIb3N0KQorICAgIHsKKyAgICAgICAgRVhQRUNUX0VRKC0xLCBsYXllclRyZWVIb3N0
LT5zb3VyY2VGcmFtZU51bWJlcigpKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIGxheWVyVHJlZUhv
c3QtPmZyYW1lTnVtYmVyKCkpOworICAgICAgICBtX251bURyYXdzKys7CisgICAgICAgIGVuZFRl
c3QoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0T25DQ1RocmVhZChNb2NrTGF5
ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCwgTW9ja0xheWVyVHJlZUhvc3RJbXBsKiBpbXBsKQor
ICAgIHsKKyAgICAgICAgbV9udW1Db21taXRzKys7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lk
IGFmdGVyVGVzdCgpCisgICAgeworICAgICAgICBFWFBFQ1RfR0UoMSwgbV9udW1EcmF3cyk7Cisg
ICAgICAgIEVYUEVDVF9FUSgwLCBtX251bUNvbW1pdHMpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBpbnQgbV9udW1Db21taXRzOworICAgIGludCBtX251bURyYXdzOworfTsKK1RFU1RfRihDQ0xh
eWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNSZWRyYXcsIHJ1bikKK3sKKyAgICBydW5UZXN0KCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZiAvLyBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGhyZWFkVGVzdC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGhyZWFkVGVzdC5jcHAKaW5kZXgg
MDRmYmE0NjUzM2RiNzVkZDczZjY4YWI3YjdiMmQ2MDFlN2NiNDA2Ny4uZmFiMzU0ZWMwMGM5NzMz
Y2MyODVhMTJiOTAwY2NmMGYzZWUyYTMxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ1RocmVhZFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NUaHJlYWRUZXN0LmNwcApAQCAtNTEsNiArNTEsNyBAQCBwdWJsaWM6CiBURVNUKEND
VGhyZWFkVGVzdCwgcGluZ1BvbmdVc2luZ0NvbmRpdGlvbikKIHsKICAgICBPd25QdHI8Q0NUaHJl
YWQ+IHRocmVhZCA9IENDVGhyZWFkOjpjcmVhdGUoKTsKKwogICAgIFBpbmdQb25nVXNpbmdDb25k
aXRpb24gdGFyZ2V0OwogICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CiAgICAgdGhy
ZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2soJnRhcmdldCwgJlBpbmdQb25nVXNpbmdD
b25kaXRpb246OnBpbmcsICZjb21wbGV0aW9uKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL1BvcHVwTWVudVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9Qb3B1cE1lbnVUZXN0LmNwcAppbmRleCA1YTE4NzA4ZDcyMTZmMjMxYzhmZWRlMTY2
YjIzNTkwYzliOWRjOTYxLi43OTVhY2I3MGRlNWQzNTc3NGVkMzRlNjY2ZjVlNjY4ZDYxOTkzODFl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BvcHVwTWVudVRlc3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUG9wdXBNZW51VGVzdC5jcHAK
QEAgLTEyNiw2ICsxMjYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCkgeyB9
CiAgICAgdmlydHVhbCBXZWJTaXplIHNpemUoKSB7IHJldHVybiBXZWJTaXplKDEwMCwgMTAwKTsg
fQogICAgIHZpcnR1YWwgdm9pZCByZXNpemUoY29uc3QgV2ViU2l6ZSYpIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBhbmltYXRlKGRvdWJsZSBmcmFtZUJlZ2luVGltZSkgeyB9CiAgICAgdmlydHVhbCB2
b2lkIGxheW91dCgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJDYW52YXMqLCBjb25z
dCBXZWJSZWN0JikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHRoZW1lQ2hhbmdlZCgpIHsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90574</attachid>
            <date>2011-04-21 12:06:48 -0700</date>
            <delta_ts>2011-04-21 13:23:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58408-20110421120647.patch</filename>
            <type>text/plain</type>
            <size>86617</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODQyMDgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyM2FjNDdhODIxMTY3MmFl
ZGM4YTUxOTA2YzA2YzQ0NWJiOTYzODUxLi4zOWU5ZDdjYjkwMmMwMTgwNmFmYmM3ZjcxNTA4ZGUw
OGU4MTBhNGFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODIgQEAKKzIwMTEtMDQtMTggIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50IENDTGF5ZXJUcmVlSG9zdCBh
bmQgQ0NMYXllclRyZWVIb3N0SW1wbCBwb3J0aW9ucyBvZiB0aHJlYWRlZCBjb21wb3NpdG9yCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODQwOAorCisg
ICAgICAgIENyZWF0ZSBDQ0xheWVyVHJlZUhvc3QgYW5kIENDTGF5ZXJUcmVlSG9zdEltcGwsIHdo
aWNoIGFyZSB0aGUgbWFpbgorICAgICAgICB0aHJlYWQgYW5kIGNvbXBvc2l0b3IgdGhyZWFkIGhh
bHZlcyBvZiBhIGNvbXBvc2l0ZWQgdmlldy4gQ29tbXVuaWNhdGlvbgorICAgICAgICBiZXR3ZWVu
IHRoZSB0d28gaXMgYmFzZWQgb24gdGhlIGRlc2lnbiB1c2VkIGluIEZpbGVTdHJlYW1Qcm94eS4K
KworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bUNvbW1pdHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyUmVuZGVyZXJDaHJvbWl1bUNvbW1pdHRlcjo6Y29tbWl0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bUNvbW1pdHRlcjo6TGF5ZXJSZW5kZXJlckNocm9taXVt
Q29tbWl0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6YmVn
aW5Db21taXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb21t
aXRDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBs
OjpMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJDaHJvbWl1bUltcGw6OmRyYXdMYXllcnNBbmRQcmVzZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bUltcGw6OmRyYXdMYXllcnNPbk1haW5UaHJlYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbFByb3h5OjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbFByb3h5OjpjcmVh
dGVMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW1JbXBsUHJveHk6OkxheWVyUmVuZGVyZXJDaHJvbWl1bUltcGxQcm94eSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZUxheWVyVHJlZUhvc3RJbXBs
UHJveHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
SGVhZHNVcERpc3BsYXkuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDSGVhZHNVcERpc3BsYXk6OmN1
cnJlbnRGcmFtZU51bWJlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuY3BwLgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0OjpDQ0xheWVyVHJlZUhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0Ojppbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6
fkNDTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNv
bW1pdENvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0
ZUFuZExheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI6
OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnNldE5lZWRzQ29t
bWl0QW5kUmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2V0TmVl
ZHNSZWRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmguCisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3Q6OmZyYW1lTnVtYmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6On5DQ0xheWVyVHJlZUhvc3RJbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmJlZ2luQ29tbWl0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbW1pdENvbXBsZXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNSZWRyYXcpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oLgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0SW1wbENsaWVudDo6fkNDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6ZnJhbWVOdW1iZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c291cmNlRnJhbWVOdW1iZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0U291cmNlRnJhbWVOdW1iZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5
OjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5OjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHk6On5DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVkcmF3
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c3RvcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnBvc3REcmF3TGF5ZXJz
VGFza09uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFBy
b3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNNYWluVGhyZWFkKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNDQ1RocmVhZCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmNvbW1pdE9uQ0NUaHJl
YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpkcmF3TGF5
ZXJzT25DQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmluaXRJbXBsT25DQ1Ro
cmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmxheWVy
VHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6Omhvc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNDVGhyZWFkOjpydW5Mb29wKToKKwogMjAxMS0wNC0xOCAgSmVzc2llIEJlcmxpbiAgPGpiZXJs
aW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFN0ZXZlIEZhbGtlbmJ1cmcuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKaW5kZXggYThkN2IyZDNmMjY5YjE4OGNhMjc1OTFkZGNjNjQ5ZmM5NDc5Njhj
Mi4uNmMyM2MxM2EyMjE2MTY0YmU2NDdiMzcwNWRjY2Y1ZTU0NGYxNjc2MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQpAQCAtNDA3MSw2ICs0MDcxLDE0IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5o
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RDb21taXR0ZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIuaCcsCisgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwu
aCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZC5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZC5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWRUYXNrLmgnLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggMjdhNjdlOTAyODk2NTY3
YzM0OTNhZmY0OTlhNzQ2OTY1NWU3MDNiZi4uNTRhOTk3NTAyZmVhNmNjYTkzZTg1MWY0OGI3Yzc2
MjRiOTU0YTU5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC00
Nyw2ICs0Nyw4IEBACiAjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgogI2luY2x1ZGUgIldlYkdMTGF5
ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5oIgorI2luY2x1ZGUgImNjL0NDTWFpblRocmVhZFRhc2suaCIK
ICNpZiBVU0UoU0tJQSkKICNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKICNpbmNsdWRlICJQ
bGF0Zm9ybUNvbnRleHRTa2lhLmgiCkBAIC05MywyMyArOTUsMjggQEAgYm9vbCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmNvbXBhcmVMYXllclooY29uc3QgUmVmUHRyPENDTGF5ZXJJbXBsPiYgYSwg
Y29uc3QgUmUKICAgICByZXR1cm4gYS0+ZHJhd0RlcHRoKCkgPCBiLT5kcmF3RGVwdGgoKTsKIH0K
IAotUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6Y3JlYXRlKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsIFBhc3NPd25Q
dHI8VGlsZVBhaW50SW50ZXJmYWNlPiBjb250ZW50UGFpbnQpCitQYXNzUmVmUHRyPExheWVyUmVu
ZGVyZXJDaHJvbWl1bT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUoQ0NMYXllclRyZWVI
b3N0Q2xpZW50KiBjbGllbnQsIFBhc3NPd25QdHI8VGlsZVBhaW50SW50ZXJmYWNlPiBjb250ZW50
UGFpbnQpCiB7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gY2xpZW50
LT5jcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCk7CiAgICAgaWYgKCFjb250ZXh0KQogICAg
ICAgICByZXR1cm4gMDsKIAotICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVy
UmVuZGVyZXIoYWRvcHRSZWYobmV3IExheWVyUmVuZGVyZXJDaHJvbWl1bShjb250ZXh0LCBjb250
ZW50UGFpbnQpKSk7CisgICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbGF5ZXJSZW5k
ZXJlcihhZG9wdFJlZihuZXcgTGF5ZXJSZW5kZXJlckNocm9taXVtKGNsaWVudCwgY29udGV4dCwg
Y29udGVudFBhaW50KSkpOworICAgIGxheWVyUmVuZGVyZXItPmluaXQoKTsKICAgICBpZiAoIWxh
eWVyUmVuZGVyZXItPmhhcmR3YXJlQ29tcG9zaXRpbmcoKSkKICAgICAgICAgcmV0dXJuIDA7CiAK
ICAgICByZXR1cm4gbGF5ZXJSZW5kZXJlci5yZWxlYXNlKCk7CiB9CiAKLUxheWVyUmVuZGVyZXJD
aHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVtKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+IGNvbnRleHQsCitMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1
bShDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRl
eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzT3du
UHRyPFRpbGVQYWludEludGVyZmFjZT4gY29udGVudFBhaW50KQotICAgIDogbV92aWV3cG9ydFNj
cm9sbFBvc2l0aW9uKEludFBvaW50KC0xLCAtMSkpCisgICAgOiBDQ0xheWVyVHJlZUhvc3QoY2xp
ZW50KQorICAgICwgbV92aWV3cG9ydFNjcm9sbFBvc2l0aW9uKEludFBvaW50KC0xLCAtMSkpCiAg
ICAgLCBtX3Jvb3RMYXllcigwKQogICAgICwgbV9yb290TGF5ZXJDb250ZW50UGFpbnQoY29udGVu
dFBhaW50KQorICAgICwgbV9jb21taXR0aW5nKGZhbHNlKQogICAgICwgbV9jdXJyZW50U2hhZGVy
KDApCiAgICAgLCBtX2N1cnJlbnRSZW5kZXJTdXJmYWNlKDApCiAgICAgLCBtX29mZnNjcmVlbkZy
YW1lYnVmZmVySWQoMCkKQEAgLTE4OCwxMiArMTk1LDExIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpzZXRWaWV3cG9ydChjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50
UmVjCiAgICAgICAgIG1fY3VycmVudFJlbmRlclN1cmZhY2UgPSAwOwogICAgICAgICBtX3Jvb3RM
YXllckNvbnRlbnRUaWxlci0+aW52YWxpZGF0ZUVudGlyZUxheWVyKCk7CiAgICAgfQorICAgIHNl
dE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
Ojp1cGRhdGVBbmREcmF3TGF5ZXJzKCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRh
dGVMYXllcnMoKQogewotICAgIEFTU0VSVChtX2hhcmR3YXJlQ29tcG9zaXRpbmcpOwotCiAgICAg
aWYgKCFtX3Jvb3RMYXllcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMDQsMTAgKzIxMCwxNCBA
QCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQW5kRHJhd0xheWVycygpCiAgICAg
aWYgKCFtX3Jvb3RMYXllcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgTGF5ZXJMaXN0IHJlbmRl
clN1cmZhY2VMYXllckxpc3Q7Ci0KLSAgICB1cGRhdGVMYXllcnMocmVuZGVyU3VyZmFjZUxheWVy
TGlzdCk7CisgICAgbV9jb21wdXRlZFJlbmRlclN1cmZhY2VMYXllckxpc3QgPSBhZG9wdFB0cihu
ZXcgTGF5ZXJMaXN0KCkpOworICAgIHVwZGF0ZUxheWVycygqbV9jb21wdXRlZFJlbmRlclN1cmZh
Y2VMYXllckxpc3QpOworfQogCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVy
cygpCit7CisgICAgQVNTRVJUKG1faGFyZHdhcmVDb21wb3NpdGluZyk7CisgICAgQVNTRVJUKG1f
Y29tcHV0ZWRSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKICAgICAvLyBCZWZvcmUgZHJhd0xheWVy
czoKICAgICBpZiAoaGFyZHdhcmVDb21wb3NpdGluZygpICYmIG1fY29udGV4dFN1cHBvcnRzTGF0
Y2gpIHsKICAgICAgICAgLy8gRklYTUU6IFRoZSBtdWx0aXRocmVhZGVkIGNvbXBvc2l0b3IgY2Fz
ZSB3aWxsIG5vdCB3b3JrIGFzIGxvbmcgYXMKQEAgLTIzMyw3ICsyNDMsNyBAQCB2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQW5kRHJhd0xheWVycygpCiAgICAgICAgIG1fY2hpbGRD
b250ZXh0c1dlcmVDb3BpZWQgPSBmYWxzZTsKICAgICB9CiAKLSAgICBkcmF3TGF5ZXJzKHJlbmRl
clN1cmZhY2VMYXllckxpc3QpOworICAgIGRyYXdMYXllcnMoKm1fY29tcHV0ZWRSZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0KTsKIAogICAgIC8vIEFmdGVyIGRyYXdMYXllcnM6CiAgICAgaWYgKGhhcmR3
YXJlQ29tcG9zaXRpbmcoKSAmJiBtX2NvbnRleHRTdXBwb3J0c0xhdGNoKSB7CkBAIC0xMDkxLDYg
KzExMDEsNzIgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmR1bXBSZW5kZXJTdXJmYWNl
cyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCwgTGF5ZXIKICAgICAgICAgZHVtcFJlbmRlclN1
cmZhY2VzKHRzLCBpbmRlbnQsIGxheWVyLT5nZXRTdWJsYXllcnMoKVtpXS5nZXQoKSk7CiB9CiAK
K2NsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bUltcGwgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0
SW1wbCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8TGF5ZXJSZW5kZXJlckNocm9t
aXVtSW1wbD4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqIGNsaWVudCwgTGF5ZXJS
ZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsKGNsaWVudCwgbGF5ZXJSZW5kZXJl
cikpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGF5ZXJzQW5kUHJlc2VudCgpCisg
ICAgeworICAgICAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOworICAgICAgICBib29s
IGNvbnRleHRMb3N0OworICAgICAgICBDQ01haW5UaHJlYWQ6OnBvc3RUYXNrKGNyZWF0ZU1haW5U
aHJlYWRUYXNrKHRoaXMsICZMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsOjpkcmF3TGF5ZXJzT25N
YWluVGhyZWFkLCAmY29tcGxldGlvbiwgJmNvbnRleHRMb3N0KSk7CisgICAgICAgIGNvbXBsZXRp
b24ud2FpdCgpOworCisgICAgICAgIC8vIEZJWE1FOiBTZW5kIHRoZSAiVXBkYXRlUmVjdCIgbWVz
c2FnZSB1cCB0byB0aGUgUmVuZGVyV2lkZ2V0IFtvciBtb3ZlcGx1Z2luIGVxdWl2YWxlbnRzLi4u
XQorCisgICAgICAgIC8vIEZJWE1FOiBoYW5kbGUgY29udGV4dCBsb3N0CisgICAgICAgIGlmIChj
b250ZXh0TG9zdCkKKyAgICAgICAgICAgIEZBVEFMKCJMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBs
IGRvZXMgbm90IGhhbmRsZSBjb250ZXh0IGxvc3QgeWV0LiIpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQq
IGNsaWVudCwgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQorICAgICAgICA6
IENDTGF5ZXJUcmVlSG9zdEltcGwoY2xpZW50KQorICAgICAgICAsIG1fbGF5ZXJSZW5kZXJlcihs
YXllclJlbmRlcmVyKSB7IH0KKworICAgIHZvaWQgZHJhd0xheWVyc09uTWFpblRocmVhZChDQ0Nv
bXBsZXRpb25FdmVudCogY29tcGxldGlvbiwgYm9vbCogY29udGV4dExvc3QpCisgICAgeworICAg
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+
ZHJhd0xheWVycygpOworICAgICAgICBtX2xheWVyUmVuZGVyZXItPnByZXNlbnQoKTsKKworICAg
ICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IG1fbGF5ZXJSZW5kZXJlci0+Y29udGV4
dCgpOworICAgICAgICAqY29udGV4dExvc3QgPSBjb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdl
dEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I7
CisKKyAgICAgICAgY29tcGxldGlvbi0+c2lnbmFsKCk7CisgICAgfQorCisgICAgTGF5ZXJSZW5k
ZXJlckNocm9taXVtKiBtX2xheWVyUmVuZGVyZXI7Cit9OworCitjbGFzcyBMYXllclJlbmRlcmVy
Q2hyb21pdW1JbXBsUHJveHkgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsUHJv
eHk+IGNyZWF0ZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IExheWVyUmVuZGVyZXJDaHJvbWl1bUltcGxQcm94
eShsYXllclJlbmRlcmVyKSk7CisgICAgfQorCisgICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5
ZXJUcmVlSG9zdEltcGw+IGNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsOjpjcmVhdGUodGhpcywgc3RhdGljX2Nh
c3Q8TGF5ZXJSZW5kZXJlckNocm9taXVtKj4oaG9zdCgpKSk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bUltcGxQcm94eShMYXllclJlbmRlcmVyQ2hyb21pdW0q
IGxheWVyUmVuZGVyZXIpCisgICAgICAgIDogQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5KGxheWVy
UmVuZGVyZXIpIHsgfQorfTsKKworUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk+
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlTGF5ZXJUcmVlSG9zdEltcGxQcm94eSgpCit7
CisgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eT4gcHJveHkgPSBMYXllclJlbmRl
cmVyQ2hyb21pdW1JbXBsUHJveHk6OmNyZWF0ZSh0aGlzKTsKKyAgICBwcm94eS0+c3RhcnQoKTsK
KyAgICByZXR1cm4gcHJveHk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlm
IC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmgKaW5kZXggODEzZWI0NmUwYmFhMzY1MTNkNjA3OGRhMjVhNDI1ZDQ0NWFlYmVlOS4u
NmM5MmMyYTk4NzVmNmQ4MmU2MDA1MzdkZWY4YjcxOGI4MjQyY2U5NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmgKQEAgLTQzLDEzICs0MywxMyBAQAogI2luY2x1ZGUgIlZpZGVv
TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgImNjL0NDQ2FudmFzTGF5ZXJJbXBsLmgiCiAjaW5j
bHVkZSAiY2MvQ0NIZWFkc1VwRGlzcGxheS5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9z
dC5oIgogI2luY2x1ZGUgImNjL0NDUGx1Z2luTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NW
aWRlb0xheWVySW1wbC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogCiAjaWYgVVNFKENHKQpAQCAtNjEsMTMgKzYxLDE1IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NIZWFkc1VwRGlzcGxheTsKIGNsYXNzIENDTGF5ZXJJbXBs
OworY2xhc3MgQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyOworY2xhc3MgQ0NMYXllclRyZWVIb3N0
SW1wbDsKIGNsYXNzIEdlb21ldHJ5QmluZGluZzsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwog
CiAvLyBDbGFzcyB0aGF0IGhhbmRsZXMgZHJhd2luZyBvZiBjb21wb3NpdGVkIHJlbmRlciBsYXll
cnMgdXNpbmcgR0wuCi1jbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW0gOiBwdWJsaWMgUmVmQ291
bnRlZDxMYXllclJlbmRlcmVyQ2hyb21pdW0+IHsKK2NsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1
bSA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3QgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gY3JlYXRlKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+LCBQYXNzT3duUHRyPFRpbGVQYWludEludGVyZmFjZT4gY29udGVudFBhaW50KTsKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGNyZWF0ZShDQ0xheWVy
VHJlZUhvc3RDbGllbnQqLCBQYXNzT3duUHRyPFRpbGVQYWludEludGVyZmFjZT4gY29udGVudFBh
aW50KTsKIAogICAgIH5MYXllclJlbmRlcmVyQ2hyb21pdW0oKTsKIApAQCAtNzgsNyArODAsOCBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzZXRWaWV3cG9ydChjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVj
dCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3Np
dGlvbik7CiAKICAgICAvLyB1cGRhdGVzIGFuZCBkcmF3cyB0aGUgY3VycmVudCBsYXllcnMgb250
byB0aGUgYmFja2J1ZmZlcgotICAgIHZvaWQgdXBkYXRlQW5kRHJhd0xheWVycygpOworICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVMYXllcnMoKTsKKyAgICB2b2lkIGRyYXdMYXllcnMoKTsKIAogICAg
IC8vIHdhaXRzIGZvciByZW5kZXJpbmcgdG8gZmluaXNoCiAgICAgdm9pZCBmaW5pc2goKTsKQEAg
LTEzMywxMSArMTM2LDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZENoaWxkQ29udGV4dChHcmFw
aGljc0NvbnRleHQzRCopOwogICAgIHZvaWQgcmVtb3ZlQ2hpbGRDb250ZXh0KEdyYXBoaWNzQ29u
dGV4dDNEKik7CiAKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5PiBjcmVhdGVMYXllclRyZWVIb3N0SW1wbFByb3h5KCk7CisKIHByaXZh
dGU6CiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+IExheWVyTGlzdDsK
ICAgICB0eXBlZGVmIEhhc2hNYXA8R3JhcGhpY3NDb250ZXh0M0QqLCBpbnQ+IENoaWxkQ29udGV4
dE1hcDsKIAotICAgIGV4cGxpY2l0IExheWVyUmVuZGVyZXJDaHJvbWl1bShQYXNzUmVmUHRyPEdy
YXBoaWNzQ29udGV4dDNEPiwgUGFzc093blB0cjxUaWxlUGFpbnRJbnRlcmZhY2U+IGNvbnRlbnRQ
YWludCk7CisgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKENDTGF5ZXJUcmVlSG9zdENsaWVudCos
IFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBQYXNzT3duUHRyPFRpbGVQYWludEludGVy
ZmFjZT4gY29udGVudFBhaW50KTsKIAogICAgIHZvaWQgdXBkYXRlTGF5ZXJzKExheWVyTGlzdCYg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAgdm9pZCB1cGRhdGVSb290TGF5ZXJDb250ZW50
cygpOwpAQCAtMTc4LDggKzE4NCwxMSBAQCBwcml2YXRlOgogICAgIE93blB0cjxUaWxlUGFpbnRJ
bnRlcmZhY2U+IG1fcm9vdExheWVyQ29udGVudFBhaW50OwogICAgIE93blB0cjxMYXllclRpbGVy
Q2hyb21pdW0+IG1fcm9vdExheWVyQ29udGVudFRpbGVyOwogCisgICAgYm9vbCBtX2NvbW1pdHRp
bmc7CiAgICAgYm9vbCBtX2hhcmR3YXJlQ29tcG9zaXRpbmc7CiAKKyAgICBPd25QdHI8TGF5ZXJM
aXN0PiBtX2NvbXB1dGVkUmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKwogICAgIHVuc2lnbmVkIG1f
Y3VycmVudFNoYWRlcjsKICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIG1fY3VycmVudFJlbmRl
clN1cmZhY2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAKaW5kZXggZDIyYjA5
ODYzZjU2ZGFlZjk0NDE2OWM2Yzg5ZGRjNmZmZDkwNzMxOS4uYjhjYTViYzJhZTRkMzlmODAwMGMy
M2JjYmQ0MjVmN2JiMDlkYjUzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAK
QEAgLTIyMyw2ICsyMjMsMTggQEAgdm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjpvblByZXNlbnQoKQog
ICAgIG1fY3VycmVudEZyYW1lTnVtYmVyICs9IDE7CiB9CiAKK3ZvaWQgQ0NIZWFkc1VwRGlzcGxh
eTo6c2V0U2hvd0ZQU0NvdW50ZXIoYm9vbCBzaG93KQoreworICAgIG1fc2hvd0ZQU0NvdW50ZXIg
PSBzaG93OworICAgIG1fbGF5ZXJSZW5kZXJlci0+c2V0TmVlZHNSZWRyYXcoKTsKK30KKwordm9p
ZCBDQ0hlYWRzVXBEaXNwbGF5OjpzZXRTaG93UGxhdGZvcm1MYXllclRyZWUoYm9vbCBzaG93KQor
eworICAgIG1fc2hvd1BsYXRmb3JtTGF5ZXJUcmVlID0gc2hvdzsKKyAgICBtX2xheWVyUmVuZGVy
ZXItPnNldE5lZWRzUmVkcmF3KCk7Cit9CisKIH0KIAogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaAppbmRleCAwOWYxOThh
YzE0NWQ3NzYzNGQxYjFmNTQzOWY3MTBkODQ2ZTM3ZTI4Li40N2MwNjhhNTZlNGJmZTkxMzQwMTVl
ZTEyNzljZDM2MzI1NjdhNDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oCkBAIC00
NywxMiArNDcsMTQgQEAgcHVibGljOgogCiAgICAgfkNDSGVhZHNVcERpc3BsYXkoKTsKIAorICAg
IGludCBjdXJyZW50RnJhbWVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRGcmFtZU51
bWJlcjsgfQorCiAgICAgdm9pZCBvblByZXNlbnQoKTsKIAotICAgIHZvaWQgc2V0U2hvd0ZQU0Nv
dW50ZXIoYm9vbCBlbmFibGUpIHsgbV9zaG93RlBTQ291bnRlciA9IGVuYWJsZTsgfQorICAgIHZv
aWQgc2V0U2hvd0ZQU0NvdW50ZXIoYm9vbCBlbmFibGUpOwogICAgIGJvb2wgc2hvd0ZQU0NvdW50
ZXIoKSBjb25zdCB7IHJldHVybiBtX3Nob3dGUFNDb3VudGVyOyB9CiAKLSAgICB2b2lkIHNldFNo
b3dQbGF0Zm9ybUxheWVyVHJlZShib29sIGVuYWJsZSkgeyBtX3Nob3dQbGF0Zm9ybUxheWVyVHJl
ZSA9IGVuYWJsZTsgfQorICAgIHZvaWQgc2V0U2hvd1BsYXRmb3JtTGF5ZXJUcmVlKGJvb2wgZW5h
YmxlKTsKICAgICBib29sIHNob3dQbGF0Zm9ybUxheWVyVHJlZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2hvd1BsYXRmb3JtTGF5ZXJUcmVlOyB9CiAKICAgICBib29sIGVuYWJsZWQoKSBjb25zdCB7IHJl
dHVybiBtX3Nob3dQbGF0Zm9ybUxheWVyVHJlZSB8fCBtX3Nob3dGUFNDb3VudGVyOyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YWE5MmFjYWUxNWZlN2U0YWE1
M2RkNzZlYzA2MTBmMWVjOTA5Y2QzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtMCww
ICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRl
ICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKKworI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKKyNpbmNs
dWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVy
VHJlZUhvc3RJbXBsLmgiCisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDQ0xheWVyVHJlZUhv
c3Q6OkNDTGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVudCkKKyAgICA6
IG1fY2xpZW50KGNsaWVudCkKKyNpZm5kZWYgTkRFQlVHCisgICAgLCBtX2NvbW1pdHRpbmcoZmFs
c2UpCisjZW5kaWYKKyAgICAsIG1fZnJhbWVOdW1iZXIoMCkKK3sKK30KKwordm9pZCBDQ0xheWVy
VHJlZUhvc3Q6OmluaXQoKQoreworI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICBt
X3Byb3h5ID0gY3JlYXRlTGF5ZXJUcmVlSG9zdEltcGxQcm94eSgpOworICAgIEFTU0VSVChtX3By
b3h5LT5pc1N0YXJ0ZWQoKSk7CisgICAgbV9wcm94eS0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXco
KTsKKyNlbmRpZgorfQorCitDQ0xheWVyVHJlZUhvc3Q6On5DQ0xheWVyVHJlZUhvc3QoKQorewor
ICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3Q6On5DQ0xheWVyVHJlZUhvc3QiLCB0aGlz
LCAwKTsKKyNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgbV9wcm94eS0+c3RvcCgp
OworICAgIG1fcHJveHkuY2xlYXIoKTsKKyNlbmRpZgorfQorCit2b2lkIENDTGF5ZXJUcmVlSG9z
dDo6YmVnaW5Db21taXQoKQoreworI2lmbmRlZiBOREVCVUcKKyAgICBtX2NvbW1pdHRpbmcgPSB0
cnVlOworI2VuZGlmCit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0Ojpjb21taXRDb21wbGV0ZSgp
Cit7CisjaWZuZGVmIE5ERUJVRworICAgIG1fY29tbWl0dGluZyA9IGZhbHNlOworI2VuZGlmCisg
ICAgbV9mcmFtZU51bWJlcisrOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0ZUFu
ZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpCit7CisgICAgbV9jbGllbnQtPmFuaW1hdGVB
bmRMYXlvdXQoZnJhbWVCZWdpblRpbWUpOworfQorCitQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9z
dENvbW1pdHRlcj4gQ0NMYXllclRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVIb3N0Q29tbWl0dGVy
KCkKK3sKKyAgICByZXR1cm4gQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyOjpjcmVhdGUoKTsKK30K
Kwordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCkKK3sKKyAg
ICBtX3Byb3h5LT5zZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOworfQorCit2b2lkIENDTGF5ZXJU
cmVlSG9zdDo6c2V0TmVlZHNSZWRyYXcoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJl
ZUhvc3Q6OnNldE5lZWRzUmVkcmF3IiwgdGhpcywgMCk7CisgICAgbV9wcm94eS0+c2V0TmVlZHNS
ZWRyYXcoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5m
M2FlYWMwNTQzZTYwNDBiNjExZWYwMjFkZTdiYzkwNWVhZGY1YWU5Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0LmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0xheWVy
VHJlZUhvc3RfaAorI2RlZmluZSBDQ0xheWVyVHJlZUhvc3RfaAorCisjaW5jbHVkZSAiY2MvQ0NM
YXllclRyZWVIb3N0Q29tbWl0dGVyLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1w
bFByb3h5LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbDsKK2NsYXNzIENDTGF5ZXJUcmVlSG9z
dEltcGxDbGllbnQ7CitjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKKworY2xhc3MgQ0NMYXllclRy
ZWVIb3N0Q2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUFuZExheW91
dChkb3VibGUgZnJhbWVCZWdpblRpbWUpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8R3Jh
cGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKSA9IDA7Cit9Owor
CitjbGFzcyBDQ0xheWVyVHJlZUhvc3QgOiBwdWJsaWMgUmVmQ291bnRlZDxDQ0xheWVyVHJlZUhv
c3Q+IHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBDQ0xheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVI
b3N0Q2xpZW50Kik7CisgICAgdm9pZCBpbml0KCk7CisgICAgdmlydHVhbCB+Q0NMYXllclRyZWVI
b3N0KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVC
ZWdpblRpbWUpOworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdCgpOworICAgIHZpcnR1YWwg
dm9pZCBjb21taXRDb21wbGV0ZSgpOworICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVyVHJl
ZUhvc3RDb21taXR0ZXI+IGNyZWF0ZUxheWVyVHJlZUhvc3RDb21taXR0ZXIoKTsKKworICAgIGlu
dCBmcmFtZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVOdW1iZXI7IH0KKworICAgIHZv
aWQgc2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICB2b2lkIHNldE5lZWRzUmVkcmF3KCk7
CisKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlTGF5ZXJzKCkgPSAwOworCitwcm90ZWN0ZWQ6Cisg
ICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eT4gY3JlYXRlTGF5
ZXJUcmVlSG9zdEltcGxQcm94eSgpID0gMDsKKworcHJpdmF0ZToKKyAgICBDQ0xheWVyVHJlZUhv
c3RDbGllbnQqIG1fY2xpZW50OworI2lmbmRlZiBOREVCVUcKKyAgICBib29sIG1fY29tbWl0dGlu
ZzsKKyNlbmRpZgorICAgIGludCBtX2ZyYW1lTnVtYmVyOworICAgIE93blB0cjxDQ0xheWVyVHJl
ZUhvc3RJbXBsUHJveHk+IG1fcHJveHk7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0Q29tbWl0dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzJkZDcxNGJl
N2UzODRjOGVmOWUxMDkyNGZmNWNkMjA1ODY5OWJlYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENv
bW1pdHRlci5jcHAKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmgiCisKKyNp
bmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxDQ0xheWVyVHJl
ZUhvc3RDb21taXR0ZXI+IENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcjo6Y3JlYXRlKCkKK3sKKyAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcigpKTsKK30KKwor
dm9pZCBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI6OmNvbW1pdChDQ0xheWVyVHJlZUhvc3QqIGhv
c3QsIENDTGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJbXBsKQoreworICAgIGhvc3RJbXBsLT5zZXRT
b3VyY2VGcmFtZU51bWJlcihob3N0LT5mcmFtZU51bWJlcigpKTsKK30KKworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0Q29tbWl0dGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYmNhZGVhNjU2
MzZkOWU2MDBjN2VjNzkwYmFlMTQ3NzI4ODY1YmI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29t
bWl0dGVyLmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0xheWVy
VHJlZUhvc3RDb21taXR0ZXJfaAorI2RlZmluZSBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXJfaAor
CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ0xheWVyVHJlZUhvc3Q7CitjbGFz
cyBDQ0xheWVyVHJlZUhvc3RJbXBsOworCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIg
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcik7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyPiBj
cmVhdGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0KENDTGF5ZXJUcmVlSG9zdCosIENDTGF5
ZXJUcmVlSG9zdEltcGwqKTsKKworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IENDTGF5ZXJUcmVl
SG9zdENvbW1pdHRlcigpIHsgfQorfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTNhYTJiYTIxMGRiZGRkMTZiOWNhMWFk
MTJlNjExNTU1OGIyYWIzNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC0wLDAg
KzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUg
ImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKKworI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKKyNp
bmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKKyNpbmNsdWRlICJjYy9DQ1RocmVhZFRhc2su
aCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJlZUhvc3RJbXBsKENDTGF5ZXJUcmVlSG9z
dEltcGxDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fc291cmNlRnJhbWVOdW1iZXIoLTEpCisgICAg
LCBtX2ZyYW1lTnVtYmVyKDApCisgICAgLCBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX2NvbW1p
dFBlbmRpbmcoZmFsc2UpCisgICAgLCBtX3JlZHJhd1BlbmRpbmcoZmFsc2UpCit7Cit9CisKK0ND
TGF5ZXJUcmVlSG9zdEltcGw6On5DQ0xheWVyVHJlZUhvc3RJbXBsKCkKK3sKKyAgICBUUkFDRV9F
VkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6fkNDTGF5ZXJUcmVlSG9zdEltcGwoKSIsIHRoaXMs
IDApOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmJlZ2luQ29tbWl0KCkKK3sKK30K
Kwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb21taXRDb21wbGV0ZSgpCit7CisgICAgbV9j
b21taXRQZW5kaW5nID0gZmFsc2U7CisgICAgc2V0TmVlZHNSZWRyYXcoKTsKK30KKwordm9pZCBD
Q0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzKCkKK3sKKyAgICAvLyBJZiBhIGNvbW1pdCBp
cyBwZW5kaW5nLCBkbyBub3QgZHJhdy4gVGhpcyBpcyBhIHRlbXBvcmFyeSByZXN0cmljdGlvbiB0
aGF0CisgICAgLy8gaXMgbmVjZXNzYXJ5IGJlY2F1c2UgZHJhd0xheWVycyBpcyBjdXJyZW50bHkg
YSBibG9ja2luZyBvcGVyYXRpb24gb24gdGhlIG1haW4gdGhyZWFkLgorICAgIGlmIChtX2NvbW1p
dFBlbmRpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpkcmF3TGF5ZXJzIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKG1fcmVkcmF3UGVu
ZGluZyk7CisgICAgbV9yZWRyYXdQZW5kaW5nID0gZmFsc2U7CisKKyAgICB7CisgICAgICAgIFRS
QUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzQW5kUHJlc2VudCIsIHRo
aXMsIDApOworICAgICAgICBkcmF3TGF5ZXJzQW5kUHJlc2VudCgpOworICAgIH0KKworICAgICsr
bV9mcmFtZU51bWJlcjsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXROZWVkc0Nv
bW1pdEFuZFJlZHJhdygpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6
OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3IiwgdGhpcywgMCk7CisKKyAgICAvLyBGSVhNRTogbW92
ZSB0aGUgcmVxdWVzdEZyYW1lQW5kQ29tbWl0IG91dCBmcm9tIGhlcmUgb25jZSB3ZSBhZGQgZnJh
bWVyYXRlIHRocm90dGxpbmcvYW5pbWF0aW9uCisgICAgZG91YmxlIGZyYW1lQmVnaW5UaW1lID0g
Y3VycmVudFRpbWUoKTsKKyAgICBtX2NvbW1pdFBlbmRpbmcgPSB0cnVlOworICAgIG1fY2xpZW50
LT5yZXF1ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKGZyYW1lQmVnaW5UaW1lKTsKK30KKwor
dm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXROZWVkc1JlZHJhdygpCit7CisgICAgaWYgKG1f
cmVkcmF3UGVuZGluZyB8fCBtX2NvbW1pdFBlbmRpbmcpCisgICAgICAgIHJldHVybjsKKworICAg
IFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXROZWVkc1JlZHJhdyIsIHRoaXMs
IDApOworICAgIG1fcmVkcmF3UGVuZGluZyA9IHRydWU7CisgICAgbV9jbGllbnQtPnBvc3REcmF3
TGF5ZXJzVGFza09uQ0NUaHJlYWQoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZkOTA0OTVkZWQyYzgwYzM5ZjhmM2ExOTViMmUwMTVkNmEw
OGNhYjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKQEAgLTAsMCArMSw3NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBDQ0xheWVyVHJlZUhvc3RJbXBsX2gKKyNkZWZpbmUgQ0NMYXll
clRyZWVIb3N0SW1wbF9oCisKKyNpbmNsdWRlICJjYy9DQ1RocmVhZC5oIgorI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisvLyBQcm92aWRlcyBzY2hlZHVsaW5nIGluZnJhc3RydWN0dXJl
IGZvciBhIENDTGF5ZXJUcmVlSG9zdEltcGwKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGxDbGll
bnQgIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5DQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KCkg
eyB9CisgICAgdmlydHVhbCB2b2lkIHBvc3REcmF3TGF5ZXJzVGFza09uQ0NUaHJlYWQoKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RGcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQoZG91Ymxl
IGZyYW1lQmVnaW5UaW1lKSA9IDA7Cit9OworCisvLyBDQ0xheWVyVHJlZUhvc3RJbXBsIG93bnMg
dGhlIENDTGF5ZXJJbXBsIHRyZWUgYXMgd2VsbCBhcyBhc3NvY2lhdGVkIHJlbmRlcmluZyBzdGF0
ZQorY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
Q0NMYXllclRyZWVIb3N0SW1wbCk7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQ0NMYXllclRyZWVI
b3N0SW1wbChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50Kik7CisgICAgdmlydHVhbCB+Q0NMYXll
clRyZWVIb3N0SW1wbCgpOworCisgICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0KCk7CisgICAg
dmlydHVhbCB2b2lkIGNvbW1pdENvbXBsZXRlKCk7CisKKyAgICB2b2lkIGRyYXdMYXllcnMoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVyc0FuZFByZXNlbnQoKSA9IDA7CisKKyAgICBpbnQg
ZnJhbWVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lTnVtYmVyOyB9CisKKyAgICB2b2lk
IHNldE5lZWRzUmVkcmF3KCk7CisgICAgdm9pZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOwor
CisgICAgaW50IHNvdXJjZUZyYW1lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VGcmFt
ZU51bWJlcjsgfQorICAgIHZvaWQgc2V0U291cmNlRnJhbWVOdW1iZXIoaW50IGZyYW1lTnVtYmVy
KSB7IG1fc291cmNlRnJhbWVOdW1iZXIgPSBmcmFtZU51bWJlcjsgfQorCitwcm90ZWN0ZWQ6Cisg
ICAgaW50IG1fc291cmNlRnJhbWVOdW1iZXI7CisgICAgaW50IG1fZnJhbWVOdW1iZXI7CisKK3By
aXZhdGU6CisgICAgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogbV9jbGllbnQ7CisgICAgYm9v
bCBtX2NvbW1pdFBlbmRpbmc7CisgICAgYm9vbCBtX3JlZHJhd1BlbmRpbmc7Cit9OworCit9Owor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjVmNGM0ZDAyZTFkNWQ1NTE1NDY0NDdmMzNhMWJmMTg0NmUwMTgyNmYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuY3BwCkBAIC0wLDAgKzEsMjIwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsUHJveHkuaCIKKworI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKKyNpbmNsdWRlICJj
Yy9DQ0xheWVyVHJlZUhvc3QuaCIKKyNpbmNsdWRlICJjYy9DQ01haW5UaHJlYWRUYXNrLmgiCisj
aW5jbHVkZSAiY2MvQ0NUaHJlYWRUYXNrLmgiCisKKwordXNpbmcgbmFtZXNwYWNlIFdURjsKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgeworQ0NUaHJlYWQqIGNjVGhyZWFkOwor
aW50IG51bVByb3hpZXMgPSAwOworfQorCitDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OkNDTGF5
ZXJUcmVlSG9zdEltcGxQcm94eShDQ0xheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QpCisgICAg
OiBtX2NvbW1pdFBlbmRpbmcoZmFsc2UpCisgICAgLCBtX2xheWVyVHJlZUhvc3QobGF5ZXJUcmVl
SG9zdCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpDQ0xh
eWVyVHJlZUhvc3RJbXBsUHJveHkiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworICAgIG51bVByb3hpZXMrKzsKKyAgICBpZiAoIWNjVGhyZWFkKQorICAgICAgICBjY1Ro
cmVhZCA9IENDVGhyZWFkOjpjcmVhdGUoKS5sZWFrUHRyKCk7Cit9CisKKwordm9pZCBDQ0xheWVy
VHJlZUhvc3RJbXBsUHJveHk6OnN0YXJ0KCkKK3sKKyAgICAvLyBDcmVhdGUgTGF5ZXJUcmVlSG9z
dEltcGwuCisgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKKyAgICBjY1RocmVhZC0+
cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHk6OmluaXRJbXBsT25DQ1RocmVhZCwgJmNvbXBsZXRpb24pKTsKKyAgICBjb21wbGV0aW9uLndh
aXQoKTsKK30KKworQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojp+Q0NMYXllclRyZWVIb3N0SW1w
bFByb3h5KCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojp+
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5IiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKyAgICBBU1NFUlQoIW1fbGF5ZXJUcmVlSG9zdEltcGwgJiYgIW1fbGF5ZXJUcmVl
SG9zdCk7IC8vIG1ha2Ugc3VyZSBzdG9wKCkgZ290IGNhbGxlZC4KKworICAgIG51bVByb3hpZXMt
LTsKKyAgICBpZiAoIW51bVByb3hpZXMpIHsKKyAgICAgICAgZGVsZXRlIGNjVGhyZWFkOworICAg
ICAgICBjY1RocmVhZCA9IDA7CisgICAgfQorfQorCitib29sIENDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eTo6aXNTdGFydGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllclRyZWVIb3N0SW1w
bDsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzQ29tbWl0QW5k
UmVkcmF3KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlmIChtX2NvbW1p
dFBlbmRpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJl
ZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3IiwgdGhpcywgMCk7CisgICAg
bV9jb21taXRQZW5kaW5nID0gdHJ1ZTsKKyAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NU
aHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzQ29tbWl0
QW5kUmVkcmF3T25DQ1RocmVhZCkpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eTo6c2V0TmVlZHNSZWRyYXcoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAg
Y2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVI
b3N0SW1wbFByb3h5OjpzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQpKTsKK30KKwordm9pZCBDQ0xh
eWVyVHJlZUhvc3RJbXBsUHJveHk6OnN0b3AoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVy
VHJlZUhvc3RJbXBsUHJveHk6OnN0b3AiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOworICAgIC8vIFN5bmNocm9ub3VzbHkgZGVsZXRlcyB0aGUgaW1wbC4KKyAgICBDQ0Nv
bXBsZXRpb25FdmVudCBjb21wbGV0aW9uOworICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVD
Q1RocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6bGF5ZXJUcmVlSG9z
dENsb3NlZE9uQ0NUaHJlYWQsICZjb21wbGV0aW9uKSk7CisgICAgY29tcGxldGlvbi53YWl0KCk7
CisKKyAgICBBU1NFUlQoIW1fbGF5ZXJUcmVlSG9zdEltcGwpOyAvLyB2ZXJpZnkgdGhhdCB0aGUg
aW1wbCBkZWxldGVkLgorICAgIG1fbGF5ZXJUcmVlSG9zdCA9IDA7Cit9CisKK3ZvaWQgQ0NMYXll
clRyZWVIb3N0SW1wbFByb3h5Ojpwb3N0RHJhd0xheWVyc1Rhc2tPbkNDVGhyZWFkKCkKK3sKKyAg
ICBBU1NFUlQoaXNDQ1RocmVhZCgpKTsKKyAgICBpZiAobV9sYXllclRyZWVIb3N0SW1wbCkKKyAg
ICAgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXll
clRyZWVIb3N0SW1wbFByb3h5OjpkcmF3TGF5ZXJzT25DQ1RocmVhZCkpOworfQorCit2b2lkIEND
TGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZChk
b3VibGUgZnJhbWVCZWdpblRpbWUpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eTo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZCIsIHRoaXMsIDApOwor
ICAgIEFTU0VSVChpc0NDVGhyZWFkKCkpOworICAgIGlmIChtX2xheWVyVHJlZUhvc3RJbXBsKQor
ICAgICAgICBDQ01haW5UaHJlYWQ6OnBvc3RUYXNrKGNyZWF0ZU1haW5UaHJlYWRUYXNrKHRoaXMs
ICZDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdCwgZnJhbWVC
ZWdpblRpbWUpKTsKK30KKworYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmlzTWFpblRo
cmVhZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIDo6aXNNYWluVGhyZWFkKCk7Cit9CisKK2Jvb2wg
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppc0NDVGhyZWFkKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gY3VycmVudFRocmVhZCgpID09IGNjVGhyZWFkLT50aHJlYWRJRCgpOworfQorCit2b2lkIEND
TGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0KGRvdWJsZSBmcmFt
ZUJlZ2luVGltZSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlmICghbV9s
YXllclRyZWVIb3N0KQorICAgICAgICByZXR1cm47CisKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXll
clRyZWVIb3N0SW1wbFByb3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21taXQiLCB0aGlzLCAwKTsKKyAg
ICB7CisgICAgICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3Q6OmFuaW1hdGVBbmRMYXlv
dXQiLCB0aGlzLCAwKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5hbmltYXRlQW5kTGF5b3V0
KGZyYW1lQmVnaW5UaW1lKTsKKyAgICB9CisKKyAgICBtX2NvbW1pdFBlbmRpbmcgPSBmYWxzZTsK
KyAgICB7CisgICAgICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVy
cyIsIHRoaXMsIDApOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVycygpOwor
ICAgIH0KKworICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI+IGNvbW1pdHRlciA9
IG1fbGF5ZXJUcmVlSG9zdC0+Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbW1pdHRlcigpOworICAgIG1f
bGF5ZXJUcmVlSG9zdC0+YmVnaW5Db21taXQoKTsKKworICAgIC8vIEJsb2NraW5nIGNhbGwgdG8g
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpwZXJmb3JtQ29tbWl0CisgICAgQ0NDb21wbGV0aW9u
RXZlbnQgY29tcGxldGlvbjsKKyAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRU
YXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQsIGNv
bW1pdHRlci5nZXQoKSwgJmNvbXBsZXRpb24pKTsKKyAgICBjb21wbGV0aW9uLndhaXQoKTsKKwor
ICAgIGNvbW1pdHRlci5jbGVhcigpOworCisgICAgbV9sYXllclRyZWVIb3N0LT5jb21taXRDb21w
bGV0ZSgpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6Y29tbWl0T25DQ1Ro
cmVhZChDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIqIGNvbW1pdHRlciwgQ0NDb21wbGV0aW9uRXZl
bnQqIGNvbXBsZXRpb24pCit7CisgICAgQVNTRVJUKGlzQ0NUaHJlYWQoKSk7CisgICAgVFJBQ0Vf
RVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6Y29tbWl0T25DQ1RocmVhZCIsIHRoaXMs
IDApOworICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmJlZ2luQ29tbWl0KCk7CisgICAgeworICAg
ICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojpjb21taXQiLCB0aGlzLCAwKTsKKyAg
ICAgICAgY29tbWl0dGVyLT5jb21taXQobV9sYXllclRyZWVIb3N0LCBtX2xheWVyVHJlZUhvc3RJ
bXBsLmdldCgpKTsKKyAgICB9CisgICAgY29tcGxldGlvbi0+c2lnbmFsKCk7CisKKyAgICBtX2xh
eWVyVHJlZUhvc3RJbXBsLT5jb21taXRDb21wbGV0ZSgpOworfQorCit2b2lkIENDTGF5ZXJUcmVl
SG9zdEltcGxQcm94eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQoKQoreworICAgIFRSQUNFX0VWRU5U
KCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkIiwgdGhpcywg
MCk7CisgICAgQVNTRVJUKGlzQ0NUaHJlYWQoKSk7CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdElt
cGwpCisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmRyYXdMYXllcnMoKTsKK30KKwordm9p
ZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1Ro
cmVhZCgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0
TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhyZWFkIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlz
Q0NUaHJlYWQoKSAmJiBtX2xheWVyVHJlZUhvc3RJbXBsKTsKKyAgICBtX2xheWVyVHJlZUhvc3RJ
bXBsLT5zZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eTo6c2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKCkKK3sKKyAgICBUUkFDRV9FVkVO
VCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQiLCB0
aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNDQ1RocmVhZCgpICYmIG1fbGF5ZXJUcmVlSG9zdEltcGwp
OworICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPnNldE5lZWRzUmVkcmF3KCk7Cit9CisKK3ZvaWQg
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppbml0SW1wbE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9u
RXZlbnQqIGNvbXBsZXRpb24pCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdElt
cGxQcm94eTo6aW5pdEltcGxPbkNDVGhyZWFkIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzQ0NU
aHJlYWQoKSk7CisgICAgbV9sYXllclRyZWVIb3N0SW1wbCA9IGNyZWF0ZUxheWVyVHJlZUhvc3RJ
bXBsKCk7CisgICAgY29tcGxldGlvbi0+c2lnbmFsKCk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVI
b3N0SW1wbFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZChDQ0NvbXBsZXRpb25F
dmVudCogY29tcGxldGlvbikKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1w
bFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFT
U0VSVChpc0NDVGhyZWFkKCkpOworICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwuY2xlYXIoKTsKKyAg
ICBjb21wbGV0aW9uLT5zaWduYWwoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RJbXBsUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yOTViZTNjYWI2MjFmMzk5ZTNjNDQ5YzQy
NGM1ODc1MzFhMzkwY2ViCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmgKQEAgLTAs
MCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHlfaAorI2RlZmluZSBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHlfaAorCisjaW5jbHVkZSAiY2Mv
Q0NDb21wbGV0aW9uRXZlbnQuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgi
CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IENDTGF5ZXJUcmVlSG9zdDsKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcjsKKworY2xh
c3MgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5IDogcHVibGljIENDTGF5ZXJUcmVlSG9zdEltcGxD
bGllbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eSk7CitwdWJsaWM6CisgICAgdmlydHVhbCB+Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5KCk7CisK
KyAgICBib29sIGlzU3RhcnRlZCgpIGNvbnN0OworCisgICAgdm9pZCBzZXROZWVkc0NvbW1pdEFu
ZFJlZHJhdygpOworICAgIHZvaWQgc2V0TmVlZHNSZWRyYXcoKTsKKworICAgIHZvaWQgc3RhcnQo
KTsgLy8gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIHVzaW5nIHRoZSBwcm94eS4KKyAgICB2b2lkIHN0
b3AoKTsgLy8gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIGRlbGV0aW5nIHRoZSBwcm94eS4KKworICAg
IC8vIENDTGF5ZXJUcmVlSG9zdEltcGxDaWVudCAtLSBjYWxsZWQgb24gQ0NUaHJlYWQKKyAgICB2
aXJ0dWFsIHZvaWQgcG9zdERyYXdMYXllcnNUYXNrT25DQ1RocmVhZCgpOworICAgIHZpcnR1YWwg
dm9pZCByZXF1ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKGRvdWJsZSBmcmFtZUJlZ2luVGlt
ZSk7CisKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHko
Q0NMYXllclRyZWVIb3N0Kik7CisgICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9z
dEltcGw+IGNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsKCkgPSAwOworICAgIENDTGF5ZXJUcmVlSG9z
dCogaG9zdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdDsgfQorCitwcml2YXRlOgor
ICAgIGJvb2wgaXNNYWluVGhyZWFkKCkgY29uc3Q7CisgICAgYm9vbCBpc0NDVGhyZWFkKCkgY29u
c3Q7CisKKyAgICAvLyBDYWxsZWQgb24gQ0NNYWluVGhyZWFkCisgICAgdm9pZCByZXF1ZXN0RnJh
bWVBbmRDb21taXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKKworICAgIC8vIENhbGxlZCBvbiBD
Q1RocmVhZAorICAgIHZvaWQgY29tbWl0T25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RDb21taXR0
ZXIqLCBDQ0NvbXBsZXRpb25FdmVudCopOworICAgIHZvaWQgZHJhd0xheWVyc09uQ0NUaHJlYWQo
KTsKKyAgICB2b2lkIGluaXRJbXBsT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCopOworICAg
IHZvaWQgc2V0TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhyZWFkKCk7CisgICAgdm9pZCBzZXRO
ZWVkc1JlZHJhd09uQ0NUaHJlYWQoKTsKKyAgICB2b2lkIGxheWVyVHJlZUhvc3RDbG9zZWRPbkND
VGhyZWFkKENDQ29tcGxldGlvbkV2ZW50Kik7CisKKyAgICAvLyBVc2VkIG9uIG1haW4tdGhyZWFk
IG9ubHkuCisgICAgYm9vbCBtX2NvbW1pdFBlbmRpbmc7CisKKyAgICAvLyBBY2Nlc3NlZCBvbiBt
YWluIHRocmVhZCBvbmx5LgorICAgIENDTGF5ZXJUcmVlSG9zdCogbV9sYXllclRyZWVIb3N0Owor
CisgICAgLy8gVXNlZCBvbiB0aGUgQ0NUaHJlYWQsIGJ1dCBjaGVja2VkIG9uIG1haW4gdGhyZWFk
IGR1cmluZyBpbml0aWFsaXphdGlvbi9zaHV0ZG93bi4KKyAgICBPd25QdHI8Q0NMYXllclRyZWVI
b3N0SW1wbD4gbV9sYXllclRyZWVIb3N0SW1wbDsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5U
aHJlYWRUYXNrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ01haW5UaHJlYWRUYXNrLmgKaW5kZXggN2RlOGQ3MTNlODhjODg0MjIyNDA3OTNmZjI3N2Q1
OWRmNTNhZGU3Yi4uZmFjNmU2NDNmMDVhMThiYmJhYWQ1N2IyOWJiYzAzYTYyODBlYWM4YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NN
YWluVGhyZWFkVGFzay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTWFpblRocmVhZFRhc2suaApAQCAtMjQsOSArMjQsOSBAQAogI2lmbmRlZiBD
Q01haW5UaHJlYWRUYXNrX2gKICNkZWZpbmUgQ0NNYWluVGhyZWFkVGFza19oCiAKLSNpbmNsdWRl
ICJDQ01haW5UaHJlYWQuaCIKICNpbmNsdWRlICJDcm9zc1RocmVhZENvcGllci5oIgogI2luY2x1
ZGUgIkNyb3NzVGhyZWFkVGFzay5oIgorI2luY2x1ZGUgImNjL0NDTWFpblRocmVhZC5oIgogI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaHJlYWQuY3BwCmluZGV4IDk1NjY1ODQ1YzU4YzQ4Y2EwNjIyMDAyNDI0OGI3NDdhYmFi
NzYwY2YuLmRlMTczYTEzNDk4MjRhZjkwZmFkY2U3ODE5MGZiYjgzY2M0MGViODUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFk
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RocmVhZC5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJDQ1RocmVhZC5oIgogCiAj
aW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCisjaW5jbHVkZSAiVHJhY2VFdmVudC5o
IgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KQEAgLTY0LDYgKzY1LDcg
QEAgdm9pZCogQ0NUaHJlYWQ6OmNvbXBvc2l0b3JUaHJlYWRTdGFydCh2b2lkKiB1c2VyZGF0YSkK
IAogdm9pZCogQ0NUaHJlYWQ6OnJ1bkxvb3AoKQogeworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVh
ZDo6cnVuTG9vcCIsIHRoaXMsIDApOwogICAgIHsKICAgICAgICAgLy8gV2FpdCBmb3IgQ0NUaHJl
YWQ6OnN0YXJ0KCkgdG8gY29tcGxldGUgdG8gaGF2ZSBtX3RocmVhZElECiAgICAgICAgIC8vIGVz
dGFibGlzaGVkIGJlZm9yZSBzdGFydGluZyB0aGUgbWFpbiBsb29wLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRUYXNrLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFRh
c2suaAppbmRleCA3MTI0NWQzZTRlMGVjZTUzNTA1YTBkZWRlNzUzNjhlY2M2ZDBmYzQ3Li45MWM1
OGU1ZDI1YjdiYjI4NmUyMTZjNGUwNjhjYmUxMDk1NzhmMTgzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFRhc2suaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFRh
c2suaApAQCAtMjQsOSArMjQsOSBAQAogI2lmbmRlZiBDQ1RocmVhZFRhc2tfaAogI2RlZmluZSBD
Q1RocmVhZFRhc2tfaAogCi0jaW5jbHVkZSAiQ0NUaHJlYWQuaCIKICNpbmNsdWRlICJDcm9zc1Ro
cmVhZENvcGllci5oIgogI2luY2x1ZGUgIkNyb3NzVGhyZWFkVGFzay5oIgorI2luY2x1ZGUgImNj
L0NDVGhyZWFkLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGQyOGQ4YmUxZGIx
ZWU3NzYwMDEzMDQyODdlOTMyZDEyOTlkNzdjNzYuLjAxZDdlNmJiNWQzZjAxNTFkOWNjZDViYzI2
YjFjZWFkZDE3YWM1ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTAx
IEBACisyMDExLTA0LTE4ICBOYXQgRHVjYSAgPG5kdWNhQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIEltcGxl
bWVudCBDQ0xheWVyVHJlZUhvc3QgYW5kIENDTGF5ZXJUcmVlSG9zdEltcGwgcG9ydGlvbnMgb2Yg
dGhyZWFkZWQgY29tcG9zaXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTg0MDgKKworICAgICAgICBSZWRpcmVjdCBpbnZhbGlkYXRlcyBhbmQgc2No
ZWR1bGluZyBpbnRvIGNvbXBvc2l0b3Igd2hlbiBpbgorICAgICAgICB0aHJlYWRlZCBjb21wb3Np
dGluZyBtb2RlLiBBZGQgQ0NMU3RyZXNzIHRlc3RzIGZvcgorICAgICAgICBDQ0xheWVyVHJlZUhv
c3QuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiBwdWJsaWMvV2ViV2lkZ2V0
Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYldpZGdldDo6c2NoZWR1bGVDb21wb3NpdGUpOgorICAg
ICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBs
OjphbmltYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmRvQW5pbWF0ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpwYWludCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXdJbXBsOjphbmltYXRlQW5kTGF5b3V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0lt
cGw6OmNvbXBvc2l0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzY2hlZHVsZUNv
bXBvc2l0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRSb290TGF5ZXJOZWVk
c0Rpc3BsYXkpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nQWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmRvQ29t
cG9zaXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNyZWF0ZUxheWVyVHJlZUhv
c3RDb250ZXh0M0QpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cmVhbGxvY2F0ZVJl
bmRlcmVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnVwZGF0ZUxheWVyUmVuZGVy
ZXJTZXR0aW5ncyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp1cGRhdGVMYXllclJl
bmRlcmVyVmlld3BvcnQpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5oOgorICAgICAgICAq
IHRlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Q0NM
YXllclRyZWVIb3N0VGVzdDo6Q0NMYXllclRyZWVIb3N0VGVzdCk6CisgICAgICAgIChXVEY6OkND
TGF5ZXJUcmVlSG9zdFRlc3Q6OmFuaW1hdGVBbmRMYXlvdXQpOgorICAgICAgICAoV1RGOjpDQ0xh
eWVyVHJlZUhvc3RUZXN0OjpiZWdpbkNvbW1pdE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpD
Q0xheWVyVHJlZUhvc3RUZXN0OjpiZWdpbkNvbW1pdE9uTWFpblRocmVhZCk6CisgICAgICAgIChX
VEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3Q6OmNvbW1pdE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RG
OjpDQ0xheWVyVHJlZUhvc3RUZXN0Ojpjb21taXRDb21wbGV0ZU9uQ0NUaHJlYWQpOgorICAgICAg
ICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0Ojpjb21taXRDb21wbGV0ZU9uTWFpblRocmVhZCk6
CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3Q6OmRyYXdMYXllcnNBbmRQcmVzZW50
T25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3Q6OnVwZGF0ZUxh
eWVycyk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3Q6Om9uQmVnaW5UZXN0KToK
KyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6ZG9FbmRUZXN0KToKKyAgICAgICAg
KFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6b25FbmRUZXN0KToKKyAgICAgICAgKFdURjo6Q0NM
YXllclRyZWVIb3N0VGVzdDo6cnVuVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9z
dFRlc3Q6OnRlc3RUaW1lb3V0KToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3RDbGll
bnQ6Ok1vY2tMYXllclRyZWVIb3N0Q2xpZW50KToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJl
ZUhvc3RDbGllbnQ6OmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QpOgorICAgICAgICAoV1RG
OjpNb2NrTGF5ZXJUcmVlSG9zdENsaWVudDo6YW5pbWF0ZUFuZExheW91dCk6CisgICAgICAgIChX
VEY6Ok1vY2tMYXllclRyZWVIb3N0Q29tbWl0dGVyOjpjcmVhdGUpOgorICAgICAgICAoV1RGOjpN
b2NrTGF5ZXJUcmVlSG9zdENvbW1pdHRlcjo6Y29tbWl0KToKKyAgICAgICAgKFdURjo6TW9ja0xh
eWVyVHJlZUhvc3RDb21taXR0ZXI6Ok1vY2tMYXllclRyZWVIb3N0Q29tbWl0dGVyKToKKyAgICAg
ICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3RJbXBsOjpjcmVhdGUpOgorICAgICAgICAoV1RGOjpN
b2NrTGF5ZXJUcmVlSG9zdEltcGw6OmJlZ2luQ29tbWl0KToKKyAgICAgICAgKFdURjo6TW9ja0xh
eWVyVHJlZUhvc3RJbXBsOjpjb21taXRDb21wbGV0ZSk6CisgICAgICAgIChXVEY6Ok1vY2tMYXll
clRyZWVIb3N0SW1wbDo6ZHJhd0xheWVyc0FuZFByZXNlbnQpOgorICAgICAgICAoV1RGOjpNb2Nr
TGF5ZXJUcmVlSG9zdEltcGw6Ok1vY2tMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAgIChXVEY6
Ok1vY2tMYXllclRyZWVIb3N0SW1wbFByb3h5OjpjcmVhdGUpOgorICAgICAgICAoV1RGOjpNb2Nr
TGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6Y3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwpOgorICAgICAg
ICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6TW9ja0xheWVyVHJlZUhvc3RJbXBs
UHJveHkpOgorICAgICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdDo6TW9ja0xheWVyVHJlZUhv
c3QpOgorICAgICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlTGF5ZXJUcmVlSG9z
dEltcGxQcm94eSk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXll
cnMpOgorICAgICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdDo6YmVnaW5Db21taXQpOgorICAg
ICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdDo6Y29tbWl0Q29tcGxldGUpOgorICAgICAgICAo
V1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0Ojpkb0JlZ2luVGVzdCk6CisgICAgICAgIChXVEY6OkND
TGF5ZXJUcmVlSG9zdFRlc3Q6OmVuZFRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhv
c3RUZXN0U2hvcnRsaXZlZDE6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTaG9ydGxpdmVkMSk6CisgICAg
ICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTaG9ydGxpdmVkMTo6YmVnaW5UZXN0KToKKyAg
ICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQxOjphZnRlclRlc3QpOgor
ICAgICAgICAoV1RGOjpURVNUX0YpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0
U2hvcnRsaXZlZDI6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTaG9ydGxpdmVkMik6CisgICAgICAgIChX
VEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTaG9ydGxpdmVkMjo6YmVnaW5UZXN0KToKKyAgICAgICAg
KFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQyOjphZnRlclRlc3QpOgorICAgICAg
ICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDM6OkNDTGF5ZXJUcmVlSG9zdFRl
c3RTaG9ydGxpdmVkMyk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTaG9ydGxp
dmVkMzo6YmVnaW5UZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNob3J0
bGl2ZWQzOjphZnRlclRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0Q29t
bWl0aW5nV2l0aENvbnRpbnVvdXNSZWRyYXc6OkNDTGF5ZXJUcmVlSG9zdFRlc3RDb21taXRpbmdX
aXRoQ29udGludW91c1JlZHJhdyk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RD
b21taXRpbmdXaXRoQ29udGludW91c1JlZHJhdzo6YmVnaW5UZXN0KToKKyAgICAgICAgKFdURjo6
Q0NMYXllclRyZWVIb3N0VGVzdENvbW1pdGluZ1dpdGhDb250aW51b3VzUmVkcmF3Ojpjb21taXRD
b21wbGV0ZU9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0Q29t
bWl0aW5nV2l0aENvbnRpbnVvdXNSZWRyYXc6OmRyYXdMYXllcnNBbmRQcmVzZW50T25DQ1RocmVh
ZCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RDb21taXRpbmdXaXRoQ29udGlu
dW91c1JlZHJhdzo6YWZ0ZXJUZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVz
dFNldE5lZWRzQ29tbWl0MTo6Q0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzQ29tbWl0MSk6Cisg
ICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc0NvbW1pdDE6OmJlZ2luVGVz
dCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc0NvbW1pdDE6OmRy
YXdMYXllcnNBbmRQcmVzZW50T25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVl
SG9zdFRlc3RTZXROZWVkc0NvbW1pdDE6OmNvbW1pdE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RG
OjpDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQxOjphZnRlclRlc3QpOgorICAgICAg
ICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQyOjpDQ0xheWVyVHJlZUhv
c3RUZXN0U2V0TmVlZHNDb21taXQyKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVz
dFNldE5lZWRzQ29tbWl0Mjo6YmVnaW5UZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVI
b3N0VGVzdFNldE5lZWRzQ29tbWl0Mjo6ZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhyZWFkKToK
KyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzQ29tbWl0Mjo6Y29tbWl0
T25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc0Nv
bW1pdDI6OmFmdGVyVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTZXRO
ZWVkc1JlZHJhdzo6Q0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzUmVkcmF3KToKKyAgICAgICAg
KFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzUmVkcmF3OjpiZWdpblRlc3QpOgorICAg
ICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNSZWRyYXc6OmRyYXdMYXllcnNB
bmRQcmVzZW50T25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RT
ZXROZWVkc1JlZHJhdzo6Y29tbWl0T25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJU
cmVlSG9zdFRlc3RTZXROZWVkc1JlZHJhdzo6YWZ0ZXJUZXN0KToKKyAgICAgICAgKiB0ZXN0cy9D
Q1RocmVhZFRlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisKIDIwMTEtMDQtMTgg
IEV2YW4gTWFydGluICA8ZXZhbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RXJpYyBTZWlkZWwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5n
eXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCBjMjNjOWVkY2I0
NjgyY2IwNDBlYzM2N2YzN2I1ZWE4OWY3MTliNzFkLi40ZTJhMzVlMWQzODdhNGI2NmM4Yjk1YmUy
MTZkZTg2NjgzNzQxZGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktp
dC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTUzLDYg
KzUzLDcgQEAKICAgICAgICAgXSwKICAgICAgICAgJ3dlYmtpdF91bml0dGVzdF9maWxlcyc6IFsK
ICAgICAgICAgICAgICd0ZXN0cy9BcmVuYVRlc3RIZWxwZXJzLmgnLAorICAgICAgICAgICAgJ3Rl
c3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1RocmVh
ZFRhc2tUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NUaHJlYWRUZXN0LmNwcCcsCiAg
ICAgICAgICAgICAndGVzdHMvRHJhZ0ltYWdlVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJXaWRnZXQuaAppbmRleCAxMjkwYWQ4MTYyYjY2MjNiYzM1OWEwZmNmYzU2
MzE0NGY2ZmNmNzRiLi5mNjgxYmZhYWFiZjJiMWQyOWIyZTAyZTA0NDNhMGZjNWY1NDM4MDNmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaApAQCAtNDYsNiArNDYs
OSBAQCBzdHJ1Y3QgV2ViUmVjdDsKIHN0cnVjdCBXZWJTaXplOwogdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+IGNsYXNzIFdlYlZlY3RvcjsKIAorLy8gRklYTUU6IHJlbW92ZSB0aGlzIGRlZmluZSBvbmNl
IHJlbmRlcl93aWRnZXQgaGFzIGJlZW4gY2hhbmdlZCB0byBpc3N1ZSB0aHJlYWRlZCBjb21wb3Np
dG9yIGNhbGxzCisjZGVmaW5lIFdFQldJREdFVF9IQVNfVEhSRUFERURfQ09NUE9TSVRJTkdfQ0hB
TkdFUyAxCisKIGNsYXNzIFdlYldpZGdldCB7CiBwdWJsaWM6CiAgICAgLy8gVGhpcyBtZXRob2Qg
Y2xvc2VzIGFuZCBkZWxldGVzIHRoZSBXZWJXaWRnZXQuCkBAIC01NywxNSArNjAsMTcgQEAgcHVi
bGljOgogICAgIC8vIENhbGxlZCB0byByZXNpemUgdGhlIFdlYldpZGdldC4KICAgICB2aXJ0dWFs
IHZvaWQgcmVzaXplKGNvbnN0IFdlYlNpemUmKSA9IDA7CiAKLSAgICAvLyBDYWxsZWQgdG8gdXBk
YXRlIGltcGVyYXRpdmUgYW5pbWF0aW9uIHN0YXRlLiAgVGhpcyBzaG91bGQgYmUgY2FsbGVkIGJl
Zm9yZQotICAgIC8vIHBhaW50LCBhbHRob3VnaCB0aGUgY2xpZW50IGNhbiByYXRlLWxpbWl0IHRo
ZXNlIGNhbGxzLgotICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlKCkgPSAwOworICAgIC8vIENhbGxl
ZCB0byB1cGRhdGUgaW1wZXJhdGl2ZSBhbmltYXRpb24gc3RhdGUuIFRoaXMgc2hvdWxkIGJlIGNh
bGxlZAorICAgIC8vIGJlZm9yZSBwYWludCwgYWx0aG91Z2ggdGhlIGNsaWVudCBjYW4gcmF0ZS1s
aW1pdCB0aGVzZSBjYWxscy4KKyAgICAvLyBGSVhNRTogcmVtb3ZlIGRlZmF1bHQgYXJndW1lbnQg
b25jZSByZW5kZXJfd2lkZ2V0IGhhcyBiZWVuIHVwZGF0ZWQgdG8KKyAgICAvLyBpc3N1ZSB0aGUg
Y29ycmVjdCB2YWx1ZS4KKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZShkb3VibGUgZnJhbWVCZWdp
blRpbWUpID0gMDsKIAogICAgIC8vIENhbGxlZCB0byBsYXlvdXQgdGhlIFdlYldpZGdldC4gIFRo
aXMgTVVTVCBiZSBjYWxsZWQgYmVmb3JlIFBhaW50LAogICAgIC8vIGFuZCBpdCBtYXkgcmVzdWx0
IGluIGNhbGxzIHRvIFdlYldpZGdldENsaWVudDo6ZGlkSW52YWxpZGF0ZVJlY3QuCiAgICAgdmly
dHVhbCB2b2lkIGxheW91dCgpID0gMDsKIAotICAgIC8vIENhbGxlZCB0byBwYWludCB0aGUgcmVj
dGFuZ3VsYXIgcmVnaW9uIHdpdGhpbiB0aGUgV2ViV2lkZ2V0IAorICAgIC8vIENhbGxlZCB0byBw
YWludCB0aGUgcmVjdGFuZ3VsYXIgcmVnaW9uIHdpdGhpbiB0aGUgV2ViV2lkZ2V0CiAgICAgLy8g
b250byB0aGUgc3BlY2lmaWVkIGNhbnZhcyBhdCAodmlld1BvcnQueCx2aWV3UG9ydC55KS4gWW91
IE1VU1QgY2FsbAogICAgIC8vIExheW91dCBiZWZvcmUgY2FsbGluZyB0aGlzIG1ldGhvZC4gIEl0
IGlzIG9rYXkgdG8gY2FsbCBwYWludAogICAgIC8vIG11bHRpcGxlIHRpbWVzIG9uY2UgbGF5b3V0
IGhhcyBiZWVuIGNhbGxlZCwgYXNzdW1pbmcgbm8gb3RoZXIKQEAgLTc0LDEyICs3OSwxNiBAQCBw
dWJsaWM6CiAgICAgLy8gd2FycmFudGVkIGJlZm9yZSBwYWludGluZyBhZ2FpbikuCiAgICAgdmly
dHVhbCB2b2lkIHBhaW50KFdlYkNhbnZhcyosIGNvbnN0IFdlYlJlY3QmIHZpZXdQb3J0KSA9IDA7
CiAKLSAgICAvLyBUcmlnZ2VycyBjb21wb3NpdGluZyBvZiB0aGUgY3VycmVudCBsYXllcnMgb250
byB0aGUgc2NyZWVuLgotICAgIC8vIFRoZSBmaW5pc2ggYXJndW1lbnQgY29udHJvbHMgd2hldGhl
ciB0aGUgY29tcG9zaXRvciB3aWxsIHdhaXQgZm9yIHRoZQotICAgIC8vIEdQVSB0byBmaW5pc2gg
cmVuZGVyaW5nIGJlZm9yZSByZXR1cm5pbmcuIFlvdSBNVVNUIGNhbGwgTGF5b3V0Ci0gICAgLy8g
YmVmb3JlIGNhbGxpbmcgdGhpcyBtZXRob2QsIGZvciB0aGUgc2FtZSByZWFzb25zIGRlc2NyaWJl
ZCBpbgotICAgIC8vIHRoZSBwYWludCBtZXRob2QgYWJvdmUuCi0gICAgdmlydHVhbCB2b2lkIGNv
bXBvc2l0ZShib29sIGZpbmlzaCkgPSAwOworICAgIC8vIFRyaWdnZXJzIGNvbXBvc2l0aW5nIG9m
IHRoZSBjdXJyZW50IGxheWVycyBvbnRvIHRoZSBzY3JlZW4uIFRoaXMgY2FsbCBoYXMKKyAgICAv
LyBubyBlZmZlY3QgaW4gdGhyZWFkZWQgY29tcG9zaXRpbmcgbW9kZS4gWW91IE1VU1QgY2FsbCBM
YXlvdXQgYmVmb3JlCisgICAgLy8gY2FsbGluZyB0aGlzIG1ldGhvZCwgZm9yIHRoZSBzYW1lIHJl
YXNvbnMgZGVzY3JpYmVkIGluIHRoZSBwYWludCBtZXRob2QKKyAgICAvLyBhYm92ZS4KKyAgICB2
aXJ0dWFsIHZvaWQgY29tcG9zaXRlKCkgPSAwOworCisgICAgLy8gSW4gdGhyZWFkZWQgY29tcG9z
aXRpbmcgbW9kZSwgaW5kaWNhdGVzIHRoYXQgdGhlIHdpZGdldCBzaG91bGQgcmVkcmF3CisgICAg
Ly8gaXRzZWxmLCBmb3IgZXhhbXBsZSBkdWUgdG8gd2luZG93IGRhbWFnZS4gVGhlIHJlZHJhdyB3
aWxsIGJlZ2luCisgICAgLy8gYXN5bmNocm9ub3VzbHkuCisgICAgdmlydHVhbCB2b2lkIHNjaGVk
dWxlQ29tcG9zaXRlKCkgIHsgfQogCiAgICAgLy8gQ2FsbGVkIHRvIGluZm9ybSB0aGUgV2ViV2lk
Z2V0IG9mIGEgY2hhbmdlIGluIHRoZW1lLgogICAgIC8vIEltcGxlbWVudG9ycyB0aGF0IGNhY2hl
IHJlbmRlcmVkIGNvcGllcyBvZiB3aWRnZXRzIG5lZWQgdG8gcmUtcmVuZGVyCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuY3BwCmluZGV4IGI0ZDQyNDZj
M2Y2MDEwYmNhZjUwMjFkNGNkOTY4MWFiZmMzOTNkYjUuLjc2Zjg5NGE2YmM2NTg4YWQwYWI0NDg0
MTM3NWE4MzBmODEzNzI3ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlBvcHVwTWVudUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlBvcHVwTWVudUltcGwuY3BwCkBAIC0xNTEsNyArMTUxLDcgQEAgdm9pZCBXZWJQb3B1cE1lbnVJ
bXBsOjpyZXNpemUoY29uc3QgV2ViU2l6ZSYgbmV3U2l6ZSkKICAgICB9CiB9CiAKLXZvaWQgV2Vi
UG9wdXBNZW51SW1wbDo6YW5pbWF0ZSgpCit2b2lkIFdlYlBvcHVwTWVudUltcGw6OmFuaW1hdGUo
ZG91YmxlIGZyYW1lQmVnaW5UaW1lKQogewogfQogCkBAIC0xNzMsNyArMTczLDcgQEAgdm9pZCBX
ZWJQb3B1cE1lbnVJbXBsOjp0aGVtZUNoYW5nZWQoKQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9
CiAKLXZvaWQgV2ViUG9wdXBNZW51SW1wbDo6Y29tcG9zaXRlKGJvb2wgZmluaXNoKQordm9pZCBX
ZWJQb3B1cE1lbnVJbXBsOjpjb21wb3NpdGUoKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBs
LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmgKaW5kZXgg
NThhODgzZjU2OGY3ZWYzMGY5ZjJlMDAzNGExNzhlMWVhYmMwYTgwNi4uNjVmZjA1OWNmMjNiZTQx
Nzg4Nzk1ODFiNTA1OTAyNGY5ZjA2MjU2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlBvcHVwTWVudUltcGwuaApAQCAtNjIsMTEgKzYyLDExIEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgY2xvc2UoKTsKICAgICB2aXJ0dWFsIFdlYlNpemUgc2l6ZSgpIHsgcmV0dXJu
IG1fc2l6ZTsgfQogICAgIHZpcnR1YWwgdm9pZCByZXNpemUoY29uc3QgV2ViU2l6ZSYpOwotICAg
IHZpcnR1YWwgdm9pZCBhbmltYXRlKCk7CisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGUoZG91Ymxl
IGZyYW1lQmVnaW5UaW1lKTsKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVh
bCB2b2lkIHBhaW50KFdlYkNhbnZhcyogY2FudmFzLCBjb25zdCBXZWJSZWN0JiByZWN0KTsKICAg
ICB2aXJ0dWFsIHZvaWQgdGhlbWVDaGFuZ2VkKCk7Ci0gICAgdmlydHVhbCB2b2lkIGNvbXBvc2l0
ZShib29sIGZpbmlzaCk7CisgICAgdmlydHVhbCB2b2lkIGNvbXBvc2l0ZSgpOwogICAgIHZpcnR1
YWwgYm9vbCBoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQmKTsKICAgICB2aXJ0
dWFsIHZvaWQgbW91c2VDYXB0dXJlTG9zdCgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1cyhi
b29sIGVuYWJsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJW
aWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAK
aW5kZXggMjQzOGE5NDgxZDAxNzBjNTZiMzYzMmEwZmIwMWQ2YzNkMDE4N2I4ZC4uYWIwZGM1ODc3
ODdmYTg5YTk0ZmM5N2RjNWZjOGQ2MzBkNDQ2MWI3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtOTkxLDE0ICs5OTEsMTggQEAgdm9pZCBXZWJWaWV3
SW1wbDo6cmVzaXplKGNvbnN0IFdlYlNpemUmIG5ld1NpemUpCiAjZW5kaWYKIH0KIAotdm9pZCBX
ZWJWaWV3SW1wbDo6YW5pbWF0ZSgpCit2b2lkIFdlYlZpZXdJbXBsOjphbmltYXRlKGRvdWJsZSBm
cmFtZUJlZ2luVGltZSkKIHsKICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCisg
ICAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIG9uY2UgcmVuZGVyX3dpZGdldCBoYXMgYmVlbiBtb2Rp
ZmllZCB0byBwYXNzIGluIGEKKyAgICAvLyBmcmFtZUJlZ2luVGltZS4KKyAgICBpZiAoIWZyYW1l
QmVnaW5UaW1lKQorICAgICAgICBmcmFtZUJlZ2luVGltZSA9IGN1cnJlbnRUaW1lKCk7CiAgICAg
V2ViRnJhbWVJbXBsKiB3ZWJmcmFtZSA9IG1haW5GcmFtZUltcGwoKTsKICAgICBpZiAod2ViZnJh
bWUpIHsKICAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gd2ViZnJhbWUtPmZyYW1lVmlldygpOwog
ICAgICAgICBpZiAodmlldykKLSAgICAgICAgICAgIHZpZXctPnNlcnZpY2VTY3JpcHRlZEFuaW1h
dGlvbnMoY29udmVydFNlY29uZHNUb0RPTVRpbWVTdGFtcChjdXJyZW50VGltZSgpKSk7CisgICAg
ICAgICAgICB2aWV3LT5zZXJ2aWNlU2NyaXB0ZWRBbmltYXRpb25zKGNvbnZlcnRTZWNvbmRzVG9E
T01UaW1lU3RhbXAoZnJhbWVCZWdpblRpbWUpKTsKICAgICB9CiAjZW5kaWYKIH0KQEAgLTEwNjgs
NiArMTA3MiwxMCBAQCB2b2lkIFdlYlZpZXdJbXBsOjpwYWludChXZWJDYW52YXMqIGNhbnZhcywg
Y29uc3QgV2ViUmVjdCYgcmVjdCkKIHsKICAgICBpZiAoaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5n
QWN0aXZlKCkpIHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisjaWYgVVNFKFRI
UkVBREVEX0NPTVBPU0lUSU5HKQorICAgICAgICAvLyBGSVhNRTogZG8gcmVhZGJhY2sgaW4gdGhy
ZWFkZWQgY29tcG9zaXRpbmcgbW9kZSByYXRoZXIgdGhhbiByZXR1cm5pbmcgbm90aGluZworICAg
ICAgICByZXR1cm47CisjZW5kaWYKICAgICAgICAgZG9Db21wb3NpdGUoKTsKIAogICAgICAgICAv
LyBJZiBhIGNhbnZhcyB3YXMgcGFzc2VkIGluLCB3ZSB1c2UgaXQgdG8gZ3JhYiBhIGNvcHkgb2Yg
dGhlCkBAIC0xMDk2LDkgKzExMDQsMTkgQEAgdm9pZCBXZWJWaWV3SW1wbDo6dGhlbWVDaGFuZ2Vk
KCkKICAgICB2aWV3LT5pbnZhbGlkYXRlUmVjdChkYW1hZ2VkUmVjdCk7CiB9CiAKLXZvaWQgV2Vi
Vmlld0ltcGw6OmNvbXBvc2l0ZShib29sIGZpbmlzaCkKKwordm9pZCBXZWJWaWV3SW1wbDo6YW5p
bWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpCit7CisgICAgYW5pbWF0ZShmcmFt
ZUJlZ2luVGltZSk7CisgICAgbGF5b3V0KCk7Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OmNvbXBv
c2l0ZSgpCiB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2lmIFVTRShUSFJF
QURFRF9DT01QT1NJVElORykKKyAgICBtX2xheWVyUmVuZGVyZXItPnNldE5lZWRzUmVkcmF3KCk7
CisjZWxzZQogICAgIFRSQUNFX0VWRU5UKCJXZWJWaWV3SW1wbDo6Y29tcG9zaXRlIiwgdGhpcywg
MCk7CiAgICAgaWYgKG1fcmVjcmVhdGluZ0dyYXBoaWNzQ29udGV4dCkgewogICAgICAgICAvLyBy
ZWFsbG9jYXRlUmVuZGVyZXIgd2lsbCByZXF1ZXN0IGEgcmVwYWludCB3aGV0aGVyIG9yIG5vdCBp
dCBzdWNjZWVkZWQKQEAgLTExMDksMTAgKzExMjcsNiBAQCB2b2lkIFdlYlZpZXdJbXBsOjpjb21w
b3NpdGUoYm9vbCBmaW5pc2gpCiAgICAgfQogICAgIGRvQ29tcG9zaXRlKCk7CiAKLSAgICAvLyBG
aW5pc2ggaWYgcmVxdWVzdGVkLgotICAgIGlmIChmaW5pc2gpCi0gICAgICAgIG1fbGF5ZXJSZW5k
ZXJlci0+ZmluaXNoKCk7Ci0KICAgICAvLyBQdXQgcmVzdWx0IG9uc2NyZWVuLgogICAgIG1fbGF5
ZXJSZW5kZXJlci0+cHJlc2VudCgpOwogCkBAIC0xMTI4LDYgKzExNDIsNyBAQCB2b2lkIFdlYlZp
ZXdJbXBsOjpjb21wb3NpdGUoYm9vbCBmaW5pc2gpCiAgICAgICAgIHNldFJvb3RMYXllck5lZWRz
RGlzcGxheSgpOwogICAgIH0KICNlbmRpZgorI2VuZGlmCiB9CiAKIGNvbnN0IFdlYklucHV0RXZl
bnQqIFdlYlZpZXdJbXBsOjptX2N1cnJlbnRJbnB1dEV2ZW50ID0gMDsKQEAgLTIzMjcsOSArMjM0
MiwyNCBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRSb290R3JhcGhpY3NMYXllcihXZWJDb3JlOjpQ
bGF0Zm9ybUxheWVyKiBsYXllcikKICAgICAgICAgbV9jbGllbnQtPmRpZEludmFsaWRhdGVSZWN0
KGRhbWFnZWRSZWN0KTsKIH0KIAordm9pZCBXZWJWaWV3SW1wbDo6c2NoZWR1bGVDb21wb3NpdGUo
KQoreworI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICBpZiAobV9sYXllclJlbmRl
cmVyKQorICAgICAgICBtX2xheWVyUmVuZGVyZXItPnNldE5lZWRzUmVkcmF3KCk7CisjZWxzZQor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCit9CisKIHZvaWQgV2ViVmlld0ltcGw6
OnNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpCiB7CisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lU
SU5HKQorICAgIGlmIChtX2xheWVyUmVuZGVyZXIpCisgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+
c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyNlbHNlCiAgICAgbV9jbGllbnQtPnNjaGVkdWxl
Q29tcG9zaXRlKCk7CisjZW5kaWYKIH0KIAogCkBAIC0yNDAxLDE1ICsyNDMxLDEwIEBAIHZvaWQg
V2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZShib29sIGFjdGl2
ZSkKIAogICAgICAgICBtX2NsaWVudC0+ZGlkQWN0aXZhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5n
KHRydWUpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
Y29udGV4dCA9IG1fdGVtcG9yYXJ5T25zY3JlZW5HcmFwaGljc0NvbnRleHQzRC5yZWxlYXNlKCk7
Ci0gICAgICAgIGlmICghY29udGV4dCkgewotICAgICAgICAgICAgY29udGV4dCA9IEdyYXBoaWNz
Q29udGV4dDNEOjpjcmVhdGUoZ2V0Q29tcG9zaXRvckNvbnRleHRBdHRyaWJ1dGVzKCksIG1fcGFn
ZS0+Y2hyb21lKCksIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRv
dyk7Ci0gICAgICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZXNoYXBlKHN0ZDo6bWF4KDEsIG1fc2l6ZS53aWR0aCksIHN0ZDo6bWF4KDEsIG1fc2l6ZS5oZWln
aHQpKTsKLSAgICAgICAgfQotCi0KLSAgICAgICAgbV9sYXllclJlbmRlcmVyID0gTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpjcmVhdGUoY29udGV4dC5yZWxlYXNlKCksIFdlYlZpZXdJbXBsQ29udGVu
dFBhaW50ZXI6OmNyZWF0ZSh0aGlzKSk7CisgICAgICAgIG1fbGF5ZXJSZW5kZXJlciA9IExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMsIFdlYlZpZXdJbXBsQ29udGVudFBhaW50ZXI6
OmNyZWF0ZSh0aGlzKSk7CisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgICAgICB1
cGRhdGVMYXllclJlbmRlcmVyU2V0dGluZ3MoKTsKKyNlbmRpZgogICAgICAgICBpZiAobV9sYXll
clJlbmRlcmVyKSB7CiAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkQWN0aXZhdGVBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nKHRydWUpOwogICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRp
bmdBY3RpdmUgPSB0cnVlOwpAQCAtMjQzNiwyNCArMjQ2MSwyOCBAQCB2b2lkIFdlYlZpZXdJbXBs
Ojpkb0NvbXBvc2l0ZSgpCiAgICAgaWYgKCFwYWdlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IG1fbGF5ZXJSZW5kZXJlci0+c2V0Q29tcG9zaXRlT2Zmc2NyZWVuKHNldHRpbmdzKCktPmNvbXBv
c2l0ZVRvVGV4dHVyZUVuYWJsZWQoKSk7Ci0KLSAgICBDQ0hlYWRzVXBEaXNwbGF5KiBodWQgPSBt
X2xheWVyUmVuZGVyZXItPmhlYWRzVXBEaXNwbGF5KCk7Ci0gICAgaHVkLT5zZXRTaG93RlBTQ291
bnRlcihzZXR0aW5ncygpLT5zaG93RlBTQ291bnRlcigpKTsKLSAgICBodWQtPnNldFNob3dQbGF0
Zm9ybUxheWVyVHJlZShzZXR0aW5ncygpLT5zaG93UGxhdGZvcm1MYXllclRyZWUoKSk7CisgICAg
bV9sYXllclJlbmRlcmVyLT51cGRhdGVMYXllcnMoKTsKKyAgICBtX2xheWVyUmVuZGVyZXItPmRy
YXdMYXllcnMoKTsKK30KIAotICAgIG1fbGF5ZXJSZW5kZXJlci0+dXBkYXRlQW5kRHJhd0xheWVy
cygpOworUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gV2ViVmlld0ltcGw6OmNyZWF0ZUxh
eWVyVHJlZUhvc3RDb250ZXh0M0QoKQoreworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
Y29udGV4dCA9IG1fdGVtcG9yYXJ5T25zY3JlZW5HcmFwaGljc0NvbnRleHQzRC5yZWxlYXNlKCk7
CisgICAgaWYgKCFjb250ZXh0KSB7CisgICAgICAgIGNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQz
RDo6Y3JlYXRlKGdldENvbXBvc2l0b3JDb250ZXh0QXR0cmlidXRlcygpLCBtX3BhZ2UtPmNocm9t
ZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlc2hhcGUoc3RkOjptYXgo
MSwgbV9zaXplLndpZHRoKSwgc3RkOjptYXgoMSwgbV9zaXplLmhlaWdodCkpOworICAgIH0KKyAg
ICByZXR1cm4gY29udGV4dDsKIH0KIAogdm9pZCBXZWJWaWV3SW1wbDo6cmVhbGxvY2F0ZVJlbmRl
cmVyKCkKIHsKLSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG5ld0NvbnRleHQgPSBtX3Rl
bXBvcmFyeU9uc2NyZWVuR3JhcGhpY3NDb250ZXh0M0QuZ2V0KCk7Ci0gICAgV2ViR3JhcGhpY3ND
b250ZXh0M0QqIHdlYkNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpleHRyYWN0
V2ViR3JhcGhpY3NDb250ZXh0M0QobmV3Q29udGV4dC5nZXQoKSk7Ci0gICAgaWYgKCFuZXdDb250
ZXh0IHx8ICF3ZWJDb250ZXh0IHx8IHdlYkNvbnRleHQtPmlzQ29udGV4dExvc3QoKSkKLSAgICAg
ICAgbmV3Q29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoCi0gICAgICAgICAgICBn
ZXRDb21wb3NpdG9yQ29udGV4dEF0dHJpYnV0ZXMoKSwgbV9wYWdlLT5jaHJvbWUoKSwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKICAgICAvLyBHcmFwaGlj
c0NvbnRleHQzRDo6Y3JlYXRlIG1pZ2h0IGZhaWwgYW5kIHJldHVybiAwLCBpbiB0aGF0IGNhc2Ug
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUgd2lsbCBhbHNvIHJldHVybiAwLgotICAgIFJl
ZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmNyZWF0ZShuZXdDb250ZXh0LCBXZWJWaWV3SW1wbENvbnRlbnRQYWludGVyOjpj
cmVhdGUodGhpcykpOworICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVyUmVu
ZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCBXZWJWaWV3SW1wbENv
bnRlbnRQYWludGVyOjpjcmVhdGUodGhpcykpOworI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElO
RykKKyAgICB1cGRhdGVMYXllclJlbmRlcmVyU2V0dGluZ3MoKTsKKyNlbmRpZgogCiAgICAgLy8g
UmVhdHRhY2ggdGhlIHJvb3QgbGF5ZXIuICBDaGlsZCBsYXllcnMgd2lsbCBnZXQgcmVhdHRhY2hl
ZCBhcyBhIHNpZGUgZWZmZWN0IG9mIHVwZGF0ZUxheWVyc1JlY3Vyc2l2ZS4KICAgICBpZiAobGF5
ZXJSZW5kZXJlcikgewpAQCAtMjQ2NCw3ICsyNDkzLDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6cmVh
bGxvY2F0ZVJlbmRlcmVyKCkKICAgICAgICAgLy8gcmVzaGFwZSBzaG91bGQgcmVhbGx5IGJlIGV4
dHJhY3RlZCBpbnRvIG9uZSBmdW5jdGlvbjsgaXQgaXMgbm90CiAgICAgICAgIC8vIGltbWVkaWF0
ZWx5IG9idmlvdXMgdGhhdCBHcmFwaGljc0NvbnRleHQzRCBvYmplY3Qgd2lsbCBub3QKICAgICAg
ICAgLy8gZnVuY3Rpb24gcHJvcGVybHkgdW50aWwgaXRzIHJlc2hhcGUgbWV0aG9kIGlzIGNhbGxl
ZC4KLSAgICAgICAgbmV3Q29udGV4dC0+cmVzaGFwZShzdGQ6Om1heCgxLCBtX3NpemUud2lkdGgp
LCBzdGQ6Om1heCgxLCBtX3NpemUuaGVpZ2h0KSk7CisgICAgICAgIGxheWVyUmVuZGVyZXItPmNv
bnRleHQoKS0+cmVzaGFwZShzdGQ6Om1heCgxLCBtX3NpemUud2lkdGgpLCBzdGQ6Om1heCgxLCBt
X3NpemUuaGVpZ2h0KSk7CiAgICAgICAgIHNldFJvb3RHcmFwaGljc0xheWVyKG1fbGF5ZXJSZW5k
ZXJlci0+cm9vdExheWVyKCkpOwogICAgICAgICAvLyBGb3JjZXMgVmlld0hvc3RNc2dfRGlkQWN0
aXZhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nIHRvIGJlIHNlbnQgc28KICAgICAgICAgLy8gdGhh
dCB0aGUgYnJvd3NlciBwcm9jZXNzIGNhbiByZWFjcXVpcmUgc3VyZmFjZXMuCkBAIC0yNDc0LDkg
KzI1MDMsMjAgQEAgdm9pZCBXZWJWaWV3SW1wbDo6cmVhbGxvY2F0ZVJlbmRlcmVyKCkKIH0KICNl
bmRpZgogCi12b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVMYXllclJlbmRlcmVyVmlld3BvcnQoKQor
dm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlTGF5ZXJSZW5kZXJlclNldHRpbmdzKCkKIHsKICAgICBB
U1NFUlQobV9sYXllclJlbmRlcmVyKTsKKyAgICBtX2xheWVyUmVuZGVyZXItPnNldENvbXBvc2l0
ZU9mZnNjcmVlbihzZXR0aW5ncygpLT5jb21wb3NpdGVUb1RleHR1cmVFbmFibGVkKCkpOworCisg
ICAgQ0NIZWFkc1VwRGlzcGxheSogaHVkID0gbV9sYXllclJlbmRlcmVyLT5oZWFkc1VwRGlzcGxh
eSgpOworICAgIGh1ZC0+c2V0U2hvd0ZQU0NvdW50ZXIoc2V0dGluZ3MoKS0+c2hvd0ZQU0NvdW50
ZXIoKSk7CisgICAgaHVkLT5zZXRTaG93UGxhdGZvcm1MYXllclRyZWUoc2V0dGluZ3MoKS0+c2hv
d1BsYXRmb3JtTGF5ZXJUcmVlKCkpOworfQorCit2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVMYXll
clJlbmRlcmVyVmlld3BvcnQoKQoreworICAgIGlmICghbV9sYXllclJlbmRlcmVyKQorICAgICAg
ICByZXR1cm47CiAKICAgICBpZiAoIXBhZ2UoKSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKaW5kZXggZjEwMjAyZjc2ZGE2Y2RlMzI2NTkw
OWI0ZmU2NWY3MGFhZGI4YmY5My4uNzdjNTFhZDgyMTQzMzAyNjNhZGYxMGJiZGUzMDQ5NTg0ZDA0
MjMyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCkBAIC01NSw2
ICs1NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENocm9taXVtRGF0YU9iamVjdDsK
IGNsYXNzIERvY3VtZW50TG9hZGVyOwogY2xhc3MgRnJhbWU7CitjbGFzcyBHcmFwaGljc0NvbnRl
eHQzRDsKIGNsYXNzIEhpc3RvcnlJdGVtOwogY2xhc3MgSGl0VGVzdFJlc3VsdDsKIGNsYXNzIEtl
eWJvYXJkRXZlbnQ7CkBAIC04NiwxNyArODcsMTggQEAgY2xhc3MgV2ViTW91c2VXaGVlbEV2ZW50
OwogY2xhc3MgV2ViU2V0dGluZ3NJbXBsOwogY2xhc3MgV2ViVG91Y2hFdmVudDsKIAotY2xhc3Mg
V2ViVmlld0ltcGwgOiBwdWJsaWMgV2ViVmlldywgcHVibGljIFJlZkNvdW50ZWQ8V2ViVmlld0lt
cGw+IHsKK2NsYXNzIFdlYlZpZXdJbXBsIDogcHVibGljIFdlYlZpZXcsIHB1YmxpYyBXZWJDb3Jl
OjpDQ0xheWVyVHJlZUhvc3RDbGllbnQsIHB1YmxpYyBSZWZDb3VudGVkPFdlYlZpZXdJbXBsPiB7
CiBwdWJsaWM6CiAgICAgLy8gV2ViV2lkZ2V0IG1ldGhvZHM6CiAgICAgdmlydHVhbCB2b2lkIGNs
b3NlKCk7CiAgICAgdmlydHVhbCBXZWJTaXplIHNpemUoKSB7IHJldHVybiBtX3NpemU7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgcmVzaXplKGNvbnN0IFdlYlNpemUmKTsKLSAgICB2aXJ0dWFsIHZvaWQg
YW5pbWF0ZSgpOworICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlKGRvdWJsZSBmcmFtZUJlZ2luVGlt
ZSk7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludChX
ZWJDYW52YXMqLCBjb25zdCBXZWJSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIHRoZW1lQ2hhbmdl
ZCgpOwotICAgIHZpcnR1YWwgdm9pZCBjb21wb3NpdGUoYm9vbCBmaW5pc2gpOworICAgIHZpcnR1
YWwgdm9pZCBjb21wb3NpdGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGUo
KTsKICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50
Jik7CiAgICAgdmlydHVhbCB2b2lkIG1vdXNlQ2FwdHVyZUxvc3QoKTsKICAgICB2aXJ0dWFsIHZv
aWQgc2V0Rm9jdXMoYm9vbCBlbmFibGUpOwpAQCAtMTk2LDYgKzE5OCwxMSBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmFjdGl2ZUZvcmVn
cm91bmRDb2xvcik7CiAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1DdXN0b21Db250ZXh0TWVudUFj
dGlvbih1bnNpZ25lZCBhY3Rpb24pOwogCisgICAgLy8gQ0NMYXllclRyZWVIb3N0Q2xpZW50Cisg
ICAgdmlydHVhbCB2b2lkIGFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsK
KyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGVMYXllclRy
ZWVIb3N0Q29udGV4dDNEKCk7CisKKwogICAgIC8vIFdlYlZpZXdJbXBsCiAKICAgICB2b2lkIHNl
dElnbm9yZUlucHV0RXZlbnRzKGJvb2wgbmV3VmFsdWUpOwpAQCAtMzM5LDYgKzM0Niw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpOwogICAgIHZvaWQgc2Ny
b2xsUm9vdExheWVyUmVjdChjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxEZWx0YSwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpOwogICAgIHZvaWQgaW52YWxpZGF0ZVJvb3RM
YXllclJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQgZG9VcGRhdGVBbmRD
b21wb3NpdGUoKTsKICNlbmRpZgogCiAgICAgLy8gUmV0dXJucyB0aGUgb25zY3JlZW4gM0QgY29u
dGV4dCB1c2VkIGJ5IHRoZSBjb21wb3NpdG9yLiBUaGlzIGlzCkBAIC00MDIsMTEgKzQxMCwxMyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBXZWJQb2ludCYgc2NyZWVuUG9pbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIERyYWdBY3Rpb24pOwogCisKICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCiAgICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3Rp
dmUoYm9vbCk7CiAgICAgdm9pZCBkb0NvbXBvc2l0ZSgpOwogICAgIHZvaWQgZG9QaXhlbFJlYWRi
YWNrVG9DYW52YXMoV2ViQ2FudmFzKiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwogICAgIHZv
aWQgcmVhbGxvY2F0ZVJlbmRlcmVyKCk7CisgICAgdm9pZCB1cGRhdGVMYXllclJlbmRlcmVyU2V0
dGluZ3MoKTsKICAgICB2b2lkIHVwZGF0ZUxheWVyUmVuZGVyZXJWaWV3cG9ydCgpOwogI2VuZGlm
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVI
b3N0VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9z
dFRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE3NGU0NGYzMDgwM2VkMTNkM2M1Y2Y3NGI3M2ZlOWI2ZDM1
YzUwN2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
TGF5ZXJUcmVlSG9zdFRlc3QuY3BwCkBAIC0wLDAgKzEsNTMyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICog
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisKKyNp
bmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dDNELmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgorI2luY2x1ZGUgImNj
L0NDTWFpblRocmVhZFRhc2suaCIKKyNpbmNsdWRlICJjYy9DQ1RocmVhZFRhc2suaCIKKyNpbmNs
dWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHdlYmtpdC9zdXBwb3J0L3dlYmtpdF9zdXBw
b3J0Lmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworCit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIE1vY2tM
YXllclRyZWVIb3N0OworY2xhc3MgTW9ja0xheWVyVHJlZUhvc3RDbGllbnQ7CitjbGFzcyBNb2Nr
TGF5ZXJUcmVlSG9zdEltcGw7CisKKy8vIFRoZSBDQ0xheWVyVHJlZUhvc3RUZXN0IHJ1bnMgd2l0
aCB0aGUgbWFpbiBsb29wIHJ1bm5pbmcuIEl0IGluc3RhbnRpYXRlcyBhIHNpbmdsZSBNb2NrTGF5
ZXJUcmVlSG9zdCBhbmQgYXNzb2NpYXRlZAorLy8gTW9ja0xheWVyVHJlZUhvc3RJbXBsL01vY2tM
YXllclRyZWVIb3N0Q2xpZW50LgorLy8KKy8vIGJlZ2luVGVzdCgpIGlzIGNhbGxlZCBvbmNlIHRo
ZSBtYWluIG1lc3NhZ2UgbG9vcCBpcyBydW5uaW5nIGFuZCB0aGUgbGF5ZXIgdHJlZSBob3N0IGlz
IGluaXRpYWxpemVkLgorLy8KKy8vIEtleSBzdGFnZXMgb2YgdGhlIGRyYXdpbmcgbG9vcCwgZS5n
LiBkcmF3aW5nIG9yIGNvbW1pdGluZywgcmVkaXJlY3QgdG8gQ0NMYXllclRyZWVIb3N0VGVzdCBt
ZXRob2RzIG9mIHNpbWlsYXIgbmFtZXMuCisvLyBUbyB0cmFjayB0aGUgY29tbWl0IHByb2Nlc3Ms
IG92ZXJyaWRlIHRoZXNlIGZ1bmN0aW9ucy4KKy8vCisvLyBUaGUgdGVzdCBjb250aW51ZXMgdW50
aWwgc29tZW9uZSBjYWxscyBlbmRUZXN0LiBlbmRUZXN0IGNhbiBiZSBjYWxsZWQgb24gYW55IHRo
cmVhZCwgYnV0IGJlIGF3YXJlIHRoYXQKKy8vIGVuZGluZyB0aGUgdGVzdCBpcyBhbiBhc3luY2hy
b25vdXMgcHJvY2Vzcy4KK2NsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3QgOiBwdWJsaWMgdGVzdGlu
Zzo6VGVzdCB7CitwdWJsaWM6CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdCgpCisgICAgICAgIDog
bV9iZWdpbm5pbmcoZmFsc2UpCisgICAgICAgICwgbV9lbmRXaGVuQmVnaW5SZXR1cm5zKGZhbHNl
KQorICAgICAgICAsIG1fcnVubmluZyhmYWxzZSkKKyAgICAgICAgLCBtX3RpbWVkT3V0KGZhbHNl
KSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBhZnRlclRlc3QoKSA9IDA7CisKKyAgICB2aXJ0dWFs
IHZvaWQgYmVnaW5UZXN0KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0
KE1vY2tMYXllclRyZWVIb3N0Q2xpZW50KiBsYXllclRyZWVIb3N0LCBkb3VibGUgZnJhbWVCZWdp
blRpbWUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdE9uQ0NUaHJlYWQoTW9ja0xh
eWVyVHJlZUhvc3RJbXBsKiBsYXllclRyZWVIb3N0SW1wbCkgeyB9CisgICAgdmlydHVhbCB2b2lk
IGJlZ2luQ29tbWl0T25NYWluVGhyZWFkKE1vY2tMYXllclRyZWVIb3N0KiBsYXllclRyZWVIb3N0
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0T25DQ1RocmVhZChNb2NrTGF5ZXJUcmVlSG9z
dCogbGF5ZXJUcmVlSG9zdCwgTW9ja0xheWVyVHJlZUhvc3RJbXBsKiBsYXllclRyZWVIb3N0SW1w
bCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGNvbW1pdENvbXBsZXRlT25DQ1RocmVhZChNb2NrTGF5
ZXJUcmVlSG9zdEltcGwqIGxheWVyVHJlZUhvc3RJbXBsKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
Y29tbWl0Q29tcGxldGVPbk1haW5UaHJlYWQoTW9ja0xheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhv
c3QpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkcmF3TGF5ZXJzQW5kUHJlc2VudE9uQ0NUaHJlYWQo
TW9ja0xheWVyVHJlZUhvc3RJbXBsKiBsYXllclRyZWVIb3N0SW1wbCkgeyB9CisgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZUxheWVycyhNb2NrTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCkgeyB9
CisKKyAgICB2b2lkIGVuZFRlc3QoKTsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZG9CZWdpblRl
c3QoKTsKKworICAgIHN0YXRpYyB2b2lkIG9uQmVnaW5UZXN0KHZvaWQqIHNlbGYpCisgICAgewor
ICAgICAgICBzdGF0aWNfY2FzdDxDQ0xheWVyVHJlZUhvc3RUZXN0Kj4oc2VsZiktPmRvQmVnaW5U
ZXN0KCk7CisgICAgfQorCisgICAgdm9pZCBkb0VuZFRlc3QoKQorICAgIHsKKyAgICB9CisKKyAg
ICBzdGF0aWMgdm9pZCBvbkVuZFRlc3Qodm9pZCogc2VsZikKKyAgICB7CisgICAgICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdFRlc3QqIHRlc3QgPSBz
dGF0aWNfY2FzdDxDQ0xheWVyVHJlZUhvc3RUZXN0Kj4oc2VsZik7CisgICAgICAgIHRlc3QtPm1f
bGF5ZXJUcmVlSG9zdC5jbGVhcigpOworICAgICAgICB0ZXN0LT5tX2NsaWVudC5jbGVhcigpOwor
ICAgICAgICB3ZWJraXRfc3VwcG9ydDo6UXVpdE1lc3NhZ2VMb29wKCk7CisgICAgfQorCisgICAg
dm9pZCBydW5UZXN0KCkKKyAgICB7CisgICAgICAgIHdlYmtpdF9zdXBwb3J0OjpQb3N0RGVsYXll
ZFRhc2soQ0NMYXllclRyZWVIb3N0VGVzdDo6b25CZWdpblRlc3QsIHN0YXRpY19jYXN0PHZvaWQq
Pih0aGlzKSwgMCk7CisgICAgICAgIHdlYmtpdF9zdXBwb3J0OjpQb3N0RGVsYXllZFRhc2soQ0NM
YXllclRyZWVIb3N0VGVzdDo6dGVzdFRpbWVvdXQsIHN0YXRpY19jYXN0PHZvaWQqPih0aGlzKSwg
NTAwMCk7CisgICAgICAgIHdlYmtpdF9zdXBwb3J0OjpSdW5NZXNzYWdlTG9vcCgpOworICAgICAg
ICBtX3J1bm5pbmcgPSBmYWxzZTsKKyAgICAgICAgYm9vbCB0aW1lZE91dCA9IG1fdGltZWRPdXQ7
IC8vIFNhdmUgd2hldGhlciB3ZSdyZSB0aW1lZCBvdXQgaW4gY2FzZSBSdW5BbGxQZW5kaW5nTWVz
c2FnZXMgaGFzIHRoZSB0aW1lb3V0LgorICAgICAgICB3ZWJraXRfc3VwcG9ydDo6UnVuQWxsUGVu
ZGluZ01lc3NhZ2VzKCk7CisgICAgICAgIGlmICh0aW1lZE91dCkgeworICAgICAgICAgICAgcHJp
bnRmKCJUZXN0IHRpbWVkIG91dCIpOworICAgICAgICAgICAgRkFJTCgpIDw8ICJUZXN0IHRpbWVk
IG91dCI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYWZ0ZXJUZXN0
KCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgdGVzdFRpbWVvdXQodm9pZCogc2VsZikKKyAg
ICB7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdFRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxDQ0xh
eWVyVHJlZUhvc3RUZXN0Kj4oc2VsZik7CisgICAgICAgIGlmICghdGVzdC0+bV9ydW5uaW5nKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0ZXN0LT5tX3RpbWVkT3V0ID0gdHJ1ZTsKKyAg
ICAgICAgdGVzdC0+ZW5kVGVzdCgpOworICAgIH0KKworICAgIE11dGV4IG1fdHJhY2VzTG9jazsK
KyAgICBWZWN0b3I8c3RkOjpzdHJpbmc+IG1fdHJhY2VzOworCisgICAgT3duUHRyPE1vY2tMYXll
clRyZWVIb3N0Q2xpZW50PiBtX2NsaWVudDsKKyAgICBSZWZQdHI8TW9ja0xheWVyVHJlZUhvc3Q+
IG1fbGF5ZXJUcmVlSG9zdDsKKworcHJpdmF0ZToKKyAgICBib29sIG1fYmVnaW5uaW5nOworICAg
IGJvb2wgbV9lbmRXaGVuQmVnaW5SZXR1cm5zOworICAgIGJvb2wgbV9ydW5uaW5nOworICAgIGJv
b2wgbV90aW1lZE91dDsKK307CisKK2NsYXNzIE1vY2tMYXllclRyZWVIb3N0Q2xpZW50IDogcHVi
bGljIENDTGF5ZXJUcmVlSG9zdENsaWVudCB7CitwdWJsaWM6CisgICAgTW9ja0xheWVyVHJlZUhv
c3RDbGllbnQoQ0NMYXllclRyZWVIb3N0VGVzdCogdGVzdCkgOiBtX3Rlc3QodGVzdCkgeyB9CisK
KyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUxheWVyVHJl
ZUhvc3RDb250ZXh0M0QoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmPEdyYXBoaWNz
Q29udGV4dDNEPigwKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUFuZExheW91
dChkb3VibGUgZnJhbWVCZWdpblRpbWUpCisgICAgeworICAgICAgICBtX3Rlc3QtPmFuaW1hdGVB
bmRMYXlvdXQodGhpcywgZnJhbWVCZWdpblRpbWUpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBD
Q0xheWVyVHJlZUhvc3RUZXN0KiBtX3Rlc3Q7Cit9OworCitjbGFzcyBNb2NrTGF5ZXJUcmVlSG9z
dENvbW1pdHRlciA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIgeworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPE1vY2tMYXllclRyZWVIb3N0Q29tbWl0dGVyPiBjcmVhdGUo
Q0NMYXllclRyZWVIb3N0VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0
cihuZXcgTW9ja0xheWVyVHJlZUhvc3RDb21taXR0ZXIodGVzdCkpOworICAgIH0KKworICAgIHZp
cnR1YWwgdm9pZCBjb21taXQoQ0NMYXllclRyZWVIb3N0KiBob3N0LCBDQ0xheWVyVHJlZUhvc3RJ
bXBsKiBob3N0SW1wbCkKKyAgICB7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcjo6
Y29tbWl0KGhvc3QsIGhvc3RJbXBsKTsKKyAgICAgICAgbV90ZXN0LT5jb21taXRPbkNDVGhyZWFk
KHJlaW50ZXJwcmV0X2Nhc3Q8TW9ja0xheWVyVHJlZUhvc3QqPihob3N0KSwgcmVpbnRlcnByZXRf
Y2FzdDxNb2NrTGF5ZXJUcmVlSG9zdEltcGwqPihob3N0SW1wbCkpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBNb2NrTGF5ZXJUcmVlSG9zdENvbW1pdHRlcihDQ0xheWVyVHJlZUhvc3RUZXN0KiB0
ZXN0KSA6IG1fdGVzdCh0ZXN0KSB7IH0KKyAgICBDQ0xheWVyVHJlZUhvc3RUZXN0KiBtX3Rlc3Q7
Cit9OworCitjbGFzcyBNb2NrTGF5ZXJUcmVlSG9zdEltcGwgOiBwdWJsaWMgQ0NMYXllclRyZWVI
b3N0SW1wbCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8TW9ja0xheWVyVHJlZUhv
c3RJbXBsPiBjcmVhdGUoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogY2xpZW50LCBDQ0xheWVy
VHJlZUhvc3RUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBN
b2NrTGF5ZXJUcmVlSG9zdEltcGwoY2xpZW50LCB0ZXN0KSk7CisgICAgfQorCisgICAgdmlydHVh
bCB2b2lkIGJlZ2luQ29tbWl0KCkKKyAgICB7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6
OmJlZ2luQ29tbWl0KCk7CisgICAgICAgIG1fdGVzdC0+YmVnaW5Db21taXRPbkNDVGhyZWFkKHRo
aXMpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBjb21taXRDb21wbGV0ZSgpCisgICAgewor
ICAgICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb21taXRDb21wbGV0ZSgpOworICAgICAgICBt
X3Rlc3QtPmNvbW1pdENvbXBsZXRlT25DQ1RocmVhZCh0aGlzKTsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgZHJhd0xheWVyc0FuZFByZXNlbnQoKQorICAgIHsKKyAgICAgICAgbV90ZXN0LT5k
cmF3TGF5ZXJzQW5kUHJlc2VudE9uQ0NUaHJlYWQodGhpcyk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIE1vY2tMYXllclRyZWVIb3N0SW1wbChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGll
bnQsIENDTGF5ZXJUcmVlSG9zdFRlc3QqIHRlc3QpCisgICAgICAgICAgICA6IENDTGF5ZXJUcmVl
SG9zdEltcGwoY2xpZW50KQorICAgICAgICAgICAgLCBtX3Rlc3QodGVzdCkKKyAgICB7CisgICAg
fQorCisgICAgQ0NMYXllclRyZWVIb3N0VGVzdCogbV90ZXN0OworfTsKKworY2xhc3MgTW9ja0xh
eWVyVHJlZUhvc3RJbXBsUHJveHkgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxNb2NrTGF5ZXJUcmVlSG9zdEltcGxQcm94
eT4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdCogaG9zdCwgQ0NMYXllclRyZWVIb3N0VGVzdCogdGVz
dCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgTW9ja0xheWVyVHJlZUhvc3RJ
bXBsUHJveHkoaG9zdCwgdGVzdCkpOworICAgIH0KKworICAgIFBhc3NPd25QdHI8Q0NMYXllclRy
ZWVIb3N0SW1wbD4gY3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIE1vY2tMYXllclRyZWVIb3N0SW1wbDo6Y3JlYXRlKHRoaXMsIG1fdGVzdCk7CisgICAgfQor
Citwcml2YXRlOgorICAgIE1vY2tMYXllclRyZWVIb3N0SW1wbFByb3h5KENDTGF5ZXJUcmVlSG9z
dCogaG9zdCwgQ0NMYXllclRyZWVIb3N0VGVzdCogdGVzdCkKKyAgICAgICAgOiBDQ0xheWVyVHJl
ZUhvc3RJbXBsUHJveHkoaG9zdCkKKyAgICAgICAgLCBtX3Rlc3QodGVzdCkgeyB9CisKKyAgICBD
Q0xheWVyVHJlZUhvc3RUZXN0KiBtX3Rlc3Q7Cit9OworCitjbGFzcyBNb2NrTGF5ZXJUcmVlSG9z
dCA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3QgeworcHVibGljOgorICAgIE1vY2tMYXllclRyZWVI
b3N0KENDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xpZW50LCBDQ0xheWVyVHJlZUhvc3RUZXN0KiB0
ZXN0KQorICAgICAgICA6IENDTGF5ZXJUcmVlSG9zdChjbGllbnQpCisgICAgICAgICwgbV90ZXN0
KHRlc3QpIHsgfQorCisgICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eT4gY3JlYXRlTGF5ZXJUcmVlSG9zdEltcGxQcm94eSgpCisgICAgeworICAgICAgICBPd25Q
dHI8Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5PiBwcm94eSA9IE1vY2tMYXllclRyZWVIb3N0SW1w
bFByb3h5OjpjcmVhdGUodGhpcywgbV90ZXN0KTsKKyAgICAgICAgcHJveHktPnN0YXJ0KCk7Cisg
ICAgICAgIHJldHVybiBwcm94eTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlTGF5
ZXJzKCkKKyAgICB7CisgICAgICAgIG1fdGVzdC0+dXBkYXRlTGF5ZXJzKHRoaXMpOworICAgIH0K
KworICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI+IGNyZWF0
ZUxheWVyVHJlZUhvc3RDb21taXR0ZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE1vY2tMYXll
clRyZWVIb3N0Q29tbWl0dGVyOjpjcmVhdGUobV90ZXN0KTsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgYmVnaW5Db21taXQoKQorICAgIHsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0OjpiZWdp
bkNvbW1pdCgpOworICAgICAgICBtX3Rlc3QtPmJlZ2luQ29tbWl0T25NYWluVGhyZWFkKHRoaXMp
OworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBjb21taXRDb21wbGV0ZSgpCisgICAgeworICAg
ICAgICBtX3Rlc3QtPmNvbW1pdENvbXBsZXRlT25NYWluVGhyZWFkKHRoaXMpOworICAgICAgICBD
Q0xheWVyVHJlZUhvc3Q6OmNvbW1pdENvbXBsZXRlKCk7CisgICAgfQorCitwcml2YXRlOgorICAg
IENDTGF5ZXJUcmVlSG9zdFRlc3QqIG1fdGVzdDsKK307CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0
VGVzdDo6ZG9CZWdpblRlc3QoKQoreworICAgIEFTU0VSVCghbV9ydW5uaW5nKTsKKyAgICBtX3J1
bm5pbmcgPSB0cnVlOworICAgIG1fY2xpZW50ID0gYWRvcHRQdHIobmV3IE1vY2tMYXllclRyZWVI
b3N0Q2xpZW50KHRoaXMpKTsKKyAgICBtX2xheWVyVHJlZUhvc3QgPSBhZG9wdFJlZihuZXcgTW9j
a0xheWVyVHJlZUhvc3QobV9jbGllbnQuZ2V0KCksIHRoaXMpKTsKKyAgICBtX2xheWVyVHJlZUhv
c3QtPmluaXQoKTsKKyAgICBtX2JlZ2lubmluZyA9IHRydWU7CisgICAgYmVnaW5UZXN0KCk7Cisg
ICAgbV9iZWdpbm5pbmcgPSBmYWxzZTsKKyAgICBpZiAobV9lbmRXaGVuQmVnaW5SZXR1cm5zKQor
ICAgICAgICBvbkVuZFRlc3Qoc3RhdGljX2Nhc3Q8dm9pZCo+KHRoaXMpKTsKK30KKwordm9pZCBD
Q0xheWVyVHJlZUhvc3RUZXN0OjplbmRUZXN0KCkKK3sKKyAgICAvLyBJZiB3ZSBhcmUgY2FsbGVk
IGZyb20gdGhlIENDVGhyZWFkLCByZS1jYWxsIGVuZFRlc3Qgb24gdGhlIG1haW4gdGhyZWFkLgor
ICAgIGlmICghaXNNYWluVGhyZWFkKCkpCisgICAgICAgIENDTWFpblRocmVhZDo6cG9zdFRhc2so
Y3JlYXRlTWFpblRocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdFRlc3Q6OmVuZFRlc3Qp
KTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gRm9yIHRoZSBjYXNlIHdoZXJlIHdlIGVuZFRlc3Qg
ZHVyaW5nIGJlZ2luVGVzdCgpLCBzZXQgYSBmbGFnIHRvIGluZGljYXRlIHRoYXQKKyAgICAgICAg
Ly8gdGhlIHRlc3Qgc2hvdWxkIGVuZCB0aGUgc2Vjb25kIGJlZ2luVGVzdCByZWdhaW5zIGNvbnRy
b2wuCisgICAgICAgIGlmIChtX2JlZ2lubmluZykKKyAgICAgICAgICAgIG1fZW5kV2hlbkJlZ2lu
UmV0dXJucyA9IHRydWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG9uRW5kVGVzdChzdGF0
aWNfY2FzdDx2b2lkKj4odGhpcykpOworICAgIH0KK30KKworLy8gU2hvcnRsaXZlZCBsYXllclRy
ZWVIb3N0cyBzaG91bGRuJ3QgZGllLgorY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2
ZWQxIDogcHVibGljIENDTGF5ZXJUcmVlSG9zdFRlc3QgeworcHVibGljOgorICAgIENDTGF5ZXJU
cmVlSG9zdFRlc3RTaG9ydGxpdmVkMSgpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGJlZ2luVGVz
dCgpCisgICAgeworICAgICAgICBlbmRUZXN0KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lk
IGFmdGVyVGVzdCgpCisgICAgeworICAgIH0KK307CitURVNUX0YoQ0NMYXllclRyZWVIb3N0VGVz
dFNob3J0bGl2ZWQxLCBydW4pCit7CisgICAgcnVuVGVzdCgpOworfQorCisvLyBTaG9ydGxpdmVk
IGxheWVyVHJlZUhvc3RzIHNob3VsZG4ndCBkaWUgd2l0aCBhIGNvbW1pdCBpbiBmbGlnaHQuCitj
bGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDIgOiBwdWJsaWMgQ0NMYXllclRyZWVI
b3N0VGVzdCB7CitwdWJsaWM6CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQyKCkg
eyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkKKyAgICB7CisgICAgICAgIG1fbGF5
ZXJUcmVlSG9zdC0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICAgICAgZW5kVGVzdCgp
OworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhZnRlclRlc3QoKQorICAgIHsKKyAgICB9Cit9
OworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RTaG9ydGxpdmVkMiwgcnVuKQoreworICAgIHJ1
blRlc3QoKTsKK30KKworLy8gU2hvcnRsaXZlZCBsYXllclRyZWVIb3N0cyBzaG91bGRuJ3QgZGll
IHdpdGggYSByZWRyYXcgaW4gZmxpZ2h0LgorY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdFNob3J0
bGl2ZWQzIDogcHVibGljIENDTGF5ZXJUcmVlSG9zdFRlc3QgeworcHVibGljOgorICAgIENDTGF5
ZXJUcmVlSG9zdFRlc3RTaG9ydGxpdmVkMygpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGJlZ2lu
VGVzdCgpCisgICAgeworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldE5lZWRzUmVkcmF3KCk7
CisgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0
KCkKKyAgICB7CisgICAgfQorfTsKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZl
ZDMsIHJ1bikKK3sKKyAgICBydW5UZXN0KCk7Cit9CisKKy8vIENvbnN0YW50bHkgcmVkcmF3aW5n
IGxheWVyVHJlZUhvc3RzIHNob3VsZG4ndCBkaWUgd2hlbiB0aGV5IGNvbW1pdAorY2xhc3MgQ0NM
YXllclRyZWVIb3N0VGVzdENvbW1pdGluZ1dpdGhDb250aW51b3VzUmVkcmF3IDogcHVibGljIEND
TGF5ZXJUcmVlSG9zdFRlc3QgeworcHVibGljOgorICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RDb21t
aXRpbmdXaXRoQ29udGludW91c1JlZHJhdygpCisgICAgICAgIDogbV9udW1Db21wbGV0ZUNvbW1p
dHMoMCkKKyAgICAgICAgLCBtX251bURyYXdzKDApCisgICAgeworICAgIH0KKworICAgIHZpcnR1
YWwgdm9pZCBiZWdpblRlc3QoKQorICAgIHsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRO
ZWVkc0NvbW1pdEFuZFJlZHJhdygpOworICAgICAgICBlbmRUZXN0KCk7CisgICAgfQorCisgICAg
dmlydHVhbCB2b2lkIGNvbW1pdENvbXBsZXRlT25DQ1RocmVhZChNb2NrTGF5ZXJUcmVlSG9zdElt
cGwqIGxheWVyVHJlZUhvc3RJbXBsKQorICAgIHsKKyAgICAgICAgbV9udW1Db21wbGV0ZUNvbW1p
dHMrKzsKKyAgICAgICAgaWYgKG1fbnVtQ29tcGxldGVDb21taXRzID09IDIpCisgICAgICAgICAg
ICBlbmRUZXN0KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNBbmRQcmVz
ZW50T25DQ1RocmVhZChNb2NrTGF5ZXJUcmVlSG9zdEltcGwqIGxheWVyVHJlZUhvc3RJbXBsKQor
ICAgIHsKKyAgICAgICAgaWYgKG1fbnVtRHJhd3MgPT0gMSkKKyAgICAgICAgICAgIGxheWVyVHJl
ZUhvc3RJbXBsLT5zZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOworICAgICAgICBtX251bURyYXdz
Kys7CisgICAgICAgIGxheWVyVHJlZUhvc3RJbXBsLT5zZXROZWVkc1JlZHJhdygpOworICAgIH0K
KworICAgIHZpcnR1YWwgdm9pZCBhZnRlclRlc3QoKQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgaW50IG1fbnVtQ29tcGxldGVDb21taXRzOworICAgIGludCBtX251bURyYXdzOworfTsK
K1RFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0Q29tbWl0aW5nV2l0aENvbnRpbnVvdXNSZWRyYXcs
IHJ1bikKK3sKKyAgICBydW5UZXN0KCk7Cit9CisKKy8vIFR3byBzZXROZWVkc0NvbW1pdHMgaW4g
YSByb3cgc2hvdWxkIGxlYWQgdG8gYXQgbGVhc3QgMSBjb21taXQgYW5kIGF0IGxlYXN0IDEKKy8v
IGRyYXcgd2l0aCBmcmFtZSAwLgorY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzQ29t
bWl0MSA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0IHsKK3B1YmxpYzoKKyAgICBDQ0xheWVy
VHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQxKCkKKyAgICAgICAgOiBtX251bUNvbW1pdHMoMCkK
KyAgICAgICAgLCBtX251bURyYXdzKDApCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9p
ZCBiZWdpblRlc3QoKQorICAgIHsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXROZWVkc0Nv
bW1pdEFuZFJlZHJhdygpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldE5lZWRzQ29tbWl0
QW5kUmVkcmF3KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNBbmRQcmVz
ZW50T25DQ1RocmVhZChNb2NrTGF5ZXJUcmVlSG9zdEltcGwqIGxheWVyVHJlZUhvc3RJbXBsKQor
ICAgIHsKKyAgICAgICAgbV9udW1EcmF3cysrOworICAgICAgICBpZiAoIWxheWVyVHJlZUhvc3RJ
bXBsLT5zb3VyY2VGcmFtZU51bWJlcigpKQorICAgICAgICAgICAgZW5kVGVzdCgpOworICAgIH0K
KworICAgIHZpcnR1YWwgdm9pZCBjb21taXRPbkNDVGhyZWFkKE1vY2tMYXllclRyZWVIb3N0KiBs
YXllclRyZWVIb3N0LCBNb2NrTGF5ZXJUcmVlSG9zdEltcGwqIGltcGwpCisgICAgeworICAgICAg
ICBtX251bUNvbW1pdHMrKzsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkK
KyAgICB7CisgICAgICAgIEVYUEVDVF9HRSgxLCBtX251bUNvbW1pdHMpOworICAgICAgICBFWFBF
Q1RfR0UoMSwgbV9udW1EcmF3cyk7CisgICAgfQorCitwcml2YXRlOgorICAgIGludCBtX251bUNv
bW1pdHM7CisgICAgaW50IG1fbnVtRHJhd3M7Cit9OworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRl
c3RTZXROZWVkc0NvbW1pdDEsIHJ1bikKK3sKKyAgICBydW5UZXN0KCk7Cit9CisKKy8vIEEgc2V0
TmVlZHNDb21taXQgc2hvdWxkIGxlYWQgdG8gMSBjb21taXQuIElzc3VpbmcgYSBzZWNvbmQgY29t
bWl0IGFmdGVyIHRoYXQKKy8vIGZpcnN0IGNvbW1pdHRlZCBmcmFtZSBkcmF3cyBzaG91bGQgbGVh
ZCB0byBhbm90aGVyIGNvbW1pdC4KK2NsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc0Nv
bW1pdDIgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdCB7CitwdWJsaWM6CisgICAgQ0NMYXll
clRyZWVIb3N0VGVzdFNldE5lZWRzQ29tbWl0MigpCisgICAgICAgIDogbV9udW1Db21taXRzKDAp
CisgICAgICAgICwgbV9udW1EcmF3cygwKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgYmVnaW5UZXN0KCkKKyAgICB7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0TmVlZHND
b21taXRBbmRSZWRyYXcoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVyc0Fu
ZFByZXNlbnRPbkNDVGhyZWFkKE1vY2tMYXllclRyZWVIb3N0SW1wbCogbGF5ZXJUcmVlSG9zdElt
cGwpCisgICAgeworICAgICAgICBpZiAoIWxheWVyVHJlZUhvc3RJbXBsLT5zb3VyY2VGcmFtZU51
bWJlcigpKQorICAgICAgICAgICAgbGF5ZXJUcmVlSG9zdEltcGwtPnNldE5lZWRzQ29tbWl0QW5k
UmVkcmF3KCk7CisgICAgICAgIGVsc2UgaWYgKGxheWVyVHJlZUhvc3RJbXBsLT5zb3VyY2VGcmFt
ZU51bWJlcigpID09IDEpCisgICAgICAgICAgICBlbmRUZXN0KCk7CisgICAgfQorCisgICAgdmly
dHVhbCB2b2lkIGNvbW1pdE9uQ0NUaHJlYWQoTW9ja0xheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhv
c3QsIE1vY2tMYXllclRyZWVIb3N0SW1wbCogaW1wbCkKKyAgICB7CisgICAgICAgIG1fbnVtQ29t
bWl0cysrOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhZnRlclRlc3QoKQorICAgIHsKKyAg
ICAgICAgRVhQRUNUX0VRKDIsIG1fbnVtQ29tbWl0cyk7CisgICAgICAgIEVYUEVDVF9HRSgyLCBt
X251bURyYXdzKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgaW50IG1fbnVtQ29tbWl0czsKKyAg
ICBpbnQgbV9udW1EcmF3czsKK307CitURVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRz
Q29tbWl0MiwgcnVuKQoreworICAgIHJ1blRlc3QoKTsKK30KKworLy8gMSBzZXROZWVkc1JlZHJh
dyBzaG91bGQgbGVhZCB0byBhdCBsZWFzdCAxIGRyYXcgYnV0IG5vIGNvbW1pdC4KK2NsYXNzIEND
TGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc1JlZHJhdyA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RU
ZXN0IHsKK3B1YmxpYzoKKyAgICBDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNSZWRyYXcoKQor
ICAgICAgICA6IG1fbnVtQ29tbWl0cygwKQorICAgICAgICAsIG1fbnVtRHJhd3MoMCkKKyAgICB7
CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGJlZ2luVGVzdCgpCisgICAgeworICAgICAgICBt
X2xheWVyVHJlZUhvc3QtPnNldE5lZWRzUmVkcmF3KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIGRyYXdMYXllcnNBbmRQcmVzZW50T25DQ1RocmVhZChNb2NrTGF5ZXJUcmVlSG9zdEltcGwq
IGxheWVyVHJlZUhvc3QpCisgICAgeworICAgICAgICBFWFBFQ1RfRVEoLTEsIGxheWVyVHJlZUhv
c3QtPnNvdXJjZUZyYW1lTnVtYmVyKCkpOworICAgICAgICBFWFBFQ1RfRVEoMCwgbGF5ZXJUcmVl
SG9zdC0+ZnJhbWVOdW1iZXIoKSk7CisgICAgICAgIG1fbnVtRHJhd3MrKzsKKyAgICAgICAgZW5k
VGVzdCgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBjb21taXRPbkNDVGhyZWFkKE1vY2tM
YXllclRyZWVIb3N0KiBsYXllclRyZWVIb3N0LCBNb2NrTGF5ZXJUcmVlSG9zdEltcGwqIGltcGwp
CisgICAgeworICAgICAgICBtX251bUNvbW1pdHMrKzsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgYWZ0ZXJUZXN0KCkKKyAgICB7CisgICAgICAgIEVYUEVDVF9HRSgxLCBtX251bURyYXdzKTsK
KyAgICAgICAgRVhQRUNUX0VRKDAsIG1fbnVtQ29tbWl0cyk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIGludCBtX251bUNvbW1pdHM7CisgICAgaW50IG1fbnVtRHJhd3M7Cit9OworVEVTVF9GKEND
TGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc1JlZHJhdywgcnVuKQoreworICAgIHJ1blRlc3QoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmIC8vIFVTRShUSFJFQURFRF9DT01QT1NJVElO
RykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaHJlYWRUZXN0
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaHJlYWRUZXN0LmNwcAppbmRl
eCAwNGZiYTQ2NTMzZGI3NWRkNzNmNjhhYjdiN2IyZDYwMWU3Y2I0MDY3Li5mYWIzNTRlYzAwYzk3
MzNjYzI4NWExMmI5MDBjY2YwZjNlZTJhMzFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDVGhyZWFkVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ1RocmVhZFRlc3QuY3BwCkBAIC01MSw2ICs1MSw3IEBAIHB1YmxpYzoKIFRFU1Qo
Q0NUaHJlYWRUZXN0LCBwaW5nUG9uZ1VzaW5nQ29uZGl0aW9uKQogewogICAgIE93blB0cjxDQ1Ro
cmVhZD4gdGhyZWFkID0gQ0NUaHJlYWQ6OmNyZWF0ZSgpOworCiAgICAgUGluZ1BvbmdVc2luZ0Nv
bmRpdGlvbiB0YXJnZXQ7CiAgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKICAgICB0
aHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzaygmdGFyZ2V0LCAmUGluZ1BvbmdVc2lu
Z0NvbmRpdGlvbjo6cGluZywgJmNvbXBsZXRpb24pKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvUG9wdXBNZW51VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL1BvcHVwTWVudVRlc3QuY3BwCmluZGV4IDVhMTg3MDhkNzIxNmYyMzFjOGZlZGUx
NjZiMjM1OTBjOWI5ZGM5NjEuLjc5NWFjYjcwZGU1ZDM1Nzc0ZWQzNGU2NjZmNWU2NjhkNjE5OTM4
MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUG9wdXBNZW51VGVz
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Qb3B1cE1lbnVUZXN0LmNw
cApAQCAtMTI2LDYgKzEyNiw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSB7
IH0KICAgICB2aXJ0dWFsIFdlYlNpemUgc2l6ZSgpIHsgcmV0dXJuIFdlYlNpemUoMTAwLCAxMDAp
OyB9CiAgICAgdmlydHVhbCB2b2lkIHJlc2l6ZShjb25zdCBXZWJTaXplJikgeyB9CisgICAgdmly
dHVhbCB2b2lkIGFuaW1hdGUoZG91YmxlIGZyYW1lQmVnaW5UaW1lKSB7IH0KICAgICB2aXJ0dWFs
IHZvaWQgbGF5b3V0KCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFdlYkNhbnZhcyosIGNv
bnN0IFdlYlJlY3QmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgdGhlbWVDaGFuZ2VkKCkgeyB9CmRp
ZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAKaW5kZXggYWU0
YTFiMWNjOWU4ZmI5Nzg5NjZkMTZmZmVkNDJmNTlmYmFjNmNmYi4uN2M5NjFkMDQ1ZWJmYTFmMTcy
OTZjMTA1MGE1YTk2NDY0NzIzZGY1MyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1dlYlZpZXdIb3N0LmNwcApAQCAtMTQ4Miw3ICsxNDgyLDcgQEAgdm9pZCBXZWJWaWV3SG9z
dDo6cGFpbnRSZWN0KGNvbnN0IFdlYlJlY3QmIHJlY3QpCiB2b2lkIFdlYlZpZXdIb3N0OjpwYWlu
dEludmFsaWRhdGVkUmVnaW9uKCkKIHsKICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJB
TUUpCi0gICAgd2ViV2lkZ2V0KCktPmFuaW1hdGUoKTsKKyAgICB3ZWJXaWRnZXQoKS0+YW5pbWF0
ZSgwLjApOwogI2VuZGlmCiAgICAgd2ViV2lkZ2V0KCktPmxheW91dCgpOwogICAgIFdlYlNpemUg
d2lkZ2V0U2l6ZSA9IHdlYldpZGdldCgpLT5zaXplKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90587</attachid>
            <date>2011-04-21 13:23:21 -0700</date>
            <delta_ts>2011-04-21 13:57:44 -0700</delta_ts>
            <desc>Make builders happy</desc>
            <filename>bug-58408-20110421132320.patch</filename>
            <type>text/plain</type>
            <size>86636</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODQyMDgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyM2FjNDdhODIxMTY3MmFl
ZGM4YTUxOTA2YzA2YzQ0NWJiOTYzODUxLi4zOWU5ZDdjYjkwMmMwMTgwNmFmYmM3ZjcxNTA4ZGUw
OGU4MTBhNGFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODIgQEAKKzIwMTEtMDQtMTggIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50IENDTGF5ZXJUcmVlSG9zdCBh
bmQgQ0NMYXllclRyZWVIb3N0SW1wbCBwb3J0aW9ucyBvZiB0aHJlYWRlZCBjb21wb3NpdG9yCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODQwOAorCisg
ICAgICAgIENyZWF0ZSBDQ0xheWVyVHJlZUhvc3QgYW5kIENDTGF5ZXJUcmVlSG9zdEltcGwsIHdo
aWNoIGFyZSB0aGUgbWFpbgorICAgICAgICB0aHJlYWQgYW5kIGNvbXBvc2l0b3IgdGhyZWFkIGhh
bHZlcyBvZiBhIGNvbXBvc2l0ZWQgdmlldy4gQ29tbXVuaWNhdGlvbgorICAgICAgICBiZXR3ZWVu
IHRoZSB0d28gaXMgYmFzZWQgb24gdGhlIGRlc2lnbiB1c2VkIGluIEZpbGVTdHJlYW1Qcm94eS4K
KworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bUNvbW1pdHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyUmVuZGVyZXJDaHJvbWl1bUNvbW1pdHRlcjo6Y29tbWl0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bUNvbW1pdHRlcjo6TGF5ZXJSZW5kZXJlckNocm9taXVt
Q29tbWl0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6YmVn
aW5Db21taXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb21t
aXRDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBs
OjpMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJDaHJvbWl1bUltcGw6OmRyYXdMYXllcnNBbmRQcmVzZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bUltcGw6OmRyYXdMYXllcnNPbk1haW5UaHJlYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbFByb3h5OjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbFByb3h5OjpjcmVh
dGVMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW1JbXBsUHJveHk6OkxheWVyUmVuZGVyZXJDaHJvbWl1bUltcGxQcm94eSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZUxheWVyVHJlZUhvc3RJbXBs
UHJveHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
SGVhZHNVcERpc3BsYXkuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDSGVhZHNVcERpc3BsYXk6OmN1
cnJlbnRGcmFtZU51bWJlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuY3BwLgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0OjpDQ0xheWVyVHJlZUhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0Ojppbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6
fkNDTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNv
bW1pdENvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0
ZUFuZExheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI6
OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnNldE5lZWRzQ29t
bWl0QW5kUmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2V0TmVl
ZHNSZWRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmguCisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3Q6OmZyYW1lTnVtYmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6On5DQ0xheWVyVHJlZUhvc3RJbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmJlZ2luQ29tbWl0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbW1pdENvbXBsZXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNSZWRyYXcpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oLgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0SW1wbENsaWVudDo6fkNDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6ZnJhbWVOdW1iZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c291cmNlRnJhbWVOdW1iZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0U291cmNlRnJhbWVOdW1iZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5
OjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5OjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHk6On5DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVkcmF3
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c3RvcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnBvc3REcmF3TGF5ZXJz
VGFza09uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFBy
b3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNNYWluVGhyZWFkKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNDQ1RocmVhZCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmNvbW1pdE9uQ0NUaHJl
YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpkcmF3TGF5
ZXJzT25DQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmluaXRJbXBsT25DQ1Ro
cmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmxheWVy
VHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6Omhvc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNDVGhyZWFkOjpydW5Mb29wKToKKwogMjAxMS0wNC0xOCAgSmVzc2llIEJlcmxpbiAgPGpiZXJs
aW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFN0ZXZlIEZhbGtlbmJ1cmcuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKaW5kZXggYThkN2IyZDNmMjY5YjE4OGNhMjc1OTFkZGNjNjQ5ZmM5NDc5Njhj
Mi4uNmMyM2MxM2EyMjE2MTY0YmU2NDdiMzcwNWRjY2Y1ZTU0NGYxNjc2MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQpAQCAtNDA3MSw2ICs0MDcxLDE0IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5o
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RDb21taXR0ZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIuaCcsCisgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwu
aCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZC5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZC5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWRUYXNrLmgnLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggMjdhNjdlOTAyODk2NTY3
YzM0OTNhZmY0OTlhNzQ2OTY1NWU3MDNiZi4uZjU1NjM3MmI2YWNhODU4MDY4ZjQ0M2ZjY2UxMGMy
NzA1MzVkN2I3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC00
Nyw2ICs0Nyw4IEBACiAjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgogI2luY2x1ZGUgIldlYkdMTGF5
ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5oIgorI2luY2x1ZGUgImNjL0NDTWFpblRocmVhZFRhc2suaCIK
ICNpZiBVU0UoU0tJQSkKICNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKICNpbmNsdWRlICJQ
bGF0Zm9ybUNvbnRleHRTa2lhLmgiCkBAIC05MywyMyArOTUsMjggQEAgYm9vbCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmNvbXBhcmVMYXllclooY29uc3QgUmVmUHRyPENDTGF5ZXJJbXBsPiYgYSwg
Y29uc3QgUmUKICAgICByZXR1cm4gYS0+ZHJhd0RlcHRoKCkgPCBiLT5kcmF3RGVwdGgoKTsKIH0K
IAotUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6Y3JlYXRlKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsIFBhc3NPd25Q
dHI8VGlsZVBhaW50SW50ZXJmYWNlPiBjb250ZW50UGFpbnQpCitQYXNzUmVmUHRyPExheWVyUmVu
ZGVyZXJDaHJvbWl1bT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUoQ0NMYXllclRyZWVI
b3N0Q2xpZW50KiBjbGllbnQsIFBhc3NPd25QdHI8VGlsZVBhaW50SW50ZXJmYWNlPiBjb250ZW50
UGFpbnQpCiB7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gY2xpZW50
LT5jcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCk7CiAgICAgaWYgKCFjb250ZXh0KQogICAg
ICAgICByZXR1cm4gMDsKIAotICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVy
UmVuZGVyZXIoYWRvcHRSZWYobmV3IExheWVyUmVuZGVyZXJDaHJvbWl1bShjb250ZXh0LCBjb250
ZW50UGFpbnQpKSk7CisgICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbGF5ZXJSZW5k
ZXJlcihhZG9wdFJlZihuZXcgTGF5ZXJSZW5kZXJlckNocm9taXVtKGNsaWVudCwgY29udGV4dCwg
Y29udGVudFBhaW50KSkpOworICAgIGxheWVyUmVuZGVyZXItPmluaXQoKTsKICAgICBpZiAoIWxh
eWVyUmVuZGVyZXItPmhhcmR3YXJlQ29tcG9zaXRpbmcoKSkKICAgICAgICAgcmV0dXJuIDA7CiAK
ICAgICByZXR1cm4gbGF5ZXJSZW5kZXJlci5yZWxlYXNlKCk7CiB9CiAKLUxheWVyUmVuZGVyZXJD
aHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVtKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+IGNvbnRleHQsCitMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1
bShDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRl
eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzT3du
UHRyPFRpbGVQYWludEludGVyZmFjZT4gY29udGVudFBhaW50KQotICAgIDogbV92aWV3cG9ydFNj
cm9sbFBvc2l0aW9uKEludFBvaW50KC0xLCAtMSkpCisgICAgOiBDQ0xheWVyVHJlZUhvc3QoY2xp
ZW50KQorICAgICwgbV92aWV3cG9ydFNjcm9sbFBvc2l0aW9uKEludFBvaW50KC0xLCAtMSkpCiAg
ICAgLCBtX3Jvb3RMYXllcigwKQogICAgICwgbV9yb290TGF5ZXJDb250ZW50UGFpbnQoY29udGVu
dFBhaW50KQorICAgICwgbV9jb21taXR0aW5nKGZhbHNlKQogICAgICwgbV9jdXJyZW50U2hhZGVy
KDApCiAgICAgLCBtX2N1cnJlbnRSZW5kZXJTdXJmYWNlKDApCiAgICAgLCBtX29mZnNjcmVlbkZy
YW1lYnVmZmVySWQoMCkKQEAgLTE4OCwxMiArMTk1LDExIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpzZXRWaWV3cG9ydChjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50
UmVjCiAgICAgICAgIG1fY3VycmVudFJlbmRlclN1cmZhY2UgPSAwOwogICAgICAgICBtX3Jvb3RM
YXllckNvbnRlbnRUaWxlci0+aW52YWxpZGF0ZUVudGlyZUxheWVyKCk7CiAgICAgfQorICAgIHNl
dE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
Ojp1cGRhdGVBbmREcmF3TGF5ZXJzKCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRh
dGVMYXllcnMoKQogewotICAgIEFTU0VSVChtX2hhcmR3YXJlQ29tcG9zaXRpbmcpOwotCiAgICAg
aWYgKCFtX3Jvb3RMYXllcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMDQsMTAgKzIxMCwxNCBA
QCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQW5kRHJhd0xheWVycygpCiAgICAg
aWYgKCFtX3Jvb3RMYXllcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgTGF5ZXJMaXN0IHJlbmRl
clN1cmZhY2VMYXllckxpc3Q7Ci0KLSAgICB1cGRhdGVMYXllcnMocmVuZGVyU3VyZmFjZUxheWVy
TGlzdCk7CisgICAgbV9jb21wdXRlZFJlbmRlclN1cmZhY2VMYXllckxpc3QgPSBhZG9wdFB0cihu
ZXcgTGF5ZXJMaXN0KCkpOworICAgIHVwZGF0ZUxheWVycygqbV9jb21wdXRlZFJlbmRlclN1cmZh
Y2VMYXllckxpc3QpOworfQogCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVy
cygpCit7CisgICAgQVNTRVJUKG1faGFyZHdhcmVDb21wb3NpdGluZyk7CisgICAgQVNTRVJUKG1f
Y29tcHV0ZWRSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKICAgICAvLyBCZWZvcmUgZHJhd0xheWVy
czoKICAgICBpZiAoaGFyZHdhcmVDb21wb3NpdGluZygpICYmIG1fY29udGV4dFN1cHBvcnRzTGF0
Y2gpIHsKICAgICAgICAgLy8gRklYTUU6IFRoZSBtdWx0aXRocmVhZGVkIGNvbXBvc2l0b3IgY2Fz
ZSB3aWxsIG5vdCB3b3JrIGFzIGxvbmcgYXMKQEAgLTIzMyw3ICsyNDMsNyBAQCB2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQW5kRHJhd0xheWVycygpCiAgICAgICAgIG1fY2hpbGRD
b250ZXh0c1dlcmVDb3BpZWQgPSBmYWxzZTsKICAgICB9CiAKLSAgICBkcmF3TGF5ZXJzKHJlbmRl
clN1cmZhY2VMYXllckxpc3QpOworICAgIGRyYXdMYXllcnMoKm1fY29tcHV0ZWRSZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0KTsKIAogICAgIC8vIEFmdGVyIGRyYXdMYXllcnM6CiAgICAgaWYgKGhhcmR3
YXJlQ29tcG9zaXRpbmcoKSAmJiBtX2NvbnRleHRTdXBwb3J0c0xhdGNoKSB7CkBAIC0xMDkxLDYg
KzExMDEsNzIgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmR1bXBSZW5kZXJTdXJmYWNl
cyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCwgTGF5ZXIKICAgICAgICAgZHVtcFJlbmRlclN1
cmZhY2VzKHRzLCBpbmRlbnQsIGxheWVyLT5nZXRTdWJsYXllcnMoKVtpXS5nZXQoKSk7CiB9CiAK
K2NsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bUltcGwgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0
SW1wbCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8TGF5ZXJSZW5kZXJlckNocm9t
aXVtSW1wbD4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqIGNsaWVudCwgTGF5ZXJS
ZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsKGNsaWVudCwgbGF5ZXJSZW5kZXJl
cikpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGF5ZXJzQW5kUHJlc2VudCgpCisg
ICAgeworICAgICAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOworICAgICAgICBib29s
IGNvbnRleHRMb3N0OworICAgICAgICBDQ01haW5UaHJlYWQ6OnBvc3RUYXNrKGNyZWF0ZU1haW5U
aHJlYWRUYXNrKHRoaXMsICZMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsOjpkcmF3TGF5ZXJzT25N
YWluVGhyZWFkLCAmY29tcGxldGlvbiwgJmNvbnRleHRMb3N0KSk7CisgICAgICAgIGNvbXBsZXRp
b24ud2FpdCgpOworCisgICAgICAgIC8vIEZJWE1FOiBTZW5kIHRoZSAiVXBkYXRlUmVjdCIgbWVz
c2FnZSB1cCB0byB0aGUgUmVuZGVyV2lkZ2V0IFtvciBtb3ZlcGx1Z2luIGVxdWl2YWxlbnRzLi4u
XQorCisgICAgICAgIC8vIEZJWE1FOiBoYW5kbGUgY29udGV4dCBsb3N0CisgICAgICAgIGlmIChj
b250ZXh0TG9zdCkKKyAgICAgICAgICAgIEZBVEFMKCJMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBs
IGRvZXMgbm90IGhhbmRsZSBjb250ZXh0IGxvc3QgeWV0LiIpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQq
IGNsaWVudCwgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQorICAgICAgICA6
IENDTGF5ZXJUcmVlSG9zdEltcGwoY2xpZW50KQorICAgICAgICAsIG1fbGF5ZXJSZW5kZXJlcihs
YXllclJlbmRlcmVyKSB7IH0KKworICAgIHZvaWQgZHJhd0xheWVyc09uTWFpblRocmVhZChDQ0Nv
bXBsZXRpb25FdmVudCogY29tcGxldGlvbiwgYm9vbCogY29udGV4dExvc3QpCisgICAgeworICAg
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+
ZHJhd0xheWVycygpOworICAgICAgICBtX2xheWVyUmVuZGVyZXItPnByZXNlbnQoKTsKKworICAg
ICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IG1fbGF5ZXJSZW5kZXJlci0+Y29udGV4
dCgpOworICAgICAgICAqY29udGV4dExvc3QgPSBjb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdl
dEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I7
CisKKyAgICAgICAgY29tcGxldGlvbi0+c2lnbmFsKCk7CisgICAgfQorCisgICAgTGF5ZXJSZW5k
ZXJlckNocm9taXVtKiBtX2xheWVyUmVuZGVyZXI7Cit9OworCitjbGFzcyBMYXllclJlbmRlcmVy
Q2hyb21pdW1JbXBsUHJveHkgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsUHJv
eHk+IGNyZWF0ZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IExheWVyUmVuZGVyZXJDaHJvbWl1bUltcGxQcm94
eShsYXllclJlbmRlcmVyKSk7CisgICAgfQorCisgICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5
ZXJUcmVlSG9zdEltcGw+IGNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsOjpjcmVhdGUodGhpcywgc3RhdGljX2Nh
c3Q8TGF5ZXJSZW5kZXJlckNocm9taXVtKj4oaG9zdCgpKSk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bUltcGxQcm94eShMYXllclJlbmRlcmVyQ2hyb21pdW0q
IGxheWVyUmVuZGVyZXIpCisgICAgICAgIDogQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5KGxheWVy
UmVuZGVyZXIpIHsgfQorfTsKKworUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk+
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlTGF5ZXJUcmVlSG9zdEltcGxQcm94eSgpCit7
CisgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eT4gcHJveHkgPSBMYXllclJlbmRl
cmVyQ2hyb21pdW1JbXBsUHJveHk6OmNyZWF0ZSh0aGlzKTsKKyAgICBwcm94eS0+c3RhcnQoKTsK
KyAgICByZXR1cm4gcHJveHkucmVsZWFzZSgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IDgxM2ViNDZlMGJhYTM2NTEzZDYwNzhkYTI1YTQyNWQ0
NDVhZWJlZTkuLjZjOTJjMmE5ODc1ZjZkODJlNjAwNTM3ZGVmOGI3MThiODI0MmNlOTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC00MywxMyArNDMsMTMgQEAKICNpbmNs
dWRlICJWaWRlb0xheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJjYy9DQ0NhbnZhc0xheWVySW1w
bC5oIgogI2luY2x1ZGUgImNjL0NDSGVhZHNVcERpc3BsYXkuaCIKKyNpbmNsdWRlICJjYy9DQ0xh
eWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlICJjYy9DQ1BsdWdpbkxheWVySW1wbC5oIgogI2luY2x1
ZGUgImNjL0NDVmlkZW9MYXllckltcGwuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogI2lmIFVTRShDRykKQEAgLTYxLDEzICs2MSwxNSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENDSGVhZHNVcERpc3BsYXk7CiBjbGFzcyBD
Q0xheWVySW1wbDsKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcjsKK2NsYXNzIENDTGF5
ZXJUcmVlSG9zdEltcGw7CiBjbGFzcyBHZW9tZXRyeUJpbmRpbmc7CiBjbGFzcyBHcmFwaGljc0Nv
bnRleHQzRDsKIAogLy8gQ2xhc3MgdGhhdCBoYW5kbGVzIGRyYXdpbmcgb2YgY29tcG9zaXRlZCBy
ZW5kZXIgbGF5ZXJzIHVzaW5nIEdMLgotY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtIDogcHVi
bGljIFJlZkNvdW50ZWQ8TGF5ZXJSZW5kZXJlckNocm9taXVtPiB7CitjbGFzcyBMYXllclJlbmRl
cmVyQ2hyb21pdW0gOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0IHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGNyZWF0ZShQYXNzUmVmUHRyPEdy
YXBoaWNzQ29udGV4dDNEPiwgUGFzc093blB0cjxUaWxlUGFpbnRJbnRlcmZhY2U+IGNvbnRlbnRQ
YWludCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBjcmVh
dGUoQ0NMYXllclRyZWVIb3N0Q2xpZW50KiwgUGFzc093blB0cjxUaWxlUGFpbnRJbnRlcmZhY2U+
IGNvbnRlbnRQYWludCk7CiAKICAgICB+TGF5ZXJSZW5kZXJlckNocm9taXVtKCk7CiAKQEAgLTc4
LDcgKzgwLDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0Vmlld3BvcnQoY29uc3QgSW50UmVjdCYg
dmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRQb2ludCYg
c2Nyb2xsUG9zaXRpb24pOwogCiAgICAgLy8gdXBkYXRlcyBhbmQgZHJhd3MgdGhlIGN1cnJlbnQg
bGF5ZXJzIG9udG8gdGhlIGJhY2tidWZmZXIKLSAgICB2b2lkIHVwZGF0ZUFuZERyYXdMYXllcnMo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlTGF5ZXJzKCk7CisgICAgdm9pZCBkcmF3TGF5ZXJz
KCk7CiAKICAgICAvLyB3YWl0cyBmb3IgcmVuZGVyaW5nIHRvIGZpbmlzaAogICAgIHZvaWQgZmlu
aXNoKCk7CkBAIC0xMzMsMTEgKzEzNiwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRDaGlsZENv
bnRleHQoR3JhcGhpY3NDb250ZXh0M0QqKTsKICAgICB2b2lkIHJlbW92ZUNoaWxkQ29udGV4dChH
cmFwaGljc0NvbnRleHQzRCopOwogCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBQYXNzT3duUHRy
PENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eT4gY3JlYXRlTGF5ZXJUcmVlSG9zdEltcGxQcm94eSgp
OworCiBwcml2YXRlOgogICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiBM
YXllckxpc3Q7CiAgICAgdHlwZWRlZiBIYXNoTWFwPEdyYXBoaWNzQ29udGV4dDNEKiwgaW50PiBD
aGlsZENvbnRleHRNYXA7CiAKLSAgICBleHBsaWNpdCBMYXllclJlbmRlcmVyQ2hyb21pdW0oUGFz
c1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4sIFBhc3NPd25QdHI8VGlsZVBhaW50SW50ZXJmYWNl
PiBjb250ZW50UGFpbnQpOworICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bShDQ0xheWVyVHJlZUhv
c3RDbGllbnQqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgUGFzc093blB0cjxUaWxl
UGFpbnRJbnRlcmZhY2U+IGNvbnRlbnRQYWludCk7CiAKICAgICB2b2lkIHVwZGF0ZUxheWVycyhM
YXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgIHZvaWQgdXBkYXRlUm9vdExh
eWVyQ29udGVudHMoKTsKQEAgLTE3OCw4ICsxODQsMTEgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8
VGlsZVBhaW50SW50ZXJmYWNlPiBtX3Jvb3RMYXllckNvbnRlbnRQYWludDsKICAgICBPd25QdHI8
TGF5ZXJUaWxlckNocm9taXVtPiBtX3Jvb3RMYXllckNvbnRlbnRUaWxlcjsKIAorICAgIGJvb2wg
bV9jb21taXR0aW5nOwogICAgIGJvb2wgbV9oYXJkd2FyZUNvbXBvc2l0aW5nOwogCisgICAgT3du
UHRyPExheWVyTGlzdD4gbV9jb21wdXRlZFJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisKICAgICB1
bnNpZ25lZCBtX2N1cnJlbnRTaGFkZXI7CiAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBtX2N1
cnJlbnRSZW5kZXJTdXJmYWNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwCmlu
ZGV4IGQyMmIwOTg2M2Y1NmRhZWY5NDQxNjljNmM4OWRkYzZmZmQ5MDczMTkuLmI4Y2E1YmMyYWU0
ZDM5ZjgwMDBjMjNiY2JkNDI1ZjdiYjA5ZGI1MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERp
c3BsYXkuY3BwCkBAIC0yMjMsNiArMjIzLDE4IEBAIHZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6b25Q
cmVzZW50KCkKICAgICBtX2N1cnJlbnRGcmFtZU51bWJlciArPSAxOwogfQogCit2b2lkIENDSGVh
ZHNVcERpc3BsYXk6OnNldFNob3dGUFNDb3VudGVyKGJvb2wgc2hvdykKK3sKKyAgICBtX3Nob3dG
UFNDb3VudGVyID0gc2hvdzsKKyAgICBtX2xheWVyUmVuZGVyZXItPnNldE5lZWRzUmVkcmF3KCk7
Cit9CisKK3ZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6c2V0U2hvd1BsYXRmb3JtTGF5ZXJUcmVlKGJv
b2wgc2hvdykKK3sKKyAgICBtX3Nob3dQbGF0Zm9ybUxheWVyVHJlZSA9IHNob3c7CisgICAgbV9s
YXllclJlbmRlcmVyLT5zZXROZWVkc1JlZHJhdygpOworfQorCiB9CiAKICNlbmRpZiAvLyBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmgKaW5k
ZXggMDlmMTk4YWMxNDVkNzc2MzRkMWIxZjU0MzlmNzEwZDg0NmUzN2UyOC4uNDdjMDY4YTU2ZTRi
ZmU5MTM0MDE1ZWUxMjc5Y2QzNjMyNTY3YTQ3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3Bs
YXkuaApAQCAtNDcsMTIgKzQ3LDE0IEBAIHB1YmxpYzoKIAogICAgIH5DQ0hlYWRzVXBEaXNwbGF5
KCk7CiAKKyAgICBpbnQgY3VycmVudEZyYW1lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9jdXJy
ZW50RnJhbWVOdW1iZXI7IH0KKwogICAgIHZvaWQgb25QcmVzZW50KCk7CiAKLSAgICB2b2lkIHNl
dFNob3dGUFNDb3VudGVyKGJvb2wgZW5hYmxlKSB7IG1fc2hvd0ZQU0NvdW50ZXIgPSBlbmFibGU7
IH0KKyAgICB2b2lkIHNldFNob3dGUFNDb3VudGVyKGJvb2wgZW5hYmxlKTsKICAgICBib29sIHNo
b3dGUFNDb3VudGVyKCkgY29uc3QgeyByZXR1cm4gbV9zaG93RlBTQ291bnRlcjsgfQogCi0gICAg
dm9pZCBzZXRTaG93UGxhdGZvcm1MYXllclRyZWUoYm9vbCBlbmFibGUpIHsgbV9zaG93UGxhdGZv
cm1MYXllclRyZWUgPSBlbmFibGU7IH0KKyAgICB2b2lkIHNldFNob3dQbGF0Zm9ybUxheWVyVHJl
ZShib29sIGVuYWJsZSk7CiAgICAgYm9vbCBzaG93UGxhdGZvcm1MYXllclRyZWUoKSBjb25zdCB7
IHJldHVybiBtX3Nob3dQbGF0Zm9ybUxheWVyVHJlZTsgfQogCiAgICAgYm9vbCBlbmFibGVkKCkg
Y29uc3QgeyByZXR1cm4gbV9zaG93UGxhdGZvcm1MYXllclRyZWUgfHwgbV9zaG93RlBTQ291bnRl
cjsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmFhOTJhY2Fl
MTVmZTdlNGFhNTNkZDc2ZWMwNjEwZjFlYzkwOWNkMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5j
cHAKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCisKKyNpbmNsdWRlICJUcmFjZUV2ZW50
LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmgiCisjaW5jbHVkZSAi
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ0NM
YXllclRyZWVIb3N0OjpDQ0xheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0Q2xpZW50KiBjbGll
bnQpCisgICAgOiBtX2NsaWVudChjbGllbnQpCisjaWZuZGVmIE5ERUJVRworICAgICwgbV9jb21t
aXR0aW5nKGZhbHNlKQorI2VuZGlmCisgICAgLCBtX2ZyYW1lTnVtYmVyKDApCit7Cit9CisKK3Zv
aWQgQ0NMYXllclRyZWVIb3N0Ojppbml0KCkKK3sKKyNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJ
TkcpCisgICAgbV9wcm94eSA9IGNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsUHJveHkoKTsKKyAgICBB
U1NFUlQobV9wcm94eS0+aXNTdGFydGVkKCkpOworICAgIG1fcHJveHktPnNldE5lZWRzQ29tbWl0
QW5kUmVkcmF3KCk7CisjZW5kaWYKK30KKworQ0NMYXllclRyZWVIb3N0Ojp+Q0NMYXllclRyZWVI
b3N0KCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojp+Q0NMYXllclRyZWVI
b3N0IiwgdGhpcywgMCk7CisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgIG1fcHJv
eHktPnN0b3AoKTsKKyAgICBtX3Byb3h5LmNsZWFyKCk7CisjZW5kaWYKK30KKwordm9pZCBDQ0xh
eWVyVHJlZUhvc3Q6OmJlZ2luQ29tbWl0KCkKK3sKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9jb21t
aXR0aW5nID0gdHJ1ZTsKKyNlbmRpZgorfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0
Q29tcGxldGUoKQoreworI2lmbmRlZiBOREVCVUcKKyAgICBtX2NvbW1pdHRpbmcgPSBmYWxzZTsK
KyNlbmRpZgorICAgIG1fZnJhbWVOdW1iZXIrKzsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3Q6
OmFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQoreworICAgIG1fY2xpZW50
LT5hbmltYXRlQW5kTGF5b3V0KGZyYW1lQmVnaW5UaW1lKTsKK30KKworUGFzc093blB0cjxDQ0xh
eWVyVHJlZUhvc3RDb21taXR0ZXI+IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlTGF5ZXJUcmVlSG9z
dENvbW1pdHRlcigpCit7CisgICAgcmV0dXJuIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcjo6Y3Jl
YXRlKCk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJh
dygpCit7CisgICAgbV9wcm94eS0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKK30KKwordm9p
ZCBDQ0xheWVyVHJlZUhvc3Q6OnNldE5lZWRzUmVkcmF3KCkKK3sKKyAgICBUUkFDRV9FVkVOVCgi
Q0NMYXllclRyZWVIb3N0OjpzZXROZWVkc1JlZHJhdyIsIHRoaXMsIDApOworICAgIG1fcHJveHkt
PnNldE5lZWRzUmVkcmF3KCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZjNhZWFjMDU0M2U2MDQwYjYxMWVmMDIxZGU3YmM5MDVlYWRmNWFlOQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgQ0NMYXllclRyZWVIb3N0X2gKKyNkZWZpbmUgQ0NMYXllclRyZWVIb3N0X2gKKworI2luY2x1
ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJU
cmVlSG9zdEltcGxQcm94eS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGw7CitjbGFzcyBDQ0xh
eWVyVHJlZUhvc3RJbXBsQ2xpZW50OworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CisKK2NsYXNz
IENDTGF5ZXJUcmVlSG9zdENsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGFuaW1h
dGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKSA9IDA7CisgICAgdmlydHVhbCBQYXNz
UmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCkg
PSAwOworfTsKKworY2xhc3MgQ0NMYXllclRyZWVIb3N0IDogcHVibGljIFJlZkNvdW50ZWQ8Q0NM
YXllclRyZWVIb3N0PiB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQ0NMYXllclRyZWVIb3N0KEND
TGF5ZXJUcmVlSG9zdENsaWVudCopOworICAgIHZvaWQgaW5pdCgpOworICAgIHZpcnR1YWwgfkND
TGF5ZXJUcmVlSG9zdCgpOworCisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVBbmRMYXlvdXQoZG91
YmxlIGZyYW1lQmVnaW5UaW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21taXQoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgY29tbWl0Q29tcGxldGUoKTsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8
Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyPiBjcmVhdGVMYXllclRyZWVIb3N0Q29tbWl0dGVyKCk7
CisKKyAgICBpbnQgZnJhbWVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lTnVtYmVyOyB9
CisKKyAgICB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgdm9pZCBzZXROZWVk
c1JlZHJhdygpOworCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUxheWVycygpID0gMDsKKworcHJv
dGVjdGVkOgorICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk+
IGNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsUHJveHkoKSA9IDA7CisKK3ByaXZhdGU6CisgICAgQ0NM
YXllclRyZWVIb3N0Q2xpZW50KiBtX2NsaWVudDsKKyNpZm5kZWYgTkRFQlVHCisgICAgYm9vbCBt
X2NvbW1pdHRpbmc7CisjZW5kaWYKKyAgICBpbnQgbV9mcmFtZU51bWJlcjsKKyAgICBPd25QdHI8
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5PiBtX3Byb3h5OworfTsKKworfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdENvbW1pdHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjcyZGQ3MTRiZTdlMzg0YzhlZjllMTA5MjRmZjVjZDIwNTg2OTliZWEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RDb21taXR0ZXIuY3BwCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRl
ci5oIgorCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCisjaW5jbHVkZSAiY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NPd25QdHI8
Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyPiBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI6OmNyZWF0
ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIo
KSk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyOjpjb21taXQoQ0NMYXllclRy
ZWVIb3N0KiBob3N0LCBDQ0xheWVyVHJlZUhvc3RJbXBsKiBob3N0SW1wbCkKK3sKKyAgICBob3N0
SW1wbC0+c2V0U291cmNlRnJhbWVOdW1iZXIoaG9zdC0+ZnJhbWVOdW1iZXIoKSk7Cit9CisKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
Y2JjYWRlYTY1NjM2ZDllNjAwYzdlYzc5MGJhZTE0NzcyODg2NWJiNQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdENvbW1pdHRlci5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyX2gKKyNkZWZpbmUgQ0NMYXllclRyZWVIb3N0Q29t
bWl0dGVyX2gKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NMYXllclRyZWVI
b3N0OworY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbDsKKworY2xhc3MgQ0NMYXllclRyZWVIb3N0
Q29tbWl0dGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ0xheWVyVHJlZUhvc3RDb21t
aXR0ZXIpOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdENv
bW1pdHRlcj4gY3JlYXRlKCk7CisgICAgdmlydHVhbCB2b2lkIGNvbW1pdChDQ0xheWVyVHJlZUhv
c3QqLCBDQ0xheWVyVHJlZUhvc3RJbXBsKik7CisKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBD
Q0xheWVyVHJlZUhvc3RDb21taXR0ZXIoKSB7IH0KK307CisKK30KKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEzYWEyYmEyMTBkYmRk
ZDE2YjljYTFhZDEyZTYxMTU1NThiMmFiMzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNw
cApAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCisKKyNpbmNsdWRlICJUcmFjZUV2
ZW50LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCisjaW5jbHVkZSAiY2MvQ0NU
aHJlYWRUYXNrLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworQ0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVIb3N0SW1wbChDQ0xh
eWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX3NvdXJjZUZyYW1lTnVtYmVy
KC0xKQorICAgICwgbV9mcmFtZU51bWJlcigwKQorICAgICwgbV9jbGllbnQoY2xpZW50KQorICAg
ICwgbV9jb21taXRQZW5kaW5nKGZhbHNlKQorICAgICwgbV9yZWRyYXdQZW5kaW5nKGZhbHNlKQor
eworfQorCitDQ0xheWVyVHJlZUhvc3RJbXBsOjp+Q0NMYXllclRyZWVIb3N0SW1wbCgpCit7Cisg
ICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6On5DQ0xheWVyVHJlZUhvc3RJbXBs
KCkiLCB0aGlzLCAwKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpiZWdpbkNvbW1p
dCgpCit7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29tbWl0Q29tcGxldGUoKQor
eworICAgIG1fY29tbWl0UGVuZGluZyA9IGZhbHNlOworICAgIHNldE5lZWRzUmVkcmF3KCk7Cit9
CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycygpCit7CisgICAgLy8gSWYg
YSBjb21taXQgaXMgcGVuZGluZywgZG8gbm90IGRyYXcuIFRoaXMgaXMgYSB0ZW1wb3JhcnkgcmVz
dHJpY3Rpb24gdGhhdAorICAgIC8vIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGRyYXdMYXllcnMgaXMg
Y3VycmVudGx5IGEgYmxvY2tpbmcgb3BlcmF0aW9uIG9uIHRoZSBtYWluIHRocmVhZC4KKyAgICBp
ZiAobV9jb21taXRQZW5kaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBUUkFDRV9FVkVOVCgi
Q0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycyIsIHRoaXMsIDApOworICAgIEFTU0VSVCht
X3JlZHJhd1BlbmRpbmcpOworICAgIG1fcmVkcmF3UGVuZGluZyA9IGZhbHNlOworCisgICAgewor
ICAgICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVyc0FuZFBy
ZXNlbnQiLCB0aGlzLCAwKTsKKyAgICAgICAgZHJhd0xheWVyc0FuZFByZXNlbnQoKTsKKyAgICB9
CisKKyAgICArK21fZnJhbWVOdW1iZXI7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6
c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdyIsIHRoaXMsIDApOworCisgICAgLy8g
RklYTUU6IG1vdmUgdGhlIHJlcXVlc3RGcmFtZUFuZENvbW1pdCBvdXQgZnJvbSBoZXJlIG9uY2Ug
d2UgYWRkIGZyYW1lcmF0ZSB0aHJvdHRsaW5nL2FuaW1hdGlvbgorICAgIGRvdWJsZSBmcmFtZUJl
Z2luVGltZSA9IGN1cnJlbnRUaW1lKCk7CisgICAgbV9jb21taXRQZW5kaW5nID0gdHJ1ZTsKKyAg
ICBtX2NsaWVudC0+cmVxdWVzdEZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZChmcmFtZUJlZ2luVGlt
ZSk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNSZWRyYXcoKQorewor
ICAgIGlmIChtX3JlZHJhd1BlbmRpbmcgfHwgbV9jb21taXRQZW5kaW5nKQorICAgICAgICByZXR1
cm47CisKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNSZWRy
YXciLCB0aGlzLCAwKTsKKyAgICBtX3JlZHJhd1BlbmRpbmcgPSB0cnVlOworICAgIG1fY2xpZW50
LT5wb3N0RHJhd0xheWVyc1Rhc2tPbkNDVGhyZWFkKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdEltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZDkwNDk1ZGVkMmM4MGMzOWY4ZjNhMTk1
YjJlMDE1ZDZhMDhjYWI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCkBAIC0wLDAgKzEs
NzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NMYXllclRyZWVIb3N0SW1wbF9oCisjZGVm
aW5lIENDTGF5ZXJUcmVlSG9zdEltcGxfaAorCisjaW5jbHVkZSAiY2MvQ0NUaHJlYWQuaCIKKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVk
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gUHJvdmlkZXMgc2NoZWR1bGluZyBpbmZy
YXN0cnVjdHVyZSBmb3IgYSBDQ0xheWVyVHJlZUhvc3RJbXBsCitjbGFzcyBDQ0xheWVyVHJlZUhv
c3RJbXBsQ2xpZW50ICB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+Q0NMYXllclRyZWVIb3N0SW1w
bENsaWVudCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwb3N0RHJhd0xheWVyc1Rhc2tPbkNDVGhy
ZWFkKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhy
ZWFkKGRvdWJsZSBmcmFtZUJlZ2luVGltZSkgPSAwOworfTsKKworLy8gQ0NMYXllclRyZWVIb3N0
SW1wbCBvd25zIHRoZSBDQ0xheWVySW1wbCB0cmVlIGFzIHdlbGwgYXMgYXNzb2NpYXRlZCByZW5k
ZXJpbmcgc3RhdGUKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGwgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKENDTGF5ZXJUcmVlSG9zdEltcGwpOworcHVibGljOgorICAgIGV4cGxpY2l0IEND
TGF5ZXJUcmVlSG9zdEltcGwoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCopOworICAgIHZpcnR1
YWwgfkNDTGF5ZXJUcmVlSG9zdEltcGwoKTsKKworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1p
dCgpOworICAgIHZpcnR1YWwgdm9pZCBjb21taXRDb21wbGV0ZSgpOworCisgICAgdm9pZCBkcmF3
TGF5ZXJzKCk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNBbmRQcmVzZW50KCkgPSAwOwor
CisgICAgaW50IGZyYW1lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZU51bWJlcjsgfQor
CisgICAgdm9pZCBzZXROZWVkc1JlZHJhdygpOworICAgIHZvaWQgc2V0TmVlZHNDb21taXRBbmRS
ZWRyYXcoKTsKKworICAgIGludCBzb3VyY2VGcmFtZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1f
c291cmNlRnJhbWVOdW1iZXI7IH0KKyAgICB2b2lkIHNldFNvdXJjZUZyYW1lTnVtYmVyKGludCBm
cmFtZU51bWJlcikgeyBtX3NvdXJjZUZyYW1lTnVtYmVyID0gZnJhbWVOdW1iZXI7IH0KKworcHJv
dGVjdGVkOgorICAgIGludCBtX3NvdXJjZUZyYW1lTnVtYmVyOworICAgIGludCBtX2ZyYW1lTnVt
YmVyOworCitwcml2YXRlOgorICAgIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqIG1fY2xpZW50
OworICAgIGJvb2wgbV9jb21taXRQZW5kaW5nOworICAgIGJvb2wgbV9yZWRyYXdQZW5kaW5nOwor
fTsKKworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bFByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZjRjNGQwMmUxZDVkNTUxNTQ2NDQ3ZjMzYTFiZjE4NDZl
MDE4MjZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmNwcApAQCAtMCwwICsxLDIy
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmgiCisKKyNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCisj
aW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCisjaW5jbHVkZSAiY2MvQ0NNYWluVGhyZWFk
VGFzay5oIgorI2luY2x1ZGUgImNjL0NDVGhyZWFkVGFzay5oIgorCisKK3VzaW5nIG5hbWVzcGFj
ZSBXVEY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIHsKK0NDVGhyZWFkKiBj
Y1RocmVhZDsKK2ludCBudW1Qcm94aWVzID0gMDsKK30KKworQ0NMYXllclRyZWVIb3N0SW1wbFBy
b3h5OjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkoQ0NMYXllclRyZWVIb3N0KiBsYXllclRyZWVI
b3N0KQorICAgIDogbV9jb21taXRQZW5kaW5nKGZhbHNlKQorICAgICwgbV9sYXllclRyZWVIb3N0
KGxheWVyVHJlZUhvc3QpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5IiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKyAgICBudW1Qcm94aWVzKys7CisgICAgaWYgKCFjY1RocmVhZCkKKyAg
ICAgICAgY2NUaHJlYWQgPSBDQ1RocmVhZDo6Y3JlYXRlKCkubGVha1B0cigpOworfQorCisKK3Zv
aWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzdGFydCgpCit7CisgICAgLy8gQ3JlYXRlIExh
eWVyVHJlZUhvc3RJbXBsLgorICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CisgICAg
Y2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVI
b3N0SW1wbFByb3h5Ojppbml0SW1wbE9uQ0NUaHJlYWQsICZjb21wbGV0aW9uKSk7CisgICAgY29t
cGxldGlvbi53YWl0KCk7Cit9CisKK0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6fkNDTGF5ZXJU
cmVlSG9zdEltcGxQcm94eSgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdElt
cGxQcm94eTo6fkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSIsIHRoaXMsIDApOworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3RJbXBsICYmICFt
X2xheWVyVHJlZUhvc3QpOyAvLyBtYWtlIHN1cmUgc3RvcCgpIGdvdCBjYWxsZWQuCisKKyAgICBu
dW1Qcm94aWVzLS07CisgICAgaWYgKCFudW1Qcm94aWVzKSB7CisgICAgICAgIGRlbGV0ZSBjY1Ro
cmVhZDsKKyAgICAgICAgY2NUaHJlYWQgPSAwOworICAgIH0KK30KKworYm9vbCBDQ0xheWVyVHJl
ZUhvc3RJbXBsUHJveHk6OmlzU3RhcnRlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXJU
cmVlSG9zdEltcGw7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVk
c0NvbW1pdEFuZFJlZHJhdygpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBp
ZiAobV9jb21taXRQZW5kaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBUUkFDRV9FVkVOVCgi
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdyIsIHRoaXMs
IDApOworICAgIG1fY29tbWl0UGVuZGluZyA9IHRydWU7CisgICAgY2NUaHJlYWQtPnBvc3RUYXNr
KGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXRO
ZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQpKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHk6OnNldE5lZWRzUmVkcmF3KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkND
TGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKSk7Cit9CisK
K3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzdG9wKCkKK3sKKyAgICBUUkFDRV9FVkVO
VCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzdG9wIiwgdGhpcywgMCk7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKyAgICAvLyBTeW5jaHJvbm91c2x5IGRlbGV0ZXMgdGhlIGltcGwu
CisgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKKyAgICBjY1RocmVhZC0+cG9zdFRh
c2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6Omxh
eWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkLCAmY29tcGxldGlvbikpOworICAgIGNvbXBsZXRp
b24ud2FpdCgpOworCisgICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3RJbXBsKTsgLy8gdmVyaWZ5
IHRoYXQgdGhlIGltcGwgZGVsZXRlZC4KKyAgICBtX2xheWVyVHJlZUhvc3QgPSAwOworfQorCit2
b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6cG9zdERyYXdMYXllcnNUYXNrT25DQ1RocmVh
ZCgpCit7CisgICAgQVNTRVJUKGlzQ0NUaHJlYWQoKSk7CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9z
dEltcGwpCisgICAgICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhp
cywgJkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQpKTsKK30K
Kwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdE9u
Q0NUaHJlYWQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xh
eWVyVHJlZUhvc3RJbXBsUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQiLCB0
aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNDQ1RocmVhZCgpKTsKKyAgICBpZiAobV9sYXllclRyZWVI
b3N0SW1wbCkKKyAgICAgICAgQ0NNYWluVGhyZWFkOjpwb3N0VGFzayhjcmVhdGVNYWluVGhyZWFk
VGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21t
aXQsIGZyYW1lQmVnaW5UaW1lKSk7Cit9CisKK2Jvb2wgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5
Ojppc01haW5UaHJlYWQoKSBjb25zdAoreworICAgIHJldHVybiA6OmlzTWFpblRocmVhZCgpOwor
fQorCitib29sIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNDQ1RocmVhZCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGN1cnJlbnRUaHJlYWQoKSA9PSBjY1RocmVhZC0+dGhyZWFkSUQoKTsKK30K
Kwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdChk
b3VibGUgZnJhbWVCZWdpblRpbWUpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAg
ICBpZiAoIW1fbGF5ZXJUcmVlSG9zdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgVFJBQ0VfRVZF
TlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0IiwgdGhp
cywgMCk7CisgICAgeworICAgICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojphbmlt
YXRlQW5kTGF5b3V0IiwgdGhpcywgMCk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+YW5pbWF0
ZUFuZExheW91dChmcmFtZUJlZ2luVGltZSk7CisgICAgfQorCisgICAgbV9jb21taXRQZW5kaW5n
ID0gZmFsc2U7CisgICAgeworICAgICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojp1
cGRhdGVMYXllcnMiLCB0aGlzLCAwKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT51cGRhdGVM
YXllcnMoKTsKKyAgICB9CisKKyAgICBPd25QdHI8Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyPiBj
b21taXR0ZXIgPSBtX2xheWVyVHJlZUhvc3QtPmNyZWF0ZUxheWVyVHJlZUhvc3RDb21taXR0ZXIo
KTsKKyAgICBtX2xheWVyVHJlZUhvc3QtPmJlZ2luQ29tbWl0KCk7CisKKyAgICAvLyBCbG9ja2lu
ZyBjYWxsIHRvIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6cGVyZm9ybUNvbW1pdAorICAgIEND
Q29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0
ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpjb21taXRPbkND
VGhyZWFkLCBjb21taXR0ZXIuZ2V0KCksICZjb21wbGV0aW9uKSk7CisgICAgY29tcGxldGlvbi53
YWl0KCk7CisKKyAgICBjb21taXR0ZXIuY2xlYXIoKTsKKworICAgIG1fbGF5ZXJUcmVlSG9zdC0+
Y29tbWl0Q29tcGxldGUoKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmNv
bW1pdE9uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyKiBjb21taXR0ZXIsIENDQ29t
cGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQoreworICAgIEFTU0VSVChpc0NDVGhyZWFkKCkpOwor
ICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmNvbW1pdE9uQ0NUaHJl
YWQiLCB0aGlzLCAwKTsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5iZWdpbkNvbW1pdCgpOwor
ICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0IiwgdGhp
cywgMCk7CisgICAgICAgIGNvbW1pdHRlci0+Y29tbWl0KG1fbGF5ZXJUcmVlSG9zdCwgbV9sYXll
clRyZWVIb3N0SW1wbC5nZXQoKSk7CisgICAgfQorICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOwor
CisgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+Y29tbWl0Q29tcGxldGUoKTsKK30KKwordm9pZCBD
Q0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkKCkKK3sKKyAgICBU
UkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpkcmF3TGF5ZXJzT25DQ1RocmVh
ZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc0NDVGhyZWFkKCkpOworICAgIGlmIChtX2xheWVy
VHJlZUhvc3RJbXBsKQorICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5kcmF3TGF5ZXJzKCk7
Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJl
ZHJhd09uQ0NUaHJlYWQoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBs
UHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCIsIHRoaXMsIDApOworICAg
IEFTU0VSVChpc0NDVGhyZWFkKCkgJiYgbV9sYXllclRyZWVIb3N0SW1wbCk7CisgICAgbV9sYXll
clRyZWVIb3N0SW1wbC0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKK30KKwordm9pZCBDQ0xh
eWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCgpCit7CisgICAg
VFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHNSZWRyYXdPbkND
VGhyZWFkIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzQ0NUaHJlYWQoKSAmJiBtX2xheWVyVHJl
ZUhvc3RJbXBsKTsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5zZXROZWVkc1JlZHJhdygpOwor
fQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aW5pdEltcGxPbkNDVGhyZWFkKEND
Q29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVy
VHJlZUhvc3RJbXBsUHJveHk6OmluaXRJbXBsT25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFT
U0VSVChpc0NDVGhyZWFkKCkpOworICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwgPSBjcmVhdGVMYXll
clRyZWVIb3N0SW1wbCgpOworICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOworfQorCit2b2lkIEND
TGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6bGF5ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJlYWQoQ0ND
b21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24pCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJU
cmVlSG9zdEltcGxQcm94eTo6bGF5ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJlYWQiLCB0aGlzLCAw
KTsKKyAgICBBU1NFUlQoaXNDQ1RocmVhZCgpKTsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLmNs
ZWFyKCk7CisgICAgY29tcGxldGlvbi0+c2lnbmFsKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjk1YmUzY2FiNjIxZjM5
OWUzYzQ0OWM0MjRjNTg3NTMxYTM5MGNlYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eS5oCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NMYXllclRyZWVI
b3N0SW1wbFByb3h5X2gKKyNkZWZpbmUgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5X2gKKworI2lu
Y2x1ZGUgImNjL0NDQ29tcGxldGlvbkV2ZW50LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBDQ0xheWVyVHJlZUhvc3Q7CitjbGFzcyBDQ0xheWVyVHJlZUhvc3RDb21taXR0
ZXI7CisKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSA6IHB1YmxpYyBDQ0xheWVyVHJl
ZUhvc3RJbXBsQ2xpZW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHkpOworcHVibGljOgorICAgIHZpcnR1YWwgfkNDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eSgpOworCisgICAgYm9vbCBpc1N0YXJ0ZWQoKSBjb25zdDsKKworICAgIHZvaWQgc2V0TmVl
ZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICB2b2lkIHNldE5lZWRzUmVkcmF3KCk7CisKKyAgICB2
b2lkIHN0YXJ0KCk7IC8vIE11c3QgYmUgY2FsbGVkIGJlZm9yZSB1c2luZyB0aGUgcHJveHkuCisg
ICAgdm9pZCBzdG9wKCk7IC8vIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBkZWxldGluZyB0aGUgcHJv
eHkuCisKKyAgICAvLyBDQ0xheWVyVHJlZUhvc3RJbXBsQ2llbnQgLS0gY2FsbGVkIG9uIENDVGhy
ZWFkCisgICAgdmlydHVhbCB2b2lkIHBvc3REcmF3TGF5ZXJzVGFza09uQ0NUaHJlYWQoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVxdWVzdEZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZChkb3VibGUgZnJh
bWVCZWdpblRpbWUpOworCitwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQgQ0NMYXllclRyZWVIb3N0
SW1wbFByb3h5KENDTGF5ZXJUcmVlSG9zdCopOworICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xh
eWVyVHJlZUhvc3RJbXBsPiBjcmVhdGVMYXllclRyZWVIb3N0SW1wbCgpID0gMDsKKyAgICBDQ0xh
eWVyVHJlZUhvc3QqIGhvc3QoKSBjb25zdCB7IHJldHVybiBtX2xheWVyVHJlZUhvc3Q7IH0KKwor
cHJpdmF0ZToKKyAgICBib29sIGlzTWFpblRocmVhZCgpIGNvbnN0OworICAgIGJvb2wgaXNDQ1Ro
cmVhZCgpIGNvbnN0OworCisgICAgLy8gQ2FsbGVkIG9uIENDTWFpblRocmVhZAorICAgIHZvaWQg
cmVxdWVzdEZyYW1lQW5kQ29tbWl0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CisKKyAgICAvLyBD
YWxsZWQgb24gQ0NUaHJlYWQKKyAgICB2b2lkIGNvbW1pdE9uQ0NUaHJlYWQoQ0NMYXllclRyZWVI
b3N0Q29tbWl0dGVyKiwgQ0NDb21wbGV0aW9uRXZlbnQqKTsKKyAgICB2b2lkIGRyYXdMYXllcnNP
bkNDVGhyZWFkKCk7CisgICAgdm9pZCBpbml0SW1wbE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZl
bnQqKTsKKyAgICB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCgpOworICAg
IHZvaWQgc2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKCk7CisgICAgdm9pZCBsYXllclRyZWVIb3N0
Q2xvc2VkT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCopOworCisgICAgLy8gVXNlZCBvbiBt
YWluLXRocmVhZCBvbmx5LgorICAgIGJvb2wgbV9jb21taXRQZW5kaW5nOworCisgICAgLy8gQWNj
ZXNzZWQgb24gbWFpbiB0aHJlYWQgb25seS4KKyAgICBDQ0xheWVyVHJlZUhvc3QqIG1fbGF5ZXJU
cmVlSG9zdDsKKworICAgIC8vIFVzZWQgb24gdGhlIENDVGhyZWFkLCBidXQgY2hlY2tlZCBvbiBt
YWluIHRocmVhZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24vc2h1dGRvd24uCisgICAgT3duUHRyPEND
TGF5ZXJUcmVlSG9zdEltcGw+IG1fbGF5ZXJUcmVlSG9zdEltcGw7Cit9OworCit9CisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NNYWluVGhyZWFkVGFzay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkVGFzay5oCmluZGV4IDdkZThkNzEzZTg4Yzg4NDIyMjQw
NzkzZmYyNzdkNTlkZjUzYWRlN2IuLmZhYzZlNjQzZjA1YTE4YmJiYWFkNTdiMjliYmMwM2E2Mjgw
ZWFjOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTWFpblRocmVhZFRhc2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWRUYXNrLmgKQEAgLTI0LDkgKzI0LDkgQEAK
ICNpZm5kZWYgQ0NNYWluVGhyZWFkVGFza19oCiAjZGVmaW5lIENDTWFpblRocmVhZFRhc2tfaAog
Ci0jaW5jbHVkZSAiQ0NNYWluVGhyZWFkLmgiCiAjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRDb3BpZXIu
aCIKICNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKKyNpbmNsdWRlICJjYy9DQ01haW5UaHJl
YWQuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGhyZWFkLmNwcAppbmRleCA5NTY2NTg0NWM1OGM0OGNhMDYyMjAwMjQy
NDhiNzQ3YWJhYjc2MGNmLi5kZTE3M2ExMzQ5ODI0YWY5MGZhZGNlNzgxOTBmYmI4M2NjNDBlYjg1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUaHJlYWQuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiQ0NUaHJl
YWQuaCIKIAogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlRy
YWNlRXZlbnQuaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CkBAIC02
NCw2ICs2NSw3IEBAIHZvaWQqIENDVGhyZWFkOjpjb21wb3NpdG9yVGhyZWFkU3RhcnQodm9pZCog
dXNlcmRhdGEpCiAKIHZvaWQqIENDVGhyZWFkOjpydW5Mb29wKCkKIHsKKyAgICBUUkFDRV9FVkVO
VCgiQ0NUaHJlYWQ6OnJ1bkxvb3AiLCB0aGlzLCAwKTsKICAgICB7CiAgICAgICAgIC8vIFdhaXQg
Zm9yIENDVGhyZWFkOjpzdGFydCgpIHRvIGNvbXBsZXRlIHRvIGhhdmUgbV90aHJlYWRJRAogICAg
ICAgICAvLyBlc3RhYmxpc2hlZCBiZWZvcmUgc3RhcnRpbmcgdGhlIG1haW4gbG9vcC4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhy
ZWFkVGFzay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUaHJlYWRUYXNrLmgKaW5kZXggNzEyNDVkM2U0ZTBlY2U1MzUwNWEwZGVkZTc1MzY4ZWNjNmQw
ZmM0Ny4uOTFjNThlNWQyNWI3YmIyODZlMjE2YzRlMDY4Y2JlMTA5NTc4ZjE4MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRU
YXNrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUaHJlYWRUYXNrLmgKQEAgLTI0LDkgKzI0LDkgQEAKICNpZm5kZWYgQ0NUaHJlYWRUYXNrX2gK
ICNkZWZpbmUgQ0NUaHJlYWRUYXNrX2gKIAotI2luY2x1ZGUgIkNDVGhyZWFkLmgiCiAjaW5jbHVk
ZSAiQ3Jvc3NUaHJlYWRDb3BpZXIuaCIKICNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKKyNp
bmNsdWRlICJjYy9DQ1RocmVhZC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBk
MjhkOGJlMWRiMWVlNzc2MDAxMzA0Mjg3ZTkzMmQxMjk5ZDc3Yzc2Li4wMWQ3ZTZiYjVkM2YwMTUx
ZDljY2Q1YmMyNmIxY2VhZGQxN2FjNWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDEwMSBAQAorMjAxMS0wNC0xOCAgTmF0IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9t
aXVtXSBJbXBsZW1lbnQgQ0NMYXllclRyZWVIb3N0IGFuZCBDQ0xheWVyVHJlZUhvc3RJbXBsIHBv
cnRpb25zIG9mIHRocmVhZGVkIGNvbXBvc2l0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTU4NDA4CisKKyAgICAgICAgUmVkaXJlY3QgaW52YWxpZGF0
ZXMgYW5kIHNjaGVkdWxpbmcgaW50byBjb21wb3NpdG9yIHdoZW4gaW4KKyAgICAgICAgdGhyZWFk
ZWQgY29tcG9zaXRpbmcgbW9kZS4gQWRkIENDTFN0cmVzcyB0ZXN0cyBmb3IKKyAgICAgICAgQ0NM
YXllclRyZWVIb3N0LgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogcHVibGlj
L1dlYldpZGdldC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJXaWRnZXQ6OnNjaGVkdWxlQ29tcG9z
aXRlKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3SW1wbDo6YW5pbWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpkb0Fu
aW1hdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cGFpbnQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3SW1wbDo6YW5pbWF0ZUFuZExheW91dCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXdJbXBsOjpjb21wb3NpdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
c2NoZWR1bGVDb21wb3NpdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0Um9v
dExheWVyTmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldElz
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJ
bXBsOjpkb0NvbXBvc2l0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjcmVhdGVM
YXllclRyZWVIb3N0Q29udGV4dDNEKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnJl
YWxsb2NhdGVSZW5kZXJlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp1cGRhdGVM
YXllclJlbmRlcmVyU2V0dGluZ3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6dXBk
YXRlTGF5ZXJSZW5kZXJlclZpZXdwb3J0KToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoK
KyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcDogQWRkZWQuCisgICAgICAg
IChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3Q6OkNDTGF5ZXJUcmVlSG9zdFRlc3QpOgorICAgICAg
ICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0OjphbmltYXRlQW5kTGF5b3V0KToKKyAgICAgICAg
KFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6YmVnaW5Db21taXRPbkNDVGhyZWFkKToKKyAgICAg
ICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6YmVnaW5Db21taXRPbk1haW5UaHJlYWQpOgor
ICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0Ojpjb21taXRPbkNDVGhyZWFkKToKKyAg
ICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6Y29tbWl0Q29tcGxldGVPbkNDVGhyZWFk
KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6Y29tbWl0Q29tcGxldGVPbk1h
aW5UaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0OjpkcmF3TGF5ZXJz
QW5kUHJlc2VudE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0
Ojp1cGRhdGVMYXllcnMpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0OjpvbkJl
Z2luVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3Q6OmRvRW5kVGVzdCk6
CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3Q6Om9uRW5kVGVzdCk6CisgICAgICAg
IChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3Q6OnJ1blRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xh
eWVyVHJlZUhvc3RUZXN0Ojp0ZXN0VGltZW91dCk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRy
ZWVIb3N0Q2xpZW50OjpNb2NrTGF5ZXJUcmVlSG9zdENsaWVudCk6CisgICAgICAgIChXVEY6Ok1v
Y2tMYXllclRyZWVIb3N0Q2xpZW50OjpjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKToKKyAg
ICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3RDbGllbnQ6OmFuaW1hdGVBbmRMYXlvdXQpOgor
ICAgICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdENvbW1pdHRlcjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3RDb21taXR0ZXI6OmNvbW1pdCk6CisgICAgICAgIChX
VEY6Ok1vY2tMYXllclRyZWVIb3N0Q29tbWl0dGVyOjpNb2NrTGF5ZXJUcmVlSG9zdENvbW1pdHRl
cik6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0SW1wbDo6Y3JlYXRlKToKKyAgICAg
ICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3RJbXBsOjpiZWdpbkNvbW1pdCk6CisgICAgICAgIChX
VEY6Ok1vY2tMYXllclRyZWVIb3N0SW1wbDo6Y29tbWl0Q29tcGxldGUpOgorICAgICAgICAoV1RG
OjpNb2NrTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnNBbmRQcmVzZW50KToKKyAgICAgICAg
KFdURjo6TW9ja0xheWVyVHJlZUhvc3RJbXBsOjpNb2NrTGF5ZXJUcmVlSG9zdEltcGwpOgorICAg
ICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6Y3JlYXRlKToKKyAgICAgICAg
KFdURjo6TW9ja0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmNyZWF0ZUxheWVyVHJlZUhvc3RJbXBs
KToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3RJbXBsUHJveHk6Ok1vY2tMYXllclRy
ZWVIb3N0SW1wbFByb3h5KToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3Q6Ok1vY2tM
YXllclRyZWVIb3N0KToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3Q6OmNyZWF0ZUxh
eWVyVHJlZUhvc3RJbXBsUHJveHkpOgorICAgICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdDo6
dXBkYXRlTGF5ZXJzKToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3Q6OmJlZ2luQ29t
bWl0KToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3Q6OmNvbW1pdENvbXBsZXRlKToK
KyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6ZG9CZWdpblRlc3QpOgorICAgICAg
ICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0OjplbmRUZXN0KToKKyAgICAgICAgKFdURjo6Q0NM
YXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQxOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZl
ZDEpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDE6OmJlZ2lu
VGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTaG9ydGxpdmVkMTo6YWZ0
ZXJUZXN0KToKKyAgICAgICAgKFdURjo6VEVTVF9GKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRy
ZWVIb3N0VGVzdFNob3J0bGl2ZWQyOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDIpOgor
ICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDI6OmJlZ2luVGVzdCk6
CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTaG9ydGxpdmVkMjo6YWZ0ZXJUZXN0
KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQzOjpDQ0xheWVy
VHJlZUhvc3RUZXN0U2hvcnRsaXZlZDMpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RU
ZXN0U2hvcnRsaXZlZDM6OmJlZ2luVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9z
dFRlc3RTaG9ydGxpdmVkMzo6YWZ0ZXJUZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVI
b3N0VGVzdENvbW1pdGluZ1dpdGhDb250aW51b3VzUmVkcmF3OjpDQ0xheWVyVHJlZUhvc3RUZXN0
Q29tbWl0aW5nV2l0aENvbnRpbnVvdXNSZWRyYXcpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJl
ZUhvc3RUZXN0Q29tbWl0aW5nV2l0aENvbnRpbnVvdXNSZWRyYXc6OmJlZ2luVGVzdCk6CisgICAg
ICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RDb21taXRpbmdXaXRoQ29udGludW91c1JlZHJh
dzo6Y29tbWl0Q29tcGxldGVPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVI
b3N0VGVzdENvbW1pdGluZ1dpdGhDb250aW51b3VzUmVkcmF3OjpkcmF3TGF5ZXJzQW5kUHJlc2Vu
dE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0Q29tbWl0aW5n
V2l0aENvbnRpbnVvdXNSZWRyYXc6OmFmdGVyVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJU
cmVlSG9zdFRlc3RTZXROZWVkc0NvbW1pdDE6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc0Nv
bW1pdDEpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQx
OjpiZWdpblRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHND
b21taXQxOjpkcmF3TGF5ZXJzQW5kUHJlc2VudE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpD
Q0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQxOjpjb21taXRPbkNDVGhyZWFkKToKKyAg
ICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzQ29tbWl0MTo6YWZ0ZXJUZXN0
KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzQ29tbWl0Mjo6Q0NM
YXllclRyZWVIb3N0VGVzdFNldE5lZWRzQ29tbWl0Mik6CisgICAgICAgIChXVEY6OkNDTGF5ZXJU
cmVlSG9zdFRlc3RTZXROZWVkc0NvbW1pdDI6OmJlZ2luVGVzdCk6CisgICAgICAgIChXVEY6OkND
TGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc0NvbW1pdDI6OmRyYXdMYXllcnNBbmRQcmVzZW50T25D
Q1RocmVhZCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc0NvbW1p
dDI6OmNvbW1pdE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0
U2V0TmVlZHNDb21taXQyOjphZnRlclRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhv
c3RUZXN0U2V0TmVlZHNSZWRyYXc6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc1JlZHJhdyk6
CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc1JlZHJhdzo6YmVnaW5U
ZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzUmVkcmF3Ojpk
cmF3TGF5ZXJzQW5kUHJlc2VudE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJl
ZUhvc3RUZXN0U2V0TmVlZHNSZWRyYXc6OmNvbW1pdE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RG
OjpDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNSZWRyYXc6OmFmdGVyVGVzdCk6CisgICAgICAg
ICogdGVzdHMvQ0NUaHJlYWRUZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorCiAy
MDExLTA0LTE4ICBFdmFuIE1hcnRpbiAgPGV2YW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXgg
YzIzYzllZGNiNDY4MmNiMDQwZWMzNjdmMzdiNWVhODlmNzE5YjcxZC4uNGUyYTM1ZTFkMzg3YTRi
NjZjOGI5NWJlMjE2ZGU4NjY4Mzc0MWRmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBp
CkBAIC01Myw2ICs1Myw3IEBACiAgICAgICAgIF0sCiAgICAgICAgICd3ZWJraXRfdW5pdHRlc3Rf
ZmlsZXMnOiBbCiAgICAgICAgICAgICAndGVzdHMvQXJlbmFUZXN0SGVscGVycy5oJywKKyAgICAg
ICAgICAgICd0ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVz
dHMvQ0NUaHJlYWRUYXNrVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDVGhyZWFkVGVz
dC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0RyYWdJbWFnZVRlc3QuY3BwJywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0LmgKaW5kZXggMTI5MGFkODE2MmI2NjIzYmMz
NTlhMGZjZmM1NjMxNDRmNmZjZjc0Yi4uZjY4MWJmYWFhYmYyYjFkMjliMmUwMmUwNDQzYTBmYzVm
NTQzODAzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lk
Z2V0LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0LmgKQEAg
LTQ2LDYgKzQ2LDkgQEAgc3RydWN0IFdlYlJlY3Q7CiBzdHJ1Y3QgV2ViU2l6ZTsKIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPiBjbGFzcyBXZWJWZWN0b3I7CiAKKy8vIEZJWE1FOiByZW1vdmUgdGhpcyBk
ZWZpbmUgb25jZSByZW5kZXJfd2lkZ2V0IGhhcyBiZWVuIGNoYW5nZWQgdG8gaXNzdWUgdGhyZWFk
ZWQgY29tcG9zaXRvciBjYWxscworI2RlZmluZSBXRUJXSURHRVRfSEFTX1RIUkVBREVEX0NPTVBP
U0lUSU5HX0NIQU5HRVMgMQorCiBjbGFzcyBXZWJXaWRnZXQgewogcHVibGljOgogICAgIC8vIFRo
aXMgbWV0aG9kIGNsb3NlcyBhbmQgZGVsZXRlcyB0aGUgV2ViV2lkZ2V0LgpAQCAtNTcsMTUgKzYw
LDE3IEBAIHB1YmxpYzoKICAgICAvLyBDYWxsZWQgdG8gcmVzaXplIHRoZSBXZWJXaWRnZXQuCiAg
ICAgdmlydHVhbCB2b2lkIHJlc2l6ZShjb25zdCBXZWJTaXplJikgPSAwOwogCi0gICAgLy8gQ2Fs
bGVkIHRvIHVwZGF0ZSBpbXBlcmF0aXZlIGFuaW1hdGlvbiBzdGF0ZS4gIFRoaXMgc2hvdWxkIGJl
IGNhbGxlZCBiZWZvcmUKLSAgICAvLyBwYWludCwgYWx0aG91Z2ggdGhlIGNsaWVudCBjYW4gcmF0
ZS1saW1pdCB0aGVzZSBjYWxscy4KLSAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZSgpID0gMDsKKyAg
ICAvLyBDYWxsZWQgdG8gdXBkYXRlIGltcGVyYXRpdmUgYW5pbWF0aW9uIHN0YXRlLiBUaGlzIHNo
b3VsZCBiZSBjYWxsZWQKKyAgICAvLyBiZWZvcmUgcGFpbnQsIGFsdGhvdWdoIHRoZSBjbGllbnQg
Y2FuIHJhdGUtbGltaXQgdGhlc2UgY2FsbHMuCisgICAgLy8gRklYTUU6IHJlbW92ZSBkZWZhdWx0
IGFyZ3VtZW50IG9uY2UgcmVuZGVyX3dpZGdldCBoYXMgYmVlbiB1cGRhdGVkIHRvCisgICAgLy8g
aXNzdWUgdGhlIGNvcnJlY3QgdmFsdWUuCisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGUoZG91Ymxl
IGZyYW1lQmVnaW5UaW1lKSA9IDA7CiAKICAgICAvLyBDYWxsZWQgdG8gbGF5b3V0IHRoZSBXZWJX
aWRnZXQuICBUaGlzIE1VU1QgYmUgY2FsbGVkIGJlZm9yZSBQYWludCwKICAgICAvLyBhbmQgaXQg
bWF5IHJlc3VsdCBpbiBjYWxscyB0byBXZWJXaWRnZXRDbGllbnQ6OmRpZEludmFsaWRhdGVSZWN0
LgogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKSA9IDA7CiAKLSAgICAvLyBDYWxsZWQgdG8gcGFp
bnQgdGhlIHJlY3Rhbmd1bGFyIHJlZ2lvbiB3aXRoaW4gdGhlIFdlYldpZGdldCAKKyAgICAvLyBD
YWxsZWQgdG8gcGFpbnQgdGhlIHJlY3Rhbmd1bGFyIHJlZ2lvbiB3aXRoaW4gdGhlIFdlYldpZGdl
dAogICAgIC8vIG9udG8gdGhlIHNwZWNpZmllZCBjYW52YXMgYXQgKHZpZXdQb3J0Lngsdmlld1Bv
cnQueSkuIFlvdSBNVVNUIGNhbGwKICAgICAvLyBMYXlvdXQgYmVmb3JlIGNhbGxpbmcgdGhpcyBt
ZXRob2QuICBJdCBpcyBva2F5IHRvIGNhbGwgcGFpbnQKICAgICAvLyBtdWx0aXBsZSB0aW1lcyBv
bmNlIGxheW91dCBoYXMgYmVlbiBjYWxsZWQsIGFzc3VtaW5nIG5vIG90aGVyCkBAIC03NCwxMiAr
NzksMTYgQEAgcHVibGljOgogICAgIC8vIHdhcnJhbnRlZCBiZWZvcmUgcGFpbnRpbmcgYWdhaW4p
LgogICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJDYW52YXMqLCBjb25zdCBXZWJSZWN0JiB2aWV3
UG9ydCkgPSAwOwogCi0gICAgLy8gVHJpZ2dlcnMgY29tcG9zaXRpbmcgb2YgdGhlIGN1cnJlbnQg
bGF5ZXJzIG9udG8gdGhlIHNjcmVlbi4KLSAgICAvLyBUaGUgZmluaXNoIGFyZ3VtZW50IGNvbnRy
b2xzIHdoZXRoZXIgdGhlIGNvbXBvc2l0b3Igd2lsbCB3YWl0IGZvciB0aGUKLSAgICAvLyBHUFUg
dG8gZmluaXNoIHJlbmRlcmluZyBiZWZvcmUgcmV0dXJuaW5nLiBZb3UgTVVTVCBjYWxsIExheW91
dAotICAgIC8vIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLCBmb3IgdGhlIHNhbWUgcmVhc29u
cyBkZXNjcmliZWQgaW4KLSAgICAvLyB0aGUgcGFpbnQgbWV0aG9kIGFib3ZlLgotICAgIHZpcnR1
YWwgdm9pZCBjb21wb3NpdGUoYm9vbCBmaW5pc2gpID0gMDsKKyAgICAvLyBUcmlnZ2VycyBjb21w
b3NpdGluZyBvZiB0aGUgY3VycmVudCBsYXllcnMgb250byB0aGUgc2NyZWVuLiBUaGlzIGNhbGwg
aGFzCisgICAgLy8gbm8gZWZmZWN0IGluIHRocmVhZGVkIGNvbXBvc2l0aW5nIG1vZGUuIFlvdSBN
VVNUIGNhbGwgTGF5b3V0IGJlZm9yZQorICAgIC8vIGNhbGxpbmcgdGhpcyBtZXRob2QsIGZvciB0
aGUgc2FtZSByZWFzb25zIGRlc2NyaWJlZCBpbiB0aGUgcGFpbnQgbWV0aG9kCisgICAgLy8gYWJv
dmUuCisgICAgdmlydHVhbCB2b2lkIGNvbXBvc2l0ZSgpID0gMDsKKworICAgIC8vIEluIHRocmVh
ZGVkIGNvbXBvc2l0aW5nIG1vZGUsIGluZGljYXRlcyB0aGF0IHRoZSB3aWRnZXQgc2hvdWxkIHJl
ZHJhdworICAgIC8vIGl0c2VsZiwgZm9yIGV4YW1wbGUgZHVlIHRvIHdpbmRvdyBkYW1hZ2UuIFRo
ZSByZWRyYXcgd2lsbCBiZWdpbgorICAgIC8vIGFzeW5jaHJvbm91c2x5LgorICAgIHZpcnR1YWwg
dm9pZCBzY2hlZHVsZUNvbXBvc2l0ZSgpICB7IH0KIAogICAgIC8vIENhbGxlZCB0byBpbmZvcm0g
dGhlIFdlYldpZGdldCBvZiBhIGNoYW5nZSBpbiB0aGVtZS4KICAgICAvLyBJbXBsZW1lbnRvcnMg
dGhhdCBjYWNoZSByZW5kZXJlZCBjb3BpZXMgb2Ygd2lkZ2V0cyBuZWVkIHRvIHJlLXJlbmRlcgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcAppbmRl
eCBiNGQ0MjQ2YzNmNjAxMGJjYWY1MDIxZDRjZDk2ODFhYmZjMzkzZGI1Li43NmY4OTRhNmJjNjU4
OGFkMGFiNDQ4NDEzNzVhODMwZjgxMzcyNzgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcApAQCAtMTUxLDcgKzE1MSw3IEBAIHZvaWQgV2Vi
UG9wdXBNZW51SW1wbDo6cmVzaXplKGNvbnN0IFdlYlNpemUmIG5ld1NpemUpCiAgICAgfQogfQog
Ci12b2lkIFdlYlBvcHVwTWVudUltcGw6OmFuaW1hdGUoKQordm9pZCBXZWJQb3B1cE1lbnVJbXBs
OjphbmltYXRlKGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKIHsKIH0KIApAQCAtMTczLDcgKzE3Myw3
IEBAIHZvaWQgV2ViUG9wdXBNZW51SW1wbDo6dGhlbWVDaGFuZ2VkKCkKICAgICBub3RJbXBsZW1l
bnRlZCgpOwogfQogCi12b2lkIFdlYlBvcHVwTWVudUltcGw6OmNvbXBvc2l0ZShib29sIGZpbmlz
aCkKK3ZvaWQgV2ViUG9wdXBNZW51SW1wbDo6Y29tcG9zaXRlKCkKIHsKICAgICBub3RJbXBsZW1l
bnRlZCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9w
dXBNZW51SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1w
bC5oCmluZGV4IDU4YTg4M2Y1NjhmN2VmMzBmOWYyZTAwMzRhMTc4ZTFlYWJjMGE4MDYuLjY1ZmYw
NTljZjIzYmU0MTc4ODc5NTgxYjUwNTkwMjRmOWYwNjI1NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmgKQEAgLTYyLDExICs2MiwxMSBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCk7CiAgICAgdmlydHVhbCBXZWJTaXplIHNpemUo
KSB7IHJldHVybiBtX3NpemU7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVzaXplKGNvbnN0IFdlYlNp
emUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZSgpOworICAgIHZpcnR1YWwgdm9pZCBhbmlt
YXRlKGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwog
ICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJDYW52YXMqIGNhbnZhcywgY29uc3QgV2ViUmVjdCYg
cmVjdCk7CiAgICAgdmlydHVhbCB2b2lkIHRoZW1lQ2hhbmdlZCgpOwotICAgIHZpcnR1YWwgdm9p
ZCBjb21wb3NpdGUoYm9vbCBmaW5pc2gpOworICAgIHZpcnR1YWwgdm9pZCBjb21wb3NpdGUoKTsK
ICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50Jik7
CiAgICAgdmlydHVhbCB2b2lkIG1vdXNlQ2FwdHVyZUxvc3QoKTsKICAgICB2aXJ0dWFsIHZvaWQg
c2V0Rm9jdXMoYm9vbCBlbmFibGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViVmlld0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmll
d0ltcGwuY3BwCmluZGV4IDI0MzhhOTQ4MWQwMTcwYzU2YjM2MzJhMGZiMDFkNmMzZDAxODdiOGQu
LmFiMGRjNTg3Nzg3ZmE4OWE5NGZjOTdkYzVmYzhkNjMwZDQ0NjFiNzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTk5MSwxNCArOTkxLDE4IEBAIHZv
aWQgV2ViVmlld0ltcGw6OnJlc2l6ZShjb25zdCBXZWJTaXplJiBuZXdTaXplKQogI2VuZGlmCiB9
CiAKLXZvaWQgV2ViVmlld0ltcGw6OmFuaW1hdGUoKQordm9pZCBXZWJWaWV3SW1wbDo6YW5pbWF0
ZShkb3VibGUgZnJhbWVCZWdpblRpbWUpCiB7CiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9O
X0ZSQU1FKQorICAgIC8vIEZJWE1FOiByZW1vdmUgdGhpcyBvbmNlIHJlbmRlcl93aWRnZXQgaGFz
IGJlZW4gbW9kaWZpZWQgdG8gcGFzcyBpbiBhCisgICAgLy8gZnJhbWVCZWdpblRpbWUuCisgICAg
aWYgKCFmcmFtZUJlZ2luVGltZSkKKyAgICAgICAgZnJhbWVCZWdpblRpbWUgPSBjdXJyZW50VGlt
ZSgpOwogICAgIFdlYkZyYW1lSW1wbCogd2ViZnJhbWUgPSBtYWluRnJhbWVJbXBsKCk7CiAgICAg
aWYgKHdlYmZyYW1lKSB7CiAgICAgICAgIEZyYW1lVmlldyogdmlldyA9IHdlYmZyYW1lLT5mcmFt
ZVZpZXcoKTsKICAgICAgICAgaWYgKHZpZXcpCi0gICAgICAgICAgICB2aWV3LT5zZXJ2aWNlU2Ny
aXB0ZWRBbmltYXRpb25zKGNvbnZlcnRTZWNvbmRzVG9ET01UaW1lU3RhbXAoY3VycmVudFRpbWUo
KSkpOworICAgICAgICAgICAgdmlldy0+c2VydmljZVNjcmlwdGVkQW5pbWF0aW9ucyhjb252ZXJ0
U2Vjb25kc1RvRE9NVGltZVN0YW1wKGZyYW1lQmVnaW5UaW1lKSk7CiAgICAgfQogI2VuZGlmCiB9
CkBAIC0xMDY4LDYgKzEwNzIsMTAgQEAgdm9pZCBXZWJWaWV3SW1wbDo6cGFpbnQoV2ViQ2FudmFz
KiBjYW52YXMsIGNvbnN0IFdlYlJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKGlzQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0FjdGl2ZSgpKSB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQor
I2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICAgICAgLy8gRklYTUU6IGRvIHJlYWRi
YWNrIGluIHRocmVhZGVkIGNvbXBvc2l0aW5nIG1vZGUgcmF0aGVyIHRoYW4gcmV0dXJuaW5nIG5v
dGhpbmcKKyAgICAgICAgcmV0dXJuOworI2VuZGlmCiAgICAgICAgIGRvQ29tcG9zaXRlKCk7CiAK
ICAgICAgICAgLy8gSWYgYSBjYW52YXMgd2FzIHBhc3NlZCBpbiwgd2UgdXNlIGl0IHRvIGdyYWIg
YSBjb3B5IG9mIHRoZQpAQCAtMTA5Niw5ICsxMTA0LDE5IEBAIHZvaWQgV2ViVmlld0ltcGw6OnRo
ZW1lQ2hhbmdlZCgpCiAgICAgdmlldy0+aW52YWxpZGF0ZVJlY3QoZGFtYWdlZFJlY3QpOwogfQog
Ci12b2lkIFdlYlZpZXdJbXBsOjpjb21wb3NpdGUoYm9vbCBmaW5pc2gpCisKK3ZvaWQgV2ViVmll
d0ltcGw6OmFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQoreworICAgIGFu
aW1hdGUoZnJhbWVCZWdpblRpbWUpOworICAgIGxheW91dCgpOworfQorCit2b2lkIFdlYlZpZXdJ
bXBsOjpjb21wb3NpdGUoKQogewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNp
ZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgbV9sYXllclJlbmRlcmVyLT5zZXROZWVk
c1JlZHJhdygpOworI2Vsc2UKICAgICBUUkFDRV9FVkVOVCgiV2ViVmlld0ltcGw6OmNvbXBvc2l0
ZSIsIHRoaXMsIDApOwogICAgIGlmIChtX3JlY3JlYXRpbmdHcmFwaGljc0NvbnRleHQpIHsKICAg
ICAgICAgLy8gcmVhbGxvY2F0ZVJlbmRlcmVyIHdpbGwgcmVxdWVzdCBhIHJlcGFpbnQgd2hldGhl
ciBvciBub3QgaXQgc3VjY2VlZGVkCkBAIC0xMTA5LDEwICsxMTI3LDYgQEAgdm9pZCBXZWJWaWV3
SW1wbDo6Y29tcG9zaXRlKGJvb2wgZmluaXNoKQogICAgIH0KICAgICBkb0NvbXBvc2l0ZSgpOwog
Ci0gICAgLy8gRmluaXNoIGlmIHJlcXVlc3RlZC4KLSAgICBpZiAoZmluaXNoKQotICAgICAgICBt
X2xheWVyUmVuZGVyZXItPmZpbmlzaCgpOwotCiAgICAgLy8gUHV0IHJlc3VsdCBvbnNjcmVlbi4K
ICAgICBtX2xheWVyUmVuZGVyZXItPnByZXNlbnQoKTsKIApAQCAtMTEyOCw2ICsxMTQyLDcgQEAg
dm9pZCBXZWJWaWV3SW1wbDo6Y29tcG9zaXRlKGJvb2wgZmluaXNoKQogICAgICAgICBzZXRSb290
TGF5ZXJOZWVkc0Rpc3BsYXkoKTsKICAgICB9CiAjZW5kaWYKKyNlbmRpZgogfQogCiBjb25zdCBX
ZWJJbnB1dEV2ZW50KiBXZWJWaWV3SW1wbDo6bV9jdXJyZW50SW5wdXRFdmVudCA9IDA7CkBAIC0y
MzI3LDkgKzIzNDIsMjQgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIo
V2ViQ29yZTo6UGxhdGZvcm1MYXllciogbGF5ZXIpCiAgICAgICAgIG1fY2xpZW50LT5kaWRJbnZh
bGlkYXRlUmVjdChkYW1hZ2VkUmVjdCk7CiB9CiAKK3ZvaWQgV2ViVmlld0ltcGw6OnNjaGVkdWxl
Q29tcG9zaXRlKCkKK3sKKyNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgaWYgKG1f
bGF5ZXJSZW5kZXJlcikKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5zZXROZWVkc1JlZHJhdygp
OworI2Vsc2UKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorfQorCiB2b2lkIFdl
YlZpZXdJbXBsOjpzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKQogeworI2lmIFVTRShUSFJFQURF
RF9DT01QT1NJVElORykKKyAgICBpZiAobV9sYXllclJlbmRlcmVyKQorICAgICAgICBtX2xheWVy
UmVuZGVyZXItPnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisjZWxzZQogICAgIG1fY2xpZW50
LT5zY2hlZHVsZUNvbXBvc2l0ZSgpOworI2VuZGlmCiB9CiAKIApAQCAtMjQwMSwxNSArMjQzMSwx
MCBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUo
Ym9vbCBhY3RpdmUpCiAKICAgICAgICAgbV9jbGllbnQtPmRpZEFjdGl2YXRlQWNjZWxlcmF0ZWRD
b21wb3NpdGluZyh0cnVlKTsKICAgICB9IGVsc2UgewotICAgICAgICBSZWZQdHI8R3JhcGhpY3ND
b250ZXh0M0Q+IGNvbnRleHQgPSBtX3RlbXBvcmFyeU9uc2NyZWVuR3JhcGhpY3NDb250ZXh0M0Qu
cmVsZWFzZSgpOwotICAgICAgICBpZiAoIWNvbnRleHQpIHsKLSAgICAgICAgICAgIGNvbnRleHQg
PSBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKGdldENvbXBvc2l0b3JDb250ZXh0QXR0cmlidXRl
cygpLCBtX3BhZ2UtPmNocm9tZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlU
b0hvc3RXaW5kb3cpOwotICAgICAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgICAgICAgICAg
Y29udGV4dC0+cmVzaGFwZShzdGQ6Om1heCgxLCBtX3NpemUud2lkdGgpLCBzdGQ6Om1heCgxLCBt
X3NpemUuaGVpZ2h0KSk7Ci0gICAgICAgIH0KLQotCi0gICAgICAgIG1fbGF5ZXJSZW5kZXJlciA9
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKGNvbnRleHQucmVsZWFzZSgpLCBXZWJWaWV3
SW1wbENvbnRlbnRQYWludGVyOjpjcmVhdGUodGhpcykpOworICAgICAgICBtX2xheWVyUmVuZGVy
ZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCBXZWJWaWV3SW1wbENvbnRl
bnRQYWludGVyOjpjcmVhdGUodGhpcykpOworI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykK
KyAgICAgICAgdXBkYXRlTGF5ZXJSZW5kZXJlclNldHRpbmdzKCk7CisjZW5kaWYKICAgICAgICAg
aWYgKG1fbGF5ZXJSZW5kZXJlcikgewogICAgICAgICAgICAgbV9jbGllbnQtPmRpZEFjdGl2YXRl
QWNjZWxlcmF0ZWRDb21wb3NpdGluZyh0cnVlKTsKICAgICAgICAgICAgIG1faXNBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nQWN0aXZlID0gdHJ1ZTsKQEAgLTI0MzYsMjQgKzI0NjEsMjggQEAgdm9pZCBX
ZWJWaWV3SW1wbDo6ZG9Db21wb3NpdGUoKQogICAgIGlmICghcGFnZSgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBtX2xheWVyUmVuZGVyZXItPnNldENvbXBvc2l0ZU9mZnNjcmVlbihzZXR0aW5n
cygpLT5jb21wb3NpdGVUb1RleHR1cmVFbmFibGVkKCkpOwotCi0gICAgQ0NIZWFkc1VwRGlzcGxh
eSogaHVkID0gbV9sYXllclJlbmRlcmVyLT5oZWFkc1VwRGlzcGxheSgpOwotICAgIGh1ZC0+c2V0
U2hvd0ZQU0NvdW50ZXIoc2V0dGluZ3MoKS0+c2hvd0ZQU0NvdW50ZXIoKSk7Ci0gICAgaHVkLT5z
ZXRTaG93UGxhdGZvcm1MYXllclRyZWUoc2V0dGluZ3MoKS0+c2hvd1BsYXRmb3JtTGF5ZXJUcmVl
KCkpOworICAgIG1fbGF5ZXJSZW5kZXJlci0+dXBkYXRlTGF5ZXJzKCk7CisgICAgbV9sYXllclJl
bmRlcmVyLT5kcmF3TGF5ZXJzKCk7Cit9CiAKLSAgICBtX2xheWVyUmVuZGVyZXItPnVwZGF0ZUFu
ZERyYXdMYXllcnMoKTsKK1Bhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IFdlYlZpZXdJbXBs
OjpjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCkKK3sKKyAgICBSZWZQdHI8R3JhcGhpY3ND
b250ZXh0M0Q+IGNvbnRleHQgPSBtX3RlbXBvcmFyeU9uc2NyZWVuR3JhcGhpY3NDb250ZXh0M0Qu
cmVsZWFzZSgpOworICAgIGlmICghY29udGV4dCkgeworICAgICAgICBjb250ZXh0ID0gR3JhcGhp
Y3NDb250ZXh0M0Q6OmNyZWF0ZShnZXRDb21wb3NpdG9yQ29udGV4dEF0dHJpYnV0ZXMoKSwgbV9w
YWdlLT5jaHJvbWUoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2lu
ZG93KTsKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgICAgICBjb250ZXh0LT5yZXNoYXBl
KHN0ZDo6bWF4KDEsIG1fc2l6ZS53aWR0aCksIHN0ZDo6bWF4KDEsIG1fc2l6ZS5oZWlnaHQpKTsK
KyAgICB9CisgICAgcmV0dXJuIGNvbnRleHQ7CiB9CiAKIHZvaWQgV2ViVmlld0ltcGw6OnJlYWxs
b2NhdGVSZW5kZXJlcigpCiB7Ci0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBuZXdDb250
ZXh0ID0gbV90ZW1wb3JhcnlPbnNjcmVlbkdyYXBoaWNzQ29udGV4dDNELmdldCgpOwotICAgIFdl
YkdyYXBoaWNzQ29udGV4dDNEKiB3ZWJDb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29udGV4dDNEKG5ld0NvbnRleHQuZ2V0KCkpOwotICAgIGlm
ICghbmV3Q29udGV4dCB8fCAhd2ViQ29udGV4dCB8fCB3ZWJDb250ZXh0LT5pc0NvbnRleHRMb3N0
KCkpCi0gICAgICAgIG5ld0NvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKAotICAg
ICAgICAgICAgZ2V0Q29tcG9zaXRvckNvbnRleHRBdHRyaWJ1dGVzKCksIG1fcGFnZS0+Y2hyb21l
KCksIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7CiAgICAg
Ly8gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSBtaWdodCBmYWlsIGFuZCByZXR1cm4gMCwgaW4g
dGhhdCBjYXNlIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlIHdpbGwgYWxzbyByZXR1cm4g
MC4KLSAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyID0gTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUobmV3Q29udGV4dCwgV2ViVmlld0ltcGxDb250ZW50
UGFpbnRlcjo6Y3JlYXRlKHRoaXMpKTsKKyAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVt
PiBsYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUodGhpcywgV2Vi
Vmlld0ltcGxDb250ZW50UGFpbnRlcjo6Y3JlYXRlKHRoaXMpKTsKKyNpZiBVU0UoVEhSRUFERURf
Q09NUE9TSVRJTkcpCisgICAgdXBkYXRlTGF5ZXJSZW5kZXJlclNldHRpbmdzKCk7CisjZW5kaWYK
IAogICAgIC8vIFJlYXR0YWNoIHRoZSByb290IGxheWVyLiAgQ2hpbGQgbGF5ZXJzIHdpbGwgZ2V0
IHJlYXR0YWNoZWQgYXMgYSBzaWRlIGVmZmVjdCBvZiB1cGRhdGVMYXllcnNSZWN1cnNpdmUuCiAg
ICAgaWYgKGxheWVyUmVuZGVyZXIpIHsKQEAgLTI0NjQsNyArMjQ5Myw3IEBAIHZvaWQgV2ViVmll
d0ltcGw6OnJlYWxsb2NhdGVSZW5kZXJlcigpCiAgICAgICAgIC8vIHJlc2hhcGUgc2hvdWxkIHJl
YWxseSBiZSBleHRyYWN0ZWQgaW50byBvbmUgZnVuY3Rpb247IGl0IGlzIG5vdAogICAgICAgICAv
LyBpbW1lZGlhdGVseSBvYnZpb3VzIHRoYXQgR3JhcGhpY3NDb250ZXh0M0Qgb2JqZWN0IHdpbGwg
bm90CiAgICAgICAgIC8vIGZ1bmN0aW9uIHByb3Blcmx5IHVudGlsIGl0cyByZXNoYXBlIG1ldGhv
ZCBpcyBjYWxsZWQuCi0gICAgICAgIG5ld0NvbnRleHQtPnJlc2hhcGUoc3RkOjptYXgoMSwgbV9z
aXplLndpZHRoKSwgc3RkOjptYXgoMSwgbV9zaXplLmhlaWdodCkpOworICAgICAgICBsYXllclJl
bmRlcmVyLT5jb250ZXh0KCktPnJlc2hhcGUoc3RkOjptYXgoMSwgbV9zaXplLndpZHRoKSwgc3Rk
OjptYXgoMSwgbV9zaXplLmhlaWdodCkpOwogICAgICAgICBzZXRSb290R3JhcGhpY3NMYXllciht
X2xheWVyUmVuZGVyZXItPnJvb3RMYXllcigpKTsKICAgICAgICAgLy8gRm9yY2VzIFZpZXdIb3N0
TXNnX0RpZEFjdGl2YXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyB0byBiZSBzZW50IHNvCiAgICAg
ICAgIC8vIHRoYXQgdGhlIGJyb3dzZXIgcHJvY2VzcyBjYW4gcmVhY3F1aXJlIHN1cmZhY2VzLgpA
QCAtMjQ3NCw5ICsyNTAzLDIwIEBAIHZvaWQgV2ViVmlld0ltcGw6OnJlYWxsb2NhdGVSZW5kZXJl
cigpCiB9CiAjZW5kaWYKIAotdm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlTGF5ZXJSZW5kZXJlclZp
ZXdwb3J0KCkKK3ZvaWQgV2ViVmlld0ltcGw6OnVwZGF0ZUxheWVyUmVuZGVyZXJTZXR0aW5ncygp
CiB7CiAgICAgQVNTRVJUKG1fbGF5ZXJSZW5kZXJlcik7CisgICAgbV9sYXllclJlbmRlcmVyLT5z
ZXRDb21wb3NpdGVPZmZzY3JlZW4oc2V0dGluZ3MoKS0+Y29tcG9zaXRlVG9UZXh0dXJlRW5hYmxl
ZCgpKTsKKworICAgIENDSGVhZHNVcERpc3BsYXkqIGh1ZCA9IG1fbGF5ZXJSZW5kZXJlci0+aGVh
ZHNVcERpc3BsYXkoKTsKKyAgICBodWQtPnNldFNob3dGUFNDb3VudGVyKHNldHRpbmdzKCktPnNo
b3dGUFNDb3VudGVyKCkpOworICAgIGh1ZC0+c2V0U2hvd1BsYXRmb3JtTGF5ZXJUcmVlKHNldHRp
bmdzKCktPnNob3dQbGF0Zm9ybUxheWVyVHJlZSgpKTsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6
dXBkYXRlTGF5ZXJSZW5kZXJlclZpZXdwb3J0KCkKK3sKKyAgICBpZiAoIW1fbGF5ZXJSZW5kZXJl
cikKKyAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFwYWdlKCkpCiAgICAgICAgIHJldHVybjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmggYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCmluZGV4IGYxMDIwMmY3NmRh
NmNkZTMyNjU5MDliNGZlNjVmNzBhYWRiOGJmOTMuLjc3YzUxYWQ4MjE0MzMwMjYzYWRmMTBiYmRl
MzA0OTU4NGQwNDIzMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwu
aApAQCAtNTUsNiArNTUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDaHJvbWl1bURh
dGFPYmplY3Q7CiBjbGFzcyBEb2N1bWVudExvYWRlcjsKIGNsYXNzIEZyYW1lOworY2xhc3MgR3Jh
cGhpY3NDb250ZXh0M0Q7CiBjbGFzcyBIaXN0b3J5SXRlbTsKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7
CiBjbGFzcyBLZXlib2FyZEV2ZW50OwpAQCAtODYsMTcgKzg3LDE4IEBAIGNsYXNzIFdlYk1vdXNl
V2hlZWxFdmVudDsKIGNsYXNzIFdlYlNldHRpbmdzSW1wbDsKIGNsYXNzIFdlYlRvdWNoRXZlbnQ7
CiAKLWNsYXNzIFdlYlZpZXdJbXBsIDogcHVibGljIFdlYlZpZXcsIHB1YmxpYyBSZWZDb3VudGVk
PFdlYlZpZXdJbXBsPiB7CitjbGFzcyBXZWJWaWV3SW1wbCA6IHB1YmxpYyBXZWJWaWV3LCBwdWJs
aWMgV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Q2xpZW50LCBwdWJsaWMgUmVmQ291bnRlZDxXZWJW
aWV3SW1wbD4gewogcHVibGljOgogICAgIC8vIFdlYldpZGdldCBtZXRob2RzOgogICAgIHZpcnR1
YWwgdm9pZCBjbG9zZSgpOwogICAgIHZpcnR1YWwgV2ViU2l6ZSBzaXplKCkgeyByZXR1cm4gbV9z
aXplOyB9CiAgICAgdmlydHVhbCB2b2lkIHJlc2l6ZShjb25zdCBXZWJTaXplJik7Ci0gICAgdmly
dHVhbCB2b2lkIGFuaW1hdGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZShkb3VibGUgZnJh
bWVCZWdpblRpbWUpOwogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKICAgICB2aXJ0dWFsIHZv
aWQgcGFpbnQoV2ViQ2FudmFzKiwgY29uc3QgV2ViUmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCB0
aGVtZUNoYW5nZWQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29tcG9zaXRlKGJvb2wgZmluaXNoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgY29tcG9zaXRlKCk7CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxl
Q29tcG9zaXRlKCk7CiAgICAgdmlydHVhbCBib29sIGhhbmRsZUlucHV0RXZlbnQoY29uc3QgV2Vi
SW5wdXRFdmVudCYpOwogICAgIHZpcnR1YWwgdm9pZCBtb3VzZUNhcHR1cmVMb3N0KCk7CiAgICAg
dmlydHVhbCB2b2lkIHNldEZvY3VzKGJvb2wgZW5hYmxlKTsKQEAgLTE5Niw2ICsxOTgsMTEgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5h
Y3RpdmVGb3JlZ3JvdW5kQ29sb3IpOwogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtQ3VzdG9tQ29u
dGV4dE1lbnVBY3Rpb24odW5zaWduZWQgYWN0aW9uKTsKIAorICAgIC8vIENDTGF5ZXJUcmVlSG9z
dENsaWVudAorICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJl
Z2luVGltZSk7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRD4gY3Jl
YXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpOworCisKICAgICAvLyBXZWJWaWV3SW1wbAogCiAg
ICAgdm9pZCBzZXRJZ25vcmVJbnB1dEV2ZW50cyhib29sIG5ld1ZhbHVlKTsKQEAgLTMzOSw2ICsz
NDYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKTsKICAg
ICB2b2lkIHNjcm9sbFJvb3RMYXllclJlY3QoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xs
RGVsdGEsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KTsKICAgICB2b2lkIGludmFs
aWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2b2lkIGRv
VXBkYXRlQW5kQ29tcG9zaXRlKCk7CiAjZW5kaWYKIAogICAgIC8vIFJldHVybnMgdGhlIG9uc2Ny
ZWVuIDNEIGNvbnRleHQgdXNlZCBieSB0aGUgY29tcG9zaXRvci4gVGhpcyBpcwpAQCAtNDAyLDEx
ICs0MTAsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgV2ViUG9pbnQmIHNjcmVlblBvaW50LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEcmFnQWN0aW9uKTsKIAorCiAjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbXBv
c2l0aW5nQWN0aXZlKGJvb2wpOwogICAgIHZvaWQgZG9Db21wb3NpdGUoKTsKICAgICB2b2lkIGRv
UGl4ZWxSZWFkYmFja1RvQ2FudmFzKFdlYkNhbnZhcyosIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
KTsKICAgICB2b2lkIHJlYWxsb2NhdGVSZW5kZXJlcigpOworICAgIHZvaWQgdXBkYXRlTGF5ZXJS
ZW5kZXJlclNldHRpbmdzKCk7CiAgICAgdm9pZCB1cGRhdGVMYXllclJlbmRlcmVyVmlld3BvcnQo
KTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
TGF5ZXJUcmVlSG9zdFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xh
eWVyVHJlZUhvc3RUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNWE0MzY1Y2FiYWRiMzMwMWFkZGRmODkx
NDJmNDJmNzY0NmRmZmM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcApAQCAtMCwwICsxLDUzMiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lU
SU5HKQorCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCisKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKKyNp
bmNsdWRlICJjYy9DQ01haW5UaHJlYWRUYXNrLmgiCisjaW5jbHVkZSAiY2MvQ0NUaHJlYWRUYXNr
LmgiCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQvc3VwcG9ydC93
ZWJraXRfc3VwcG9ydC5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgeworCitj
bGFzcyBNb2NrTGF5ZXJUcmVlSG9zdDsKK2NsYXNzIE1vY2tMYXllclRyZWVIb3N0Q2xpZW50Owor
Y2xhc3MgTW9ja0xheWVyVHJlZUhvc3RJbXBsOworCisvLyBUaGUgQ0NMYXllclRyZWVIb3N0VGVz
dCBydW5zIHdpdGggdGhlIG1haW4gbG9vcCBydW5uaW5nLiBJdCBpbnN0YW50aWF0ZXMgYSBzaW5n
bGUgTW9ja0xheWVyVHJlZUhvc3QgYW5kIGFzc29jaWF0ZWQKKy8vIE1vY2tMYXllclRyZWVIb3N0
SW1wbC9Nb2NrTGF5ZXJUcmVlSG9zdENsaWVudC4KKy8vCisvLyBiZWdpblRlc3QoKSBpcyBjYWxs
ZWQgb25jZSB0aGUgbWFpbiBtZXNzYWdlIGxvb3AgaXMgcnVubmluZyBhbmQgdGhlIGxheWVyIHRy
ZWUgaG9zdCBpcyBpbml0aWFsaXplZC4KKy8vCisvLyBLZXkgc3RhZ2VzIG9mIHRoZSBkcmF3aW5n
IGxvb3AsIGUuZy4gZHJhd2luZyBvciBjb21taXRpbmcsIHJlZGlyZWN0IHRvIENDTGF5ZXJUcmVl
SG9zdFRlc3QgbWV0aG9kcyBvZiBzaW1pbGFyIG5hbWVzLgorLy8gVG8gdHJhY2sgdGhlIGNvbW1p
dCBwcm9jZXNzLCBvdmVycmlkZSB0aGVzZSBmdW5jdGlvbnMuCisvLworLy8gVGhlIHRlc3QgY29u
dGludWVzIHVudGlsIHNvbWVvbmUgY2FsbHMgZW5kVGVzdC4gZW5kVGVzdCBjYW4gYmUgY2FsbGVk
IG9uIGFueSB0aHJlYWQsIGJ1dCBiZSBhd2FyZSB0aGF0CisvLyBlbmRpbmcgdGhlIHRlc3QgaXMg
YW4gYXN5bmNocm9ub3VzIHByb2Nlc3MuCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0IDogcHVi
bGljIHRlc3Rpbmc6OlRlc3QgeworcHVibGljOgorICAgIENDTGF5ZXJUcmVlSG9zdFRlc3QoKQor
ICAgICAgICA6IG1fYmVnaW5uaW5nKGZhbHNlKQorICAgICAgICAsIG1fZW5kV2hlbkJlZ2luUmV0
dXJucyhmYWxzZSkKKyAgICAgICAgLCBtX3J1bm5pbmcoZmFsc2UpCisgICAgICAgICwgbV90aW1l
ZE91dChmYWxzZSkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkgPSAwOworCisg
ICAgdmlydHVhbCB2b2lkIGJlZ2luVGVzdCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0
ZUFuZExheW91dChNb2NrTGF5ZXJUcmVlSG9zdENsaWVudCogbGF5ZXJUcmVlSG9zdCwgZG91Ymxl
IGZyYW1lQmVnaW5UaW1lKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21taXRPbkNDVGhy
ZWFkKE1vY2tMYXllclRyZWVIb3N0SW1wbCogbGF5ZXJUcmVlSG9zdEltcGwpIHsgfQorICAgIHZp
cnR1YWwgdm9pZCBiZWdpbkNvbW1pdE9uTWFpblRocmVhZChNb2NrTGF5ZXJUcmVlSG9zdCogbGF5
ZXJUcmVlSG9zdCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGNvbW1pdE9uQ0NUaHJlYWQoTW9ja0xh
eWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QsIE1vY2tMYXllclRyZWVIb3N0SW1wbCogbGF5ZXJU
cmVlSG9zdEltcGwpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjb21taXRDb21wbGV0ZU9uQ0NUaHJl
YWQoTW9ja0xheWVyVHJlZUhvc3RJbXBsKiBsYXllclRyZWVIb3N0SW1wbCkgeyB9CisgICAgdmly
dHVhbCB2b2lkIGNvbW1pdENvbXBsZXRlT25NYWluVGhyZWFkKE1vY2tMYXllclRyZWVIb3N0KiBs
YXllclRyZWVIb3N0KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVyc0FuZFByZXNlbnRP
bkNDVGhyZWFkKE1vY2tMYXllclRyZWVIb3N0SW1wbCogbGF5ZXJUcmVlSG9zdEltcGwpIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVMYXllcnMoTW9ja0xheWVyVHJlZUhvc3QqIGxheWVyVHJl
ZUhvc3QpIHsgfQorCisgICAgdm9pZCBlbmRUZXN0KCk7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lk
IGRvQmVnaW5UZXN0KCk7CisKKyAgICBzdGF0aWMgdm9pZCBvbkJlZ2luVGVzdCh2b2lkKiBzZWxm
KQorICAgIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8Q0NMYXllclRyZWVIb3N0VGVzdCo+KHNlbGYp
LT5kb0JlZ2luVGVzdCgpOworICAgIH0KKworICAgIHZvaWQgZG9FbmRUZXN0KCkKKyAgICB7Cisg
ICAgfQorCisgICAgc3RhdGljIHZvaWQgb25FbmRUZXN0KHZvaWQqIHNlbGYpCisgICAgeworICAg
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgICAgICBDQ0xheWVyVHJlZUhvc3RUZXN0
KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8Q0NMYXllclRyZWVIb3N0VGVzdCo+KHNlbGYpOworICAgICAg
ICB0ZXN0LT5tX2xheWVyVHJlZUhvc3QuY2xlYXIoKTsKKyAgICAgICAgdGVzdC0+bV9jbGllbnQu
Y2xlYXIoKTsKKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlF1aXRNZXNzYWdlTG9vcCgpOworICAg
IH0KKworICAgIHZvaWQgcnVuVGVzdCgpCisgICAgeworICAgICAgICB3ZWJraXRfc3VwcG9ydDo6
UG9zdERlbGF5ZWRUYXNrKENDTGF5ZXJUcmVlSG9zdFRlc3Q6Om9uQmVnaW5UZXN0LCBzdGF0aWNf
Y2FzdDx2b2lkKj4odGhpcyksIDApOworICAgICAgICB3ZWJraXRfc3VwcG9ydDo6UG9zdERlbGF5
ZWRUYXNrKENDTGF5ZXJUcmVlSG9zdFRlc3Q6OnRlc3RUaW1lb3V0LCBzdGF0aWNfY2FzdDx2b2lk
Kj4odGhpcyksIDUwMDApOworICAgICAgICB3ZWJraXRfc3VwcG9ydDo6UnVuTWVzc2FnZUxvb3Ao
KTsKKyAgICAgICAgbV9ydW5uaW5nID0gZmFsc2U7CisgICAgICAgIGJvb2wgdGltZWRPdXQgPSBt
X3RpbWVkT3V0OyAvLyBTYXZlIHdoZXRoZXIgd2UncmUgdGltZWQgb3V0IGluIGNhc2UgUnVuQWxs
UGVuZGluZ01lc3NhZ2VzIGhhcyB0aGUgdGltZW91dC4KKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6
OlJ1bkFsbFBlbmRpbmdNZXNzYWdlcygpOworICAgICAgICBpZiAodGltZWRPdXQpIHsKKyAgICAg
ICAgICAgIHByaW50ZigiVGVzdCB0aW1lZCBvdXQiKTsKKyAgICAgICAgICAgIEZBSUwoKSA8PCAi
VGVzdCB0aW1lZCBvdXQiOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IGFmdGVyVGVzdCgpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHRlc3RUaW1lb3V0KHZvaWQq
IHNlbGYpCisgICAgeworICAgICAgICBDQ0xheWVyVHJlZUhvc3RUZXN0KiB0ZXN0ID0gc3RhdGlj
X2Nhc3Q8Q0NMYXllclRyZWVIb3N0VGVzdCo+KHNlbGYpOworICAgICAgICBpZiAoIXRlc3QtPm1f
cnVubmluZykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGVzdC0+bV90aW1lZE91dCA9
IHRydWU7CisgICAgICAgIHRlc3QtPmVuZFRlc3QoKTsKKyAgICB9CisKKyAgICBNdXRleCBtX3Ry
YWNlc0xvY2s7CisgICAgVmVjdG9yPHN0ZDo6c3RyaW5nPiBtX3RyYWNlczsKKworICAgIE93blB0
cjxNb2NrTGF5ZXJUcmVlSG9zdENsaWVudD4gbV9jbGllbnQ7CisgICAgUmVmUHRyPE1vY2tMYXll
clRyZWVIb3N0PiBtX2xheWVyVHJlZUhvc3Q7CisKK3ByaXZhdGU6CisgICAgYm9vbCBtX2JlZ2lu
bmluZzsKKyAgICBib29sIG1fZW5kV2hlbkJlZ2luUmV0dXJuczsKKyAgICBib29sIG1fcnVubmlu
ZzsKKyAgICBib29sIG1fdGltZWRPdXQ7Cit9OworCitjbGFzcyBNb2NrTGF5ZXJUcmVlSG9zdENs
aWVudCA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RDbGllbnQgeworcHVibGljOgorICAgIE1vY2tM
YXllclRyZWVIb3N0Q2xpZW50KENDTGF5ZXJUcmVlSG9zdFRlc3QqIHRlc3QpIDogbV90ZXN0KHRl
c3QpIHsgfQorCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjcmVh
dGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZjxHcmFwaGljc0NvbnRleHQzRD4oMCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFuaW1h
dGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQorICAgIHsKKyAgICAgICAgbV90ZXN0
LT5hbmltYXRlQW5kTGF5b3V0KHRoaXMsIGZyYW1lQmVnaW5UaW1lKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdCogbV90ZXN0OworfTsKKworY2xhc3MgTW9ja0xh
eWVyVHJlZUhvc3RDb21taXR0ZXIgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxNb2NrTGF5ZXJUcmVlSG9zdENvbW1pdHRl
cj4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRQdHIobmV3IE1vY2tMYXllclRyZWVIb3N0Q29tbWl0dGVyKHRlc3QpKTsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0KENDTGF5ZXJUcmVlSG9zdCogaG9zdCwgQ0NMYXll
clRyZWVIb3N0SW1wbCogaG9zdEltcGwpCisgICAgeworICAgICAgICBDQ0xheWVyVHJlZUhvc3RD
b21taXR0ZXI6OmNvbW1pdChob3N0LCBob3N0SW1wbCk7CisgICAgICAgIG1fdGVzdC0+Y29tbWl0
T25DQ1RocmVhZChyZWludGVycHJldF9jYXN0PE1vY2tMYXllclRyZWVIb3N0Kj4oaG9zdCksIHJl
aW50ZXJwcmV0X2Nhc3Q8TW9ja0xheWVyVHJlZUhvc3RJbXBsKj4oaG9zdEltcGwpKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgTW9ja0xheWVyVHJlZUhvc3RDb21taXR0ZXIoQ0NMYXllclRyZWVI
b3N0VGVzdCogdGVzdCkgOiBtX3Rlc3QodGVzdCkgeyB9CisgICAgQ0NMYXllclRyZWVIb3N0VGVz
dCogbV90ZXN0OworfTsKKworY2xhc3MgTW9ja0xheWVyVHJlZUhvc3RJbXBsIDogcHVibGljIEND
TGF5ZXJUcmVlSG9zdEltcGwgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPE1vY2tM
YXllclRyZWVIb3N0SW1wbD4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqIGNsaWVu
dCwgQ0NMYXllclRyZWVIb3N0VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFB0cihuZXcgTW9ja0xheWVyVHJlZUhvc3RJbXBsKGNsaWVudCwgdGVzdCkpOworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdCgpCisgICAgeworICAgICAgICBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpiZWdpbkNvbW1pdCgpOworICAgICAgICBtX3Rlc3QtPmJlZ2luQ29tbWl0T25D
Q1RocmVhZCh0aGlzKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q29tcGxldGUo
KQorICAgIHsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29tbWl0Q29tcGxldGUoKTsK
KyAgICAgICAgbV90ZXN0LT5jb21taXRDb21wbGV0ZU9uQ0NUaHJlYWQodGhpcyk7CisgICAgfQor
CisgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNBbmRQcmVzZW50KCkKKyAgICB7CisgICAgICAg
IG1fdGVzdC0+ZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhyZWFkKHRoaXMpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBNb2NrTGF5ZXJUcmVlSG9zdEltcGwoQ0NMYXllclRyZWVIb3N0SW1wbENs
aWVudCogY2xpZW50LCBDQ0xheWVyVHJlZUhvc3RUZXN0KiB0ZXN0KQorICAgICAgICAgICAgOiBD
Q0xheWVyVHJlZUhvc3RJbXBsKGNsaWVudCkKKyAgICAgICAgICAgICwgbV90ZXN0KHRlc3QpCisg
ICAgeworICAgIH0KKworICAgIENDTGF5ZXJUcmVlSG9zdFRlc3QqIG1fdGVzdDsKK307CisKK2Ns
YXNzIE1vY2tMYXllclRyZWVIb3N0SW1wbFByb3h5IDogcHVibGljIENDTGF5ZXJUcmVlSG9zdElt
cGxQcm94eSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8TW9ja0xheWVyVHJlZUhv
c3RJbXBsUHJveHk+IGNyZWF0ZShDQ0xheWVyVHJlZUhvc3QqIGhvc3QsIENDTGF5ZXJUcmVlSG9z
dFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE1vY2tMYXll
clRyZWVIb3N0SW1wbFByb3h5KGhvc3QsIHRlc3QpKTsKKyAgICB9CisKKyAgICBQYXNzT3duUHRy
PENDTGF5ZXJUcmVlSG9zdEltcGw+IGNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBNb2NrTGF5ZXJUcmVlSG9zdEltcGw6OmNyZWF0ZSh0aGlzLCBtX3Rlc3Qp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBNb2NrTGF5ZXJUcmVlSG9zdEltcGxQcm94eShDQ0xh
eWVyVHJlZUhvc3QqIGhvc3QsIENDTGF5ZXJUcmVlSG9zdFRlc3QqIHRlc3QpCisgICAgICAgIDog
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5KGhvc3QpCisgICAgICAgICwgbV90ZXN0KHRlc3QpIHsg
fQorCisgICAgQ0NMYXllclRyZWVIb3N0VGVzdCogbV90ZXN0OworfTsKKworY2xhc3MgTW9ja0xh
eWVyVHJlZUhvc3QgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0IHsKK3B1YmxpYzoKKyAgICBNb2Nr
TGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVudCwgQ0NMYXllclRyZWVI
b3N0VGVzdCogdGVzdCkKKyAgICAgICAgOiBDQ0xheWVyVHJlZUhvc3QoY2xpZW50KQorICAgICAg
ICAsIG1fdGVzdCh0ZXN0KSB7IH0KKworICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVyVHJl
ZUhvc3RJbXBsUHJveHk+IGNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsUHJveHkoKQorICAgIHsKKyAg
ICAgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eT4gcHJveHkgPSBNb2NrTGF5ZXJU
cmVlSG9zdEltcGxQcm94eTo6Y3JlYXRlKHRoaXMsIG1fdGVzdCk7CisgICAgICAgIHByb3h5LT5z
dGFydCgpOworICAgICAgICByZXR1cm4gcHJveHkucmVsZWFzZSgpOworICAgIH0KKworICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVMYXllcnMoKQorICAgIHsKKyAgICAgICAgbV90ZXN0LT51cGRhdGVM
YXllcnModGhpcyk7CisgICAgfQorCisgICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5ZXJUcmVl
SG9zdENvbW1pdHRlcj4gY3JlYXRlTGF5ZXJUcmVlSG9zdENvbW1pdHRlcigpCisgICAgeworICAg
ICAgICByZXR1cm4gTW9ja0xheWVyVHJlZUhvc3RDb21taXR0ZXI6OmNyZWF0ZShtX3Rlc3QpOwor
ICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdCgpCisgICAgeworICAgICAgICBD
Q0xheWVyVHJlZUhvc3Q6OmJlZ2luQ29tbWl0KCk7CisgICAgICAgIG1fdGVzdC0+YmVnaW5Db21t
aXRPbk1haW5UaHJlYWQodGhpcyk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGNvbW1pdENv
bXBsZXRlKCkKKyAgICB7CisgICAgICAgIG1fdGVzdC0+Y29tbWl0Q29tcGxldGVPbk1haW5UaHJl
YWQodGhpcyk7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0Q29tcGxldGUoKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdCogbV90ZXN0OworfTsKKwor
dm9pZCBDQ0xheWVyVHJlZUhvc3RUZXN0Ojpkb0JlZ2luVGVzdCgpCit7CisgICAgQVNTRVJUKCFt
X3J1bm5pbmcpOworICAgIG1fcnVubmluZyA9IHRydWU7CisgICAgbV9jbGllbnQgPSBhZG9wdFB0
cihuZXcgTW9ja0xheWVyVHJlZUhvc3RDbGllbnQodGhpcykpOworICAgIG1fbGF5ZXJUcmVlSG9z
dCA9IGFkb3B0UmVmKG5ldyBNb2NrTGF5ZXJUcmVlSG9zdChtX2NsaWVudC5nZXQoKSwgdGhpcykp
OworICAgIG1fbGF5ZXJUcmVlSG9zdC0+aW5pdCgpOworICAgIG1fYmVnaW5uaW5nID0gdHJ1ZTsK
KyAgICBiZWdpblRlc3QoKTsKKyAgICBtX2JlZ2lubmluZyA9IGZhbHNlOworICAgIGlmIChtX2Vu
ZFdoZW5CZWdpblJldHVybnMpCisgICAgICAgIG9uRW5kVGVzdChzdGF0aWNfY2FzdDx2b2lkKj4o
dGhpcykpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdFRlc3Q6OmVuZFRlc3QoKQoreworICAg
IC8vIElmIHdlIGFyZSBjYWxsZWQgZnJvbSB0aGUgQ0NUaHJlYWQsIHJlLWNhbGwgZW5kVGVzdCBv
biB0aGUgbWFpbiB0aHJlYWQuCisgICAgaWYgKCFpc01haW5UaHJlYWQoKSkKKyAgICAgICAgQ0NN
YWluVGhyZWFkOjpwb3N0VGFzayhjcmVhdGVNYWluVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRy
ZWVIb3N0VGVzdDo6ZW5kVGVzdCkpOworICAgIGVsc2UgeworICAgICAgICAvLyBGb3IgdGhlIGNh
c2Ugd2hlcmUgd2UgZW5kVGVzdCBkdXJpbmcgYmVnaW5UZXN0KCksIHNldCBhIGZsYWcgdG8gaW5k
aWNhdGUgdGhhdAorICAgICAgICAvLyB0aGUgdGVzdCBzaG91bGQgZW5kIHRoZSBzZWNvbmQgYmVn
aW5UZXN0IHJlZ2FpbnMgY29udHJvbC4KKyAgICAgICAgaWYgKG1fYmVnaW5uaW5nKQorICAgICAg
ICAgICAgbV9lbmRXaGVuQmVnaW5SZXR1cm5zID0gdHJ1ZTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgb25FbmRUZXN0KHN0YXRpY19jYXN0PHZvaWQqPih0aGlzKSk7CisgICAgfQorfQorCisv
LyBTaG9ydGxpdmVkIGxheWVyVHJlZUhvc3RzIHNob3VsZG4ndCBkaWUuCitjbGFzcyBDQ0xheWVy
VHJlZUhvc3RUZXN0U2hvcnRsaXZlZDEgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdCB7Citw
dWJsaWM6CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQxKCkgeyB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkKKyAgICB7CisgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkKKyAgICB7CisgICAgfQorfTsKK1RFU1Rf
RihDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDEsIHJ1bikKK3sKKyAgICBydW5UZXN0KCk7
Cit9CisKKy8vIFNob3J0bGl2ZWQgbGF5ZXJUcmVlSG9zdHMgc2hvdWxkbid0IGRpZSB3aXRoIGEg
Y29tbWl0IGluIGZsaWdodC4KK2NsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3RTaG9ydGxpdmVkMiA6
IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0IHsKK3B1YmxpYzoKKyAgICBDQ0xheWVyVHJlZUhv
c3RUZXN0U2hvcnRsaXZlZDIoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKQor
ICAgIHsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXROZWVkc0NvbW1pdEFuZFJlZHJhdygp
OworICAgICAgICBlbmRUZXN0KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFmdGVyVGVz
dCgpCisgICAgeworICAgIH0KK307CitURVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2
ZWQyLCBydW4pCit7CisgICAgcnVuVGVzdCgpOworfQorCisvLyBTaG9ydGxpdmVkIGxheWVyVHJl
ZUhvc3RzIHNob3VsZG4ndCBkaWUgd2l0aCBhIHJlZHJhdyBpbiBmbGlnaHQuCitjbGFzcyBDQ0xh
eWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDMgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdCB7
CitwdWJsaWM6CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQzKCkgeyB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkKKyAgICB7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9z
dC0+c2V0TmVlZHNSZWRyYXcoKTsKKyAgICAgICAgZW5kVGVzdCgpOworICAgIH0KKworICAgIHZp
cnR1YWwgdm9pZCBhZnRlclRlc3QoKQorICAgIHsKKyAgICB9Cit9OworVEVTVF9GKENDTGF5ZXJU
cmVlSG9zdFRlc3RTaG9ydGxpdmVkMywgcnVuKQoreworICAgIHJ1blRlc3QoKTsKK30KKworLy8g
Q29uc3RhbnRseSByZWRyYXdpbmcgbGF5ZXJUcmVlSG9zdHMgc2hvdWxkbid0IGRpZSB3aGVuIHRo
ZXkgY29tbWl0CitjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0Q29tbWl0aW5nV2l0aENvbnRpbnVv
dXNSZWRyYXcgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdCB7CitwdWJsaWM6CisgICAgQ0NM
YXllclRyZWVIb3N0VGVzdENvbW1pdGluZ1dpdGhDb250aW51b3VzUmVkcmF3KCkKKyAgICAgICAg
OiBtX251bUNvbXBsZXRlQ29tbWl0cygwKQorICAgICAgICAsIG1fbnVtRHJhd3MoMCkKKyAgICB7
CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGJlZ2luVGVzdCgpCisgICAgeworICAgICAgICBt
X2xheWVyVHJlZUhvc3QtPnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgICAgIGVuZFRl
c3QoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q29tcGxldGVPbkNDVGhyZWFk
KE1vY2tMYXllclRyZWVIb3N0SW1wbCogbGF5ZXJUcmVlSG9zdEltcGwpCisgICAgeworICAgICAg
ICBtX251bUNvbXBsZXRlQ29tbWl0cysrOworICAgICAgICBpZiAobV9udW1Db21wbGV0ZUNvbW1p
dHMgPT0gMikKKyAgICAgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhyZWFkKE1vY2tMYXllclRyZWVIb3N0SW1wbCog
bGF5ZXJUcmVlSG9zdEltcGwpCisgICAgeworICAgICAgICBpZiAobV9udW1EcmF3cyA9PSAxKQor
ICAgICAgICAgICAgbGF5ZXJUcmVlSG9zdEltcGwtPnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7
CisgICAgICAgIG1fbnVtRHJhd3MrKzsKKyAgICAgICAgbGF5ZXJUcmVlSG9zdEltcGwtPnNldE5l
ZWRzUmVkcmF3KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFmdGVyVGVzdCgpCisgICAg
eworICAgIH0KKworcHJpdmF0ZToKKyAgICBpbnQgbV9udW1Db21wbGV0ZUNvbW1pdHM7CisgICAg
aW50IG1fbnVtRHJhd3M7Cit9OworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RDb21taXRpbmdX
aXRoQ29udGludW91c1JlZHJhdywgcnVuKQoreworICAgIHJ1blRlc3QoKTsKK30KKworLy8gVHdv
IHNldE5lZWRzQ29tbWl0cyBpbiBhIHJvdyBzaG91bGQgbGVhZCB0byBhdCBsZWFzdCAxIGNvbW1p
dCBhbmQgYXQgbGVhc3QgMQorLy8gZHJhdyB3aXRoIGZyYW1lIDAuCitjbGFzcyBDQ0xheWVyVHJl
ZUhvc3RUZXN0U2V0TmVlZHNDb21taXQxIDogcHVibGljIENDTGF5ZXJUcmVlSG9zdFRlc3Qgewor
cHVibGljOgorICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc0NvbW1pdDEoKQorICAgICAg
ICA6IG1fbnVtQ29tbWl0cygwKQorICAgICAgICAsIG1fbnVtRHJhd3MoMCkKKyAgICB7CisgICAg
fQorCisgICAgdmlydHVhbCB2b2lkIGJlZ2luVGVzdCgpCisgICAgeworICAgICAgICBtX2xheWVy
VHJlZUhvc3QtPnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgICAgIG1fbGF5ZXJUcmVl
SG9zdC0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhyZWFkKE1vY2tMYXllclRyZWVIb3N0SW1wbCog
bGF5ZXJUcmVlSG9zdEltcGwpCisgICAgeworICAgICAgICBtX251bURyYXdzKys7CisgICAgICAg
IGlmICghbGF5ZXJUcmVlSG9zdEltcGwtPnNvdXJjZUZyYW1lTnVtYmVyKCkpCisgICAgICAgICAg
ICBlbmRUZXN0KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGNvbW1pdE9uQ0NUaHJlYWQo
TW9ja0xheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QsIE1vY2tMYXllclRyZWVIb3N0SW1wbCog
aW1wbCkKKyAgICB7CisgICAgICAgIG1fbnVtQ29tbWl0cysrOworICAgIH0KKworICAgIHZpcnR1
YWwgdm9pZCBhZnRlclRlc3QoKQorICAgIHsKKyAgICAgICAgRVhQRUNUX0dFKDEsIG1fbnVtQ29t
bWl0cyk7CisgICAgICAgIEVYUEVDVF9HRSgxLCBtX251bURyYXdzKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgaW50IG1fbnVtQ29tbWl0czsKKyAgICBpbnQgbV9udW1EcmF3czsKK307CitURVNU
X0YoQ0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzQ29tbWl0MSwgcnVuKQoreworICAgIHJ1blRl
c3QoKTsKK30KKworLy8gQSBzZXROZWVkc0NvbW1pdCBzaG91bGQgbGVhZCB0byAxIGNvbW1pdC4g
SXNzdWluZyBhIHNlY29uZCBjb21taXQgYWZ0ZXIgdGhhdAorLy8gZmlyc3QgY29tbWl0dGVkIGZy
YW1lIGRyYXdzIHNob3VsZCBsZWFkIHRvIGFub3RoZXIgY29tbWl0LgorY2xhc3MgQ0NMYXllclRy
ZWVIb3N0VGVzdFNldE5lZWRzQ29tbWl0MiA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0IHsK
K3B1YmxpYzoKKyAgICBDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQyKCkKKyAgICAg
ICAgOiBtX251bUNvbW1pdHMoMCkKKyAgICAgICAgLCBtX251bURyYXdzKDApCisgICAgeworICAg
IH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKQorICAgIHsKKyAgICAgICAgbV9sYXll
clRyZWVIb3N0LT5zZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOworICAgIH0KKworICAgIHZpcnR1
YWwgdm9pZCBkcmF3TGF5ZXJzQW5kUHJlc2VudE9uQ0NUaHJlYWQoTW9ja0xheWVyVHJlZUhvc3RJ
bXBsKiBsYXllclRyZWVIb3N0SW1wbCkKKyAgICB7CisgICAgICAgIGlmICghbGF5ZXJUcmVlSG9z
dEltcGwtPnNvdXJjZUZyYW1lTnVtYmVyKCkpCisgICAgICAgICAgICBsYXllclRyZWVIb3N0SW1w
bC0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICAgICAgZWxzZSBpZiAobGF5ZXJUcmVl
SG9zdEltcGwtPnNvdXJjZUZyYW1lTnVtYmVyKCkgPT0gMSkKKyAgICAgICAgICAgIGVuZFRlc3Qo
KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0T25DQ1RocmVhZChNb2NrTGF5ZXJU
cmVlSG9zdCogbGF5ZXJUcmVlSG9zdCwgTW9ja0xheWVyVHJlZUhvc3RJbXBsKiBpbXBsKQorICAg
IHsKKyAgICAgICAgbV9udW1Db21taXRzKys7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFm
dGVyVGVzdCgpCisgICAgeworICAgICAgICBFWFBFQ1RfRVEoMiwgbV9udW1Db21taXRzKTsKKyAg
ICAgICAgRVhQRUNUX0dFKDIsIG1fbnVtRHJhd3MpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBp
bnQgbV9udW1Db21taXRzOworICAgIGludCBtX251bURyYXdzOworfTsKK1RFU1RfRihDQ0xheWVy
VHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQyLCBydW4pCit7CisgICAgcnVuVGVzdCgpOworfQor
CisvLyAxIHNldE5lZWRzUmVkcmF3IHNob3VsZCBsZWFkIHRvIGF0IGxlYXN0IDEgZHJhdyBidXQg
bm8gY29tbWl0LgorY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzUmVkcmF3IDogcHVi
bGljIENDTGF5ZXJUcmVlSG9zdFRlc3QgeworcHVibGljOgorICAgIENDTGF5ZXJUcmVlSG9zdFRl
c3RTZXROZWVkc1JlZHJhdygpCisgICAgICAgIDogbV9udW1Db21taXRzKDApCisgICAgICAgICwg
bV9udW1EcmF3cygwKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0
KCkKKyAgICB7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0TmVlZHNSZWRyYXcoKTsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhyZWFkKE1v
Y2tMYXllclRyZWVIb3N0SW1wbCogbGF5ZXJUcmVlSG9zdCkKKyAgICB7CisgICAgICAgIEVYUEVD
VF9FUSgwLCBsYXllclRyZWVIb3N0LT5zb3VyY2VGcmFtZU51bWJlcigpKTsKKyAgICAgICAgRVhQ
RUNUX0VRKDAsIGxheWVyVHJlZUhvc3QtPmZyYW1lTnVtYmVyKCkpOworICAgICAgICBtX251bURy
YXdzKys7CisgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY29t
bWl0T25DQ1RocmVhZChNb2NrTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCwgTW9ja0xheWVy
VHJlZUhvc3RJbXBsKiBpbXBsKQorICAgIHsKKyAgICAgICAgbV9udW1Db21taXRzKys7CisgICAg
fQorCisgICAgdmlydHVhbCB2b2lkIGFmdGVyVGVzdCgpCisgICAgeworICAgICAgICBFWFBFQ1Rf
R0UoMSwgbV9udW1EcmF3cyk7CisgICAgICAgIEVYUEVDVF9FUSgwLCBtX251bUNvbW1pdHMpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBpbnQgbV9udW1Db21taXRzOworICAgIGludCBtX251bURy
YXdzOworfTsKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNSZWRyYXcsIHJ1bikK
K3sKKyAgICBydW5UZXN0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZiAvLyBVU0Uo
VEhSRUFERURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDVGhyZWFkVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
VGhyZWFkVGVzdC5jcHAKaW5kZXggMDRmYmE0NjUzM2RiNzVkZDczZjY4YWI3YjdiMmQ2MDFlN2Ni
NDA2Ny4uZmFiMzU0ZWMwMGM5NzMzY2MyODVhMTJiOTAwY2NmMGYzZWUyYTMxZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RocmVhZFRlc3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaHJlYWRUZXN0LmNwcApAQCAtNTEsNiArNTEs
NyBAQCBwdWJsaWM6CiBURVNUKENDVGhyZWFkVGVzdCwgcGluZ1BvbmdVc2luZ0NvbmRpdGlvbikK
IHsKICAgICBPd25QdHI8Q0NUaHJlYWQ+IHRocmVhZCA9IENDVGhyZWFkOjpjcmVhdGUoKTsKKwog
ICAgIFBpbmdQb25nVXNpbmdDb25kaXRpb24gdGFyZ2V0OwogICAgIENDQ29tcGxldGlvbkV2ZW50
IGNvbXBsZXRpb247CiAgICAgdGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2soJnRh
cmdldCwgJlBpbmdQb25nVXNpbmdDb25kaXRpb246OnBpbmcsICZjb21wbGV0aW9uKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BvcHVwTWVudVRlc3QuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Qb3B1cE1lbnVUZXN0LmNwcAppbmRleCA1YTE4
NzA4ZDcyMTZmMjMxYzhmZWRlMTY2YjIzNTkwYzliOWRjOTYxLi43OTVhY2I3MGRlNWQzNTc3NGVk
MzRlNjY2ZjVlNjY4ZDYxOTkzODFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL1BvcHVwTWVudVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvUG9wdXBNZW51VGVzdC5jcHAKQEAgLTEyNiw2ICsxMjYsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIGNsb3NlKCkgeyB9CiAgICAgdmlydHVhbCBXZWJTaXplIHNpemUoKSB7IHJldHVy
biBXZWJTaXplKDEwMCwgMTAwKTsgfQogICAgIHZpcnR1YWwgdm9pZCByZXNpemUoY29uc3QgV2Vi
U2l6ZSYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlKGRvdWJsZSBmcmFtZUJlZ2luVGlt
ZSkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBw
YWludChXZWJDYW52YXMqLCBjb25zdCBXZWJSZWN0JikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHRo
ZW1lQ2hhbmdlZCgpIHsgfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vV2ViVmlld0hvc3QuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmll
d0hvc3QuY3BwCmluZGV4IGFlNGExYjFjYzllOGZiOTc4OTY2ZDE2ZmZlZDQyZjU5ZmJhYzZjZmIu
LjdjOTYxZDA0NWViZmExZjE3Mjk2YzEwNTBhNWE5NjQ2NDcyM2RmNTMgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcAorKysgYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAKQEAgLTE0ODIsNyArMTQ4Miw3
IEBAIHZvaWQgV2ViVmlld0hvc3Q6OnBhaW50UmVjdChjb25zdCBXZWJSZWN0JiByZWN0KQogdm9p
ZCBXZWJWaWV3SG9zdDo6cGFpbnRJbnZhbGlkYXRlZFJlZ2lvbigpCiB7CiAjaWYgRU5BQkxFKFJF
UVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQotICAgIHdlYldpZGdldCgpLT5hbmltYXRlKCk7CisgICAg
d2ViV2lkZ2V0KCktPmFuaW1hdGUoMC4wKTsKICNlbmRpZgogICAgIHdlYldpZGdldCgpLT5sYXlv
dXQoKTsKICAgICBXZWJTaXplIHdpZGdldFNpemUgPSB3ZWJXaWRnZXQoKS0+c2l6ZSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90593</attachid>
            <date>2011-04-21 13:57:47 -0700</date>
            <delta_ts>2011-04-21 16:34:29 -0700</delta_ts>
            <desc>Forgot to fix tests.</desc>
            <filename>bug-58408-20110421135746.patch</filename>
            <type>text/plain</type>
            <size>86695</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODQyMDgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyM2FjNDdhODIxMTY3MmFl
ZGM4YTUxOTA2YzA2YzQ0NWJiOTYzODUxLi4zOWU5ZDdjYjkwMmMwMTgwNmFmYmM3ZjcxNTA4ZGUw
OGU4MTBhNGFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODIgQEAKKzIwMTEtMDQtMTggIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50IENDTGF5ZXJUcmVlSG9zdCBh
bmQgQ0NMYXllclRyZWVIb3N0SW1wbCBwb3J0aW9ucyBvZiB0aHJlYWRlZCBjb21wb3NpdG9yCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODQwOAorCisg
ICAgICAgIENyZWF0ZSBDQ0xheWVyVHJlZUhvc3QgYW5kIENDTGF5ZXJUcmVlSG9zdEltcGwsIHdo
aWNoIGFyZSB0aGUgbWFpbgorICAgICAgICB0aHJlYWQgYW5kIGNvbXBvc2l0b3IgdGhyZWFkIGhh
bHZlcyBvZiBhIGNvbXBvc2l0ZWQgdmlldy4gQ29tbXVuaWNhdGlvbgorICAgICAgICBiZXR3ZWVu
IHRoZSB0d28gaXMgYmFzZWQgb24gdGhlIGRlc2lnbiB1c2VkIGluIEZpbGVTdHJlYW1Qcm94eS4K
KworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bUNvbW1pdHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyUmVuZGVyZXJDaHJvbWl1bUNvbW1pdHRlcjo6Y29tbWl0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bUNvbW1pdHRlcjo6TGF5ZXJSZW5kZXJlckNocm9taXVt
Q29tbWl0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6YmVn
aW5Db21taXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb21t
aXRDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBs
OjpMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJDaHJvbWl1bUltcGw6OmRyYXdMYXllcnNBbmRQcmVzZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bUltcGw6OmRyYXdMYXllcnNPbk1haW5UaHJlYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbFByb3h5OjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbFByb3h5OjpjcmVh
dGVMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW1JbXBsUHJveHk6OkxheWVyUmVuZGVyZXJDaHJvbWl1bUltcGxQcm94eSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZUxheWVyVHJlZUhvc3RJbXBs
UHJveHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
SGVhZHNVcERpc3BsYXkuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDSGVhZHNVcERpc3BsYXk6OmN1
cnJlbnRGcmFtZU51bWJlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuY3BwLgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0OjpDQ0xheWVyVHJlZUhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0Ojppbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6
fkNDTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNv
bW1pdENvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0
ZUFuZExheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI6
OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnNldE5lZWRzQ29t
bWl0QW5kUmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2V0TmVl
ZHNSZWRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmguCisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3Q6OmZyYW1lTnVtYmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6On5DQ0xheWVyVHJlZUhvc3RJbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmJlZ2luQ29tbWl0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbW1pdENvbXBsZXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNSZWRyYXcpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oLgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0SW1wbENsaWVudDo6fkNDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6ZnJhbWVOdW1iZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c291cmNlRnJhbWVOdW1iZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0U291cmNlRnJhbWVOdW1iZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5
OjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5OjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHk6On5DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVkcmF3
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c3RvcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnBvc3REcmF3TGF5ZXJz
VGFza09uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFBy
b3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNNYWluVGhyZWFkKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNDQ1RocmVhZCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmNvbW1pdE9uQ0NUaHJl
YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpkcmF3TGF5
ZXJzT25DQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmluaXRJbXBsT25DQ1Ro
cmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmxheWVy
VHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6Omhvc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNDVGhyZWFkOjpydW5Mb29wKToKKwogMjAxMS0wNC0xOCAgSmVzc2llIEJlcmxpbiAgPGpiZXJs
aW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFN0ZXZlIEZhbGtlbmJ1cmcuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKaW5kZXggYThkN2IyZDNmMjY5YjE4OGNhMjc1OTFkZGNjNjQ5ZmM5NDc5Njhj
Mi4uNmMyM2MxM2EyMjE2MTY0YmU2NDdiMzcwNWRjY2Y1ZTU0NGYxNjc2MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQpAQCAtNDA3MSw2ICs0MDcxLDE0IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5o
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RDb21taXR0ZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIuaCcsCisgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwu
aCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZC5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZC5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWRUYXNrLmgnLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggMjdhNjdlOTAyODk2NTY3
YzM0OTNhZmY0OTlhNzQ2OTY1NWU3MDNiZi4uZjU1NjM3MmI2YWNhODU4MDY4ZjQ0M2ZjY2UxMGMy
NzA1MzVkN2I3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC00
Nyw2ICs0Nyw4IEBACiAjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgogI2luY2x1ZGUgIldlYkdMTGF5
ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5oIgorI2luY2x1ZGUgImNjL0NDTWFpblRocmVhZFRhc2suaCIK
ICNpZiBVU0UoU0tJQSkKICNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKICNpbmNsdWRlICJQ
bGF0Zm9ybUNvbnRleHRTa2lhLmgiCkBAIC05MywyMyArOTUsMjggQEAgYm9vbCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmNvbXBhcmVMYXllclooY29uc3QgUmVmUHRyPENDTGF5ZXJJbXBsPiYgYSwg
Y29uc3QgUmUKICAgICByZXR1cm4gYS0+ZHJhd0RlcHRoKCkgPCBiLT5kcmF3RGVwdGgoKTsKIH0K
IAotUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6Y3JlYXRlKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsIFBhc3NPd25Q
dHI8VGlsZVBhaW50SW50ZXJmYWNlPiBjb250ZW50UGFpbnQpCitQYXNzUmVmUHRyPExheWVyUmVu
ZGVyZXJDaHJvbWl1bT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUoQ0NMYXllclRyZWVI
b3N0Q2xpZW50KiBjbGllbnQsIFBhc3NPd25QdHI8VGlsZVBhaW50SW50ZXJmYWNlPiBjb250ZW50
UGFpbnQpCiB7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gY2xpZW50
LT5jcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCk7CiAgICAgaWYgKCFjb250ZXh0KQogICAg
ICAgICByZXR1cm4gMDsKIAotICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVy
UmVuZGVyZXIoYWRvcHRSZWYobmV3IExheWVyUmVuZGVyZXJDaHJvbWl1bShjb250ZXh0LCBjb250
ZW50UGFpbnQpKSk7CisgICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbGF5ZXJSZW5k
ZXJlcihhZG9wdFJlZihuZXcgTGF5ZXJSZW5kZXJlckNocm9taXVtKGNsaWVudCwgY29udGV4dCwg
Y29udGVudFBhaW50KSkpOworICAgIGxheWVyUmVuZGVyZXItPmluaXQoKTsKICAgICBpZiAoIWxh
eWVyUmVuZGVyZXItPmhhcmR3YXJlQ29tcG9zaXRpbmcoKSkKICAgICAgICAgcmV0dXJuIDA7CiAK
ICAgICByZXR1cm4gbGF5ZXJSZW5kZXJlci5yZWxlYXNlKCk7CiB9CiAKLUxheWVyUmVuZGVyZXJD
aHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVtKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+IGNvbnRleHQsCitMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1
bShDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRl
eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzT3du
UHRyPFRpbGVQYWludEludGVyZmFjZT4gY29udGVudFBhaW50KQotICAgIDogbV92aWV3cG9ydFNj
cm9sbFBvc2l0aW9uKEludFBvaW50KC0xLCAtMSkpCisgICAgOiBDQ0xheWVyVHJlZUhvc3QoY2xp
ZW50KQorICAgICwgbV92aWV3cG9ydFNjcm9sbFBvc2l0aW9uKEludFBvaW50KC0xLCAtMSkpCiAg
ICAgLCBtX3Jvb3RMYXllcigwKQogICAgICwgbV9yb290TGF5ZXJDb250ZW50UGFpbnQoY29udGVu
dFBhaW50KQorICAgICwgbV9jb21taXR0aW5nKGZhbHNlKQogICAgICwgbV9jdXJyZW50U2hhZGVy
KDApCiAgICAgLCBtX2N1cnJlbnRSZW5kZXJTdXJmYWNlKDApCiAgICAgLCBtX29mZnNjcmVlbkZy
YW1lYnVmZmVySWQoMCkKQEAgLTE4OCwxMiArMTk1LDExIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpzZXRWaWV3cG9ydChjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50
UmVjCiAgICAgICAgIG1fY3VycmVudFJlbmRlclN1cmZhY2UgPSAwOwogICAgICAgICBtX3Jvb3RM
YXllckNvbnRlbnRUaWxlci0+aW52YWxpZGF0ZUVudGlyZUxheWVyKCk7CiAgICAgfQorICAgIHNl
dE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
Ojp1cGRhdGVBbmREcmF3TGF5ZXJzKCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRh
dGVMYXllcnMoKQogewotICAgIEFTU0VSVChtX2hhcmR3YXJlQ29tcG9zaXRpbmcpOwotCiAgICAg
aWYgKCFtX3Jvb3RMYXllcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMDQsMTAgKzIxMCwxNCBA
QCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQW5kRHJhd0xheWVycygpCiAgICAg
aWYgKCFtX3Jvb3RMYXllcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgTGF5ZXJMaXN0IHJlbmRl
clN1cmZhY2VMYXllckxpc3Q7Ci0KLSAgICB1cGRhdGVMYXllcnMocmVuZGVyU3VyZmFjZUxheWVy
TGlzdCk7CisgICAgbV9jb21wdXRlZFJlbmRlclN1cmZhY2VMYXllckxpc3QgPSBhZG9wdFB0cihu
ZXcgTGF5ZXJMaXN0KCkpOworICAgIHVwZGF0ZUxheWVycygqbV9jb21wdXRlZFJlbmRlclN1cmZh
Y2VMYXllckxpc3QpOworfQogCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVy
cygpCit7CisgICAgQVNTRVJUKG1faGFyZHdhcmVDb21wb3NpdGluZyk7CisgICAgQVNTRVJUKG1f
Y29tcHV0ZWRSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKICAgICAvLyBCZWZvcmUgZHJhd0xheWVy
czoKICAgICBpZiAoaGFyZHdhcmVDb21wb3NpdGluZygpICYmIG1fY29udGV4dFN1cHBvcnRzTGF0
Y2gpIHsKICAgICAgICAgLy8gRklYTUU6IFRoZSBtdWx0aXRocmVhZGVkIGNvbXBvc2l0b3IgY2Fz
ZSB3aWxsIG5vdCB3b3JrIGFzIGxvbmcgYXMKQEAgLTIzMyw3ICsyNDMsNyBAQCB2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQW5kRHJhd0xheWVycygpCiAgICAgICAgIG1fY2hpbGRD
b250ZXh0c1dlcmVDb3BpZWQgPSBmYWxzZTsKICAgICB9CiAKLSAgICBkcmF3TGF5ZXJzKHJlbmRl
clN1cmZhY2VMYXllckxpc3QpOworICAgIGRyYXdMYXllcnMoKm1fY29tcHV0ZWRSZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0KTsKIAogICAgIC8vIEFmdGVyIGRyYXdMYXllcnM6CiAgICAgaWYgKGhhcmR3
YXJlQ29tcG9zaXRpbmcoKSAmJiBtX2NvbnRleHRTdXBwb3J0c0xhdGNoKSB7CkBAIC0xMDkxLDYg
KzExMDEsNzIgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmR1bXBSZW5kZXJTdXJmYWNl
cyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCwgTGF5ZXIKICAgICAgICAgZHVtcFJlbmRlclN1
cmZhY2VzKHRzLCBpbmRlbnQsIGxheWVyLT5nZXRTdWJsYXllcnMoKVtpXS5nZXQoKSk7CiB9CiAK
K2NsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bUltcGwgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0
SW1wbCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8TGF5ZXJSZW5kZXJlckNocm9t
aXVtSW1wbD4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqIGNsaWVudCwgTGF5ZXJS
ZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsKGNsaWVudCwgbGF5ZXJSZW5kZXJl
cikpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGF5ZXJzQW5kUHJlc2VudCgpCisg
ICAgeworICAgICAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOworICAgICAgICBib29s
IGNvbnRleHRMb3N0OworICAgICAgICBDQ01haW5UaHJlYWQ6OnBvc3RUYXNrKGNyZWF0ZU1haW5U
aHJlYWRUYXNrKHRoaXMsICZMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsOjpkcmF3TGF5ZXJzT25N
YWluVGhyZWFkLCAmY29tcGxldGlvbiwgJmNvbnRleHRMb3N0KSk7CisgICAgICAgIGNvbXBsZXRp
b24ud2FpdCgpOworCisgICAgICAgIC8vIEZJWE1FOiBTZW5kIHRoZSAiVXBkYXRlUmVjdCIgbWVz
c2FnZSB1cCB0byB0aGUgUmVuZGVyV2lkZ2V0IFtvciBtb3ZlcGx1Z2luIGVxdWl2YWxlbnRzLi4u
XQorCisgICAgICAgIC8vIEZJWE1FOiBoYW5kbGUgY29udGV4dCBsb3N0CisgICAgICAgIGlmIChj
b250ZXh0TG9zdCkKKyAgICAgICAgICAgIEZBVEFMKCJMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBs
IGRvZXMgbm90IGhhbmRsZSBjb250ZXh0IGxvc3QgeWV0LiIpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQq
IGNsaWVudCwgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQorICAgICAgICA6
IENDTGF5ZXJUcmVlSG9zdEltcGwoY2xpZW50KQorICAgICAgICAsIG1fbGF5ZXJSZW5kZXJlcihs
YXllclJlbmRlcmVyKSB7IH0KKworICAgIHZvaWQgZHJhd0xheWVyc09uTWFpblRocmVhZChDQ0Nv
bXBsZXRpb25FdmVudCogY29tcGxldGlvbiwgYm9vbCogY29udGV4dExvc3QpCisgICAgeworICAg
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+
ZHJhd0xheWVycygpOworICAgICAgICBtX2xheWVyUmVuZGVyZXItPnByZXNlbnQoKTsKKworICAg
ICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IG1fbGF5ZXJSZW5kZXJlci0+Y29udGV4
dCgpOworICAgICAgICAqY29udGV4dExvc3QgPSBjb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdl
dEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I7
CisKKyAgICAgICAgY29tcGxldGlvbi0+c2lnbmFsKCk7CisgICAgfQorCisgICAgTGF5ZXJSZW5k
ZXJlckNocm9taXVtKiBtX2xheWVyUmVuZGVyZXI7Cit9OworCitjbGFzcyBMYXllclJlbmRlcmVy
Q2hyb21pdW1JbXBsUHJveHkgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsUHJv
eHk+IGNyZWF0ZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IExheWVyUmVuZGVyZXJDaHJvbWl1bUltcGxQcm94
eShsYXllclJlbmRlcmVyKSk7CisgICAgfQorCisgICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5
ZXJUcmVlSG9zdEltcGw+IGNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsOjpjcmVhdGUodGhpcywgc3RhdGljX2Nh
c3Q8TGF5ZXJSZW5kZXJlckNocm9taXVtKj4oaG9zdCgpKSk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bUltcGxQcm94eShMYXllclJlbmRlcmVyQ2hyb21pdW0q
IGxheWVyUmVuZGVyZXIpCisgICAgICAgIDogQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5KGxheWVy
UmVuZGVyZXIpIHsgfQorfTsKKworUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk+
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlTGF5ZXJUcmVlSG9zdEltcGxQcm94eSgpCit7
CisgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eT4gcHJveHkgPSBMYXllclJlbmRl
cmVyQ2hyb21pdW1JbXBsUHJveHk6OmNyZWF0ZSh0aGlzKTsKKyAgICBwcm94eS0+c3RhcnQoKTsK
KyAgICByZXR1cm4gcHJveHkucmVsZWFzZSgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IDgxM2ViNDZlMGJhYTM2NTEzZDYwNzhkYTI1YTQyNWQ0
NDVhZWJlZTkuLjZjOTJjMmE5ODc1ZjZkODJlNjAwNTM3ZGVmOGI3MThiODI0MmNlOTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC00MywxMyArNDMsMTMgQEAKICNpbmNs
dWRlICJWaWRlb0xheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJjYy9DQ0NhbnZhc0xheWVySW1w
bC5oIgogI2luY2x1ZGUgImNjL0NDSGVhZHNVcERpc3BsYXkuaCIKKyNpbmNsdWRlICJjYy9DQ0xh
eWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlICJjYy9DQ1BsdWdpbkxheWVySW1wbC5oIgogI2luY2x1
ZGUgImNjL0NDVmlkZW9MYXllckltcGwuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogI2lmIFVTRShDRykKQEAgLTYxLDEzICs2MSwxNSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENDSGVhZHNVcERpc3BsYXk7CiBjbGFzcyBD
Q0xheWVySW1wbDsKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcjsKK2NsYXNzIENDTGF5
ZXJUcmVlSG9zdEltcGw7CiBjbGFzcyBHZW9tZXRyeUJpbmRpbmc7CiBjbGFzcyBHcmFwaGljc0Nv
bnRleHQzRDsKIAogLy8gQ2xhc3MgdGhhdCBoYW5kbGVzIGRyYXdpbmcgb2YgY29tcG9zaXRlZCBy
ZW5kZXIgbGF5ZXJzIHVzaW5nIEdMLgotY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtIDogcHVi
bGljIFJlZkNvdW50ZWQ8TGF5ZXJSZW5kZXJlckNocm9taXVtPiB7CitjbGFzcyBMYXllclJlbmRl
cmVyQ2hyb21pdW0gOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0IHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGNyZWF0ZShQYXNzUmVmUHRyPEdy
YXBoaWNzQ29udGV4dDNEPiwgUGFzc093blB0cjxUaWxlUGFpbnRJbnRlcmZhY2U+IGNvbnRlbnRQ
YWludCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBjcmVh
dGUoQ0NMYXllclRyZWVIb3N0Q2xpZW50KiwgUGFzc093blB0cjxUaWxlUGFpbnRJbnRlcmZhY2U+
IGNvbnRlbnRQYWludCk7CiAKICAgICB+TGF5ZXJSZW5kZXJlckNocm9taXVtKCk7CiAKQEAgLTc4
LDcgKzgwLDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0Vmlld3BvcnQoY29uc3QgSW50UmVjdCYg
dmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRQb2ludCYg
c2Nyb2xsUG9zaXRpb24pOwogCiAgICAgLy8gdXBkYXRlcyBhbmQgZHJhd3MgdGhlIGN1cnJlbnQg
bGF5ZXJzIG9udG8gdGhlIGJhY2tidWZmZXIKLSAgICB2b2lkIHVwZGF0ZUFuZERyYXdMYXllcnMo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlTGF5ZXJzKCk7CisgICAgdm9pZCBkcmF3TGF5ZXJz
KCk7CiAKICAgICAvLyB3YWl0cyBmb3IgcmVuZGVyaW5nIHRvIGZpbmlzaAogICAgIHZvaWQgZmlu
aXNoKCk7CkBAIC0xMzMsMTEgKzEzNiwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRDaGlsZENv
bnRleHQoR3JhcGhpY3NDb250ZXh0M0QqKTsKICAgICB2b2lkIHJlbW92ZUNoaWxkQ29udGV4dChH
cmFwaGljc0NvbnRleHQzRCopOwogCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBQYXNzT3duUHRy
PENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eT4gY3JlYXRlTGF5ZXJUcmVlSG9zdEltcGxQcm94eSgp
OworCiBwcml2YXRlOgogICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiBM
YXllckxpc3Q7CiAgICAgdHlwZWRlZiBIYXNoTWFwPEdyYXBoaWNzQ29udGV4dDNEKiwgaW50PiBD
aGlsZENvbnRleHRNYXA7CiAKLSAgICBleHBsaWNpdCBMYXllclJlbmRlcmVyQ2hyb21pdW0oUGFz
c1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4sIFBhc3NPd25QdHI8VGlsZVBhaW50SW50ZXJmYWNl
PiBjb250ZW50UGFpbnQpOworICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bShDQ0xheWVyVHJlZUhv
c3RDbGllbnQqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgUGFzc093blB0cjxUaWxl
UGFpbnRJbnRlcmZhY2U+IGNvbnRlbnRQYWludCk7CiAKICAgICB2b2lkIHVwZGF0ZUxheWVycyhM
YXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgIHZvaWQgdXBkYXRlUm9vdExh
eWVyQ29udGVudHMoKTsKQEAgLTE3OCw4ICsxODQsMTEgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8
VGlsZVBhaW50SW50ZXJmYWNlPiBtX3Jvb3RMYXllckNvbnRlbnRQYWludDsKICAgICBPd25QdHI8
TGF5ZXJUaWxlckNocm9taXVtPiBtX3Jvb3RMYXllckNvbnRlbnRUaWxlcjsKIAorICAgIGJvb2wg
bV9jb21taXR0aW5nOwogICAgIGJvb2wgbV9oYXJkd2FyZUNvbXBvc2l0aW5nOwogCisgICAgT3du
UHRyPExheWVyTGlzdD4gbV9jb21wdXRlZFJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisKICAgICB1
bnNpZ25lZCBtX2N1cnJlbnRTaGFkZXI7CiAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBtX2N1
cnJlbnRSZW5kZXJTdXJmYWNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwCmlu
ZGV4IGQyMmIwOTg2M2Y1NmRhZWY5NDQxNjljNmM4OWRkYzZmZmQ5MDczMTkuLmI4Y2E1YmMyYWU0
ZDM5ZjgwMDBjMjNiY2JkNDI1ZjdiYjA5ZGI1MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERp
c3BsYXkuY3BwCkBAIC0yMjMsNiArMjIzLDE4IEBAIHZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6b25Q
cmVzZW50KCkKICAgICBtX2N1cnJlbnRGcmFtZU51bWJlciArPSAxOwogfQogCit2b2lkIENDSGVh
ZHNVcERpc3BsYXk6OnNldFNob3dGUFNDb3VudGVyKGJvb2wgc2hvdykKK3sKKyAgICBtX3Nob3dG
UFNDb3VudGVyID0gc2hvdzsKKyAgICBtX2xheWVyUmVuZGVyZXItPnNldE5lZWRzUmVkcmF3KCk7
Cit9CisKK3ZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6c2V0U2hvd1BsYXRmb3JtTGF5ZXJUcmVlKGJv
b2wgc2hvdykKK3sKKyAgICBtX3Nob3dQbGF0Zm9ybUxheWVyVHJlZSA9IHNob3c7CisgICAgbV9s
YXllclJlbmRlcmVyLT5zZXROZWVkc1JlZHJhdygpOworfQorCiB9CiAKICNlbmRpZiAvLyBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmgKaW5k
ZXggMDlmMTk4YWMxNDVkNzc2MzRkMWIxZjU0MzlmNzEwZDg0NmUzN2UyOC4uNDdjMDY4YTU2ZTRi
ZmU5MTM0MDE1ZWUxMjc5Y2QzNjMyNTY3YTQ3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3Bs
YXkuaApAQCAtNDcsMTIgKzQ3LDE0IEBAIHB1YmxpYzoKIAogICAgIH5DQ0hlYWRzVXBEaXNwbGF5
KCk7CiAKKyAgICBpbnQgY3VycmVudEZyYW1lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9jdXJy
ZW50RnJhbWVOdW1iZXI7IH0KKwogICAgIHZvaWQgb25QcmVzZW50KCk7CiAKLSAgICB2b2lkIHNl
dFNob3dGUFNDb3VudGVyKGJvb2wgZW5hYmxlKSB7IG1fc2hvd0ZQU0NvdW50ZXIgPSBlbmFibGU7
IH0KKyAgICB2b2lkIHNldFNob3dGUFNDb3VudGVyKGJvb2wgZW5hYmxlKTsKICAgICBib29sIHNo
b3dGUFNDb3VudGVyKCkgY29uc3QgeyByZXR1cm4gbV9zaG93RlBTQ291bnRlcjsgfQogCi0gICAg
dm9pZCBzZXRTaG93UGxhdGZvcm1MYXllclRyZWUoYm9vbCBlbmFibGUpIHsgbV9zaG93UGxhdGZv
cm1MYXllclRyZWUgPSBlbmFibGU7IH0KKyAgICB2b2lkIHNldFNob3dQbGF0Zm9ybUxheWVyVHJl
ZShib29sIGVuYWJsZSk7CiAgICAgYm9vbCBzaG93UGxhdGZvcm1MYXllclRyZWUoKSBjb25zdCB7
IHJldHVybiBtX3Nob3dQbGF0Zm9ybUxheWVyVHJlZTsgfQogCiAgICAgYm9vbCBlbmFibGVkKCkg
Y29uc3QgeyByZXR1cm4gbV9zaG93UGxhdGZvcm1MYXllclRyZWUgfHwgbV9zaG93RlBTQ291bnRl
cjsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmFhOTJhY2Fl
MTVmZTdlNGFhNTNkZDc2ZWMwNjEwZjFlYzkwOWNkMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5j
cHAKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCisKKyNpbmNsdWRlICJUcmFjZUV2ZW50
LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmgiCisjaW5jbHVkZSAi
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ0NM
YXllclRyZWVIb3N0OjpDQ0xheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0Q2xpZW50KiBjbGll
bnQpCisgICAgOiBtX2NsaWVudChjbGllbnQpCisjaWZuZGVmIE5ERUJVRworICAgICwgbV9jb21t
aXR0aW5nKGZhbHNlKQorI2VuZGlmCisgICAgLCBtX2ZyYW1lTnVtYmVyKDApCit7Cit9CisKK3Zv
aWQgQ0NMYXllclRyZWVIb3N0Ojppbml0KCkKK3sKKyNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJ
TkcpCisgICAgbV9wcm94eSA9IGNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsUHJveHkoKTsKKyAgICBB
U1NFUlQobV9wcm94eS0+aXNTdGFydGVkKCkpOworICAgIG1fcHJveHktPnNldE5lZWRzQ29tbWl0
QW5kUmVkcmF3KCk7CisjZW5kaWYKK30KKworQ0NMYXllclRyZWVIb3N0Ojp+Q0NMYXllclRyZWVI
b3N0KCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojp+Q0NMYXllclRyZWVI
b3N0IiwgdGhpcywgMCk7CisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgIG1fcHJv
eHktPnN0b3AoKTsKKyAgICBtX3Byb3h5LmNsZWFyKCk7CisjZW5kaWYKK30KKwordm9pZCBDQ0xh
eWVyVHJlZUhvc3Q6OmJlZ2luQ29tbWl0KCkKK3sKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9jb21t
aXR0aW5nID0gdHJ1ZTsKKyNlbmRpZgorfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0
Q29tcGxldGUoKQoreworI2lmbmRlZiBOREVCVUcKKyAgICBtX2NvbW1pdHRpbmcgPSBmYWxzZTsK
KyNlbmRpZgorICAgIG1fZnJhbWVOdW1iZXIrKzsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3Q6
OmFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQoreworICAgIG1fY2xpZW50
LT5hbmltYXRlQW5kTGF5b3V0KGZyYW1lQmVnaW5UaW1lKTsKK30KKworUGFzc093blB0cjxDQ0xh
eWVyVHJlZUhvc3RDb21taXR0ZXI+IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlTGF5ZXJUcmVlSG9z
dENvbW1pdHRlcigpCit7CisgICAgcmV0dXJuIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcjo6Y3Jl
YXRlKCk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJh
dygpCit7CisgICAgbV9wcm94eS0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKK30KKwordm9p
ZCBDQ0xheWVyVHJlZUhvc3Q6OnNldE5lZWRzUmVkcmF3KCkKK3sKKyAgICBUUkFDRV9FVkVOVCgi
Q0NMYXllclRyZWVIb3N0OjpzZXROZWVkc1JlZHJhdyIsIHRoaXMsIDApOworICAgIG1fcHJveHkt
PnNldE5lZWRzUmVkcmF3KCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZjNhZWFjMDU0M2U2MDQwYjYxMWVmMDIxZGU3YmM5MDVlYWRmNWFlOQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgQ0NMYXllclRyZWVIb3N0X2gKKyNkZWZpbmUgQ0NMYXllclRyZWVIb3N0X2gKKworI2luY2x1
ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJU
cmVlSG9zdEltcGxQcm94eS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGw7CitjbGFzcyBDQ0xh
eWVyVHJlZUhvc3RJbXBsQ2xpZW50OworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CisKK2NsYXNz
IENDTGF5ZXJUcmVlSG9zdENsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGFuaW1h
dGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKSA9IDA7CisgICAgdmlydHVhbCBQYXNz
UmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCkg
PSAwOworfTsKKworY2xhc3MgQ0NMYXllclRyZWVIb3N0IDogcHVibGljIFJlZkNvdW50ZWQ8Q0NM
YXllclRyZWVIb3N0PiB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQ0NMYXllclRyZWVIb3N0KEND
TGF5ZXJUcmVlSG9zdENsaWVudCopOworICAgIHZvaWQgaW5pdCgpOworICAgIHZpcnR1YWwgfkND
TGF5ZXJUcmVlSG9zdCgpOworCisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVBbmRMYXlvdXQoZG91
YmxlIGZyYW1lQmVnaW5UaW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21taXQoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgY29tbWl0Q29tcGxldGUoKTsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8
Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyPiBjcmVhdGVMYXllclRyZWVIb3N0Q29tbWl0dGVyKCk7
CisKKyAgICBpbnQgZnJhbWVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lTnVtYmVyOyB9
CisKKyAgICB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgdm9pZCBzZXROZWVk
c1JlZHJhdygpOworCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUxheWVycygpID0gMDsKKworcHJv
dGVjdGVkOgorICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk+
IGNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsUHJveHkoKSA9IDA7CisKK3ByaXZhdGU6CisgICAgQ0NM
YXllclRyZWVIb3N0Q2xpZW50KiBtX2NsaWVudDsKKyNpZm5kZWYgTkRFQlVHCisgICAgYm9vbCBt
X2NvbW1pdHRpbmc7CisjZW5kaWYKKyAgICBpbnQgbV9mcmFtZU51bWJlcjsKKyAgICBPd25QdHI8
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5PiBtX3Byb3h5OworfTsKKworfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdENvbW1pdHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjcyZGQ3MTRiZTdlMzg0YzhlZjllMTA5MjRmZjVjZDIwNTg2OTliZWEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RDb21taXR0ZXIuY3BwCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRl
ci5oIgorCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCisjaW5jbHVkZSAiY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NPd25QdHI8
Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyPiBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI6OmNyZWF0
ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIo
KSk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyOjpjb21taXQoQ0NMYXllclRy
ZWVIb3N0KiBob3N0LCBDQ0xheWVyVHJlZUhvc3RJbXBsKiBob3N0SW1wbCkKK3sKKyAgICBob3N0
SW1wbC0+c2V0U291cmNlRnJhbWVOdW1iZXIoaG9zdC0+ZnJhbWVOdW1iZXIoKSk7Cit9CisKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
Y2JjYWRlYTY1NjM2ZDllNjAwYzdlYzc5MGJhZTE0NzcyODg2NWJiNQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdENvbW1pdHRlci5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyX2gKKyNkZWZpbmUgQ0NMYXllclRyZWVIb3N0Q29t
bWl0dGVyX2gKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NMYXllclRyZWVI
b3N0OworY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbDsKKworY2xhc3MgQ0NMYXllclRyZWVIb3N0
Q29tbWl0dGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ0xheWVyVHJlZUhvc3RDb21t
aXR0ZXIpOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdENv
bW1pdHRlcj4gY3JlYXRlKCk7CisgICAgdmlydHVhbCB2b2lkIGNvbW1pdChDQ0xheWVyVHJlZUhv
c3QqLCBDQ0xheWVyVHJlZUhvc3RJbXBsKik7CisKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBD
Q0xheWVyVHJlZUhvc3RDb21taXR0ZXIoKSB7IH0KK307CisKK30KKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEzYWEyYmEyMTBkYmRk
ZDE2YjljYTFhZDEyZTYxMTU1NThiMmFiMzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNw
cApAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCisKKyNpbmNsdWRlICJUcmFjZUV2
ZW50LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCisjaW5jbHVkZSAiY2MvQ0NU
aHJlYWRUYXNrLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworQ0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVIb3N0SW1wbChDQ0xh
eWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX3NvdXJjZUZyYW1lTnVtYmVy
KC0xKQorICAgICwgbV9mcmFtZU51bWJlcigwKQorICAgICwgbV9jbGllbnQoY2xpZW50KQorICAg
ICwgbV9jb21taXRQZW5kaW5nKGZhbHNlKQorICAgICwgbV9yZWRyYXdQZW5kaW5nKGZhbHNlKQor
eworfQorCitDQ0xheWVyVHJlZUhvc3RJbXBsOjp+Q0NMYXllclRyZWVIb3N0SW1wbCgpCit7Cisg
ICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6On5DQ0xheWVyVHJlZUhvc3RJbXBs
KCkiLCB0aGlzLCAwKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpiZWdpbkNvbW1p
dCgpCit7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29tbWl0Q29tcGxldGUoKQor
eworICAgIG1fY29tbWl0UGVuZGluZyA9IGZhbHNlOworICAgIHNldE5lZWRzUmVkcmF3KCk7Cit9
CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycygpCit7CisgICAgLy8gSWYg
YSBjb21taXQgaXMgcGVuZGluZywgZG8gbm90IGRyYXcuIFRoaXMgaXMgYSB0ZW1wb3JhcnkgcmVz
dHJpY3Rpb24gdGhhdAorICAgIC8vIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGRyYXdMYXllcnMgaXMg
Y3VycmVudGx5IGEgYmxvY2tpbmcgb3BlcmF0aW9uIG9uIHRoZSBtYWluIHRocmVhZC4KKyAgICBp
ZiAobV9jb21taXRQZW5kaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBUUkFDRV9FVkVOVCgi
Q0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycyIsIHRoaXMsIDApOworICAgIEFTU0VSVCht
X3JlZHJhd1BlbmRpbmcpOworICAgIG1fcmVkcmF3UGVuZGluZyA9IGZhbHNlOworCisgICAgewor
ICAgICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVyc0FuZFBy
ZXNlbnQiLCB0aGlzLCAwKTsKKyAgICAgICAgZHJhd0xheWVyc0FuZFByZXNlbnQoKTsKKyAgICB9
CisKKyAgICArK21fZnJhbWVOdW1iZXI7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6
c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdyIsIHRoaXMsIDApOworCisgICAgLy8g
RklYTUU6IG1vdmUgdGhlIHJlcXVlc3RGcmFtZUFuZENvbW1pdCBvdXQgZnJvbSBoZXJlIG9uY2Ug
d2UgYWRkIGZyYW1lcmF0ZSB0aHJvdHRsaW5nL2FuaW1hdGlvbgorICAgIGRvdWJsZSBmcmFtZUJl
Z2luVGltZSA9IGN1cnJlbnRUaW1lKCk7CisgICAgbV9jb21taXRQZW5kaW5nID0gdHJ1ZTsKKyAg
ICBtX2NsaWVudC0+cmVxdWVzdEZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZChmcmFtZUJlZ2luVGlt
ZSk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNSZWRyYXcoKQorewor
ICAgIGlmIChtX3JlZHJhd1BlbmRpbmcgfHwgbV9jb21taXRQZW5kaW5nKQorICAgICAgICByZXR1
cm47CisKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNSZWRy
YXciLCB0aGlzLCAwKTsKKyAgICBtX3JlZHJhd1BlbmRpbmcgPSB0cnVlOworICAgIG1fY2xpZW50
LT5wb3N0RHJhd0xheWVyc1Rhc2tPbkNDVGhyZWFkKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdEltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZDkwNDk1ZGVkMmM4MGMzOWY4ZjNhMTk1
YjJlMDE1ZDZhMDhjYWI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCkBAIC0wLDAgKzEs
NzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NMYXllclRyZWVIb3N0SW1wbF9oCisjZGVm
aW5lIENDTGF5ZXJUcmVlSG9zdEltcGxfaAorCisjaW5jbHVkZSAiY2MvQ0NUaHJlYWQuaCIKKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVk
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gUHJvdmlkZXMgc2NoZWR1bGluZyBpbmZy
YXN0cnVjdHVyZSBmb3IgYSBDQ0xheWVyVHJlZUhvc3RJbXBsCitjbGFzcyBDQ0xheWVyVHJlZUhv
c3RJbXBsQ2xpZW50ICB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+Q0NMYXllclRyZWVIb3N0SW1w
bENsaWVudCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwb3N0RHJhd0xheWVyc1Rhc2tPbkNDVGhy
ZWFkKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhy
ZWFkKGRvdWJsZSBmcmFtZUJlZ2luVGltZSkgPSAwOworfTsKKworLy8gQ0NMYXllclRyZWVIb3N0
SW1wbCBvd25zIHRoZSBDQ0xheWVySW1wbCB0cmVlIGFzIHdlbGwgYXMgYXNzb2NpYXRlZCByZW5k
ZXJpbmcgc3RhdGUKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGwgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKENDTGF5ZXJUcmVlSG9zdEltcGwpOworcHVibGljOgorICAgIGV4cGxpY2l0IEND
TGF5ZXJUcmVlSG9zdEltcGwoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCopOworICAgIHZpcnR1
YWwgfkNDTGF5ZXJUcmVlSG9zdEltcGwoKTsKKworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1p
dCgpOworICAgIHZpcnR1YWwgdm9pZCBjb21taXRDb21wbGV0ZSgpOworCisgICAgdm9pZCBkcmF3
TGF5ZXJzKCk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNBbmRQcmVzZW50KCkgPSAwOwor
CisgICAgaW50IGZyYW1lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZU51bWJlcjsgfQor
CisgICAgdm9pZCBzZXROZWVkc1JlZHJhdygpOworICAgIHZvaWQgc2V0TmVlZHNDb21taXRBbmRS
ZWRyYXcoKTsKKworICAgIGludCBzb3VyY2VGcmFtZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1f
c291cmNlRnJhbWVOdW1iZXI7IH0KKyAgICB2b2lkIHNldFNvdXJjZUZyYW1lTnVtYmVyKGludCBm
cmFtZU51bWJlcikgeyBtX3NvdXJjZUZyYW1lTnVtYmVyID0gZnJhbWVOdW1iZXI7IH0KKworcHJv
dGVjdGVkOgorICAgIGludCBtX3NvdXJjZUZyYW1lTnVtYmVyOworICAgIGludCBtX2ZyYW1lTnVt
YmVyOworCitwcml2YXRlOgorICAgIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqIG1fY2xpZW50
OworICAgIGJvb2wgbV9jb21taXRQZW5kaW5nOworICAgIGJvb2wgbV9yZWRyYXdQZW5kaW5nOwor
fTsKKworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bFByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZjRjNGQwMmUxZDVkNTUxNTQ2NDQ3ZjMzYTFiZjE4NDZl
MDE4MjZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmNwcApAQCAtMCwwICsxLDIy
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmgiCisKKyNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCisj
aW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCisjaW5jbHVkZSAiY2MvQ0NNYWluVGhyZWFk
VGFzay5oIgorI2luY2x1ZGUgImNjL0NDVGhyZWFkVGFzay5oIgorCisKK3VzaW5nIG5hbWVzcGFj
ZSBXVEY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIHsKK0NDVGhyZWFkKiBj
Y1RocmVhZDsKK2ludCBudW1Qcm94aWVzID0gMDsKK30KKworQ0NMYXllclRyZWVIb3N0SW1wbFBy
b3h5OjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkoQ0NMYXllclRyZWVIb3N0KiBsYXllclRyZWVI
b3N0KQorICAgIDogbV9jb21taXRQZW5kaW5nKGZhbHNlKQorICAgICwgbV9sYXllclRyZWVIb3N0
KGxheWVyVHJlZUhvc3QpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5IiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKyAgICBudW1Qcm94aWVzKys7CisgICAgaWYgKCFjY1RocmVhZCkKKyAg
ICAgICAgY2NUaHJlYWQgPSBDQ1RocmVhZDo6Y3JlYXRlKCkubGVha1B0cigpOworfQorCisKK3Zv
aWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzdGFydCgpCit7CisgICAgLy8gQ3JlYXRlIExh
eWVyVHJlZUhvc3RJbXBsLgorICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CisgICAg
Y2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVI
b3N0SW1wbFByb3h5Ojppbml0SW1wbE9uQ0NUaHJlYWQsICZjb21wbGV0aW9uKSk7CisgICAgY29t
cGxldGlvbi53YWl0KCk7Cit9CisKK0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6fkNDTGF5ZXJU
cmVlSG9zdEltcGxQcm94eSgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdElt
cGxQcm94eTo6fkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSIsIHRoaXMsIDApOworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3RJbXBsICYmICFt
X2xheWVyVHJlZUhvc3QpOyAvLyBtYWtlIHN1cmUgc3RvcCgpIGdvdCBjYWxsZWQuCisKKyAgICBu
dW1Qcm94aWVzLS07CisgICAgaWYgKCFudW1Qcm94aWVzKSB7CisgICAgICAgIGRlbGV0ZSBjY1Ro
cmVhZDsKKyAgICAgICAgY2NUaHJlYWQgPSAwOworICAgIH0KK30KKworYm9vbCBDQ0xheWVyVHJl
ZUhvc3RJbXBsUHJveHk6OmlzU3RhcnRlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXJU
cmVlSG9zdEltcGw7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVk
c0NvbW1pdEFuZFJlZHJhdygpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBp
ZiAobV9jb21taXRQZW5kaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBUUkFDRV9FVkVOVCgi
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdyIsIHRoaXMs
IDApOworICAgIG1fY29tbWl0UGVuZGluZyA9IHRydWU7CisgICAgY2NUaHJlYWQtPnBvc3RUYXNr
KGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXRO
ZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQpKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHk6OnNldE5lZWRzUmVkcmF3KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkND
TGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKSk7Cit9CisK
K3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzdG9wKCkKK3sKKyAgICBUUkFDRV9FVkVO
VCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzdG9wIiwgdGhpcywgMCk7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKyAgICAvLyBTeW5jaHJvbm91c2x5IGRlbGV0ZXMgdGhlIGltcGwu
CisgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKKyAgICBjY1RocmVhZC0+cG9zdFRh
c2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6Omxh
eWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkLCAmY29tcGxldGlvbikpOworICAgIGNvbXBsZXRp
b24ud2FpdCgpOworCisgICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3RJbXBsKTsgLy8gdmVyaWZ5
IHRoYXQgdGhlIGltcGwgZGVsZXRlZC4KKyAgICBtX2xheWVyVHJlZUhvc3QgPSAwOworfQorCit2
b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6cG9zdERyYXdMYXllcnNUYXNrT25DQ1RocmVh
ZCgpCit7CisgICAgQVNTRVJUKGlzQ0NUaHJlYWQoKSk7CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9z
dEltcGwpCisgICAgICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhp
cywgJkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQpKTsKK30K
Kwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdE9u
Q0NUaHJlYWQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xh
eWVyVHJlZUhvc3RJbXBsUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQiLCB0
aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNDQ1RocmVhZCgpKTsKKyAgICBpZiAobV9sYXllclRyZWVI
b3N0SW1wbCkKKyAgICAgICAgQ0NNYWluVGhyZWFkOjpwb3N0VGFzayhjcmVhdGVNYWluVGhyZWFk
VGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21t
aXQsIGZyYW1lQmVnaW5UaW1lKSk7Cit9CisKK2Jvb2wgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5
Ojppc01haW5UaHJlYWQoKSBjb25zdAoreworICAgIHJldHVybiA6OmlzTWFpblRocmVhZCgpOwor
fQorCitib29sIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNDQ1RocmVhZCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGN1cnJlbnRUaHJlYWQoKSA9PSBjY1RocmVhZC0+dGhyZWFkSUQoKTsKK30K
Kwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdChk
b3VibGUgZnJhbWVCZWdpblRpbWUpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAg
ICBpZiAoIW1fbGF5ZXJUcmVlSG9zdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgVFJBQ0VfRVZF
TlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0IiwgdGhp
cywgMCk7CisgICAgeworICAgICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojphbmlt
YXRlQW5kTGF5b3V0IiwgdGhpcywgMCk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+YW5pbWF0
ZUFuZExheW91dChmcmFtZUJlZ2luVGltZSk7CisgICAgfQorCisgICAgbV9jb21taXRQZW5kaW5n
ID0gZmFsc2U7CisgICAgeworICAgICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojp1
cGRhdGVMYXllcnMiLCB0aGlzLCAwKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT51cGRhdGVM
YXllcnMoKTsKKyAgICB9CisKKyAgICBPd25QdHI8Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyPiBj
b21taXR0ZXIgPSBtX2xheWVyVHJlZUhvc3QtPmNyZWF0ZUxheWVyVHJlZUhvc3RDb21taXR0ZXIo
KTsKKyAgICBtX2xheWVyVHJlZUhvc3QtPmJlZ2luQ29tbWl0KCk7CisKKyAgICAvLyBCbG9ja2lu
ZyBjYWxsIHRvIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6cGVyZm9ybUNvbW1pdAorICAgIEND
Q29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0
ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpjb21taXRPbkND
VGhyZWFkLCBjb21taXR0ZXIuZ2V0KCksICZjb21wbGV0aW9uKSk7CisgICAgY29tcGxldGlvbi53
YWl0KCk7CisKKyAgICBjb21taXR0ZXIuY2xlYXIoKTsKKworICAgIG1fbGF5ZXJUcmVlSG9zdC0+
Y29tbWl0Q29tcGxldGUoKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmNv
bW1pdE9uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyKiBjb21taXR0ZXIsIENDQ29t
cGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQoreworICAgIEFTU0VSVChpc0NDVGhyZWFkKCkpOwor
ICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmNvbW1pdE9uQ0NUaHJl
YWQiLCB0aGlzLCAwKTsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5iZWdpbkNvbW1pdCgpOwor
ICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0IiwgdGhp
cywgMCk7CisgICAgICAgIGNvbW1pdHRlci0+Y29tbWl0KG1fbGF5ZXJUcmVlSG9zdCwgbV9sYXll
clRyZWVIb3N0SW1wbC5nZXQoKSk7CisgICAgfQorICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOwor
CisgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+Y29tbWl0Q29tcGxldGUoKTsKK30KKwordm9pZCBD
Q0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkKCkKK3sKKyAgICBU
UkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpkcmF3TGF5ZXJzT25DQ1RocmVh
ZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc0NDVGhyZWFkKCkpOworICAgIGlmIChtX2xheWVy
VHJlZUhvc3RJbXBsKQorICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5kcmF3TGF5ZXJzKCk7
Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJl
ZHJhd09uQ0NUaHJlYWQoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBs
UHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCIsIHRoaXMsIDApOworICAg
IEFTU0VSVChpc0NDVGhyZWFkKCkgJiYgbV9sYXllclRyZWVIb3N0SW1wbCk7CisgICAgbV9sYXll
clRyZWVIb3N0SW1wbC0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKK30KKwordm9pZCBDQ0xh
eWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCgpCit7CisgICAg
VFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHNSZWRyYXdPbkND
VGhyZWFkIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzQ0NUaHJlYWQoKSAmJiBtX2xheWVyVHJl
ZUhvc3RJbXBsKTsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5zZXROZWVkc1JlZHJhdygpOwor
fQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aW5pdEltcGxPbkNDVGhyZWFkKEND
Q29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVy
VHJlZUhvc3RJbXBsUHJveHk6OmluaXRJbXBsT25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFT
U0VSVChpc0NDVGhyZWFkKCkpOworICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwgPSBjcmVhdGVMYXll
clRyZWVIb3N0SW1wbCgpOworICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOworfQorCit2b2lkIEND
TGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6bGF5ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJlYWQoQ0ND
b21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24pCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJU
cmVlSG9zdEltcGxQcm94eTo6bGF5ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJlYWQiLCB0aGlzLCAw
KTsKKyAgICBBU1NFUlQoaXNDQ1RocmVhZCgpKTsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLmNs
ZWFyKCk7CisgICAgY29tcGxldGlvbi0+c2lnbmFsKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjk1YmUzY2FiNjIxZjM5
OWUzYzQ0OWM0MjRjNTg3NTMxYTM5MGNlYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eS5oCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NMYXllclRyZWVI
b3N0SW1wbFByb3h5X2gKKyNkZWZpbmUgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5X2gKKworI2lu
Y2x1ZGUgImNjL0NDQ29tcGxldGlvbkV2ZW50LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBDQ0xheWVyVHJlZUhvc3Q7CitjbGFzcyBDQ0xheWVyVHJlZUhvc3RDb21taXR0
ZXI7CisKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSA6IHB1YmxpYyBDQ0xheWVyVHJl
ZUhvc3RJbXBsQ2xpZW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHkpOworcHVibGljOgorICAgIHZpcnR1YWwgfkNDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eSgpOworCisgICAgYm9vbCBpc1N0YXJ0ZWQoKSBjb25zdDsKKworICAgIHZvaWQgc2V0TmVl
ZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICB2b2lkIHNldE5lZWRzUmVkcmF3KCk7CisKKyAgICB2
b2lkIHN0YXJ0KCk7IC8vIE11c3QgYmUgY2FsbGVkIGJlZm9yZSB1c2luZyB0aGUgcHJveHkuCisg
ICAgdm9pZCBzdG9wKCk7IC8vIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBkZWxldGluZyB0aGUgcHJv
eHkuCisKKyAgICAvLyBDQ0xheWVyVHJlZUhvc3RJbXBsQ2llbnQgLS0gY2FsbGVkIG9uIENDVGhy
ZWFkCisgICAgdmlydHVhbCB2b2lkIHBvc3REcmF3TGF5ZXJzVGFza09uQ0NUaHJlYWQoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVxdWVzdEZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZChkb3VibGUgZnJh
bWVCZWdpblRpbWUpOworCitwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQgQ0NMYXllclRyZWVIb3N0
SW1wbFByb3h5KENDTGF5ZXJUcmVlSG9zdCopOworICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xh
eWVyVHJlZUhvc3RJbXBsPiBjcmVhdGVMYXllclRyZWVIb3N0SW1wbCgpID0gMDsKKyAgICBDQ0xh
eWVyVHJlZUhvc3QqIGhvc3QoKSBjb25zdCB7IHJldHVybiBtX2xheWVyVHJlZUhvc3Q7IH0KKwor
cHJpdmF0ZToKKyAgICBib29sIGlzTWFpblRocmVhZCgpIGNvbnN0OworICAgIGJvb2wgaXNDQ1Ro
cmVhZCgpIGNvbnN0OworCisgICAgLy8gQ2FsbGVkIG9uIENDTWFpblRocmVhZAorICAgIHZvaWQg
cmVxdWVzdEZyYW1lQW5kQ29tbWl0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CisKKyAgICAvLyBD
YWxsZWQgb24gQ0NUaHJlYWQKKyAgICB2b2lkIGNvbW1pdE9uQ0NUaHJlYWQoQ0NMYXllclRyZWVI
b3N0Q29tbWl0dGVyKiwgQ0NDb21wbGV0aW9uRXZlbnQqKTsKKyAgICB2b2lkIGRyYXdMYXllcnNP
bkNDVGhyZWFkKCk7CisgICAgdm9pZCBpbml0SW1wbE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZl
bnQqKTsKKyAgICB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCgpOworICAg
IHZvaWQgc2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKCk7CisgICAgdm9pZCBsYXllclRyZWVIb3N0
Q2xvc2VkT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCopOworCisgICAgLy8gVXNlZCBvbiBt
YWluLXRocmVhZCBvbmx5LgorICAgIGJvb2wgbV9jb21taXRQZW5kaW5nOworCisgICAgLy8gQWNj
ZXNzZWQgb24gbWFpbiB0aHJlYWQgb25seS4KKyAgICBDQ0xheWVyVHJlZUhvc3QqIG1fbGF5ZXJU
cmVlSG9zdDsKKworICAgIC8vIFVzZWQgb24gdGhlIENDVGhyZWFkLCBidXQgY2hlY2tlZCBvbiBt
YWluIHRocmVhZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24vc2h1dGRvd24uCisgICAgT3duUHRyPEND
TGF5ZXJUcmVlSG9zdEltcGw+IG1fbGF5ZXJUcmVlSG9zdEltcGw7Cit9OworCit9CisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NNYWluVGhyZWFkVGFzay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkVGFzay5oCmluZGV4IDdkZThkNzEzZTg4Yzg4NDIyMjQw
NzkzZmYyNzdkNTlkZjUzYWRlN2IuLmZhYzZlNjQzZjA1YTE4YmJiYWFkNTdiMjliYmMwM2E2Mjgw
ZWFjOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTWFpblRocmVhZFRhc2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWRUYXNrLmgKQEAgLTI0LDkgKzI0LDkgQEAK
ICNpZm5kZWYgQ0NNYWluVGhyZWFkVGFza19oCiAjZGVmaW5lIENDTWFpblRocmVhZFRhc2tfaAog
Ci0jaW5jbHVkZSAiQ0NNYWluVGhyZWFkLmgiCiAjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRDb3BpZXIu
aCIKICNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKKyNpbmNsdWRlICJjYy9DQ01haW5UaHJl
YWQuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGhyZWFkLmNwcAppbmRleCA5NTY2NTg0NWM1OGM0OGNhMDYyMjAwMjQy
NDhiNzQ3YWJhYjc2MGNmLi5kZTE3M2ExMzQ5ODI0YWY5MGZhZGNlNzgxOTBmYmI4M2NjNDBlYjg1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUaHJlYWQuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiQ0NUaHJl
YWQuaCIKIAogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlRy
YWNlRXZlbnQuaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CkBAIC02
NCw2ICs2NSw3IEBAIHZvaWQqIENDVGhyZWFkOjpjb21wb3NpdG9yVGhyZWFkU3RhcnQodm9pZCog
dXNlcmRhdGEpCiAKIHZvaWQqIENDVGhyZWFkOjpydW5Mb29wKCkKIHsKKyAgICBUUkFDRV9FVkVO
VCgiQ0NUaHJlYWQ6OnJ1bkxvb3AiLCB0aGlzLCAwKTsKICAgICB7CiAgICAgICAgIC8vIFdhaXQg
Zm9yIENDVGhyZWFkOjpzdGFydCgpIHRvIGNvbXBsZXRlIHRvIGhhdmUgbV90aHJlYWRJRAogICAg
ICAgICAvLyBlc3RhYmxpc2hlZCBiZWZvcmUgc3RhcnRpbmcgdGhlIG1haW4gbG9vcC4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhy
ZWFkVGFzay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUaHJlYWRUYXNrLmgKaW5kZXggNzEyNDVkM2U0ZTBlY2U1MzUwNWEwZGVkZTc1MzY4ZWNjNmQw
ZmM0Ny4uOTFjNThlNWQyNWI3YmIyODZlMjE2YzRlMDY4Y2JlMTA5NTc4ZjE4MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRU
YXNrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUaHJlYWRUYXNrLmgKQEAgLTI0LDkgKzI0LDkgQEAKICNpZm5kZWYgQ0NUaHJlYWRUYXNrX2gK
ICNkZWZpbmUgQ0NUaHJlYWRUYXNrX2gKIAotI2luY2x1ZGUgIkNDVGhyZWFkLmgiCiAjaW5jbHVk
ZSAiQ3Jvc3NUaHJlYWRDb3BpZXIuaCIKICNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKKyNp
bmNsdWRlICJjYy9DQ1RocmVhZC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBk
MjhkOGJlMWRiMWVlNzc2MDAxMzA0Mjg3ZTkzMmQxMjk5ZDc3Yzc2Li4wMWQ3ZTZiYjVkM2YwMTUx
ZDljY2Q1YmMyNmIxY2VhZGQxN2FjNWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDEwMSBAQAorMjAxMS0wNC0xOCAgTmF0IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9t
aXVtXSBJbXBsZW1lbnQgQ0NMYXllclRyZWVIb3N0IGFuZCBDQ0xheWVyVHJlZUhvc3RJbXBsIHBv
cnRpb25zIG9mIHRocmVhZGVkIGNvbXBvc2l0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTU4NDA4CisKKyAgICAgICAgUmVkaXJlY3QgaW52YWxpZGF0
ZXMgYW5kIHNjaGVkdWxpbmcgaW50byBjb21wb3NpdG9yIHdoZW4gaW4KKyAgICAgICAgdGhyZWFk
ZWQgY29tcG9zaXRpbmcgbW9kZS4gQWRkIENDTFN0cmVzcyB0ZXN0cyBmb3IKKyAgICAgICAgQ0NM
YXllclRyZWVIb3N0LgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogcHVibGlj
L1dlYldpZGdldC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJXaWRnZXQ6OnNjaGVkdWxlQ29tcG9z
aXRlKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3SW1wbDo6YW5pbWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpkb0Fu
aW1hdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cGFpbnQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3SW1wbDo6YW5pbWF0ZUFuZExheW91dCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXdJbXBsOjpjb21wb3NpdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
c2NoZWR1bGVDb21wb3NpdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0Um9v
dExheWVyTmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldElz
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJ
bXBsOjpkb0NvbXBvc2l0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjcmVhdGVM
YXllclRyZWVIb3N0Q29udGV4dDNEKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnJl
YWxsb2NhdGVSZW5kZXJlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp1cGRhdGVM
YXllclJlbmRlcmVyU2V0dGluZ3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6dXBk
YXRlTGF5ZXJSZW5kZXJlclZpZXdwb3J0KToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoK
KyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcDogQWRkZWQuCisgICAgICAg
IChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3Q6OkNDTGF5ZXJUcmVlSG9zdFRlc3QpOgorICAgICAg
ICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0OjphbmltYXRlQW5kTGF5b3V0KToKKyAgICAgICAg
KFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6YmVnaW5Db21taXRPbkNDVGhyZWFkKToKKyAgICAg
ICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6YmVnaW5Db21taXRPbk1haW5UaHJlYWQpOgor
ICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0Ojpjb21taXRPbkNDVGhyZWFkKToKKyAg
ICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6Y29tbWl0Q29tcGxldGVPbkNDVGhyZWFk
KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6Y29tbWl0Q29tcGxldGVPbk1h
aW5UaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0OjpkcmF3TGF5ZXJz
QW5kUHJlc2VudE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0
Ojp1cGRhdGVMYXllcnMpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0OjpvbkJl
Z2luVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3Q6OmRvRW5kVGVzdCk6
CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3Q6Om9uRW5kVGVzdCk6CisgICAgICAg
IChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3Q6OnJ1blRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xh
eWVyVHJlZUhvc3RUZXN0Ojp0ZXN0VGltZW91dCk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRy
ZWVIb3N0Q2xpZW50OjpNb2NrTGF5ZXJUcmVlSG9zdENsaWVudCk6CisgICAgICAgIChXVEY6Ok1v
Y2tMYXllclRyZWVIb3N0Q2xpZW50OjpjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKToKKyAg
ICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3RDbGllbnQ6OmFuaW1hdGVBbmRMYXlvdXQpOgor
ICAgICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdENvbW1pdHRlcjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3RDb21taXR0ZXI6OmNvbW1pdCk6CisgICAgICAgIChX
VEY6Ok1vY2tMYXllclRyZWVIb3N0Q29tbWl0dGVyOjpNb2NrTGF5ZXJUcmVlSG9zdENvbW1pdHRl
cik6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0SW1wbDo6Y3JlYXRlKToKKyAgICAg
ICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3RJbXBsOjpiZWdpbkNvbW1pdCk6CisgICAgICAgIChX
VEY6Ok1vY2tMYXllclRyZWVIb3N0SW1wbDo6Y29tbWl0Q29tcGxldGUpOgorICAgICAgICAoV1RG
OjpNb2NrTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnNBbmRQcmVzZW50KToKKyAgICAgICAg
KFdURjo6TW9ja0xheWVyVHJlZUhvc3RJbXBsOjpNb2NrTGF5ZXJUcmVlSG9zdEltcGwpOgorICAg
ICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6Y3JlYXRlKToKKyAgICAgICAg
KFdURjo6TW9ja0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmNyZWF0ZUxheWVyVHJlZUhvc3RJbXBs
KToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3RJbXBsUHJveHk6Ok1vY2tMYXllclRy
ZWVIb3N0SW1wbFByb3h5KToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3Q6Ok1vY2tM
YXllclRyZWVIb3N0KToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3Q6OmNyZWF0ZUxh
eWVyVHJlZUhvc3RJbXBsUHJveHkpOgorICAgICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdDo6
dXBkYXRlTGF5ZXJzKToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3Q6OmJlZ2luQ29t
bWl0KToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3Q6OmNvbW1pdENvbXBsZXRlKToK
KyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6ZG9CZWdpblRlc3QpOgorICAgICAg
ICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0OjplbmRUZXN0KToKKyAgICAgICAgKFdURjo6Q0NM
YXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQxOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZl
ZDEpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDE6OmJlZ2lu
VGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTaG9ydGxpdmVkMTo6YWZ0
ZXJUZXN0KToKKyAgICAgICAgKFdURjo6VEVTVF9GKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRy
ZWVIb3N0VGVzdFNob3J0bGl2ZWQyOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDIpOgor
ICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDI6OmJlZ2luVGVzdCk6
CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTaG9ydGxpdmVkMjo6YWZ0ZXJUZXN0
KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQzOjpDQ0xheWVy
VHJlZUhvc3RUZXN0U2hvcnRsaXZlZDMpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RU
ZXN0U2hvcnRsaXZlZDM6OmJlZ2luVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9z
dFRlc3RTaG9ydGxpdmVkMzo6YWZ0ZXJUZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVI
b3N0VGVzdENvbW1pdGluZ1dpdGhDb250aW51b3VzUmVkcmF3OjpDQ0xheWVyVHJlZUhvc3RUZXN0
Q29tbWl0aW5nV2l0aENvbnRpbnVvdXNSZWRyYXcpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJl
ZUhvc3RUZXN0Q29tbWl0aW5nV2l0aENvbnRpbnVvdXNSZWRyYXc6OmJlZ2luVGVzdCk6CisgICAg
ICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RDb21taXRpbmdXaXRoQ29udGludW91c1JlZHJh
dzo6Y29tbWl0Q29tcGxldGVPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVI
b3N0VGVzdENvbW1pdGluZ1dpdGhDb250aW51b3VzUmVkcmF3OjpkcmF3TGF5ZXJzQW5kUHJlc2Vu
dE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0Q29tbWl0aW5n
V2l0aENvbnRpbnVvdXNSZWRyYXc6OmFmdGVyVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJU
cmVlSG9zdFRlc3RTZXROZWVkc0NvbW1pdDE6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc0Nv
bW1pdDEpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQx
OjpiZWdpblRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHND
b21taXQxOjpkcmF3TGF5ZXJzQW5kUHJlc2VudE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpD
Q0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQxOjpjb21taXRPbkNDVGhyZWFkKToKKyAg
ICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzQ29tbWl0MTo6YWZ0ZXJUZXN0
KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzQ29tbWl0Mjo6Q0NM
YXllclRyZWVIb3N0VGVzdFNldE5lZWRzQ29tbWl0Mik6CisgICAgICAgIChXVEY6OkNDTGF5ZXJU
cmVlSG9zdFRlc3RTZXROZWVkc0NvbW1pdDI6OmJlZ2luVGVzdCk6CisgICAgICAgIChXVEY6OkND
TGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc0NvbW1pdDI6OmRyYXdMYXllcnNBbmRQcmVzZW50T25D
Q1RocmVhZCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc0NvbW1p
dDI6OmNvbW1pdE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0
U2V0TmVlZHNDb21taXQyOjphZnRlclRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhv
c3RUZXN0U2V0TmVlZHNSZWRyYXc6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc1JlZHJhdyk6
CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc1JlZHJhdzo6YmVnaW5U
ZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzUmVkcmF3Ojpk
cmF3TGF5ZXJzQW5kUHJlc2VudE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJl
ZUhvc3RUZXN0U2V0TmVlZHNSZWRyYXc6OmNvbW1pdE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RG
OjpDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNSZWRyYXc6OmFmdGVyVGVzdCk6CisgICAgICAg
ICogdGVzdHMvQ0NUaHJlYWRUZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorCiAy
MDExLTA0LTE4ICBFdmFuIE1hcnRpbiAgPGV2YW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXgg
YzIzYzllZGNiNDY4MmNiMDQwZWMzNjdmMzdiNWVhODlmNzE5YjcxZC4uNGUyYTM1ZTFkMzg3YTRi
NjZjOGI5NWJlMjE2ZGU4NjY4Mzc0MWRmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBp
CkBAIC01Myw2ICs1Myw3IEBACiAgICAgICAgIF0sCiAgICAgICAgICd3ZWJraXRfdW5pdHRlc3Rf
ZmlsZXMnOiBbCiAgICAgICAgICAgICAndGVzdHMvQXJlbmFUZXN0SGVscGVycy5oJywKKyAgICAg
ICAgICAgICd0ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVz
dHMvQ0NUaHJlYWRUYXNrVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDVGhyZWFkVGVz
dC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0RyYWdJbWFnZVRlc3QuY3BwJywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0LmgKaW5kZXggMTI5MGFkODE2MmI2NjIzYmMz
NTlhMGZjZmM1NjMxNDRmNmZjZjc0Yi4uZjY4MWJmYWFhYmYyYjFkMjliMmUwMmUwNDQzYTBmYzVm
NTQzODAzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lk
Z2V0LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0LmgKQEAg
LTQ2LDYgKzQ2LDkgQEAgc3RydWN0IFdlYlJlY3Q7CiBzdHJ1Y3QgV2ViU2l6ZTsKIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPiBjbGFzcyBXZWJWZWN0b3I7CiAKKy8vIEZJWE1FOiByZW1vdmUgdGhpcyBk
ZWZpbmUgb25jZSByZW5kZXJfd2lkZ2V0IGhhcyBiZWVuIGNoYW5nZWQgdG8gaXNzdWUgdGhyZWFk
ZWQgY29tcG9zaXRvciBjYWxscworI2RlZmluZSBXRUJXSURHRVRfSEFTX1RIUkVBREVEX0NPTVBP
U0lUSU5HX0NIQU5HRVMgMQorCiBjbGFzcyBXZWJXaWRnZXQgewogcHVibGljOgogICAgIC8vIFRo
aXMgbWV0aG9kIGNsb3NlcyBhbmQgZGVsZXRlcyB0aGUgV2ViV2lkZ2V0LgpAQCAtNTcsMTUgKzYw
LDE3IEBAIHB1YmxpYzoKICAgICAvLyBDYWxsZWQgdG8gcmVzaXplIHRoZSBXZWJXaWRnZXQuCiAg
ICAgdmlydHVhbCB2b2lkIHJlc2l6ZShjb25zdCBXZWJTaXplJikgPSAwOwogCi0gICAgLy8gQ2Fs
bGVkIHRvIHVwZGF0ZSBpbXBlcmF0aXZlIGFuaW1hdGlvbiBzdGF0ZS4gIFRoaXMgc2hvdWxkIGJl
IGNhbGxlZCBiZWZvcmUKLSAgICAvLyBwYWludCwgYWx0aG91Z2ggdGhlIGNsaWVudCBjYW4gcmF0
ZS1saW1pdCB0aGVzZSBjYWxscy4KLSAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZSgpID0gMDsKKyAg
ICAvLyBDYWxsZWQgdG8gdXBkYXRlIGltcGVyYXRpdmUgYW5pbWF0aW9uIHN0YXRlLiBUaGlzIHNo
b3VsZCBiZSBjYWxsZWQKKyAgICAvLyBiZWZvcmUgcGFpbnQsIGFsdGhvdWdoIHRoZSBjbGllbnQg
Y2FuIHJhdGUtbGltaXQgdGhlc2UgY2FsbHMuCisgICAgLy8gRklYTUU6IHJlbW92ZSBkZWZhdWx0
IGFyZ3VtZW50IG9uY2UgcmVuZGVyX3dpZGdldCBoYXMgYmVlbiB1cGRhdGVkIHRvCisgICAgLy8g
aXNzdWUgdGhlIGNvcnJlY3QgdmFsdWUuCisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGUoZG91Ymxl
IGZyYW1lQmVnaW5UaW1lKSA9IDA7CiAKICAgICAvLyBDYWxsZWQgdG8gbGF5b3V0IHRoZSBXZWJX
aWRnZXQuICBUaGlzIE1VU1QgYmUgY2FsbGVkIGJlZm9yZSBQYWludCwKICAgICAvLyBhbmQgaXQg
bWF5IHJlc3VsdCBpbiBjYWxscyB0byBXZWJXaWRnZXRDbGllbnQ6OmRpZEludmFsaWRhdGVSZWN0
LgogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKSA9IDA7CiAKLSAgICAvLyBDYWxsZWQgdG8gcGFp
bnQgdGhlIHJlY3Rhbmd1bGFyIHJlZ2lvbiB3aXRoaW4gdGhlIFdlYldpZGdldCAKKyAgICAvLyBD
YWxsZWQgdG8gcGFpbnQgdGhlIHJlY3Rhbmd1bGFyIHJlZ2lvbiB3aXRoaW4gdGhlIFdlYldpZGdl
dAogICAgIC8vIG9udG8gdGhlIHNwZWNpZmllZCBjYW52YXMgYXQgKHZpZXdQb3J0Lngsdmlld1Bv
cnQueSkuIFlvdSBNVVNUIGNhbGwKICAgICAvLyBMYXlvdXQgYmVmb3JlIGNhbGxpbmcgdGhpcyBt
ZXRob2QuICBJdCBpcyBva2F5IHRvIGNhbGwgcGFpbnQKICAgICAvLyBtdWx0aXBsZSB0aW1lcyBv
bmNlIGxheW91dCBoYXMgYmVlbiBjYWxsZWQsIGFzc3VtaW5nIG5vIG90aGVyCkBAIC03NCwxMiAr
NzksMTYgQEAgcHVibGljOgogICAgIC8vIHdhcnJhbnRlZCBiZWZvcmUgcGFpbnRpbmcgYWdhaW4p
LgogICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJDYW52YXMqLCBjb25zdCBXZWJSZWN0JiB2aWV3
UG9ydCkgPSAwOwogCi0gICAgLy8gVHJpZ2dlcnMgY29tcG9zaXRpbmcgb2YgdGhlIGN1cnJlbnQg
bGF5ZXJzIG9udG8gdGhlIHNjcmVlbi4KLSAgICAvLyBUaGUgZmluaXNoIGFyZ3VtZW50IGNvbnRy
b2xzIHdoZXRoZXIgdGhlIGNvbXBvc2l0b3Igd2lsbCB3YWl0IGZvciB0aGUKLSAgICAvLyBHUFUg
dG8gZmluaXNoIHJlbmRlcmluZyBiZWZvcmUgcmV0dXJuaW5nLiBZb3UgTVVTVCBjYWxsIExheW91
dAotICAgIC8vIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLCBmb3IgdGhlIHNhbWUgcmVhc29u
cyBkZXNjcmliZWQgaW4KLSAgICAvLyB0aGUgcGFpbnQgbWV0aG9kIGFib3ZlLgotICAgIHZpcnR1
YWwgdm9pZCBjb21wb3NpdGUoYm9vbCBmaW5pc2gpID0gMDsKKyAgICAvLyBUcmlnZ2VycyBjb21w
b3NpdGluZyBvZiB0aGUgY3VycmVudCBsYXllcnMgb250byB0aGUgc2NyZWVuLiBUaGlzIGNhbGwg
aGFzCisgICAgLy8gbm8gZWZmZWN0IGluIHRocmVhZGVkIGNvbXBvc2l0aW5nIG1vZGUuIFlvdSBN
VVNUIGNhbGwgTGF5b3V0IGJlZm9yZQorICAgIC8vIGNhbGxpbmcgdGhpcyBtZXRob2QsIGZvciB0
aGUgc2FtZSByZWFzb25zIGRlc2NyaWJlZCBpbiB0aGUgcGFpbnQgbWV0aG9kCisgICAgLy8gYWJv
dmUuCisgICAgdmlydHVhbCB2b2lkIGNvbXBvc2l0ZSgpID0gMDsKKworICAgIC8vIEluIHRocmVh
ZGVkIGNvbXBvc2l0aW5nIG1vZGUsIGluZGljYXRlcyB0aGF0IHRoZSB3aWRnZXQgc2hvdWxkIHJl
ZHJhdworICAgIC8vIGl0c2VsZiwgZm9yIGV4YW1wbGUgZHVlIHRvIHdpbmRvdyBkYW1hZ2UuIFRo
ZSByZWRyYXcgd2lsbCBiZWdpbgorICAgIC8vIGFzeW5jaHJvbm91c2x5LgorICAgIHZpcnR1YWwg
dm9pZCBzY2hlZHVsZUNvbXBvc2l0ZSgpICB7IH0KIAogICAgIC8vIENhbGxlZCB0byBpbmZvcm0g
dGhlIFdlYldpZGdldCBvZiBhIGNoYW5nZSBpbiB0aGVtZS4KICAgICAvLyBJbXBsZW1lbnRvcnMg
dGhhdCBjYWNoZSByZW5kZXJlZCBjb3BpZXMgb2Ygd2lkZ2V0cyBuZWVkIHRvIHJlLXJlbmRlcgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcAppbmRl
eCBiNGQ0MjQ2YzNmNjAxMGJjYWY1MDIxZDRjZDk2ODFhYmZjMzkzZGI1Li43NmY4OTRhNmJjNjU4
OGFkMGFiNDQ4NDEzNzVhODMwZjgxMzcyNzgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcApAQCAtMTUxLDcgKzE1MSw3IEBAIHZvaWQgV2Vi
UG9wdXBNZW51SW1wbDo6cmVzaXplKGNvbnN0IFdlYlNpemUmIG5ld1NpemUpCiAgICAgfQogfQog
Ci12b2lkIFdlYlBvcHVwTWVudUltcGw6OmFuaW1hdGUoKQordm9pZCBXZWJQb3B1cE1lbnVJbXBs
OjphbmltYXRlKGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKIHsKIH0KIApAQCAtMTczLDcgKzE3Myw3
IEBAIHZvaWQgV2ViUG9wdXBNZW51SW1wbDo6dGhlbWVDaGFuZ2VkKCkKICAgICBub3RJbXBsZW1l
bnRlZCgpOwogfQogCi12b2lkIFdlYlBvcHVwTWVudUltcGw6OmNvbXBvc2l0ZShib29sIGZpbmlz
aCkKK3ZvaWQgV2ViUG9wdXBNZW51SW1wbDo6Y29tcG9zaXRlKCkKIHsKICAgICBub3RJbXBsZW1l
bnRlZCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9w
dXBNZW51SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1w
bC5oCmluZGV4IDU4YTg4M2Y1NjhmN2VmMzBmOWYyZTAwMzRhMTc4ZTFlYWJjMGE4MDYuLjY1ZmYw
NTljZjIzYmU0MTc4ODc5NTgxYjUwNTkwMjRmOWYwNjI1NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmgKQEAgLTYyLDExICs2MiwxMSBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCk7CiAgICAgdmlydHVhbCBXZWJTaXplIHNpemUo
KSB7IHJldHVybiBtX3NpemU7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVzaXplKGNvbnN0IFdlYlNp
emUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZSgpOworICAgIHZpcnR1YWwgdm9pZCBhbmlt
YXRlKGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwog
ICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJDYW52YXMqIGNhbnZhcywgY29uc3QgV2ViUmVjdCYg
cmVjdCk7CiAgICAgdmlydHVhbCB2b2lkIHRoZW1lQ2hhbmdlZCgpOwotICAgIHZpcnR1YWwgdm9p
ZCBjb21wb3NpdGUoYm9vbCBmaW5pc2gpOworICAgIHZpcnR1YWwgdm9pZCBjb21wb3NpdGUoKTsK
ICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50Jik7
CiAgICAgdmlydHVhbCB2b2lkIG1vdXNlQ2FwdHVyZUxvc3QoKTsKICAgICB2aXJ0dWFsIHZvaWQg
c2V0Rm9jdXMoYm9vbCBlbmFibGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViVmlld0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmll
d0ltcGwuY3BwCmluZGV4IDI0MzhhOTQ4MWQwMTcwYzU2YjM2MzJhMGZiMDFkNmMzZDAxODdiOGQu
LmFiMGRjNTg3Nzg3ZmE4OWE5NGZjOTdkYzVmYzhkNjMwZDQ0NjFiNzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTk5MSwxNCArOTkxLDE4IEBAIHZv
aWQgV2ViVmlld0ltcGw6OnJlc2l6ZShjb25zdCBXZWJTaXplJiBuZXdTaXplKQogI2VuZGlmCiB9
CiAKLXZvaWQgV2ViVmlld0ltcGw6OmFuaW1hdGUoKQordm9pZCBXZWJWaWV3SW1wbDo6YW5pbWF0
ZShkb3VibGUgZnJhbWVCZWdpblRpbWUpCiB7CiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9O
X0ZSQU1FKQorICAgIC8vIEZJWE1FOiByZW1vdmUgdGhpcyBvbmNlIHJlbmRlcl93aWRnZXQgaGFz
IGJlZW4gbW9kaWZpZWQgdG8gcGFzcyBpbiBhCisgICAgLy8gZnJhbWVCZWdpblRpbWUuCisgICAg
aWYgKCFmcmFtZUJlZ2luVGltZSkKKyAgICAgICAgZnJhbWVCZWdpblRpbWUgPSBjdXJyZW50VGlt
ZSgpOwogICAgIFdlYkZyYW1lSW1wbCogd2ViZnJhbWUgPSBtYWluRnJhbWVJbXBsKCk7CiAgICAg
aWYgKHdlYmZyYW1lKSB7CiAgICAgICAgIEZyYW1lVmlldyogdmlldyA9IHdlYmZyYW1lLT5mcmFt
ZVZpZXcoKTsKICAgICAgICAgaWYgKHZpZXcpCi0gICAgICAgICAgICB2aWV3LT5zZXJ2aWNlU2Ny
aXB0ZWRBbmltYXRpb25zKGNvbnZlcnRTZWNvbmRzVG9ET01UaW1lU3RhbXAoY3VycmVudFRpbWUo
KSkpOworICAgICAgICAgICAgdmlldy0+c2VydmljZVNjcmlwdGVkQW5pbWF0aW9ucyhjb252ZXJ0
U2Vjb25kc1RvRE9NVGltZVN0YW1wKGZyYW1lQmVnaW5UaW1lKSk7CiAgICAgfQogI2VuZGlmCiB9
CkBAIC0xMDY4LDYgKzEwNzIsMTAgQEAgdm9pZCBXZWJWaWV3SW1wbDo6cGFpbnQoV2ViQ2FudmFz
KiBjYW52YXMsIGNvbnN0IFdlYlJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKGlzQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0FjdGl2ZSgpKSB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQor
I2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICAgICAgLy8gRklYTUU6IGRvIHJlYWRi
YWNrIGluIHRocmVhZGVkIGNvbXBvc2l0aW5nIG1vZGUgcmF0aGVyIHRoYW4gcmV0dXJuaW5nIG5v
dGhpbmcKKyAgICAgICAgcmV0dXJuOworI2VuZGlmCiAgICAgICAgIGRvQ29tcG9zaXRlKCk7CiAK
ICAgICAgICAgLy8gSWYgYSBjYW52YXMgd2FzIHBhc3NlZCBpbiwgd2UgdXNlIGl0IHRvIGdyYWIg
YSBjb3B5IG9mIHRoZQpAQCAtMTA5Niw5ICsxMTA0LDE5IEBAIHZvaWQgV2ViVmlld0ltcGw6OnRo
ZW1lQ2hhbmdlZCgpCiAgICAgdmlldy0+aW52YWxpZGF0ZVJlY3QoZGFtYWdlZFJlY3QpOwogfQog
Ci12b2lkIFdlYlZpZXdJbXBsOjpjb21wb3NpdGUoYm9vbCBmaW5pc2gpCisKK3ZvaWQgV2ViVmll
d0ltcGw6OmFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQoreworICAgIGFu
aW1hdGUoZnJhbWVCZWdpblRpbWUpOworICAgIGxheW91dCgpOworfQorCit2b2lkIFdlYlZpZXdJ
bXBsOjpjb21wb3NpdGUoKQogewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNp
ZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgbV9sYXllclJlbmRlcmVyLT5zZXROZWVk
c1JlZHJhdygpOworI2Vsc2UKICAgICBUUkFDRV9FVkVOVCgiV2ViVmlld0ltcGw6OmNvbXBvc2l0
ZSIsIHRoaXMsIDApOwogICAgIGlmIChtX3JlY3JlYXRpbmdHcmFwaGljc0NvbnRleHQpIHsKICAg
ICAgICAgLy8gcmVhbGxvY2F0ZVJlbmRlcmVyIHdpbGwgcmVxdWVzdCBhIHJlcGFpbnQgd2hldGhl
ciBvciBub3QgaXQgc3VjY2VlZGVkCkBAIC0xMTA5LDEwICsxMTI3LDYgQEAgdm9pZCBXZWJWaWV3
SW1wbDo6Y29tcG9zaXRlKGJvb2wgZmluaXNoKQogICAgIH0KICAgICBkb0NvbXBvc2l0ZSgpOwog
Ci0gICAgLy8gRmluaXNoIGlmIHJlcXVlc3RlZC4KLSAgICBpZiAoZmluaXNoKQotICAgICAgICBt
X2xheWVyUmVuZGVyZXItPmZpbmlzaCgpOwotCiAgICAgLy8gUHV0IHJlc3VsdCBvbnNjcmVlbi4K
ICAgICBtX2xheWVyUmVuZGVyZXItPnByZXNlbnQoKTsKIApAQCAtMTEyOCw2ICsxMTQyLDcgQEAg
dm9pZCBXZWJWaWV3SW1wbDo6Y29tcG9zaXRlKGJvb2wgZmluaXNoKQogICAgICAgICBzZXRSb290
TGF5ZXJOZWVkc0Rpc3BsYXkoKTsKICAgICB9CiAjZW5kaWYKKyNlbmRpZgogfQogCiBjb25zdCBX
ZWJJbnB1dEV2ZW50KiBXZWJWaWV3SW1wbDo6bV9jdXJyZW50SW5wdXRFdmVudCA9IDA7CkBAIC0y
MzI3LDkgKzIzNDIsMjQgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIo
V2ViQ29yZTo6UGxhdGZvcm1MYXllciogbGF5ZXIpCiAgICAgICAgIG1fY2xpZW50LT5kaWRJbnZh
bGlkYXRlUmVjdChkYW1hZ2VkUmVjdCk7CiB9CiAKK3ZvaWQgV2ViVmlld0ltcGw6OnNjaGVkdWxl
Q29tcG9zaXRlKCkKK3sKKyNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgaWYgKG1f
bGF5ZXJSZW5kZXJlcikKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5zZXROZWVkc1JlZHJhdygp
OworI2Vsc2UKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorfQorCiB2b2lkIFdl
YlZpZXdJbXBsOjpzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKQogeworI2lmIFVTRShUSFJFQURF
RF9DT01QT1NJVElORykKKyAgICBpZiAobV9sYXllclJlbmRlcmVyKQorICAgICAgICBtX2xheWVy
UmVuZGVyZXItPnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisjZWxzZQogICAgIG1fY2xpZW50
LT5zY2hlZHVsZUNvbXBvc2l0ZSgpOworI2VuZGlmCiB9CiAKIApAQCAtMjQwMSwxNSArMjQzMSwx
MCBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUo
Ym9vbCBhY3RpdmUpCiAKICAgICAgICAgbV9jbGllbnQtPmRpZEFjdGl2YXRlQWNjZWxlcmF0ZWRD
b21wb3NpdGluZyh0cnVlKTsKICAgICB9IGVsc2UgewotICAgICAgICBSZWZQdHI8R3JhcGhpY3ND
b250ZXh0M0Q+IGNvbnRleHQgPSBtX3RlbXBvcmFyeU9uc2NyZWVuR3JhcGhpY3NDb250ZXh0M0Qu
cmVsZWFzZSgpOwotICAgICAgICBpZiAoIWNvbnRleHQpIHsKLSAgICAgICAgICAgIGNvbnRleHQg
PSBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKGdldENvbXBvc2l0b3JDb250ZXh0QXR0cmlidXRl
cygpLCBtX3BhZ2UtPmNocm9tZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlU
b0hvc3RXaW5kb3cpOwotICAgICAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgICAgICAgICAg
Y29udGV4dC0+cmVzaGFwZShzdGQ6Om1heCgxLCBtX3NpemUud2lkdGgpLCBzdGQ6Om1heCgxLCBt
X3NpemUuaGVpZ2h0KSk7Ci0gICAgICAgIH0KLQotCi0gICAgICAgIG1fbGF5ZXJSZW5kZXJlciA9
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKGNvbnRleHQucmVsZWFzZSgpLCBXZWJWaWV3
SW1wbENvbnRlbnRQYWludGVyOjpjcmVhdGUodGhpcykpOworICAgICAgICBtX2xheWVyUmVuZGVy
ZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCBXZWJWaWV3SW1wbENvbnRl
bnRQYWludGVyOjpjcmVhdGUodGhpcykpOworI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykK
KyAgICAgICAgdXBkYXRlTGF5ZXJSZW5kZXJlclNldHRpbmdzKCk7CisjZW5kaWYKICAgICAgICAg
aWYgKG1fbGF5ZXJSZW5kZXJlcikgewogICAgICAgICAgICAgbV9jbGllbnQtPmRpZEFjdGl2YXRl
QWNjZWxlcmF0ZWRDb21wb3NpdGluZyh0cnVlKTsKICAgICAgICAgICAgIG1faXNBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nQWN0aXZlID0gdHJ1ZTsKQEAgLTI0MzYsMjQgKzI0NjEsMjggQEAgdm9pZCBX
ZWJWaWV3SW1wbDo6ZG9Db21wb3NpdGUoKQogICAgIGlmICghcGFnZSgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBtX2xheWVyUmVuZGVyZXItPnNldENvbXBvc2l0ZU9mZnNjcmVlbihzZXR0aW5n
cygpLT5jb21wb3NpdGVUb1RleHR1cmVFbmFibGVkKCkpOwotCi0gICAgQ0NIZWFkc1VwRGlzcGxh
eSogaHVkID0gbV9sYXllclJlbmRlcmVyLT5oZWFkc1VwRGlzcGxheSgpOwotICAgIGh1ZC0+c2V0
U2hvd0ZQU0NvdW50ZXIoc2V0dGluZ3MoKS0+c2hvd0ZQU0NvdW50ZXIoKSk7Ci0gICAgaHVkLT5z
ZXRTaG93UGxhdGZvcm1MYXllclRyZWUoc2V0dGluZ3MoKS0+c2hvd1BsYXRmb3JtTGF5ZXJUcmVl
KCkpOworICAgIG1fbGF5ZXJSZW5kZXJlci0+dXBkYXRlTGF5ZXJzKCk7CisgICAgbV9sYXllclJl
bmRlcmVyLT5kcmF3TGF5ZXJzKCk7Cit9CiAKLSAgICBtX2xheWVyUmVuZGVyZXItPnVwZGF0ZUFu
ZERyYXdMYXllcnMoKTsKK1Bhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IFdlYlZpZXdJbXBs
OjpjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCkKK3sKKyAgICBSZWZQdHI8R3JhcGhpY3ND
b250ZXh0M0Q+IGNvbnRleHQgPSBtX3RlbXBvcmFyeU9uc2NyZWVuR3JhcGhpY3NDb250ZXh0M0Qu
cmVsZWFzZSgpOworICAgIGlmICghY29udGV4dCkgeworICAgICAgICBjb250ZXh0ID0gR3JhcGhp
Y3NDb250ZXh0M0Q6OmNyZWF0ZShnZXRDb21wb3NpdG9yQ29udGV4dEF0dHJpYnV0ZXMoKSwgbV9w
YWdlLT5jaHJvbWUoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2lu
ZG93KTsKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgICAgICBjb250ZXh0LT5yZXNoYXBl
KHN0ZDo6bWF4KDEsIG1fc2l6ZS53aWR0aCksIHN0ZDo6bWF4KDEsIG1fc2l6ZS5oZWlnaHQpKTsK
KyAgICB9CisgICAgcmV0dXJuIGNvbnRleHQ7CiB9CiAKIHZvaWQgV2ViVmlld0ltcGw6OnJlYWxs
b2NhdGVSZW5kZXJlcigpCiB7Ci0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBuZXdDb250
ZXh0ID0gbV90ZW1wb3JhcnlPbnNjcmVlbkdyYXBoaWNzQ29udGV4dDNELmdldCgpOwotICAgIFdl
YkdyYXBoaWNzQ29udGV4dDNEKiB3ZWJDb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29udGV4dDNEKG5ld0NvbnRleHQuZ2V0KCkpOwotICAgIGlm
ICghbmV3Q29udGV4dCB8fCAhd2ViQ29udGV4dCB8fCB3ZWJDb250ZXh0LT5pc0NvbnRleHRMb3N0
KCkpCi0gICAgICAgIG5ld0NvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKAotICAg
ICAgICAgICAgZ2V0Q29tcG9zaXRvckNvbnRleHRBdHRyaWJ1dGVzKCksIG1fcGFnZS0+Y2hyb21l
KCksIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7CiAgICAg
Ly8gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSBtaWdodCBmYWlsIGFuZCByZXR1cm4gMCwgaW4g
dGhhdCBjYXNlIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlIHdpbGwgYWxzbyByZXR1cm4g
MC4KLSAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyID0gTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUobmV3Q29udGV4dCwgV2ViVmlld0ltcGxDb250ZW50
UGFpbnRlcjo6Y3JlYXRlKHRoaXMpKTsKKyAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVt
PiBsYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUodGhpcywgV2Vi
Vmlld0ltcGxDb250ZW50UGFpbnRlcjo6Y3JlYXRlKHRoaXMpKTsKKyNpZiBVU0UoVEhSRUFERURf
Q09NUE9TSVRJTkcpCisgICAgdXBkYXRlTGF5ZXJSZW5kZXJlclNldHRpbmdzKCk7CisjZW5kaWYK
IAogICAgIC8vIFJlYXR0YWNoIHRoZSByb290IGxheWVyLiAgQ2hpbGQgbGF5ZXJzIHdpbGwgZ2V0
IHJlYXR0YWNoZWQgYXMgYSBzaWRlIGVmZmVjdCBvZiB1cGRhdGVMYXllcnNSZWN1cnNpdmUuCiAg
ICAgaWYgKGxheWVyUmVuZGVyZXIpIHsKQEAgLTI0NjQsNyArMjQ5Myw3IEBAIHZvaWQgV2ViVmll
d0ltcGw6OnJlYWxsb2NhdGVSZW5kZXJlcigpCiAgICAgICAgIC8vIHJlc2hhcGUgc2hvdWxkIHJl
YWxseSBiZSBleHRyYWN0ZWQgaW50byBvbmUgZnVuY3Rpb247IGl0IGlzIG5vdAogICAgICAgICAv
LyBpbW1lZGlhdGVseSBvYnZpb3VzIHRoYXQgR3JhcGhpY3NDb250ZXh0M0Qgb2JqZWN0IHdpbGwg
bm90CiAgICAgICAgIC8vIGZ1bmN0aW9uIHByb3Blcmx5IHVudGlsIGl0cyByZXNoYXBlIG1ldGhv
ZCBpcyBjYWxsZWQuCi0gICAgICAgIG5ld0NvbnRleHQtPnJlc2hhcGUoc3RkOjptYXgoMSwgbV9z
aXplLndpZHRoKSwgc3RkOjptYXgoMSwgbV9zaXplLmhlaWdodCkpOworICAgICAgICBsYXllclJl
bmRlcmVyLT5jb250ZXh0KCktPnJlc2hhcGUoc3RkOjptYXgoMSwgbV9zaXplLndpZHRoKSwgc3Rk
OjptYXgoMSwgbV9zaXplLmhlaWdodCkpOwogICAgICAgICBzZXRSb290R3JhcGhpY3NMYXllciht
X2xheWVyUmVuZGVyZXItPnJvb3RMYXllcigpKTsKICAgICAgICAgLy8gRm9yY2VzIFZpZXdIb3N0
TXNnX0RpZEFjdGl2YXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyB0byBiZSBzZW50IHNvCiAgICAg
ICAgIC8vIHRoYXQgdGhlIGJyb3dzZXIgcHJvY2VzcyBjYW4gcmVhY3F1aXJlIHN1cmZhY2VzLgpA
QCAtMjQ3NCw5ICsyNTAzLDIwIEBAIHZvaWQgV2ViVmlld0ltcGw6OnJlYWxsb2NhdGVSZW5kZXJl
cigpCiB9CiAjZW5kaWYKIAotdm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlTGF5ZXJSZW5kZXJlclZp
ZXdwb3J0KCkKK3ZvaWQgV2ViVmlld0ltcGw6OnVwZGF0ZUxheWVyUmVuZGVyZXJTZXR0aW5ncygp
CiB7CiAgICAgQVNTRVJUKG1fbGF5ZXJSZW5kZXJlcik7CisgICAgbV9sYXllclJlbmRlcmVyLT5z
ZXRDb21wb3NpdGVPZmZzY3JlZW4oc2V0dGluZ3MoKS0+Y29tcG9zaXRlVG9UZXh0dXJlRW5hYmxl
ZCgpKTsKKworICAgIENDSGVhZHNVcERpc3BsYXkqIGh1ZCA9IG1fbGF5ZXJSZW5kZXJlci0+aGVh
ZHNVcERpc3BsYXkoKTsKKyAgICBodWQtPnNldFNob3dGUFNDb3VudGVyKHNldHRpbmdzKCktPnNo
b3dGUFNDb3VudGVyKCkpOworICAgIGh1ZC0+c2V0U2hvd1BsYXRmb3JtTGF5ZXJUcmVlKHNldHRp
bmdzKCktPnNob3dQbGF0Zm9ybUxheWVyVHJlZSgpKTsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6
dXBkYXRlTGF5ZXJSZW5kZXJlclZpZXdwb3J0KCkKK3sKKyAgICBpZiAoIW1fbGF5ZXJSZW5kZXJl
cikKKyAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFwYWdlKCkpCiAgICAgICAgIHJldHVybjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmggYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCmluZGV4IGYxMDIwMmY3NmRh
NmNkZTMyNjU5MDliNGZlNjVmNzBhYWRiOGJmOTMuLjc3YzUxYWQ4MjE0MzMwMjYzYWRmMTBiYmRl
MzA0OTU4NGQwNDIzMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwu
aApAQCAtNTUsNiArNTUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDaHJvbWl1bURh
dGFPYmplY3Q7CiBjbGFzcyBEb2N1bWVudExvYWRlcjsKIGNsYXNzIEZyYW1lOworY2xhc3MgR3Jh
cGhpY3NDb250ZXh0M0Q7CiBjbGFzcyBIaXN0b3J5SXRlbTsKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7
CiBjbGFzcyBLZXlib2FyZEV2ZW50OwpAQCAtODYsMTcgKzg3LDE4IEBAIGNsYXNzIFdlYk1vdXNl
V2hlZWxFdmVudDsKIGNsYXNzIFdlYlNldHRpbmdzSW1wbDsKIGNsYXNzIFdlYlRvdWNoRXZlbnQ7
CiAKLWNsYXNzIFdlYlZpZXdJbXBsIDogcHVibGljIFdlYlZpZXcsIHB1YmxpYyBSZWZDb3VudGVk
PFdlYlZpZXdJbXBsPiB7CitjbGFzcyBXZWJWaWV3SW1wbCA6IHB1YmxpYyBXZWJWaWV3LCBwdWJs
aWMgV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Q2xpZW50LCBwdWJsaWMgUmVmQ291bnRlZDxXZWJW
aWV3SW1wbD4gewogcHVibGljOgogICAgIC8vIFdlYldpZGdldCBtZXRob2RzOgogICAgIHZpcnR1
YWwgdm9pZCBjbG9zZSgpOwogICAgIHZpcnR1YWwgV2ViU2l6ZSBzaXplKCkgeyByZXR1cm4gbV9z
aXplOyB9CiAgICAgdmlydHVhbCB2b2lkIHJlc2l6ZShjb25zdCBXZWJTaXplJik7Ci0gICAgdmly
dHVhbCB2b2lkIGFuaW1hdGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZShkb3VibGUgZnJh
bWVCZWdpblRpbWUpOwogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKICAgICB2aXJ0dWFsIHZv
aWQgcGFpbnQoV2ViQ2FudmFzKiwgY29uc3QgV2ViUmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCB0
aGVtZUNoYW5nZWQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29tcG9zaXRlKGJvb2wgZmluaXNoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgY29tcG9zaXRlKCk7CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxl
Q29tcG9zaXRlKCk7CiAgICAgdmlydHVhbCBib29sIGhhbmRsZUlucHV0RXZlbnQoY29uc3QgV2Vi
SW5wdXRFdmVudCYpOwogICAgIHZpcnR1YWwgdm9pZCBtb3VzZUNhcHR1cmVMb3N0KCk7CiAgICAg
dmlydHVhbCB2b2lkIHNldEZvY3VzKGJvb2wgZW5hYmxlKTsKQEAgLTE5Niw2ICsxOTgsMTEgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5h
Y3RpdmVGb3JlZ3JvdW5kQ29sb3IpOwogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtQ3VzdG9tQ29u
dGV4dE1lbnVBY3Rpb24odW5zaWduZWQgYWN0aW9uKTsKIAorICAgIC8vIENDTGF5ZXJUcmVlSG9z
dENsaWVudAorICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJl
Z2luVGltZSk7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRD4gY3Jl
YXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpOworCisKICAgICAvLyBXZWJWaWV3SW1wbAogCiAg
ICAgdm9pZCBzZXRJZ25vcmVJbnB1dEV2ZW50cyhib29sIG5ld1ZhbHVlKTsKQEAgLTMzOSw2ICsz
NDYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKTsKICAg
ICB2b2lkIHNjcm9sbFJvb3RMYXllclJlY3QoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xs
RGVsdGEsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KTsKICAgICB2b2lkIGludmFs
aWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2b2lkIGRv
VXBkYXRlQW5kQ29tcG9zaXRlKCk7CiAjZW5kaWYKIAogICAgIC8vIFJldHVybnMgdGhlIG9uc2Ny
ZWVuIDNEIGNvbnRleHQgdXNlZCBieSB0aGUgY29tcG9zaXRvci4gVGhpcyBpcwpAQCAtNDAyLDEx
ICs0MTAsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgV2ViUG9pbnQmIHNjcmVlblBvaW50LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEcmFnQWN0aW9uKTsKIAorCiAjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbXBv
c2l0aW5nQWN0aXZlKGJvb2wpOwogICAgIHZvaWQgZG9Db21wb3NpdGUoKTsKICAgICB2b2lkIGRv
UGl4ZWxSZWFkYmFja1RvQ2FudmFzKFdlYkNhbnZhcyosIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
KTsKICAgICB2b2lkIHJlYWxsb2NhdGVSZW5kZXJlcigpOworICAgIHZvaWQgdXBkYXRlTGF5ZXJS
ZW5kZXJlclNldHRpbmdzKCk7CiAgICAgdm9pZCB1cGRhdGVMYXllclJlbmRlcmVyVmlld3BvcnQo
KTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
TGF5ZXJUcmVlSG9zdFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xh
eWVyVHJlZUhvc3RUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NjZjYjNiNGE0NDM0MjlhZjc1NWYyMDU1
OWJiNzBmM2U3M2EwMzVjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcApAQCAtMCwwICsxLDUzNCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lU
SU5HKQorCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCisKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKKyNp
bmNsdWRlICJjYy9DQ01haW5UaHJlYWRUYXNrLmgiCisjaW5jbHVkZSAiY2MvQ0NUaHJlYWRUYXNr
LmgiCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQvc3VwcG9ydC93
ZWJraXRfc3VwcG9ydC5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgeworCitj
bGFzcyBNb2NrTGF5ZXJUcmVlSG9zdDsKK2NsYXNzIE1vY2tMYXllclRyZWVIb3N0Q2xpZW50Owor
Y2xhc3MgTW9ja0xheWVyVHJlZUhvc3RJbXBsOworCisvLyBUaGUgQ0NMYXllclRyZWVIb3N0VGVz
dCBydW5zIHdpdGggdGhlIG1haW4gbG9vcCBydW5uaW5nLiBJdCBpbnN0YW50aWF0ZXMgYSBzaW5n
bGUgTW9ja0xheWVyVHJlZUhvc3QgYW5kIGFzc29jaWF0ZWQKKy8vIE1vY2tMYXllclRyZWVIb3N0
SW1wbC9Nb2NrTGF5ZXJUcmVlSG9zdENsaWVudC4KKy8vCisvLyBiZWdpblRlc3QoKSBpcyBjYWxs
ZWQgb25jZSB0aGUgbWFpbiBtZXNzYWdlIGxvb3AgaXMgcnVubmluZyBhbmQgdGhlIGxheWVyIHRy
ZWUgaG9zdCBpcyBpbml0aWFsaXplZC4KKy8vCisvLyBLZXkgc3RhZ2VzIG9mIHRoZSBkcmF3aW5n
IGxvb3AsIGUuZy4gZHJhd2luZyBvciBjb21taXRpbmcsIHJlZGlyZWN0IHRvIENDTGF5ZXJUcmVl
SG9zdFRlc3QgbWV0aG9kcyBvZiBzaW1pbGFyIG5hbWVzLgorLy8gVG8gdHJhY2sgdGhlIGNvbW1p
dCBwcm9jZXNzLCBvdmVycmlkZSB0aGVzZSBmdW5jdGlvbnMuCisvLworLy8gVGhlIHRlc3QgY29u
dGludWVzIHVudGlsIHNvbWVvbmUgY2FsbHMgZW5kVGVzdC4gZW5kVGVzdCBjYW4gYmUgY2FsbGVk
IG9uIGFueSB0aHJlYWQsIGJ1dCBiZSBhd2FyZSB0aGF0CisvLyBlbmRpbmcgdGhlIHRlc3QgaXMg
YW4gYXN5bmNocm9ub3VzIHByb2Nlc3MuCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0IDogcHVi
bGljIHRlc3Rpbmc6OlRlc3QgeworcHVibGljOgorICAgIENDTGF5ZXJUcmVlSG9zdFRlc3QoKQor
ICAgICAgICA6IG1fYmVnaW5uaW5nKGZhbHNlKQorICAgICAgICAsIG1fZW5kV2hlbkJlZ2luUmV0
dXJucyhmYWxzZSkKKyAgICAgICAgLCBtX3J1bm5pbmcoZmFsc2UpCisgICAgICAgICwgbV90aW1l
ZE91dChmYWxzZSkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkgPSAwOworCisg
ICAgdmlydHVhbCB2b2lkIGJlZ2luVGVzdCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0
ZUFuZExheW91dChNb2NrTGF5ZXJUcmVlSG9zdENsaWVudCogbGF5ZXJUcmVlSG9zdCwgZG91Ymxl
IGZyYW1lQmVnaW5UaW1lKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21taXRPbkNDVGhy
ZWFkKE1vY2tMYXllclRyZWVIb3N0SW1wbCogbGF5ZXJUcmVlSG9zdEltcGwpIHsgfQorICAgIHZp
cnR1YWwgdm9pZCBiZWdpbkNvbW1pdE9uTWFpblRocmVhZChNb2NrTGF5ZXJUcmVlSG9zdCogbGF5
ZXJUcmVlSG9zdCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGNvbW1pdE9uQ0NUaHJlYWQoTW9ja0xh
eWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QsIE1vY2tMYXllclRyZWVIb3N0SW1wbCogbGF5ZXJU
cmVlSG9zdEltcGwpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjb21taXRDb21wbGV0ZU9uQ0NUaHJl
YWQoTW9ja0xheWVyVHJlZUhvc3RJbXBsKiBsYXllclRyZWVIb3N0SW1wbCkgeyB9CisgICAgdmly
dHVhbCB2b2lkIGNvbW1pdENvbXBsZXRlT25NYWluVGhyZWFkKE1vY2tMYXllclRyZWVIb3N0KiBs
YXllclRyZWVIb3N0KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVyc0FuZFByZXNlbnRP
bkNDVGhyZWFkKE1vY2tMYXllclRyZWVIb3N0SW1wbCogbGF5ZXJUcmVlSG9zdEltcGwpIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVMYXllcnMoTW9ja0xheWVyVHJlZUhvc3QqIGxheWVyVHJl
ZUhvc3QpIHsgfQorCisgICAgdm9pZCBlbmRUZXN0KCk7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lk
IGRvQmVnaW5UZXN0KCk7CisKKyAgICBzdGF0aWMgdm9pZCBvbkJlZ2luVGVzdCh2b2lkKiBzZWxm
KQorICAgIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8Q0NMYXllclRyZWVIb3N0VGVzdCo+KHNlbGYp
LT5kb0JlZ2luVGVzdCgpOworICAgIH0KKworICAgIHZvaWQgZG9FbmRUZXN0KCkKKyAgICB7Cisg
ICAgfQorCisgICAgc3RhdGljIHZvaWQgb25FbmRUZXN0KHZvaWQqIHNlbGYpCisgICAgeworICAg
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgICAgICBDQ0xheWVyVHJlZUhvc3RUZXN0
KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8Q0NMYXllclRyZWVIb3N0VGVzdCo+KHNlbGYpOworICAgICAg
ICB0ZXN0LT5tX2xheWVyVHJlZUhvc3QuY2xlYXIoKTsKKyAgICAgICAgdGVzdC0+bV9jbGllbnQu
Y2xlYXIoKTsKKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlF1aXRNZXNzYWdlTG9vcCgpOworICAg
IH0KKworICAgIHZvaWQgcnVuVGVzdCgpCisgICAgeworICAgICAgICB3ZWJraXRfc3VwcG9ydDo6
UG9zdERlbGF5ZWRUYXNrKENDTGF5ZXJUcmVlSG9zdFRlc3Q6Om9uQmVnaW5UZXN0LCBzdGF0aWNf
Y2FzdDx2b2lkKj4odGhpcyksIDApOworICAgICAgICB3ZWJraXRfc3VwcG9ydDo6UG9zdERlbGF5
ZWRUYXNrKENDTGF5ZXJUcmVlSG9zdFRlc3Q6OnRlc3RUaW1lb3V0LCBzdGF0aWNfY2FzdDx2b2lk
Kj4odGhpcyksIDUwMDApOworICAgICAgICB3ZWJraXRfc3VwcG9ydDo6UnVuTWVzc2FnZUxvb3Ao
KTsKKyAgICAgICAgbV9ydW5uaW5nID0gZmFsc2U7CisgICAgICAgIGJvb2wgdGltZWRPdXQgPSBt
X3RpbWVkT3V0OyAvLyBTYXZlIHdoZXRoZXIgd2UncmUgdGltZWQgb3V0IGluIGNhc2UgUnVuQWxs
UGVuZGluZ01lc3NhZ2VzIGhhcyB0aGUgdGltZW91dC4KKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6
OlJ1bkFsbFBlbmRpbmdNZXNzYWdlcygpOworICAgICAgICBpZiAodGltZWRPdXQpIHsKKyAgICAg
ICAgICAgIHByaW50ZigiVGVzdCB0aW1lZCBvdXQiKTsKKyAgICAgICAgICAgIEZBSUwoKSA8PCAi
VGVzdCB0aW1lZCBvdXQiOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IGFmdGVyVGVzdCgpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHRlc3RUaW1lb3V0KHZvaWQq
IHNlbGYpCisgICAgeworICAgICAgICBDQ0xheWVyVHJlZUhvc3RUZXN0KiB0ZXN0ID0gc3RhdGlj
X2Nhc3Q8Q0NMYXllclRyZWVIb3N0VGVzdCo+KHNlbGYpOworICAgICAgICBpZiAoIXRlc3QtPm1f
cnVubmluZykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGVzdC0+bV90aW1lZE91dCA9
IHRydWU7CisgICAgICAgIHRlc3QtPmVuZFRlc3QoKTsKKyAgICB9CisKKyAgICBNdXRleCBtX3Ry
YWNlc0xvY2s7CisgICAgVmVjdG9yPHN0ZDo6c3RyaW5nPiBtX3RyYWNlczsKKworICAgIE93blB0
cjxNb2NrTGF5ZXJUcmVlSG9zdENsaWVudD4gbV9jbGllbnQ7CisgICAgUmVmUHRyPE1vY2tMYXll
clRyZWVIb3N0PiBtX2xheWVyVHJlZUhvc3Q7CisKK3ByaXZhdGU6CisgICAgYm9vbCBtX2JlZ2lu
bmluZzsKKyAgICBib29sIG1fZW5kV2hlbkJlZ2luUmV0dXJuczsKKyAgICBib29sIG1fcnVubmlu
ZzsKKyAgICBib29sIG1fdGltZWRPdXQ7Cit9OworCitjbGFzcyBNb2NrTGF5ZXJUcmVlSG9zdENs
aWVudCA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RDbGllbnQgeworcHVibGljOgorICAgIE1vY2tM
YXllclRyZWVIb3N0Q2xpZW50KENDTGF5ZXJUcmVlSG9zdFRlc3QqIHRlc3QpIDogbV90ZXN0KHRl
c3QpIHsgfQorCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjcmVh
dGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZjxHcmFwaGljc0NvbnRleHQzRD4oMCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFuaW1h
dGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQorICAgIHsKKyAgICAgICAgbV90ZXN0
LT5hbmltYXRlQW5kTGF5b3V0KHRoaXMsIGZyYW1lQmVnaW5UaW1lKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdCogbV90ZXN0OworfTsKKworY2xhc3MgTW9ja0xh
eWVyVHJlZUhvc3RDb21taXR0ZXIgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxNb2NrTGF5ZXJUcmVlSG9zdENvbW1pdHRl
cj4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRQdHIobmV3IE1vY2tMYXllclRyZWVIb3N0Q29tbWl0dGVyKHRlc3QpKTsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0KENDTGF5ZXJUcmVlSG9zdCogaG9zdCwgQ0NMYXll
clRyZWVIb3N0SW1wbCogaG9zdEltcGwpCisgICAgeworICAgICAgICBDQ0xheWVyVHJlZUhvc3RD
b21taXR0ZXI6OmNvbW1pdChob3N0LCBob3N0SW1wbCk7CisgICAgICAgIG1fdGVzdC0+Y29tbWl0
T25DQ1RocmVhZChyZWludGVycHJldF9jYXN0PE1vY2tMYXllclRyZWVIb3N0Kj4oaG9zdCksIHJl
aW50ZXJwcmV0X2Nhc3Q8TW9ja0xheWVyVHJlZUhvc3RJbXBsKj4oaG9zdEltcGwpKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgTW9ja0xheWVyVHJlZUhvc3RDb21taXR0ZXIoQ0NMYXllclRyZWVI
b3N0VGVzdCogdGVzdCkgOiBtX3Rlc3QodGVzdCkgeyB9CisgICAgQ0NMYXllclRyZWVIb3N0VGVz
dCogbV90ZXN0OworfTsKKworY2xhc3MgTW9ja0xheWVyVHJlZUhvc3RJbXBsIDogcHVibGljIEND
TGF5ZXJUcmVlSG9zdEltcGwgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPE1vY2tM
YXllclRyZWVIb3N0SW1wbD4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqIGNsaWVu
dCwgQ0NMYXllclRyZWVIb3N0VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFB0cihuZXcgTW9ja0xheWVyVHJlZUhvc3RJbXBsKGNsaWVudCwgdGVzdCkpOworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdCgpCisgICAgeworICAgICAgICBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpiZWdpbkNvbW1pdCgpOworICAgICAgICBtX3Rlc3QtPmJlZ2luQ29tbWl0T25D
Q1RocmVhZCh0aGlzKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q29tcGxldGUo
KQorICAgIHsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29tbWl0Q29tcGxldGUoKTsK
KyAgICAgICAgbV90ZXN0LT5jb21taXRDb21wbGV0ZU9uQ0NUaHJlYWQodGhpcyk7CisgICAgfQor
CisgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNBbmRQcmVzZW50KCkKKyAgICB7CisgICAgICAg
IG1fdGVzdC0+ZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhyZWFkKHRoaXMpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBNb2NrTGF5ZXJUcmVlSG9zdEltcGwoQ0NMYXllclRyZWVIb3N0SW1wbENs
aWVudCogY2xpZW50LCBDQ0xheWVyVHJlZUhvc3RUZXN0KiB0ZXN0KQorICAgICAgICAgICAgOiBD
Q0xheWVyVHJlZUhvc3RJbXBsKGNsaWVudCkKKyAgICAgICAgICAgICwgbV90ZXN0KHRlc3QpCisg
ICAgeworICAgIH0KKworICAgIENDTGF5ZXJUcmVlSG9zdFRlc3QqIG1fdGVzdDsKK307CisKK2Ns
YXNzIE1vY2tMYXllclRyZWVIb3N0SW1wbFByb3h5IDogcHVibGljIENDTGF5ZXJUcmVlSG9zdElt
cGxQcm94eSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8TW9ja0xheWVyVHJlZUhv
c3RJbXBsUHJveHk+IGNyZWF0ZShDQ0xheWVyVHJlZUhvc3QqIGhvc3QsIENDTGF5ZXJUcmVlSG9z
dFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE1vY2tMYXll
clRyZWVIb3N0SW1wbFByb3h5KGhvc3QsIHRlc3QpKTsKKyAgICB9CisKKyAgICBQYXNzT3duUHRy
PENDTGF5ZXJUcmVlSG9zdEltcGw+IGNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBNb2NrTGF5ZXJUcmVlSG9zdEltcGw6OmNyZWF0ZSh0aGlzLCBtX3Rlc3Qp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBNb2NrTGF5ZXJUcmVlSG9zdEltcGxQcm94eShDQ0xh
eWVyVHJlZUhvc3QqIGhvc3QsIENDTGF5ZXJUcmVlSG9zdFRlc3QqIHRlc3QpCisgICAgICAgIDog
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5KGhvc3QpCisgICAgICAgICwgbV90ZXN0KHRlc3QpIHsg
fQorCisgICAgQ0NMYXllclRyZWVIb3N0VGVzdCogbV90ZXN0OworfTsKKworY2xhc3MgTW9ja0xh
eWVyVHJlZUhvc3QgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0IHsKK3B1YmxpYzoKKyAgICBNb2Nr
TGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVudCwgQ0NMYXllclRyZWVI
b3N0VGVzdCogdGVzdCkKKyAgICAgICAgOiBDQ0xheWVyVHJlZUhvc3QoY2xpZW50KQorICAgICAg
ICAsIG1fdGVzdCh0ZXN0KSB7IH0KKworICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVyVHJl
ZUhvc3RJbXBsUHJveHk+IGNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsUHJveHkoKQorICAgIHsKKyAg
ICAgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eT4gcHJveHkgPSBNb2NrTGF5ZXJU
cmVlSG9zdEltcGxQcm94eTo6Y3JlYXRlKHRoaXMsIG1fdGVzdCk7CisgICAgICAgIHByb3h5LT5z
dGFydCgpOworICAgICAgICByZXR1cm4gcHJveHkucmVsZWFzZSgpOworICAgIH0KKworICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVMYXllcnMoKQorICAgIHsKKyAgICAgICAgbV90ZXN0LT51cGRhdGVM
YXllcnModGhpcyk7CisgICAgfQorCisgICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5ZXJUcmVl
SG9zdENvbW1pdHRlcj4gY3JlYXRlTGF5ZXJUcmVlSG9zdENvbW1pdHRlcigpCisgICAgeworICAg
ICAgICByZXR1cm4gTW9ja0xheWVyVHJlZUhvc3RDb21taXR0ZXI6OmNyZWF0ZShtX3Rlc3QpOwor
ICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdCgpCisgICAgeworICAgICAgICBD
Q0xheWVyVHJlZUhvc3Q6OmJlZ2luQ29tbWl0KCk7CisgICAgICAgIG1fdGVzdC0+YmVnaW5Db21t
aXRPbk1haW5UaHJlYWQodGhpcyk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGNvbW1pdENv
bXBsZXRlKCkKKyAgICB7CisgICAgICAgIG1fdGVzdC0+Y29tbWl0Q29tcGxldGVPbk1haW5UaHJl
YWQodGhpcyk7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0Q29tcGxldGUoKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdCogbV90ZXN0OworfTsKKwor
dm9pZCBDQ0xheWVyVHJlZUhvc3RUZXN0Ojpkb0JlZ2luVGVzdCgpCit7CisgICAgQVNTRVJUKCFt
X3J1bm5pbmcpOworICAgIG1fcnVubmluZyA9IHRydWU7CisgICAgbV9jbGllbnQgPSBhZG9wdFB0
cihuZXcgTW9ja0xheWVyVHJlZUhvc3RDbGllbnQodGhpcykpOworICAgIG1fbGF5ZXJUcmVlSG9z
dCA9IGFkb3B0UmVmKG5ldyBNb2NrTGF5ZXJUcmVlSG9zdChtX2NsaWVudC5nZXQoKSwgdGhpcykp
OworICAgIG1fbGF5ZXJUcmVlSG9zdC0+aW5pdCgpOworICAgIG1fYmVnaW5uaW5nID0gdHJ1ZTsK
KyAgICBiZWdpblRlc3QoKTsKKyAgICBtX2JlZ2lubmluZyA9IGZhbHNlOworICAgIGlmIChtX2Vu
ZFdoZW5CZWdpblJldHVybnMpCisgICAgICAgIG9uRW5kVGVzdChzdGF0aWNfY2FzdDx2b2lkKj4o
dGhpcykpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdFRlc3Q6OmVuZFRlc3QoKQoreworICAg
IC8vIElmIHdlIGFyZSBjYWxsZWQgZnJvbSB0aGUgQ0NUaHJlYWQsIHJlLWNhbGwgZW5kVGVzdCBv
biB0aGUgbWFpbiB0aHJlYWQuCisgICAgaWYgKCFpc01haW5UaHJlYWQoKSkKKyAgICAgICAgQ0NN
YWluVGhyZWFkOjpwb3N0VGFzayhjcmVhdGVNYWluVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRy
ZWVIb3N0VGVzdDo6ZW5kVGVzdCkpOworICAgIGVsc2UgeworICAgICAgICAvLyBGb3IgdGhlIGNh
c2Ugd2hlcmUgd2UgZW5kVGVzdCBkdXJpbmcgYmVnaW5UZXN0KCksIHNldCBhIGZsYWcgdG8gaW5k
aWNhdGUgdGhhdAorICAgICAgICAvLyB0aGUgdGVzdCBzaG91bGQgZW5kIHRoZSBzZWNvbmQgYmVn
aW5UZXN0IHJlZ2FpbnMgY29udHJvbC4KKyAgICAgICAgaWYgKG1fYmVnaW5uaW5nKQorICAgICAg
ICAgICAgbV9lbmRXaGVuQmVnaW5SZXR1cm5zID0gdHJ1ZTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgb25FbmRUZXN0KHN0YXRpY19jYXN0PHZvaWQqPih0aGlzKSk7CisgICAgfQorfQorCisv
LyBTaG9ydGxpdmVkIGxheWVyVHJlZUhvc3RzIHNob3VsZG4ndCBkaWUuCitjbGFzcyBDQ0xheWVy
VHJlZUhvc3RUZXN0U2hvcnRsaXZlZDEgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdCB7Citw
dWJsaWM6CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQxKCkgeyB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkKKyAgICB7CisgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkKKyAgICB7CisgICAgfQorfTsKK1RFU1Rf
RihDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDEsIHJ1bikKK3sKKyAgICBydW5UZXN0KCk7
Cit9CisKKy8vIFNob3J0bGl2ZWQgbGF5ZXJUcmVlSG9zdHMgc2hvdWxkbid0IGRpZSB3aXRoIGEg
Y29tbWl0IGluIGZsaWdodC4KK2NsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3RTaG9ydGxpdmVkMiA6
IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0IHsKK3B1YmxpYzoKKyAgICBDQ0xheWVyVHJlZUhv
c3RUZXN0U2hvcnRsaXZlZDIoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKQor
ICAgIHsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXROZWVkc0NvbW1pdEFuZFJlZHJhdygp
OworICAgICAgICBlbmRUZXN0KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFmdGVyVGVz
dCgpCisgICAgeworICAgIH0KK307CitURVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2
ZWQyLCBydW4pCit7CisgICAgcnVuVGVzdCgpOworfQorCisvLyBTaG9ydGxpdmVkIGxheWVyVHJl
ZUhvc3RzIHNob3VsZG4ndCBkaWUgd2l0aCBhIHJlZHJhdyBpbiBmbGlnaHQuCitjbGFzcyBDQ0xh
eWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDMgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdCB7
CitwdWJsaWM6CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQzKCkgeyB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkKKyAgICB7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9z
dC0+c2V0TmVlZHNSZWRyYXcoKTsKKyAgICAgICAgZW5kVGVzdCgpOworICAgIH0KKworICAgIHZp
cnR1YWwgdm9pZCBhZnRlclRlc3QoKQorICAgIHsKKyAgICB9Cit9OworVEVTVF9GKENDTGF5ZXJU
cmVlSG9zdFRlc3RTaG9ydGxpdmVkMywgcnVuKQoreworICAgIHJ1blRlc3QoKTsKK30KKworLy8g
Q29uc3RhbnRseSByZWRyYXdpbmcgbGF5ZXJUcmVlSG9zdHMgc2hvdWxkbid0IGRpZSB3aGVuIHRo
ZXkgY29tbWl0CitjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0Q29tbWl0aW5nV2l0aENvbnRpbnVv
dXNSZWRyYXcgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdCB7CitwdWJsaWM6CisgICAgQ0NM
YXllclRyZWVIb3N0VGVzdENvbW1pdGluZ1dpdGhDb250aW51b3VzUmVkcmF3KCkKKyAgICAgICAg
OiBtX251bUNvbXBsZXRlQ29tbWl0cygwKQorICAgICAgICAsIG1fbnVtRHJhd3MoMCkKKyAgICB7
CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGJlZ2luVGVzdCgpCisgICAgeworICAgICAgICBt
X2xheWVyVHJlZUhvc3QtPnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgICAgIGVuZFRl
c3QoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q29tcGxldGVPbkNDVGhyZWFk
KE1vY2tMYXllclRyZWVIb3N0SW1wbCogbGF5ZXJUcmVlSG9zdEltcGwpCisgICAgeworICAgICAg
ICBtX251bUNvbXBsZXRlQ29tbWl0cysrOworICAgICAgICBpZiAobV9udW1Db21wbGV0ZUNvbW1p
dHMgPT0gMikKKyAgICAgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhyZWFkKE1vY2tMYXllclRyZWVIb3N0SW1wbCog
bGF5ZXJUcmVlSG9zdEltcGwpCisgICAgeworICAgICAgICBpZiAobV9udW1EcmF3cyA9PSAxKQor
ICAgICAgICAgICAgbGF5ZXJUcmVlSG9zdEltcGwtPnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7
CisgICAgICAgIG1fbnVtRHJhd3MrKzsKKyAgICAgICAgbGF5ZXJUcmVlSG9zdEltcGwtPnNldE5l
ZWRzUmVkcmF3KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFmdGVyVGVzdCgpCisgICAg
eworICAgIH0KKworcHJpdmF0ZToKKyAgICBpbnQgbV9udW1Db21wbGV0ZUNvbW1pdHM7CisgICAg
aW50IG1fbnVtRHJhd3M7Cit9OworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RDb21taXRpbmdX
aXRoQ29udGludW91c1JlZHJhdywgcnVuKQoreworICAgIHJ1blRlc3QoKTsKK30KKworLy8gVHdv
IHNldE5lZWRzQ29tbWl0cyBpbiBhIHJvdyBzaG91bGQgbGVhZCB0byBhdCBsZWFzdCAxIGNvbW1p
dCBhbmQgYXQgbGVhc3QgMQorLy8gZHJhdyB3aXRoIGZyYW1lIDAuCitjbGFzcyBDQ0xheWVyVHJl
ZUhvc3RUZXN0U2V0TmVlZHNDb21taXQxIDogcHVibGljIENDTGF5ZXJUcmVlSG9zdFRlc3Qgewor
cHVibGljOgorICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc0NvbW1pdDEoKQorICAgICAg
ICA6IG1fbnVtQ29tbWl0cygwKQorICAgICAgICAsIG1fbnVtRHJhd3MoMCkKKyAgICB7CisgICAg
fQorCisgICAgdmlydHVhbCB2b2lkIGJlZ2luVGVzdCgpCisgICAgeworICAgICAgICBtX2xheWVy
VHJlZUhvc3QtPnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgICAgIG1fbGF5ZXJUcmVl
SG9zdC0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhyZWFkKE1vY2tMYXllclRyZWVIb3N0SW1wbCog
bGF5ZXJUcmVlSG9zdEltcGwpCisgICAgeworICAgICAgICBtX251bURyYXdzKys7CisgICAgICAg
IGlmICghbGF5ZXJUcmVlSG9zdEltcGwtPnNvdXJjZUZyYW1lTnVtYmVyKCkpCisgICAgICAgICAg
ICBlbmRUZXN0KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGNvbW1pdE9uQ0NUaHJlYWQo
TW9ja0xheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QsIE1vY2tMYXllclRyZWVIb3N0SW1wbCog
aW1wbCkKKyAgICB7CisgICAgICAgIG1fbnVtQ29tbWl0cysrOworICAgIH0KKworICAgIHZpcnR1
YWwgdm9pZCBhZnRlclRlc3QoKQorICAgIHsKKyAgICAgICAgRVhQRUNUX0dFKDEsIG1fbnVtQ29t
bWl0cyk7CisgICAgICAgIEVYUEVDVF9HRSgxLCBtX251bURyYXdzKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgaW50IG1fbnVtQ29tbWl0czsKKyAgICBpbnQgbV9udW1EcmF3czsKK307CitURVNU
X0YoQ0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzQ29tbWl0MSwgcnVuKQoreworICAgIHJ1blRl
c3QoKTsKK30KKworLy8gQSBzZXROZWVkc0NvbW1pdCBzaG91bGQgbGVhZCB0byAxIGNvbW1pdC4g
SXNzdWluZyBhIHNlY29uZCBjb21taXQgYWZ0ZXIgdGhhdAorLy8gZmlyc3QgY29tbWl0dGVkIGZy
YW1lIGRyYXdzIHNob3VsZCBsZWFkIHRvIGFub3RoZXIgY29tbWl0LgorY2xhc3MgQ0NMYXllclRy
ZWVIb3N0VGVzdFNldE5lZWRzQ29tbWl0MiA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0IHsK
K3B1YmxpYzoKKyAgICBDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQyKCkKKyAgICAg
ICAgOiBtX251bUNvbW1pdHMoMCkKKyAgICAgICAgLCBtX251bURyYXdzKDApCisgICAgeworICAg
IH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKQorICAgIHsKKyAgICAgICAgbV9sYXll
clRyZWVIb3N0LT5zZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOworICAgIH0KKworICAgIHZpcnR1
YWwgdm9pZCBkcmF3TGF5ZXJzQW5kUHJlc2VudE9uQ0NUaHJlYWQoTW9ja0xheWVyVHJlZUhvc3RJ
bXBsKiBsYXllclRyZWVIb3N0SW1wbCkKKyAgICB7CisgICAgICAgIGlmICghbGF5ZXJUcmVlSG9z
dEltcGwtPnNvdXJjZUZyYW1lTnVtYmVyKCkpCisgICAgICAgICAgICBsYXllclRyZWVIb3N0SW1w
bC0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICAgICAgZWxzZSBpZiAobGF5ZXJUcmVl
SG9zdEltcGwtPnNvdXJjZUZyYW1lTnVtYmVyKCkgPT0gMSkKKyAgICAgICAgICAgIGVuZFRlc3Qo
KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0T25DQ1RocmVhZChNb2NrTGF5ZXJU
cmVlSG9zdCogbGF5ZXJUcmVlSG9zdCwgTW9ja0xheWVyVHJlZUhvc3RJbXBsKiBpbXBsKQorICAg
IHsKKyAgICAgICAgbV9udW1Db21taXRzKys7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFm
dGVyVGVzdCgpCisgICAgeworICAgICAgICBFWFBFQ1RfRVEoMiwgbV9udW1Db21taXRzKTsKKyAg
ICAgICAgRVhQRUNUX0dFKDIsIG1fbnVtRHJhd3MpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBp
bnQgbV9udW1Db21taXRzOworICAgIGludCBtX251bURyYXdzOworfTsKK1RFU1RfRihDQ0xheWVy
VHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQyLCBydW4pCit7CisgICAgcnVuVGVzdCgpOworfQor
CisvLyAxIHNldE5lZWRzUmVkcmF3IGFmdGVyIHRoZSBmaXJzdCBjb21taXQgaGFzIGNvbXBsZXRl
ZCBzaG91bGQgbGVhZCB0byAxCisvLyBhZGRpdGlvbmFsIGRyYXcuCitjbGFzcyBDQ0xheWVyVHJl
ZUhvc3RUZXN0U2V0TmVlZHNSZWRyYXcgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdCB7Citw
dWJsaWM6CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzUmVkcmF3KCkKKyAgICAgICAg
OiBtX251bUNvbW1pdHMoMCkKKyAgICAgICAgLCBtX251bURyYXdzKDApCisgICAgeworICAgIH0K
KworICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhyZWFkKE1vY2tMYXllclRyZWVIb3N0
SW1wbCogaW1wbCkKKyAgICB7CisgICAgICAgIEVYUEVDVF9FUSgwLCBpbXBsLT5zb3VyY2VGcmFt
ZU51bWJlcigpKTsKKyAgICAgICAgaWYgKCFtX251bURyYXdzKQorICAgICAgICAgICAgaW1wbC0+
c2V0TmVlZHNSZWRyYXcoKTsgLy8gcmVkcmF3IGFnYWluIHRvIHZlcmlmeSB0aGF0IHRoZSBzZWNv
bmQgcmVkcmF3IGRvZXNudCBjb21taXQuCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVuZFRl
c3QoKTsKKyAgICAgICAgbV9udW1EcmF3cysrOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBj
b21taXRPbkNDVGhyZWFkKE1vY2tMYXllclRyZWVIb3N0KiBsYXllclRyZWVIb3N0LCBNb2NrTGF5
ZXJUcmVlSG9zdEltcGwqIGltcGwpCisgICAgeworICAgICAgICBtX251bUNvbW1pdHMrKzsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkKKyAgICB7CisgICAgICAgIEVYUEVD
VF9HRSgyLCBtX251bURyYXdzKTsKKyAgICAgICAgRVhQRUNUX0VRKDEsIG1fbnVtQ29tbWl0cyk7
CisgICAgfQorCitwcml2YXRlOgorICAgIGludCBtX251bUNvbW1pdHM7CisgICAgaW50IG1fbnVt
RHJhd3M7Cit9OworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc1JlZHJhdywgcnVu
KQoreworICAgIHJ1blRlc3QoKTsKK30KKworfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmIC8vIFVT
RShUSFJFQURFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NUaHJlYWRUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NUaHJlYWRUZXN0LmNwcAppbmRleCAwNGZiYTQ2NTMzZGI3NWRkNzNmNjhhYjdiN2IyZDYwMWU3
Y2I0MDY3Li5mYWIzNTRlYzAwYzk3MzNjYzI4NWExMmI5MDBjY2YwZjNlZTJhMzFlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGhyZWFkVGVzdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RocmVhZFRlc3QuY3BwCkBAIC01MSw2ICs1
MSw3IEBAIHB1YmxpYzoKIFRFU1QoQ0NUaHJlYWRUZXN0LCBwaW5nUG9uZ1VzaW5nQ29uZGl0aW9u
KQogewogICAgIE93blB0cjxDQ1RocmVhZD4gdGhyZWFkID0gQ0NUaHJlYWQ6OmNyZWF0ZSgpOwor
CiAgICAgUGluZ1BvbmdVc2luZ0NvbmRpdGlvbiB0YXJnZXQ7CiAgICAgQ0NDb21wbGV0aW9uRXZl
bnQgY29tcGxldGlvbjsKICAgICB0aHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzaygm
dGFyZ2V0LCAmUGluZ1BvbmdVc2luZ0NvbmRpdGlvbjo6cGluZywgJmNvbXBsZXRpb24pKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUG9wdXBNZW51VGVzdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BvcHVwTWVudVRlc3QuY3BwCmluZGV4IDVh
MTg3MDhkNzIxNmYyMzFjOGZlZGUxNjZiMjM1OTBjOWI5ZGM5NjEuLjc5NWFjYjcwZGU1ZDM1Nzc0
ZWQzNGU2NjZmNWU2NjhkNjE5OTM4MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvUG9wdXBNZW51VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9Qb3B1cE1lbnVUZXN0LmNwcApAQCAtMTI2LDYgKzEyNiw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgY2xvc2UoKSB7IH0KICAgICB2aXJ0dWFsIFdlYlNpemUgc2l6ZSgpIHsgcmV0
dXJuIFdlYlNpemUoMTAwLCAxMDApOyB9CiAgICAgdmlydHVhbCB2b2lkIHJlc2l6ZShjb25zdCBX
ZWJTaXplJikgeyB9CisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGUoZG91YmxlIGZyYW1lQmVnaW5U
aW1lKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCkgeyB9CiAgICAgdmlydHVhbCB2b2lk
IHBhaW50KFdlYkNhbnZhcyosIGNvbnN0IFdlYlJlY3QmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQg
dGhlbWVDaGFuZ2VkKCkgeyB9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9XZWJWaWV3SG9zdC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJW
aWV3SG9zdC5jcHAKaW5kZXggYWU0YTFiMWNjOWU4ZmI5Nzg5NjZkMTZmZmVkNDJmNTlmYmFjNmNm
Yi4uN2M5NjFkMDQ1ZWJmYTFmMTcyOTZjMTA1MGE1YTk2NDY0NzIzZGY1MyAxMDA2NDQKLS0tIGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCisrKyBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcApAQCAtMTQ4Miw3ICsxNDgy
LDcgQEAgdm9pZCBXZWJWaWV3SG9zdDo6cGFpbnRSZWN0KGNvbnN0IFdlYlJlY3QmIHJlY3QpCiB2
b2lkIFdlYlZpZXdIb3N0OjpwYWludEludmFsaWRhdGVkUmVnaW9uKCkKIHsKICNpZiBFTkFCTEUo
UkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCi0gICAgd2ViV2lkZ2V0KCktPmFuaW1hdGUoKTsKKyAg
ICB3ZWJXaWRnZXQoKS0+YW5pbWF0ZSgwLjApOwogI2VuZGlmCiAgICAgd2ViV2lkZ2V0KCktPmxh
eW91dCgpOwogICAgIFdlYlNpemUgd2lkZ2V0U2l6ZSA9IHdlYldpZGdldCgpLT5zaXplKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90630</attachid>
            <date>2011-04-21 16:34:32 -0700</date>
            <delta_ts>2011-04-21 16:41:00 -0700</delta_ts>
            <desc>Fixes for threading compiled out.</desc>
            <filename>bug-58408-20110421163431.patch</filename>
            <type>text/plain</type>
            <size>86903</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODQyMDgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyM2FjNDdhODIxMTY3MmFl
ZGM4YTUxOTA2YzA2YzQ0NWJiOTYzODUxLi4zOWU5ZDdjYjkwMmMwMTgwNmFmYmM3ZjcxNTA4ZGUw
OGU4MTBhNGFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODIgQEAKKzIwMTEtMDQtMTggIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50IENDTGF5ZXJUcmVlSG9zdCBh
bmQgQ0NMYXllclRyZWVIb3N0SW1wbCBwb3J0aW9ucyBvZiB0aHJlYWRlZCBjb21wb3NpdG9yCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODQwOAorCisg
ICAgICAgIENyZWF0ZSBDQ0xheWVyVHJlZUhvc3QgYW5kIENDTGF5ZXJUcmVlSG9zdEltcGwsIHdo
aWNoIGFyZSB0aGUgbWFpbgorICAgICAgICB0aHJlYWQgYW5kIGNvbXBvc2l0b3IgdGhyZWFkIGhh
bHZlcyBvZiBhIGNvbXBvc2l0ZWQgdmlldy4gQ29tbXVuaWNhdGlvbgorICAgICAgICBiZXR3ZWVu
IHRoZSB0d28gaXMgYmFzZWQgb24gdGhlIGRlc2lnbiB1c2VkIGluIEZpbGVTdHJlYW1Qcm94eS4K
KworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bUNvbW1pdHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyUmVuZGVyZXJDaHJvbWl1bUNvbW1pdHRlcjo6Y29tbWl0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bUNvbW1pdHRlcjo6TGF5ZXJSZW5kZXJlckNocm9taXVt
Q29tbWl0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6YmVn
aW5Db21taXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb21t
aXRDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBs
OjpMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJDaHJvbWl1bUltcGw6OmRyYXdMYXllcnNBbmRQcmVzZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bUltcGw6OmRyYXdMYXllcnNPbk1haW5UaHJlYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbFByb3h5OjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbFByb3h5OjpjcmVh
dGVMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW1JbXBsUHJveHk6OkxheWVyUmVuZGVyZXJDaHJvbWl1bUltcGxQcm94eSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZUxheWVyVHJlZUhvc3RJbXBs
UHJveHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
SGVhZHNVcERpc3BsYXkuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDSGVhZHNVcERpc3BsYXk6OmN1
cnJlbnRGcmFtZU51bWJlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuY3BwLgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0OjpDQ0xheWVyVHJlZUhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0Ojppbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6
fkNDTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNv
bW1pdENvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0
ZUFuZExheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI6
OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnNldE5lZWRzQ29t
bWl0QW5kUmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2V0TmVl
ZHNSZWRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmguCisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3Q6OmZyYW1lTnVtYmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6On5DQ0xheWVyVHJlZUhvc3RJbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmJlZ2luQ29tbWl0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbW1pdENvbXBsZXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNSZWRyYXcpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oLgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0SW1wbENsaWVudDo6fkNDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6ZnJhbWVOdW1iZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c291cmNlRnJhbWVOdW1iZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0U291cmNlRnJhbWVOdW1iZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5
OjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5OjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHk6On5DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVkcmF3
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c3RvcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnBvc3REcmF3TGF5ZXJz
VGFza09uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFBy
b3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNNYWluVGhyZWFkKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNDQ1RocmVhZCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmNvbW1pdE9uQ0NUaHJl
YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpkcmF3TGF5
ZXJzT25DQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmluaXRJbXBsT25DQ1Ro
cmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmxheWVy
VHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6Omhvc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNDVGhyZWFkOjpydW5Mb29wKToKKwogMjAxMS0wNC0xOCAgSmVzc2llIEJlcmxpbiAgPGpiZXJs
aW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFN0ZXZlIEZhbGtlbmJ1cmcuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKaW5kZXggYThkN2IyZDNmMjY5YjE4OGNhMjc1OTFkZGNjNjQ5ZmM5NDc5Njhj
Mi4uNmMyM2MxM2EyMjE2MTY0YmU2NDdiMzcwNWRjY2Y1ZTU0NGYxNjc2MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQpAQCAtNDA3MSw2ICs0MDcxLDE0IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5o
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RDb21taXR0ZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIuaCcsCisgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwu
aCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZC5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZC5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWRUYXNrLmgnLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggMjdhNjdlOTAyODk2NTY3
YzM0OTNhZmY0OTlhNzQ2OTY1NWU3MDNiZi4uZjU1NjM3MmI2YWNhODU4MDY4ZjQ0M2ZjY2UxMGMy
NzA1MzVkN2I3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC00
Nyw2ICs0Nyw4IEBACiAjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgogI2luY2x1ZGUgIldlYkdMTGF5
ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5oIgorI2luY2x1ZGUgImNjL0NDTWFpblRocmVhZFRhc2suaCIK
ICNpZiBVU0UoU0tJQSkKICNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKICNpbmNsdWRlICJQ
bGF0Zm9ybUNvbnRleHRTa2lhLmgiCkBAIC05MywyMyArOTUsMjggQEAgYm9vbCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmNvbXBhcmVMYXllclooY29uc3QgUmVmUHRyPENDTGF5ZXJJbXBsPiYgYSwg
Y29uc3QgUmUKICAgICByZXR1cm4gYS0+ZHJhd0RlcHRoKCkgPCBiLT5kcmF3RGVwdGgoKTsKIH0K
IAotUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6Y3JlYXRlKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsIFBhc3NPd25Q
dHI8VGlsZVBhaW50SW50ZXJmYWNlPiBjb250ZW50UGFpbnQpCitQYXNzUmVmUHRyPExheWVyUmVu
ZGVyZXJDaHJvbWl1bT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUoQ0NMYXllclRyZWVI
b3N0Q2xpZW50KiBjbGllbnQsIFBhc3NPd25QdHI8VGlsZVBhaW50SW50ZXJmYWNlPiBjb250ZW50
UGFpbnQpCiB7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gY2xpZW50
LT5jcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCk7CiAgICAgaWYgKCFjb250ZXh0KQogICAg
ICAgICByZXR1cm4gMDsKIAotICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVy
UmVuZGVyZXIoYWRvcHRSZWYobmV3IExheWVyUmVuZGVyZXJDaHJvbWl1bShjb250ZXh0LCBjb250
ZW50UGFpbnQpKSk7CisgICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbGF5ZXJSZW5k
ZXJlcihhZG9wdFJlZihuZXcgTGF5ZXJSZW5kZXJlckNocm9taXVtKGNsaWVudCwgY29udGV4dCwg
Y29udGVudFBhaW50KSkpOworICAgIGxheWVyUmVuZGVyZXItPmluaXQoKTsKICAgICBpZiAoIWxh
eWVyUmVuZGVyZXItPmhhcmR3YXJlQ29tcG9zaXRpbmcoKSkKICAgICAgICAgcmV0dXJuIDA7CiAK
ICAgICByZXR1cm4gbGF5ZXJSZW5kZXJlci5yZWxlYXNlKCk7CiB9CiAKLUxheWVyUmVuZGVyZXJD
aHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVtKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+IGNvbnRleHQsCitMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1
bShDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRl
eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzT3du
UHRyPFRpbGVQYWludEludGVyZmFjZT4gY29udGVudFBhaW50KQotICAgIDogbV92aWV3cG9ydFNj
cm9sbFBvc2l0aW9uKEludFBvaW50KC0xLCAtMSkpCisgICAgOiBDQ0xheWVyVHJlZUhvc3QoY2xp
ZW50KQorICAgICwgbV92aWV3cG9ydFNjcm9sbFBvc2l0aW9uKEludFBvaW50KC0xLCAtMSkpCiAg
ICAgLCBtX3Jvb3RMYXllcigwKQogICAgICwgbV9yb290TGF5ZXJDb250ZW50UGFpbnQoY29udGVu
dFBhaW50KQorICAgICwgbV9jb21taXR0aW5nKGZhbHNlKQogICAgICwgbV9jdXJyZW50U2hhZGVy
KDApCiAgICAgLCBtX2N1cnJlbnRSZW5kZXJTdXJmYWNlKDApCiAgICAgLCBtX29mZnNjcmVlbkZy
YW1lYnVmZmVySWQoMCkKQEAgLTE4OCwxMiArMTk1LDExIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpzZXRWaWV3cG9ydChjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50
UmVjCiAgICAgICAgIG1fY3VycmVudFJlbmRlclN1cmZhY2UgPSAwOwogICAgICAgICBtX3Jvb3RM
YXllckNvbnRlbnRUaWxlci0+aW52YWxpZGF0ZUVudGlyZUxheWVyKCk7CiAgICAgfQorICAgIHNl
dE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
Ojp1cGRhdGVBbmREcmF3TGF5ZXJzKCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRh
dGVMYXllcnMoKQogewotICAgIEFTU0VSVChtX2hhcmR3YXJlQ29tcG9zaXRpbmcpOwotCiAgICAg
aWYgKCFtX3Jvb3RMYXllcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMDQsMTAgKzIxMCwxNCBA
QCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQW5kRHJhd0xheWVycygpCiAgICAg
aWYgKCFtX3Jvb3RMYXllcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgTGF5ZXJMaXN0IHJlbmRl
clN1cmZhY2VMYXllckxpc3Q7Ci0KLSAgICB1cGRhdGVMYXllcnMocmVuZGVyU3VyZmFjZUxheWVy
TGlzdCk7CisgICAgbV9jb21wdXRlZFJlbmRlclN1cmZhY2VMYXllckxpc3QgPSBhZG9wdFB0cihu
ZXcgTGF5ZXJMaXN0KCkpOworICAgIHVwZGF0ZUxheWVycygqbV9jb21wdXRlZFJlbmRlclN1cmZh
Y2VMYXllckxpc3QpOworfQogCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVy
cygpCit7CisgICAgQVNTRVJUKG1faGFyZHdhcmVDb21wb3NpdGluZyk7CisgICAgQVNTRVJUKG1f
Y29tcHV0ZWRSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKICAgICAvLyBCZWZvcmUgZHJhd0xheWVy
czoKICAgICBpZiAoaGFyZHdhcmVDb21wb3NpdGluZygpICYmIG1fY29udGV4dFN1cHBvcnRzTGF0
Y2gpIHsKICAgICAgICAgLy8gRklYTUU6IFRoZSBtdWx0aXRocmVhZGVkIGNvbXBvc2l0b3IgY2Fz
ZSB3aWxsIG5vdCB3b3JrIGFzIGxvbmcgYXMKQEAgLTIzMyw3ICsyNDMsNyBAQCB2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQW5kRHJhd0xheWVycygpCiAgICAgICAgIG1fY2hpbGRD
b250ZXh0c1dlcmVDb3BpZWQgPSBmYWxzZTsKICAgICB9CiAKLSAgICBkcmF3TGF5ZXJzKHJlbmRl
clN1cmZhY2VMYXllckxpc3QpOworICAgIGRyYXdMYXllcnMoKm1fY29tcHV0ZWRSZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0KTsKIAogICAgIC8vIEFmdGVyIGRyYXdMYXllcnM6CiAgICAgaWYgKGhhcmR3
YXJlQ29tcG9zaXRpbmcoKSAmJiBtX2NvbnRleHRTdXBwb3J0c0xhdGNoKSB7CkBAIC0xMDkxLDYg
KzExMDEsNzIgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmR1bXBSZW5kZXJTdXJmYWNl
cyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCwgTGF5ZXIKICAgICAgICAgZHVtcFJlbmRlclN1
cmZhY2VzKHRzLCBpbmRlbnQsIGxheWVyLT5nZXRTdWJsYXllcnMoKVtpXS5nZXQoKSk7CiB9CiAK
K2NsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bUltcGwgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0
SW1wbCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8TGF5ZXJSZW5kZXJlckNocm9t
aXVtSW1wbD4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqIGNsaWVudCwgTGF5ZXJS
ZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsKGNsaWVudCwgbGF5ZXJSZW5kZXJl
cikpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGF5ZXJzQW5kUHJlc2VudCgpCisg
ICAgeworICAgICAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOworICAgICAgICBib29s
IGNvbnRleHRMb3N0OworICAgICAgICBDQ01haW5UaHJlYWQ6OnBvc3RUYXNrKGNyZWF0ZU1haW5U
aHJlYWRUYXNrKHRoaXMsICZMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsOjpkcmF3TGF5ZXJzT25N
YWluVGhyZWFkLCAmY29tcGxldGlvbiwgJmNvbnRleHRMb3N0KSk7CisgICAgICAgIGNvbXBsZXRp
b24ud2FpdCgpOworCisgICAgICAgIC8vIEZJWE1FOiBTZW5kIHRoZSAiVXBkYXRlUmVjdCIgbWVz
c2FnZSB1cCB0byB0aGUgUmVuZGVyV2lkZ2V0IFtvciBtb3ZlcGx1Z2luIGVxdWl2YWxlbnRzLi4u
XQorCisgICAgICAgIC8vIEZJWE1FOiBoYW5kbGUgY29udGV4dCBsb3N0CisgICAgICAgIGlmIChj
b250ZXh0TG9zdCkKKyAgICAgICAgICAgIEZBVEFMKCJMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBs
IGRvZXMgbm90IGhhbmRsZSBjb250ZXh0IGxvc3QgeWV0LiIpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQq
IGNsaWVudCwgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQorICAgICAgICA6
IENDTGF5ZXJUcmVlSG9zdEltcGwoY2xpZW50KQorICAgICAgICAsIG1fbGF5ZXJSZW5kZXJlcihs
YXllclJlbmRlcmVyKSB7IH0KKworICAgIHZvaWQgZHJhd0xheWVyc09uTWFpblRocmVhZChDQ0Nv
bXBsZXRpb25FdmVudCogY29tcGxldGlvbiwgYm9vbCogY29udGV4dExvc3QpCisgICAgeworICAg
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+
ZHJhd0xheWVycygpOworICAgICAgICBtX2xheWVyUmVuZGVyZXItPnByZXNlbnQoKTsKKworICAg
ICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IG1fbGF5ZXJSZW5kZXJlci0+Y29udGV4
dCgpOworICAgICAgICAqY29udGV4dExvc3QgPSBjb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdl
dEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I7
CisKKyAgICAgICAgY29tcGxldGlvbi0+c2lnbmFsKCk7CisgICAgfQorCisgICAgTGF5ZXJSZW5k
ZXJlckNocm9taXVtKiBtX2xheWVyUmVuZGVyZXI7Cit9OworCitjbGFzcyBMYXllclJlbmRlcmVy
Q2hyb21pdW1JbXBsUHJveHkgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsUHJv
eHk+IGNyZWF0ZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IExheWVyUmVuZGVyZXJDaHJvbWl1bUltcGxQcm94
eShsYXllclJlbmRlcmVyKSk7CisgICAgfQorCisgICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5
ZXJUcmVlSG9zdEltcGw+IGNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsOjpjcmVhdGUodGhpcywgc3RhdGljX2Nh
c3Q8TGF5ZXJSZW5kZXJlckNocm9taXVtKj4oaG9zdCgpKSk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bUltcGxQcm94eShMYXllclJlbmRlcmVyQ2hyb21pdW0q
IGxheWVyUmVuZGVyZXIpCisgICAgICAgIDogQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5KGxheWVy
UmVuZGVyZXIpIHsgfQorfTsKKworUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk+
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlTGF5ZXJUcmVlSG9zdEltcGxQcm94eSgpCit7
CisgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eT4gcHJveHkgPSBMYXllclJlbmRl
cmVyQ2hyb21pdW1JbXBsUHJveHk6OmNyZWF0ZSh0aGlzKTsKKyAgICBwcm94eS0+c3RhcnQoKTsK
KyAgICByZXR1cm4gcHJveHkucmVsZWFzZSgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IDgxM2ViNDZlMGJhYTM2NTEzZDYwNzhkYTI1YTQyNWQ0
NDVhZWJlZTkuLjZjOTJjMmE5ODc1ZjZkODJlNjAwNTM3ZGVmOGI3MThiODI0MmNlOTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC00MywxMyArNDMsMTMgQEAKICNpbmNs
dWRlICJWaWRlb0xheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJjYy9DQ0NhbnZhc0xheWVySW1w
bC5oIgogI2luY2x1ZGUgImNjL0NDSGVhZHNVcERpc3BsYXkuaCIKKyNpbmNsdWRlICJjYy9DQ0xh
eWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlICJjYy9DQ1BsdWdpbkxheWVySW1wbC5oIgogI2luY2x1
ZGUgImNjL0NDVmlkZW9MYXllckltcGwuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogI2lmIFVTRShDRykKQEAgLTYxLDEzICs2MSwxNSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENDSGVhZHNVcERpc3BsYXk7CiBjbGFzcyBD
Q0xheWVySW1wbDsKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcjsKK2NsYXNzIENDTGF5
ZXJUcmVlSG9zdEltcGw7CiBjbGFzcyBHZW9tZXRyeUJpbmRpbmc7CiBjbGFzcyBHcmFwaGljc0Nv
bnRleHQzRDsKIAogLy8gQ2xhc3MgdGhhdCBoYW5kbGVzIGRyYXdpbmcgb2YgY29tcG9zaXRlZCBy
ZW5kZXIgbGF5ZXJzIHVzaW5nIEdMLgotY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtIDogcHVi
bGljIFJlZkNvdW50ZWQ8TGF5ZXJSZW5kZXJlckNocm9taXVtPiB7CitjbGFzcyBMYXllclJlbmRl
cmVyQ2hyb21pdW0gOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0IHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGNyZWF0ZShQYXNzUmVmUHRyPEdy
YXBoaWNzQ29udGV4dDNEPiwgUGFzc093blB0cjxUaWxlUGFpbnRJbnRlcmZhY2U+IGNvbnRlbnRQ
YWludCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBjcmVh
dGUoQ0NMYXllclRyZWVIb3N0Q2xpZW50KiwgUGFzc093blB0cjxUaWxlUGFpbnRJbnRlcmZhY2U+
IGNvbnRlbnRQYWludCk7CiAKICAgICB+TGF5ZXJSZW5kZXJlckNocm9taXVtKCk7CiAKQEAgLTc4
LDcgKzgwLDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0Vmlld3BvcnQoY29uc3QgSW50UmVjdCYg
dmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRQb2ludCYg
c2Nyb2xsUG9zaXRpb24pOwogCiAgICAgLy8gdXBkYXRlcyBhbmQgZHJhd3MgdGhlIGN1cnJlbnQg
bGF5ZXJzIG9udG8gdGhlIGJhY2tidWZmZXIKLSAgICB2b2lkIHVwZGF0ZUFuZERyYXdMYXllcnMo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlTGF5ZXJzKCk7CisgICAgdm9pZCBkcmF3TGF5ZXJz
KCk7CiAKICAgICAvLyB3YWl0cyBmb3IgcmVuZGVyaW5nIHRvIGZpbmlzaAogICAgIHZvaWQgZmlu
aXNoKCk7CkBAIC0xMzMsMTEgKzEzNiwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRDaGlsZENv
bnRleHQoR3JhcGhpY3NDb250ZXh0M0QqKTsKICAgICB2b2lkIHJlbW92ZUNoaWxkQ29udGV4dChH
cmFwaGljc0NvbnRleHQzRCopOwogCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBQYXNzT3duUHRy
PENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eT4gY3JlYXRlTGF5ZXJUcmVlSG9zdEltcGxQcm94eSgp
OworCiBwcml2YXRlOgogICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiBM
YXllckxpc3Q7CiAgICAgdHlwZWRlZiBIYXNoTWFwPEdyYXBoaWNzQ29udGV4dDNEKiwgaW50PiBD
aGlsZENvbnRleHRNYXA7CiAKLSAgICBleHBsaWNpdCBMYXllclJlbmRlcmVyQ2hyb21pdW0oUGFz
c1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4sIFBhc3NPd25QdHI8VGlsZVBhaW50SW50ZXJmYWNl
PiBjb250ZW50UGFpbnQpOworICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bShDQ0xheWVyVHJlZUhv
c3RDbGllbnQqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgUGFzc093blB0cjxUaWxl
UGFpbnRJbnRlcmZhY2U+IGNvbnRlbnRQYWludCk7CiAKICAgICB2b2lkIHVwZGF0ZUxheWVycyhM
YXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgIHZvaWQgdXBkYXRlUm9vdExh
eWVyQ29udGVudHMoKTsKQEAgLTE3OCw4ICsxODQsMTEgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8
VGlsZVBhaW50SW50ZXJmYWNlPiBtX3Jvb3RMYXllckNvbnRlbnRQYWludDsKICAgICBPd25QdHI8
TGF5ZXJUaWxlckNocm9taXVtPiBtX3Jvb3RMYXllckNvbnRlbnRUaWxlcjsKIAorICAgIGJvb2wg
bV9jb21taXR0aW5nOwogICAgIGJvb2wgbV9oYXJkd2FyZUNvbXBvc2l0aW5nOwogCisgICAgT3du
UHRyPExheWVyTGlzdD4gbV9jb21wdXRlZFJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisKICAgICB1
bnNpZ25lZCBtX2N1cnJlbnRTaGFkZXI7CiAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBtX2N1
cnJlbnRSZW5kZXJTdXJmYWNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwCmlu
ZGV4IGQyMmIwOTg2M2Y1NmRhZWY5NDQxNjljNmM4OWRkYzZmZmQ5MDczMTkuLmI4Y2E1YmMyYWU0
ZDM5ZjgwMDBjMjNiY2JkNDI1ZjdiYjA5ZGI1MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERp
c3BsYXkuY3BwCkBAIC0yMjMsNiArMjIzLDE4IEBAIHZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6b25Q
cmVzZW50KCkKICAgICBtX2N1cnJlbnRGcmFtZU51bWJlciArPSAxOwogfQogCit2b2lkIENDSGVh
ZHNVcERpc3BsYXk6OnNldFNob3dGUFNDb3VudGVyKGJvb2wgc2hvdykKK3sKKyAgICBtX3Nob3dG
UFNDb3VudGVyID0gc2hvdzsKKyAgICBtX2xheWVyUmVuZGVyZXItPnNldE5lZWRzUmVkcmF3KCk7
Cit9CisKK3ZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6c2V0U2hvd1BsYXRmb3JtTGF5ZXJUcmVlKGJv
b2wgc2hvdykKK3sKKyAgICBtX3Nob3dQbGF0Zm9ybUxheWVyVHJlZSA9IHNob3c7CisgICAgbV9s
YXllclJlbmRlcmVyLT5zZXROZWVkc1JlZHJhdygpOworfQorCiB9CiAKICNlbmRpZiAvLyBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmgKaW5k
ZXggMDlmMTk4YWMxNDVkNzc2MzRkMWIxZjU0MzlmNzEwZDg0NmUzN2UyOC4uNDdjMDY4YTU2ZTRi
ZmU5MTM0MDE1ZWUxMjc5Y2QzNjMyNTY3YTQ3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3Bs
YXkuaApAQCAtNDcsMTIgKzQ3LDE0IEBAIHB1YmxpYzoKIAogICAgIH5DQ0hlYWRzVXBEaXNwbGF5
KCk7CiAKKyAgICBpbnQgY3VycmVudEZyYW1lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9jdXJy
ZW50RnJhbWVOdW1iZXI7IH0KKwogICAgIHZvaWQgb25QcmVzZW50KCk7CiAKLSAgICB2b2lkIHNl
dFNob3dGUFNDb3VudGVyKGJvb2wgZW5hYmxlKSB7IG1fc2hvd0ZQU0NvdW50ZXIgPSBlbmFibGU7
IH0KKyAgICB2b2lkIHNldFNob3dGUFNDb3VudGVyKGJvb2wgZW5hYmxlKTsKICAgICBib29sIHNo
b3dGUFNDb3VudGVyKCkgY29uc3QgeyByZXR1cm4gbV9zaG93RlBTQ291bnRlcjsgfQogCi0gICAg
dm9pZCBzZXRTaG93UGxhdGZvcm1MYXllclRyZWUoYm9vbCBlbmFibGUpIHsgbV9zaG93UGxhdGZv
cm1MYXllclRyZWUgPSBlbmFibGU7IH0KKyAgICB2b2lkIHNldFNob3dQbGF0Zm9ybUxheWVyVHJl
ZShib29sIGVuYWJsZSk7CiAgICAgYm9vbCBzaG93UGxhdGZvcm1MYXllclRyZWUoKSBjb25zdCB7
IHJldHVybiBtX3Nob3dQbGF0Zm9ybUxheWVyVHJlZTsgfQogCiAgICAgYm9vbCBlbmFibGVkKCkg
Y29uc3QgeyByZXR1cm4gbV9zaG93UGxhdGZvcm1MYXllclRyZWUgfHwgbV9zaG93RlBTQ291bnRl
cjsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzZhYmM4ZTY5
NGUwYzJhMmU0ZTFjY2JiOGQyZTQ2OGYwMTg5YmVlMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5j
cHAKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgorCisjaW5jbHVkZSAiVHJhY2VFdmVu
dC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5oIgorI2luY2x1ZGUg
ImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ND
TGF5ZXJUcmVlSG9zdDo6Q0NMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xp
ZW50KQorICAgIDogbV9jbGllbnQoY2xpZW50KQorI2lmbmRlZiBOREVCVUcKKyAgICAsIG1fY29t
bWl0dGluZyhmYWxzZSkKKyNlbmRpZgorICAgICwgbV9mcmFtZU51bWJlcigwKQoreworfQorCit2
b2lkIENDTGF5ZXJUcmVlSG9zdDo6aW5pdCgpCit7CisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lU
SU5HKQorICAgIG1fcHJveHkgPSBjcmVhdGVMYXllclRyZWVIb3N0SW1wbFByb3h5KCk7CisgICAg
QVNTRVJUKG1fcHJveHktPmlzU3RhcnRlZCgpKTsKKyAgICBtX3Byb3h5LT5zZXROZWVkc0NvbW1p
dEFuZFJlZHJhdygpOworI2VuZGlmCit9CisKK0NDTGF5ZXJUcmVlSG9zdDo6fkNDTGF5ZXJUcmVl
SG9zdCgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6fkNDTGF5ZXJUcmVl
SG9zdCIsIHRoaXMsIDApOworI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICBtX3By
b3h5LT5zdG9wKCk7CisgICAgbV9wcm94eS5jbGVhcigpOworI2VuZGlmCit9CisKK3ZvaWQgQ0NM
YXllclRyZWVIb3N0OjpiZWdpbkNvbW1pdCgpCit7CisjaWZuZGVmIE5ERUJVRworICAgIG1fY29t
bWl0dGluZyA9IHRydWU7CisjZW5kaWYKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmNvbW1p
dENvbXBsZXRlKCkKK3sKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9jb21taXR0aW5nID0gZmFsc2U7
CisjZW5kaWYKKyAgICBtX2ZyYW1lTnVtYmVyKys7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0
OjphbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKK3sKKyAgICBtX2NsaWVu
dC0+YW5pbWF0ZUFuZExheW91dChmcmFtZUJlZ2luVGltZSk7Cit9CisKK1Bhc3NPd25QdHI8Q0NM
YXllclRyZWVIb3N0Q29tbWl0dGVyPiBDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZUxheWVyVHJlZUhv
c3RDb21taXR0ZXIoKQoreworICAgIHJldHVybiBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI6OmNy
ZWF0ZSgpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0TmVlZHNDb21taXRBbmRSZWRy
YXcoKQoreworI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICBtX3Byb3h5LT5zZXRO
ZWVkc0NvbW1pdEFuZFJlZHJhdygpOworI2VuZGlmCit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0
OjpzZXROZWVkc1JlZHJhdygpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6
c2V0TmVlZHNSZWRyYXciLCB0aGlzLCAwKTsKKyNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcp
CisgICAgbV9wcm94eS0+c2V0TmVlZHNSZWRyYXcoKTsKKyNlbmRpZgorfQorCit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYzYWVhYzA1NDNlNjA0MGI2MTFlZjAyMWRl
N2JjOTA1ZWFkZjVhZTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApAQCAtMCwwICsxLDc4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDTGF5ZXJUcmVlSG9zdF9oCisjZGVmaW5lIENDTGF5
ZXJUcmVlSG9zdF9oCisKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIuaCIK
KyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaCIKKyNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ0xheWVyVHJl
ZUhvc3RJbXBsOworY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudDsKK2NsYXNzIEdyYXBo
aWNzQ29udGV4dDNEOworCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RDbGllbnQgeworcHVibGljOgor
ICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkg
PSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlTGF5
ZXJUcmVlSG9zdENvbnRleHQzRCgpID0gMDsKK307CisKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdCA6
IHB1YmxpYyBSZWZDb3VudGVkPENDTGF5ZXJUcmVlSG9zdD4geworcHVibGljOgorICAgIGV4cGxp
Y2l0IENDTGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3RDbGllbnQqKTsKKyAgICB2b2lkIGlu
aXQoKTsKKyAgICB2aXJ0dWFsIH5DQ0xheWVyVHJlZUhvc3QoKTsKKworICAgIHZpcnR1YWwgdm9p
ZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CisgICAgdmlydHVhbCB2
b2lkIGJlZ2luQ29tbWl0KCk7CisgICAgdmlydHVhbCB2b2lkIGNvbW1pdENvbXBsZXRlKCk7Cisg
ICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcj4gY3JlYXRlTGF5
ZXJUcmVlSG9zdENvbW1pdHRlcigpOworCisgICAgaW50IGZyYW1lTnVtYmVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9mcmFtZU51bWJlcjsgfQorCisgICAgdm9pZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJh
dygpOworICAgIHZvaWQgc2V0TmVlZHNSZWRyYXcoKTsKKworICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVMYXllcnMoKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NM
YXllclRyZWVIb3N0SW1wbFByb3h5PiBjcmVhdGVMYXllclRyZWVIb3N0SW1wbFByb3h5KCkgPSAw
OworCitwcml2YXRlOgorICAgIENDTGF5ZXJUcmVlSG9zdENsaWVudCogbV9jbGllbnQ7CisjaWZu
ZGVmIE5ERUJVRworICAgIGJvb2wgbV9jb21taXR0aW5nOworI2VuZGlmCisgICAgaW50IG1fZnJh
bWVOdW1iZXI7CisgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eT4gbV9wcm94eTsK
K307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29t
bWl0dGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MmRkNzE0YmU3ZTM4NGM4ZWY5ZTEwOTI0ZmY1Y2QyMDU4
Njk5YmVhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmNwcApAQCAtMCwwICsxLDQ0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9D
Q0xheWVyVHJlZUhvc3RDb21taXR0ZXIuaCIKKworI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9z
dC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcj4gQ0NMYXllclRy
ZWVIb3N0Q29tbWl0dGVyOjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NM
YXllclRyZWVIb3N0Q29tbWl0dGVyKCkpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdENvbW1p
dHRlcjo6Y29tbWl0KENDTGF5ZXJUcmVlSG9zdCogaG9zdCwgQ0NMYXllclRyZWVIb3N0SW1wbCog
aG9zdEltcGwpCit7CisgICAgaG9zdEltcGwtPnNldFNvdXJjZUZyYW1lTnVtYmVyKGhvc3QtPmZy
YW1lTnVtYmVyKCkpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENv
bW1pdHRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNiY2FkZWE2NTYzNmQ5ZTYwMGM3ZWM3OTBiYWUxNDc3Mjg4
NjViYjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIuaApAQCAtMCwwICsxLDQ4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcl9oCisjZGVm
aW5lIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcl9oCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdDsKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGw7CisK
K2NsYXNzIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093
blB0cjxDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI+IGNyZWF0ZSgpOworICAgIHZpcnR1YWwgdm9p
ZCBjb21taXQoQ0NMYXllclRyZWVIb3N0KiwgQ0NMYXllclRyZWVIb3N0SW1wbCopOworCitwcm90
ZWN0ZWQ6CisgICAgZXhwbGljaXQgQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyKCkgeyB9Cit9Owor
Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hM2FhMmJhMjEwZGJkZGQxNmI5Y2ExYWQxMmU2MTE1NTU4YjJhYjM3Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAq
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5o
IgorCisjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9z
dC5oIgorI2luY2x1ZGUgImNjL0NDVGhyZWFkVGFzay5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50
VGltZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NDTGF5ZXJUcmVlSG9zdEltcGw6OkND
TGF5ZXJUcmVlSG9zdEltcGwoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogY2xpZW50KQorICAg
IDogbV9zb3VyY2VGcmFtZU51bWJlcigtMSkKKyAgICAsIG1fZnJhbWVOdW1iZXIoMCkKKyAgICAs
IG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fY29tbWl0UGVuZGluZyhmYWxzZSkKKyAgICAsIG1f
cmVkcmF3UGVuZGluZyhmYWxzZSkKK3sKK30KKworQ0NMYXllclRyZWVIb3N0SW1wbDo6fkNDTGF5
ZXJUcmVlSG9zdEltcGwoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBs
Ojp+Q0NMYXllclRyZWVIb3N0SW1wbCgpIiwgdGhpcywgMCk7Cit9CisKK3ZvaWQgQ0NMYXllclRy
ZWVIb3N0SW1wbDo6YmVnaW5Db21taXQoKQoreworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdElt
cGw6OmNvbW1pdENvbXBsZXRlKCkKK3sKKyAgICBtX2NvbW1pdFBlbmRpbmcgPSBmYWxzZTsKKyAg
ICBzZXROZWVkc1JlZHJhdygpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdM
YXllcnMoKQoreworICAgIC8vIElmIGEgY29tbWl0IGlzIHBlbmRpbmcsIGRvIG5vdCBkcmF3LiBU
aGlzIGlzIGEgdGVtcG9yYXJ5IHJlc3RyaWN0aW9uIHRoYXQKKyAgICAvLyBpcyBuZWNlc3Nhcnkg
YmVjYXVzZSBkcmF3TGF5ZXJzIGlzIGN1cnJlbnRseSBhIGJsb2NraW5nIG9wZXJhdGlvbiBvbiB0
aGUgbWFpbiB0aHJlYWQuCisgICAgaWYgKG1fY29tbWl0UGVuZGluZykKKyAgICAgICAgcmV0dXJu
OworCisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMiLCB0
aGlzLCAwKTsKKyAgICBBU1NFUlQobV9yZWRyYXdQZW5kaW5nKTsKKyAgICBtX3JlZHJhd1BlbmRp
bmcgPSBmYWxzZTsKKworICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9z
dEltcGw6OmRyYXdMYXllcnNBbmRQcmVzZW50IiwgdGhpcywgMCk7CisgICAgICAgIGRyYXdMYXll
cnNBbmRQcmVzZW50KCk7CisgICAgfQorCisgICAgKyttX2ZyYW1lTnVtYmVyOworfQorCit2b2lk
IENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCkKK3sKKyAgICBU
UkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXci
LCB0aGlzLCAwKTsKKworICAgIC8vIEZJWE1FOiBtb3ZlIHRoZSByZXF1ZXN0RnJhbWVBbmRDb21t
aXQgb3V0IGZyb20gaGVyZSBvbmNlIHdlIGFkZCBmcmFtZXJhdGUgdGhyb3R0bGluZy9hbmltYXRp
b24KKyAgICBkb3VibGUgZnJhbWVCZWdpblRpbWUgPSBjdXJyZW50VGltZSgpOworICAgIG1fY29t
bWl0UGVuZGluZyA9IHRydWU7CisgICAgbV9jbGllbnQtPnJlcXVlc3RGcmFtZUFuZENvbW1pdE9u
Q0NUaHJlYWQoZnJhbWVCZWdpblRpbWUpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6
OnNldE5lZWRzUmVkcmF3KCkKK3sKKyAgICBpZiAobV9yZWRyYXdQZW5kaW5nIHx8IG1fY29tbWl0
UGVuZGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVl
SG9zdEltcGw6OnNldE5lZWRzUmVkcmF3IiwgdGhpcywgMCk7CisgICAgbV9yZWRyYXdQZW5kaW5n
ID0gdHJ1ZTsKKyAgICBtX2NsaWVudC0+cG9zdERyYXdMYXllcnNUYXNrT25DQ1RocmVhZCgpOwor
fQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmQ5
MDQ5NWRlZDJjODBjMzlmOGYzYTE5NWIyZTAxNWQ2YTA4Y2FiOQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdEltcGwuaApAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDTGF5
ZXJUcmVlSG9zdEltcGxfaAorI2RlZmluZSBDQ0xheWVyVHJlZUhvc3RJbXBsX2gKKworI2luY2x1
ZGUgImNjL0NDVGhyZWFkLmgiCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFBy
b3ZpZGVzIHNjaGVkdWxpbmcgaW5mcmFzdHJ1Y3R1cmUgZm9yIGEgQ0NMYXllclRyZWVIb3N0SW1w
bAorY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCAgeworcHVibGljOgorICAgIHZpcnR1
YWwgfkNDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcG9z
dERyYXdMYXllcnNUYXNrT25DQ1RocmVhZCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVxdWVz
dEZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZChkb3VibGUgZnJhbWVCZWdpblRpbWUpID0gMDsKK307
CisKKy8vIENDTGF5ZXJUcmVlSG9zdEltcGwgb3ducyB0aGUgQ0NMYXllckltcGwgdHJlZSBhcyB3
ZWxsIGFzIGFzc29jaWF0ZWQgcmVuZGVyaW5nIHN0YXRlCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RJ
bXBsIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ0xheWVyVHJlZUhvc3RJbXBsKTsKK3B1
YmxpYzoKKyAgICBleHBsaWNpdCBDQ0xheWVyVHJlZUhvc3RJbXBsKENDTGF5ZXJUcmVlSG9zdElt
cGxDbGllbnQqKTsKKyAgICB2aXJ0dWFsIH5DQ0xheWVyVHJlZUhvc3RJbXBsKCk7CisKKyAgICB2
aXJ0dWFsIHZvaWQgYmVnaW5Db21taXQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q29tcGxl
dGUoKTsKKworICAgIHZvaWQgZHJhd0xheWVycygpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGF5
ZXJzQW5kUHJlc2VudCgpID0gMDsKKworICAgIGludCBmcmFtZU51bWJlcigpIGNvbnN0IHsgcmV0
dXJuIG1fZnJhbWVOdW1iZXI7IH0KKworICAgIHZvaWQgc2V0TmVlZHNSZWRyYXcoKTsKKyAgICB2
b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisKKyAgICBpbnQgc291cmNlRnJhbWVOdW1i
ZXIoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZUZyYW1lTnVtYmVyOyB9CisgICAgdm9pZCBzZXRT
b3VyY2VGcmFtZU51bWJlcihpbnQgZnJhbWVOdW1iZXIpIHsgbV9zb3VyY2VGcmFtZU51bWJlciA9
IGZyYW1lTnVtYmVyOyB9CisKK3Byb3RlY3RlZDoKKyAgICBpbnQgbV9zb3VyY2VGcmFtZU51bWJl
cjsKKyAgICBpbnQgbV9mcmFtZU51bWJlcjsKKworcHJpdmF0ZToKKyAgICBDQ0xheWVyVHJlZUhv
c3RJbXBsQ2xpZW50KiBtX2NsaWVudDsKKyAgICBib29sIG1fY29tbWl0UGVuZGluZzsKKyAgICBi
b29sIG1fcmVkcmF3UGVuZGluZzsKK307CisKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWY0YzRkMDJlMWQ1
ZDU1MTU0NjQ0N2YzM2ExYmYxODQ2ZTAxODI2ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eS5jcHAKQEAgLTAsMCArMSwyMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oIgorCisjaW5j
bHVkZSAiVHJhY2VFdmVudC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgorI2lu
Y2x1ZGUgImNjL0NDTWFpblRocmVhZFRhc2suaCIKKyNpbmNsdWRlICJjYy9DQ1RocmVhZFRhc2su
aCIKKworCit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25h
bWVzcGFjZSB7CitDQ1RocmVhZCogY2NUaHJlYWQ7CitpbnQgbnVtUHJveGllcyA9IDA7Cit9CisK
K0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5KENDTGF5
ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCkKKyAgICA6IG1fY29tbWl0UGVuZGluZyhmYWxzZSkK
KyAgICAsIG1fbGF5ZXJUcmVlSG9zdChsYXllclRyZWVIb3N0KQoreworICAgIFRSQUNFX0VWRU5U
KCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSIsIHRo
aXMsIDApOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgbnVtUHJveGllcysrOwor
ICAgIGlmICghY2NUaHJlYWQpCisgICAgICAgIGNjVGhyZWFkID0gQ0NUaHJlYWQ6OmNyZWF0ZSgp
LmxlYWtQdHIoKTsKK30KKworCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c3RhcnQo
KQoreworICAgIC8vIENyZWF0ZSBMYXllclRyZWVIb3N0SW1wbC4KKyAgICBDQ0NvbXBsZXRpb25F
dmVudCBjb21wbGV0aW9uOworICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRh
c2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aW5pdEltcGxPbkNDVGhyZWFkLCAm
Y29tcGxldGlvbikpOworICAgIGNvbXBsZXRpb24ud2FpdCgpOworfQorCitDQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHk6On5DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkoKQoreworICAgIFRSQUNFX0VW
RU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6On5DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHki
LCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVCghbV9s
YXllclRyZWVIb3N0SW1wbCAmJiAhbV9sYXllclRyZWVIb3N0KTsgLy8gbWFrZSBzdXJlIHN0b3Ao
KSBnb3QgY2FsbGVkLgorCisgICAgbnVtUHJveGllcy0tOworICAgIGlmICghbnVtUHJveGllcykg
eworICAgICAgICBkZWxldGUgY2NUaHJlYWQ7CisgICAgICAgIGNjVGhyZWFkID0gMDsKKyAgICB9
Cit9CisKK2Jvb2wgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppc1N0YXJ0ZWQoKSBjb25zdAor
eworICAgIHJldHVybiBtX2xheWVyVHJlZUhvc3RJbXBsOworfQorCit2b2lkIENDTGF5ZXJUcmVl
SG9zdEltcGxQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKQoreworICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CisgICAgaWYgKG1fY29tbWl0UGVuZGluZykKKyAgICAgICAgcmV0dXJu
OworCisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHND
b21taXRBbmRSZWRyYXciLCB0aGlzLCAwKTsKKyAgICBtX2NvbW1pdFBlbmRpbmcgPSB0cnVlOwor
ICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJU
cmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhyZWFkKSk7Cit9
CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc1JlZHJhdygpCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRl
Q0NUaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVk
cmF3T25DQ1RocmVhZCkpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c3Rv
cCgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c3RvcCIs
IHRoaXMsIDApOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgLy8gU3luY2hyb25v
dXNseSBkZWxldGVzIHRoZSBpbXBsLgorICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247
CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXll
clRyZWVIb3N0SW1wbFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZCwgJmNvbXBs
ZXRpb24pKTsKKyAgICBjb21wbGV0aW9uLndhaXQoKTsKKworICAgIEFTU0VSVCghbV9sYXllclRy
ZWVIb3N0SW1wbCk7IC8vIHZlcmlmeSB0aGF0IHRoZSBpbXBsIGRlbGV0ZWQuCisgICAgbV9sYXll
clRyZWVIb3N0ID0gMDsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnBvc3RE
cmF3TGF5ZXJzVGFza09uQ0NUaHJlYWQoKQoreworICAgIEFTU0VSVChpc0NDVGhyZWFkKCkpOwor
ICAgIGlmIChtX2xheWVyVHJlZUhvc3RJbXBsKQorICAgICAgICBjY1RocmVhZC0+cG9zdFRhc2so
Y3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmRyYXdM
YXllcnNPbkNDVGhyZWFkKSk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpy
ZXF1ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKK3sK
KyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpyZXF1ZXN0RnJhbWVB
bmRDb21taXRPbkNDVGhyZWFkIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzQ0NUaHJlYWQoKSk7
CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdEltcGwpCisgICAgICAgIENDTWFpblRocmVhZDo6cG9z
dFRhc2soY3JlYXRlTWFpblRocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eTo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0LCBmcmFtZUJlZ2luVGltZSkpOworfQorCitib29sIEND
TGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNNYWluVGhyZWFkKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gOjppc01haW5UaHJlYWQoKTsKK30KKworYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6
OmlzQ0NUaHJlYWQoKSBjb25zdAoreworICAgIHJldHVybiBjdXJyZW50VGhyZWFkKCkgPT0gY2NU
aHJlYWQtPnRocmVhZElEKCk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpy
ZXF1ZXN0RnJhbWVBbmRDb21taXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQoreworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFtX2xheWVyVHJlZUhvc3QpCisgICAgICAgIHJl
dHVybjsKKworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJlcXVl
c3RGcmFtZUFuZENvbW1pdCIsIHRoaXMsIDApOworICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQo
IkNDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0ZUFuZExheW91dCIsIHRoaXMsIDApOworICAgICAgICBt
X2xheWVyVHJlZUhvc3QtPmFuaW1hdGVBbmRMYXlvdXQoZnJhbWVCZWdpblRpbWUpOworICAgIH0K
KworICAgIG1fY29tbWl0UGVuZGluZyA9IGZhbHNlOworICAgIHsKKyAgICAgICAgVFJBQ0VfRVZF
TlQoIkNDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlTGF5ZXJzIiwgdGhpcywgMCk7CisgICAgICAgIG1f
bGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKCk7CisgICAgfQorCisgICAgT3duUHRyPENDTGF5
ZXJUcmVlSG9zdENvbW1pdHRlcj4gY29tbWl0dGVyID0gbV9sYXllclRyZWVIb3N0LT5jcmVhdGVM
YXllclRyZWVIb3N0Q29tbWl0dGVyKCk7CisgICAgbV9sYXllclRyZWVIb3N0LT5iZWdpbkNvbW1p
dCgpOworCisgICAgLy8gQmxvY2tpbmcgY2FsbCB0byBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6
OnBlcmZvcm1Db21taXQKKyAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOworICAgIGNj
VGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eTo6Y29tbWl0T25DQ1RocmVhZCwgY29tbWl0dGVyLmdldCgpLCAmY29tcGxldGlv
bikpOworICAgIGNvbXBsZXRpb24ud2FpdCgpOworCisgICAgY29tbWl0dGVyLmNsZWFyKCk7CisK
KyAgICBtX2xheWVyVHJlZUhvc3QtPmNvbW1pdENvbXBsZXRlKCk7Cit9CisKK3ZvaWQgQ0NMYXll
clRyZWVIb3N0SW1wbFByb3h5Ojpjb21taXRPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdENvbW1p
dHRlciogY29tbWl0dGVyLCBDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbikKK3sKKyAgICBB
U1NFUlQoaXNDQ1RocmVhZCgpKTsKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1w
bFByb3h5Ojpjb21taXRPbkNDVGhyZWFkIiwgdGhpcywgMCk7CisgICAgbV9sYXllclRyZWVIb3N0
SW1wbC0+YmVnaW5Db21taXQoKTsKKyAgICB7CisgICAgICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVy
VHJlZUhvc3Q6OmNvbW1pdCIsIHRoaXMsIDApOworICAgICAgICBjb21taXR0ZXItPmNvbW1pdCht
X2xheWVyVHJlZUhvc3QsIG1fbGF5ZXJUcmVlSG9zdEltcGwuZ2V0KCkpOworICAgIH0KKyAgICBj
b21wbGV0aW9uLT5zaWduYWwoKTsKKworICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbW1pdENv
bXBsZXRlKCk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpkcmF3TGF5ZXJz
T25DQ1RocmVhZCgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNDQ1RocmVh
ZCgpKTsKKyAgICBpZiAobV9sYXllclRyZWVIb3N0SW1wbCkKKyAgICAgICAgbV9sYXllclRyZWVI
b3N0SW1wbC0+ZHJhd0xheWVycygpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhyZWFkKCkKK3sKKyAgICBUUkFDRV9FVkVO
VCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NU
aHJlYWQiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNDQ1RocmVhZCgpICYmIG1fbGF5ZXJUcmVl
SG9zdEltcGwpOworICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPnNldE5lZWRzQ29tbWl0QW5kUmVk
cmF3KCk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc1JlZHJh
d09uQ0NUaHJlYWQoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc0ND
VGhyZWFkKCkgJiYgbV9sYXllclRyZWVIb3N0SW1wbCk7CisgICAgbV9sYXllclRyZWVIb3N0SW1w
bC0+c2V0TmVlZHNSZWRyYXcoKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6
OmluaXRJbXBsT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbikKK3sKKyAg
ICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppbml0SW1wbE9uQ0NUaHJl
YWQiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNDQ1RocmVhZCgpKTsKKyAgICBtX2xheWVyVHJl
ZUhvc3RJbXBsID0gY3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwoKTsKKyAgICBjb21wbGV0aW9uLT5z
aWduYWwoKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmxheWVyVHJlZUhv
c3RDbG9zZWRPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQoreworICAg
IFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmxheWVyVHJlZUhvc3RDbG9z
ZWRPbkNDVGhyZWFkIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzQ0NUaHJlYWQoKSk7CisgICAg
bV9sYXllclRyZWVIb3N0SW1wbC5jbGVhcigpOworICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOwor
fQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjI5NWJlM2NhYjYyMWYzOTllM2M0NDljNDI0YzU4NzUzMWEzOTBjZWIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaApAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgor
ICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eV9oCisjZGVmaW5lIENDTGF5ZXJUcmVl
SG9zdEltcGxQcm94eV9oCisKKyNpbmNsdWRlICJjYy9DQ0NvbXBsZXRpb25FdmVudC5oIgorI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NMYXllclRyZWVIb3N0OworY2xhc3Mg
Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyOworCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHkgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5KTsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IH5DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkoKTsKKworICAgIGJvb2wgaXNTdGFydGVkKCkgY29u
c3Q7CisKKyAgICB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgdm9pZCBzZXRO
ZWVkc1JlZHJhdygpOworCisgICAgdm9pZCBzdGFydCgpOyAvLyBNdXN0IGJlIGNhbGxlZCBiZWZv
cmUgdXNpbmcgdGhlIHByb3h5LgorICAgIHZvaWQgc3RvcCgpOyAvLyBNdXN0IGJlIGNhbGxlZCBi
ZWZvcmUgZGVsZXRpbmcgdGhlIHByb3h5LgorCisgICAgLy8gQ0NMYXllclRyZWVIb3N0SW1wbENp
ZW50IC0tIGNhbGxlZCBvbiBDQ1RocmVhZAorICAgIHZpcnR1YWwgdm9pZCBwb3N0RHJhd0xheWVy
c1Rhc2tPbkNDVGhyZWFkKCk7CisgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RGcmFtZUFuZENvbW1p
dE9uQ0NUaHJlYWQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKKworcHJvdGVjdGVkOgorICAgIGV4
cGxpY2l0IENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eShDQ0xheWVyVHJlZUhvc3QqKTsKKyAgICB2
aXJ0dWFsIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gY3JlYXRlTGF5ZXJUcmVlSG9z
dEltcGwoKSA9IDA7CisgICAgQ0NMYXllclRyZWVIb3N0KiBob3N0KCkgY29uc3QgeyByZXR1cm4g
bV9sYXllclRyZWVIb3N0OyB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBpc01haW5UaHJlYWQoKSBj
b25zdDsKKyAgICBib29sIGlzQ0NUaHJlYWQoKSBjb25zdDsKKworICAgIC8vIENhbGxlZCBvbiBD
Q01haW5UaHJlYWQKKyAgICB2b2lkIHJlcXVlc3RGcmFtZUFuZENvbW1pdChkb3VibGUgZnJhbWVC
ZWdpblRpbWUpOworCisgICAgLy8gQ2FsbGVkIG9uIENDVGhyZWFkCisgICAgdm9pZCBjb21taXRP
bkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlciosIENDQ29tcGxldGlvbkV2ZW50Kik7
CisgICAgdm9pZCBkcmF3TGF5ZXJzT25DQ1RocmVhZCgpOworICAgIHZvaWQgaW5pdEltcGxPbkND
VGhyZWFkKENDQ29tcGxldGlvbkV2ZW50Kik7CisgICAgdm9pZCBzZXROZWVkc0NvbW1pdEFuZFJl
ZHJhd09uQ0NUaHJlYWQoKTsKKyAgICB2b2lkIHNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCgpOwor
ICAgIHZvaWQgbGF5ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQq
KTsKKworICAgIC8vIFVzZWQgb24gbWFpbi10aHJlYWQgb25seS4KKyAgICBib29sIG1fY29tbWl0
UGVuZGluZzsKKworICAgIC8vIEFjY2Vzc2VkIG9uIG1haW4gdGhyZWFkIG9ubHkuCisgICAgQ0NM
YXllclRyZWVIb3N0KiBtX2xheWVyVHJlZUhvc3Q7CisKKyAgICAvLyBVc2VkIG9uIHRoZSBDQ1Ro
cmVhZCwgYnV0IGNoZWNrZWQgb24gbWFpbiB0aHJlYWQgZHVyaW5nIGluaXRpYWxpemF0aW9uL3No
dXRkb3duLgorICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBtX2xheWVyVHJlZUhvc3RJ
bXBsOworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZFRhc2suaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZFRhc2suaAppbmRl
eCA3ZGU4ZDcxM2U4OGM4ODQyMjI0MDc5M2ZmMjc3ZDU5ZGY1M2FkZTdiLi5mYWM2ZTY0M2YwNWEx
OGJiYmFhZDU3YjI5YmJjMDNhNjI4MGVhYzhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWRUYXNrLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkVGFz
ay5oCkBAIC0yNCw5ICsyNCw5IEBACiAjaWZuZGVmIENDTWFpblRocmVhZFRhc2tfaAogI2RlZmlu
ZSBDQ01haW5UaHJlYWRUYXNrX2gKIAotI2luY2x1ZGUgIkNDTWFpblRocmVhZC5oIgogI2luY2x1
ZGUgIkNyb3NzVGhyZWFkQ29waWVyLmgiCiAjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRUYXNrLmgiCisj
aW5jbHVkZSAiY2MvQ0NNYWluVGhyZWFkLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
ICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5jcHAKaW5kZXggOTU2
NjU4NDVjNThjNDhjYTA2MjIwMDI0MjQ4Yjc0N2FiYWI3NjBjZi4uZGUxNzNhMTM0OTgyNGFmOTBm
YWRjZTc4MTkwZmJiODNjYzQwZWI4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmNwcApAQCAtMjcsNiArMjcs
NyBAQAogI2luY2x1ZGUgIkNDVGhyZWFkLmgiCiAKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hy
b21pdW0uaCIKKyNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRU
aW1lLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFk
aW5nUHJpbWl0aXZlcy5oPgpAQCAtNjQsNiArNjUsNyBAQCB2b2lkKiBDQ1RocmVhZDo6Y29tcG9z
aXRvclRocmVhZFN0YXJ0KHZvaWQqIHVzZXJkYXRhKQogCiB2b2lkKiBDQ1RocmVhZDo6cnVuTG9v
cCgpCiB7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkOjpydW5Mb29wIiwgdGhpcywgMCk7CiAg
ICAgewogICAgICAgICAvLyBXYWl0IGZvciBDQ1RocmVhZDo6c3RhcnQoKSB0byBjb21wbGV0ZSB0
byBoYXZlIG1fdGhyZWFkSUQKICAgICAgICAgLy8gZXN0YWJsaXNoZWQgYmVmb3JlIHN0YXJ0aW5n
IHRoZSBtYWluIGxvb3AuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFRhc2suaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkVGFzay5oCmluZGV4IDcxMjQ1ZDNlNGUwZWNl
NTM1MDVhMGRlZGU3NTM2OGVjYzZkMGZjNDcuLjkxYzU4ZTVkMjViN2JiMjg2ZTIxNmM0ZTA2OGNi
ZTEwOTU3OGYxODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGhyZWFkVGFzay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkVGFzay5oCkBAIC0yNCw5ICsyNCw5IEBACiAj
aWZuZGVmIENDVGhyZWFkVGFza19oCiAjZGVmaW5lIENDVGhyZWFkVGFza19oCiAKLSNpbmNsdWRl
ICJDQ1RocmVhZC5oIgogI2luY2x1ZGUgIkNyb3NzVGhyZWFkQ29waWVyLmgiCiAjaW5jbHVkZSAi
Q3Jvc3NUaHJlYWRUYXNrLmgiCisjaW5jbHVkZSAiY2MvQ0NUaHJlYWQuaCIKICNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKaW5kZXggZDI4ZDhiZTFkYjFlZTc3NjAwMTMwNDI4N2U5MzJkMTI5OWQ3
N2M3Ni4uMDFkN2U2YmI1ZDNmMDE1MWQ5Y2NkNWJjMjZiMWNlYWRkMTdhYzVmZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMDEgQEAKKzIwMTEtMDQtMTggIE5hdCBEdWNh
ICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50IENDTGF5ZXJUcmVlSG9zdCBhbmQg
Q0NMYXllclRyZWVIb3N0SW1wbCBwb3J0aW9ucyBvZiB0aHJlYWRlZCBjb21wb3NpdG9yCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODQwOAorCisgICAg
ICAgIFJlZGlyZWN0IGludmFsaWRhdGVzIGFuZCBzY2hlZHVsaW5nIGludG8gY29tcG9zaXRvciB3
aGVuIGluCisgICAgICAgIHRocmVhZGVkIGNvbXBvc2l0aW5nIG1vZGUuIEFkZCBDQ0xTdHJlc3Mg
dGVzdHMgZm9yCisgICAgICAgIENDTGF5ZXJUcmVlSG9zdC4KKworICAgICAgICAqIFdlYktpdC5n
eXBpOgorICAgICAgICAqIHB1YmxpYy9XZWJXaWRnZXQuaDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
V2lkZ2V0OjpzY2hlZHVsZUNvbXBvc2l0ZSk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmFuaW1hdGUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3SW1wbDo6ZG9BbmltYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0lt
cGw6OnBhaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmFuaW1hdGVBbmRMYXlv
dXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Y29tcG9zaXRlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlld0ltcGw6OnNjaGVkdWxlQ29tcG9zaXRlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6OnNldFJvb3RMYXllck5lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6ZG9Db21wb3NpdGUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3SW1wbDo6Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjpyZWFsbG9jYXRlUmVuZGVyZXIpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3SW1wbDo6dXBkYXRlTGF5ZXJSZW5kZXJlclNldHRpbmdzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlld0ltcGw6OnVwZGF0ZUxheWVyUmVuZGVyZXJWaWV3cG9ydCk6CisgICAgICAg
ICogc3JjL1dlYlZpZXdJbXBsLmg6CisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVz
dC5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0OjpDQ0xheWVy
VHJlZUhvc3RUZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6YW5pbWF0
ZUFuZExheW91dCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3Q6OmJlZ2luQ29t
bWl0T25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3Q6OmJlZ2lu
Q29tbWl0T25NYWluVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6
Y29tbWl0T25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3Q6OmNv
bW1pdENvbXBsZXRlT25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRl
c3Q6OmNvbW1pdENvbXBsZXRlT25NYWluVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRy
ZWVIb3N0VGVzdDo6ZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdU
Rjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6dXBkYXRlTGF5ZXJzKToKKyAgICAgICAgKFdURjo6Q0NM
YXllclRyZWVIb3N0VGVzdDo6b25CZWdpblRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJl
ZUhvc3RUZXN0Ojpkb0VuZFRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0
OjpvbkVuZFRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0OjpydW5UZXN0
KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6dGVzdFRpbWVvdXQpOgorICAg
ICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdENsaWVudDo6TW9ja0xheWVyVHJlZUhvc3RDbGll
bnQpOgorICAgICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdENsaWVudDo6Y3JlYXRlTGF5ZXJU
cmVlSG9zdENvbnRleHQzRCk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0Q2xpZW50
OjphbmltYXRlQW5kTGF5b3V0KToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3RDb21t
aXR0ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0Q29tbWl0dGVy
Ojpjb21taXQpOgorICAgICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdENvbW1pdHRlcjo6TW9j
a0xheWVyVHJlZUhvc3RDb21taXR0ZXIpOgorICAgICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9z
dEltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0SW1wbDo6YmVn
aW5Db21taXQpOgorICAgICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdEltcGw6OmNvbW1pdENv
bXBsZXRlKToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJz
QW5kUHJlc2VudCk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0SW1wbDo6TW9ja0xh
eWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3RJbXBsUHJv
eHk6OmNyZWF0ZSk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpj
cmVhdGVMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0
SW1wbFByb3h5OjpNb2NrTGF5ZXJUcmVlSG9zdEltcGxQcm94eSk6CisgICAgICAgIChXVEY6Ok1v
Y2tMYXllclRyZWVIb3N0OjpNb2NrTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXVEY6Ok1vY2tM
YXllclRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVIb3N0SW1wbFByb3h5KToKKyAgICAgICAgKFdU
Rjo6TW9ja0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVycyk6CisgICAgICAgIChXVEY6Ok1vY2tM
YXllclRyZWVIb3N0OjpiZWdpbkNvbW1pdCk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVI
b3N0Ojpjb21taXRDb21wbGV0ZSk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3Q6
OmRvQmVnaW5UZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6ZW5kVGVz
dCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTaG9ydGxpdmVkMTo6Q0NMYXll
clRyZWVIb3N0VGVzdFNob3J0bGl2ZWQxKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0
VGVzdFNob3J0bGl2ZWQxOjpiZWdpblRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhv
c3RUZXN0U2hvcnRsaXZlZDE6OmFmdGVyVGVzdCk6CisgICAgICAgIChXVEY6OlRFU1RfRik6Cisg
ICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTaG9ydGxpdmVkMjo6Q0NMYXllclRyZWVI
b3N0VGVzdFNob3J0bGl2ZWQyKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNo
b3J0bGl2ZWQyOjpiZWdpblRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0
U2hvcnRsaXZlZDI6OmFmdGVyVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRl
c3RTaG9ydGxpdmVkMzo6Q0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQzKToKKyAgICAgICAg
KFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQzOjpiZWdpblRlc3QpOgorICAgICAg
ICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDM6OmFmdGVyVGVzdCk6CisgICAg
ICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RDb21taXRpbmdXaXRoQ29udGludW91c1JlZHJh
dzo6Q0NMYXllclRyZWVIb3N0VGVzdENvbW1pdGluZ1dpdGhDb250aW51b3VzUmVkcmF3KToKKyAg
ICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdENvbW1pdGluZ1dpdGhDb250aW51b3VzUmVk
cmF3OjpiZWdpblRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0Q29tbWl0
aW5nV2l0aENvbnRpbnVvdXNSZWRyYXc6OmNvbW1pdENvbXBsZXRlT25DQ1RocmVhZCk6CisgICAg
ICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RDb21taXRpbmdXaXRoQ29udGludW91c1JlZHJh
dzo6ZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXll
clRyZWVIb3N0VGVzdENvbW1pdGluZ1dpdGhDb250aW51b3VzUmVkcmF3OjphZnRlclRlc3QpOgor
ICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQxOjpDQ0xheWVy
VHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQxKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVI
b3N0VGVzdFNldE5lZWRzQ29tbWl0MTo6YmVnaW5UZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXll
clRyZWVIb3N0VGVzdFNldE5lZWRzQ29tbWl0MTo6ZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhy
ZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzQ29tbWl0MTo6
Y29tbWl0T25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTZXRO
ZWVkc0NvbW1pdDE6OmFmdGVyVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRl
c3RTZXROZWVkc0NvbW1pdDI6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc0NvbW1pdDIpOgor
ICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQyOjpiZWdpblRl
c3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQyOjpk
cmF3TGF5ZXJzQW5kUHJlc2VudE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJl
ZUhvc3RUZXN0U2V0TmVlZHNDb21taXQyOjpjb21taXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdU
Rjo6Q0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzQ29tbWl0Mjo6YWZ0ZXJUZXN0KToKKyAgICAg
ICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzUmVkcmF3OjpDQ0xheWVyVHJlZUhv
c3RUZXN0U2V0TmVlZHNSZWRyYXcpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0
U2V0TmVlZHNSZWRyYXc6OmJlZ2luVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9z
dFRlc3RTZXROZWVkc1JlZHJhdzo6ZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhyZWFkKToKKyAg
ICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzUmVkcmF3Ojpjb21taXRPbkND
VGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzUmVkcmF3
OjphZnRlclRlc3QpOgorICAgICAgICAqIHRlc3RzL0NDVGhyZWFkVGVzdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpURVNUKToKKwogMjAxMS0wNC0xOCAgRXZhbiBNYXJ0aW4gIDxldmFuQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL1dlYktpdC5neXBpCmluZGV4IGMyM2M5ZWRjYjQ2ODJjYjA0MGVjMzY3ZjM3YjVlYTg5Zjcx
OWI3MWQuLjRlMmEzNWUxZDM4N2E0YjY2YzhiOTViZTIxNmRlODY2ODM3NDFkZmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtNTMsNiArNTMsNyBAQAogICAgICAgICBdLAogICAg
ICAgICAnd2Via2l0X3VuaXR0ZXN0X2ZpbGVzJzogWwogICAgICAgICAgICAgJ3Rlc3RzL0FyZW5h
VGVzdEhlbHBlcnMuaCcsCisgICAgICAgICAgICAndGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5j
cHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDVGhyZWFkVGFza1Rlc3QuY3BwJywKICAgICAgICAg
ICAgICd0ZXN0cy9DQ1RocmVhZFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9EcmFnSW1h
Z2VUZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJXaWRnZXQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oCmlu
ZGV4IDEyOTBhZDgxNjJiNjYyM2JjMzU5YTBmY2ZjNTYzMTQ0ZjZmY2Y3NGIuLmY2ODFiZmFhYWJm
MmIxZDI5YjJlMDJlMDQ0M2EwZmM1ZjU0MzgwM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYldpZGdldC5oCkBAIC00Niw2ICs0Niw5IEBAIHN0cnVjdCBXZWJSZWN0Owogc3Ry
dWN0IFdlYlNpemU7CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgV2ViVmVjdG9yOwogCisv
LyBGSVhNRTogcmVtb3ZlIHRoaXMgZGVmaW5lIG9uY2UgcmVuZGVyX3dpZGdldCBoYXMgYmVlbiBj
aGFuZ2VkIHRvIGlzc3VlIHRocmVhZGVkIGNvbXBvc2l0b3IgY2FsbHMKKyNkZWZpbmUgV0VCV0lE
R0VUX0hBU19USFJFQURFRF9DT01QT1NJVElOR19DSEFOR0VTIDEKKwogY2xhc3MgV2ViV2lkZ2V0
IHsKIHB1YmxpYzoKICAgICAvLyBUaGlzIG1ldGhvZCBjbG9zZXMgYW5kIGRlbGV0ZXMgdGhlIFdl
YldpZGdldC4KQEAgLTU3LDE1ICs2MCwxNyBAQCBwdWJsaWM6CiAgICAgLy8gQ2FsbGVkIHRvIHJl
c2l6ZSB0aGUgV2ViV2lkZ2V0LgogICAgIHZpcnR1YWwgdm9pZCByZXNpemUoY29uc3QgV2ViU2l6
ZSYpID0gMDsKIAotICAgIC8vIENhbGxlZCB0byB1cGRhdGUgaW1wZXJhdGl2ZSBhbmltYXRpb24g
c3RhdGUuICBUaGlzIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlCi0gICAgLy8gcGFpbnQsIGFsdGhv
dWdoIHRoZSBjbGllbnQgY2FuIHJhdGUtbGltaXQgdGhlc2UgY2FsbHMuCi0gICAgdmlydHVhbCB2
b2lkIGFuaW1hdGUoKSA9IDA7CisgICAgLy8gQ2FsbGVkIHRvIHVwZGF0ZSBpbXBlcmF0aXZlIGFu
aW1hdGlvbiBzdGF0ZS4gVGhpcyBzaG91bGQgYmUgY2FsbGVkCisgICAgLy8gYmVmb3JlIHBhaW50
LCBhbHRob3VnaCB0aGUgY2xpZW50IGNhbiByYXRlLWxpbWl0IHRoZXNlIGNhbGxzLgorICAgIC8v
IEZJWE1FOiByZW1vdmUgZGVmYXVsdCBhcmd1bWVudCBvbmNlIHJlbmRlcl93aWRnZXQgaGFzIGJl
ZW4gdXBkYXRlZCB0bworICAgIC8vIGlzc3VlIHRoZSBjb3JyZWN0IHZhbHVlLgorICAgIHZpcnR1
YWwgdm9pZCBhbmltYXRlKGRvdWJsZSBmcmFtZUJlZ2luVGltZSkgPSAwOwogCiAgICAgLy8gQ2Fs
bGVkIHRvIGxheW91dCB0aGUgV2ViV2lkZ2V0LiAgVGhpcyBNVVNUIGJlIGNhbGxlZCBiZWZvcmUg
UGFpbnQsCiAgICAgLy8gYW5kIGl0IG1heSByZXN1bHQgaW4gY2FsbHMgdG8gV2ViV2lkZ2V0Q2xp
ZW50OjpkaWRJbnZhbGlkYXRlUmVjdC4KICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCkgPSAwOwog
Ci0gICAgLy8gQ2FsbGVkIHRvIHBhaW50IHRoZSByZWN0YW5ndWxhciByZWdpb24gd2l0aGluIHRo
ZSBXZWJXaWRnZXQgCisgICAgLy8gQ2FsbGVkIHRvIHBhaW50IHRoZSByZWN0YW5ndWxhciByZWdp
b24gd2l0aGluIHRoZSBXZWJXaWRnZXQKICAgICAvLyBvbnRvIHRoZSBzcGVjaWZpZWQgY2FudmFz
IGF0ICh2aWV3UG9ydC54LHZpZXdQb3J0LnkpLiBZb3UgTVVTVCBjYWxsCiAgICAgLy8gTGF5b3V0
IGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLiAgSXQgaXMgb2theSB0byBjYWxsIHBhaW50CiAg
ICAgLy8gbXVsdGlwbGUgdGltZXMgb25jZSBsYXlvdXQgaGFzIGJlZW4gY2FsbGVkLCBhc3N1bWlu
ZyBubyBvdGhlcgpAQCAtNzQsMTIgKzc5LDE2IEBAIHB1YmxpYzoKICAgICAvLyB3YXJyYW50ZWQg
YmVmb3JlIHBhaW50aW5nIGFnYWluKS4KICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoV2ViQ2FudmFz
KiwgY29uc3QgV2ViUmVjdCYgdmlld1BvcnQpID0gMDsKIAotICAgIC8vIFRyaWdnZXJzIGNvbXBv
c2l0aW5nIG9mIHRoZSBjdXJyZW50IGxheWVycyBvbnRvIHRoZSBzY3JlZW4uCi0gICAgLy8gVGhl
IGZpbmlzaCBhcmd1bWVudCBjb250cm9scyB3aGV0aGVyIHRoZSBjb21wb3NpdG9yIHdpbGwgd2Fp
dCBmb3IgdGhlCi0gICAgLy8gR1BVIHRvIGZpbmlzaCByZW5kZXJpbmcgYmVmb3JlIHJldHVybmlu
Zy4gWW91IE1VU1QgY2FsbCBMYXlvdXQKLSAgICAvLyBiZWZvcmUgY2FsbGluZyB0aGlzIG1ldGhv
ZCwgZm9yIHRoZSBzYW1lIHJlYXNvbnMgZGVzY3JpYmVkIGluCi0gICAgLy8gdGhlIHBhaW50IG1l
dGhvZCBhYm92ZS4KLSAgICB2aXJ0dWFsIHZvaWQgY29tcG9zaXRlKGJvb2wgZmluaXNoKSA9IDA7
CisgICAgLy8gVHJpZ2dlcnMgY29tcG9zaXRpbmcgb2YgdGhlIGN1cnJlbnQgbGF5ZXJzIG9udG8g
dGhlIHNjcmVlbi4gVGhpcyBjYWxsIGhhcworICAgIC8vIG5vIGVmZmVjdCBpbiB0aHJlYWRlZCBj
b21wb3NpdGluZyBtb2RlLiBZb3UgTVVTVCBjYWxsIExheW91dCBiZWZvcmUKKyAgICAvLyBjYWxs
aW5nIHRoaXMgbWV0aG9kLCBmb3IgdGhlIHNhbWUgcmVhc29ucyBkZXNjcmliZWQgaW4gdGhlIHBh
aW50IG1ldGhvZAorICAgIC8vIGFib3ZlLgorICAgIHZpcnR1YWwgdm9pZCBjb21wb3NpdGUoKSA9
IDA7CisKKyAgICAvLyBJbiB0aHJlYWRlZCBjb21wb3NpdGluZyBtb2RlLCBpbmRpY2F0ZXMgdGhh
dCB0aGUgd2lkZ2V0IHNob3VsZCByZWRyYXcKKyAgICAvLyBpdHNlbGYsIGZvciBleGFtcGxlIGR1
ZSB0byB3aW5kb3cgZGFtYWdlLiBUaGUgcmVkcmF3IHdpbGwgYmVnaW4KKyAgICAvLyBhc3luY2hy
b25vdXNseS4KKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGUoKSAgeyB9CiAKICAg
ICAvLyBDYWxsZWQgdG8gaW5mb3JtIHRoZSBXZWJXaWRnZXQgb2YgYSBjaGFuZ2UgaW4gdGhlbWUu
CiAgICAgLy8gSW1wbGVtZW50b3JzIHRoYXQgY2FjaGUgcmVuZGVyZWQgY29waWVzIG9mIHdpZGdl
dHMgbmVlZCB0byByZS1yZW5kZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlBvcHVwTWVudUltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
UG9wdXBNZW51SW1wbC5jcHAKaW5kZXggYjRkNDI0NmMzZjYwMTBiY2FmNTAyMWQ0Y2Q5NjgxYWJm
YzM5M2RiNS4uNzZmODk0YTZiYzY1ODhhZDBhYjQ0ODQxMzc1YTgzMGY4MTM3Mjc4MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5jcHAKQEAgLTE1
MSw3ICsxNTEsNyBAQCB2b2lkIFdlYlBvcHVwTWVudUltcGw6OnJlc2l6ZShjb25zdCBXZWJTaXpl
JiBuZXdTaXplKQogICAgIH0KIH0KIAotdm9pZCBXZWJQb3B1cE1lbnVJbXBsOjphbmltYXRlKCkK
K3ZvaWQgV2ViUG9wdXBNZW51SW1wbDo6YW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWUpCiB7
CiB9CiAKQEAgLTE3Myw3ICsxNzMsNyBAQCB2b2lkIFdlYlBvcHVwTWVudUltcGw6OnRoZW1lQ2hh
bmdlZCgpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBXZWJQb3B1cE1lbnVJbXBs
Ojpjb21wb3NpdGUoYm9vbCBmaW5pc2gpCit2b2lkIFdlYlBvcHVwTWVudUltcGw6OmNvbXBvc2l0
ZSgpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlBvcHVwTWVudUltcGwuaAppbmRleCA1OGE4ODNmNTY4ZjdlZjMwZjlmMmUwMDM0
YTE3OGUxZWFiYzBhODA2Li42NWZmMDU5Y2YyM2JlNDE3ODg3OTU4MWI1MDU5MDI0ZjlmMDYyNTY3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBs
LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5oCkBA
IC02MiwxMSArNjIsMTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpOwogICAg
IHZpcnR1YWwgV2ViU2l6ZSBzaXplKCkgeyByZXR1cm4gbV9zaXplOyB9CiAgICAgdmlydHVhbCB2
b2lkIHJlc2l6ZShjb25zdCBXZWJTaXplJik7Ci0gICAgdmlydHVhbCB2b2lkIGFuaW1hdGUoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWUpOwogICAgIHZp
cnR1YWwgdm9pZCBsYXlvdXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoV2ViQ2FudmFzKiBj
YW52YXMsIGNvbnN0IFdlYlJlY3QmIHJlY3QpOwogICAgIHZpcnR1YWwgdm9pZCB0aGVtZUNoYW5n
ZWQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29tcG9zaXRlKGJvb2wgZmluaXNoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgY29tcG9zaXRlKCk7CiAgICAgdmlydHVhbCBib29sIGhhbmRsZUlucHV0RXZlbnQo
Y29uc3QgV2ViSW5wdXRFdmVudCYpOwogICAgIHZpcnR1YWwgdm9pZCBtb3VzZUNhcHR1cmVMb3N0
KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKGJvb2wgZW5hYmxlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAppbmRleCAyNDM4YTk0ODFkMDE3MGM1NmIz
NjMyYTBmYjAxZDZjM2QwMTg3YjhkLi5hMDQwMjI0Y2VmNmJkZWE2N2Y0OTIzNDg3ZjUyNmQ5NTAy
N2UxMjU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1w
bC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBA
IC05OTEsMTQgKzk5MSwxOCBAQCB2b2lkIFdlYlZpZXdJbXBsOjpyZXNpemUoY29uc3QgV2ViU2l6
ZSYgbmV3U2l6ZSkKICNlbmRpZgogfQogCi12b2lkIFdlYlZpZXdJbXBsOjphbmltYXRlKCkKK3Zv
aWQgV2ViVmlld0ltcGw6OmFuaW1hdGUoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQogewogI2lmIEVO
QUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKKyAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMg
b25jZSByZW5kZXJfd2lkZ2V0IGhhcyBiZWVuIG1vZGlmaWVkIHRvIHBhc3MgaW4gYQorICAgIC8v
IGZyYW1lQmVnaW5UaW1lLgorICAgIGlmICghZnJhbWVCZWdpblRpbWUpCisgICAgICAgIGZyYW1l
QmVnaW5UaW1lID0gY3VycmVudFRpbWUoKTsKICAgICBXZWJGcmFtZUltcGwqIHdlYmZyYW1lID0g
bWFpbkZyYW1lSW1wbCgpOwogICAgIGlmICh3ZWJmcmFtZSkgewogICAgICAgICBGcmFtZVZpZXcq
IHZpZXcgPSB3ZWJmcmFtZS0+ZnJhbWVWaWV3KCk7CiAgICAgICAgIGlmICh2aWV3KQotICAgICAg
ICAgICAgdmlldy0+c2VydmljZVNjcmlwdGVkQW5pbWF0aW9ucyhjb252ZXJ0U2Vjb25kc1RvRE9N
VGltZVN0YW1wKGN1cnJlbnRUaW1lKCkpKTsKKyAgICAgICAgICAgIHZpZXctPnNlcnZpY2VTY3Jp
cHRlZEFuaW1hdGlvbnMoY29udmVydFNlY29uZHNUb0RPTVRpbWVTdGFtcChmcmFtZUJlZ2luVGlt
ZSkpOwogICAgIH0KICNlbmRpZgogfQpAQCAtMTA2OCw2ICsxMDcyLDEwIEBAIHZvaWQgV2ViVmll
d0ltcGw6OnBhaW50KFdlYkNhbnZhcyogY2FudmFzLCBjb25zdCBXZWJSZWN0JiByZWN0KQogewog
ICAgIGlmIChpc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSkgewogI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKKyNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAg
ICAgIC8vIEZJWE1FOiBkbyByZWFkYmFjayBpbiB0aHJlYWRlZCBjb21wb3NpdGluZyBtb2RlIHJh
dGhlciB0aGFuIHJldHVybmluZyBub3RoaW5nCisgICAgICAgIHJldHVybjsKKyNlbmRpZgogICAg
ICAgICBkb0NvbXBvc2l0ZSgpOwogCiAgICAgICAgIC8vIElmIGEgY2FudmFzIHdhcyBwYXNzZWQg
aW4sIHdlIHVzZSBpdCB0byBncmFiIGEgY29weSBvZiB0aGUKQEAgLTEwOTYsOSArMTEwNCwxOSBA
QCB2b2lkIFdlYlZpZXdJbXBsOjp0aGVtZUNoYW5nZWQoKQogICAgIHZpZXctPmludmFsaWRhdGVS
ZWN0KGRhbWFnZWRSZWN0KTsKIH0KIAotdm9pZCBXZWJWaWV3SW1wbDo6Y29tcG9zaXRlKGJvb2wg
ZmluaXNoKQorCit2b2lkIFdlYlZpZXdJbXBsOjphbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFt
ZUJlZ2luVGltZSkKK3sKKyAgICBhbmltYXRlKGZyYW1lQmVnaW5UaW1lKTsKKyAgICBsYXlvdXQo
KTsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6Y29tcG9zaXRlKCkKIHsKICNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgIG1f
bGF5ZXJSZW5kZXJlci0+c2V0TmVlZHNSZWRyYXcoKTsKKyNlbHNlCiAgICAgVFJBQ0VfRVZFTlQo
IldlYlZpZXdJbXBsOjpjb21wb3NpdGUiLCB0aGlzLCAwKTsKICAgICBpZiAobV9yZWNyZWF0aW5n
R3JhcGhpY3NDb250ZXh0KSB7CiAgICAgICAgIC8vIHJlYWxsb2NhdGVSZW5kZXJlciB3aWxsIHJl
cXVlc3QgYSByZXBhaW50IHdoZXRoZXIgb3Igbm90IGl0IHN1Y2NlZWRlZApAQCAtMTEwOSwxMCAr
MTEyNyw2IEBAIHZvaWQgV2ViVmlld0ltcGw6OmNvbXBvc2l0ZShib29sIGZpbmlzaCkKICAgICB9
CiAgICAgZG9Db21wb3NpdGUoKTsKIAotICAgIC8vIEZpbmlzaCBpZiByZXF1ZXN0ZWQuCi0gICAg
aWYgKGZpbmlzaCkKLSAgICAgICAgbV9sYXllclJlbmRlcmVyLT5maW5pc2goKTsKLQogICAgIC8v
IFB1dCByZXN1bHQgb25zY3JlZW4uCiAgICAgbV9sYXllclJlbmRlcmVyLT5wcmVzZW50KCk7CiAK
QEAgLTExMjgsNiArMTE0Miw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OmNvbXBvc2l0ZShib29sIGZp
bmlzaCkKICAgICAgICAgc2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7CiAgICAgfQogI2VuZGlm
CisjZW5kaWYKIH0KIAogY29uc3QgV2ViSW5wdXRFdmVudCogV2ViVmlld0ltcGw6Om1fY3VycmVu
dElucHV0RXZlbnQgPSAwOwpAQCAtMjMyNyw5ICsyMzQyLDI0IEBAIHZvaWQgV2ViVmlld0ltcGw6
OnNldFJvb3RHcmFwaGljc0xheWVyKFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXIqIGxheWVyKQogICAg
ICAgICBtX2NsaWVudC0+ZGlkSW52YWxpZGF0ZVJlY3QoZGFtYWdlZFJlY3QpOwogfQogCit2b2lk
IFdlYlZpZXdJbXBsOjpzY2hlZHVsZUNvbXBvc2l0ZSgpCit7CisjaWYgVVNFKFRIUkVBREVEX0NP
TVBPU0lUeUlORykKKyAgICBpZiAobV9sYXllclJlbmRlcmVyKQorICAgICAgICBtX2xheWVyUmVu
ZGVyZXItPnNldE5lZWRzUmVkcmF3KCk7CisjZWxzZQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworI2VuZGlmCit9CisKIHZvaWQgV2ViVmlld0ltcGw6OnNldFJvb3RMYXllck5lZWRzRGlzcGxh
eSgpCiB7CisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgIGlmIChtX2xheWVyUmVu
ZGVyZXIpCisgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXco
KTsKKyNlbHNlCiAgICAgbV9jbGllbnQtPnNjaGVkdWxlQ29tcG9zaXRlKCk7CisjZW5kaWYKIH0K
IAogCkBAIC0yNDAxLDE1ICsyNDMxLDggQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVy
YXRlZENvbXBvc2l0aW5nQWN0aXZlKGJvb2wgYWN0aXZlKQogCiAgICAgICAgIG1fY2xpZW50LT5k
aWRBY3RpdmF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcodHJ1ZSk7CiAgICAgfSBlbHNlIHsKLSAg
ICAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gbV90ZW1wb3JhcnlPbnNj
cmVlbkdyYXBoaWNzQ29udGV4dDNELnJlbGVhc2UoKTsKLSAgICAgICAgaWYgKCFjb250ZXh0KSB7
Ci0gICAgICAgICAgICBjb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShnZXRDb21w
b3NpdG9yQ29udGV4dEF0dHJpYnV0ZXMoKSwgbV9wYWdlLT5jaHJvbWUoKSwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKLSAgICAgICAgICAgIGlmIChjb250
ZXh0KQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlc2hhcGUoc3RkOjptYXgoMSwgbV9zaXpl
LndpZHRoKSwgc3RkOjptYXgoMSwgbV9zaXplLmhlaWdodCkpOwotICAgICAgICB9Ci0KLQotICAg
ICAgICBtX2xheWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShjb250
ZXh0LnJlbGVhc2UoKSwgV2ViVmlld0ltcGxDb250ZW50UGFpbnRlcjo6Y3JlYXRlKHRoaXMpKTsK
KyAgICAgICAgbV9sYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUo
dGhpcywgV2ViVmlld0ltcGxDb250ZW50UGFpbnRlcjo6Y3JlYXRlKHRoaXMpKTsKKyAgICAgICAg
dXBkYXRlTGF5ZXJSZW5kZXJlclNldHRpbmdzKCk7CiAgICAgICAgIGlmIChtX2xheWVyUmVuZGVy
ZXIpIHsKICAgICAgICAgICAgIG1fY2xpZW50LT5kaWRBY3RpdmF0ZUFjY2VsZXJhdGVkQ29tcG9z
aXRpbmcodHJ1ZSk7CiAgICAgICAgICAgICBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2
ZSA9IHRydWU7CkBAIC0yNDM2LDM1ICsyNDU5LDM5IEBAIHZvaWQgV2ViVmlld0ltcGw6OmRvQ29t
cG9zaXRlKCkKICAgICBpZiAoIXBhZ2UoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9sYXll
clJlbmRlcmVyLT5zZXRDb21wb3NpdGVPZmZzY3JlZW4oc2V0dGluZ3MoKS0+Y29tcG9zaXRlVG9U
ZXh0dXJlRW5hYmxlZCgpKTsKLQotICAgIENDSGVhZHNVcERpc3BsYXkqIGh1ZCA9IG1fbGF5ZXJS
ZW5kZXJlci0+aGVhZHNVcERpc3BsYXkoKTsKLSAgICBodWQtPnNldFNob3dGUFNDb3VudGVyKHNl
dHRpbmdzKCktPnNob3dGUFNDb3VudGVyKCkpOwotICAgIGh1ZC0+c2V0U2hvd1BsYXRmb3JtTGF5
ZXJUcmVlKHNldHRpbmdzKCktPnNob3dQbGF0Zm9ybUxheWVyVHJlZSgpKTsKKyAgICBtX2xheWVy
UmVuZGVyZXItPnVwZGF0ZUxheWVycygpOworICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVy
cygpOworfQogCi0gICAgbV9sYXllclJlbmRlcmVyLT51cGRhdGVBbmREcmF3TGF5ZXJzKCk7CitQ
YXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBXZWJWaWV3SW1wbDo6Y3JlYXRlTGF5ZXJUcmVl
SG9zdENvbnRleHQzRCgpCit7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0
ID0gbV90ZW1wb3JhcnlPbnNjcmVlbkdyYXBoaWNzQ29udGV4dDNELnJlbGVhc2UoKTsKKyAgICBp
ZiAoIWNvbnRleHQpIHsKKyAgICAgICAgY29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVh
dGUoZ2V0Q29tcG9zaXRvckNvbnRleHRBdHRyaWJ1dGVzKCksIG1fcGFnZS0+Y2hyb21lKCksIEdy
YXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7CisgICAgICAgIGlm
IChjb250ZXh0KQorICAgICAgICAgICAgY29udGV4dC0+cmVzaGFwZShzdGQ6Om1heCgxLCBtX3Np
emUud2lkdGgpLCBzdGQ6Om1heCgxLCBtX3NpemUuaGVpZ2h0KSk7CisgICAgfQorICAgIHJldHVy
biBjb250ZXh0OwogfQogCiB2b2lkIFdlYlZpZXdJbXBsOjpyZWFsbG9jYXRlUmVuZGVyZXIoKQog
ewotICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbmV3Q29udGV4dCA9IG1fdGVtcG9yYXJ5
T25zY3JlZW5HcmFwaGljc0NvbnRleHQzRC5nZXQoKTsKLSAgICBXZWJHcmFwaGljc0NvbnRleHQz
RCogd2ViQ29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmV4dHJhY3RXZWJHcmFw
aGljc0NvbnRleHQzRChuZXdDb250ZXh0LmdldCgpKTsKLSAgICBpZiAoIW5ld0NvbnRleHQgfHwg
IXdlYkNvbnRleHQgfHwgd2ViQ29udGV4dC0+aXNDb250ZXh0TG9zdCgpKQotICAgICAgICBuZXdD
b250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSgKLSAgICAgICAgICAgIGdldENvbXBv
c2l0b3JDb250ZXh0QXR0cmlidXRlcygpLCBtX3BhZ2UtPmNocm9tZSgpLCBHcmFwaGljc0NvbnRl
eHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOwogICAgIC8vIEdyYXBoaWNzQ29udGV4
dDNEOjpjcmVhdGUgbWlnaHQgZmFpbCBhbmQgcmV0dXJuIDAsIGluIHRoYXQgY2FzZSBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmNyZWF0ZSB3aWxsIGFsc28gcmV0dXJuIDAuCi0gICAgUmVmUHRyPExh
eWVyUmVuZGVyZXJDaHJvbWl1bT4gbGF5ZXJSZW5kZXJlciA9IExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6Y3JlYXRlKG5ld0NvbnRleHQsIFdlYlZpZXdJbXBsQ29udGVudFBhaW50ZXI6OmNyZWF0ZSh0
aGlzKSk7CisgICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbGF5ZXJSZW5kZXJlciA9
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMsIFdlYlZpZXdJbXBsQ29udGVudFBh
aW50ZXI6OmNyZWF0ZSh0aGlzKSk7CiAKICAgICAvLyBSZWF0dGFjaCB0aGUgcm9vdCBsYXllci4g
IENoaWxkIGxheWVycyB3aWxsIGdldCByZWF0dGFjaGVkIGFzIGEgc2lkZSBlZmZlY3Qgb2YgdXBk
YXRlTGF5ZXJzUmVjdXJzaXZlLgogICAgIGlmIChsYXllclJlbmRlcmVyKSB7CisKICAgICAgICAg
bV9sYXllclJlbmRlcmVyLT50cmFuc2ZlclJvb3RMYXllcihsYXllclJlbmRlcmVyLmdldCgpKTsK
ICAgICAgICAgbV9sYXllclJlbmRlcmVyID0gbGF5ZXJSZW5kZXJlcjsKKyAgICAgICAgdXBkYXRl
TGF5ZXJSZW5kZXJlclNldHRpbmdzKCk7CisKICAgICAgICAgLy8gRklYTUU6IEluIE1hY09TIG5l
d0NvbnRleHQtPnJlc2hhcGUgbWV0aG9kIG5lZWRzIHRvIGJlIGNhbGxlZCB0bwogICAgICAgICAv
LyBhbGxvY2F0ZSBJT1N1cmZhY2VzLiBBbGwgY2FsbHMgdG8gY3JlYXRlIGEgY29udGV4dCBmb2xs
b3dlZCBieQogICAgICAgICAvLyByZXNoYXBlIHNob3VsZCByZWFsbHkgYmUgZXh0cmFjdGVkIGlu
dG8gb25lIGZ1bmN0aW9uOyBpdCBpcyBub3QKICAgICAgICAgLy8gaW1tZWRpYXRlbHkgb2J2aW91
cyB0aGF0IEdyYXBoaWNzQ29udGV4dDNEIG9iamVjdCB3aWxsIG5vdAogICAgICAgICAvLyBmdW5j
dGlvbiBwcm9wZXJseSB1bnRpbCBpdHMgcmVzaGFwZSBtZXRob2QgaXMgY2FsbGVkLgotICAgICAg
ICBuZXdDb250ZXh0LT5yZXNoYXBlKHN0ZDo6bWF4KDEsIG1fc2l6ZS53aWR0aCksIHN0ZDo6bWF4
KDEsIG1fc2l6ZS5oZWlnaHQpKTsKKyAgICAgICAgbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpLT5y
ZXNoYXBlKHN0ZDo6bWF4KDEsIG1fc2l6ZS53aWR0aCksIHN0ZDo6bWF4KDEsIG1fc2l6ZS5oZWln
aHQpKTsKICAgICAgICAgc2V0Um9vdEdyYXBoaWNzTGF5ZXIobV9sYXllclJlbmRlcmVyLT5yb290
TGF5ZXIoKSk7CiAgICAgICAgIC8vIEZvcmNlcyBWaWV3SG9zdE1zZ19EaWRBY3RpdmF0ZUFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmcgdG8gYmUgc2VudCBzbwogICAgICAgICAvLyB0aGF0IHRoZSBicm93
c2VyIHByb2Nlc3MgY2FuIHJlYWNxdWlyZSBzdXJmYWNlcy4KQEAgLTI0NzQsOSArMjUwMSwyMCBA
QCB2b2lkIFdlYlZpZXdJbXBsOjpyZWFsbG9jYXRlUmVuZGVyZXIoKQogfQogI2VuZGlmCiAKLXZv
aWQgV2ViVmlld0ltcGw6OnVwZGF0ZUxheWVyUmVuZGVyZXJWaWV3cG9ydCgpCit2b2lkIFdlYlZp
ZXdJbXBsOjp1cGRhdGVMYXllclJlbmRlcmVyU2V0dGluZ3MoKQogewogICAgIEFTU0VSVChtX2xh
eWVyUmVuZGVyZXIpOworICAgIG1fbGF5ZXJSZW5kZXJlci0+c2V0Q29tcG9zaXRlT2Zmc2NyZWVu
KHNldHRpbmdzKCktPmNvbXBvc2l0ZVRvVGV4dHVyZUVuYWJsZWQoKSk7CisKKyAgICBDQ0hlYWRz
VXBEaXNwbGF5KiBodWQgPSBtX2xheWVyUmVuZGVyZXItPmhlYWRzVXBEaXNwbGF5KCk7CisgICAg
aHVkLT5zZXRTaG93RlBTQ291bnRlcihzZXR0aW5ncygpLT5zaG93RlBTQ291bnRlcigpKTsKKyAg
ICBodWQtPnNldFNob3dQbGF0Zm9ybUxheWVyVHJlZShzZXR0aW5ncygpLT5zaG93UGxhdGZvcm1M
YXllclRyZWUoKSk7Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OnVwZGF0ZUxheWVyUmVuZGVyZXJW
aWV3cG9ydCgpCit7CisgICAgaWYgKCFtX2xheWVyUmVuZGVyZXIpCisgICAgICAgIHJldHVybjsK
IAogICAgIGlmICghcGFnZSgpKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViVmlld0ltcGwuaAppbmRleCBmMTAyMDJmNzZkYTZjZGUzMjY1OTA5YjRmZTY1Zjcw
YWFkYjhiZjkzLi43N2M1MWFkODIxNDMzMDI2M2FkZjEwYmJkZTMwNDk1ODRkMDQyMzI5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKQEAgLTU1LDYgKzU1LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ2hyb21pdW1EYXRhT2JqZWN0OwogY2xhc3MgRG9j
dW1lbnRMb2FkZXI7CiBjbGFzcyBGcmFtZTsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogY2xh
c3MgSGlzdG9yeUl0ZW07CiBjbGFzcyBIaXRUZXN0UmVzdWx0OwogY2xhc3MgS2V5Ym9hcmRFdmVu
dDsKQEAgLTg2LDE3ICs4NywxOCBAQCBjbGFzcyBXZWJNb3VzZVdoZWVsRXZlbnQ7CiBjbGFzcyBX
ZWJTZXR0aW5nc0ltcGw7CiBjbGFzcyBXZWJUb3VjaEV2ZW50OwogCi1jbGFzcyBXZWJWaWV3SW1w
bCA6IHB1YmxpYyBXZWJWaWV3LCBwdWJsaWMgUmVmQ291bnRlZDxXZWJWaWV3SW1wbD4geworY2xh
c3MgV2ViVmlld0ltcGwgOiBwdWJsaWMgV2ViVmlldywgcHVibGljIFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdENsaWVudCwgcHVibGljIFJlZkNvdW50ZWQ8V2ViVmlld0ltcGw+IHsKIHB1YmxpYzoK
ICAgICAvLyBXZWJXaWRnZXQgbWV0aG9kczoKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsKICAg
ICB2aXJ0dWFsIFdlYlNpemUgc2l6ZSgpIHsgcmV0dXJuIG1fc2l6ZTsgfQogICAgIHZpcnR1YWwg
dm9pZCByZXNpemUoY29uc3QgV2ViU2l6ZSYpOwotICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlKCk7
CisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGUoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKICAgICB2
aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFdlYkNhbnZhcyos
IGNvbnN0IFdlYlJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgdGhlbWVDaGFuZ2VkKCk7Ci0gICAg
dmlydHVhbCB2b2lkIGNvbXBvc2l0ZShib29sIGZpbmlzaCk7CisgICAgdmlydHVhbCB2b2lkIGNv
bXBvc2l0ZSgpOworICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0ZSgpOwogICAgIHZp
cnR1YWwgYm9vbCBoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQmKTsKICAgICB2
aXJ0dWFsIHZvaWQgbW91c2VDYXB0dXJlTG9zdCgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1
cyhib29sIGVuYWJsZSk7CkBAIC0xOTYsNiArMTk4LDExIEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluYWN0aXZlRm9yZWdyb3VuZENvbG9y
KTsKICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybUN1c3RvbUNvbnRleHRNZW51QWN0aW9uKHVuc2ln
bmVkIGFjdGlvbik7CiAKKyAgICAvLyBDQ0xheWVyVHJlZUhvc3RDbGllbnQKKyAgICB2aXJ0dWFs
IHZvaWQgYW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpOworICAgIFBhc3NS
ZWZQdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUxheWVyVHJlZUhvc3RDb250
ZXh0M0QoKTsKKworCiAgICAgLy8gV2ViVmlld0ltcGwKIAogICAgIHZvaWQgc2V0SWdub3JlSW5w
dXRFdmVudHMoYm9vbCBuZXdWYWx1ZSk7CkBAIC0zMzksNiArMzQ2LDcgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7CiAgICAgdm9pZCBzY3JvbGxSb290TGF5
ZXJSZWN0KGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbERlbHRhLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiBjbGlwUmVjdCk7CiAgICAgdm9pZCBpbnZhbGlkYXRlUm9vdExheWVyUmVjdChj
b25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCBkb1VwZGF0ZUFuZENvbXBvc2l0ZSgp
OwogI2VuZGlmCiAKICAgICAvLyBSZXR1cm5zIHRoZSBvbnNjcmVlbiAzRCBjb250ZXh0IHVzZWQg
YnkgdGhlIGNvbXBvc2l0b3IuIFRoaXMgaXMKQEAgLTQwMiwxMSArNDEwLDEzIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdl
YlBvaW50JiBzY3JlZW5Qb2ludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRHJhZ0FjdGlvbik7CiAKKwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKICAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZShib29sKTsK
ICAgICB2b2lkIGRvQ29tcG9zaXRlKCk7CiAgICAgdm9pZCBkb1BpeGVsUmVhZGJhY2tUb0NhbnZh
cyhXZWJDYW52YXMqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CiAgICAgdm9pZCByZWFsbG9j
YXRlUmVuZGVyZXIoKTsKKyAgICB2b2lkIHVwZGF0ZUxheWVyUmVuZGVyZXJTZXR0aW5ncygpOwog
ICAgIHZvaWQgdXBkYXRlTGF5ZXJSZW5kZXJlclZpZXdwb3J0KCk7CiAjZW5kaWYKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNTY2Y2IzYjRhNDQzNDI5YWY3NTVmMjA1NTliYjcwZjNlNzNhMDM1YwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVI
b3N0VGVzdC5jcHAKQEAgLTAsMCArMSw1MzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgImNj
L0NDTGF5ZXJUcmVlSG9zdC5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNp
bmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NNYWluVGhy
ZWFkVGFzay5oIgorI2luY2x1ZGUgImNjL0NDVGhyZWFkVGFzay5oIgorI2luY2x1ZGUgPGd0ZXN0
L2d0ZXN0Lmg+CisjaW5jbHVkZSA8d2Via2l0L3N1cHBvcnQvd2Via2l0X3N1cHBvcnQuaD4KKyNp
bmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNp
bmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgTW9ja0xheWVyVHJlZUhv
c3Q7CitjbGFzcyBNb2NrTGF5ZXJUcmVlSG9zdENsaWVudDsKK2NsYXNzIE1vY2tMYXllclRyZWVI
b3N0SW1wbDsKKworLy8gVGhlIENDTGF5ZXJUcmVlSG9zdFRlc3QgcnVucyB3aXRoIHRoZSBtYWlu
IGxvb3AgcnVubmluZy4gSXQgaW5zdGFudGlhdGVzIGEgc2luZ2xlIE1vY2tMYXllclRyZWVIb3N0
IGFuZCBhc3NvY2lhdGVkCisvLyBNb2NrTGF5ZXJUcmVlSG9zdEltcGwvTW9ja0xheWVyVHJlZUhv
c3RDbGllbnQuCisvLworLy8gYmVnaW5UZXN0KCkgaXMgY2FsbGVkIG9uY2UgdGhlIG1haW4gbWVz
c2FnZSBsb29wIGlzIHJ1bm5pbmcgYW5kIHRoZSBsYXllciB0cmVlIGhvc3QgaXMgaW5pdGlhbGl6
ZWQuCisvLworLy8gS2V5IHN0YWdlcyBvZiB0aGUgZHJhd2luZyBsb29wLCBlLmcuIGRyYXdpbmcg
b3IgY29tbWl0aW5nLCByZWRpcmVjdCB0byBDQ0xheWVyVHJlZUhvc3RUZXN0IG1ldGhvZHMgb2Yg
c2ltaWxhciBuYW1lcy4KKy8vIFRvIHRyYWNrIHRoZSBjb21taXQgcHJvY2Vzcywgb3ZlcnJpZGUg
dGhlc2UgZnVuY3Rpb25zLgorLy8KKy8vIFRoZSB0ZXN0IGNvbnRpbnVlcyB1bnRpbCBzb21lb25l
IGNhbGxzIGVuZFRlc3QuIGVuZFRlc3QgY2FuIGJlIGNhbGxlZCBvbiBhbnkgdGhyZWFkLCBidXQg
YmUgYXdhcmUgdGhhdAorLy8gZW5kaW5nIHRoZSB0ZXN0IGlzIGFuIGFzeW5jaHJvbm91cyBwcm9j
ZXNzLgorY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsK
K3B1YmxpYzoKKyAgICBDQ0xheWVyVHJlZUhvc3RUZXN0KCkKKyAgICAgICAgOiBtX2JlZ2lubmlu
ZyhmYWxzZSkKKyAgICAgICAgLCBtX2VuZFdoZW5CZWdpblJldHVybnMoZmFsc2UpCisgICAgICAg
ICwgbV9ydW5uaW5nKGZhbHNlKQorICAgICAgICAsIG1fdGltZWRPdXQoZmFsc2UpIHsgfQorCisg
ICAgdmlydHVhbCB2b2lkIGFmdGVyVGVzdCgpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBiZWdp
blRlc3QoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVBbmRMYXlvdXQoTW9ja0xheWVy
VHJlZUhvc3RDbGllbnQqIGxheWVyVHJlZUhvc3QsIGRvdWJsZSBmcmFtZUJlZ2luVGltZSkgeyB9
CisgICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0T25DQ1RocmVhZChNb2NrTGF5ZXJUcmVlSG9z
dEltcGwqIGxheWVyVHJlZUhvc3RJbXBsKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21t
aXRPbk1haW5UaHJlYWQoTW9ja0xheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBjb21taXRPbkNDVGhyZWFkKE1vY2tMYXllclRyZWVIb3N0KiBsYXllclRy
ZWVIb3N0LCBNb2NrTGF5ZXJUcmVlSG9zdEltcGwqIGxheWVyVHJlZUhvc3RJbXBsKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgY29tbWl0Q29tcGxldGVPbkNDVGhyZWFkKE1vY2tMYXllclRyZWVIb3N0
SW1wbCogbGF5ZXJUcmVlSG9zdEltcGwpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjb21taXRDb21w
bGV0ZU9uTWFpblRocmVhZChNb2NrTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCkgeyB9Cisg
ICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNBbmRQcmVzZW50T25DQ1RocmVhZChNb2NrTGF5ZXJU
cmVlSG9zdEltcGwqIGxheWVyVHJlZUhvc3RJbXBsKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlTGF5ZXJzKE1vY2tMYXllclRyZWVIb3N0KiBsYXllclRyZWVIb3N0KSB7IH0KKworICAgIHZv
aWQgZW5kVGVzdCgpOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkb0JlZ2luVGVzdCgpOworCisg
ICAgc3RhdGljIHZvaWQgb25CZWdpblRlc3Qodm9pZCogc2VsZikKKyAgICB7CisgICAgICAgIHN0
YXRpY19jYXN0PENDTGF5ZXJUcmVlSG9zdFRlc3QqPihzZWxmKS0+ZG9CZWdpblRlc3QoKTsKKyAg
ICB9CisKKyAgICB2b2lkIGRvRW5kVGVzdCgpCisgICAgeworICAgIH0KKworICAgIHN0YXRpYyB2
b2lkIG9uRW5kVGVzdCh2b2lkKiBzZWxmKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0VGVzdCogdGVzdCA9IHN0YXRpY19jYXN0
PENDTGF5ZXJUcmVlSG9zdFRlc3QqPihzZWxmKTsKKyAgICAgICAgdGVzdC0+bV9sYXllclRyZWVI
b3N0LmNsZWFyKCk7CisgICAgICAgIHRlc3QtPm1fY2xpZW50LmNsZWFyKCk7CisgICAgICAgIHdl
YmtpdF9zdXBwb3J0OjpRdWl0TWVzc2FnZUxvb3AoKTsKKyAgICB9CisKKyAgICB2b2lkIHJ1blRl
c3QoKQorICAgIHsKKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlBvc3REZWxheWVkVGFzayhDQ0xh
eWVyVHJlZUhvc3RUZXN0OjpvbkJlZ2luVGVzdCwgc3RhdGljX2Nhc3Q8dm9pZCo+KHRoaXMpLCAw
KTsKKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlBvc3REZWxheWVkVGFzayhDQ0xheWVyVHJlZUhv
c3RUZXN0Ojp0ZXN0VGltZW91dCwgc3RhdGljX2Nhc3Q8dm9pZCo+KHRoaXMpLCA1MDAwKTsKKyAg
ICAgICAgd2Via2l0X3N1cHBvcnQ6OlJ1bk1lc3NhZ2VMb29wKCk7CisgICAgICAgIG1fcnVubmlu
ZyA9IGZhbHNlOworICAgICAgICBib29sIHRpbWVkT3V0ID0gbV90aW1lZE91dDsgLy8gU2F2ZSB3
aGV0aGVyIHdlJ3JlIHRpbWVkIG91dCBpbiBjYXNlIFJ1bkFsbFBlbmRpbmdNZXNzYWdlcyBoYXMg
dGhlIHRpbWVvdXQuCisgICAgICAgIHdlYmtpdF9zdXBwb3J0OjpSdW5BbGxQZW5kaW5nTWVzc2Fn
ZXMoKTsKKyAgICAgICAgaWYgKHRpbWVkT3V0KSB7CisgICAgICAgICAgICBwcmludGYoIlRlc3Qg
dGltZWQgb3V0Iik7CisgICAgICAgICAgICBGQUlMKCkgPDwgIlRlc3QgdGltZWQgb3V0IjsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBhZnRlclRlc3QoKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgdm9pZCB0ZXN0VGltZW91dCh2b2lkKiBzZWxmKQorICAgIHsKKyAgICAg
ICAgQ0NMYXllclRyZWVIb3N0VGVzdCogdGVzdCA9IHN0YXRpY19jYXN0PENDTGF5ZXJUcmVlSG9z
dFRlc3QqPihzZWxmKTsKKyAgICAgICAgaWYgKCF0ZXN0LT5tX3J1bm5pbmcpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIHRlc3QtPm1fdGltZWRPdXQgPSB0cnVlOworICAgICAgICB0ZXN0
LT5lbmRUZXN0KCk7CisgICAgfQorCisgICAgTXV0ZXggbV90cmFjZXNMb2NrOworICAgIFZlY3Rv
cjxzdGQ6OnN0cmluZz4gbV90cmFjZXM7CisKKyAgICBPd25QdHI8TW9ja0xheWVyVHJlZUhvc3RD
bGllbnQ+IG1fY2xpZW50OworICAgIFJlZlB0cjxNb2NrTGF5ZXJUcmVlSG9zdD4gbV9sYXllclRy
ZWVIb3N0OworCitwcml2YXRlOgorICAgIGJvb2wgbV9iZWdpbm5pbmc7CisgICAgYm9vbCBtX2Vu
ZFdoZW5CZWdpblJldHVybnM7CisgICAgYm9vbCBtX3J1bm5pbmc7CisgICAgYm9vbCBtX3RpbWVk
T3V0OworfTsKKworY2xhc3MgTW9ja0xheWVyVHJlZUhvc3RDbGllbnQgOiBwdWJsaWMgQ0NMYXll
clRyZWVIb3N0Q2xpZW50IHsKK3B1YmxpYzoKKyAgICBNb2NrTGF5ZXJUcmVlSG9zdENsaWVudChD
Q0xheWVyVHJlZUhvc3RUZXN0KiB0ZXN0KSA6IG1fdGVzdCh0ZXN0KSB7IH0KKworICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRl
eHQzRCgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWY8R3JhcGhpY3NDb250ZXh0M0Q+
KDApOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBm
cmFtZUJlZ2luVGltZSkKKyAgICB7CisgICAgICAgIG1fdGVzdC0+YW5pbWF0ZUFuZExheW91dCh0
aGlzLCBmcmFtZUJlZ2luVGltZSk7CisgICAgfQorCitwcml2YXRlOgorICAgIENDTGF5ZXJUcmVl
SG9zdFRlc3QqIG1fdGVzdDsKK307CisKK2NsYXNzIE1vY2tMYXllclRyZWVIb3N0Q29tbWl0dGVy
IDogcHVibGljIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlciB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NPd25QdHI8TW9ja0xheWVyVHJlZUhvc3RDb21taXR0ZXI+IGNyZWF0ZShDQ0xheWVyVHJl
ZUhvc3RUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBNb2Nr
TGF5ZXJUcmVlSG9zdENvbW1pdHRlcih0ZXN0KSk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lk
IGNvbW1pdChDQ0xheWVyVHJlZUhvc3QqIGhvc3QsIENDTGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJ
bXBsKQorICAgIHsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyOjpjb21taXQoaG9z
dCwgaG9zdEltcGwpOworICAgICAgICBtX3Rlc3QtPmNvbW1pdE9uQ0NUaHJlYWQocmVpbnRlcnBy
ZXRfY2FzdDxNb2NrTGF5ZXJUcmVlSG9zdCo+KGhvc3QpLCByZWludGVycHJldF9jYXN0PE1vY2tM
YXllclRyZWVIb3N0SW1wbCo+KGhvc3RJbXBsKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIE1v
Y2tMYXllclRyZWVIb3N0Q29tbWl0dGVyKENDTGF5ZXJUcmVlSG9zdFRlc3QqIHRlc3QpIDogbV90
ZXN0KHRlc3QpIHsgfQorICAgIENDTGF5ZXJUcmVlSG9zdFRlc3QqIG1fdGVzdDsKK307CisKK2Ns
YXNzIE1vY2tMYXllclRyZWVIb3N0SW1wbCA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RJbXBsIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxNb2NrTGF5ZXJUcmVlSG9zdEltcGw+IGNy
ZWF0ZShDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQsIENDTGF5ZXJUcmVlSG9zdFRl
c3QqIHRlc3QpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE1vY2tMYXllclRy
ZWVIb3N0SW1wbChjbGllbnQsIHRlc3QpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVn
aW5Db21taXQoKQorICAgIHsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0SW1wbDo6YmVnaW5Db21t
aXQoKTsKKyAgICAgICAgbV90ZXN0LT5iZWdpbkNvbW1pdE9uQ0NUaHJlYWQodGhpcyk7CisgICAg
fQorCisgICAgdmlydHVhbCB2b2lkIGNvbW1pdENvbXBsZXRlKCkKKyAgICB7CisgICAgICAgIEND
TGF5ZXJUcmVlSG9zdEltcGw6OmNvbW1pdENvbXBsZXRlKCk7CisgICAgICAgIG1fdGVzdC0+Y29t
bWl0Q29tcGxldGVPbkNDVGhyZWFkKHRoaXMpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBk
cmF3TGF5ZXJzQW5kUHJlc2VudCgpCisgICAgeworICAgICAgICBtX3Rlc3QtPmRyYXdMYXllcnNB
bmRQcmVzZW50T25DQ1RocmVhZCh0aGlzKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTW9ja0xh
eWVyVHJlZUhvc3RJbXBsKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqIGNsaWVudCwgQ0NMYXll
clRyZWVIb3N0VGVzdCogdGVzdCkKKyAgICAgICAgICAgIDogQ0NMYXllclRyZWVIb3N0SW1wbChj
bGllbnQpCisgICAgICAgICAgICAsIG1fdGVzdCh0ZXN0KQorICAgIHsKKyAgICB9CisKKyAgICBD
Q0xheWVyVHJlZUhvc3RUZXN0KiBtX3Rlc3Q7Cit9OworCitjbGFzcyBNb2NrTGF5ZXJUcmVlSG9z
dEltcGxQcm94eSA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkgeworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPE1vY2tMYXllclRyZWVIb3N0SW1wbFByb3h5PiBjcmVhdGUo
Q0NMYXllclRyZWVIb3N0KiBob3N0LCBDQ0xheWVyVHJlZUhvc3RUZXN0KiB0ZXN0KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBNb2NrTGF5ZXJUcmVlSG9zdEltcGxQcm94eSho
b3N0LCB0ZXN0KSk7CisgICAgfQorCisgICAgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBs
PiBjcmVhdGVMYXllclRyZWVIb3N0SW1wbCgpCisgICAgeworICAgICAgICByZXR1cm4gTW9ja0xh
eWVyVHJlZUhvc3RJbXBsOjpjcmVhdGUodGhpcywgbV90ZXN0KTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgTW9ja0xheWVyVHJlZUhvc3RJbXBsUHJveHkoQ0NMYXllclRyZWVIb3N0KiBob3N0LCBD
Q0xheWVyVHJlZUhvc3RUZXN0KiB0ZXN0KQorICAgICAgICA6IENDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eShob3N0KQorICAgICAgICAsIG1fdGVzdCh0ZXN0KSB7IH0KKworICAgIENDTGF5ZXJUcmVl
SG9zdFRlc3QqIG1fdGVzdDsKK307CisKK2NsYXNzIE1vY2tMYXllclRyZWVIb3N0IDogcHVibGlj
IENDTGF5ZXJUcmVlSG9zdCB7CitwdWJsaWM6CisgICAgTW9ja0xheWVyVHJlZUhvc3QoQ0NMYXll
clRyZWVIb3N0Q2xpZW50KiBjbGllbnQsIENDTGF5ZXJUcmVlSG9zdFRlc3QqIHRlc3QpCisgICAg
ICAgIDogQ0NMYXllclRyZWVIb3N0KGNsaWVudCkKKyAgICAgICAgLCBtX3Rlc3QodGVzdCkgeyB9
CisKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5PiBjcmVh
dGVMYXllclRyZWVIb3N0SW1wbFByb3h5KCkKKyAgICB7CisgICAgICAgIE93blB0cjxDQ0xheWVy
VHJlZUhvc3RJbXBsUHJveHk+IHByb3h5ID0gTW9ja0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmNy
ZWF0ZSh0aGlzLCBtX3Rlc3QpOworICAgICAgICBwcm94eS0+c3RhcnQoKTsKKyAgICAgICAgcmV0
dXJuIHByb3h5LnJlbGVhc2UoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlTGF5
ZXJzKCkKKyAgICB7CisgICAgICAgIG1fdGVzdC0+dXBkYXRlTGF5ZXJzKHRoaXMpOworICAgIH0K
KworICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI+IGNyZWF0
ZUxheWVyVHJlZUhvc3RDb21taXR0ZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE1vY2tMYXll
clRyZWVIb3N0Q29tbWl0dGVyOjpjcmVhdGUobV90ZXN0KTsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgYmVnaW5Db21taXQoKQorICAgIHsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0OjpiZWdp
bkNvbW1pdCgpOworICAgICAgICBtX3Rlc3QtPmJlZ2luQ29tbWl0T25NYWluVGhyZWFkKHRoaXMp
OworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBjb21taXRDb21wbGV0ZSgpCisgICAgeworICAg
ICAgICBtX3Rlc3QtPmNvbW1pdENvbXBsZXRlT25NYWluVGhyZWFkKHRoaXMpOworICAgICAgICBD
Q0xheWVyVHJlZUhvc3Q6OmNvbW1pdENvbXBsZXRlKCk7CisgICAgfQorCitwcml2YXRlOgorICAg
IENDTGF5ZXJUcmVlSG9zdFRlc3QqIG1fdGVzdDsKK307CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0
VGVzdDo6ZG9CZWdpblRlc3QoKQoreworICAgIEFTU0VSVCghbV9ydW5uaW5nKTsKKyAgICBtX3J1
bm5pbmcgPSB0cnVlOworICAgIG1fY2xpZW50ID0gYWRvcHRQdHIobmV3IE1vY2tMYXllclRyZWVI
b3N0Q2xpZW50KHRoaXMpKTsKKyAgICBtX2xheWVyVHJlZUhvc3QgPSBhZG9wdFJlZihuZXcgTW9j
a0xheWVyVHJlZUhvc3QobV9jbGllbnQuZ2V0KCksIHRoaXMpKTsKKyAgICBtX2xheWVyVHJlZUhv
c3QtPmluaXQoKTsKKyAgICBtX2JlZ2lubmluZyA9IHRydWU7CisgICAgYmVnaW5UZXN0KCk7Cisg
ICAgbV9iZWdpbm5pbmcgPSBmYWxzZTsKKyAgICBpZiAobV9lbmRXaGVuQmVnaW5SZXR1cm5zKQor
ICAgICAgICBvbkVuZFRlc3Qoc3RhdGljX2Nhc3Q8dm9pZCo+KHRoaXMpKTsKK30KKwordm9pZCBD
Q0xheWVyVHJlZUhvc3RUZXN0OjplbmRUZXN0KCkKK3sKKyAgICAvLyBJZiB3ZSBhcmUgY2FsbGVk
IGZyb20gdGhlIENDVGhyZWFkLCByZS1jYWxsIGVuZFRlc3Qgb24gdGhlIG1haW4gdGhyZWFkLgor
ICAgIGlmICghaXNNYWluVGhyZWFkKCkpCisgICAgICAgIENDTWFpblRocmVhZDo6cG9zdFRhc2so
Y3JlYXRlTWFpblRocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdFRlc3Q6OmVuZFRlc3Qp
KTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gRm9yIHRoZSBjYXNlIHdoZXJlIHdlIGVuZFRlc3Qg
ZHVyaW5nIGJlZ2luVGVzdCgpLCBzZXQgYSBmbGFnIHRvIGluZGljYXRlIHRoYXQKKyAgICAgICAg
Ly8gdGhlIHRlc3Qgc2hvdWxkIGVuZCB0aGUgc2Vjb25kIGJlZ2luVGVzdCByZWdhaW5zIGNvbnRy
b2wuCisgICAgICAgIGlmIChtX2JlZ2lubmluZykKKyAgICAgICAgICAgIG1fZW5kV2hlbkJlZ2lu
UmV0dXJucyA9IHRydWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG9uRW5kVGVzdChzdGF0
aWNfY2FzdDx2b2lkKj4odGhpcykpOworICAgIH0KK30KKworLy8gU2hvcnRsaXZlZCBsYXllclRy
ZWVIb3N0cyBzaG91bGRuJ3QgZGllLgorY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2
ZWQxIDogcHVibGljIENDTGF5ZXJUcmVlSG9zdFRlc3QgeworcHVibGljOgorICAgIENDTGF5ZXJU
cmVlSG9zdFRlc3RTaG9ydGxpdmVkMSgpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGJlZ2luVGVz
dCgpCisgICAgeworICAgICAgICBlbmRUZXN0KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lk
IGFmdGVyVGVzdCgpCisgICAgeworICAgIH0KK307CitURVNUX0YoQ0NMYXllclRyZWVIb3N0VGVz
dFNob3J0bGl2ZWQxLCBydW4pCit7CisgICAgcnVuVGVzdCgpOworfQorCisvLyBTaG9ydGxpdmVk
IGxheWVyVHJlZUhvc3RzIHNob3VsZG4ndCBkaWUgd2l0aCBhIGNvbW1pdCBpbiBmbGlnaHQuCitj
bGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDIgOiBwdWJsaWMgQ0NMYXllclRyZWVI
b3N0VGVzdCB7CitwdWJsaWM6CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQyKCkg
eyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkKKyAgICB7CisgICAgICAgIG1fbGF5
ZXJUcmVlSG9zdC0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICAgICAgZW5kVGVzdCgp
OworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhZnRlclRlc3QoKQorICAgIHsKKyAgICB9Cit9
OworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RTaG9ydGxpdmVkMiwgcnVuKQoreworICAgIHJ1
blRlc3QoKTsKK30KKworLy8gU2hvcnRsaXZlZCBsYXllclRyZWVIb3N0cyBzaG91bGRuJ3QgZGll
IHdpdGggYSByZWRyYXcgaW4gZmxpZ2h0LgorY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdFNob3J0
bGl2ZWQzIDogcHVibGljIENDTGF5ZXJUcmVlSG9zdFRlc3QgeworcHVibGljOgorICAgIENDTGF5
ZXJUcmVlSG9zdFRlc3RTaG9ydGxpdmVkMygpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGJlZ2lu
VGVzdCgpCisgICAgeworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldE5lZWRzUmVkcmF3KCk7
CisgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0
KCkKKyAgICB7CisgICAgfQorfTsKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZl
ZDMsIHJ1bikKK3sKKyAgICBydW5UZXN0KCk7Cit9CisKKy8vIENvbnN0YW50bHkgcmVkcmF3aW5n
IGxheWVyVHJlZUhvc3RzIHNob3VsZG4ndCBkaWUgd2hlbiB0aGV5IGNvbW1pdAorY2xhc3MgQ0NM
YXllclRyZWVIb3N0VGVzdENvbW1pdGluZ1dpdGhDb250aW51b3VzUmVkcmF3IDogcHVibGljIEND
TGF5ZXJUcmVlSG9zdFRlc3QgeworcHVibGljOgorICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RDb21t
aXRpbmdXaXRoQ29udGludW91c1JlZHJhdygpCisgICAgICAgIDogbV9udW1Db21wbGV0ZUNvbW1p
dHMoMCkKKyAgICAgICAgLCBtX251bURyYXdzKDApCisgICAgeworICAgIH0KKworICAgIHZpcnR1
YWwgdm9pZCBiZWdpblRlc3QoKQorICAgIHsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRO
ZWVkc0NvbW1pdEFuZFJlZHJhdygpOworICAgICAgICBlbmRUZXN0KCk7CisgICAgfQorCisgICAg
dmlydHVhbCB2b2lkIGNvbW1pdENvbXBsZXRlT25DQ1RocmVhZChNb2NrTGF5ZXJUcmVlSG9zdElt
cGwqIGxheWVyVHJlZUhvc3RJbXBsKQorICAgIHsKKyAgICAgICAgbV9udW1Db21wbGV0ZUNvbW1p
dHMrKzsKKyAgICAgICAgaWYgKG1fbnVtQ29tcGxldGVDb21taXRzID09IDIpCisgICAgICAgICAg
ICBlbmRUZXN0KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNBbmRQcmVz
ZW50T25DQ1RocmVhZChNb2NrTGF5ZXJUcmVlSG9zdEltcGwqIGxheWVyVHJlZUhvc3RJbXBsKQor
ICAgIHsKKyAgICAgICAgaWYgKG1fbnVtRHJhd3MgPT0gMSkKKyAgICAgICAgICAgIGxheWVyVHJl
ZUhvc3RJbXBsLT5zZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOworICAgICAgICBtX251bURyYXdz
Kys7CisgICAgICAgIGxheWVyVHJlZUhvc3RJbXBsLT5zZXROZWVkc1JlZHJhdygpOworICAgIH0K
KworICAgIHZpcnR1YWwgdm9pZCBhZnRlclRlc3QoKQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgaW50IG1fbnVtQ29tcGxldGVDb21taXRzOworICAgIGludCBtX251bURyYXdzOworfTsK
K1RFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0Q29tbWl0aW5nV2l0aENvbnRpbnVvdXNSZWRyYXcs
IHJ1bikKK3sKKyAgICBydW5UZXN0KCk7Cit9CisKKy8vIFR3byBzZXROZWVkc0NvbW1pdHMgaW4g
YSByb3cgc2hvdWxkIGxlYWQgdG8gYXQgbGVhc3QgMSBjb21taXQgYW5kIGF0IGxlYXN0IDEKKy8v
IGRyYXcgd2l0aCBmcmFtZSAwLgorY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzQ29t
bWl0MSA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0IHsKK3B1YmxpYzoKKyAgICBDQ0xheWVy
VHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQxKCkKKyAgICAgICAgOiBtX251bUNvbW1pdHMoMCkK
KyAgICAgICAgLCBtX251bURyYXdzKDApCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9p
ZCBiZWdpblRlc3QoKQorICAgIHsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXROZWVkc0Nv
bW1pdEFuZFJlZHJhdygpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldE5lZWRzQ29tbWl0
QW5kUmVkcmF3KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNBbmRQcmVz
ZW50T25DQ1RocmVhZChNb2NrTGF5ZXJUcmVlSG9zdEltcGwqIGxheWVyVHJlZUhvc3RJbXBsKQor
ICAgIHsKKyAgICAgICAgbV9udW1EcmF3cysrOworICAgICAgICBpZiAoIWxheWVyVHJlZUhvc3RJ
bXBsLT5zb3VyY2VGcmFtZU51bWJlcigpKQorICAgICAgICAgICAgZW5kVGVzdCgpOworICAgIH0K
KworICAgIHZpcnR1YWwgdm9pZCBjb21taXRPbkNDVGhyZWFkKE1vY2tMYXllclRyZWVIb3N0KiBs
YXllclRyZWVIb3N0LCBNb2NrTGF5ZXJUcmVlSG9zdEltcGwqIGltcGwpCisgICAgeworICAgICAg
ICBtX251bUNvbW1pdHMrKzsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkK
KyAgICB7CisgICAgICAgIEVYUEVDVF9HRSgxLCBtX251bUNvbW1pdHMpOworICAgICAgICBFWFBF
Q1RfR0UoMSwgbV9udW1EcmF3cyk7CisgICAgfQorCitwcml2YXRlOgorICAgIGludCBtX251bUNv
bW1pdHM7CisgICAgaW50IG1fbnVtRHJhd3M7Cit9OworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRl
c3RTZXROZWVkc0NvbW1pdDEsIHJ1bikKK3sKKyAgICBydW5UZXN0KCk7Cit9CisKKy8vIEEgc2V0
TmVlZHNDb21taXQgc2hvdWxkIGxlYWQgdG8gMSBjb21taXQuIElzc3VpbmcgYSBzZWNvbmQgY29t
bWl0IGFmdGVyIHRoYXQKKy8vIGZpcnN0IGNvbW1pdHRlZCBmcmFtZSBkcmF3cyBzaG91bGQgbGVh
ZCB0byBhbm90aGVyIGNvbW1pdC4KK2NsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc0Nv
bW1pdDIgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdCB7CitwdWJsaWM6CisgICAgQ0NMYXll
clRyZWVIb3N0VGVzdFNldE5lZWRzQ29tbWl0MigpCisgICAgICAgIDogbV9udW1Db21taXRzKDAp
CisgICAgICAgICwgbV9udW1EcmF3cygwKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgYmVnaW5UZXN0KCkKKyAgICB7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0TmVlZHND
b21taXRBbmRSZWRyYXcoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVyc0Fu
ZFByZXNlbnRPbkNDVGhyZWFkKE1vY2tMYXllclRyZWVIb3N0SW1wbCogbGF5ZXJUcmVlSG9zdElt
cGwpCisgICAgeworICAgICAgICBpZiAoIWxheWVyVHJlZUhvc3RJbXBsLT5zb3VyY2VGcmFtZU51
bWJlcigpKQorICAgICAgICAgICAgbGF5ZXJUcmVlSG9zdEltcGwtPnNldE5lZWRzQ29tbWl0QW5k
UmVkcmF3KCk7CisgICAgICAgIGVsc2UgaWYgKGxheWVyVHJlZUhvc3RJbXBsLT5zb3VyY2VGcmFt
ZU51bWJlcigpID09IDEpCisgICAgICAgICAgICBlbmRUZXN0KCk7CisgICAgfQorCisgICAgdmly
dHVhbCB2b2lkIGNvbW1pdE9uQ0NUaHJlYWQoTW9ja0xheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhv
c3QsIE1vY2tMYXllclRyZWVIb3N0SW1wbCogaW1wbCkKKyAgICB7CisgICAgICAgIG1fbnVtQ29t
bWl0cysrOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhZnRlclRlc3QoKQorICAgIHsKKyAg
ICAgICAgRVhQRUNUX0VRKDIsIG1fbnVtQ29tbWl0cyk7CisgICAgICAgIEVYUEVDVF9HRSgyLCBt
X251bURyYXdzKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgaW50IG1fbnVtQ29tbWl0czsKKyAg
ICBpbnQgbV9udW1EcmF3czsKK307CitURVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRz
Q29tbWl0MiwgcnVuKQoreworICAgIHJ1blRlc3QoKTsKK30KKworLy8gMSBzZXROZWVkc1JlZHJh
dyBhZnRlciB0aGUgZmlyc3QgY29tbWl0IGhhcyBjb21wbGV0ZWQgc2hvdWxkIGxlYWQgdG8gMQor
Ly8gYWRkaXRpb25hbCBkcmF3LgorY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzUmVk
cmF3IDogcHVibGljIENDTGF5ZXJUcmVlSG9zdFRlc3QgeworcHVibGljOgorICAgIENDTGF5ZXJU
cmVlSG9zdFRlc3RTZXROZWVkc1JlZHJhdygpCisgICAgICAgIDogbV9udW1Db21taXRzKDApCisg
ICAgICAgICwgbV9udW1EcmF3cygwKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
YmVnaW5UZXN0KCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNB
bmRQcmVzZW50T25DQ1RocmVhZChNb2NrTGF5ZXJUcmVlSG9zdEltcGwqIGltcGwpCisgICAgewor
ICAgICAgICBFWFBFQ1RfRVEoMCwgaW1wbC0+c291cmNlRnJhbWVOdW1iZXIoKSk7CisgICAgICAg
IGlmICghbV9udW1EcmF3cykKKyAgICAgICAgICAgIGltcGwtPnNldE5lZWRzUmVkcmF3KCk7IC8v
IHJlZHJhdyBhZ2FpbiB0byB2ZXJpZnkgdGhhdCB0aGUgc2Vjb25kIHJlZHJhdyBkb2VzbnQgY29t
bWl0LgorICAgICAgICBlbHNlCisgICAgICAgICAgICBlbmRUZXN0KCk7CisgICAgICAgIG1fbnVt
RHJhd3MrKzsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0T25DQ1RocmVhZChNb2Nr
TGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCwgTW9ja0xheWVyVHJlZUhvc3RJbXBsKiBpbXBs
KQorICAgIHsKKyAgICAgICAgbV9udW1Db21taXRzKys7CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIGFmdGVyVGVzdCgpCisgICAgeworICAgICAgICBFWFBFQ1RfR0UoMiwgbV9udW1EcmF3cyk7
CisgICAgICAgIEVYUEVDVF9FUSgxLCBtX251bUNvbW1pdHMpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBpbnQgbV9udW1Db21taXRzOworICAgIGludCBtX251bURyYXdzOworfTsKK1RFU1RfRihD
Q0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNSZWRyYXcsIHJ1bikKK3sKKyAgICBydW5UZXN0KCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZiAvLyBVU0UoVEhSRUFERURfQ09NUE9TSVRJ
TkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGhyZWFkVGVz
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGhyZWFkVGVzdC5jcHAKaW5k
ZXggMDRmYmE0NjUzM2RiNzVkZDczZjY4YWI3YjdiMmQ2MDFlN2NiNDA2Ny4uZmFiMzU0ZWMwMGM5
NzMzY2MyODVhMTJiOTAwY2NmMGYzZWUyYTMxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DQ1RocmVhZFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NUaHJlYWRUZXN0LmNwcApAQCAtNTEsNiArNTEsNyBAQCBwdWJsaWM6CiBURVNU
KENDVGhyZWFkVGVzdCwgcGluZ1BvbmdVc2luZ0NvbmRpdGlvbikKIHsKICAgICBPd25QdHI8Q0NU
aHJlYWQ+IHRocmVhZCA9IENDVGhyZWFkOjpjcmVhdGUoKTsKKwogICAgIFBpbmdQb25nVXNpbmdD
b25kaXRpb24gdGFyZ2V0OwogICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CiAgICAg
dGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2soJnRhcmdldCwgJlBpbmdQb25nVXNp
bmdDb25kaXRpb246OnBpbmcsICZjb21wbGV0aW9uKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL1BvcHVwTWVudVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9Qb3B1cE1lbnVUZXN0LmNwcAppbmRleCA1YTE4NzA4ZDcyMTZmMjMxYzhmZWRl
MTY2YjIzNTkwYzliOWRjOTYxLi43OTVhY2I3MGRlNWQzNTc3NGVkMzRlNjY2ZjVlNjY4ZDYxOTkz
ODFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BvcHVwTWVudVRl
c3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUG9wdXBNZW51VGVzdC5j
cHAKQEAgLTEyNiw2ICsxMjYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCkg
eyB9CiAgICAgdmlydHVhbCBXZWJTaXplIHNpemUoKSB7IHJldHVybiBXZWJTaXplKDEwMCwgMTAw
KTsgfQogICAgIHZpcnR1YWwgdm9pZCByZXNpemUoY29uc3QgV2ViU2l6ZSYpIHsgfQorICAgIHZp
cnR1YWwgdm9pZCBhbmltYXRlKGRvdWJsZSBmcmFtZUJlZ2luVGltZSkgeyB9CiAgICAgdmlydHVh
bCB2b2lkIGxheW91dCgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJDYW52YXMqLCBj
b25zdCBXZWJSZWN0JikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHRoZW1lQ2hhbmdlZCgpIHsgfQpk
aWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3Bw
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCmluZGV4IGFl
NGExYjFjYzllOGZiOTc4OTY2ZDE2ZmZlZDQyZjU5ZmJhYzZjZmIuLjdjOTYxZDA0NWViZmExZjE3
Mjk2YzEwNTBhNWE5NjQ2NDcyM2RmNTMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9XZWJWaWV3SG9zdC5jcHAKQEAgLTE0ODIsNyArMTQ4Miw3IEBAIHZvaWQgV2ViVmlld0hv
c3Q6OnBhaW50UmVjdChjb25zdCBXZWJSZWN0JiByZWN0KQogdm9pZCBXZWJWaWV3SG9zdDo6cGFp
bnRJbnZhbGlkYXRlZFJlZ2lvbigpCiB7CiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZS
QU1FKQotICAgIHdlYldpZGdldCgpLT5hbmltYXRlKCk7CisgICAgd2ViV2lkZ2V0KCktPmFuaW1h
dGUoMC4wKTsKICNlbmRpZgogICAgIHdlYldpZGdldCgpLT5sYXlvdXQoKTsKICAgICBXZWJTaXpl
IHdpZGdldFNpemUgPSB3ZWJXaWRnZXQoKS0+c2l6ZSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90631</attachid>
            <date>2011-04-21 16:41:03 -0700</date>
            <delta_ts>2011-05-17 21:21:43 -0700</delta_ts>
            <desc>Death by a thousand corner cases.</desc>
            <filename>bug-58408-20110421164102.patch</filename>
            <type>text/plain</type>
            <size>86956</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODQyMDgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyM2FjNDdhODIxMTY3MmFl
ZGM4YTUxOTA2YzA2YzQ0NWJiOTYzODUxLi4zOWU5ZDdjYjkwMmMwMTgwNmFmYmM3ZjcxNTA4ZGUw
OGU4MTBhNGFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODIgQEAKKzIwMTEtMDQtMTggIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50IENDTGF5ZXJUcmVlSG9zdCBh
bmQgQ0NMYXllclRyZWVIb3N0SW1wbCBwb3J0aW9ucyBvZiB0aHJlYWRlZCBjb21wb3NpdG9yCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODQwOAorCisg
ICAgICAgIENyZWF0ZSBDQ0xheWVyVHJlZUhvc3QgYW5kIENDTGF5ZXJUcmVlSG9zdEltcGwsIHdo
aWNoIGFyZSB0aGUgbWFpbgorICAgICAgICB0aHJlYWQgYW5kIGNvbXBvc2l0b3IgdGhyZWFkIGhh
bHZlcyBvZiBhIGNvbXBvc2l0ZWQgdmlldy4gQ29tbXVuaWNhdGlvbgorICAgICAgICBiZXR3ZWVu
IHRoZSB0d28gaXMgYmFzZWQgb24gdGhlIGRlc2lnbiB1c2VkIGluIEZpbGVTdHJlYW1Qcm94eS4K
KworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bUNvbW1pdHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyUmVuZGVyZXJDaHJvbWl1bUNvbW1pdHRlcjo6Y29tbWl0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bUNvbW1pdHRlcjo6TGF5ZXJSZW5kZXJlckNocm9taXVt
Q29tbWl0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6YmVn
aW5Db21taXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb21t
aXRDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBs
OjpMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJDaHJvbWl1bUltcGw6OmRyYXdMYXllcnNBbmRQcmVzZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bUltcGw6OmRyYXdMYXllcnNPbk1haW5UaHJlYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbFByb3h5OjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbFByb3h5OjpjcmVh
dGVMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW1JbXBsUHJveHk6OkxheWVyUmVuZGVyZXJDaHJvbWl1bUltcGxQcm94eSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZUxheWVyVHJlZUhvc3RJbXBs
UHJveHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
SGVhZHNVcERpc3BsYXkuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDSGVhZHNVcERpc3BsYXk6OmN1
cnJlbnRGcmFtZU51bWJlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuY3BwLgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0OjpDQ0xheWVyVHJlZUhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0Ojppbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6
fkNDTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNv
bW1pdENvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0
ZUFuZExheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI6
OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnNldE5lZWRzQ29t
bWl0QW5kUmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2V0TmVl
ZHNSZWRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmguCisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3Q6OmZyYW1lTnVtYmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6On5DQ0xheWVyVHJlZUhvc3RJbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmJlZ2luQ29tbWl0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbW1pdENvbXBsZXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNSZWRyYXcpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oLgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0SW1wbENsaWVudDo6fkNDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6ZnJhbWVOdW1iZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c291cmNlRnJhbWVOdW1iZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0U291cmNlRnJhbWVOdW1iZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5
OjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5OjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHk6On5DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVkcmF3
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c3RvcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnBvc3REcmF3TGF5ZXJz
VGFza09uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFBy
b3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNNYWluVGhyZWFkKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNDQ1RocmVhZCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmNvbW1pdE9uQ0NUaHJl
YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpkcmF3TGF5
ZXJzT25DQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmluaXRJbXBsT25DQ1Ro
cmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmxheWVy
VHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6Omhvc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNDVGhyZWFkOjpydW5Mb29wKToKKwogMjAxMS0wNC0xOCAgSmVzc2llIEJlcmxpbiAgPGpiZXJs
aW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFN0ZXZlIEZhbGtlbmJ1cmcuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKaW5kZXggYThkN2IyZDNmMjY5YjE4OGNhMjc1OTFkZGNjNjQ5ZmM5NDc5Njhj
Mi4uNmMyM2MxM2EyMjE2MTY0YmU2NDdiMzcwNWRjY2Y1ZTU0NGYxNjc2MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQpAQCAtNDA3MSw2ICs0MDcxLDE0IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5o
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RDb21taXR0ZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIuaCcsCisgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwu
aCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZC5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZC5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWRUYXNrLmgnLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggMjdhNjdlOTAyODk2NTY3
YzM0OTNhZmY0OTlhNzQ2OTY1NWU3MDNiZi4uZjU1NjM3MmI2YWNhODU4MDY4ZjQ0M2ZjY2UxMGMy
NzA1MzVkN2I3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC00
Nyw2ICs0Nyw4IEBACiAjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgogI2luY2x1ZGUgIldlYkdMTGF5
ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5oIgorI2luY2x1ZGUgImNjL0NDTWFpblRocmVhZFRhc2suaCIK
ICNpZiBVU0UoU0tJQSkKICNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKICNpbmNsdWRlICJQ
bGF0Zm9ybUNvbnRleHRTa2lhLmgiCkBAIC05MywyMyArOTUsMjggQEAgYm9vbCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmNvbXBhcmVMYXllclooY29uc3QgUmVmUHRyPENDTGF5ZXJJbXBsPiYgYSwg
Y29uc3QgUmUKICAgICByZXR1cm4gYS0+ZHJhd0RlcHRoKCkgPCBiLT5kcmF3RGVwdGgoKTsKIH0K
IAotUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6Y3JlYXRlKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsIFBhc3NPd25Q
dHI8VGlsZVBhaW50SW50ZXJmYWNlPiBjb250ZW50UGFpbnQpCitQYXNzUmVmUHRyPExheWVyUmVu
ZGVyZXJDaHJvbWl1bT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUoQ0NMYXllclRyZWVI
b3N0Q2xpZW50KiBjbGllbnQsIFBhc3NPd25QdHI8VGlsZVBhaW50SW50ZXJmYWNlPiBjb250ZW50
UGFpbnQpCiB7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gY2xpZW50
LT5jcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCk7CiAgICAgaWYgKCFjb250ZXh0KQogICAg
ICAgICByZXR1cm4gMDsKIAotICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVy
UmVuZGVyZXIoYWRvcHRSZWYobmV3IExheWVyUmVuZGVyZXJDaHJvbWl1bShjb250ZXh0LCBjb250
ZW50UGFpbnQpKSk7CisgICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbGF5ZXJSZW5k
ZXJlcihhZG9wdFJlZihuZXcgTGF5ZXJSZW5kZXJlckNocm9taXVtKGNsaWVudCwgY29udGV4dCwg
Y29udGVudFBhaW50KSkpOworICAgIGxheWVyUmVuZGVyZXItPmluaXQoKTsKICAgICBpZiAoIWxh
eWVyUmVuZGVyZXItPmhhcmR3YXJlQ29tcG9zaXRpbmcoKSkKICAgICAgICAgcmV0dXJuIDA7CiAK
ICAgICByZXR1cm4gbGF5ZXJSZW5kZXJlci5yZWxlYXNlKCk7CiB9CiAKLUxheWVyUmVuZGVyZXJD
aHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVtKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+IGNvbnRleHQsCitMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1
bShDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRl
eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzT3du
UHRyPFRpbGVQYWludEludGVyZmFjZT4gY29udGVudFBhaW50KQotICAgIDogbV92aWV3cG9ydFNj
cm9sbFBvc2l0aW9uKEludFBvaW50KC0xLCAtMSkpCisgICAgOiBDQ0xheWVyVHJlZUhvc3QoY2xp
ZW50KQorICAgICwgbV92aWV3cG9ydFNjcm9sbFBvc2l0aW9uKEludFBvaW50KC0xLCAtMSkpCiAg
ICAgLCBtX3Jvb3RMYXllcigwKQogICAgICwgbV9yb290TGF5ZXJDb250ZW50UGFpbnQoY29udGVu
dFBhaW50KQorICAgICwgbV9jb21taXR0aW5nKGZhbHNlKQogICAgICwgbV9jdXJyZW50U2hhZGVy
KDApCiAgICAgLCBtX2N1cnJlbnRSZW5kZXJTdXJmYWNlKDApCiAgICAgLCBtX29mZnNjcmVlbkZy
YW1lYnVmZmVySWQoMCkKQEAgLTE4OCwxMiArMTk1LDExIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpzZXRWaWV3cG9ydChjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50
UmVjCiAgICAgICAgIG1fY3VycmVudFJlbmRlclN1cmZhY2UgPSAwOwogICAgICAgICBtX3Jvb3RM
YXllckNvbnRlbnRUaWxlci0+aW52YWxpZGF0ZUVudGlyZUxheWVyKCk7CiAgICAgfQorICAgIHNl
dE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
Ojp1cGRhdGVBbmREcmF3TGF5ZXJzKCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRh
dGVMYXllcnMoKQogewotICAgIEFTU0VSVChtX2hhcmR3YXJlQ29tcG9zaXRpbmcpOwotCiAgICAg
aWYgKCFtX3Jvb3RMYXllcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMDQsMTAgKzIxMCwxNCBA
QCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQW5kRHJhd0xheWVycygpCiAgICAg
aWYgKCFtX3Jvb3RMYXllcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgTGF5ZXJMaXN0IHJlbmRl
clN1cmZhY2VMYXllckxpc3Q7Ci0KLSAgICB1cGRhdGVMYXllcnMocmVuZGVyU3VyZmFjZUxheWVy
TGlzdCk7CisgICAgbV9jb21wdXRlZFJlbmRlclN1cmZhY2VMYXllckxpc3QgPSBhZG9wdFB0cihu
ZXcgTGF5ZXJMaXN0KCkpOworICAgIHVwZGF0ZUxheWVycygqbV9jb21wdXRlZFJlbmRlclN1cmZh
Y2VMYXllckxpc3QpOworfQogCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVy
cygpCit7CisgICAgQVNTRVJUKG1faGFyZHdhcmVDb21wb3NpdGluZyk7CisgICAgQVNTRVJUKG1f
Y29tcHV0ZWRSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKICAgICAvLyBCZWZvcmUgZHJhd0xheWVy
czoKICAgICBpZiAoaGFyZHdhcmVDb21wb3NpdGluZygpICYmIG1fY29udGV4dFN1cHBvcnRzTGF0
Y2gpIHsKICAgICAgICAgLy8gRklYTUU6IFRoZSBtdWx0aXRocmVhZGVkIGNvbXBvc2l0b3IgY2Fz
ZSB3aWxsIG5vdCB3b3JrIGFzIGxvbmcgYXMKQEAgLTIzMyw3ICsyNDMsNyBAQCB2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQW5kRHJhd0xheWVycygpCiAgICAgICAgIG1fY2hpbGRD
b250ZXh0c1dlcmVDb3BpZWQgPSBmYWxzZTsKICAgICB9CiAKLSAgICBkcmF3TGF5ZXJzKHJlbmRl
clN1cmZhY2VMYXllckxpc3QpOworICAgIGRyYXdMYXllcnMoKm1fY29tcHV0ZWRSZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0KTsKIAogICAgIC8vIEFmdGVyIGRyYXdMYXllcnM6CiAgICAgaWYgKGhhcmR3
YXJlQ29tcG9zaXRpbmcoKSAmJiBtX2NvbnRleHRTdXBwb3J0c0xhdGNoKSB7CkBAIC0xMDkxLDYg
KzExMDEsNzIgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmR1bXBSZW5kZXJTdXJmYWNl
cyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCwgTGF5ZXIKICAgICAgICAgZHVtcFJlbmRlclN1
cmZhY2VzKHRzLCBpbmRlbnQsIGxheWVyLT5nZXRTdWJsYXllcnMoKVtpXS5nZXQoKSk7CiB9CiAK
K2NsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bUltcGwgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0
SW1wbCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8TGF5ZXJSZW5kZXJlckNocm9t
aXVtSW1wbD4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqIGNsaWVudCwgTGF5ZXJS
ZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsKGNsaWVudCwgbGF5ZXJSZW5kZXJl
cikpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGF5ZXJzQW5kUHJlc2VudCgpCisg
ICAgeworICAgICAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOworICAgICAgICBib29s
IGNvbnRleHRMb3N0OworICAgICAgICBDQ01haW5UaHJlYWQ6OnBvc3RUYXNrKGNyZWF0ZU1haW5U
aHJlYWRUYXNrKHRoaXMsICZMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsOjpkcmF3TGF5ZXJzT25N
YWluVGhyZWFkLCAmY29tcGxldGlvbiwgJmNvbnRleHRMb3N0KSk7CisgICAgICAgIGNvbXBsZXRp
b24ud2FpdCgpOworCisgICAgICAgIC8vIEZJWE1FOiBTZW5kIHRoZSAiVXBkYXRlUmVjdCIgbWVz
c2FnZSB1cCB0byB0aGUgUmVuZGVyV2lkZ2V0IFtvciBtb3ZlcGx1Z2luIGVxdWl2YWxlbnRzLi4u
XQorCisgICAgICAgIC8vIEZJWE1FOiBoYW5kbGUgY29udGV4dCBsb3N0CisgICAgICAgIGlmIChj
b250ZXh0TG9zdCkKKyAgICAgICAgICAgIEZBVEFMKCJMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBs
IGRvZXMgbm90IGhhbmRsZSBjb250ZXh0IGxvc3QgeWV0LiIpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQq
IGNsaWVudCwgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQorICAgICAgICA6
IENDTGF5ZXJUcmVlSG9zdEltcGwoY2xpZW50KQorICAgICAgICAsIG1fbGF5ZXJSZW5kZXJlcihs
YXllclJlbmRlcmVyKSB7IH0KKworICAgIHZvaWQgZHJhd0xheWVyc09uTWFpblRocmVhZChDQ0Nv
bXBsZXRpb25FdmVudCogY29tcGxldGlvbiwgYm9vbCogY29udGV4dExvc3QpCisgICAgeworICAg
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+
ZHJhd0xheWVycygpOworICAgICAgICBtX2xheWVyUmVuZGVyZXItPnByZXNlbnQoKTsKKworICAg
ICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IG1fbGF5ZXJSZW5kZXJlci0+Y29udGV4
dCgpOworICAgICAgICAqY29udGV4dExvc3QgPSBjb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdl
dEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I7
CisKKyAgICAgICAgY29tcGxldGlvbi0+c2lnbmFsKCk7CisgICAgfQorCisgICAgTGF5ZXJSZW5k
ZXJlckNocm9taXVtKiBtX2xheWVyUmVuZGVyZXI7Cit9OworCitjbGFzcyBMYXllclJlbmRlcmVy
Q2hyb21pdW1JbXBsUHJveHkgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsUHJv
eHk+IGNyZWF0ZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IExheWVyUmVuZGVyZXJDaHJvbWl1bUltcGxQcm94
eShsYXllclJlbmRlcmVyKSk7CisgICAgfQorCisgICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5
ZXJUcmVlSG9zdEltcGw+IGNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsOjpjcmVhdGUodGhpcywgc3RhdGljX2Nh
c3Q8TGF5ZXJSZW5kZXJlckNocm9taXVtKj4oaG9zdCgpKSk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bUltcGxQcm94eShMYXllclJlbmRlcmVyQ2hyb21pdW0q
IGxheWVyUmVuZGVyZXIpCisgICAgICAgIDogQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5KGxheWVy
UmVuZGVyZXIpIHsgfQorfTsKKworUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk+
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlTGF5ZXJUcmVlSG9zdEltcGxQcm94eSgpCit7
CisgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eT4gcHJveHkgPSBMYXllclJlbmRl
cmVyQ2hyb21pdW1JbXBsUHJveHk6OmNyZWF0ZSh0aGlzKTsKKyAgICBwcm94eS0+c3RhcnQoKTsK
KyAgICByZXR1cm4gcHJveHkucmVsZWFzZSgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IDgxM2ViNDZlMGJhYTM2NTEzZDYwNzhkYTI1YTQyNWQ0
NDVhZWJlZTkuLjZjOTJjMmE5ODc1ZjZkODJlNjAwNTM3ZGVmOGI3MThiODI0MmNlOTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC00MywxMyArNDMsMTMgQEAKICNpbmNs
dWRlICJWaWRlb0xheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJjYy9DQ0NhbnZhc0xheWVySW1w
bC5oIgogI2luY2x1ZGUgImNjL0NDSGVhZHNVcERpc3BsYXkuaCIKKyNpbmNsdWRlICJjYy9DQ0xh
eWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlICJjYy9DQ1BsdWdpbkxheWVySW1wbC5oIgogI2luY2x1
ZGUgImNjL0NDVmlkZW9MYXllckltcGwuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogI2lmIFVTRShDRykKQEAgLTYxLDEzICs2MSwxNSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENDSGVhZHNVcERpc3BsYXk7CiBjbGFzcyBD
Q0xheWVySW1wbDsKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcjsKK2NsYXNzIENDTGF5
ZXJUcmVlSG9zdEltcGw7CiBjbGFzcyBHZW9tZXRyeUJpbmRpbmc7CiBjbGFzcyBHcmFwaGljc0Nv
bnRleHQzRDsKIAogLy8gQ2xhc3MgdGhhdCBoYW5kbGVzIGRyYXdpbmcgb2YgY29tcG9zaXRlZCBy
ZW5kZXIgbGF5ZXJzIHVzaW5nIEdMLgotY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtIDogcHVi
bGljIFJlZkNvdW50ZWQ8TGF5ZXJSZW5kZXJlckNocm9taXVtPiB7CitjbGFzcyBMYXllclJlbmRl
cmVyQ2hyb21pdW0gOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0IHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGNyZWF0ZShQYXNzUmVmUHRyPEdy
YXBoaWNzQ29udGV4dDNEPiwgUGFzc093blB0cjxUaWxlUGFpbnRJbnRlcmZhY2U+IGNvbnRlbnRQ
YWludCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBjcmVh
dGUoQ0NMYXllclRyZWVIb3N0Q2xpZW50KiwgUGFzc093blB0cjxUaWxlUGFpbnRJbnRlcmZhY2U+
IGNvbnRlbnRQYWludCk7CiAKICAgICB+TGF5ZXJSZW5kZXJlckNocm9taXVtKCk7CiAKQEAgLTc4
LDcgKzgwLDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0Vmlld3BvcnQoY29uc3QgSW50UmVjdCYg
dmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRQb2ludCYg
c2Nyb2xsUG9zaXRpb24pOwogCiAgICAgLy8gdXBkYXRlcyBhbmQgZHJhd3MgdGhlIGN1cnJlbnQg
bGF5ZXJzIG9udG8gdGhlIGJhY2tidWZmZXIKLSAgICB2b2lkIHVwZGF0ZUFuZERyYXdMYXllcnMo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlTGF5ZXJzKCk7CisgICAgdm9pZCBkcmF3TGF5ZXJz
KCk7CiAKICAgICAvLyB3YWl0cyBmb3IgcmVuZGVyaW5nIHRvIGZpbmlzaAogICAgIHZvaWQgZmlu
aXNoKCk7CkBAIC0xMzMsMTEgKzEzNiwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRDaGlsZENv
bnRleHQoR3JhcGhpY3NDb250ZXh0M0QqKTsKICAgICB2b2lkIHJlbW92ZUNoaWxkQ29udGV4dChH
cmFwaGljc0NvbnRleHQzRCopOwogCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBQYXNzT3duUHRy
PENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eT4gY3JlYXRlTGF5ZXJUcmVlSG9zdEltcGxQcm94eSgp
OworCiBwcml2YXRlOgogICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiBM
YXllckxpc3Q7CiAgICAgdHlwZWRlZiBIYXNoTWFwPEdyYXBoaWNzQ29udGV4dDNEKiwgaW50PiBD
aGlsZENvbnRleHRNYXA7CiAKLSAgICBleHBsaWNpdCBMYXllclJlbmRlcmVyQ2hyb21pdW0oUGFz
c1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4sIFBhc3NPd25QdHI8VGlsZVBhaW50SW50ZXJmYWNl
PiBjb250ZW50UGFpbnQpOworICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bShDQ0xheWVyVHJlZUhv
c3RDbGllbnQqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgUGFzc093blB0cjxUaWxl
UGFpbnRJbnRlcmZhY2U+IGNvbnRlbnRQYWludCk7CiAKICAgICB2b2lkIHVwZGF0ZUxheWVycyhM
YXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgIHZvaWQgdXBkYXRlUm9vdExh
eWVyQ29udGVudHMoKTsKQEAgLTE3OCw4ICsxODQsMTEgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8
VGlsZVBhaW50SW50ZXJmYWNlPiBtX3Jvb3RMYXllckNvbnRlbnRQYWludDsKICAgICBPd25QdHI8
TGF5ZXJUaWxlckNocm9taXVtPiBtX3Jvb3RMYXllckNvbnRlbnRUaWxlcjsKIAorICAgIGJvb2wg
bV9jb21taXR0aW5nOwogICAgIGJvb2wgbV9oYXJkd2FyZUNvbXBvc2l0aW5nOwogCisgICAgT3du
UHRyPExheWVyTGlzdD4gbV9jb21wdXRlZFJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisKICAgICB1
bnNpZ25lZCBtX2N1cnJlbnRTaGFkZXI7CiAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBtX2N1
cnJlbnRSZW5kZXJTdXJmYWNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwCmlu
ZGV4IGQyMmIwOTg2M2Y1NmRhZWY5NDQxNjljNmM4OWRkYzZmZmQ5MDczMTkuLmI4Y2E1YmMyYWU0
ZDM5ZjgwMDBjMjNiY2JkNDI1ZjdiYjA5ZGI1MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERp
c3BsYXkuY3BwCkBAIC0yMjMsNiArMjIzLDE4IEBAIHZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6b25Q
cmVzZW50KCkKICAgICBtX2N1cnJlbnRGcmFtZU51bWJlciArPSAxOwogfQogCit2b2lkIENDSGVh
ZHNVcERpc3BsYXk6OnNldFNob3dGUFNDb3VudGVyKGJvb2wgc2hvdykKK3sKKyAgICBtX3Nob3dG
UFNDb3VudGVyID0gc2hvdzsKKyAgICBtX2xheWVyUmVuZGVyZXItPnNldE5lZWRzUmVkcmF3KCk7
Cit9CisKK3ZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6c2V0U2hvd1BsYXRmb3JtTGF5ZXJUcmVlKGJv
b2wgc2hvdykKK3sKKyAgICBtX3Nob3dQbGF0Zm9ybUxheWVyVHJlZSA9IHNob3c7CisgICAgbV9s
YXllclJlbmRlcmVyLT5zZXROZWVkc1JlZHJhdygpOworfQorCiB9CiAKICNlbmRpZiAvLyBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmgKaW5k
ZXggMDlmMTk4YWMxNDVkNzc2MzRkMWIxZjU0MzlmNzEwZDg0NmUzN2UyOC4uNDdjMDY4YTU2ZTRi
ZmU5MTM0MDE1ZWUxMjc5Y2QzNjMyNTY3YTQ3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3Bs
YXkuaApAQCAtNDcsMTIgKzQ3LDE0IEBAIHB1YmxpYzoKIAogICAgIH5DQ0hlYWRzVXBEaXNwbGF5
KCk7CiAKKyAgICBpbnQgY3VycmVudEZyYW1lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9jdXJy
ZW50RnJhbWVOdW1iZXI7IH0KKwogICAgIHZvaWQgb25QcmVzZW50KCk7CiAKLSAgICB2b2lkIHNl
dFNob3dGUFNDb3VudGVyKGJvb2wgZW5hYmxlKSB7IG1fc2hvd0ZQU0NvdW50ZXIgPSBlbmFibGU7
IH0KKyAgICB2b2lkIHNldFNob3dGUFNDb3VudGVyKGJvb2wgZW5hYmxlKTsKICAgICBib29sIHNo
b3dGUFNDb3VudGVyKCkgY29uc3QgeyByZXR1cm4gbV9zaG93RlBTQ291bnRlcjsgfQogCi0gICAg
dm9pZCBzZXRTaG93UGxhdGZvcm1MYXllclRyZWUoYm9vbCBlbmFibGUpIHsgbV9zaG93UGxhdGZv
cm1MYXllclRyZWUgPSBlbmFibGU7IH0KKyAgICB2b2lkIHNldFNob3dQbGF0Zm9ybUxheWVyVHJl
ZShib29sIGVuYWJsZSk7CiAgICAgYm9vbCBzaG93UGxhdGZvcm1MYXllclRyZWUoKSBjb25zdCB7
IHJldHVybiBtX3Nob3dQbGF0Zm9ybUxheWVyVHJlZTsgfQogCiAgICAgYm9vbCBlbmFibGVkKCkg
Y29uc3QgeyByZXR1cm4gbV9zaG93UGxhdGZvcm1MYXllclRyZWUgfHwgbV9zaG93RlBTQ291bnRl
cjsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzZhYmM4ZTY5
NGUwYzJhMmU0ZTFjY2JiOGQyZTQ2OGYwMTg5YmVlMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5j
cHAKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgorCisjaW5jbHVkZSAiVHJhY2VFdmVu
dC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5oIgorI2luY2x1ZGUg
ImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ND
TGF5ZXJUcmVlSG9zdDo6Q0NMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xp
ZW50KQorICAgIDogbV9jbGllbnQoY2xpZW50KQorI2lmbmRlZiBOREVCVUcKKyAgICAsIG1fY29t
bWl0dGluZyhmYWxzZSkKKyNlbmRpZgorICAgICwgbV9mcmFtZU51bWJlcigwKQoreworfQorCit2
b2lkIENDTGF5ZXJUcmVlSG9zdDo6aW5pdCgpCit7CisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lU
SU5HKQorICAgIG1fcHJveHkgPSBjcmVhdGVMYXllclRyZWVIb3N0SW1wbFByb3h5KCk7CisgICAg
QVNTRVJUKG1fcHJveHktPmlzU3RhcnRlZCgpKTsKKyAgICBtX3Byb3h5LT5zZXROZWVkc0NvbW1p
dEFuZFJlZHJhdygpOworI2VuZGlmCit9CisKK0NDTGF5ZXJUcmVlSG9zdDo6fkNDTGF5ZXJUcmVl
SG9zdCgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6fkNDTGF5ZXJUcmVl
SG9zdCIsIHRoaXMsIDApOworI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICBtX3By
b3h5LT5zdG9wKCk7CisgICAgbV9wcm94eS5jbGVhcigpOworI2VuZGlmCit9CisKK3ZvaWQgQ0NM
YXllclRyZWVIb3N0OjpiZWdpbkNvbW1pdCgpCit7CisjaWZuZGVmIE5ERUJVRworICAgIG1fY29t
bWl0dGluZyA9IHRydWU7CisjZW5kaWYKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmNvbW1p
dENvbXBsZXRlKCkKK3sKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9jb21taXR0aW5nID0gZmFsc2U7
CisjZW5kaWYKKyAgICBtX2ZyYW1lTnVtYmVyKys7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0
OjphbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKK3sKKyAgICBtX2NsaWVu
dC0+YW5pbWF0ZUFuZExheW91dChmcmFtZUJlZ2luVGltZSk7Cit9CisKK1Bhc3NPd25QdHI8Q0NM
YXllclRyZWVIb3N0Q29tbWl0dGVyPiBDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZUxheWVyVHJlZUhv
c3RDb21taXR0ZXIoKQoreworICAgIHJldHVybiBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI6OmNy
ZWF0ZSgpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0TmVlZHNDb21taXRBbmRSZWRy
YXcoKQoreworI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICBtX3Byb3h5LT5zZXRO
ZWVkc0NvbW1pdEFuZFJlZHJhdygpOworI2VuZGlmCit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0
OjpzZXROZWVkc1JlZHJhdygpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6
c2V0TmVlZHNSZWRyYXciLCB0aGlzLCAwKTsKKyNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcp
CisgICAgbV9wcm94eS0+c2V0TmVlZHNSZWRyYXcoKTsKKyNlbmRpZgorfQorCit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYzYWVhYzA1NDNlNjA0MGI2MTFlZjAyMWRl
N2JjOTA1ZWFkZjVhZTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApAQCAtMCwwICsxLDc4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDTGF5ZXJUcmVlSG9zdF9oCisjZGVmaW5lIENDTGF5
ZXJUcmVlSG9zdF9oCisKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIuaCIK
KyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaCIKKyNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ0xheWVyVHJl
ZUhvc3RJbXBsOworY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudDsKK2NsYXNzIEdyYXBo
aWNzQ29udGV4dDNEOworCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RDbGllbnQgeworcHVibGljOgor
ICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkg
PSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlTGF5
ZXJUcmVlSG9zdENvbnRleHQzRCgpID0gMDsKK307CisKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdCA6
IHB1YmxpYyBSZWZDb3VudGVkPENDTGF5ZXJUcmVlSG9zdD4geworcHVibGljOgorICAgIGV4cGxp
Y2l0IENDTGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3RDbGllbnQqKTsKKyAgICB2b2lkIGlu
aXQoKTsKKyAgICB2aXJ0dWFsIH5DQ0xheWVyVHJlZUhvc3QoKTsKKworICAgIHZpcnR1YWwgdm9p
ZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CisgICAgdmlydHVhbCB2
b2lkIGJlZ2luQ29tbWl0KCk7CisgICAgdmlydHVhbCB2b2lkIGNvbW1pdENvbXBsZXRlKCk7Cisg
ICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcj4gY3JlYXRlTGF5
ZXJUcmVlSG9zdENvbW1pdHRlcigpOworCisgICAgaW50IGZyYW1lTnVtYmVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9mcmFtZU51bWJlcjsgfQorCisgICAgdm9pZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJh
dygpOworICAgIHZvaWQgc2V0TmVlZHNSZWRyYXcoKTsKKworICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVMYXllcnMoKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NM
YXllclRyZWVIb3N0SW1wbFByb3h5PiBjcmVhdGVMYXllclRyZWVIb3N0SW1wbFByb3h5KCkgPSAw
OworCitwcml2YXRlOgorICAgIENDTGF5ZXJUcmVlSG9zdENsaWVudCogbV9jbGllbnQ7CisjaWZu
ZGVmIE5ERUJVRworICAgIGJvb2wgbV9jb21taXR0aW5nOworI2VuZGlmCisgICAgaW50IG1fZnJh
bWVOdW1iZXI7CisgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eT4gbV9wcm94eTsK
K307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29t
bWl0dGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MmRkNzE0YmU3ZTM4NGM4ZWY5ZTEwOTI0ZmY1Y2QyMDU4
Njk5YmVhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmNwcApAQCAtMCwwICsxLDQ0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9D
Q0xheWVyVHJlZUhvc3RDb21taXR0ZXIuaCIKKworI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9z
dC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcj4gQ0NMYXllclRy
ZWVIb3N0Q29tbWl0dGVyOjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NM
YXllclRyZWVIb3N0Q29tbWl0dGVyKCkpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdENvbW1p
dHRlcjo6Y29tbWl0KENDTGF5ZXJUcmVlSG9zdCogaG9zdCwgQ0NMYXllclRyZWVIb3N0SW1wbCog
aG9zdEltcGwpCit7CisgICAgaG9zdEltcGwtPnNldFNvdXJjZUZyYW1lTnVtYmVyKGhvc3QtPmZy
YW1lTnVtYmVyKCkpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENv
bW1pdHRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNiY2FkZWE2NTYzNmQ5ZTYwMGM3ZWM3OTBiYWUxNDc3Mjg4
NjViYjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIuaApAQCAtMCwwICsxLDQ4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcl9oCisjZGVm
aW5lIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcl9oCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdDsKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGw7CisK
K2NsYXNzIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093
blB0cjxDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI+IGNyZWF0ZSgpOworICAgIHZpcnR1YWwgdm9p
ZCBjb21taXQoQ0NMYXllclRyZWVIb3N0KiwgQ0NMYXllclRyZWVIb3N0SW1wbCopOworCitwcm90
ZWN0ZWQ6CisgICAgZXhwbGljaXQgQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyKCkgeyB9Cit9Owor
Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hM2FhMmJhMjEwZGJkZGQxNmI5Y2ExYWQxMmU2MTE1NTU4YjJhYjM3Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAq
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5o
IgorCisjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9z
dC5oIgorI2luY2x1ZGUgImNjL0NDVGhyZWFkVGFzay5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50
VGltZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NDTGF5ZXJUcmVlSG9zdEltcGw6OkND
TGF5ZXJUcmVlSG9zdEltcGwoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogY2xpZW50KQorICAg
IDogbV9zb3VyY2VGcmFtZU51bWJlcigtMSkKKyAgICAsIG1fZnJhbWVOdW1iZXIoMCkKKyAgICAs
IG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fY29tbWl0UGVuZGluZyhmYWxzZSkKKyAgICAsIG1f
cmVkcmF3UGVuZGluZyhmYWxzZSkKK3sKK30KKworQ0NMYXllclRyZWVIb3N0SW1wbDo6fkNDTGF5
ZXJUcmVlSG9zdEltcGwoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBs
Ojp+Q0NMYXllclRyZWVIb3N0SW1wbCgpIiwgdGhpcywgMCk7Cit9CisKK3ZvaWQgQ0NMYXllclRy
ZWVIb3N0SW1wbDo6YmVnaW5Db21taXQoKQoreworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdElt
cGw6OmNvbW1pdENvbXBsZXRlKCkKK3sKKyAgICBtX2NvbW1pdFBlbmRpbmcgPSBmYWxzZTsKKyAg
ICBzZXROZWVkc1JlZHJhdygpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdM
YXllcnMoKQoreworICAgIC8vIElmIGEgY29tbWl0IGlzIHBlbmRpbmcsIGRvIG5vdCBkcmF3LiBU
aGlzIGlzIGEgdGVtcG9yYXJ5IHJlc3RyaWN0aW9uIHRoYXQKKyAgICAvLyBpcyBuZWNlc3Nhcnkg
YmVjYXVzZSBkcmF3TGF5ZXJzIGlzIGN1cnJlbnRseSBhIGJsb2NraW5nIG9wZXJhdGlvbiBvbiB0
aGUgbWFpbiB0aHJlYWQuCisgICAgaWYgKG1fY29tbWl0UGVuZGluZykKKyAgICAgICAgcmV0dXJu
OworCisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMiLCB0
aGlzLCAwKTsKKyAgICBBU1NFUlQobV9yZWRyYXdQZW5kaW5nKTsKKyAgICBtX3JlZHJhd1BlbmRp
bmcgPSBmYWxzZTsKKworICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9z
dEltcGw6OmRyYXdMYXllcnNBbmRQcmVzZW50IiwgdGhpcywgMCk7CisgICAgICAgIGRyYXdMYXll
cnNBbmRQcmVzZW50KCk7CisgICAgfQorCisgICAgKyttX2ZyYW1lTnVtYmVyOworfQorCit2b2lk
IENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCkKK3sKKyAgICBU
UkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXci
LCB0aGlzLCAwKTsKKworICAgIC8vIEZJWE1FOiBtb3ZlIHRoZSByZXF1ZXN0RnJhbWVBbmRDb21t
aXQgb3V0IGZyb20gaGVyZSBvbmNlIHdlIGFkZCBmcmFtZXJhdGUgdGhyb3R0bGluZy9hbmltYXRp
b24KKyAgICBkb3VibGUgZnJhbWVCZWdpblRpbWUgPSBjdXJyZW50VGltZSgpOworICAgIG1fY29t
bWl0UGVuZGluZyA9IHRydWU7CisgICAgbV9jbGllbnQtPnJlcXVlc3RGcmFtZUFuZENvbW1pdE9u
Q0NUaHJlYWQoZnJhbWVCZWdpblRpbWUpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6
OnNldE5lZWRzUmVkcmF3KCkKK3sKKyAgICBpZiAobV9yZWRyYXdQZW5kaW5nIHx8IG1fY29tbWl0
UGVuZGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVl
SG9zdEltcGw6OnNldE5lZWRzUmVkcmF3IiwgdGhpcywgMCk7CisgICAgbV9yZWRyYXdQZW5kaW5n
ID0gdHJ1ZTsKKyAgICBtX2NsaWVudC0+cG9zdERyYXdMYXllcnNUYXNrT25DQ1RocmVhZCgpOwor
fQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmQ5
MDQ5NWRlZDJjODBjMzlmOGYzYTE5NWIyZTAxNWQ2YTA4Y2FiOQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdEltcGwuaApAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDTGF5
ZXJUcmVlSG9zdEltcGxfaAorI2RlZmluZSBDQ0xheWVyVHJlZUhvc3RJbXBsX2gKKworI2luY2x1
ZGUgImNjL0NDVGhyZWFkLmgiCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFBy
b3ZpZGVzIHNjaGVkdWxpbmcgaW5mcmFzdHJ1Y3R1cmUgZm9yIGEgQ0NMYXllclRyZWVIb3N0SW1w
bAorY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCAgeworcHVibGljOgorICAgIHZpcnR1
YWwgfkNDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcG9z
dERyYXdMYXllcnNUYXNrT25DQ1RocmVhZCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVxdWVz
dEZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZChkb3VibGUgZnJhbWVCZWdpblRpbWUpID0gMDsKK307
CisKKy8vIENDTGF5ZXJUcmVlSG9zdEltcGwgb3ducyB0aGUgQ0NMYXllckltcGwgdHJlZSBhcyB3
ZWxsIGFzIGFzc29jaWF0ZWQgcmVuZGVyaW5nIHN0YXRlCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RJ
bXBsIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ0xheWVyVHJlZUhvc3RJbXBsKTsKK3B1
YmxpYzoKKyAgICBleHBsaWNpdCBDQ0xheWVyVHJlZUhvc3RJbXBsKENDTGF5ZXJUcmVlSG9zdElt
cGxDbGllbnQqKTsKKyAgICB2aXJ0dWFsIH5DQ0xheWVyVHJlZUhvc3RJbXBsKCk7CisKKyAgICB2
aXJ0dWFsIHZvaWQgYmVnaW5Db21taXQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q29tcGxl
dGUoKTsKKworICAgIHZvaWQgZHJhd0xheWVycygpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGF5
ZXJzQW5kUHJlc2VudCgpID0gMDsKKworICAgIGludCBmcmFtZU51bWJlcigpIGNvbnN0IHsgcmV0
dXJuIG1fZnJhbWVOdW1iZXI7IH0KKworICAgIHZvaWQgc2V0TmVlZHNSZWRyYXcoKTsKKyAgICB2
b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisKKyAgICBpbnQgc291cmNlRnJhbWVOdW1i
ZXIoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZUZyYW1lTnVtYmVyOyB9CisgICAgdm9pZCBzZXRT
b3VyY2VGcmFtZU51bWJlcihpbnQgZnJhbWVOdW1iZXIpIHsgbV9zb3VyY2VGcmFtZU51bWJlciA9
IGZyYW1lTnVtYmVyOyB9CisKK3Byb3RlY3RlZDoKKyAgICBpbnQgbV9zb3VyY2VGcmFtZU51bWJl
cjsKKyAgICBpbnQgbV9mcmFtZU51bWJlcjsKKworcHJpdmF0ZToKKyAgICBDQ0xheWVyVHJlZUhv
c3RJbXBsQ2xpZW50KiBtX2NsaWVudDsKKyAgICBib29sIG1fY29tbWl0UGVuZGluZzsKKyAgICBi
b29sIG1fcmVkcmF3UGVuZGluZzsKK307CisKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWY0YzRkMDJlMWQ1
ZDU1MTU0NjQ0N2YzM2ExYmYxODQ2ZTAxODI2ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eS5jcHAKQEAgLTAsMCArMSwyMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oIgorCisjaW5j
bHVkZSAiVHJhY2VFdmVudC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgorI2lu
Y2x1ZGUgImNjL0NDTWFpblRocmVhZFRhc2suaCIKKyNpbmNsdWRlICJjYy9DQ1RocmVhZFRhc2su
aCIKKworCit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25h
bWVzcGFjZSB7CitDQ1RocmVhZCogY2NUaHJlYWQ7CitpbnQgbnVtUHJveGllcyA9IDA7Cit9CisK
K0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5KENDTGF5
ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCkKKyAgICA6IG1fY29tbWl0UGVuZGluZyhmYWxzZSkK
KyAgICAsIG1fbGF5ZXJUcmVlSG9zdChsYXllclRyZWVIb3N0KQoreworICAgIFRSQUNFX0VWRU5U
KCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSIsIHRo
aXMsIDApOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgbnVtUHJveGllcysrOwor
ICAgIGlmICghY2NUaHJlYWQpCisgICAgICAgIGNjVGhyZWFkID0gQ0NUaHJlYWQ6OmNyZWF0ZSgp
LmxlYWtQdHIoKTsKK30KKworCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c3RhcnQo
KQoreworICAgIC8vIENyZWF0ZSBMYXllclRyZWVIb3N0SW1wbC4KKyAgICBDQ0NvbXBsZXRpb25F
dmVudCBjb21wbGV0aW9uOworICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRh
c2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aW5pdEltcGxPbkNDVGhyZWFkLCAm
Y29tcGxldGlvbikpOworICAgIGNvbXBsZXRpb24ud2FpdCgpOworfQorCitDQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHk6On5DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkoKQoreworICAgIFRSQUNFX0VW
RU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6On5DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHki
LCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVCghbV9s
YXllclRyZWVIb3N0SW1wbCAmJiAhbV9sYXllclRyZWVIb3N0KTsgLy8gbWFrZSBzdXJlIHN0b3Ao
KSBnb3QgY2FsbGVkLgorCisgICAgbnVtUHJveGllcy0tOworICAgIGlmICghbnVtUHJveGllcykg
eworICAgICAgICBkZWxldGUgY2NUaHJlYWQ7CisgICAgICAgIGNjVGhyZWFkID0gMDsKKyAgICB9
Cit9CisKK2Jvb2wgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppc1N0YXJ0ZWQoKSBjb25zdAor
eworICAgIHJldHVybiBtX2xheWVyVHJlZUhvc3RJbXBsOworfQorCit2b2lkIENDTGF5ZXJUcmVl
SG9zdEltcGxQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKQoreworICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CisgICAgaWYgKG1fY29tbWl0UGVuZGluZykKKyAgICAgICAgcmV0dXJu
OworCisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHND
b21taXRBbmRSZWRyYXciLCB0aGlzLCAwKTsKKyAgICBtX2NvbW1pdFBlbmRpbmcgPSB0cnVlOwor
ICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJU
cmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhyZWFkKSk7Cit9
CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc1JlZHJhdygpCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRl
Q0NUaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVk
cmF3T25DQ1RocmVhZCkpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c3Rv
cCgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c3RvcCIs
IHRoaXMsIDApOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgLy8gU3luY2hyb25v
dXNseSBkZWxldGVzIHRoZSBpbXBsLgorICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247
CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXll
clRyZWVIb3N0SW1wbFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZCwgJmNvbXBs
ZXRpb24pKTsKKyAgICBjb21wbGV0aW9uLndhaXQoKTsKKworICAgIEFTU0VSVCghbV9sYXllclRy
ZWVIb3N0SW1wbCk7IC8vIHZlcmlmeSB0aGF0IHRoZSBpbXBsIGRlbGV0ZWQuCisgICAgbV9sYXll
clRyZWVIb3N0ID0gMDsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnBvc3RE
cmF3TGF5ZXJzVGFza09uQ0NUaHJlYWQoKQoreworICAgIEFTU0VSVChpc0NDVGhyZWFkKCkpOwor
ICAgIGlmIChtX2xheWVyVHJlZUhvc3RJbXBsKQorICAgICAgICBjY1RocmVhZC0+cG9zdFRhc2so
Y3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmRyYXdM
YXllcnNPbkNDVGhyZWFkKSk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpy
ZXF1ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKK3sK
KyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpyZXF1ZXN0RnJhbWVB
bmRDb21taXRPbkNDVGhyZWFkIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzQ0NUaHJlYWQoKSk7
CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdEltcGwpCisgICAgICAgIENDTWFpblRocmVhZDo6cG9z
dFRhc2soY3JlYXRlTWFpblRocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eTo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0LCBmcmFtZUJlZ2luVGltZSkpOworfQorCitib29sIEND
TGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNNYWluVGhyZWFkKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gOjppc01haW5UaHJlYWQoKTsKK30KKworYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6
OmlzQ0NUaHJlYWQoKSBjb25zdAoreworICAgIHJldHVybiBjdXJyZW50VGhyZWFkKCkgPT0gY2NU
aHJlYWQtPnRocmVhZElEKCk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpy
ZXF1ZXN0RnJhbWVBbmRDb21taXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQoreworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFtX2xheWVyVHJlZUhvc3QpCisgICAgICAgIHJl
dHVybjsKKworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJlcXVl
c3RGcmFtZUFuZENvbW1pdCIsIHRoaXMsIDApOworICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQo
IkNDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0ZUFuZExheW91dCIsIHRoaXMsIDApOworICAgICAgICBt
X2xheWVyVHJlZUhvc3QtPmFuaW1hdGVBbmRMYXlvdXQoZnJhbWVCZWdpblRpbWUpOworICAgIH0K
KworICAgIG1fY29tbWl0UGVuZGluZyA9IGZhbHNlOworICAgIHsKKyAgICAgICAgVFJBQ0VfRVZF
TlQoIkNDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlTGF5ZXJzIiwgdGhpcywgMCk7CisgICAgICAgIG1f
bGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKCk7CisgICAgfQorCisgICAgT3duUHRyPENDTGF5
ZXJUcmVlSG9zdENvbW1pdHRlcj4gY29tbWl0dGVyID0gbV9sYXllclRyZWVIb3N0LT5jcmVhdGVM
YXllclRyZWVIb3N0Q29tbWl0dGVyKCk7CisgICAgbV9sYXllclRyZWVIb3N0LT5iZWdpbkNvbW1p
dCgpOworCisgICAgLy8gQmxvY2tpbmcgY2FsbCB0byBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6
OnBlcmZvcm1Db21taXQKKyAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOworICAgIGNj
VGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eTo6Y29tbWl0T25DQ1RocmVhZCwgY29tbWl0dGVyLmdldCgpLCAmY29tcGxldGlv
bikpOworICAgIGNvbXBsZXRpb24ud2FpdCgpOworCisgICAgY29tbWl0dGVyLmNsZWFyKCk7CisK
KyAgICBtX2xheWVyVHJlZUhvc3QtPmNvbW1pdENvbXBsZXRlKCk7Cit9CisKK3ZvaWQgQ0NMYXll
clRyZWVIb3N0SW1wbFByb3h5Ojpjb21taXRPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdENvbW1p
dHRlciogY29tbWl0dGVyLCBDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbikKK3sKKyAgICBB
U1NFUlQoaXNDQ1RocmVhZCgpKTsKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1w
bFByb3h5Ojpjb21taXRPbkNDVGhyZWFkIiwgdGhpcywgMCk7CisgICAgbV9sYXllclRyZWVIb3N0
SW1wbC0+YmVnaW5Db21taXQoKTsKKyAgICB7CisgICAgICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVy
VHJlZUhvc3Q6OmNvbW1pdCIsIHRoaXMsIDApOworICAgICAgICBjb21taXR0ZXItPmNvbW1pdCht
X2xheWVyVHJlZUhvc3QsIG1fbGF5ZXJUcmVlSG9zdEltcGwuZ2V0KCkpOworICAgIH0KKyAgICBj
b21wbGV0aW9uLT5zaWduYWwoKTsKKworICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbW1pdENv
bXBsZXRlKCk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpkcmF3TGF5ZXJz
T25DQ1RocmVhZCgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNDQ1RocmVh
ZCgpKTsKKyAgICBpZiAobV9sYXllclRyZWVIb3N0SW1wbCkKKyAgICAgICAgbV9sYXllclRyZWVI
b3N0SW1wbC0+ZHJhd0xheWVycygpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhyZWFkKCkKK3sKKyAgICBUUkFDRV9FVkVO
VCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NU
aHJlYWQiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNDQ1RocmVhZCgpICYmIG1fbGF5ZXJUcmVl
SG9zdEltcGwpOworICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPnNldE5lZWRzQ29tbWl0QW5kUmVk
cmF3KCk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc1JlZHJh
d09uQ0NUaHJlYWQoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc0ND
VGhyZWFkKCkgJiYgbV9sYXllclRyZWVIb3N0SW1wbCk7CisgICAgbV9sYXllclRyZWVIb3N0SW1w
bC0+c2V0TmVlZHNSZWRyYXcoKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6
OmluaXRJbXBsT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbikKK3sKKyAg
ICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppbml0SW1wbE9uQ0NUaHJl
YWQiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNDQ1RocmVhZCgpKTsKKyAgICBtX2xheWVyVHJl
ZUhvc3RJbXBsID0gY3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwoKTsKKyAgICBjb21wbGV0aW9uLT5z
aWduYWwoKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmxheWVyVHJlZUhv
c3RDbG9zZWRPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQoreworICAg
IFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmxheWVyVHJlZUhvc3RDbG9z
ZWRPbkNDVGhyZWFkIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzQ0NUaHJlYWQoKSk7CisgICAg
bV9sYXllclRyZWVIb3N0SW1wbC5jbGVhcigpOworICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOwor
fQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjI5NWJlM2NhYjYyMWYzOTllM2M0NDljNDI0YzU4NzUzMWEzOTBjZWIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaApAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgor
ICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eV9oCisjZGVmaW5lIENDTGF5ZXJUcmVl
SG9zdEltcGxQcm94eV9oCisKKyNpbmNsdWRlICJjYy9DQ0NvbXBsZXRpb25FdmVudC5oIgorI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NMYXllclRyZWVIb3N0OworY2xhc3Mg
Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyOworCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHkgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5KTsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IH5DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkoKTsKKworICAgIGJvb2wgaXNTdGFydGVkKCkgY29u
c3Q7CisKKyAgICB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgdm9pZCBzZXRO
ZWVkc1JlZHJhdygpOworCisgICAgdm9pZCBzdGFydCgpOyAvLyBNdXN0IGJlIGNhbGxlZCBiZWZv
cmUgdXNpbmcgdGhlIHByb3h5LgorICAgIHZvaWQgc3RvcCgpOyAvLyBNdXN0IGJlIGNhbGxlZCBi
ZWZvcmUgZGVsZXRpbmcgdGhlIHByb3h5LgorCisgICAgLy8gQ0NMYXllclRyZWVIb3N0SW1wbENp
ZW50IC0tIGNhbGxlZCBvbiBDQ1RocmVhZAorICAgIHZpcnR1YWwgdm9pZCBwb3N0RHJhd0xheWVy
c1Rhc2tPbkNDVGhyZWFkKCk7CisgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RGcmFtZUFuZENvbW1p
dE9uQ0NUaHJlYWQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKKworcHJvdGVjdGVkOgorICAgIGV4
cGxpY2l0IENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eShDQ0xheWVyVHJlZUhvc3QqKTsKKyAgICB2
aXJ0dWFsIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gY3JlYXRlTGF5ZXJUcmVlSG9z
dEltcGwoKSA9IDA7CisgICAgQ0NMYXllclRyZWVIb3N0KiBob3N0KCkgY29uc3QgeyByZXR1cm4g
bV9sYXllclRyZWVIb3N0OyB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBpc01haW5UaHJlYWQoKSBj
b25zdDsKKyAgICBib29sIGlzQ0NUaHJlYWQoKSBjb25zdDsKKworICAgIC8vIENhbGxlZCBvbiBD
Q01haW5UaHJlYWQKKyAgICB2b2lkIHJlcXVlc3RGcmFtZUFuZENvbW1pdChkb3VibGUgZnJhbWVC
ZWdpblRpbWUpOworCisgICAgLy8gQ2FsbGVkIG9uIENDVGhyZWFkCisgICAgdm9pZCBjb21taXRP
bkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlciosIENDQ29tcGxldGlvbkV2ZW50Kik7
CisgICAgdm9pZCBkcmF3TGF5ZXJzT25DQ1RocmVhZCgpOworICAgIHZvaWQgaW5pdEltcGxPbkND
VGhyZWFkKENDQ29tcGxldGlvbkV2ZW50Kik7CisgICAgdm9pZCBzZXROZWVkc0NvbW1pdEFuZFJl
ZHJhd09uQ0NUaHJlYWQoKTsKKyAgICB2b2lkIHNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCgpOwor
ICAgIHZvaWQgbGF5ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQq
KTsKKworICAgIC8vIFVzZWQgb24gbWFpbi10aHJlYWQgb25seS4KKyAgICBib29sIG1fY29tbWl0
UGVuZGluZzsKKworICAgIC8vIEFjY2Vzc2VkIG9uIG1haW4gdGhyZWFkIG9ubHkuCisgICAgQ0NM
YXllclRyZWVIb3N0KiBtX2xheWVyVHJlZUhvc3Q7CisKKyAgICAvLyBVc2VkIG9uIHRoZSBDQ1Ro
cmVhZCwgYnV0IGNoZWNrZWQgb24gbWFpbiB0aHJlYWQgZHVyaW5nIGluaXRpYWxpemF0aW9uL3No
dXRkb3duLgorICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBtX2xheWVyVHJlZUhvc3RJ
bXBsOworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZFRhc2suaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZFRhc2suaAppbmRl
eCA3ZGU4ZDcxM2U4OGM4ODQyMjI0MDc5M2ZmMjc3ZDU5ZGY1M2FkZTdiLi5mYWM2ZTY0M2YwNWEx
OGJiYmFhZDU3YjI5YmJjMDNhNjI4MGVhYzhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWRUYXNrLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkVGFz
ay5oCkBAIC0yNCw5ICsyNCw5IEBACiAjaWZuZGVmIENDTWFpblRocmVhZFRhc2tfaAogI2RlZmlu
ZSBDQ01haW5UaHJlYWRUYXNrX2gKIAotI2luY2x1ZGUgIkNDTWFpblRocmVhZC5oIgogI2luY2x1
ZGUgIkNyb3NzVGhyZWFkQ29waWVyLmgiCiAjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRUYXNrLmgiCisj
aW5jbHVkZSAiY2MvQ0NNYWluVGhyZWFkLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
ICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5jcHAKaW5kZXggOTU2
NjU4NDVjNThjNDhjYTA2MjIwMDI0MjQ4Yjc0N2FiYWI3NjBjZi4uZGUxNzNhMTM0OTgyNGFmOTBm
YWRjZTc4MTkwZmJiODNjYzQwZWI4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmNwcApAQCAtMjcsNiArMjcs
NyBAQAogI2luY2x1ZGUgIkNDVGhyZWFkLmgiCiAKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hy
b21pdW0uaCIKKyNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRU
aW1lLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFk
aW5nUHJpbWl0aXZlcy5oPgpAQCAtNjQsNiArNjUsNyBAQCB2b2lkKiBDQ1RocmVhZDo6Y29tcG9z
aXRvclRocmVhZFN0YXJ0KHZvaWQqIHVzZXJkYXRhKQogCiB2b2lkKiBDQ1RocmVhZDo6cnVuTG9v
cCgpCiB7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkOjpydW5Mb29wIiwgdGhpcywgMCk7CiAg
ICAgewogICAgICAgICAvLyBXYWl0IGZvciBDQ1RocmVhZDo6c3RhcnQoKSB0byBjb21wbGV0ZSB0
byBoYXZlIG1fdGhyZWFkSUQKICAgICAgICAgLy8gZXN0YWJsaXNoZWQgYmVmb3JlIHN0YXJ0aW5n
IHRoZSBtYWluIGxvb3AuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFRhc2suaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkVGFzay5oCmluZGV4IDcxMjQ1ZDNlNGUwZWNl
NTM1MDVhMGRlZGU3NTM2OGVjYzZkMGZjNDcuLjkxYzU4ZTVkMjViN2JiMjg2ZTIxNmM0ZTA2OGNi
ZTEwOTU3OGYxODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGhyZWFkVGFzay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkVGFzay5oCkBAIC0yNCw5ICsyNCw5IEBACiAj
aWZuZGVmIENDVGhyZWFkVGFza19oCiAjZGVmaW5lIENDVGhyZWFkVGFza19oCiAKLSNpbmNsdWRl
ICJDQ1RocmVhZC5oIgogI2luY2x1ZGUgIkNyb3NzVGhyZWFkQ29waWVyLmgiCiAjaW5jbHVkZSAi
Q3Jvc3NUaHJlYWRUYXNrLmgiCisjaW5jbHVkZSAiY2MvQ0NUaHJlYWQuaCIKICNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKaW5kZXggZDI4ZDhiZTFkYjFlZTc3NjAwMTMwNDI4N2U5MzJkMTI5OWQ3
N2M3Ni4uMDFkN2U2YmI1ZDNmMDE1MWQ5Y2NkNWJjMjZiMWNlYWRkMTdhYzVmZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMDEgQEAKKzIwMTEtMDQtMTggIE5hdCBEdWNh
ICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50IENDTGF5ZXJUcmVlSG9zdCBhbmQg
Q0NMYXllclRyZWVIb3N0SW1wbCBwb3J0aW9ucyBvZiB0aHJlYWRlZCBjb21wb3NpdG9yCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODQwOAorCisgICAg
ICAgIFJlZGlyZWN0IGludmFsaWRhdGVzIGFuZCBzY2hlZHVsaW5nIGludG8gY29tcG9zaXRvciB3
aGVuIGluCisgICAgICAgIHRocmVhZGVkIGNvbXBvc2l0aW5nIG1vZGUuIEFkZCBDQ0xTdHJlc3Mg
dGVzdHMgZm9yCisgICAgICAgIENDTGF5ZXJUcmVlSG9zdC4KKworICAgICAgICAqIFdlYktpdC5n
eXBpOgorICAgICAgICAqIHB1YmxpYy9XZWJXaWRnZXQuaDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
V2lkZ2V0OjpzY2hlZHVsZUNvbXBvc2l0ZSk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmFuaW1hdGUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3SW1wbDo6ZG9BbmltYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0lt
cGw6OnBhaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmFuaW1hdGVBbmRMYXlv
dXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Y29tcG9zaXRlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlld0ltcGw6OnNjaGVkdWxlQ29tcG9zaXRlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6OnNldFJvb3RMYXllck5lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6ZG9Db21wb3NpdGUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3SW1wbDo6Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjpyZWFsbG9jYXRlUmVuZGVyZXIpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3SW1wbDo6dXBkYXRlTGF5ZXJSZW5kZXJlclNldHRpbmdzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlld0ltcGw6OnVwZGF0ZUxheWVyUmVuZGVyZXJWaWV3cG9ydCk6CisgICAgICAg
ICogc3JjL1dlYlZpZXdJbXBsLmg6CisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVz
dC5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0OjpDQ0xheWVy
VHJlZUhvc3RUZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6YW5pbWF0
ZUFuZExheW91dCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3Q6OmJlZ2luQ29t
bWl0T25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3Q6OmJlZ2lu
Q29tbWl0T25NYWluVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6
Y29tbWl0T25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3Q6OmNv
bW1pdENvbXBsZXRlT25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRl
c3Q6OmNvbW1pdENvbXBsZXRlT25NYWluVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRy
ZWVIb3N0VGVzdDo6ZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdU
Rjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6dXBkYXRlTGF5ZXJzKToKKyAgICAgICAgKFdURjo6Q0NM
YXllclRyZWVIb3N0VGVzdDo6b25CZWdpblRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJl
ZUhvc3RUZXN0Ojpkb0VuZFRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0
OjpvbkVuZFRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0OjpydW5UZXN0
KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6dGVzdFRpbWVvdXQpOgorICAg
ICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdENsaWVudDo6TW9ja0xheWVyVHJlZUhvc3RDbGll
bnQpOgorICAgICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdENsaWVudDo6Y3JlYXRlTGF5ZXJU
cmVlSG9zdENvbnRleHQzRCk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0Q2xpZW50
OjphbmltYXRlQW5kTGF5b3V0KToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3RDb21t
aXR0ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0Q29tbWl0dGVy
Ojpjb21taXQpOgorICAgICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdENvbW1pdHRlcjo6TW9j
a0xheWVyVHJlZUhvc3RDb21taXR0ZXIpOgorICAgICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9z
dEltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0SW1wbDo6YmVn
aW5Db21taXQpOgorICAgICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdEltcGw6OmNvbW1pdENv
bXBsZXRlKToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJz
QW5kUHJlc2VudCk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0SW1wbDo6TW9ja0xh
eWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3RJbXBsUHJv
eHk6OmNyZWF0ZSk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpj
cmVhdGVMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0
SW1wbFByb3h5OjpNb2NrTGF5ZXJUcmVlSG9zdEltcGxQcm94eSk6CisgICAgICAgIChXVEY6Ok1v
Y2tMYXllclRyZWVIb3N0OjpNb2NrTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXVEY6Ok1vY2tM
YXllclRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVIb3N0SW1wbFByb3h5KToKKyAgICAgICAgKFdU
Rjo6TW9ja0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVycyk6CisgICAgICAgIChXVEY6Ok1vY2tM
YXllclRyZWVIb3N0OjpiZWdpbkNvbW1pdCk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVI
b3N0Ojpjb21taXRDb21wbGV0ZSk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3Q6
OmRvQmVnaW5UZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6ZW5kVGVz
dCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTaG9ydGxpdmVkMTo6Q0NMYXll
clRyZWVIb3N0VGVzdFNob3J0bGl2ZWQxKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0
VGVzdFNob3J0bGl2ZWQxOjpiZWdpblRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhv
c3RUZXN0U2hvcnRsaXZlZDE6OmFmdGVyVGVzdCk6CisgICAgICAgIChXVEY6OlRFU1RfRik6Cisg
ICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTaG9ydGxpdmVkMjo6Q0NMYXllclRyZWVI
b3N0VGVzdFNob3J0bGl2ZWQyKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNo
b3J0bGl2ZWQyOjpiZWdpblRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0
U2hvcnRsaXZlZDI6OmFmdGVyVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRl
c3RTaG9ydGxpdmVkMzo6Q0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQzKToKKyAgICAgICAg
KFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQzOjpiZWdpblRlc3QpOgorICAgICAg
ICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDM6OmFmdGVyVGVzdCk6CisgICAg
ICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RDb21taXRpbmdXaXRoQ29udGludW91c1JlZHJh
dzo6Q0NMYXllclRyZWVIb3N0VGVzdENvbW1pdGluZ1dpdGhDb250aW51b3VzUmVkcmF3KToKKyAg
ICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdENvbW1pdGluZ1dpdGhDb250aW51b3VzUmVk
cmF3OjpiZWdpblRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0Q29tbWl0
aW5nV2l0aENvbnRpbnVvdXNSZWRyYXc6OmNvbW1pdENvbXBsZXRlT25DQ1RocmVhZCk6CisgICAg
ICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RDb21taXRpbmdXaXRoQ29udGludW91c1JlZHJh
dzo6ZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXll
clRyZWVIb3N0VGVzdENvbW1pdGluZ1dpdGhDb250aW51b3VzUmVkcmF3OjphZnRlclRlc3QpOgor
ICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQxOjpDQ0xheWVy
VHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQxKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVI
b3N0VGVzdFNldE5lZWRzQ29tbWl0MTo6YmVnaW5UZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXll
clRyZWVIb3N0VGVzdFNldE5lZWRzQ29tbWl0MTo6ZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhy
ZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzQ29tbWl0MTo6
Y29tbWl0T25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTZXRO
ZWVkc0NvbW1pdDE6OmFmdGVyVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRl
c3RTZXROZWVkc0NvbW1pdDI6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc0NvbW1pdDIpOgor
ICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQyOjpiZWdpblRl
c3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQyOjpk
cmF3TGF5ZXJzQW5kUHJlc2VudE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJl
ZUhvc3RUZXN0U2V0TmVlZHNDb21taXQyOjpjb21taXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdU
Rjo6Q0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzQ29tbWl0Mjo6YWZ0ZXJUZXN0KToKKyAgICAg
ICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzUmVkcmF3OjpDQ0xheWVyVHJlZUhv
c3RUZXN0U2V0TmVlZHNSZWRyYXcpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0
U2V0TmVlZHNSZWRyYXc6OmJlZ2luVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9z
dFRlc3RTZXROZWVkc1JlZHJhdzo6ZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhyZWFkKToKKyAg
ICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzUmVkcmF3Ojpjb21taXRPbkND
VGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzUmVkcmF3
OjphZnRlclRlc3QpOgorICAgICAgICAqIHRlc3RzL0NDVGhyZWFkVGVzdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpURVNUKToKKwogMjAxMS0wNC0xOCAgRXZhbiBNYXJ0aW4gIDxldmFuQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL1dlYktpdC5neXBpCmluZGV4IGMyM2M5ZWRjYjQ2ODJjYjA0MGVjMzY3ZjM3YjVlYTg5Zjcx
OWI3MWQuLjRlMmEzNWUxZDM4N2E0YjY2YzhiOTViZTIxNmRlODY2ODM3NDFkZmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtNTMsNiArNTMsNyBAQAogICAgICAgICBdLAogICAg
ICAgICAnd2Via2l0X3VuaXR0ZXN0X2ZpbGVzJzogWwogICAgICAgICAgICAgJ3Rlc3RzL0FyZW5h
VGVzdEhlbHBlcnMuaCcsCisgICAgICAgICAgICAndGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5j
cHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDVGhyZWFkVGFza1Rlc3QuY3BwJywKICAgICAgICAg
ICAgICd0ZXN0cy9DQ1RocmVhZFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9EcmFnSW1h
Z2VUZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJXaWRnZXQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oCmlu
ZGV4IDEyOTBhZDgxNjJiNjYyM2JjMzU5YTBmY2ZjNTYzMTQ0ZjZmY2Y3NGIuLmY2ODFiZmFhYWJm
MmIxZDI5YjJlMDJlMDQ0M2EwZmM1ZjU0MzgwM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYldpZGdldC5oCkBAIC00Niw2ICs0Niw5IEBAIHN0cnVjdCBXZWJSZWN0Owogc3Ry
dWN0IFdlYlNpemU7CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgV2ViVmVjdG9yOwogCisv
LyBGSVhNRTogcmVtb3ZlIHRoaXMgZGVmaW5lIG9uY2UgcmVuZGVyX3dpZGdldCBoYXMgYmVlbiBj
aGFuZ2VkIHRvIGlzc3VlIHRocmVhZGVkIGNvbXBvc2l0b3IgY2FsbHMKKyNkZWZpbmUgV0VCV0lE
R0VUX0hBU19USFJFQURFRF9DT01QT1NJVElOR19DSEFOR0VTIDEKKwogY2xhc3MgV2ViV2lkZ2V0
IHsKIHB1YmxpYzoKICAgICAvLyBUaGlzIG1ldGhvZCBjbG9zZXMgYW5kIGRlbGV0ZXMgdGhlIFdl
YldpZGdldC4KQEAgLTU3LDE1ICs2MCwxNyBAQCBwdWJsaWM6CiAgICAgLy8gQ2FsbGVkIHRvIHJl
c2l6ZSB0aGUgV2ViV2lkZ2V0LgogICAgIHZpcnR1YWwgdm9pZCByZXNpemUoY29uc3QgV2ViU2l6
ZSYpID0gMDsKIAotICAgIC8vIENhbGxlZCB0byB1cGRhdGUgaW1wZXJhdGl2ZSBhbmltYXRpb24g
c3RhdGUuICBUaGlzIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlCi0gICAgLy8gcGFpbnQsIGFsdGhv
dWdoIHRoZSBjbGllbnQgY2FuIHJhdGUtbGltaXQgdGhlc2UgY2FsbHMuCi0gICAgdmlydHVhbCB2
b2lkIGFuaW1hdGUoKSA9IDA7CisgICAgLy8gQ2FsbGVkIHRvIHVwZGF0ZSBpbXBlcmF0aXZlIGFu
aW1hdGlvbiBzdGF0ZS4gVGhpcyBzaG91bGQgYmUgY2FsbGVkCisgICAgLy8gYmVmb3JlIHBhaW50
LCBhbHRob3VnaCB0aGUgY2xpZW50IGNhbiByYXRlLWxpbWl0IHRoZXNlIGNhbGxzLgorICAgIC8v
IEZJWE1FOiByZW1vdmUgZGVmYXVsdCBhcmd1bWVudCBvbmNlIHJlbmRlcl93aWRnZXQgaGFzIGJl
ZW4gdXBkYXRlZCB0bworICAgIC8vIGlzc3VlIHRoZSBjb3JyZWN0IHZhbHVlLgorICAgIHZpcnR1
YWwgdm9pZCBhbmltYXRlKGRvdWJsZSBmcmFtZUJlZ2luVGltZSkgPSAwOwogCiAgICAgLy8gQ2Fs
bGVkIHRvIGxheW91dCB0aGUgV2ViV2lkZ2V0LiAgVGhpcyBNVVNUIGJlIGNhbGxlZCBiZWZvcmUg
UGFpbnQsCiAgICAgLy8gYW5kIGl0IG1heSByZXN1bHQgaW4gY2FsbHMgdG8gV2ViV2lkZ2V0Q2xp
ZW50OjpkaWRJbnZhbGlkYXRlUmVjdC4KICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCkgPSAwOwog
Ci0gICAgLy8gQ2FsbGVkIHRvIHBhaW50IHRoZSByZWN0YW5ndWxhciByZWdpb24gd2l0aGluIHRo
ZSBXZWJXaWRnZXQgCisgICAgLy8gQ2FsbGVkIHRvIHBhaW50IHRoZSByZWN0YW5ndWxhciByZWdp
b24gd2l0aGluIHRoZSBXZWJXaWRnZXQKICAgICAvLyBvbnRvIHRoZSBzcGVjaWZpZWQgY2FudmFz
IGF0ICh2aWV3UG9ydC54LHZpZXdQb3J0LnkpLiBZb3UgTVVTVCBjYWxsCiAgICAgLy8gTGF5b3V0
IGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLiAgSXQgaXMgb2theSB0byBjYWxsIHBhaW50CiAg
ICAgLy8gbXVsdGlwbGUgdGltZXMgb25jZSBsYXlvdXQgaGFzIGJlZW4gY2FsbGVkLCBhc3N1bWlu
ZyBubyBvdGhlcgpAQCAtNzQsMTIgKzc5LDE2IEBAIHB1YmxpYzoKICAgICAvLyB3YXJyYW50ZWQg
YmVmb3JlIHBhaW50aW5nIGFnYWluKS4KICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoV2ViQ2FudmFz
KiwgY29uc3QgV2ViUmVjdCYgdmlld1BvcnQpID0gMDsKIAotICAgIC8vIFRyaWdnZXJzIGNvbXBv
c2l0aW5nIG9mIHRoZSBjdXJyZW50IGxheWVycyBvbnRvIHRoZSBzY3JlZW4uCi0gICAgLy8gVGhl
IGZpbmlzaCBhcmd1bWVudCBjb250cm9scyB3aGV0aGVyIHRoZSBjb21wb3NpdG9yIHdpbGwgd2Fp
dCBmb3IgdGhlCi0gICAgLy8gR1BVIHRvIGZpbmlzaCByZW5kZXJpbmcgYmVmb3JlIHJldHVybmlu
Zy4gWW91IE1VU1QgY2FsbCBMYXlvdXQKLSAgICAvLyBiZWZvcmUgY2FsbGluZyB0aGlzIG1ldGhv
ZCwgZm9yIHRoZSBzYW1lIHJlYXNvbnMgZGVzY3JpYmVkIGluCi0gICAgLy8gdGhlIHBhaW50IG1l
dGhvZCBhYm92ZS4KLSAgICB2aXJ0dWFsIHZvaWQgY29tcG9zaXRlKGJvb2wgZmluaXNoKSA9IDA7
CisgICAgLy8gVHJpZ2dlcnMgY29tcG9zaXRpbmcgb2YgdGhlIGN1cnJlbnQgbGF5ZXJzIG9udG8g
dGhlIHNjcmVlbi4gVGhpcyBjYWxsIGhhcworICAgIC8vIG5vIGVmZmVjdCBpbiB0aHJlYWRlZCBj
b21wb3NpdGluZyBtb2RlLiBZb3UgTVVTVCBjYWxsIExheW91dCBiZWZvcmUKKyAgICAvLyBjYWxs
aW5nIHRoaXMgbWV0aG9kLCBmb3IgdGhlIHNhbWUgcmVhc29ucyBkZXNjcmliZWQgaW4gdGhlIHBh
aW50IG1ldGhvZAorICAgIC8vIGFib3ZlLgorICAgIHZpcnR1YWwgdm9pZCBjb21wb3NpdGUoKSA9
IDA7CisKKyAgICAvLyBJbiB0aHJlYWRlZCBjb21wb3NpdGluZyBtb2RlLCBpbmRpY2F0ZXMgdGhh
dCB0aGUgd2lkZ2V0IHNob3VsZCByZWRyYXcKKyAgICAvLyBpdHNlbGYsIGZvciBleGFtcGxlIGR1
ZSB0byB3aW5kb3cgZGFtYWdlLiBUaGUgcmVkcmF3IHdpbGwgYmVnaW4KKyAgICAvLyBhc3luY2hy
b25vdXNseS4KKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGUoKSAgeyB9CiAKICAg
ICAvLyBDYWxsZWQgdG8gaW5mb3JtIHRoZSBXZWJXaWRnZXQgb2YgYSBjaGFuZ2UgaW4gdGhlbWUu
CiAgICAgLy8gSW1wbGVtZW50b3JzIHRoYXQgY2FjaGUgcmVuZGVyZWQgY29waWVzIG9mIHdpZGdl
dHMgbmVlZCB0byByZS1yZW5kZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlBvcHVwTWVudUltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
UG9wdXBNZW51SW1wbC5jcHAKaW5kZXggYjRkNDI0NmMzZjYwMTBiY2FmNTAyMWQ0Y2Q5NjgxYWJm
YzM5M2RiNS4uNzZmODk0YTZiYzY1ODhhZDBhYjQ0ODQxMzc1YTgzMGY4MTM3Mjc4MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5jcHAKQEAgLTE1
MSw3ICsxNTEsNyBAQCB2b2lkIFdlYlBvcHVwTWVudUltcGw6OnJlc2l6ZShjb25zdCBXZWJTaXpl
JiBuZXdTaXplKQogICAgIH0KIH0KIAotdm9pZCBXZWJQb3B1cE1lbnVJbXBsOjphbmltYXRlKCkK
K3ZvaWQgV2ViUG9wdXBNZW51SW1wbDo6YW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWUpCiB7
CiB9CiAKQEAgLTE3Myw3ICsxNzMsNyBAQCB2b2lkIFdlYlBvcHVwTWVudUltcGw6OnRoZW1lQ2hh
bmdlZCgpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBXZWJQb3B1cE1lbnVJbXBs
Ojpjb21wb3NpdGUoYm9vbCBmaW5pc2gpCit2b2lkIFdlYlBvcHVwTWVudUltcGw6OmNvbXBvc2l0
ZSgpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlBvcHVwTWVudUltcGwuaAppbmRleCA1OGE4ODNmNTY4ZjdlZjMwZjlmMmUwMDM0
YTE3OGUxZWFiYzBhODA2Li42NWZmMDU5Y2YyM2JlNDE3ODg3OTU4MWI1MDU5MDI0ZjlmMDYyNTY3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBs
LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5oCkBA
IC02MiwxMSArNjIsMTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpOwogICAg
IHZpcnR1YWwgV2ViU2l6ZSBzaXplKCkgeyByZXR1cm4gbV9zaXplOyB9CiAgICAgdmlydHVhbCB2
b2lkIHJlc2l6ZShjb25zdCBXZWJTaXplJik7Ci0gICAgdmlydHVhbCB2b2lkIGFuaW1hdGUoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWUpOwogICAgIHZp
cnR1YWwgdm9pZCBsYXlvdXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoV2ViQ2FudmFzKiBj
YW52YXMsIGNvbnN0IFdlYlJlY3QmIHJlY3QpOwogICAgIHZpcnR1YWwgdm9pZCB0aGVtZUNoYW5n
ZWQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29tcG9zaXRlKGJvb2wgZmluaXNoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgY29tcG9zaXRlKCk7CiAgICAgdmlydHVhbCBib29sIGhhbmRsZUlucHV0RXZlbnQo
Y29uc3QgV2ViSW5wdXRFdmVudCYpOwogICAgIHZpcnR1YWwgdm9pZCBtb3VzZUNhcHR1cmVMb3N0
KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKGJvb2wgZW5hYmxlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAppbmRleCAyNDM4YTk0ODFkMDE3MGM1NmIz
NjMyYTBmYjAxZDZjM2QwMTg3YjhkLi5iZjczNmQwZDQwMzhjMzM1YWZjMGRmZTk4NWQ1ZWZmZjQ1
NzY4YTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1w
bC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBA
IC05OTEsMTQgKzk5MSwxOCBAQCB2b2lkIFdlYlZpZXdJbXBsOjpyZXNpemUoY29uc3QgV2ViU2l6
ZSYgbmV3U2l6ZSkKICNlbmRpZgogfQogCi12b2lkIFdlYlZpZXdJbXBsOjphbmltYXRlKCkKK3Zv
aWQgV2ViVmlld0ltcGw6OmFuaW1hdGUoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQogewogI2lmIEVO
QUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKKyAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMg
b25jZSByZW5kZXJfd2lkZ2V0IGhhcyBiZWVuIG1vZGlmaWVkIHRvIHBhc3MgaW4gYQorICAgIC8v
IGZyYW1lQmVnaW5UaW1lLgorICAgIGlmICghZnJhbWVCZWdpblRpbWUpCisgICAgICAgIGZyYW1l
QmVnaW5UaW1lID0gY3VycmVudFRpbWUoKTsKICAgICBXZWJGcmFtZUltcGwqIHdlYmZyYW1lID0g
bWFpbkZyYW1lSW1wbCgpOwogICAgIGlmICh3ZWJmcmFtZSkgewogICAgICAgICBGcmFtZVZpZXcq
IHZpZXcgPSB3ZWJmcmFtZS0+ZnJhbWVWaWV3KCk7CiAgICAgICAgIGlmICh2aWV3KQotICAgICAg
ICAgICAgdmlldy0+c2VydmljZVNjcmlwdGVkQW5pbWF0aW9ucyhjb252ZXJ0U2Vjb25kc1RvRE9N
VGltZVN0YW1wKGN1cnJlbnRUaW1lKCkpKTsKKyAgICAgICAgICAgIHZpZXctPnNlcnZpY2VTY3Jp
cHRlZEFuaW1hdGlvbnMoY29udmVydFNlY29uZHNUb0RPTVRpbWVTdGFtcChmcmFtZUJlZ2luVGlt
ZSkpOwogICAgIH0KICNlbmRpZgogfQpAQCAtMTA2OCw2ICsxMDcyLDEwIEBAIHZvaWQgV2ViVmll
d0ltcGw6OnBhaW50KFdlYkNhbnZhcyogY2FudmFzLCBjb25zdCBXZWJSZWN0JiByZWN0KQogewog
ICAgIGlmIChpc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSkgewogI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKKyNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAg
ICAgIC8vIEZJWE1FOiBkbyByZWFkYmFjayBpbiB0aHJlYWRlZCBjb21wb3NpdGluZyBtb2RlIHJh
dGhlciB0aGFuIHJldHVybmluZyBub3RoaW5nCisgICAgICAgIHJldHVybjsKKyNlbmRpZgogICAg
ICAgICBkb0NvbXBvc2l0ZSgpOwogCiAgICAgICAgIC8vIElmIGEgY2FudmFzIHdhcyBwYXNzZWQg
aW4sIHdlIHVzZSBpdCB0byBncmFiIGEgY29weSBvZiB0aGUKQEAgLTEwOTYsOSArMTEwNCwxOSBA
QCB2b2lkIFdlYlZpZXdJbXBsOjp0aGVtZUNoYW5nZWQoKQogICAgIHZpZXctPmludmFsaWRhdGVS
ZWN0KGRhbWFnZWRSZWN0KTsKIH0KIAotdm9pZCBXZWJWaWV3SW1wbDo6Y29tcG9zaXRlKGJvb2wg
ZmluaXNoKQorCit2b2lkIFdlYlZpZXdJbXBsOjphbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFt
ZUJlZ2luVGltZSkKK3sKKyAgICBhbmltYXRlKGZyYW1lQmVnaW5UaW1lKTsKKyAgICBsYXlvdXQo
KTsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6Y29tcG9zaXRlKCkKIHsKICNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgIG1f
bGF5ZXJSZW5kZXJlci0+c2V0TmVlZHNSZWRyYXcoKTsKKyNlbHNlCiAgICAgVFJBQ0VfRVZFTlQo
IldlYlZpZXdJbXBsOjpjb21wb3NpdGUiLCB0aGlzLCAwKTsKICAgICBpZiAobV9yZWNyZWF0aW5n
R3JhcGhpY3NDb250ZXh0KSB7CiAgICAgICAgIC8vIHJlYWxsb2NhdGVSZW5kZXJlciB3aWxsIHJl
cXVlc3QgYSByZXBhaW50IHdoZXRoZXIgb3Igbm90IGl0IHN1Y2NlZWRlZApAQCAtMTEwOSwxMCAr
MTEyNyw2IEBAIHZvaWQgV2ViVmlld0ltcGw6OmNvbXBvc2l0ZShib29sIGZpbmlzaCkKICAgICB9
CiAgICAgZG9Db21wb3NpdGUoKTsKIAotICAgIC8vIEZpbmlzaCBpZiByZXF1ZXN0ZWQuCi0gICAg
aWYgKGZpbmlzaCkKLSAgICAgICAgbV9sYXllclJlbmRlcmVyLT5maW5pc2goKTsKLQogICAgIC8v
IFB1dCByZXN1bHQgb25zY3JlZW4uCiAgICAgbV9sYXllclJlbmRlcmVyLT5wcmVzZW50KCk7CiAK
QEAgLTExMjgsNiArMTE0Miw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OmNvbXBvc2l0ZShib29sIGZp
bmlzaCkKICAgICAgICAgc2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7CiAgICAgfQogI2VuZGlm
CisjZW5kaWYKIH0KIAogY29uc3QgV2ViSW5wdXRFdmVudCogV2ViVmlld0ltcGw6Om1fY3VycmVu
dElucHV0RXZlbnQgPSAwOwpAQCAtMjMyNyw5ICsyMzQyLDI0IEBAIHZvaWQgV2ViVmlld0ltcGw6
OnNldFJvb3RHcmFwaGljc0xheWVyKFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXIqIGxheWVyKQogICAg
ICAgICBtX2NsaWVudC0+ZGlkSW52YWxpZGF0ZVJlY3QoZGFtYWdlZFJlY3QpOwogfQogCit2b2lk
IFdlYlZpZXdJbXBsOjpzY2hlZHVsZUNvbXBvc2l0ZSgpCit7CisjaWYgVVNFKFRIUkVBREVEX0NP
TVBPU0lUeUlORykKKyAgICBpZiAobV9sYXllclJlbmRlcmVyKQorICAgICAgICBtX2xheWVyUmVu
ZGVyZXItPnNldE5lZWRzUmVkcmF3KCk7CisjZWxzZQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworI2VuZGlmCit9CisKIHZvaWQgV2ViVmlld0ltcGw6OnNldFJvb3RMYXllck5lZWRzRGlzcGxh
eSgpCiB7CisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgIGlmIChtX2xheWVyUmVu
ZGVyZXIpCisgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXco
KTsKKyNlbHNlCiAgICAgbV9jbGllbnQtPnNjaGVkdWxlQ29tcG9zaXRlKCk7CisjZW5kaWYKIH0K
IAogCkBAIC0yNDAxLDE2ICsyNDMxLDkgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVy
YXRlZENvbXBvc2l0aW5nQWN0aXZlKGJvb2wgYWN0aXZlKQogCiAgICAgICAgIG1fY2xpZW50LT5k
aWRBY3RpdmF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcodHJ1ZSk7CiAgICAgfSBlbHNlIHsKLSAg
ICAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gbV90ZW1wb3JhcnlPbnNj
cmVlbkdyYXBoaWNzQ29udGV4dDNELnJlbGVhc2UoKTsKLSAgICAgICAgaWYgKCFjb250ZXh0KSB7
Ci0gICAgICAgICAgICBjb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShnZXRDb21w
b3NpdG9yQ29udGV4dEF0dHJpYnV0ZXMoKSwgbV9wYWdlLT5jaHJvbWUoKSwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKLSAgICAgICAgICAgIGlmIChjb250
ZXh0KQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlc2hhcGUoc3RkOjptYXgoMSwgbV9zaXpl
LndpZHRoKSwgc3RkOjptYXgoMSwgbV9zaXplLmhlaWdodCkpOwotICAgICAgICB9Ci0KLQotICAg
ICAgICBtX2xheWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShjb250
ZXh0LnJlbGVhc2UoKSwgV2ViVmlld0ltcGxDb250ZW50UGFpbnRlcjo6Y3JlYXRlKHRoaXMpKTsK
KyAgICAgICAgbV9sYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUo
dGhpcywgV2ViVmlld0ltcGxDb250ZW50UGFpbnRlcjo6Y3JlYXRlKHRoaXMpKTsKICAgICAgICAg
aWYgKG1fbGF5ZXJSZW5kZXJlcikgeworICAgICAgICAgICAgdXBkYXRlTGF5ZXJSZW5kZXJlclNl
dHRpbmdzKCk7CiAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkQWN0aXZhdGVBY2NlbGVyYXRlZENv
bXBvc2l0aW5nKHRydWUpOwogICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdB
Y3RpdmUgPSB0cnVlOwogICAgICAgICAgICAgbV9jb21wb3NpdG9yQ3JlYXRpb25GYWlsZWQgPSBm
YWxzZTsKQEAgLTI0MzYsMzUgKzI0NTksMzkgQEAgdm9pZCBXZWJWaWV3SW1wbDo6ZG9Db21wb3Np
dGUoKQogICAgIGlmICghcGFnZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2xheWVyUmVu
ZGVyZXItPnNldENvbXBvc2l0ZU9mZnNjcmVlbihzZXR0aW5ncygpLT5jb21wb3NpdGVUb1RleHR1
cmVFbmFibGVkKCkpOwotCi0gICAgQ0NIZWFkc1VwRGlzcGxheSogaHVkID0gbV9sYXllclJlbmRl
cmVyLT5oZWFkc1VwRGlzcGxheSgpOwotICAgIGh1ZC0+c2V0U2hvd0ZQU0NvdW50ZXIoc2V0dGlu
Z3MoKS0+c2hvd0ZQU0NvdW50ZXIoKSk7Ci0gICAgaHVkLT5zZXRTaG93UGxhdGZvcm1MYXllclRy
ZWUoc2V0dGluZ3MoKS0+c2hvd1BsYXRmb3JtTGF5ZXJUcmVlKCkpOworICAgIG1fbGF5ZXJSZW5k
ZXJlci0+dXBkYXRlTGF5ZXJzKCk7CisgICAgbV9sYXllclJlbmRlcmVyLT5kcmF3TGF5ZXJzKCk7
Cit9CiAKLSAgICBtX2xheWVyUmVuZGVyZXItPnVwZGF0ZUFuZERyYXdMYXllcnMoKTsKK1Bhc3NS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IFdlYlZpZXdJbXBsOjpjcmVhdGVMYXllclRyZWVIb3N0
Q29udGV4dDNEKCkKK3sKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBt
X3RlbXBvcmFyeU9uc2NyZWVuR3JhcGhpY3NDb250ZXh0M0QucmVsZWFzZSgpOworICAgIGlmICgh
Y29udGV4dCkgeworICAgICAgICBjb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShn
ZXRDb21wb3NpdG9yQ29udGV4dEF0dHJpYnV0ZXMoKSwgbV9wYWdlLT5jaHJvbWUoKSwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKKyAgICAgICAgaWYgKGNv
bnRleHQpCisgICAgICAgICAgICBjb250ZXh0LT5yZXNoYXBlKHN0ZDo6bWF4KDEsIG1fc2l6ZS53
aWR0aCksIHN0ZDo6bWF4KDEsIG1fc2l6ZS5oZWlnaHQpKTsKKyAgICB9CisgICAgcmV0dXJuIGNv
bnRleHQ7CiB9CiAKIHZvaWQgV2ViVmlld0ltcGw6OnJlYWxsb2NhdGVSZW5kZXJlcigpCiB7Ci0g
ICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBuZXdDb250ZXh0ID0gbV90ZW1wb3JhcnlPbnNj
cmVlbkdyYXBoaWNzQ29udGV4dDNELmdldCgpOwotICAgIFdlYkdyYXBoaWNzQ29udGV4dDNEKiB3
ZWJDb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6ZXh0cmFjdFdlYkdyYXBoaWNz
Q29udGV4dDNEKG5ld0NvbnRleHQuZ2V0KCkpOwotICAgIGlmICghbmV3Q29udGV4dCB8fCAhd2Vi
Q29udGV4dCB8fCB3ZWJDb250ZXh0LT5pc0NvbnRleHRMb3N0KCkpCi0gICAgICAgIG5ld0NvbnRl
eHQgPSBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKAotICAgICAgICAgICAgZ2V0Q29tcG9zaXRv
ckNvbnRleHRBdHRyaWJ1dGVzKCksIG1fcGFnZS0+Y2hyb21lKCksIEdyYXBoaWNzQ29udGV4dDNE
OjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7CiAgICAgLy8gR3JhcGhpY3NDb250ZXh0M0Q6
OmNyZWF0ZSBtaWdodCBmYWlsIGFuZCByZXR1cm4gMCwgaW4gdGhhdCBjYXNlIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6Y3JlYXRlIHdpbGwgYWxzbyByZXR1cm4gMC4KLSAgICBSZWZQdHI8TGF5ZXJS
ZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpj
cmVhdGUobmV3Q29udGV4dCwgV2ViVmlld0ltcGxDb250ZW50UGFpbnRlcjo6Y3JlYXRlKHRoaXMp
KTsKKyAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyID0gTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUodGhpcywgV2ViVmlld0ltcGxDb250ZW50UGFpbnRl
cjo6Y3JlYXRlKHRoaXMpKTsKIAogICAgIC8vIFJlYXR0YWNoIHRoZSByb290IGxheWVyLiAgQ2hp
bGQgbGF5ZXJzIHdpbGwgZ2V0IHJlYXR0YWNoZWQgYXMgYSBzaWRlIGVmZmVjdCBvZiB1cGRhdGVM
YXllcnNSZWN1cnNpdmUuCiAgICAgaWYgKGxheWVyUmVuZGVyZXIpIHsKKwogICAgICAgICBtX2xh
eWVyUmVuZGVyZXItPnRyYW5zZmVyUm9vdExheWVyKGxheWVyUmVuZGVyZXIuZ2V0KCkpOwogICAg
ICAgICBtX2xheWVyUmVuZGVyZXIgPSBsYXllclJlbmRlcmVyOworICAgICAgICB1cGRhdGVMYXll
clJlbmRlcmVyU2V0dGluZ3MoKTsKKwogICAgICAgICAvLyBGSVhNRTogSW4gTWFjT1MgbmV3Q29u
dGV4dC0+cmVzaGFwZSBtZXRob2QgbmVlZHMgdG8gYmUgY2FsbGVkIHRvCiAgICAgICAgIC8vIGFs
bG9jYXRlIElPU3VyZmFjZXMuIEFsbCBjYWxscyB0byBjcmVhdGUgYSBjb250ZXh0IGZvbGxvd2Vk
IGJ5CiAgICAgICAgIC8vIHJlc2hhcGUgc2hvdWxkIHJlYWxseSBiZSBleHRyYWN0ZWQgaW50byBv
bmUgZnVuY3Rpb247IGl0IGlzIG5vdAogICAgICAgICAvLyBpbW1lZGlhdGVseSBvYnZpb3VzIHRo
YXQgR3JhcGhpY3NDb250ZXh0M0Qgb2JqZWN0IHdpbGwgbm90CiAgICAgICAgIC8vIGZ1bmN0aW9u
IHByb3Blcmx5IHVudGlsIGl0cyByZXNoYXBlIG1ldGhvZCBpcyBjYWxsZWQuCi0gICAgICAgIG5l
d0NvbnRleHQtPnJlc2hhcGUoc3RkOjptYXgoMSwgbV9zaXplLndpZHRoKSwgc3RkOjptYXgoMSwg
bV9zaXplLmhlaWdodCkpOworICAgICAgICBsYXllclJlbmRlcmVyLT5jb250ZXh0KCktPnJlc2hh
cGUoc3RkOjptYXgoMSwgbV9zaXplLndpZHRoKSwgc3RkOjptYXgoMSwgbV9zaXplLmhlaWdodCkp
OwogICAgICAgICBzZXRSb290R3JhcGhpY3NMYXllcihtX2xheWVyUmVuZGVyZXItPnJvb3RMYXll
cigpKTsKICAgICAgICAgLy8gRm9yY2VzIFZpZXdIb3N0TXNnX0RpZEFjdGl2YXRlQWNjZWxlcmF0
ZWRDb21wb3NpdGluZyB0byBiZSBzZW50IHNvCiAgICAgICAgIC8vIHRoYXQgdGhlIGJyb3dzZXIg
cHJvY2VzcyBjYW4gcmVhY3F1aXJlIHN1cmZhY2VzLgpAQCAtMjQ3NCw5ICsyNTAxLDIwIEBAIHZv
aWQgV2ViVmlld0ltcGw6OnJlYWxsb2NhdGVSZW5kZXJlcigpCiB9CiAjZW5kaWYKIAotdm9pZCBX
ZWJWaWV3SW1wbDo6dXBkYXRlTGF5ZXJSZW5kZXJlclZpZXdwb3J0KCkKK3ZvaWQgV2ViVmlld0lt
cGw6OnVwZGF0ZUxheWVyUmVuZGVyZXJTZXR0aW5ncygpCiB7CiAgICAgQVNTRVJUKG1fbGF5ZXJS
ZW5kZXJlcik7CisgICAgbV9sYXllclJlbmRlcmVyLT5zZXRDb21wb3NpdGVPZmZzY3JlZW4oc2V0
dGluZ3MoKS0+Y29tcG9zaXRlVG9UZXh0dXJlRW5hYmxlZCgpKTsKKworICAgIENDSGVhZHNVcERp
c3BsYXkqIGh1ZCA9IG1fbGF5ZXJSZW5kZXJlci0+aGVhZHNVcERpc3BsYXkoKTsKKyAgICBodWQt
PnNldFNob3dGUFNDb3VudGVyKHNldHRpbmdzKCktPnNob3dGUFNDb3VudGVyKCkpOworICAgIGh1
ZC0+c2V0U2hvd1BsYXRmb3JtTGF5ZXJUcmVlKHNldHRpbmdzKCktPnNob3dQbGF0Zm9ybUxheWVy
VHJlZSgpKTsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlTGF5ZXJSZW5kZXJlclZpZXdw
b3J0KCkKK3sKKyAgICBpZiAoIW1fbGF5ZXJSZW5kZXJlcikKKyAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKCFwYWdlKCkpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJWaWV3SW1wbC5oCmluZGV4IGYxMDIwMmY3NmRhNmNkZTMyNjU5MDliNGZlNjVmNzBhYWRi
OGJmOTMuLjc3YzUxYWQ4MjE0MzMwMjYzYWRmMTBiYmRlMzA0OTU4NGQwNDIzMjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaApAQCAtNTUsNiArNTUsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDaHJvbWl1bURhdGFPYmplY3Q7CiBjbGFzcyBEb2N1bWVu
dExvYWRlcjsKIGNsYXNzIEZyYW1lOworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiBjbGFzcyBI
aXN0b3J5SXRlbTsKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CiBjbGFzcyBLZXlib2FyZEV2ZW50OwpA
QCAtODYsMTcgKzg3LDE4IEBAIGNsYXNzIFdlYk1vdXNlV2hlZWxFdmVudDsKIGNsYXNzIFdlYlNl
dHRpbmdzSW1wbDsKIGNsYXNzIFdlYlRvdWNoRXZlbnQ7CiAKLWNsYXNzIFdlYlZpZXdJbXBsIDog
cHVibGljIFdlYlZpZXcsIHB1YmxpYyBSZWZDb3VudGVkPFdlYlZpZXdJbXBsPiB7CitjbGFzcyBX
ZWJWaWV3SW1wbCA6IHB1YmxpYyBXZWJWaWV3LCBwdWJsaWMgV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0Q2xpZW50LCBwdWJsaWMgUmVmQ291bnRlZDxXZWJWaWV3SW1wbD4gewogcHVibGljOgogICAg
IC8vIFdlYldpZGdldCBtZXRob2RzOgogICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpOwogICAgIHZp
cnR1YWwgV2ViU2l6ZSBzaXplKCkgeyByZXR1cm4gbV9zaXplOyB9CiAgICAgdmlydHVhbCB2b2lk
IHJlc2l6ZShjb25zdCBXZWJTaXplJik7Ci0gICAgdmlydHVhbCB2b2lkIGFuaW1hdGUoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWUpOwogICAgIHZpcnR1
YWwgdm9pZCBsYXlvdXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoV2ViQ2FudmFzKiwgY29u
c3QgV2ViUmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCB0aGVtZUNoYW5nZWQoKTsKLSAgICB2aXJ0
dWFsIHZvaWQgY29tcG9zaXRlKGJvb2wgZmluaXNoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcG9z
aXRlKCk7CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRlKCk7CiAgICAgdmlydHVh
bCBib29sIGhhbmRsZUlucHV0RXZlbnQoY29uc3QgV2ViSW5wdXRFdmVudCYpOwogICAgIHZpcnR1
YWwgdm9pZCBtb3VzZUNhcHR1cmVMb3N0KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKGJv
b2wgZW5hYmxlKTsKQEAgLTE5Niw2ICsxOTgsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5hY3RpdmVGb3JlZ3JvdW5kQ29sb3IpOwog
ICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtQ3VzdG9tQ29udGV4dE1lbnVBY3Rpb24odW5zaWduZWQg
YWN0aW9uKTsKIAorICAgIC8vIENDTGF5ZXJUcmVlSG9zdENsaWVudAorICAgIHZpcnR1YWwgdm9p
ZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CisgICAgUGFzc1JlZlB0
cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQz
RCgpOworCisKICAgICAvLyBXZWJWaWV3SW1wbAogCiAgICAgdm9pZCBzZXRJZ25vcmVJbnB1dEV2
ZW50cyhib29sIG5ld1ZhbHVlKTsKQEAgLTMzOSw2ICszNDYsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKTsKICAgICB2b2lkIHNjcm9sbFJvb3RMYXllclJl
Y3QoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIGNsaXBSZWN0KTsKICAgICB2b2lkIGludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2b2lkIGRvVXBkYXRlQW5kQ29tcG9zaXRlKCk7CiAj
ZW5kaWYKIAogICAgIC8vIFJldHVybnMgdGhlIG9uc2NyZWVuIDNEIGNvbnRleHQgdXNlZCBieSB0
aGUgY29tcG9zaXRvci4gVGhpcyBpcwpAQCAtNDAyLDExICs0MTAsMTMgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViUG9p
bnQmIHNjcmVlblBvaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBEcmFnQWN0aW9uKTsKIAorCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQogICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGJvb2wpOwogICAg
IHZvaWQgZG9Db21wb3NpdGUoKTsKICAgICB2b2lkIGRvUGl4ZWxSZWFkYmFja1RvQ2FudmFzKFdl
YkNhbnZhcyosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKICAgICB2b2lkIHJlYWxsb2NhdGVS
ZW5kZXJlcigpOworICAgIHZvaWQgdXBkYXRlTGF5ZXJSZW5kZXJlclNldHRpbmdzKCk7CiAgICAg
dm9pZCB1cGRhdGVMYXllclJlbmRlcmVyVmlld3BvcnQoKTsKICNlbmRpZgogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi41NjZjYjNiNGE0NDM0MjlhZjc1NWYyMDU1OWJiNzBmM2U3M2EwMzVjCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RU
ZXN0LmNwcApAQCAtMCwwICsxLDUzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiY2MvQ0NM
YXllclRyZWVIb3N0LmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1
ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ01haW5UaHJlYWRU
YXNrLmgiCisjaW5jbHVkZSAiY2MvQ0NUaHJlYWRUYXNrLmgiCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rl
c3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oPgorI2luY2x1
ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBu
YW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgeworCitjbGFzcyBNb2NrTGF5ZXJUcmVlSG9zdDsK
K2NsYXNzIE1vY2tMYXllclRyZWVIb3N0Q2xpZW50OworY2xhc3MgTW9ja0xheWVyVHJlZUhvc3RJ
bXBsOworCisvLyBUaGUgQ0NMYXllclRyZWVIb3N0VGVzdCBydW5zIHdpdGggdGhlIG1haW4gbG9v
cCBydW5uaW5nLiBJdCBpbnN0YW50aWF0ZXMgYSBzaW5nbGUgTW9ja0xheWVyVHJlZUhvc3QgYW5k
IGFzc29jaWF0ZWQKKy8vIE1vY2tMYXllclRyZWVIb3N0SW1wbC9Nb2NrTGF5ZXJUcmVlSG9zdENs
aWVudC4KKy8vCisvLyBiZWdpblRlc3QoKSBpcyBjYWxsZWQgb25jZSB0aGUgbWFpbiBtZXNzYWdl
IGxvb3AgaXMgcnVubmluZyBhbmQgdGhlIGxheWVyIHRyZWUgaG9zdCBpcyBpbml0aWFsaXplZC4K
Ky8vCisvLyBLZXkgc3RhZ2VzIG9mIHRoZSBkcmF3aW5nIGxvb3AsIGUuZy4gZHJhd2luZyBvciBj
b21taXRpbmcsIHJlZGlyZWN0IHRvIENDTGF5ZXJUcmVlSG9zdFRlc3QgbWV0aG9kcyBvZiBzaW1p
bGFyIG5hbWVzLgorLy8gVG8gdHJhY2sgdGhlIGNvbW1pdCBwcm9jZXNzLCBvdmVycmlkZSB0aGVz
ZSBmdW5jdGlvbnMuCisvLworLy8gVGhlIHRlc3QgY29udGludWVzIHVudGlsIHNvbWVvbmUgY2Fs
bHMgZW5kVGVzdC4gZW5kVGVzdCBjYW4gYmUgY2FsbGVkIG9uIGFueSB0aHJlYWQsIGJ1dCBiZSBh
d2FyZSB0aGF0CisvLyBlbmRpbmcgdGhlIHRlc3QgaXMgYW4gYXN5bmNocm9ub3VzIHByb2Nlc3Mu
CitjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworcHVi
bGljOgorICAgIENDTGF5ZXJUcmVlSG9zdFRlc3QoKQorICAgICAgICA6IG1fYmVnaW5uaW5nKGZh
bHNlKQorICAgICAgICAsIG1fZW5kV2hlbkJlZ2luUmV0dXJucyhmYWxzZSkKKyAgICAgICAgLCBt
X3J1bm5pbmcoZmFsc2UpCisgICAgICAgICwgbV90aW1lZE91dChmYWxzZSkgeyB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGJlZ2luVGVz
dCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUFuZExheW91dChNb2NrTGF5ZXJUcmVl
SG9zdENsaWVudCogbGF5ZXJUcmVlSG9zdCwgZG91YmxlIGZyYW1lQmVnaW5UaW1lKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21taXRPbkNDVGhyZWFkKE1vY2tMYXllclRyZWVIb3N0SW1w
bCogbGF5ZXJUcmVlSG9zdEltcGwpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdE9u
TWFpblRocmVhZChNb2NrTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCkgeyB9CisgICAgdmly
dHVhbCB2b2lkIGNvbW1pdE9uQ0NUaHJlYWQoTW9ja0xheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhv
c3QsIE1vY2tMYXllclRyZWVIb3N0SW1wbCogbGF5ZXJUcmVlSG9zdEltcGwpIHsgfQorICAgIHZp
cnR1YWwgdm9pZCBjb21taXRDb21wbGV0ZU9uQ0NUaHJlYWQoTW9ja0xheWVyVHJlZUhvc3RJbXBs
KiBsYXllclRyZWVIb3N0SW1wbCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGNvbW1pdENvbXBsZXRl
T25NYWluVGhyZWFkKE1vY2tMYXllclRyZWVIb3N0KiBsYXllclRyZWVIb3N0KSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhyZWFkKE1vY2tMYXllclRyZWVI
b3N0SW1wbCogbGF5ZXJUcmVlSG9zdEltcGwpIHsgfQorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVM
YXllcnMoTW9ja0xheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QpIHsgfQorCisgICAgdm9pZCBl
bmRUZXN0KCk7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGRvQmVnaW5UZXN0KCk7CisKKyAgICBz
dGF0aWMgdm9pZCBvbkJlZ2luVGVzdCh2b2lkKiBzZWxmKQorICAgIHsKKyAgICAgICAgc3RhdGlj
X2Nhc3Q8Q0NMYXllclRyZWVIb3N0VGVzdCo+KHNlbGYpLT5kb0JlZ2luVGVzdCgpOworICAgIH0K
KworICAgIHZvaWQgZG9FbmRUZXN0KCkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQg
b25FbmRUZXN0KHZvaWQqIHNlbGYpCisgICAgeworICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworICAgICAgICBDQ0xheWVyVHJlZUhvc3RUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8Q0NM
YXllclRyZWVIb3N0VGVzdCo+KHNlbGYpOworICAgICAgICB0ZXN0LT5tX2xheWVyVHJlZUhvc3Qu
Y2xlYXIoKTsKKyAgICAgICAgdGVzdC0+bV9jbGllbnQuY2xlYXIoKTsKKyAgICAgICAgd2Via2l0
X3N1cHBvcnQ6OlF1aXRNZXNzYWdlTG9vcCgpOworICAgIH0KKworICAgIHZvaWQgcnVuVGVzdCgp
CisgICAgeworICAgICAgICB3ZWJraXRfc3VwcG9ydDo6UG9zdERlbGF5ZWRUYXNrKENDTGF5ZXJU
cmVlSG9zdFRlc3Q6Om9uQmVnaW5UZXN0LCBzdGF0aWNfY2FzdDx2b2lkKj4odGhpcyksIDApOwor
ICAgICAgICB3ZWJraXRfc3VwcG9ydDo6UG9zdERlbGF5ZWRUYXNrKENDTGF5ZXJUcmVlSG9zdFRl
c3Q6OnRlc3RUaW1lb3V0LCBzdGF0aWNfY2FzdDx2b2lkKj4odGhpcyksIDUwMDApOworICAgICAg
ICB3ZWJraXRfc3VwcG9ydDo6UnVuTWVzc2FnZUxvb3AoKTsKKyAgICAgICAgbV9ydW5uaW5nID0g
ZmFsc2U7CisgICAgICAgIGJvb2wgdGltZWRPdXQgPSBtX3RpbWVkT3V0OyAvLyBTYXZlIHdoZXRo
ZXIgd2UncmUgdGltZWQgb3V0IGluIGNhc2UgUnVuQWxsUGVuZGluZ01lc3NhZ2VzIGhhcyB0aGUg
dGltZW91dC4KKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlJ1bkFsbFBlbmRpbmdNZXNzYWdlcygp
OworICAgICAgICBpZiAodGltZWRPdXQpIHsKKyAgICAgICAgICAgIHByaW50ZigiVGVzdCB0aW1l
ZCBvdXQiKTsKKyAgICAgICAgICAgIEZBSUwoKSA8PCAiVGVzdCB0aW1lZCBvdXQiOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGFmdGVyVGVzdCgpOworICAgIH0KKwor
ICAgIHN0YXRpYyB2b2lkIHRlc3RUaW1lb3V0KHZvaWQqIHNlbGYpCisgICAgeworICAgICAgICBD
Q0xheWVyVHJlZUhvc3RUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8Q0NMYXllclRyZWVIb3N0VGVz
dCo+KHNlbGYpOworICAgICAgICBpZiAoIXRlc3QtPm1fcnVubmluZykKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgdGVzdC0+bV90aW1lZE91dCA9IHRydWU7CisgICAgICAgIHRlc3QtPmVu
ZFRlc3QoKTsKKyAgICB9CisKKyAgICBNdXRleCBtX3RyYWNlc0xvY2s7CisgICAgVmVjdG9yPHN0
ZDo6c3RyaW5nPiBtX3RyYWNlczsKKworICAgIE93blB0cjxNb2NrTGF5ZXJUcmVlSG9zdENsaWVu
dD4gbV9jbGllbnQ7CisgICAgUmVmUHRyPE1vY2tMYXllclRyZWVIb3N0PiBtX2xheWVyVHJlZUhv
c3Q7CisKK3ByaXZhdGU6CisgICAgYm9vbCBtX2JlZ2lubmluZzsKKyAgICBib29sIG1fZW5kV2hl
bkJlZ2luUmV0dXJuczsKKyAgICBib29sIG1fcnVubmluZzsKKyAgICBib29sIG1fdGltZWRPdXQ7
Cit9OworCitjbGFzcyBNb2NrTGF5ZXJUcmVlSG9zdENsaWVudCA6IHB1YmxpYyBDQ0xheWVyVHJl
ZUhvc3RDbGllbnQgeworcHVibGljOgorICAgIE1vY2tMYXllclRyZWVIb3N0Q2xpZW50KENDTGF5
ZXJUcmVlSG9zdFRlc3QqIHRlc3QpIDogbV90ZXN0KHRlc3QpIHsgfQorCisgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNE
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZjxHcmFwaGljc0NvbnRleHQzRD4oMCk7
CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1l
QmVnaW5UaW1lKQorICAgIHsKKyAgICAgICAgbV90ZXN0LT5hbmltYXRlQW5kTGF5b3V0KHRoaXMs
IGZyYW1lQmVnaW5UaW1lKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ0NMYXllclRyZWVIb3N0
VGVzdCogbV90ZXN0OworfTsKKworY2xhc3MgTW9ja0xheWVyVHJlZUhvc3RDb21taXR0ZXIgOiBw
dWJsaWMgQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c093blB0cjxNb2NrTGF5ZXJUcmVlSG9zdENvbW1pdHRlcj4gY3JlYXRlKENDTGF5ZXJUcmVlSG9z
dFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE1vY2tMYXll
clRyZWVIb3N0Q29tbWl0dGVyKHRlc3QpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY29t
bWl0KENDTGF5ZXJUcmVlSG9zdCogaG9zdCwgQ0NMYXllclRyZWVIb3N0SW1wbCogaG9zdEltcGwp
CisgICAgeworICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI6OmNvbW1pdChob3N0LCBo
b3N0SW1wbCk7CisgICAgICAgIG1fdGVzdC0+Y29tbWl0T25DQ1RocmVhZChyZWludGVycHJldF9j
YXN0PE1vY2tMYXllclRyZWVIb3N0Kj4oaG9zdCksIHJlaW50ZXJwcmV0X2Nhc3Q8TW9ja0xheWVy
VHJlZUhvc3RJbXBsKj4oaG9zdEltcGwpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTW9ja0xh
eWVyVHJlZUhvc3RDb21taXR0ZXIoQ0NMYXllclRyZWVIb3N0VGVzdCogdGVzdCkgOiBtX3Rlc3Qo
dGVzdCkgeyB9CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdCogbV90ZXN0OworfTsKKworY2xhc3Mg
TW9ja0xheWVyVHJlZUhvc3RJbXBsIDogcHVibGljIENDTGF5ZXJUcmVlSG9zdEltcGwgeworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPE1vY2tMYXllclRyZWVIb3N0SW1wbD4gY3JlYXRl
KENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqIGNsaWVudCwgQ0NMYXllclRyZWVIb3N0VGVzdCog
dGVzdCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgTW9ja0xheWVyVHJlZUhv
c3RJbXBsKGNsaWVudCwgdGVzdCkpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNv
bW1pdCgpCisgICAgeworICAgICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsOjpiZWdpbkNvbW1pdCgp
OworICAgICAgICBtX3Rlc3QtPmJlZ2luQ29tbWl0T25DQ1RocmVhZCh0aGlzKTsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q29tcGxldGUoKQorICAgIHsKKyAgICAgICAgQ0NMYXll
clRyZWVIb3N0SW1wbDo6Y29tbWl0Q29tcGxldGUoKTsKKyAgICAgICAgbV90ZXN0LT5jb21taXRD
b21wbGV0ZU9uQ0NUaHJlYWQodGhpcyk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRyYXdM
YXllcnNBbmRQcmVzZW50KCkKKyAgICB7CisgICAgICAgIG1fdGVzdC0+ZHJhd0xheWVyc0FuZFBy
ZXNlbnRPbkNDVGhyZWFkKHRoaXMpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNb2NrTGF5ZXJU
cmVlSG9zdEltcGwoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogY2xpZW50LCBDQ0xheWVyVHJl
ZUhvc3RUZXN0KiB0ZXN0KQorICAgICAgICAgICAgOiBDQ0xheWVyVHJlZUhvc3RJbXBsKGNsaWVu
dCkKKyAgICAgICAgICAgICwgbV90ZXN0KHRlc3QpCisgICAgeworICAgIH0KKworICAgIENDTGF5
ZXJUcmVlSG9zdFRlc3QqIG1fdGVzdDsKK307CisKK2NsYXNzIE1vY2tMYXllclRyZWVIb3N0SW1w
bFByb3h5IDogcHVibGljIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NPd25QdHI8TW9ja0xheWVyVHJlZUhvc3RJbXBsUHJveHk+IGNyZWF0ZShDQ0xh
eWVyVHJlZUhvc3QqIGhvc3QsIENDTGF5ZXJUcmVlSG9zdFRlc3QqIHRlc3QpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE1vY2tMYXllclRyZWVIb3N0SW1wbFByb3h5KGhvc3Qs
IHRlc3QpKTsKKyAgICB9CisKKyAgICBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IGNy
ZWF0ZUxheWVyVHJlZUhvc3RJbXBsKCkKKyAgICB7CisgICAgICAgIHJldHVybiBNb2NrTGF5ZXJU
cmVlSG9zdEltcGw6OmNyZWF0ZSh0aGlzLCBtX3Rlc3QpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBNb2NrTGF5ZXJUcmVlSG9zdEltcGxQcm94eShDQ0xheWVyVHJlZUhvc3QqIGhvc3QsIENDTGF5
ZXJUcmVlSG9zdFRlc3QqIHRlc3QpCisgICAgICAgIDogQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5
KGhvc3QpCisgICAgICAgICwgbV90ZXN0KHRlc3QpIHsgfQorCisgICAgQ0NMYXllclRyZWVIb3N0
VGVzdCogbV90ZXN0OworfTsKKworY2xhc3MgTW9ja0xheWVyVHJlZUhvc3QgOiBwdWJsaWMgQ0NM
YXllclRyZWVIb3N0IHsKK3B1YmxpYzoKKyAgICBNb2NrTGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJl
ZUhvc3RDbGllbnQqIGNsaWVudCwgQ0NMYXllclRyZWVIb3N0VGVzdCogdGVzdCkKKyAgICAgICAg
OiBDQ0xheWVyVHJlZUhvc3QoY2xpZW50KQorICAgICAgICAsIG1fdGVzdCh0ZXN0KSB7IH0KKwor
ICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk+IGNyZWF0ZUxh
eWVyVHJlZUhvc3RJbXBsUHJveHkoKQorICAgIHsKKyAgICAgICAgT3duUHRyPENDTGF5ZXJUcmVl
SG9zdEltcGxQcm94eT4gcHJveHkgPSBNb2NrTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6Y3JlYXRl
KHRoaXMsIG1fdGVzdCk7CisgICAgICAgIHByb3h5LT5zdGFydCgpOworICAgICAgICByZXR1cm4g
cHJveHkucmVsZWFzZSgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVMYXllcnMo
KQorICAgIHsKKyAgICAgICAgbV90ZXN0LT51cGRhdGVMYXllcnModGhpcyk7CisgICAgfQorCisg
ICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcj4gY3JlYXRlTGF5
ZXJUcmVlSG9zdENvbW1pdHRlcigpCisgICAgeworICAgICAgICByZXR1cm4gTW9ja0xheWVyVHJl
ZUhvc3RDb21taXR0ZXI6OmNyZWF0ZShtX3Rlc3QpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9p
ZCBiZWdpbkNvbW1pdCgpCisgICAgeworICAgICAgICBDQ0xheWVyVHJlZUhvc3Q6OmJlZ2luQ29t
bWl0KCk7CisgICAgICAgIG1fdGVzdC0+YmVnaW5Db21taXRPbk1haW5UaHJlYWQodGhpcyk7Cisg
ICAgfQorCisgICAgdmlydHVhbCB2b2lkIGNvbW1pdENvbXBsZXRlKCkKKyAgICB7CisgICAgICAg
IG1fdGVzdC0+Y29tbWl0Q29tcGxldGVPbk1haW5UaHJlYWQodGhpcyk7CisgICAgICAgIENDTGF5
ZXJUcmVlSG9zdDo6Y29tbWl0Q29tcGxldGUoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ0NM
YXllclRyZWVIb3N0VGVzdCogbV90ZXN0OworfTsKKwordm9pZCBDQ0xheWVyVHJlZUhvc3RUZXN0
Ojpkb0JlZ2luVGVzdCgpCit7CisgICAgQVNTRVJUKCFtX3J1bm5pbmcpOworICAgIG1fcnVubmlu
ZyA9IHRydWU7CisgICAgbV9jbGllbnQgPSBhZG9wdFB0cihuZXcgTW9ja0xheWVyVHJlZUhvc3RD
bGllbnQodGhpcykpOworICAgIG1fbGF5ZXJUcmVlSG9zdCA9IGFkb3B0UmVmKG5ldyBNb2NrTGF5
ZXJUcmVlSG9zdChtX2NsaWVudC5nZXQoKSwgdGhpcykpOworICAgIG1fbGF5ZXJUcmVlSG9zdC0+
aW5pdCgpOworICAgIG1fYmVnaW5uaW5nID0gdHJ1ZTsKKyAgICBiZWdpblRlc3QoKTsKKyAgICBt
X2JlZ2lubmluZyA9IGZhbHNlOworICAgIGlmIChtX2VuZFdoZW5CZWdpblJldHVybnMpCisgICAg
ICAgIG9uRW5kVGVzdChzdGF0aWNfY2FzdDx2b2lkKj4odGhpcykpOworfQorCit2b2lkIENDTGF5
ZXJUcmVlSG9zdFRlc3Q6OmVuZFRlc3QoKQoreworICAgIC8vIElmIHdlIGFyZSBjYWxsZWQgZnJv
bSB0aGUgQ0NUaHJlYWQsIHJlLWNhbGwgZW5kVGVzdCBvbiB0aGUgbWFpbiB0aHJlYWQuCisgICAg
aWYgKCFpc01haW5UaHJlYWQoKSkKKyAgICAgICAgQ0NNYWluVGhyZWFkOjpwb3N0VGFzayhjcmVh
dGVNYWluVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0VGVzdDo6ZW5kVGVzdCkpOwor
ICAgIGVsc2UgeworICAgICAgICAvLyBGb3IgdGhlIGNhc2Ugd2hlcmUgd2UgZW5kVGVzdCBkdXJp
bmcgYmVnaW5UZXN0KCksIHNldCBhIGZsYWcgdG8gaW5kaWNhdGUgdGhhdAorICAgICAgICAvLyB0
aGUgdGVzdCBzaG91bGQgZW5kIHRoZSBzZWNvbmQgYmVnaW5UZXN0IHJlZ2FpbnMgY29udHJvbC4K
KyAgICAgICAgaWYgKG1fYmVnaW5uaW5nKQorICAgICAgICAgICAgbV9lbmRXaGVuQmVnaW5SZXR1
cm5zID0gdHJ1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb25FbmRUZXN0KHN0YXRpY19j
YXN0PHZvaWQqPih0aGlzKSk7CisgICAgfQorfQorCisvLyBTaG9ydGxpdmVkIGxheWVyVHJlZUhv
c3RzIHNob3VsZG4ndCBkaWUuCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDEg
OiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdCB7CitwdWJsaWM6CisgICAgQ0NMYXllclRyZWVI
b3N0VGVzdFNob3J0bGl2ZWQxKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkK
KyAgICB7CisgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0
ZXJUZXN0KCkKKyAgICB7CisgICAgfQorfTsKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0U2hv
cnRsaXZlZDEsIHJ1bikKK3sKKyAgICBydW5UZXN0KCk7Cit9CisKKy8vIFNob3J0bGl2ZWQgbGF5
ZXJUcmVlSG9zdHMgc2hvdWxkbid0IGRpZSB3aXRoIGEgY29tbWl0IGluIGZsaWdodC4KK2NsYXNz
IENDTGF5ZXJUcmVlSG9zdFRlc3RTaG9ydGxpdmVkMiA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RU
ZXN0IHsKK3B1YmxpYzoKKyAgICBDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDIoKSB7IH0K
KworICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKQorICAgIHsKKyAgICAgICAgbV9sYXllclRy
ZWVIb3N0LT5zZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOworICAgICAgICBlbmRUZXN0KCk7Cisg
ICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFmdGVyVGVzdCgpCisgICAgeworICAgIH0KK307CitU
RVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQyLCBydW4pCit7CisgICAgcnVuVGVz
dCgpOworfQorCisvLyBTaG9ydGxpdmVkIGxheWVyVHJlZUhvc3RzIHNob3VsZG4ndCBkaWUgd2l0
aCBhIHJlZHJhdyBpbiBmbGlnaHQuCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZl
ZDMgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdCB7CitwdWJsaWM6CisgICAgQ0NMYXllclRy
ZWVIb3N0VGVzdFNob3J0bGl2ZWQzKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0
KCkKKyAgICB7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0TmVlZHNSZWRyYXcoKTsKKyAg
ICAgICAgZW5kVGVzdCgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhZnRlclRlc3QoKQor
ICAgIHsKKyAgICB9Cit9OworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RTaG9ydGxpdmVkMywg
cnVuKQoreworICAgIHJ1blRlc3QoKTsKK30KKworLy8gQ29uc3RhbnRseSByZWRyYXdpbmcgbGF5
ZXJUcmVlSG9zdHMgc2hvdWxkbid0IGRpZSB3aGVuIHRoZXkgY29tbWl0CitjbGFzcyBDQ0xheWVy
VHJlZUhvc3RUZXN0Q29tbWl0aW5nV2l0aENvbnRpbnVvdXNSZWRyYXcgOiBwdWJsaWMgQ0NMYXll
clRyZWVIb3N0VGVzdCB7CitwdWJsaWM6CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdENvbW1pdGlu
Z1dpdGhDb250aW51b3VzUmVkcmF3KCkKKyAgICAgICAgOiBtX251bUNvbXBsZXRlQ29tbWl0cygw
KQorICAgICAgICAsIG1fbnVtRHJhd3MoMCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIGJlZ2luVGVzdCgpCisgICAgeworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldE5lZWRz
Q29tbWl0QW5kUmVkcmF3KCk7CisgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgY29tbWl0Q29tcGxldGVPbkNDVGhyZWFkKE1vY2tMYXllclRyZWVIb3N0SW1wbCog
bGF5ZXJUcmVlSG9zdEltcGwpCisgICAgeworICAgICAgICBtX251bUNvbXBsZXRlQ29tbWl0cysr
OworICAgICAgICBpZiAobV9udW1Db21wbGV0ZUNvbW1pdHMgPT0gMikKKyAgICAgICAgICAgIGVu
ZFRlc3QoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVyc0FuZFByZXNlbnRP
bkNDVGhyZWFkKE1vY2tMYXllclRyZWVIb3N0SW1wbCogbGF5ZXJUcmVlSG9zdEltcGwpCisgICAg
eworICAgICAgICBpZiAobV9udW1EcmF3cyA9PSAxKQorICAgICAgICAgICAgbGF5ZXJUcmVlSG9z
dEltcGwtPnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgICAgIG1fbnVtRHJhd3MrKzsK
KyAgICAgICAgbGF5ZXJUcmVlSG9zdEltcGwtPnNldE5lZWRzUmVkcmF3KCk7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIGFmdGVyVGVzdCgpCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBpbnQgbV9udW1Db21wbGV0ZUNvbW1pdHM7CisgICAgaW50IG1fbnVtRHJhd3M7Cit9OworVEVT
VF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RDb21taXRpbmdXaXRoQ29udGludW91c1JlZHJhdywgcnVu
KQoreworICAgIHJ1blRlc3QoKTsKK30KKworLy8gVHdvIHNldE5lZWRzQ29tbWl0cyBpbiBhIHJv
dyBzaG91bGQgbGVhZCB0byBhdCBsZWFzdCAxIGNvbW1pdCBhbmQgYXQgbGVhc3QgMQorLy8gZHJh
dyB3aXRoIGZyYW1lIDAuCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQx
IDogcHVibGljIENDTGF5ZXJUcmVlSG9zdFRlc3QgeworcHVibGljOgorICAgIENDTGF5ZXJUcmVl
SG9zdFRlc3RTZXROZWVkc0NvbW1pdDEoKQorICAgICAgICA6IG1fbnVtQ29tbWl0cygwKQorICAg
ICAgICAsIG1fbnVtRHJhd3MoMCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGJl
Z2luVGVzdCgpCisgICAgeworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldE5lZWRzQ29tbWl0
QW5kUmVkcmF3KCk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0TmVlZHNDb21taXRBbmRS
ZWRyYXcoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVyc0FuZFByZXNlbnRP
bkNDVGhyZWFkKE1vY2tMYXllclRyZWVIb3N0SW1wbCogbGF5ZXJUcmVlSG9zdEltcGwpCisgICAg
eworICAgICAgICBtX251bURyYXdzKys7CisgICAgICAgIGlmICghbGF5ZXJUcmVlSG9zdEltcGwt
PnNvdXJjZUZyYW1lTnVtYmVyKCkpCisgICAgICAgICAgICBlbmRUZXN0KCk7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIGNvbW1pdE9uQ0NUaHJlYWQoTW9ja0xheWVyVHJlZUhvc3QqIGxheWVy
VHJlZUhvc3QsIE1vY2tMYXllclRyZWVIb3N0SW1wbCogaW1wbCkKKyAgICB7CisgICAgICAgIG1f
bnVtQ29tbWl0cysrOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhZnRlclRlc3QoKQorICAg
IHsKKyAgICAgICAgRVhQRUNUX0dFKDEsIG1fbnVtQ29tbWl0cyk7CisgICAgICAgIEVYUEVDVF9H
RSgxLCBtX251bURyYXdzKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgaW50IG1fbnVtQ29tbWl0
czsKKyAgICBpbnQgbV9udW1EcmF3czsKK307CitURVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdFNl
dE5lZWRzQ29tbWl0MSwgcnVuKQoreworICAgIHJ1blRlc3QoKTsKK30KKworLy8gQSBzZXROZWVk
c0NvbW1pdCBzaG91bGQgbGVhZCB0byAxIGNvbW1pdC4gSXNzdWluZyBhIHNlY29uZCBjb21taXQg
YWZ0ZXIgdGhhdAorLy8gZmlyc3QgY29tbWl0dGVkIGZyYW1lIGRyYXdzIHNob3VsZCBsZWFkIHRv
IGFub3RoZXIgY29tbWl0LgorY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzQ29tbWl0
MiA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0IHsKK3B1YmxpYzoKKyAgICBDQ0xheWVyVHJl
ZUhvc3RUZXN0U2V0TmVlZHNDb21taXQyKCkKKyAgICAgICAgOiBtX251bUNvbW1pdHMoMCkKKyAg
ICAgICAgLCBtX251bURyYXdzKDApCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBi
ZWdpblRlc3QoKQorICAgIHsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXROZWVkc0NvbW1p
dEFuZFJlZHJhdygpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGF5ZXJzQW5kUHJl
c2VudE9uQ0NUaHJlYWQoTW9ja0xheWVyVHJlZUhvc3RJbXBsKiBsYXllclRyZWVIb3N0SW1wbCkK
KyAgICB7CisgICAgICAgIGlmICghbGF5ZXJUcmVlSG9zdEltcGwtPnNvdXJjZUZyYW1lTnVtYmVy
KCkpCisgICAgICAgICAgICBsYXllclRyZWVIb3N0SW1wbC0+c2V0TmVlZHNDb21taXRBbmRSZWRy
YXcoKTsKKyAgICAgICAgZWxzZSBpZiAobGF5ZXJUcmVlSG9zdEltcGwtPnNvdXJjZUZyYW1lTnVt
YmVyKCkgPT0gMSkKKyAgICAgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgY29tbWl0T25DQ1RocmVhZChNb2NrTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCwg
TW9ja0xheWVyVHJlZUhvc3RJbXBsKiBpbXBsKQorICAgIHsKKyAgICAgICAgbV9udW1Db21taXRz
Kys7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFmdGVyVGVzdCgpCisgICAgeworICAgICAg
ICBFWFBFQ1RfRVEoMiwgbV9udW1Db21taXRzKTsKKyAgICAgICAgRVhQRUNUX0dFKDIsIG1fbnVt
RHJhd3MpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBpbnQgbV9udW1Db21taXRzOworICAgIGlu
dCBtX251bURyYXdzOworfTsKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNDb21t
aXQyLCBydW4pCit7CisgICAgcnVuVGVzdCgpOworfQorCisvLyAxIHNldE5lZWRzUmVkcmF3IGFm
dGVyIHRoZSBmaXJzdCBjb21taXQgaGFzIGNvbXBsZXRlZCBzaG91bGQgbGVhZCB0byAxCisvLyBh
ZGRpdGlvbmFsIGRyYXcuCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNSZWRyYXcg
OiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdCB7CitwdWJsaWM6CisgICAgQ0NMYXllclRyZWVI
b3N0VGVzdFNldE5lZWRzUmVkcmF3KCkKKyAgICAgICAgOiBtX251bUNvbW1pdHMoMCkKKyAgICAg
ICAgLCBtX251bURyYXdzKDApCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdp
blRlc3QoKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVyc0FuZFBy
ZXNlbnRPbkNDVGhyZWFkKE1vY2tMYXllclRyZWVIb3N0SW1wbCogaW1wbCkKKyAgICB7CisgICAg
ICAgIEVYUEVDVF9FUSgwLCBpbXBsLT5zb3VyY2VGcmFtZU51bWJlcigpKTsKKyAgICAgICAgaWYg
KCFtX251bURyYXdzKQorICAgICAgICAgICAgaW1wbC0+c2V0TmVlZHNSZWRyYXcoKTsgLy8gcmVk
cmF3IGFnYWluIHRvIHZlcmlmeSB0aGF0IHRoZSBzZWNvbmQgcmVkcmF3IGRvZXNudCBjb21taXQu
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVuZFRlc3QoKTsKKyAgICAgICAgbV9udW1EcmF3
cysrOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBjb21taXRPbkNDVGhyZWFkKE1vY2tMYXll
clRyZWVIb3N0KiBsYXllclRyZWVIb3N0LCBNb2NrTGF5ZXJUcmVlSG9zdEltcGwqIGltcGwpCisg
ICAgeworICAgICAgICBtX251bUNvbW1pdHMrKzsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
YWZ0ZXJUZXN0KCkKKyAgICB7CisgICAgICAgIEVYUEVDVF9HRSgyLCBtX251bURyYXdzKTsKKyAg
ICAgICAgRVhQRUNUX0VRKDEsIG1fbnVtQ29tbWl0cyk7CisgICAgfQorCitwcml2YXRlOgorICAg
IGludCBtX251bUNvbW1pdHM7CisgICAgaW50IG1fbnVtRHJhd3M7Cit9OworVEVTVF9GKENDTGF5
ZXJUcmVlSG9zdFRlc3RTZXROZWVkc1JlZHJhdywgcnVuKQoreworICAgIHJ1blRlc3QoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmIC8vIFVTRShUSFJFQURFRF9DT01QT1NJVElORykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaHJlYWRUZXN0LmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaHJlYWRUZXN0LmNwcAppbmRleCAw
NGZiYTQ2NTMzZGI3NWRkNzNmNjhhYjdiN2IyZDYwMWU3Y2I0MDY3Li5mYWIzNTRlYzAwYzk3MzNj
YzI4NWExMmI5MDBjY2YwZjNlZTJhMzFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDVGhyZWFkVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ1RocmVhZFRlc3QuY3BwCkBAIC01MSw2ICs1MSw3IEBAIHB1YmxpYzoKIFRFU1QoQ0NU
aHJlYWRUZXN0LCBwaW5nUG9uZ1VzaW5nQ29uZGl0aW9uKQogewogICAgIE93blB0cjxDQ1RocmVh
ZD4gdGhyZWFkID0gQ0NUaHJlYWQ6OmNyZWF0ZSgpOworCiAgICAgUGluZ1BvbmdVc2luZ0NvbmRp
dGlvbiB0YXJnZXQ7CiAgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKICAgICB0aHJl
YWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzaygmdGFyZ2V0LCAmUGluZ1BvbmdVc2luZ0Nv
bmRpdGlvbjo6cGluZywgJmNvbXBsZXRpb24pKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvUG9wdXBNZW51VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL1BvcHVwTWVudVRlc3QuY3BwCmluZGV4IDVhMTg3MDhkNzIxNmYyMzFjOGZlZGUxNjZi
MjM1OTBjOWI5ZGM5NjEuLjc5NWFjYjcwZGU1ZDM1Nzc0ZWQzNGU2NjZmNWU2NjhkNjE5OTM4MWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUG9wdXBNZW51VGVzdC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Qb3B1cE1lbnVUZXN0LmNwcApA
QCAtMTI2LDYgKzEyNiw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSB7IH0K
ICAgICB2aXJ0dWFsIFdlYlNpemUgc2l6ZSgpIHsgcmV0dXJuIFdlYlNpemUoMTAwLCAxMDApOyB9
CiAgICAgdmlydHVhbCB2b2lkIHJlc2l6ZShjb25zdCBXZWJTaXplJikgeyB9CisgICAgdmlydHVh
bCB2b2lkIGFuaW1hdGUoZG91YmxlIGZyYW1lQmVnaW5UaW1lKSB7IH0KICAgICB2aXJ0dWFsIHZv
aWQgbGF5b3V0KCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFdlYkNhbnZhcyosIGNvbnN0
IFdlYlJlY3QmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgdGhlbWVDaGFuZ2VkKCkgeyB9CmRpZmYg
LS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAgYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAKaW5kZXggYWU0YTFi
MWNjOWU4ZmI5Nzg5NjZkMTZmZmVkNDJmNTlmYmFjNmNmYi4uN2M5NjFkMDQ1ZWJmYTFmMTcyOTZj
MTA1MGE1YTk2NDY0NzIzZGY1MyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vV2ViVmlld0hvc3QuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1dlYlZpZXdIb3N0LmNwcApAQCAtMTQ4Miw3ICsxNDgyLDcgQEAgdm9pZCBXZWJWaWV3SG9zdDo6
cGFpbnRSZWN0KGNvbnN0IFdlYlJlY3QmIHJlY3QpCiB2b2lkIFdlYlZpZXdIb3N0OjpwYWludElu
dmFsaWRhdGVkUmVnaW9uKCkKIHsKICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUp
Ci0gICAgd2ViV2lkZ2V0KCktPmFuaW1hdGUoKTsKKyAgICB3ZWJXaWRnZXQoKS0+YW5pbWF0ZSgw
LjApOwogI2VuZGlmCiAgICAgd2ViV2lkZ2V0KCktPmxheW91dCgpOwogICAgIFdlYlNpemUgd2lk
Z2V0U2l6ZSA9IHdlYldpZGdldCgpLT5zaXplKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93866</attachid>
            <date>2011-05-17 21:21:48 -0700</date>
            <delta_ts>2011-05-18 14:06:01 -0700</delta_ts>
            <desc>Rebase and minor updates.</desc>
            <filename>bug-58408-20110517212147.patch</filename>
            <type>text/plain</type>
            <size>88314</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwNzk1Mzk0NDk3ZTkxZjlhNTUzMzJlZDI0ZGQ0NjlkOTk5ZGExZTJjLi43
ZWIyNDEzN2VlNDIxYzg1Mzg2NmRlNmRhZDY3NDRiMzM4MGI4NmM3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsOTMgQEAKKzIwMTEtMDUtMTcgIE5hdCBEdWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1
bV0gSW1wbGVtZW50IENDTGF5ZXJUcmVlSG9zdCBhbmQgQ0NMYXllclRyZWVIb3N0SW1wbCBwb3J0
aW9ucyBvZiB0aHJlYWRlZCBjb21wb3NpdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01ODQwOAorCisgICAgICAgIENyZWF0ZSBDQ0xheWVyVHJlZUhv
c3QgYW5kIENDTGF5ZXJUcmVlSG9zdEltcGwsIHdoaWNoIGFyZSB0aGUgbWFpbgorICAgICAgICB0
aHJlYWQgYW5kIGNvbXBvc2l0b3IgdGhyZWFkIGhhbHZlcyBvZiBhIGNvbXBvc2l0ZWQgdmlldy4g
Q29tbXVuaWNhdGlvbgorICAgICAgICBiZXR3ZWVuIHRoZSB0d28gaXMgYmFzZWQgb24gdGhlIGRl
c2lnbiB1c2VkIGluIEZpbGVTdHJlYW1Qcm94eS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToK
KyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9UcmFjZUV2ZW50Lmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0Vmlld3BvcnQpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bUltcGw6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsOjpkcmF3TGF5ZXJzQW5kUHJlc2Vu
dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsOjpMYXllclJl
bmRlcmVyQ2hyb21pdW1JbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJv
bWl1bUltcGw6OmRyYXdMYXllcnNPbk1haW5UaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJSZW5kZXJlckNocm9taXVtSW1wbFByb3h5OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbFByb3h5OjpjcmVhdGVMYXllclRyZWVIb3N0SW1wbCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsUHJveHk6OkxheWVy
UmVuZGVyZXJDaHJvbWl1bUltcGxQcm94eSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRl
cmVyQ2hyb21pdW06OmNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsUHJveHkpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NIZWFkc1VwRGlzcGxheTo6c2V0U2hvd0ZQU0NvdW50ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NIZWFkc1VwRGlzcGxheTo6c2V0U2hvd1BsYXRmb3JtTGF5ZXJU
cmVlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBE
aXNwbGF5Lmg6CisgICAgICAgIChXZWJDb3JlOjpDQ0hlYWRzVXBEaXNwbGF5OjpjdXJyZW50RnJh
bWVOdW1iZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdDo6Q0NMYXllclRyZWVIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdDo6aW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6On5DQ0xheWVy
VHJlZUhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpiZWdpbkNvbW1p
dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNvbW1pdENvbXBsZXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0ZUFuZExheW91dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZUxheWVyVHJlZUhvc3RDb21t
aXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpzZXROZWVkc0NvbW1p
dEFuZFJlZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnNldE5lZWRz
UmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlTGF5ZXJz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3QuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NUaHJlYWQuY3BwLgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojpm
cmFtZU51bWJlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0Q29tbWl0dGVyLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuY3BwLgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyOjpjb21taXQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5oOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5j
cHAuCisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI6OkNDTGF5ZXJU
cmVlSG9zdENvbW1pdHRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyVHJlZUhvc3RJbXBsOjp+Q0NMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpiZWdpbkNvbW1pdCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb21taXRDb21wbGV0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNldE5lZWRzUmVkcmF3KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmg6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGhyZWFkLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQ6
On5DQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdEltcGw6OmZyYW1lTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGw6OnNvdXJjZUZyYW1lTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdEltcGw6OnNldFNvdXJjZUZyYW1lTnVtYmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6Q0NMYXllclRyZWVI
b3N0SW1wbFByb3h5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eTo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojp+
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGxQcm94eTo6aXNTdGFydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGxQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc1JlZHJhdyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnN0b3ApOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpwb3N0RHJhd0xheWVyc1Rhc2tPbkNDVGhyZWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6cmVxdWVzdEZy
YW1lQW5kQ29tbWl0T25DQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHk6OmlzTWFpblRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJl
ZUhvc3RJbXBsUHJveHk6OmlzQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21taXQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpjb21taXRPbkNDVGhyZWFkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc0Nv
bW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0SW1wbFByb3h5OjpzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppbml0SW1wbE9uQ0NUaHJlYWQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2Vk
T25DQ1RocmVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbFByb3h5Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0SW1wbFByb3h5Ojpob3N0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ01haW5UaHJlYWRUYXNrLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWQ6
OnJ1bkxvb3ApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhy
ZWFkVGFzay5oOgorCiAyMDExLTA1LTE2ICBBbmRyZXcgV2lsc29uICA8YXR3aWxzb25AY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI4NjYyNS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQppbmRleCA2NzA4NmI5ZDk0MDcxMzU5ZGI1MDQ2ODM5MmU1MGMxNDA0OGQ4MTNlLi42
MTNkYTcwZjg5NjBiYzk2ZmE4OWE0OWQzMWFlZTM0ZjRlOWJmZDJiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CkBAIC00MDgxLDYgKzQwODEsMTQgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyU29ydGVyLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclNvcnRlci5oJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
Q29tbWl0dGVyLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWQuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWQuaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkVGFzay5oJywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1RyYWNlRXZlbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1RyYWNlRXZlbnQuaAppbmRleCBmZjhmYmVj
ZDkzMDVmZmE0OWVkZDg3ZDFlZDE2NTNmZmNhODNhYjE3Li5jMjNmMjg0MDI2NjNmYjA5MGFmZDc2
NGVjNmMyYTIxZWM3YzIyZTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9UcmFjZUV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vVHJhY2VFdmVudC5oCkBAIC0yNiw2ICsyNiw3IEBACiAjZGVmaW5lIFRyYWNlRXZlbnRfaAog
CiAjaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKKyNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIu
aD4KIAogLy8gSW1wbGVtZW50YXRpb24gZGV0YWlsOiB0cmFjZSBldmVudCBtYWNyb3MgY3JlYXRl
IHRlbXBvcmFyeSB2YXJpYWJsZXMKIC8vIHRvIGtlZXAgaW5zdHJ1bWVudGF0aW9uIG92ZXJoZWFk
IGxvdy4gVGhlc2UgbWFjcm9zIGdpdmUgZWFjaCB0ZW1wb3JhcnkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IDVlNWMyN2I0ZmMwY2YyY2RkNjY3NjMyMDNiNDAwYzM0
MTM4NGEzYzQuLjFkYTIyOWQ2MjQxZjIzNTFmZTYzYzQ1ZmVmN2QwNzA2NjY0NmJhZmEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtNDcsNiArNDcsOCBAQAogI2lu
Y2x1ZGUgIlRyYWNlRXZlbnQuaCIKICNpbmNsdWRlICJXZWJHTExheWVyQ2hyb21pdW0uaCIKICNp
bmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuaCIKKyNpbmNsdWRlICJjYy9DQ01haW5UaHJlYWRUYXNrLmgiCiAjaWYgVVNFKFNLSUEpCiAj
aW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tp
YS5oIgpAQCAtOTMsMjEgKzk1LDI1IEBAIHN0YXRpYyBib29sIGlzU2NhbGVPclRyYW5zbGF0aW9u
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtKQogCiB9CiAKLVBhc3NSZWZQdHI8TGF5ZXJS
ZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShQYXNzUmVmUHRy
PEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0LCBQYXNzT3duUHRyPFRpbGVQYWludEludGVyZmFj
ZT4gY29udGVudFBhaW50KQorUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKENDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xpZW50LCBQ
YXNzT3duUHRyPFRpbGVQYWludEludGVyZmFjZT4gY29udGVudFBhaW50KQogeworICAgIFJlZlB0
cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IGNsaWVudC0+Y3JlYXRlTGF5ZXJUcmVlSG9z
dENvbnRleHQzRCgpOwogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAg
ICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyKGFkb3B0UmVmKG5l
dyBMYXllclJlbmRlcmVyQ2hyb21pdW0oY29udGV4dCwgY29udGVudFBhaW50KSkpOworICAgIFJl
ZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVyUmVuZGVyZXIoYWRvcHRSZWYobmV3IExh
eWVyUmVuZGVyZXJDaHJvbWl1bShjbGllbnQsIGNvbnRleHQsIGNvbnRlbnRQYWludCkpKTsKKyAg
ICBsYXllclJlbmRlcmVyLT5pbml0KCk7CiAgICAgaWYgKCFsYXllclJlbmRlcmVyLT5oYXJkd2Fy
ZUNvbXBvc2l0aW5nKCkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgcmV0dXJuIGxheWVyUmVu
ZGVyZXIucmVsZWFzZSgpOwogfQogCi1MYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVy
ZXJDaHJvbWl1bShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0LAorTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0oQ0NMYXllclRyZWVIb3N0Q2xp
ZW50KiBjbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc093blB0cjxUaWxlUGFpbnRJbnRlcmZh
Y2U+IGNvbnRlbnRQYWludCkKLSAgICA6IG1fdmlld3BvcnRTY3JvbGxQb3NpdGlvbihJbnRQb2lu
dCgtMSwgLTEpKQorICAgIDogQ0NMYXllclRyZWVIb3N0KGNsaWVudCkKKyAgICAsIG1fdmlld3Bv
cnRTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgtMSwgLTEpKQogICAgICwgbV9yb290TGF5ZXIoMCkK
ICAgICAsIG1fcm9vdExheWVyQ29udGVudFBhaW50KGNvbnRlbnRQYWludCkKICAgICAsIG1fY3Vy
cmVudFNoYWRlcigwKQpAQCAtMTkxLDEwICsxOTcsMTMgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OnNldFZpZXdwb3J0KGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRS
ZWMKICAgICAgICAgbV9jdXJyZW50UmVuZGVyU3VyZmFjZSA9IDA7CiAgICAgICAgIG1fcm9vdExh
eWVyQ29udGVudFRpbGVyLT5pbnZhbGlkYXRlRW50aXJlTGF5ZXIoKTsKICAgICB9CisgICAgc2V0
TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OnVwZGF0ZUFuZERyYXdMYXllcnMoKQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0
ZUxheWVycygpCiB7CisgICAgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMoKTsKKwogICAg
IC8vIEZJWE1FOiB1c2UgdGhlIGZyYW1lIGJlZ2luIHRpbWUgZnJvbSB0aGUgb3ZlcmFsbCBjb21w
b3NpdG9yIHNjaGVkdWxlci4KICAgICAvLyBUaGlzIHZhbHVlIGlzIGN1cnJlbnRseSBpbmFjY2Vz
c2libGUgYmVjYXVzZSBpdCBpcyB1cCBpbiBDaHJvbWl1bSdzCiAgICAgLy8gUmVuZGVyV2lkZ2V0
LgpAQCAtMjExLDEwICsyMjAsMTQgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0
ZUFuZERyYXdMYXllcnMoKQogICAgIGlmICghbV9yb290TGF5ZXIpCiAgICAgICAgIHJldHVybjsK
IAotICAgIExheWVyTGlzdCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwotCi0gICAgdXBkYXRlTGF5
ZXJzKHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIG1fY29tcHV0ZWRSZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0ID0gYWRvcHRQdHIobmV3IExheWVyTGlzdCgpKTsKKyAgICB1cGRhdGVMYXllcnMo
Km1fY29tcHV0ZWRSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKK30KIAordm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmRyYXdMYXllcnMoKQoreworICAgIEFTU0VSVChtX2hhcmR3YXJlQ29tcG9z
aXRpbmcpOworICAgIEFTU0VSVChtX2NvbXB1dGVkUmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAg
ICAgLy8gQmVmb3JlIGRyYXdMYXllcnM6CiAgICAgaWYgKGhhcmR3YXJlQ29tcG9zaXRpbmcoKSAm
JiBtX2NvbnRleHRTdXBwb3J0c0xhdGNoKSB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGUgbXVsdGl0
aHJlYWRlZCBjb21wb3NpdG9yIGNhc2Ugd2lsbCBub3Qgd29yayBhcyBsb25nIGFzCkBAIC0yNDAs
NyArMjUzLDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUFuZERyYXdMYXll
cnMoKQogICAgICAgICBtX2NoaWxkQ29udGV4dHNXZXJlQ29waWVkID0gZmFsc2U7CiAgICAgfQog
Ci0gICAgZHJhd0xheWVycyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBkcmF3TGF5ZXJz
KCptX2NvbXB1dGVkUmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAKICAgICBtX3RleHR1cmVNYW5h
Z2VyLT51bnByb3RlY3RBbGxUZXh0dXJlcygpOwogCkBAIC0xMTQ3LDYgKzExNjAsNzQgQEAgdm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmR1bXBSZW5kZXJTdXJmYWNlcyhUZXh0U3RyZWFtJiB0
cywgaW50IGluZGVudCwgTGF5ZXIKICAgICAgICAgZHVtcFJlbmRlclN1cmZhY2VzKHRzLCBpbmRl
bnQsIGxheWVyLT5jaGlsZHJlbigpW2ldLmdldCgpKTsKIH0KIAorY2xhc3MgTGF5ZXJSZW5kZXJl
ckNocm9taXVtSW1wbCA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RJbXBsIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc093blB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsPiBjcmVhdGUoQ0NM
YXllclRyZWVIb3N0SW1wbENsaWVudCogY2xpZW50LCBMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxh
eWVyUmVuZGVyZXIpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IExheWVyUmVu
ZGVyZXJDaHJvbWl1bUltcGwoY2xpZW50LCBsYXllclJlbmRlcmVyKSk7CisgICAgfQorCisgICAg
dmlydHVhbCB2b2lkIGRyYXdMYXllcnNBbmRQcmVzZW50KCkKKyAgICB7CisgICAgICAgIENDQ29t
cGxldGlvbkV2ZW50IGNvbXBsZXRpb247CisgICAgICAgIGJvb2wgY29udGV4dExvc3Q7CisgICAg
ICAgIENDTWFpblRocmVhZDo6cG9zdFRhc2soY3JlYXRlTWFpblRocmVhZFRhc2sodGhpcywgJkxh
eWVyUmVuZGVyZXJDaHJvbWl1bUltcGw6OmRyYXdMYXllcnNPbk1haW5UaHJlYWQsIEFsbG93Q3Jv
c3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb250
ZXh0TG9zdCkpKTsKKyAgICAgICAgY29tcGxldGlvbi53YWl0KCk7CisKKyAgICAgICAgLy8gRklY
TUU6IFNlbmQgdGhlICJVcGRhdGVSZWN0IiBtZXNzYWdlIHVwIHRvIHRoZSBSZW5kZXJXaWRnZXQg
W29yIG1vdmVwbHVnaW4gZXF1aXZhbGVudHMuLi5dCisKKyAgICAgICAgLy8gRklYTUU6IGhhbmRs
ZSBjb250ZXh0IGxvc3QKKyAgICAgICAgaWYgKGNvbnRleHRMb3N0KQorICAgICAgICAgICAgRkFU
QUwoIkxheWVyUmVuZGVyZXJDaHJvbWl1bUltcGwgZG9lcyBub3QgaGFuZGxlIGNvbnRleHQgbG9z
dCB5ZXQuIik7CisgICAgfQorCitwcml2YXRlOgorICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bUlt
cGwoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogY2xpZW50LCBMYXllclJlbmRlcmVyQ2hyb21p
dW0qIGxheWVyUmVuZGVyZXIpCisgICAgICAgIDogQ0NMYXllclRyZWVIb3N0SW1wbChjbGllbnQp
CisgICAgICAgICwgbV9sYXllclJlbmRlcmVyKGxheWVyUmVuZGVyZXIpIHsgfQorCisgICAgdm9p
ZCBkcmF3TGF5ZXJzT25NYWluVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uLCBi
b29sKiBjb250ZXh0TG9zdCkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisKKyAgICAgICAgaWYgKG1fbGF5ZXJSZW5kZXJlci0+cm9vdExheWVyKCkpIHsKKyAgICAgICAg
ICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVycygpOworICAgICAgICAgICAgbV9sYXllclJl
bmRlcmVyLT5wcmVzZW50KCk7CisKKyAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0ID0gbV9sYXllclJlbmRlcmVyLT5jb250ZXh0KCk7CisgICAgICAgICAgICAqY29udGV4dExv
c3QgPSBjb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIo
KSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgKmNvbnRleHRMb3N0ID0gZmFsc2U7CisgICAgICAgIGNvbXBsZXRpb24tPnNpZ25hbCgp
OworICAgIH0KKworICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbV9sYXllclJlbmRlcmVyOwor
fTsKKworY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbFByb3h5IDogcHVibGljIENDTGF5
ZXJUcmVlSG9zdEltcGxQcm94eSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8TGF5
ZXJSZW5kZXJlckNocm9taXVtSW1wbFByb3h5PiBjcmVhdGUoTGF5ZXJSZW5kZXJlckNocm9taXVt
KiBsYXllclJlbmRlcmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBMYXll
clJlbmRlcmVyQ2hyb21pdW1JbXBsUHJveHkobGF5ZXJSZW5kZXJlcikpOworICAgIH0KKworICAg
IHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBjcmVhdGVMYXllclRyZWVI
b3N0SW1wbCgpCisgICAgeworICAgICAgICByZXR1cm4gTGF5ZXJSZW5kZXJlckNocm9taXVtSW1w
bDo6Y3JlYXRlKHRoaXMsIHN0YXRpY19jYXN0PExheWVyUmVuZGVyZXJDaHJvbWl1bSo+KGhvc3Qo
KSkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsUHJv
eHkoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQorICAgICAgICA6IENDTGF5
ZXJUcmVlSG9zdEltcGxQcm94eShsYXllclJlbmRlcmVyKSB7IH0KK307CisKK1Bhc3NPd25QdHI8
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5PiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZUxh
eWVyVHJlZUhvc3RJbXBsUHJveHkoKQoreworICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBs
UHJveHk+IHByb3h5ID0gTGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbFByb3h5OjpjcmVhdGUodGhp
cyk7CisgICAgcHJveHktPnN0YXJ0KCk7CisgICAgcmV0dXJuIHByb3h5LnJlbGVhc2UoKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCBkOTZjODll
MGM5MzIyMDA0Mjk1Mjc5YzlhNjg0NGFlNjA2ZDE3MjQ3Li40ZTVmOTZjNWRmMzliMjI1OTJjMjIw
NzU2ZDVhMzM2ODM1YjI2YjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApA
QCAtNDQsMTMgKzQ0LDEzIEBACiAjaW5jbHVkZSAiY2MvQ0NDYW52YXNMYXllckltcGwuaCIKICNp
bmNsdWRlICJjYy9DQ0hlYWRzVXBEaXNwbGF5LmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclNvcnRl
ci5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgImNjL0NDUGx1
Z2luTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NWaWRlb0xheWVySW1wbC5oIgogI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVk
ZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWYgVVNF
KENHKQpAQCAtNjIsMTMgKzYyLDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NI
ZWFkc1VwRGlzcGxheTsKIGNsYXNzIENDTGF5ZXJJbXBsOworY2xhc3MgQ0NMYXllclRyZWVIb3N0
Q29tbWl0dGVyOworY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbDsKIGNsYXNzIEdlb21ldHJ5Qmlu
ZGluZzsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogCiAvLyBDbGFzcyB0aGF0IGhhbmRsZXMg
ZHJhd2luZyBvZiBjb21wb3NpdGVkIHJlbmRlciBsYXllcnMgdXNpbmcgR0wuCi1jbGFzcyBMYXll
clJlbmRlcmVyQ2hyb21pdW0gOiBwdWJsaWMgUmVmQ291bnRlZDxMYXllclJlbmRlcmVyQ2hyb21p
dW0+IHsKK2NsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bSA6IHB1YmxpYyBDQ0xheWVyVHJlZUhv
c3QgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1
bT4gY3JlYXRlKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBQYXNzT3duUHRyPFRpbGVQ
YWludEludGVyZmFjZT4gY29udGVudFBhaW50KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXll
clJlbmRlcmVyQ2hyb21pdW0+IGNyZWF0ZShDQ0xheWVyVHJlZUhvc3RDbGllbnQqLCBQYXNzT3du
UHRyPFRpbGVQYWludEludGVyZmFjZT4gY29udGVudFBhaW50KTsKIAogICAgIH5MYXllclJlbmRl
cmVyQ2hyb21pdW0oKTsKIApAQCAtODAsNyArODIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRW
aWV3cG9ydChjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVu
dFJlY3QsIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbik7CiAKICAgICAvLyB1cGRhdGVz
IGFuZCBkcmF3cyB0aGUgY3VycmVudCBsYXllcnMgb250byB0aGUgYmFja2J1ZmZlcgotICAgIHZv
aWQgdXBkYXRlQW5kRHJhd0xheWVycygpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVMYXllcnMo
KTsKKyAgICB2b2lkIGRyYXdMYXllcnMoKTsKIAogICAgIC8vIFNldCBieSBXZWJWaWV3SW1wbCB3
aGVuIGFuaW1hdGlvbiBjYWxsYmFja3MgYXJlIHJ1bm5pbmcuCiAgICAgLy8gRklYTUU6IFdoZW4g
d2UgbW92ZSBzY2hlZHVsaW5nIGludG8gdGhlIGNvbXBvc2l0b3IsIHdlIGNhbiByZW1vdmUgdGhp
cyBmbGFnLgpAQCAtMTQ0LDExICsxNDcsMTQgQEAgcHVibGljOgogI2lmbmRlZiBOREVCVUcKICAg
ICBzdGF0aWMgYm9vbCBzX2luUGFpbnRMYXllckNvbnRlbnRzOwogI2VuZGlmCitwcm90ZWN0ZWQ6
CisgICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eT4gY3JlYXRl
TGF5ZXJUcmVlSG9zdEltcGxQcm94eSgpOworCiBwcml2YXRlOgogICAgIHR5cGVkZWYgVmVjdG9y
PFJlZlB0cjxDQ0xheWVySW1wbD4gPiBMYXllckxpc3Q7CiAgICAgdHlwZWRlZiBIYXNoTWFwPEdy
YXBoaWNzQ29udGV4dDNEKiwgaW50PiBDaGlsZENvbnRleHRNYXA7CiAKLSAgICBleHBsaWNpdCBM
YXllclJlbmRlcmVyQ2hyb21pdW0oUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4sIFBhc3NP
d25QdHI8VGlsZVBhaW50SW50ZXJmYWNlPiBjb250ZW50UGFpbnQpOworICAgIExheWVyUmVuZGVy
ZXJDaHJvbWl1bShDQ0xheWVyVHJlZUhvc3RDbGllbnQqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiwgUGFzc093blB0cjxUaWxlUGFpbnRJbnRlcmZhY2U+IGNvbnRlbnRQYWludCk7CiAK
ICAgICB2b2lkIHVwZGF0ZUxheWVycyhMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3Qp
OwogICAgIHZvaWQgdXBkYXRlUm9vdExheWVyQ29udGVudHMoKTsKQEAgLTE5Myw2ICsxOTksOCBA
QCBwcml2YXRlOgogCiAgICAgYm9vbCBtX2hhcmR3YXJlQ29tcG9zaXRpbmc7CiAKKyAgICBPd25Q
dHI8TGF5ZXJMaXN0PiBtX2NvbXB1dGVkUmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKwogICAgIHVu
c2lnbmVkIG1fY3VycmVudFNoYWRlcjsKICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIG1fY3Vy
cmVudFJlbmRlclN1cmZhY2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAKaW5k
ZXggYWZjNzlmYWM2MzhhN2YzMTYyOGNlNDNjZTc0M2ZmNDlmOTcyZjVkNi4uNTIxOTM3NDI4NTYz
YTYwZWQ0OTEyY2ExZTE3OTE5YzdkOGVkN2RjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlz
cGxheS5jcHAKQEAgLTIzNCw2ICsyMzQsMTggQEAgdm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjpvblBy
ZXNlbnQoKQogICAgIG1fY3VycmVudEZyYW1lTnVtYmVyICs9IDE7CiB9CiAKK3ZvaWQgQ0NIZWFk
c1VwRGlzcGxheTo6c2V0U2hvd0ZQU0NvdW50ZXIoYm9vbCBzaG93KQoreworICAgIG1fc2hvd0ZQ
U0NvdW50ZXIgPSBzaG93OworICAgIG1fbGF5ZXJSZW5kZXJlci0+c2V0TmVlZHNSZWRyYXcoKTsK
K30KKwordm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjpzZXRTaG93UGxhdGZvcm1MYXllclRyZWUoYm9v
bCBzaG93KQoreworICAgIG1fc2hvd1BsYXRmb3JtTGF5ZXJUcmVlID0gc2hvdzsKKyAgICBtX2xh
eWVyUmVuZGVyZXItPnNldE5lZWRzUmVkcmF3KCk7Cit9CisKIH0KIAogI2VuZGlmIC8vIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaAppbmRl
eCBkNjQ4NzhkYTlhYzVmODRiOTVjZDIwZTI0MjZkYmZkZTk3MzZmMzdhLi45OTJiYmEwNjc0ZDgw
OTBmOWEwYTgxZmI5MTI3YWZjMzgwMTI2NGFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxh
eS5oCkBAIC00OSwxMyArNDksMTUgQEAgcHVibGljOgogCiAgICAgfkNDSGVhZHNVcERpc3BsYXko
KTsKIAorICAgIGludCBjdXJyZW50RnJhbWVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2N1cnJl
bnRGcmFtZU51bWJlcjsgfQorCiAgICAgdm9pZCBvbkZyYW1lQmVnaW4oZG91YmxlIHRpbWVzdGFt
cCk7CiAgICAgdm9pZCBvblByZXNlbnQoKTsKIAotICAgIHZvaWQgc2V0U2hvd0ZQU0NvdW50ZXIo
Ym9vbCBlbmFibGUpIHsgbV9zaG93RlBTQ291bnRlciA9IGVuYWJsZTsgfQorICAgIHZvaWQgc2V0
U2hvd0ZQU0NvdW50ZXIoYm9vbCBlbmFibGUpOwogICAgIGJvb2wgc2hvd0ZQU0NvdW50ZXIoKSBj
b25zdCB7IHJldHVybiBtX3Nob3dGUFNDb3VudGVyOyB9CiAKLSAgICB2b2lkIHNldFNob3dQbGF0
Zm9ybUxheWVyVHJlZShib29sIGVuYWJsZSkgeyBtX3Nob3dQbGF0Zm9ybUxheWVyVHJlZSA9IGVu
YWJsZTsgfQorICAgIHZvaWQgc2V0U2hvd1BsYXRmb3JtTGF5ZXJUcmVlKGJvb2wgZW5hYmxlKTsK
ICAgICBib29sIHNob3dQbGF0Zm9ybUxheWVyVHJlZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hvd1Bs
YXRmb3JtTGF5ZXJUcmVlOyB9CiAKICAgICBib29sIGVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBt
X3Nob3dQbGF0Zm9ybUxheWVyVHJlZSB8fCBtX3Nob3dGUFNDb3VudGVyOyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MThhOTFlZTUxOWE3NDk1M2IzMjBkMDA4
Yjk4OGIzYTFlNzg4MGMwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtMCwwICsxLDk5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9D
Q0xheWVyVHJlZUhvc3QuaCIKKworI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKKyNpbmNsdWRlICJj
Yy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmgiCisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDQ0xheWVyVHJlZUhvc3Q6OkND
TGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fY2xp
ZW50KGNsaWVudCkKKyAgICAsIG1fZnJhbWVOdW1iZXIoMCkKK3sKK30KKwordm9pZCBDQ0xheWVy
VHJlZUhvc3Q6OmluaXQoKQoreworI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICBt
X3Byb3h5ID0gY3JlYXRlTGF5ZXJUcmVlSG9zdEltcGxQcm94eSgpOworICAgIEFTU0VSVChtX3By
b3h5LT5pc1N0YXJ0ZWQoKSk7CisgICAgbV9wcm94eS0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXco
KTsKKyNlbmRpZgorfQorCitDQ0xheWVyVHJlZUhvc3Q6On5DQ0xheWVyVHJlZUhvc3QoKQorewor
ICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3Q6On5DQ0xheWVyVHJlZUhvc3QiLCB0aGlz
LCAwKTsKKyNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgbV9wcm94eS0+c3RvcCgp
OworICAgIG1fcHJveHkuY2xlYXIoKTsKKyNlbmRpZgorfQorCit2b2lkIENDTGF5ZXJUcmVlSG9z
dDo6YmVnaW5Db21taXQoKQoreworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0Q29t
cGxldGUoKQoreworICAgIG1fZnJhbWVOdW1iZXIrKzsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhv
c3Q6OmFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQoreworICAgIG1fY2xp
ZW50LT5hbmltYXRlQW5kTGF5b3V0KGZyYW1lQmVnaW5UaW1lKTsKK30KKworUGFzc093blB0cjxD
Q0xheWVyVHJlZUhvc3RDb21taXR0ZXI+IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlTGF5ZXJUcmVl
SG9zdENvbW1pdHRlcigpCit7CisgICAgcmV0dXJuIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcjo6
Y3JlYXRlKCk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXROZWVkc0NvbW1pdEFuZFJl
ZHJhdygpCit7CisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgIG1fcHJveHktPnNl
dE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisjZW5kaWYKK30KKwordm9pZCBDQ0xheWVyVHJlZUhv
c3Q6OnNldE5lZWRzUmVkcmF3KCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0
OjpzZXROZWVkc1JlZHJhdyIsIHRoaXMsIDApOworI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElO
RykKKyAgICBtX3Byb3h5LT5zZXROZWVkc1JlZHJhdygpOworI2VuZGlmCit9CisKK3ZvaWQgQ0NM
YXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMoKQoreworICAgIG1fY2xpZW50LT51cGRhdGVMYXll
cnMoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZTlm
OWMxYzYzM2NlNjljOGVhNWE2M2Q1ZjRkMTk5ZDJmNmQzZmJjCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0LmgKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0xheWVyVHJl
ZUhvc3RfaAorI2RlZmluZSBDQ0xheWVyVHJlZUhvc3RfaAorCisjaW5jbHVkZSAiY2MvQ0NMYXll
clRyZWVIb3N0Q29tbWl0dGVyLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbFBy
b3h5LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbDsKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdElt
cGxDbGllbnQ7CitjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKKworY2xhc3MgQ0NMYXllclRyZWVI
b3N0Q2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUFuZExheW91dChk
b3VibGUgZnJhbWVCZWdpblRpbWUpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0M0Q+IGNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZUxheWVycygpID0gMDsKK307CisKK2NsYXNzIENDTGF5ZXJUcmVlSG9z
dCA6IHB1YmxpYyBSZWZDb3VudGVkPENDTGF5ZXJUcmVlSG9zdD4geworcHVibGljOgorICAgIGV4
cGxpY2l0IENDTGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3RDbGllbnQqKTsKKyAgICB2b2lk
IGluaXQoKTsKKyAgICB2aXJ0dWFsIH5DQ0xheWVyVHJlZUhvc3QoKTsKKworICAgIHZpcnR1YWwg
dm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CisgICAgdmlydHVh
bCB2b2lkIGJlZ2luQ29tbWl0KCk7CisgICAgdmlydHVhbCB2b2lkIGNvbW1pdENvbXBsZXRlKCk7
CisgICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcj4gY3JlYXRl
TGF5ZXJUcmVlSG9zdENvbW1pdHRlcigpOworCisgICAgaW50IGZyYW1lTnVtYmVyKCkgY29uc3Qg
eyByZXR1cm4gbV9mcmFtZU51bWJlcjsgfQorCisgICAgdm9pZCBzZXROZWVkc0NvbW1pdEFuZFJl
ZHJhdygpOworICAgIHZvaWQgc2V0TmVlZHNSZWRyYXcoKTsKKworICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVMYXllcnMoKTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xh
eWVyVHJlZUhvc3RJbXBsUHJveHk+IGNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsUHJveHkoKSA9IDA7
CisKK3ByaXZhdGU6CisgICAgQ0NMYXllclRyZWVIb3N0Q2xpZW50KiBtX2NsaWVudDsKKyAgICBp
bnQgbV9mcmFtZU51bWJlcjsKKyAgICBPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5PiBt
X3Byb3h5OworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RDb21taXR0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcyZGQ3MTRiZTdlMzg0YzhlZjllMTA5MjRm
ZjVjZDIwNTg2OTliZWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIuY3BwCkBAIC0w
LDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1
ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5oIgorCisjaW5jbHVkZSAiY2MvQ0NMYXll
clRyZWVIb3N0LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyPiBD
Q0xheWVyVHJlZUhvc3RDb21taXR0ZXI6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIoKSk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVI
b3N0Q29tbWl0dGVyOjpjb21taXQoQ0NMYXllclRyZWVIb3N0KiBob3N0LCBDQ0xheWVyVHJlZUhv
c3RJbXBsKiBob3N0SW1wbCkKK3sKKyAgICBob3N0SW1wbC0+c2V0U291cmNlRnJhbWVOdW1iZXIo
aG9zdC0+ZnJhbWVOdW1iZXIoKSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0Q29tbWl0dGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2JjYWRlYTY1NjM2ZDllNjAwYzdlYzc5MGJh
ZTE0NzcyODg2NWJiNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5oCkBAIC0wLDAg
KzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVy
X2gKKyNkZWZpbmUgQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyX2gKKworI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgQ0NMYXllclRyZWVIb3N0OworY2xhc3MgQ0NMYXllclRyZWVIb3N0
SW1wbDsKKworY2xhc3MgQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIpOworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcj4gY3JlYXRlKCk7CisgICAgdmly
dHVhbCB2b2lkIGNvbW1pdChDQ0xheWVyVHJlZUhvc3QqLCBDQ0xheWVyVHJlZUhvc3RJbXBsKik7
CisKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIoKSB7
IH0KK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmEzYWEyYmEyMTBkYmRkZDE2YjljYTFhZDEyZTYxMTU1NThiMmFiMzcK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtMCwwICsxLDk5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmgiCisKKyNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXll
clRyZWVIb3N0LmgiCisjaW5jbHVkZSAiY2MvQ0NUaHJlYWRUYXNrLmgiCisjaW5jbHVkZSA8d3Rm
L0N1cnJlbnRUaW1lLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ0NMYXllclRyZWVIb3N0
SW1wbDo6Q0NMYXllclRyZWVIb3N0SW1wbChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGll
bnQpCisgICAgOiBtX3NvdXJjZUZyYW1lTnVtYmVyKC0xKQorICAgICwgbV9mcmFtZU51bWJlcigw
KQorICAgICwgbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9jb21taXRQZW5kaW5nKGZhbHNlKQor
ICAgICwgbV9yZWRyYXdQZW5kaW5nKGZhbHNlKQoreworfQorCitDQ0xheWVyVHJlZUhvc3RJbXBs
Ojp+Q0NMYXllclRyZWVIb3N0SW1wbCgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVl
SG9zdEltcGw6On5DQ0xheWVyVHJlZUhvc3RJbXBsKCkiLCB0aGlzLCAwKTsKK30KKwordm9pZCBD
Q0xheWVyVHJlZUhvc3RJbXBsOjpiZWdpbkNvbW1pdCgpCit7Cit9CisKK3ZvaWQgQ0NMYXllclRy
ZWVIb3N0SW1wbDo6Y29tbWl0Q29tcGxldGUoKQoreworICAgIG1fY29tbWl0UGVuZGluZyA9IGZh
bHNlOworICAgIHNldE5lZWRzUmVkcmF3KCk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1w
bDo6ZHJhd0xheWVycygpCit7CisgICAgLy8gSWYgYSBjb21taXQgaXMgcGVuZGluZywgZG8gbm90
IGRyYXcuIFRoaXMgaXMgYSB0ZW1wb3JhcnkgcmVzdHJpY3Rpb24gdGhhdAorICAgIC8vIGlzIG5l
Y2Vzc2FyeSBiZWNhdXNlIGRyYXdMYXllcnMgaXMgY3VycmVudGx5IGEgYmxvY2tpbmcgb3BlcmF0
aW9uIG9uIHRoZSBtYWluIHRocmVhZC4KKyAgICBpZiAobV9jb21taXRQZW5kaW5nKQorICAgICAg
ICByZXR1cm47CisKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xh
eWVycyIsIHRoaXMsIDApOworICAgIEFTU0VSVChtX3JlZHJhd1BlbmRpbmcpOworICAgIG1fcmVk
cmF3UGVuZGluZyA9IGZhbHNlOworCisgICAgeworICAgICAgICBUUkFDRV9FVkVOVCgiQ0NMYXll
clRyZWVIb3N0SW1wbDo6ZHJhd0xheWVyc0FuZFByZXNlbnQiLCB0aGlzLCAwKTsKKyAgICAgICAg
ZHJhd0xheWVyc0FuZFByZXNlbnQoKTsKKyAgICB9CisKKyAgICArK21fZnJhbWVOdW1iZXI7Cit9
CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKQor
eworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXROZWVkc0NvbW1pdEFu
ZFJlZHJhdyIsIHRoaXMsIDApOworCisgICAgLy8gRklYTUU6IG1vdmUgdGhlIHJlcXVlc3RGcmFt
ZUFuZENvbW1pdCBvdXQgZnJvbSBoZXJlIG9uY2Ugd2UgYWRkIGZyYW1lcmF0ZSB0aHJvdHRsaW5n
L2FuaW1hdGlvbgorICAgIGRvdWJsZSBmcmFtZUJlZ2luVGltZSA9IGN1cnJlbnRUaW1lKCk7Cisg
ICAgbV9jb21taXRQZW5kaW5nID0gdHJ1ZTsKKyAgICBtX2NsaWVudC0+cmVxdWVzdEZyYW1lQW5k
Q29tbWl0T25DQ1RocmVhZChmcmFtZUJlZ2luVGltZSk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVI
b3N0SW1wbDo6c2V0TmVlZHNSZWRyYXcoKQoreworICAgIGlmIChtX3JlZHJhd1BlbmRpbmcgfHwg
bV9jb21taXRQZW5kaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBUUkFDRV9FVkVOVCgiQ0NM
YXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNSZWRyYXciLCB0aGlzLCAwKTsKKyAgICBtX3JlZHJh
d1BlbmRpbmcgPSB0cnVlOworICAgIG1fY2xpZW50LT5wb3N0RHJhd0xheWVyc1Rhc2tPbkNDVGhy
ZWFkKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5mZDkwNDk1ZGVkMmM4MGMzOWY4ZjNhMTk1YjJlMDE1ZDZhMDhjYWI5Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgQ0NMYXllclRyZWVIb3N0SW1wbF9oCisjZGVmaW5lIENDTGF5ZXJUcmVlSG9zdEltcGxfaAor
CisjaW5jbHVkZSAiY2MvQ0NUaHJlYWQuaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworLy8gUHJvdmlkZXMgc2NoZWR1bGluZyBpbmZyYXN0cnVjdHVyZSBmb3IgYSBDQ0xheWVyVHJl
ZUhvc3RJbXBsCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50ICB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB+Q0NMYXllclRyZWVIb3N0SW1wbENsaWVudCgpIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBwb3N0RHJhd0xheWVyc1Rhc2tPbkNDVGhyZWFkKCkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCByZXF1ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKGRvdWJsZSBmcmFtZUJlZ2luVGltZSkg
PSAwOworfTsKKworLy8gQ0NMYXllclRyZWVIb3N0SW1wbCBvd25zIHRoZSBDQ0xheWVySW1wbCB0
cmVlIGFzIHdlbGwgYXMgYXNzb2NpYXRlZCByZW5kZXJpbmcgc3RhdGUKK2NsYXNzIENDTGF5ZXJU
cmVlSG9zdEltcGwgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDTGF5ZXJUcmVlSG9zdElt
cGwpOworcHVibGljOgorICAgIGV4cGxpY2l0IENDTGF5ZXJUcmVlSG9zdEltcGwoQ0NMYXllclRy
ZWVIb3N0SW1wbENsaWVudCopOworICAgIHZpcnR1YWwgfkNDTGF5ZXJUcmVlSG9zdEltcGwoKTsK
KworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdCgpOworICAgIHZpcnR1YWwgdm9pZCBjb21t
aXRDb21wbGV0ZSgpOworCisgICAgdm9pZCBkcmF3TGF5ZXJzKCk7CisgICAgdmlydHVhbCB2b2lk
IGRyYXdMYXllcnNBbmRQcmVzZW50KCkgPSAwOworCisgICAgaW50IGZyYW1lTnVtYmVyKCkgY29u
c3QgeyByZXR1cm4gbV9mcmFtZU51bWJlcjsgfQorCisgICAgdm9pZCBzZXROZWVkc1JlZHJhdygp
OworICAgIHZvaWQgc2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKworICAgIGludCBzb3VyY2VG
cmFtZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlRnJhbWVOdW1iZXI7IH0KKyAgICB2
b2lkIHNldFNvdXJjZUZyYW1lTnVtYmVyKGludCBmcmFtZU51bWJlcikgeyBtX3NvdXJjZUZyYW1l
TnVtYmVyID0gZnJhbWVOdW1iZXI7IH0KKworcHJvdGVjdGVkOgorICAgIGludCBtX3NvdXJjZUZy
YW1lTnVtYmVyOworICAgIGludCBtX2ZyYW1lTnVtYmVyOworCitwcml2YXRlOgorICAgIENDTGF5
ZXJUcmVlSG9zdEltcGxDbGllbnQqIG1fY2xpZW50OworICAgIGJvb2wgbV9jb21taXRQZW5kaW5n
OworICAgIGJvb2wgbV9yZWRyYXdQZW5kaW5nOworfTsKKworfTsKKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RJbXBsUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYzE3
MmYyZWUwNjAwYjc4Yjg5MzY3YTNmZTQ0YmI4NmNkYzlhYjZhCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbFByb3h5LmNwcApAQCAtMCwwICsxLDIyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Lmgi
CisKKyNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0
LmgiCisjaW5jbHVkZSAiY2MvQ0NNYWluVGhyZWFkVGFzay5oIgorI2luY2x1ZGUgImNjL0NDVGhy
ZWFkVGFzay5oIgorCisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworbmFtZXNwYWNlIHsKK0NDVGhyZWFkKiBjY1RocmVhZDsKK2ludCBudW1Qcm94aWVzID0g
MDsKK30KKworQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHkoQ0NMYXllclRyZWVIb3N0KiBsYXllclRyZWVIb3N0KQorICAgIDogbV9jb21taXRQZW5kaW5n
KGZhbHNlKQorICAgICwgbV9sYXllclRyZWVIb3N0KGxheWVyVHJlZUhvc3QpCit7CisgICAgVFJB
Q0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6Q0NMYXllclRyZWVIb3N0SW1wbFBy
b3h5IiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBudW1Qcm94
aWVzKys7CisgICAgaWYgKCFjY1RocmVhZCkKKyAgICAgICAgY2NUaHJlYWQgPSBDQ1RocmVhZDo6
Y3JlYXRlKCkubGVha1B0cigpOworfQorCisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5
OjpzdGFydCgpCit7CisgICAgLy8gQ3JlYXRlIExheWVyVHJlZUhvc3RJbXBsLgorICAgIENDQ29t
cGxldGlvbkV2ZW50IGNvbXBsZXRpb247CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUND
VGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppbml0SW1wbE9uQ0NU
aHJlYWQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pKSk7CisgICAgY29tcGxl
dGlvbi53YWl0KCk7Cit9CisKK0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6fkNDTGF5ZXJUcmVl
SG9zdEltcGxQcm94eSgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eTo6fkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSIsIHRoaXMsIDApOworICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3RJbXBsICYmICFtX2xh
eWVyVHJlZUhvc3QpOyAvLyBtYWtlIHN1cmUgc3RvcCgpIGdvdCBjYWxsZWQuCisKKyAgICBudW1Q
cm94aWVzLS07CisgICAgaWYgKCFudW1Qcm94aWVzKSB7CisgICAgICAgIGRlbGV0ZSBjY1RocmVh
ZDsKKyAgICAgICAgY2NUaHJlYWQgPSAwOworICAgIH0KK30KKworYm9vbCBDQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHk6OmlzU3RhcnRlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXJUcmVl
SG9zdEltcGw7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc0Nv
bW1pdEFuZFJlZHJhdygpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAo
bV9jb21taXRQZW5kaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBUUkFDRV9FVkVOVCgiQ0NM
YXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdyIsIHRoaXMsIDAp
OworICAgIG1fY29tbWl0UGVuZGluZyA9IHRydWU7CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNy
ZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVk
c0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQpKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJ
bXBsUHJveHk6OnNldE5lZWRzUmVkcmF3KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDTGF5
ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKSk7Cit9CisKK3Zv
aWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzdG9wKCkKK3sKKyAgICBUUkFDRV9FVkVOVCgi
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzdG9wIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKyAgICAvLyBTeW5jaHJvbm91c2x5IGRlbGV0ZXMgdGhlIGltcGwuCisg
ICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKKyAgICBjY1RocmVhZC0+cG9zdFRhc2so
Y3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmxheWVy
VHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0
aW9uKSkpOworICAgIGNvbXBsZXRpb24ud2FpdCgpOworCisgICAgQVNTRVJUKCFtX2xheWVyVHJl
ZUhvc3RJbXBsKTsgLy8gdmVyaWZ5IHRoYXQgdGhlIGltcGwgZGVsZXRlZC4KKyAgICBtX2xheWVy
VHJlZUhvc3QgPSAwOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6cG9zdERy
YXdMYXllcnNUYXNrT25DQ1RocmVhZCgpCit7CisgICAgQVNTRVJUKGlzQ0NUaHJlYWQoKSk7Cisg
ICAgaWYgKG1fbGF5ZXJUcmVlSG9zdEltcGwpCisgICAgICAgIGNjVGhyZWFkLT5wb3N0VGFzayhj
cmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6ZHJhd0xh
eWVyc09uQ0NUaHJlYWQpKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJl
cXVlc3RGcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQorewor
ICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJlcXVlc3RGcmFtZUFu
ZENvbW1pdE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNDQ1RocmVhZCgpKTsK
KyAgICBpZiAobV9sYXllclRyZWVIb3N0SW1wbCkKKyAgICAgICAgQ0NNYWluVGhyZWFkOjpwb3N0
VGFzayhjcmVhdGVNYWluVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5
OjpyZXF1ZXN0RnJhbWVBbmRDb21taXQsIGZyYW1lQmVnaW5UaW1lKSk7Cit9CisKK2Jvb2wgQ0NM
YXllclRyZWVIb3N0SW1wbFByb3h5Ojppc01haW5UaHJlYWQoKSBjb25zdAoreworICAgIHJldHVy
biA6OmlzTWFpblRocmVhZCgpOworfQorCitib29sIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6
aXNDQ1RocmVhZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGN1cnJlbnRUaHJlYWQoKSA9PSBjY1Ro
cmVhZC0+dGhyZWFkSUQoKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJl
cXVlc3RGcmFtZUFuZENvbW1pdChkb3VibGUgZnJhbWVCZWdpblRpbWUpCit7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6cmVxdWVz
dEZyYW1lQW5kQ29tbWl0IiwgdGhpcywgMCk7CisgICAgeworICAgICAgICBUUkFDRV9FVkVOVCgi
Q0NMYXllclRyZWVIb3N0OjphbmltYXRlQW5kTGF5b3V0IiwgdGhpcywgMCk7CisgICAgICAgIG1f
bGF5ZXJUcmVlSG9zdC0+YW5pbWF0ZUFuZExheW91dChmcmFtZUJlZ2luVGltZSk7CisgICAgfQor
CisgICAgbV9jb21taXRQZW5kaW5nID0gZmFsc2U7CisgICAgeworICAgICAgICBUUkFDRV9FVkVO
VCgiQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMiLCB0aGlzLCAwKTsKKyAgICAgICAgbV9s
YXllclRyZWVIb3N0LT51cGRhdGVMYXllcnMoKTsKKyAgICB9CisKKyAgICBPd25QdHI8Q0NMYXll
clRyZWVIb3N0Q29tbWl0dGVyPiBjb21taXR0ZXIgPSBtX2xheWVyVHJlZUhvc3QtPmNyZWF0ZUxh
eWVyVHJlZUhvc3RDb21taXR0ZXIoKTsKKyAgICBtX2xheWVyVHJlZUhvc3QtPmJlZ2luQ29tbWl0
KCk7CisKKyAgICAvLyBCbG9ja2luZyBjYWxsIHRvIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6
cGVyZm9ybUNvbW1pdAorICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CisgICAgY2NU
aHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0
SW1wbFByb3h5Ojpjb21taXRPbkNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKGNvbW1p
dHRlci5nZXQoKSksIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pKSk7CisgICAg
Y29tcGxldGlvbi53YWl0KCk7CisKKyAgICBjb21taXR0ZXIuY2xlYXIoKTsKKworICAgIG1fbGF5
ZXJUcmVlSG9zdC0+Y29tbWl0Q29tcGxldGUoKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJ
bXBsUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyKiBjb21t
aXR0ZXIsIENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQoreworICAgIEFTU0VSVChpc0ND
VGhyZWFkKCkpOworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmNv
bW1pdE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5iZWdp
bkNvbW1pdCgpOworICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6
Y29tbWl0IiwgdGhpcywgMCk7CisgICAgICAgIGNvbW1pdHRlci0+Y29tbWl0KG1fbGF5ZXJUcmVl
SG9zdCwgbV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSk7CisgICAgfQorICAgIGNvbXBsZXRpb24t
PnNpZ25hbCgpOworCisgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+Y29tbWl0Q29tcGxldGUoKTsK
K30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmRyYXdMYXllcnNPbkNDVGhyZWFk
KCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpkcmF3TGF5
ZXJzT25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc0NDVGhyZWFkKCkpOworICAg
IGlmIChtX2xheWVyVHJlZUhvc3RJbXBsKQorICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5k
cmF3TGF5ZXJzKCk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVk
c0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVy
VHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCIsIHRo
aXMsIDApOworICAgIEFTU0VSVChpc0NDVGhyZWFkKCkgJiYgbV9sYXllclRyZWVIb3N0SW1wbCk7
CisgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKK30K
Kwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVh
ZCgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVl
ZHNSZWRyYXdPbkNDVGhyZWFkIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzQ0NUaHJlYWQoKSAm
JiBtX2xheWVyVHJlZUhvc3RJbXBsKTsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5zZXROZWVk
c1JlZHJhdygpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aW5pdEltcGxP
bkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQoreworICAgIFRSQUNFX0VW
RU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmluaXRJbXBsT25DQ1RocmVhZCIsIHRoaXMs
IDApOworICAgIEFTU0VSVChpc0NDVGhyZWFkKCkpOworICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwg
PSBjcmVhdGVMYXllclRyZWVIb3N0SW1wbCgpOworICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOwor
fQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6bGF5ZXJUcmVlSG9zdENsb3NlZE9u
Q0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24pCit7CisgICAgVFJBQ0VfRVZF
TlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6bGF5ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJl
YWQiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNDQ1RocmVhZCgpKTsKKyAgICBtX2xheWVyVHJl
ZUhvc3RJbXBsLmNsZWFyKCk7CisgICAgY29tcGxldGlvbi0+c2lnbmFsKCk7Cit9CisKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjk1
YmUzY2FiNjIxZjM5OWUzYzQ0OWM0MjRjNTg3NTMxYTM5MGNlYgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdEltcGxQcm94eS5oCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5X2gKKyNkZWZpbmUgQ0NMYXllclRyZWVIb3N0SW1wbFBy
b3h5X2gKKworI2luY2x1ZGUgImNjL0NDQ29tcGxldGlvbkV2ZW50LmgiCisjaW5jbHVkZSAiY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ0xheWVyVHJlZUhvc3Q7CitjbGFzcyBDQ0xheWVyVHJl
ZUhvc3RDb21taXR0ZXI7CisKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSA6IHB1Ymxp
YyBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShD
Q0xheWVyVHJlZUhvc3RJbXBsUHJveHkpOworcHVibGljOgorICAgIHZpcnR1YWwgfkNDTGF5ZXJU
cmVlSG9zdEltcGxQcm94eSgpOworCisgICAgYm9vbCBpc1N0YXJ0ZWQoKSBjb25zdDsKKworICAg
IHZvaWQgc2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICB2b2lkIHNldE5lZWRzUmVkcmF3
KCk7CisKKyAgICB2b2lkIHN0YXJ0KCk7IC8vIE11c3QgYmUgY2FsbGVkIGJlZm9yZSB1c2luZyB0
aGUgcHJveHkuCisgICAgdm9pZCBzdG9wKCk7IC8vIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBkZWxl
dGluZyB0aGUgcHJveHkuCisKKyAgICAvLyBDQ0xheWVyVHJlZUhvc3RJbXBsQ2llbnQgLS0gY2Fs
bGVkIG9uIENDVGhyZWFkCisgICAgdmlydHVhbCB2b2lkIHBvc3REcmF3TGF5ZXJzVGFza09uQ0NU
aHJlYWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdEZyYW1lQW5kQ29tbWl0T25DQ1RocmVh
ZChkb3VibGUgZnJhbWVCZWdpblRpbWUpOworCitwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQgQ0NM
YXllclRyZWVIb3N0SW1wbFByb3h5KENDTGF5ZXJUcmVlSG9zdCopOworICAgIHZpcnR1YWwgUGFz
c093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBjcmVhdGVMYXllclRyZWVIb3N0SW1wbCgpID0g
MDsKKyAgICBDQ0xheWVyVHJlZUhvc3QqIGhvc3QoKSBjb25zdCB7IHJldHVybiBtX2xheWVyVHJl
ZUhvc3Q7IH0KKworcHJpdmF0ZToKKyAgICBib29sIGlzTWFpblRocmVhZCgpIGNvbnN0OworICAg
IGJvb2wgaXNDQ1RocmVhZCgpIGNvbnN0OworCisgICAgLy8gQ2FsbGVkIG9uIENDTWFpblRocmVh
ZAorICAgIHZvaWQgcmVxdWVzdEZyYW1lQW5kQ29tbWl0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7
CisKKyAgICAvLyBDYWxsZWQgb24gQ0NUaHJlYWQKKyAgICB2b2lkIGNvbW1pdE9uQ0NUaHJlYWQo
Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyKiwgQ0NDb21wbGV0aW9uRXZlbnQqKTsKKyAgICB2b2lk
IGRyYXdMYXllcnNPbkNDVGhyZWFkKCk7CisgICAgdm9pZCBpbml0SW1wbE9uQ0NUaHJlYWQoQ0ND
b21wbGV0aW9uRXZlbnQqKTsKKyAgICB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1Ro
cmVhZCgpOworICAgIHZvaWQgc2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKCk7CisgICAgdm9pZCBs
YXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCopOworCisgICAg
Ly8gVXNlZCBvbiBtYWluLXRocmVhZCBvbmx5LgorICAgIGJvb2wgbV9jb21taXRQZW5kaW5nOwor
CisgICAgLy8gQWNjZXNzZWQgb24gbWFpbiB0aHJlYWQgb25seS4KKyAgICBDQ0xheWVyVHJlZUhv
c3QqIG1fbGF5ZXJUcmVlSG9zdDsKKworICAgIC8vIFVzZWQgb24gdGhlIENDVGhyZWFkLCBidXQg
Y2hlY2tlZCBvbiBtYWluIHRocmVhZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24vc2h1dGRvd24uCisg
ICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IG1fbGF5ZXJUcmVlSG9zdEltcGw7Cit9Owor
Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkVGFzay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkVGFzay5oCmluZGV4IDdkZThkNzEz
ZTg4Yzg4NDIyMjQwNzkzZmYyNzdkNTlkZjUzYWRlN2IuLmZhYzZlNjQzZjA1YTE4YmJiYWFkNTdi
MjliYmMwM2E2MjgwZWFjOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZFRhc2suaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWRUYXNrLmgKQEAgLTI0
LDkgKzI0LDkgQEAKICNpZm5kZWYgQ0NNYWluVGhyZWFkVGFza19oCiAjZGVmaW5lIENDTWFpblRo
cmVhZFRhc2tfaAogCi0jaW5jbHVkZSAiQ0NNYWluVGhyZWFkLmgiCiAjaW5jbHVkZSAiQ3Jvc3NU
aHJlYWRDb3BpZXIuaCIKICNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKKyNpbmNsdWRlICJj
Yy9DQ01haW5UaHJlYWQuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmNwcAppbmRleCA5NTY2NTg0NWM1OGM0
OGNhMDYyMjAwMjQyNDhiNzQ3YWJhYjc2MGNmLi5kZTE3M2ExMzQ5ODI0YWY5MGZhZGNlNzgxOTBm
YmI4M2NjNDBlYjg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5j
bHVkZSAiQ0NUaHJlYWQuaCIKIAogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgor
I2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRp
dmVzLmg+CkBAIC02NCw2ICs2NSw3IEBAIHZvaWQqIENDVGhyZWFkOjpjb21wb3NpdG9yVGhyZWFk
U3RhcnQodm9pZCogdXNlcmRhdGEpCiAKIHZvaWQqIENDVGhyZWFkOjpydW5Mb29wKCkKIHsKKyAg
ICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWQ6OnJ1bkxvb3AiLCB0aGlzLCAwKTsKICAgICB7CiAgICAg
ICAgIC8vIFdhaXQgZm9yIENDVGhyZWFkOjpzdGFydCgpIHRvIGNvbXBsZXRlIHRvIGhhdmUgbV90
aHJlYWRJRAogICAgICAgICAvLyBlc3RhYmxpc2hlZCBiZWZvcmUgc3RhcnRpbmcgdGhlIG1haW4g
bG9vcC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGhyZWFkVGFzay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUaHJlYWRUYXNrLmgKaW5kZXggNzEyNDVkM2U0ZTBlY2U1MzUwNWEwZGVk
ZTc1MzY4ZWNjNmQwZmM0Ny4uOTFjNThlNWQyNWI3YmIyODZlMjE2YzRlMDY4Y2JlMTA5NTc4ZjE4
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaHJlYWRUYXNrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUaHJlYWRUYXNrLmgKQEAgLTI0LDkgKzI0LDkgQEAKICNpZm5kZWYgQ0NU
aHJlYWRUYXNrX2gKICNkZWZpbmUgQ0NUaHJlYWRUYXNrX2gKIAotI2luY2x1ZGUgIkNDVGhyZWFk
LmgiCiAjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRDb3BpZXIuaCIKICNpbmNsdWRlICJDcm9zc1RocmVh
ZFRhc2suaCIKKyNpbmNsdWRlICJjYy9DQ1RocmVhZC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3du
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwppbmRleCA5ZmFhNjhkNmI2ZDI1OWNjMTM5MTBhYmEzMGQyZTdiMTI2ZWYzNjliLi4zZTJi
N2QwN2Y2OGUyMzU5MjU4ZDYxZDJiODU5ZjIxMTA3ZGU0NmMyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwpAQCAtMSwzICsxLDEwMyBAQAorMjAxMS0wNS0xNyAgTmF0IER1Y2EgIDxuZHVjYUBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgW2Nocm9taXVtXSBJbXBsZW1lbnQgQ0NMYXllclRyZWVIb3N0IGFuZCBDQ0xheWVyVHJl
ZUhvc3RJbXBsIHBvcnRpb25zIG9mIHRocmVhZGVkIGNvbXBvc2l0b3IKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU4NDA4CisKKyAgICAgICAgUmVkaXJl
Y3QgaW52YWxpZGF0ZXMgYW5kIHNjaGVkdWxpbmcgaW50byBjb21wb3NpdG9yIHdoZW4gaW4KKyAg
ICAgICAgdGhyZWFkZWQgY29tcG9zaXRpbmcgbW9kZS4gQWRkIHN0cmVzcyB0ZXN0cyBmb3IgQ0NM
YXllclRyZWVIb3N0LgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogcHVibGlj
L1dlYldpZGdldC5oOgorICAgICAgICAqIHNyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUG9wdXBNZW51SW1wbDo6YW5pbWF0ZSk6CisgICAgICAgICogc3JjL1dl
YlBvcHVwTWVudUltcGwuaDoKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6YW5pbWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXdJbXBsOjpwYWludCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjphbmltYXRlQW5k
TGF5b3V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnVwZGF0ZUxheWVycyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjb21wb3NpdGUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3SW1wbDo6c2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpkb0NvbXBvc2l0ZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXdJbXBsOjpjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlld0ltcGw6OnJlYWxsb2NhdGVSZW5kZXJlcik6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXdJbXBsOjp1cGRhdGVMYXllclJlbmRlcmVyU2V0dGluZ3MpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3SW1wbDo6dXBkYXRlTGF5ZXJSZW5kZXJlclZpZXdwb3J0KToKKyAgICAgICAg
KiBzcmMvV2ViVmlld0ltcGwuaDoKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0
LmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3Q6OkNDTGF5ZXJU
cmVlSG9zdFRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0OjphbmltYXRl
QW5kTGF5b3V0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6YmVnaW5Db21t
aXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6YmVnaW5D
b21taXRPbk1haW5UaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0Ojpj
b21taXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6Y29t
bWl0Q29tcGxldGVPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVz
dDo6Y29tbWl0Q29tcGxldGVPbk1haW5UaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJl
ZUhvc3RUZXN0OjpkcmF3TGF5ZXJzQW5kUHJlc2VudE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RG
OjpDQ0xheWVyVHJlZUhvc3RUZXN0Ojp1cGRhdGVMYXllcnMpOgorICAgICAgICAoV1RGOjpDQ0xh
eWVyVHJlZUhvc3RUZXN0OjpvbkJlZ2luVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVl
SG9zdFRlc3Q6OmRvRW5kVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3Q6
Om9uRW5kVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3Q6OnJ1blRlc3Qp
OgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0Ojp0ZXN0VGltZW91dCk6CisgICAg
ICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0Q2xpZW50OjpNb2NrTGF5ZXJUcmVlSG9zdENsaWVu
dCk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0Q2xpZW50OjpjcmVhdGVMYXllclRy
ZWVIb3N0Q29udGV4dDNEKToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3RDbGllbnQ6
OmFuaW1hdGVBbmRMYXlvdXQpOgorICAgICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdENsaWVu
dDo6dXBkYXRlTGF5ZXJzKToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3RDb21taXR0
ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0Q29tbWl0dGVyOjpj
b21taXQpOgorICAgICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdENvbW1pdHRlcjo6TW9ja0xh
eWVyVHJlZUhvc3RDb21taXR0ZXIpOgorICAgICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdElt
cGw6OmNyZWF0ZSk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0SW1wbDo6YmVnaW5D
b21taXQpOgorICAgICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdEltcGw6OmNvbW1pdENvbXBs
ZXRlKToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzQW5k
UHJlc2VudCk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0SW1wbDo6TW9ja0xheWVy
VHJlZUhvc3RJbXBsKToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3RJbXBsUHJveHk6
OmNyZWF0ZSk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0SW1wbFByb3h5OjpjcmVh
dGVMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0SW1w
bFByb3h5OjpNb2NrTGF5ZXJUcmVlSG9zdEltcGxQcm94eSk6CisgICAgICAgIChXVEY6Ok1vY2tM
YXllclRyZWVIb3N0OjpNb2NrTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXVEY6Ok1vY2tMYXll
clRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVIb3N0SW1wbFByb3h5KToKKyAgICAgICAgKFdURjo6
TW9ja0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVycyk6CisgICAgICAgIChXVEY6Ok1vY2tMYXll
clRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVIb3N0Q29tbWl0dGVyKToKKyAgICAgICAgKFdURjo6
TW9ja0xheWVyVHJlZUhvc3Q6OmJlZ2luQ29tbWl0KToKKyAgICAgICAgKFdURjo6TW9ja0xheWVy
VHJlZUhvc3Q6OmNvbW1pdENvbXBsZXRlKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0
VGVzdDo6ZG9CZWdpblRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0Ojpl
bmRUZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQxOjpD
Q0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDEpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJl
ZUhvc3RUZXN0U2hvcnRsaXZlZDE6OmJlZ2luVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJU
cmVlSG9zdFRlc3RTaG9ydGxpdmVkMTo6YWZ0ZXJUZXN0KToKKyAgICAgICAgKFdURjo6VEVTVF9G
KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQyOjpDQ0xheWVy
VHJlZUhvc3RUZXN0U2hvcnRsaXZlZDIpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RU
ZXN0U2hvcnRsaXZlZDI6OmJlZ2luVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9z
dFRlc3RTaG9ydGxpdmVkMjo6YWZ0ZXJUZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVI
b3N0VGVzdFNob3J0bGl2ZWQzOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDMpOgorICAg
ICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDM6OmJlZ2luVGVzdCk6Cisg
ICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTaG9ydGxpdmVkMzo6YWZ0ZXJUZXN0KToK
KyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdENvbW1pdGluZ1dpdGhDb250aW51b3Vz
UmVkcmF3OjpDQ0xheWVyVHJlZUhvc3RUZXN0Q29tbWl0aW5nV2l0aENvbnRpbnVvdXNSZWRyYXcp
OgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0Q29tbWl0aW5nV2l0aENvbnRpbnVv
dXNSZWRyYXc6OmJlZ2luVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RD
b21taXRpbmdXaXRoQ29udGludW91c1JlZHJhdzo6Y29tbWl0Q29tcGxldGVPbkNDVGhyZWFkKToK
KyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdENvbW1pdGluZ1dpdGhDb250aW51b3Vz
UmVkcmF3OjpkcmF3TGF5ZXJzQW5kUHJlc2VudE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpD
Q0xheWVyVHJlZUhvc3RUZXN0Q29tbWl0aW5nV2l0aENvbnRpbnVvdXNSZWRyYXc6OmFmdGVyVGVz
dCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc0NvbW1pdDE6OkND
TGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc0NvbW1pdDEpOgorICAgICAgICAoV1RGOjpDQ0xheWVy
VHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQxOjpiZWdpblRlc3QpOgorICAgICAgICAoV1RGOjpD
Q0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQxOjpkcmF3TGF5ZXJzQW5kUHJlc2VudE9u
Q0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNDb21t
aXQxOjpjb21taXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVz
dFNldE5lZWRzQ29tbWl0MTo6YWZ0ZXJUZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVI
b3N0VGVzdFNldE5lZWRzQ29tbWl0Mjo6Q0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzQ29tbWl0
Mik6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc0NvbW1pdDI6OmJl
Z2luVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc0NvbW1p
dDI6OmRyYXdMYXllcnNBbmRQcmVzZW50T25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6OkNDTGF5
ZXJUcmVlSG9zdFRlc3RTZXROZWVkc0NvbW1pdDI6OmNvbW1pdE9uQ0NUaHJlYWQpOgorICAgICAg
ICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQyOjphZnRlclRlc3QpOgor
ICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNSZWRyYXc6OkNDTGF5ZXJU
cmVlSG9zdFRlc3RTZXROZWVkc1JlZHJhdyk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9z
dFRlc3RTZXROZWVkc1JlZHJhdzo6YmVnaW5UZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRy
ZWVIb3N0VGVzdFNldE5lZWRzUmVkcmF3OjpkcmF3TGF5ZXJzQW5kUHJlc2VudE9uQ0NUaHJlYWQp
OgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNSZWRyYXc6OmNvbW1p
dE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNS
ZWRyYXc6OmFmdGVyVGVzdCk6CisgICAgICAgICogdGVzdHMvQ0NUaHJlYWRUZXN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRFU1QpOgorCiAyMDExLTA1LTE2ICBBbmRyZXcgV2lsc29uICA8YXR3
aWxzb25AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI4
NjYyNS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IDA1NjdmYWQ0YjRjY2I0MTZh
N2JmNDRkOGJiMWNmMDE1YjM4MDIwNWMuLmI5OTQ5YjE4NWQyZjExMWY0Nzg2NzM0MzUzNDAwMmNl
NjM2MTE1MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtNTMsOCArNTMsMTAg
QEAKICAgICAgICAgXSwKICAgICAgICAgJ3dlYmtpdF91bml0dGVzdF9maWxlcyc6IFsKICAgICAg
ICAgICAgICd0ZXN0cy9BcmVuYVRlc3RIZWxwZXJzLmgnLAorICAgICAgICAgICAgJ3Rlc3RzL0ND
TGF5ZXJUcmVlSG9zdFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1RocmVhZFRhc2tU
ZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NUaHJlYWRUZXN0LmNwcCcsCisgICAgICAg
ICAgICAndGVzdHMvRHJhZ0ltYWdlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0lEQkJp
bmRpbmdVdGlsaXRpZXNUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvSURCS2V5UGF0aFRl
c3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9JREJMZXZlbERCQ29kaW5nVGVzdC5jcHAnLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0LmggYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaAppbmRleCAxMDE0M2UxMjll
N2ZkMGUxMmIyM2YyYjcyMDUyNzU3MTYxMmM4MmM0Li4xYTg5MTk0NjIwNjA1YzMwN2RjYWM2NGRi
ZWNhZjNmYTIzOTFmMTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJXaWRnZXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRn
ZXQuaApAQCAtNDcsNiArNDcsOSBAQCBzdHJ1Y3QgV2ViUmVjdDsKIHN0cnVjdCBXZWJTaXplOwog
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYlZlY3RvcjsKIAorLy8gRklYTUU6IHJlbW92
ZSB0aGlzIGRlZmluZSBvbmNlIHJlbmRlcl93aWRnZXQgaGFzIGJlZW4gY2hhbmdlZCB0byBpc3N1
ZSB0aHJlYWRlZCBjb21wb3NpdG9yIGNhbGxzCisjZGVmaW5lIFdFQldJREdFVF9IQVNfQU5JTUFU
RV9DSEFOR0VTIDEKKwogY2xhc3MgV2ViV2lkZ2V0IHsKIHB1YmxpYzoKICAgICAvLyBUaGlzIG1l
dGhvZCBjbG9zZXMgYW5kIGRlbGV0ZXMgdGhlIFdlYldpZGdldC4KQEAgLTU4LDE1ICs2MSwxNyBA
QCBwdWJsaWM6CiAgICAgLy8gQ2FsbGVkIHRvIHJlc2l6ZSB0aGUgV2ViV2lkZ2V0LgogICAgIHZp
cnR1YWwgdm9pZCByZXNpemUoY29uc3QgV2ViU2l6ZSYpID0gMDsKIAotICAgIC8vIENhbGxlZCB0
byB1cGRhdGUgaW1wZXJhdGl2ZSBhbmltYXRpb24gc3RhdGUuICBUaGlzIHNob3VsZCBiZSBjYWxs
ZWQgYmVmb3JlCi0gICAgLy8gcGFpbnQsIGFsdGhvdWdoIHRoZSBjbGllbnQgY2FuIHJhdGUtbGlt
aXQgdGhlc2UgY2FsbHMuCi0gICAgdmlydHVhbCB2b2lkIGFuaW1hdGUoKSA9IDA7CisgICAgLy8g
Q2FsbGVkIHRvIHVwZGF0ZSBpbXBlcmF0aXZlIGFuaW1hdGlvbiBzdGF0ZS4gVGhpcyBzaG91bGQg
YmUgY2FsbGVkIGJlZm9yZQorICAgIC8vIHBhaW50LCBhbHRob3VnaCB0aGUgY2xpZW50IGNhbiBy
YXRlLWxpbWl0IHRoZXNlIGNhbGxzLiBXaGVuCisgICAgLy8gZnJhbWVCZWdpblRpbWUgaXMgMC4w
LCB0aGUgV2ViV2lkZ2V0IHdpbGwgZGV0ZXJtaW5lIHRoZSBmcmFtZSBiZWdpbiB0aW1lCisgICAg
Ly8gaXRzZWxmLgorICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlKGRvdWJsZSBmcmFtZUJlZ2luVGlt
ZSkgPSAwOwogCiAgICAgLy8gQ2FsbGVkIHRvIGxheW91dCB0aGUgV2ViV2lkZ2V0LiAgVGhpcyBN
VVNUIGJlIGNhbGxlZCBiZWZvcmUgUGFpbnQsCiAgICAgLy8gYW5kIGl0IG1heSByZXN1bHQgaW4g
Y2FsbHMgdG8gV2ViV2lkZ2V0Q2xpZW50OjpkaWRJbnZhbGlkYXRlUmVjdC4KICAgICB2aXJ0dWFs
IHZvaWQgbGF5b3V0KCkgPSAwOwogCi0gICAgLy8gQ2FsbGVkIHRvIHBhaW50IHRoZSByZWN0YW5n
dWxhciByZWdpb24gd2l0aGluIHRoZSBXZWJXaWRnZXQgCisgICAgLy8gQ2FsbGVkIHRvIHBhaW50
IHRoZSByZWN0YW5ndWxhciByZWdpb24gd2l0aGluIHRoZSBXZWJXaWRnZXQKICAgICAvLyBvbnRv
IHRoZSBzcGVjaWZpZWQgY2FudmFzIGF0ICh2aWV3UG9ydC54LHZpZXdQb3J0LnkpLiBZb3UgTVVT
VCBjYWxsCiAgICAgLy8gTGF5b3V0IGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLiAgSXQgaXMg
b2theSB0byBjYWxsIHBhaW50CiAgICAgLy8gbXVsdGlwbGUgdGltZXMgb25jZSBsYXlvdXQgaGFz
IGJlZW4gY2FsbGVkLCBhc3N1bWluZyBubyBvdGhlcgpAQCAtNzUsMTEgKzgwLDE0IEBAIHB1Ymxp
YzoKICAgICAvLyB3YXJyYW50ZWQgYmVmb3JlIHBhaW50aW5nIGFnYWluKS4KICAgICB2aXJ0dWFs
IHZvaWQgcGFpbnQoV2ViQ2FudmFzKiwgY29uc3QgV2ViUmVjdCYgdmlld1BvcnQpID0gMDsKIAot
ICAgIC8vIFRyaWdnZXJzIGNvbXBvc2l0aW5nIG9mIHRoZSBjdXJyZW50IGxheWVycyBvbnRvIHRo
ZSBzY3JlZW4uCi0gICAgLy8gVGhlIGZpbmlzaCBhcmd1bWVudCBjb250cm9scyB3aGV0aGVyIHRo
ZSBjb21wb3NpdG9yIHdpbGwgd2FpdCBmb3IgdGhlCi0gICAgLy8gR1BVIHRvIGZpbmlzaCByZW5k
ZXJpbmcgYmVmb3JlIHJldHVybmluZy4gWW91IE1VU1QgY2FsbCBMYXlvdXQKLSAgICAvLyBiZWZv
cmUgY2FsbGluZyB0aGlzIG1ldGhvZCwgZm9yIHRoZSBzYW1lIHJlYXNvbnMgZGVzY3JpYmVkIGlu
Ci0gICAgLy8gdGhlIHBhaW50IG1ldGhvZCBhYm92ZS4KKyAgICAvLyBJbiBub24tdGhyZWFkZWQg
Y29tcG9zaXRpbmcgbW9kZSwgdHJpZ2dlcnMgY29tcG9zaXRpbmcgb2YgdGhlIGN1cnJlbnQKKyAg
ICAvLyBsYXllcnMgb250byB0aGUgc2NyZWVuLiBZb3UgTVVTVCBjYWxsIExheW91dCBiZWZvcmUg
Y2FsbGluZyB0aGlzIG1ldGhvZCwgZm9yIHRoZSBzYW1lCisgICAgLy8gcmVhc29ucyBkZXNjcmli
ZWQgaW4gdGhlIHBhaW50IG1ldGhvZCBhYm92ZQorICAgIC8vCisgICAgLy8gSW4gdGhyZWFkZWQg
Y29tcG9zaXRpbmcgbW9kZSwgaW5kaWNhdGVzIHRoYXQgdGhlIHdpZGdldCBzaG91bGQgdXBkYXRl
CisgICAgLy8gaXRzZWxmLCBmb3IgZXhhbXBsZSBkdWUgdG8gd2luZG93IGRhbWFnZS4gVGhlIHJl
ZHJhdyB3aWxsIGJlZ2luCisgICAgLy8gYXN5bmNocm9ub3VzbHkgYW5kIHBlcmZvcm0gbGF5b3V0
IGFuZCBhbmltYXRpb24gaW50ZXJuYWxseS4gRG8gbm90IGNhbGwKKyAgICAvLyBhbmltYXRlIG9y
IGxheW91dCBpbiB0aGlzIGNhc2UuCiAgICAgdmlydHVhbCB2b2lkIGNvbXBvc2l0ZShib29sIGZp
bmlzaCkgPSAwOwogCiAgICAgLy8gQ2FsbGVkIHRvIGluZm9ybSB0aGUgV2ViV2lkZ2V0IG9mIGEg
Y2hhbmdlIGluIHRoZW1lLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViUG9wdXBNZW51SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1
cE1lbnVJbXBsLmNwcAppbmRleCAwZjMxODkyZmQ4NzQ5NWU1NjUwNTdlYzlmYzFkYWIzMTBjNzhi
NGNiLi40YTdmNGEwYWNhOTA3ZmQ5YjVjNGU2ZDBlYzJhNmYwZWE1M2ZhMDdlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcApAQCAtMTUzLDcg
KzE1Myw3IEBAIHZvaWQgV2ViUG9wdXBNZW51SW1wbDo6cmVzaXplKGNvbnN0IFdlYlNpemUmIG5l
d1NpemUpCiAgICAgfQogfQogCi12b2lkIFdlYlBvcHVwTWVudUltcGw6OmFuaW1hdGUoKQordm9p
ZCBXZWJQb3B1cE1lbnVJbXBsOjphbmltYXRlKGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKIHsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1w
bC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5oCmluZGV4
IDVhZTFiNDhkYmUxNDM4NzE5ZWE3YTI1ZDA0NDNmY2QwNTFmNDcyMTcuLjk2N2M5ZTJmNzUyNjZm
NjM2NDk3ODc5YjZlODBmMzEwOWJjNWMxOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJQb3B1cE1lbnVJbXBsLmgKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBjbG9zZSgpOwogICAgIHZpcnR1YWwgV2ViU2l6ZSBzaXplKCkgeyByZXR1cm4g
bV9zaXplOyB9CiAgICAgdmlydHVhbCB2b2lkIHJlc2l6ZShjb25zdCBXZWJTaXplJik7Ci0gICAg
dmlydHVhbCB2b2lkIGFuaW1hdGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZShkb3VibGUg
ZnJhbWVCZWdpblRpbWUpOwogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKICAgICB2aXJ0dWFs
IHZvaWQgcGFpbnQoV2ViQ2FudmFzKiBjYW52YXMsIGNvbnN0IFdlYlJlY3QmIHJlY3QpOwogICAg
IHZpcnR1YWwgdm9pZCB0aGVtZUNoYW5nZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlZpZXdJbXBsLmNwcAppbmRleCA3OWFkODczN2E2MjAzYzY4OWJjYmNhNjQyNjUwNjQxY2Q0
NGZlNWY0Li5kNWFiMGJiMWM3NGRkZjc1NTA5ZGNiZWI0YWMwY2YyMDkxZjM3YjBlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC0xMDAxLDE2ICsxMDAx
LDIwIEBAIHZvaWQgV2ViVmlld0ltcGw6OnJlc2l6ZShjb25zdCBXZWJTaXplJiBuZXdTaXplKQog
I2VuZGlmCiB9CiAKLXZvaWQgV2ViVmlld0ltcGw6OmFuaW1hdGUoKQordm9pZCBXZWJWaWV3SW1w
bDo6YW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWUpCiB7CiAjaWYgRU5BQkxFKFJFUVVFU1Rf
QU5JTUFUSU9OX0ZSQU1FKQorICAgIC8vIEZJWE1FOiByZW1vdmUgdGhpcyBvbmNlIHJlbmRlcl93
aWRnZXQgaGFzIGJlZW4gbW9kaWZpZWQgdG8gcGFzcyBpbiBhCisgICAgLy8gZnJhbWVCZWdpblRp
bWUuCisgICAgaWYgKCFmcmFtZUJlZ2luVGltZSkKKyAgICAgICAgZnJhbWVCZWdpblRpbWUgPSBj
dXJyZW50VGltZSgpOwogICAgIFdlYkZyYW1lSW1wbCogd2ViZnJhbWUgPSBtYWluRnJhbWVJbXBs
KCk7CiAgICAgaWYgKHdlYmZyYW1lKSB7CiAgICAgICAgIEZyYW1lVmlldyogdmlldyA9IHdlYmZy
YW1lLT5mcmFtZVZpZXcoKTsKICAgICAgICAgaWYgKHZpZXcpIHsKICAgICAgICAgICAgIGlmICht
X2xheWVyUmVuZGVyZXIpCiAgICAgICAgICAgICAgICAgbV9sYXllclJlbmRlcmVyLT5zZXRJc0Fu
aW1hdGluZyh0cnVlKTsKLSAgICAgICAgICAgIHZpZXctPnNlcnZpY2VTY3JpcHRlZEFuaW1hdGlv
bnMoY29udmVydFNlY29uZHNUb0RPTVRpbWVTdGFtcChjdXJyZW50VGltZSgpKSk7CisgICAgICAg
ICAgICB2aWV3LT5zZXJ2aWNlU2NyaXB0ZWRBbmltYXRpb25zKGNvbnZlcnRTZWNvbmRzVG9ET01U
aW1lU3RhbXAoZnJhbWVCZWdpblRpbWUpKTsKICAgICAgICAgICAgIGlmIChtX2xheWVyUmVuZGVy
ZXIpCiAgICAgICAgICAgICAgICAgbV9sYXllclJlbmRlcmVyLT5zZXRJc0FuaW1hdGluZyhmYWxz
ZSk7CiAgICAgICAgIH0KQEAgLTEwODMsNiArMTA4NywxMCBAQCB2b2lkIFdlYlZpZXdJbXBsOjpw
YWludChXZWJDYW52YXMqIGNhbnZhcywgY29uc3QgV2ViUmVjdCYgcmVjdCkKIHsKICAgICBpZiAo
aXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpIHsKICNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgICAgICAvLyBG
SVhNRTogZG8gcmVhZGJhY2sgaW4gdGhyZWFkZWQgY29tcG9zaXRpbmcgbW9kZSByYXRoZXIgdGhh
biByZXR1cm5pbmcgbm90aGluZworICAgICAgICByZXR1cm47CisjZW5kaWYKICAgICAgICAgZG9D
b21wb3NpdGUoKTsKIAogICAgICAgICAvLyBJZiBhIGNhbnZhcyB3YXMgcGFzc2VkIGluLCB3ZSB1
c2UgaXQgdG8gZ3JhYiBhIGNvcHkgb2YgdGhlCkBAIC0xMTExLDE2ICsxMTE5LDMwIEBAIHZvaWQg
V2ViVmlld0ltcGw6OnRoZW1lQ2hhbmdlZCgpCiAgICAgdmlldy0+aW52YWxpZGF0ZVJlY3QoZGFt
YWdlZFJlY3QpOwogfQogCi12b2lkIFdlYlZpZXdJbXBsOjpjb21wb3NpdGUoYm9vbCBmaW5pc2gp
CisKK3ZvaWQgV2ViVmlld0ltcGw6OmFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5U
aW1lKQoreworICAgIGFuaW1hdGUoZnJhbWVCZWdpblRpbWUpOworICAgIGxheW91dCgpOworfQor
Cit2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVMYXllcnMoKQogewotI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKICAgICAvLyBVcGRhdGUgdGhlIGNvbXBvc2l0aW5nIHJlcXVpcmVtZW50
cyBmb3IgYWxsIGZyYW1lIGluIHRoZSB0cmVlIGJlZm9yZSBkb2luZyBhbnkgcGFpbnRpbmcKICAg
ICAvLyBhcyB0aGUgY29tcG9zaXRpbmcgcmVxdWlyZW1lbnRzIGZvciBhIFJlbmRlckxheWVyIHdp
dGhpbiBhIHN1YmZyYW1lIG1pZ2h0IGNoYW5nZS4KICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IHBh
Z2UoKS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNl
TmV4dCgpKQogICAgICAgICBmcmFtZS0+dmlldygpLT51cGRhdGVDb21wb3NpdGluZ0xheWVycygp
OwogICAgIHBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+c3luY0NvbXBvc2l0aW5nU3RhdGVJ
bmNsdWRpbmdTdWJmcmFtZXMoKTsKK30KIAordm9pZCBXZWJWaWV3SW1wbDo6Y29tcG9zaXRlKGJv
b2wgZmluaXNoKQoreworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpZiBVU0Uo
VEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgbV9sYXllclJlbmRlcmVyLT5zZXROZWVkc1JlZHJh
dygpOworI2Vsc2UKICAgICBUUkFDRV9FVkVOVCgiV2ViVmlld0ltcGw6OmNvbXBvc2l0ZSIsIHRo
aXMsIDApOworCiAgICAgaWYgKG1fcmVjcmVhdGluZ0dyYXBoaWNzQ29udGV4dCkgewogICAgICAg
ICAvLyByZWFsbG9jYXRlUmVuZGVyZXIgd2lsbCByZXF1ZXN0IGEgcmVwYWludCB3aGV0aGVyIG9y
IG5vdCBpdCBzdWNjZWVkZWQKICAgICAgICAgLy8gaW4gY3JlYXRpbmcgYSBuZXcgY29udGV4dC4K
QEAgLTExMzAsMTAgKzExNTIsNiBAQCB2b2lkIFdlYlZpZXdJbXBsOjpjb21wb3NpdGUoYm9vbCBm
aW5pc2gpCiAgICAgfQogICAgIGRvQ29tcG9zaXRlKCk7CiAKLSAgICAvLyBGaW5pc2ggaWYgcmVx
dWVzdGVkLgotICAgIGlmIChmaW5pc2gpCi0gICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+ZmluaXNo
KCk7Ci0KICAgICAvLyBQdXQgcmVzdWx0IG9uc2NyZWVuLgogICAgIG1fbGF5ZXJSZW5kZXJlci0+
cHJlc2VudCgpOwogCkBAIC0xMTQ5LDYgKzExNjcsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpjb21w
b3NpdGUoYm9vbCBmaW5pc2gpCiAgICAgICAgIHNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpOwog
ICAgIH0KICNlbmRpZgorI2VuZGlmCiB9CiAKIGNvbnN0IFdlYklucHV0RXZlbnQqIFdlYlZpZXdJ
bXBsOjptX2N1cnJlbnRJbnB1dEV2ZW50ID0gMDsKQEAgLTIzODUsNyArMjQwNCwxMiBAQCB2b2lk
IFdlYlZpZXdJbXBsOjpzZXRSb290R3JhcGhpY3NMYXllcihXZWJDb3JlOjpQbGF0Zm9ybUxheWVy
KiBsYXllcikKIAogdm9pZCBXZWJWaWV3SW1wbDo6c2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCkK
IHsKKyNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgaWYgKG1fbGF5ZXJSZW5kZXJl
cikKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5zZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOwor
I2Vsc2UKICAgICBtX2NsaWVudC0+c2NoZWR1bGVDb21wb3NpdGUoKTsKKyNlbmRpZgogfQogCiAK
QEAgLTI0NTcsMTYgKzI0ODEsOSBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmdBY3RpdmUoYm9vbCBhY3RpdmUpCiAKICAgICAgICAgbV9jbGllbnQtPmRpZEFj
dGl2YXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyh0cnVlKTsKICAgICB9IGVsc2UgewotICAgICAg
ICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBtX3RlbXBvcmFyeU9uc2NyZWVu
R3JhcGhpY3NDb250ZXh0M0QucmVsZWFzZSgpOwotICAgICAgICBpZiAoIWNvbnRleHQpIHsKLSAg
ICAgICAgICAgIGNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKGdldENvbXBvc2l0
b3JDb250ZXh0QXR0cmlidXRlcygpLCBtX3BhZ2UtPmNocm9tZSgpLCBHcmFwaGljc0NvbnRleHQz
RDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOwotICAgICAgICAgICAgaWYgKGNvbnRleHQp
Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVzaGFwZShzdGQ6Om1heCgxLCBtX3NpemUud2lk
dGgpLCBzdGQ6Om1heCgxLCBtX3NpemUuaGVpZ2h0KSk7Ci0gICAgICAgIH0KLQotCi0gICAgICAg
IG1fbGF5ZXJSZW5kZXJlciA9IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKGNvbnRleHQu
cmVsZWFzZSgpLCBXZWJWaWV3SW1wbENvbnRlbnRQYWludGVyOjpjcmVhdGUodGhpcykpOworICAg
ICAgICBtX2xheWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSh0aGlz
LCBXZWJWaWV3SW1wbENvbnRlbnRQYWludGVyOjpjcmVhdGUodGhpcykpOwogICAgICAgICBpZiAo
bV9sYXllclJlbmRlcmVyKSB7CisgICAgICAgICAgICB1cGRhdGVMYXllclJlbmRlcmVyU2V0dGlu
Z3MoKTsKICAgICAgICAgICAgIG1fY2xpZW50LT5kaWRBY3RpdmF0ZUFjY2VsZXJhdGVkQ29tcG9z
aXRpbmcodHJ1ZSk7CiAgICAgICAgICAgICBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2
ZSA9IHRydWU7CiAgICAgICAgICAgICBtX2NvbXBvc2l0b3JDcmVhdGlvbkZhaWxlZCA9IGZhbHNl
OwpAQCAtMjQ5MiwzNSArMjUwOSwzOSBAQCB2b2lkIFdlYlZpZXdJbXBsOjpkb0NvbXBvc2l0ZSgp
CiAgICAgaWYgKCFwYWdlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fbGF5ZXJSZW5kZXJl
ci0+c2V0Q29tcG9zaXRlT2Zmc2NyZWVuKHNldHRpbmdzKCktPmNvbXBvc2l0ZVRvVGV4dHVyZUVu
YWJsZWQoKSk7Ci0KLSAgICBDQ0hlYWRzVXBEaXNwbGF5KiBodWQgPSBtX2xheWVyUmVuZGVyZXIt
PmhlYWRzVXBEaXNwbGF5KCk7Ci0gICAgaHVkLT5zZXRTaG93RlBTQ291bnRlcihzZXR0aW5ncygp
LT5zaG93RlBTQ291bnRlcigpKTsKLSAgICBodWQtPnNldFNob3dQbGF0Zm9ybUxheWVyVHJlZShz
ZXR0aW5ncygpLT5zaG93UGxhdGZvcm1MYXllclRyZWUoKSk7CisgICAgbV9sYXllclJlbmRlcmVy
LT51cGRhdGVMYXllcnMoKTsKKyAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdMYXllcnMoKTsKK30K
IAotICAgIG1fbGF5ZXJSZW5kZXJlci0+dXBkYXRlQW5kRHJhd0xheWVycygpOworUGFzc1JlZlB0
cjxHcmFwaGljc0NvbnRleHQzRD4gV2ViVmlld0ltcGw6OmNyZWF0ZUxheWVyVHJlZUhvc3RDb250
ZXh0M0QoKQoreworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IG1fdGVt
cG9yYXJ5T25zY3JlZW5HcmFwaGljc0NvbnRleHQzRC5yZWxlYXNlKCk7CisgICAgaWYgKCFjb250
ZXh0KSB7CisgICAgICAgIGNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKGdldENv
bXBvc2l0b3JDb250ZXh0QXR0cmlidXRlcygpLCBtX3BhZ2UtPmNocm9tZSgpLCBHcmFwaGljc0Nv
bnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlc2hhcGUoc3RkOjptYXgoMSwgbV9zaXplLndpZHRo
KSwgc3RkOjptYXgoMSwgbV9zaXplLmhlaWdodCkpOworICAgIH0KKyAgICByZXR1cm4gY29udGV4
dDsKIH0KIAogdm9pZCBXZWJWaWV3SW1wbDo6cmVhbGxvY2F0ZVJlbmRlcmVyKCkKIHsKLSAgICBS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG5ld0NvbnRleHQgPSBtX3RlbXBvcmFyeU9uc2NyZWVu
R3JhcGhpY3NDb250ZXh0M0QuZ2V0KCk7Ci0gICAgV2ViR3JhcGhpY3NDb250ZXh0M0QqIHdlYkNv
bnRleHQgPSBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpleHRyYWN0V2ViR3JhcGhpY3NDb250
ZXh0M0QobmV3Q29udGV4dC5nZXQoKSk7Ci0gICAgaWYgKCFuZXdDb250ZXh0IHx8ICF3ZWJDb250
ZXh0IHx8IHdlYkNvbnRleHQtPmlzQ29udGV4dExvc3QoKSkKLSAgICAgICAgbmV3Q29udGV4dCA9
IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoCi0gICAgICAgICAgICBnZXRDb21wb3NpdG9yQ29u
dGV4dEF0dHJpYnV0ZXMoKSwgbV9wYWdlLT5jaHJvbWUoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJl
bmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKICAgICAvLyBHcmFwaGljc0NvbnRleHQzRDo6Y3Jl
YXRlIG1pZ2h0IGZhaWwgYW5kIHJldHVybiAwLCBpbiB0aGF0IGNhc2UgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpjcmVhdGUgd2lsbCBhbHNvIHJldHVybiAwLgotICAgIFJlZlB0cjxMYXllclJlbmRl
cmVyQ2hyb21pdW0+IGxheWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0
ZShuZXdDb250ZXh0LCBXZWJWaWV3SW1wbENvbnRlbnRQYWludGVyOjpjcmVhdGUodGhpcykpOwor
ICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVyUmVuZGVyZXIgPSBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCBXZWJWaWV3SW1wbENvbnRlbnRQYWludGVyOjpj
cmVhdGUodGhpcykpOwogCiAgICAgLy8gUmVhdHRhY2ggdGhlIHJvb3QgbGF5ZXIuICBDaGlsZCBs
YXllcnMgd2lsbCBnZXQgcmVhdHRhY2hlZCBhcyBhIHNpZGUgZWZmZWN0IG9mIHVwZGF0ZUxheWVy
c1JlY3Vyc2l2ZS4KICAgICBpZiAobGF5ZXJSZW5kZXJlcikgeworCiAgICAgICAgIG1fbGF5ZXJS
ZW5kZXJlci0+dHJhbnNmZXJSb290TGF5ZXIobGF5ZXJSZW5kZXJlci5nZXQoKSk7CiAgICAgICAg
IG1fbGF5ZXJSZW5kZXJlciA9IGxheWVyUmVuZGVyZXI7CisgICAgICAgIHVwZGF0ZUxheWVyUmVu
ZGVyZXJTZXR0aW5ncygpOworCiAgICAgICAgIC8vIEZJWE1FOiBJbiBNYWNPUyBuZXdDb250ZXh0
LT5yZXNoYXBlIG1ldGhvZCBuZWVkcyB0byBiZSBjYWxsZWQgdG8KICAgICAgICAgLy8gYWxsb2Nh
dGUgSU9TdXJmYWNlcy4gQWxsIGNhbGxzIHRvIGNyZWF0ZSBhIGNvbnRleHQgZm9sbG93ZWQgYnkK
ICAgICAgICAgLy8gcmVzaGFwZSBzaG91bGQgcmVhbGx5IGJlIGV4dHJhY3RlZCBpbnRvIG9uZSBm
dW5jdGlvbjsgaXQgaXMgbm90CiAgICAgICAgIC8vIGltbWVkaWF0ZWx5IG9idmlvdXMgdGhhdCBH
cmFwaGljc0NvbnRleHQzRCBvYmplY3Qgd2lsbCBub3QKICAgICAgICAgLy8gZnVuY3Rpb24gcHJv
cGVybHkgdW50aWwgaXRzIHJlc2hhcGUgbWV0aG9kIGlzIGNhbGxlZC4KLSAgICAgICAgbmV3Q29u
dGV4dC0+cmVzaGFwZShzdGQ6Om1heCgxLCBtX3NpemUud2lkdGgpLCBzdGQ6Om1heCgxLCBtX3Np
emUuaGVpZ2h0KSk7CisgICAgICAgIGxheWVyUmVuZGVyZXItPmNvbnRleHQoKS0+cmVzaGFwZShz
dGQ6Om1heCgxLCBtX3NpemUud2lkdGgpLCBzdGQ6Om1heCgxLCBtX3NpemUuaGVpZ2h0KSk7CiAg
ICAgICAgIHNldFJvb3RHcmFwaGljc0xheWVyKG1fbGF5ZXJSZW5kZXJlci0+cm9vdExheWVyKCkp
OwogICAgICAgICAvLyBGb3JjZXMgVmlld0hvc3RNc2dfRGlkQWN0aXZhdGVBY2NlbGVyYXRlZENv
bXBvc2l0aW5nIHRvIGJlIHNlbnQgc28KICAgICAgICAgLy8gdGhhdCB0aGUgYnJvd3NlciBwcm9j
ZXNzIGNhbiByZWFjcXVpcmUgc3VyZmFjZXMuCkBAIC0yNTMwLDEwICsyNTUxLDE4IEBAIHZvaWQg
V2ViVmlld0ltcGw6OnJlYWxsb2NhdGVSZW5kZXJlcigpCiB9CiAjZW5kaWYKIAotdm9pZCBXZWJW
aWV3SW1wbDo6dXBkYXRlTGF5ZXJSZW5kZXJlclZpZXdwb3J0KCkKK3ZvaWQgV2ViVmlld0ltcGw6
OnVwZGF0ZUxheWVyUmVuZGVyZXJTZXR0aW5ncygpCiB7CiAgICAgQVNTRVJUKG1fbGF5ZXJSZW5k
ZXJlcik7CisgICAgbV9sYXllclJlbmRlcmVyLT5zZXRDb21wb3NpdGVPZmZzY3JlZW4oc2V0dGlu
Z3MoKS0+Y29tcG9zaXRlVG9UZXh0dXJlRW5hYmxlZCgpKTsKKworICAgIENDSGVhZHNVcERpc3Bs
YXkqIGh1ZCA9IG1fbGF5ZXJSZW5kZXJlci0+aGVhZHNVcERpc3BsYXkoKTsKKyAgICBodWQtPnNl
dFNob3dGUFNDb3VudGVyKHNldHRpbmdzKCktPnNob3dGUFNDb3VudGVyKCkpOworICAgIGh1ZC0+
c2V0U2hvd1BsYXRmb3JtTGF5ZXJUcmVlKHNldHRpbmdzKCktPnNob3dQbGF0Zm9ybUxheWVyVHJl
ZSgpKTsKK30KIAordm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlTGF5ZXJSZW5kZXJlclZpZXdwb3J0
KCkKK3sKICAgICBpZiAoIXBhZ2UoKSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAppbmRleCBmMjkwODI3NjlmM2ZiMmQyNjhlMGE0N2Jk
ZTM5N2UxNzQ4YWJjNjMxLi5iMjIyZDhhZTU4NjM2Yjg5NWY4ZDZhMjMzYjZkZmUzNWY1ZGU3MmZi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKQEAgLTU1LDYgKzU1
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ2hyb21pdW1EYXRhT2JqZWN0OwogY2xh
c3MgRG9jdW1lbnRMb2FkZXI7CiBjbGFzcyBGcmFtZTsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNE
OwogY2xhc3MgSGlzdG9yeUl0ZW07CiBjbGFzcyBIaXRUZXN0UmVzdWx0OwogY2xhc3MgS2V5Ym9h
cmRFdmVudDsKQEAgLTg2LDEzICs4NywxMyBAQCBjbGFzcyBXZWJNb3VzZVdoZWVsRXZlbnQ7CiBj
bGFzcyBXZWJTZXR0aW5nc0ltcGw7CiBjbGFzcyBXZWJUb3VjaEV2ZW50OwogCi1jbGFzcyBXZWJW
aWV3SW1wbCA6IHB1YmxpYyBXZWJWaWV3LCBwdWJsaWMgUmVmQ291bnRlZDxXZWJWaWV3SW1wbD4g
eworY2xhc3MgV2ViVmlld0ltcGwgOiBwdWJsaWMgV2ViVmlldywgcHVibGljIFdlYkNvcmU6OkND
TGF5ZXJUcmVlSG9zdENsaWVudCwgcHVibGljIFJlZkNvdW50ZWQ8V2ViVmlld0ltcGw+IHsKIHB1
YmxpYzoKICAgICAvLyBXZWJXaWRnZXQgbWV0aG9kczoKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2Uo
KTsKICAgICB2aXJ0dWFsIFdlYlNpemUgc2l6ZSgpIHsgcmV0dXJuIG1fc2l6ZTsgfQogICAgIHZp
cnR1YWwgdm9pZCByZXNpemUoY29uc3QgV2ViU2l6ZSYpOwotICAgIHZpcnR1YWwgdm9pZCBhbmlt
YXRlKCk7CisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGUoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsK
ICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFdlYkNh
bnZhcyosIGNvbnN0IFdlYlJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgdGhlbWVDaGFuZ2VkKCk7
CkBAIC0xOTksNiArMjAwLDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGluYWN0aXZlRm9yZWdyb3VuZENvbG9yKTsKICAgICB2aXJ0dWFs
IHZvaWQgcGVyZm9ybUN1c3RvbUNvbnRleHRNZW51QWN0aW9uKHVuc2lnbmVkIGFjdGlvbik7CiAK
KyAgICAvLyBDQ0xheWVyVHJlZUhvc3RDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUFu
ZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgp
OworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVMYXllcnMoKTsKKwogICAgIC8vIFdlYlZpZXdJbXBs
CiAKICAgICB2b2lkIHNldElnbm9yZUlucHV0RXZlbnRzKGJvb2wgbmV3VmFsdWUpOwpAQCAtMzQ3
LDYgKzM1Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFJvb3RMYXllck5lZWRzRGlzcGxheSgp
OwogICAgIHZvaWQgc2Nyb2xsUm9vdExheWVyUmVjdChjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBz
Y3JvbGxEZWx0YSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpOwogICAgIHZvaWQg
aW52YWxpZGF0ZVJvb3RMYXllclJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZv
aWQgZG9VcGRhdGVBbmRDb21wb3NpdGUoKTsKICNlbmRpZgogCiAgICAgLy8gUmV0dXJucyB0aGUg
b25zY3JlZW4gM0QgY29udGV4dCB1c2VkIGJ5IHRoZSBjb21wb3NpdG9yLiBUaGlzIGlzCkBAIC00
MDksMTEgKzQxNiwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBXZWJQb2ludCYgc2NyZWVuUG9pbnQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERyYWdBY3Rpb24pOwogCisKICNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmdBY3RpdmUoYm9vbCk7CiAgICAgdm9pZCBkb0NvbXBvc2l0ZSgpOwogICAgIHZv
aWQgZG9QaXhlbFJlYWRiYWNrVG9DYW52YXMoV2ViQ2FudmFzKiwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYpOwogICAgIHZvaWQgcmVhbGxvY2F0ZVJlbmRlcmVyKCk7CisgICAgdm9pZCB1cGRhdGVM
YXllclJlbmRlcmVyU2V0dGluZ3MoKTsKICAgICB2b2lkIHVwZGF0ZUxheWVyUmVuZGVyZXJWaWV3
cG9ydCgpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ4NTQ4MDY1ODRmZjMzZWExMzVj
NmQwOWI1NTJmNzA5ZWQwMTY3MTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCkBAIC0wLDAgKzEsNTM4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisg
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoVEhSRUFERURfQ09N
UE9TSVRJTkcpCisKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKKworI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5o
IgorI2luY2x1ZGUgImNjL0NDTWFpblRocmVhZFRhc2suaCIKKyNpbmNsdWRlICJjYy9DQ1RocmVh
ZFRhc2suaCIKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHdlYmtpdC9zdXBw
b3J0L3dlYmtpdF9zdXBwb3J0Lmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSB7
CisKK2NsYXNzIE1vY2tMYXllclRyZWVIb3N0OworY2xhc3MgTW9ja0xheWVyVHJlZUhvc3RDbGll
bnQ7CitjbGFzcyBNb2NrTGF5ZXJUcmVlSG9zdEltcGw7CisKKy8vIFRoZSBDQ0xheWVyVHJlZUhv
c3RUZXN0IHJ1bnMgd2l0aCB0aGUgbWFpbiBsb29wIHJ1bm5pbmcuIEl0IGluc3RhbnRpYXRlcyBh
IHNpbmdsZSBNb2NrTGF5ZXJUcmVlSG9zdCBhbmQgYXNzb2NpYXRlZAorLy8gTW9ja0xheWVyVHJl
ZUhvc3RJbXBsL01vY2tMYXllclRyZWVIb3N0Q2xpZW50LgorLy8KKy8vIGJlZ2luVGVzdCgpIGlz
IGNhbGxlZCBvbmNlIHRoZSBtYWluIG1lc3NhZ2UgbG9vcCBpcyBydW5uaW5nIGFuZCB0aGUgbGF5
ZXIgdHJlZSBob3N0IGlzIGluaXRpYWxpemVkLgorLy8KKy8vIEtleSBzdGFnZXMgb2YgdGhlIGRy
YXdpbmcgbG9vcCwgZS5nLiBkcmF3aW5nIG9yIGNvbW1pdGluZywgcmVkaXJlY3QgdG8gQ0NMYXll
clRyZWVIb3N0VGVzdCBtZXRob2RzIG9mIHNpbWlsYXIgbmFtZXMuCisvLyBUbyB0cmFjayB0aGUg
Y29tbWl0IHByb2Nlc3MsIG92ZXJyaWRlIHRoZXNlIGZ1bmN0aW9ucy4KKy8vCisvLyBUaGUgdGVz
dCBjb250aW51ZXMgdW50aWwgc29tZW9uZSBjYWxscyBlbmRUZXN0LiBlbmRUZXN0IGNhbiBiZSBj
YWxsZWQgb24gYW55IHRocmVhZCwgYnV0IGJlIGF3YXJlIHRoYXQKKy8vIGVuZGluZyB0aGUgdGVz
dCBpcyBhbiBhc3luY2hyb25vdXMgcHJvY2Vzcy4KK2NsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3Qg
OiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7CitwdWJsaWM6CisgICAgQ0NMYXllclRyZWVIb3N0VGVz
dCgpCisgICAgICAgIDogbV9iZWdpbm5pbmcoZmFsc2UpCisgICAgICAgICwgbV9lbmRXaGVuQmVn
aW5SZXR1cm5zKGZhbHNlKQorICAgICAgICAsIG1fcnVubmluZyhmYWxzZSkKKyAgICAgICAgLCBt
X3RpbWVkT3V0KGZhbHNlKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBhZnRlclRlc3QoKSA9IDA7
CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBh
bmltYXRlQW5kTGF5b3V0KE1vY2tMYXllclRyZWVIb3N0Q2xpZW50KiBsYXllclRyZWVIb3N0LCBk
b3VibGUgZnJhbWVCZWdpblRpbWUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdE9u
Q0NUaHJlYWQoTW9ja0xheWVyVHJlZUhvc3RJbXBsKiBsYXllclRyZWVIb3N0SW1wbCkgeyB9Cisg
ICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0T25NYWluVGhyZWFkKE1vY2tMYXllclRyZWVIb3N0
KiBsYXllclRyZWVIb3N0KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0T25DQ1RocmVhZChN
b2NrTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCwgTW9ja0xheWVyVHJlZUhvc3RJbXBsKiBs
YXllclRyZWVIb3N0SW1wbCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGNvbW1pdENvbXBsZXRlT25D
Q1RocmVhZChNb2NrTGF5ZXJUcmVlSG9zdEltcGwqIGxheWVyVHJlZUhvc3RJbXBsKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgY29tbWl0Q29tcGxldGVPbk1haW5UaHJlYWQoTW9ja0xheWVyVHJlZUhv
c3QqIGxheWVyVHJlZUhvc3QpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkcmF3TGF5ZXJzQW5kUHJl
c2VudE9uQ0NUaHJlYWQoTW9ja0xheWVyVHJlZUhvc3RJbXBsKiBsYXllclRyZWVIb3N0SW1wbCkg
eyB9CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUxheWVycyhNb2NrTGF5ZXJUcmVlSG9zdCogbGF5
ZXJUcmVlSG9zdCkgeyB9CisKKyAgICB2b2lkIGVuZFRlc3QoKTsKKworcHJvdGVjdGVkOgorICAg
IHZvaWQgZG9CZWdpblRlc3QoKTsKKworICAgIHN0YXRpYyB2b2lkIG9uQmVnaW5UZXN0KHZvaWQq
IHNlbGYpCisgICAgeworICAgICAgICBzdGF0aWNfY2FzdDxDQ0xheWVyVHJlZUhvc3RUZXN0Kj4o
c2VsZiktPmRvQmVnaW5UZXN0KCk7CisgICAgfQorCisgICAgdm9pZCBkb0VuZFRlc3QoKQorICAg
IHsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBvbkVuZFRlc3Qodm9pZCogc2VsZikKKyAgICB7
CisgICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgICAgIENDTGF5ZXJUcmVlSG9z
dFRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxDQ0xheWVyVHJlZUhvc3RUZXN0Kj4oc2VsZik7Cisg
ICAgICAgIHRlc3QtPm1fbGF5ZXJUcmVlSG9zdC5jbGVhcigpOworICAgICAgICB0ZXN0LT5tX2Ns
aWVudC5jbGVhcigpOworICAgICAgICB3ZWJraXRfc3VwcG9ydDo6UXVpdE1lc3NhZ2VMb29wKCk7
CisgICAgfQorCisgICAgdm9pZCBydW5UZXN0KCkKKyAgICB7CisgICAgICAgIHdlYmtpdF9zdXBw
b3J0OjpQb3N0RGVsYXllZFRhc2soQ0NMYXllclRyZWVIb3N0VGVzdDo6b25CZWdpblRlc3QsIHN0
YXRpY19jYXN0PHZvaWQqPih0aGlzKSwgMCk7CisgICAgICAgIHdlYmtpdF9zdXBwb3J0OjpQb3N0
RGVsYXllZFRhc2soQ0NMYXllclRyZWVIb3N0VGVzdDo6dGVzdFRpbWVvdXQsIHN0YXRpY19jYXN0
PHZvaWQqPih0aGlzKSwgNTAwMCk7CisgICAgICAgIHdlYmtpdF9zdXBwb3J0OjpSdW5NZXNzYWdl
TG9vcCgpOworICAgICAgICBtX3J1bm5pbmcgPSBmYWxzZTsKKyAgICAgICAgYm9vbCB0aW1lZE91
dCA9IG1fdGltZWRPdXQ7IC8vIFNhdmUgd2hldGhlciB3ZSdyZSB0aW1lZCBvdXQgaW4gY2FzZSBS
dW5BbGxQZW5kaW5nTWVzc2FnZXMgaGFzIHRoZSB0aW1lb3V0LgorICAgICAgICB3ZWJraXRfc3Vw
cG9ydDo6UnVuQWxsUGVuZGluZ01lc3NhZ2VzKCk7CisgICAgICAgIGlmICh0aW1lZE91dCkgewor
ICAgICAgICAgICAgcHJpbnRmKCJUZXN0IHRpbWVkIG91dCIpOworICAgICAgICAgICAgRkFJTCgp
IDw8ICJUZXN0IHRpbWVkIG91dCI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgYWZ0ZXJUZXN0KCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgdGVzdFRpbWVvdXQo
dm9pZCogc2VsZikKKyAgICB7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdFRlc3QqIHRlc3QgPSBz
dGF0aWNfY2FzdDxDQ0xheWVyVHJlZUhvc3RUZXN0Kj4oc2VsZik7CisgICAgICAgIGlmICghdGVz
dC0+bV9ydW5uaW5nKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0ZXN0LT5tX3RpbWVk
T3V0ID0gdHJ1ZTsKKyAgICAgICAgdGVzdC0+ZW5kVGVzdCgpOworICAgIH0KKworICAgIE11dGV4
IG1fdHJhY2VzTG9jazsKKyAgICBWZWN0b3I8c3RkOjpzdHJpbmc+IG1fdHJhY2VzOworCisgICAg
T3duUHRyPE1vY2tMYXllclRyZWVIb3N0Q2xpZW50PiBtX2NsaWVudDsKKyAgICBSZWZQdHI8TW9j
a0xheWVyVHJlZUhvc3Q+IG1fbGF5ZXJUcmVlSG9zdDsKKworcHJpdmF0ZToKKyAgICBib29sIG1f
YmVnaW5uaW5nOworICAgIGJvb2wgbV9lbmRXaGVuQmVnaW5SZXR1cm5zOworICAgIGJvb2wgbV9y
dW5uaW5nOworICAgIGJvb2wgbV90aW1lZE91dDsKK307CisKK2NsYXNzIE1vY2tMYXllclRyZWVI
b3N0Q2xpZW50IDogcHVibGljIENDTGF5ZXJUcmVlSG9zdENsaWVudCB7CitwdWJsaWM6CisgICAg
TW9ja0xheWVyVHJlZUhvc3RDbGllbnQoQ0NMYXllclRyZWVIb3N0VGVzdCogdGVzdCkgOiBtX3Rl
c3QodGVzdCkgeyB9CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+
IGNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmPEdyYXBoaWNzQ29udGV4dDNEPigwKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
YW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpCisgICAgeworICAgICAgICBt
X3Rlc3QtPmFuaW1hdGVBbmRMYXlvdXQodGhpcywgZnJhbWVCZWdpblRpbWUpOworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVMYXllcnMoKQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdCogbV90ZXN0OworfTsKKworY2xhc3MgTW9ja0xheWVy
VHJlZUhvc3RDb21taXR0ZXIgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxNb2NrTGF5ZXJUcmVlSG9zdENvbW1pdHRlcj4g
Y3JlYXRlKENDTGF5ZXJUcmVlSG9zdFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRQdHIobmV3IE1vY2tMYXllclRyZWVIb3N0Q29tbWl0dGVyKHRlc3QpKTsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0KENDTGF5ZXJUcmVlSG9zdCogaG9zdCwgQ0NMYXllclRy
ZWVIb3N0SW1wbCogaG9zdEltcGwpCisgICAgeworICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21t
aXR0ZXI6OmNvbW1pdChob3N0LCBob3N0SW1wbCk7CisgICAgICAgIG1fdGVzdC0+Y29tbWl0T25D
Q1RocmVhZChyZWludGVycHJldF9jYXN0PE1vY2tMYXllclRyZWVIb3N0Kj4oaG9zdCksIHJlaW50
ZXJwcmV0X2Nhc3Q8TW9ja0xheWVyVHJlZUhvc3RJbXBsKj4oaG9zdEltcGwpKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgTW9ja0xheWVyVHJlZUhvc3RDb21taXR0ZXIoQ0NMYXllclRyZWVIb3N0
VGVzdCogdGVzdCkgOiBtX3Rlc3QodGVzdCkgeyB9CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdCog
bV90ZXN0OworfTsKKworY2xhc3MgTW9ja0xheWVyVHJlZUhvc3RJbXBsIDogcHVibGljIENDTGF5
ZXJUcmVlSG9zdEltcGwgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPE1vY2tMYXll
clRyZWVIb3N0SW1wbD4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqIGNsaWVudCwg
Q0NMYXllclRyZWVIb3N0VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0
cihuZXcgTW9ja0xheWVyVHJlZUhvc3RJbXBsKGNsaWVudCwgdGVzdCkpOworICAgIH0KKworICAg
IHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdCgpCisgICAgeworICAgICAgICBDQ0xheWVyVHJlZUhv
c3RJbXBsOjpiZWdpbkNvbW1pdCgpOworICAgICAgICBtX3Rlc3QtPmJlZ2luQ29tbWl0T25DQ1Ro
cmVhZCh0aGlzKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q29tcGxldGUoKQor
ICAgIHsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29tbWl0Q29tcGxldGUoKTsKKyAg
ICAgICAgbV90ZXN0LT5jb21taXRDb21wbGV0ZU9uQ0NUaHJlYWQodGhpcyk7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNBbmRQcmVzZW50KCkKKyAgICB7CisgICAgICAgIG1f
dGVzdC0+ZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhyZWFkKHRoaXMpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBNb2NrTGF5ZXJUcmVlSG9zdEltcGwoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVu
dCogY2xpZW50LCBDQ0xheWVyVHJlZUhvc3RUZXN0KiB0ZXN0KQorICAgICAgICAgICAgOiBDQ0xh
eWVyVHJlZUhvc3RJbXBsKGNsaWVudCkKKyAgICAgICAgICAgICwgbV90ZXN0KHRlc3QpCisgICAg
eworICAgIH0KKworICAgIENDTGF5ZXJUcmVlSG9zdFRlc3QqIG1fdGVzdDsKK307CisKK2NsYXNz
IE1vY2tMYXllclRyZWVIb3N0SW1wbFByb3h5IDogcHVibGljIENDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8TW9ja0xheWVyVHJlZUhvc3RJ
bXBsUHJveHk+IGNyZWF0ZShDQ0xheWVyVHJlZUhvc3QqIGhvc3QsIENDTGF5ZXJUcmVlSG9zdFRl
c3QqIHRlc3QpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE1vY2tMYXllclRy
ZWVIb3N0SW1wbFByb3h5KGhvc3QsIHRlc3QpKTsKKyAgICB9CisKKyAgICBQYXNzT3duUHRyPEND
TGF5ZXJUcmVlSG9zdEltcGw+IGNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBNb2NrTGF5ZXJUcmVlSG9zdEltcGw6OmNyZWF0ZSh0aGlzLCBtX3Rlc3QpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBNb2NrTGF5ZXJUcmVlSG9zdEltcGxQcm94eShDQ0xheWVy
VHJlZUhvc3QqIGhvc3QsIENDTGF5ZXJUcmVlSG9zdFRlc3QqIHRlc3QpCisgICAgICAgIDogQ0NM
YXllclRyZWVIb3N0SW1wbFByb3h5KGhvc3QpCisgICAgICAgICwgbV90ZXN0KHRlc3QpIHsgfQor
CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdCogbV90ZXN0OworfTsKKworY2xhc3MgTW9ja0xheWVy
VHJlZUhvc3QgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0IHsKK3B1YmxpYzoKKyAgICBNb2NrTGF5
ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVudCwgQ0NMYXllclRyZWVIb3N0
VGVzdCogdGVzdCkKKyAgICAgICAgOiBDQ0xheWVyVHJlZUhvc3QoY2xpZW50KQorICAgICAgICAs
IG1fdGVzdCh0ZXN0KSB7IH0KKworICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHk+IGNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsUHJveHkoKQorICAgIHsKKyAgICAg
ICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eT4gcHJveHkgPSBNb2NrTGF5ZXJUcmVl
SG9zdEltcGxQcm94eTo6Y3JlYXRlKHRoaXMsIG1fdGVzdCk7CisgICAgICAgIHByb3h5LT5zdGFy
dCgpOworICAgICAgICByZXR1cm4gcHJveHkucmVsZWFzZSgpOworICAgIH0KKworICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVMYXllcnMoKQorICAgIHsKKyAgICAgICAgbV90ZXN0LT51cGRhdGVMYXll
cnModGhpcyk7CisgICAgfQorCisgICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9z
dENvbW1pdHRlcj4gY3JlYXRlTGF5ZXJUcmVlSG9zdENvbW1pdHRlcigpCisgICAgeworICAgICAg
ICByZXR1cm4gTW9ja0xheWVyVHJlZUhvc3RDb21taXR0ZXI6OmNyZWF0ZShtX3Rlc3QpOworICAg
IH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdCgpCisgICAgeworICAgICAgICBDQ0xh
eWVyVHJlZUhvc3Q6OmJlZ2luQ29tbWl0KCk7CisgICAgICAgIG1fdGVzdC0+YmVnaW5Db21taXRP
bk1haW5UaHJlYWQodGhpcyk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGNvbW1pdENvbXBs
ZXRlKCkKKyAgICB7CisgICAgICAgIG1fdGVzdC0+Y29tbWl0Q29tcGxldGVPbk1haW5UaHJlYWQo
dGhpcyk7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0Q29tcGxldGUoKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdCogbV90ZXN0OworfTsKKwordm9p
ZCBDQ0xheWVyVHJlZUhvc3RUZXN0Ojpkb0JlZ2luVGVzdCgpCit7CisgICAgQVNTRVJUKCFtX3J1
bm5pbmcpOworICAgIG1fcnVubmluZyA9IHRydWU7CisgICAgbV9jbGllbnQgPSBhZG9wdFB0cihu
ZXcgTW9ja0xheWVyVHJlZUhvc3RDbGllbnQodGhpcykpOworICAgIG1fbGF5ZXJUcmVlSG9zdCA9
IGFkb3B0UmVmKG5ldyBNb2NrTGF5ZXJUcmVlSG9zdChtX2NsaWVudC5nZXQoKSwgdGhpcykpOwor
ICAgIG1fbGF5ZXJUcmVlSG9zdC0+aW5pdCgpOworICAgIG1fYmVnaW5uaW5nID0gdHJ1ZTsKKyAg
ICBiZWdpblRlc3QoKTsKKyAgICBtX2JlZ2lubmluZyA9IGZhbHNlOworICAgIGlmIChtX2VuZFdo
ZW5CZWdpblJldHVybnMpCisgICAgICAgIG9uRW5kVGVzdChzdGF0aWNfY2FzdDx2b2lkKj4odGhp
cykpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdFRlc3Q6OmVuZFRlc3QoKQoreworICAgIC8v
IElmIHdlIGFyZSBjYWxsZWQgZnJvbSB0aGUgQ0NUaHJlYWQsIHJlLWNhbGwgZW5kVGVzdCBvbiB0
aGUgbWFpbiB0aHJlYWQuCisgICAgaWYgKCFpc01haW5UaHJlYWQoKSkKKyAgICAgICAgQ0NNYWlu
VGhyZWFkOjpwb3N0VGFzayhjcmVhdGVNYWluVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVI
b3N0VGVzdDo6ZW5kVGVzdCkpOworICAgIGVsc2UgeworICAgICAgICAvLyBGb3IgdGhlIGNhc2Ug
d2hlcmUgd2UgZW5kVGVzdCBkdXJpbmcgYmVnaW5UZXN0KCksIHNldCBhIGZsYWcgdG8gaW5kaWNh
dGUgdGhhdAorICAgICAgICAvLyB0aGUgdGVzdCBzaG91bGQgZW5kIHRoZSBzZWNvbmQgYmVnaW5U
ZXN0IHJlZ2FpbnMgY29udHJvbC4KKyAgICAgICAgaWYgKG1fYmVnaW5uaW5nKQorICAgICAgICAg
ICAgbV9lbmRXaGVuQmVnaW5SZXR1cm5zID0gdHJ1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgb25FbmRUZXN0KHN0YXRpY19jYXN0PHZvaWQqPih0aGlzKSk7CisgICAgfQorfQorCisvLyBT
aG9ydGxpdmVkIGxheWVyVHJlZUhvc3RzIHNob3VsZG4ndCBkaWUuCitjbGFzcyBDQ0xheWVyVHJl
ZUhvc3RUZXN0U2hvcnRsaXZlZDEgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdCB7CitwdWJs
aWM6CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQxKCkgeyB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgYmVnaW5UZXN0KCkKKyAgICB7CisgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkKKyAgICB7CisgICAgfQorfTsKK1RFU1RfRihD
Q0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDEsIHJ1bikKK3sKKyAgICBydW5UZXN0KCk7Cit9
CisKKy8vIFNob3J0bGl2ZWQgbGF5ZXJUcmVlSG9zdHMgc2hvdWxkbid0IGRpZSB3aXRoIGEgY29t
bWl0IGluIGZsaWdodC4KK2NsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3RTaG9ydGxpdmVkMiA6IHB1
YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0IHsKK3B1YmxpYzoKKyAgICBDQ0xheWVyVHJlZUhvc3RU
ZXN0U2hvcnRsaXZlZDIoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKQorICAg
IHsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOwor
ICAgICAgICBlbmRUZXN0KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFmdGVyVGVzdCgp
CisgICAgeworICAgIH0KK307CitURVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQy
LCBydW4pCit7CisgICAgcnVuVGVzdCgpOworfQorCisvLyBTaG9ydGxpdmVkIGxheWVyVHJlZUhv
c3RzIHNob3VsZG4ndCBkaWUgd2l0aCBhIHJlZHJhdyBpbiBmbGlnaHQuCitjbGFzcyBDQ0xheWVy
VHJlZUhvc3RUZXN0U2hvcnRsaXZlZDMgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdCB7Citw
dWJsaWM6CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQzKCkgeyB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkKKyAgICB7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+
c2V0TmVlZHNSZWRyYXcoKTsKKyAgICAgICAgZW5kVGVzdCgpOworICAgIH0KKworICAgIHZpcnR1
YWwgdm9pZCBhZnRlclRlc3QoKQorICAgIHsKKyAgICB9Cit9OworVEVTVF9GKENDTGF5ZXJUcmVl
SG9zdFRlc3RTaG9ydGxpdmVkMywgcnVuKQoreworICAgIHJ1blRlc3QoKTsKK30KKworLy8gQ29u
c3RhbnRseSByZWRyYXdpbmcgbGF5ZXJUcmVlSG9zdHMgc2hvdWxkbid0IGRpZSB3aGVuIHRoZXkg
Y29tbWl0CitjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0Q29tbWl0aW5nV2l0aENvbnRpbnVvdXNS
ZWRyYXcgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdCB7CitwdWJsaWM6CisgICAgQ0NMYXll
clRyZWVIb3N0VGVzdENvbW1pdGluZ1dpdGhDb250aW51b3VzUmVkcmF3KCkKKyAgICAgICAgOiBt
X251bUNvbXBsZXRlQ29tbWl0cygwKQorICAgICAgICAsIG1fbnVtRHJhd3MoMCkKKyAgICB7Cisg
ICAgfQorCisgICAgdmlydHVhbCB2b2lkIGJlZ2luVGVzdCgpCisgICAgeworICAgICAgICBtX2xh
eWVyVHJlZUhvc3QtPnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgICAgIGVuZFRlc3Qo
KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q29tcGxldGVPbkNDVGhyZWFkKE1v
Y2tMYXllclRyZWVIb3N0SW1wbCogbGF5ZXJUcmVlSG9zdEltcGwpCisgICAgeworICAgICAgICBt
X251bUNvbXBsZXRlQ29tbWl0cysrOworICAgICAgICBpZiAobV9udW1Db21wbGV0ZUNvbW1pdHMg
PT0gMikKKyAgICAgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
ZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhyZWFkKE1vY2tMYXllclRyZWVIb3N0SW1wbCogbGF5
ZXJUcmVlSG9zdEltcGwpCisgICAgeworICAgICAgICBpZiAobV9udW1EcmF3cyA9PSAxKQorICAg
ICAgICAgICAgbGF5ZXJUcmVlSG9zdEltcGwtPnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7Cisg
ICAgICAgIG1fbnVtRHJhd3MrKzsKKyAgICAgICAgbGF5ZXJUcmVlSG9zdEltcGwtPnNldE5lZWRz
UmVkcmF3KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFmdGVyVGVzdCgpCisgICAgewor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBpbnQgbV9udW1Db21wbGV0ZUNvbW1pdHM7CisgICAgaW50
IG1fbnVtRHJhd3M7Cit9OworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RDb21taXRpbmdXaXRo
Q29udGludW91c1JlZHJhdywgcnVuKQoreworICAgIHJ1blRlc3QoKTsKK30KKworLy8gVHdvIHNl
dE5lZWRzQ29tbWl0cyBpbiBhIHJvdyBzaG91bGQgbGVhZCB0byBhdCBsZWFzdCAxIGNvbW1pdCBh
bmQgYXQgbGVhc3QgMQorLy8gZHJhdyB3aXRoIGZyYW1lIDAuCitjbGFzcyBDQ0xheWVyVHJlZUhv
c3RUZXN0U2V0TmVlZHNDb21taXQxIDogcHVibGljIENDTGF5ZXJUcmVlSG9zdFRlc3QgeworcHVi
bGljOgorICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc0NvbW1pdDEoKQorICAgICAgICA6
IG1fbnVtQ29tbWl0cygwKQorICAgICAgICAsIG1fbnVtRHJhd3MoMCkKKyAgICB7CisgICAgfQor
CisgICAgdmlydHVhbCB2b2lkIGJlZ2luVGVzdCgpCisgICAgeworICAgICAgICBtX2xheWVyVHJl
ZUhvc3QtPnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9z
dC0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
ZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhyZWFkKE1vY2tMYXllclRyZWVIb3N0SW1wbCogbGF5
ZXJUcmVlSG9zdEltcGwpCisgICAgeworICAgICAgICBtX251bURyYXdzKys7CisgICAgICAgIGlm
ICghbGF5ZXJUcmVlSG9zdEltcGwtPnNvdXJjZUZyYW1lTnVtYmVyKCkpCisgICAgICAgICAgICBl
bmRUZXN0KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGNvbW1pdE9uQ0NUaHJlYWQoTW9j
a0xheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QsIE1vY2tMYXllclRyZWVIb3N0SW1wbCogaW1w
bCkKKyAgICB7CisgICAgICAgIG1fbnVtQ29tbWl0cysrOworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCBhZnRlclRlc3QoKQorICAgIHsKKyAgICAgICAgRVhQRUNUX0dFKDEsIG1fbnVtQ29tbWl0
cyk7CisgICAgICAgIEVYUEVDVF9HRSgxLCBtX251bURyYXdzKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgaW50IG1fbnVtQ29tbWl0czsKKyAgICBpbnQgbV9udW1EcmF3czsKK307CitURVNUX0Yo
Q0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzQ29tbWl0MSwgcnVuKQoreworICAgIHJ1blRlc3Qo
KTsKK30KKworLy8gQSBzZXROZWVkc0NvbW1pdCBzaG91bGQgbGVhZCB0byAxIGNvbW1pdC4gSXNz
dWluZyBhIHNlY29uZCBjb21taXQgYWZ0ZXIgdGhhdAorLy8gZmlyc3QgY29tbWl0dGVkIGZyYW1l
IGRyYXdzIHNob3VsZCBsZWFkIHRvIGFub3RoZXIgY29tbWl0LgorY2xhc3MgQ0NMYXllclRyZWVI
b3N0VGVzdFNldE5lZWRzQ29tbWl0MiA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0IHsKK3B1
YmxpYzoKKyAgICBDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQyKCkKKyAgICAgICAg
OiBtX251bUNvbW1pdHMoMCkKKyAgICAgICAgLCBtX251bURyYXdzKDApCisgICAgeworICAgIH0K
KworICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKQorICAgIHsKKyAgICAgICAgbV9sYXllclRy
ZWVIb3N0LT5zZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCBkcmF3TGF5ZXJzQW5kUHJlc2VudE9uQ0NUaHJlYWQoTW9ja0xheWVyVHJlZUhvc3RJbXBs
KiBsYXllclRyZWVIb3N0SW1wbCkKKyAgICB7CisgICAgICAgIGlmICghbGF5ZXJUcmVlSG9zdElt
cGwtPnNvdXJjZUZyYW1lTnVtYmVyKCkpCisgICAgICAgICAgICBsYXllclRyZWVIb3N0SW1wbC0+
c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICAgICAgZWxzZSBpZiAobGF5ZXJUcmVlSG9z
dEltcGwtPnNvdXJjZUZyYW1lTnVtYmVyKCkgPT0gMSkKKyAgICAgICAgICAgIGVuZFRlc3QoKTsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0T25DQ1RocmVhZChNb2NrTGF5ZXJUcmVl
SG9zdCogbGF5ZXJUcmVlSG9zdCwgTW9ja0xheWVyVHJlZUhvc3RJbXBsKiBpbXBsKQorICAgIHsK
KyAgICAgICAgbV9udW1Db21taXRzKys7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFmdGVy
VGVzdCgpCisgICAgeworICAgICAgICBFWFBFQ1RfRVEoMiwgbV9udW1Db21taXRzKTsKKyAgICAg
ICAgRVhQRUNUX0dFKDIsIG1fbnVtRHJhd3MpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBpbnQg
bV9udW1Db21taXRzOworICAgIGludCBtX251bURyYXdzOworfTsKK1RFU1RfRihDQ0xheWVyVHJl
ZUhvc3RUZXN0U2V0TmVlZHNDb21taXQyLCBydW4pCit7CisgICAgcnVuVGVzdCgpOworfQorCisv
LyAxIHNldE5lZWRzUmVkcmF3IGFmdGVyIHRoZSBmaXJzdCBjb21taXQgaGFzIGNvbXBsZXRlZCBz
aG91bGQgbGVhZCB0byAxCisvLyBhZGRpdGlvbmFsIGRyYXcuCitjbGFzcyBDQ0xheWVyVHJlZUhv
c3RUZXN0U2V0TmVlZHNSZWRyYXcgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdCB7CitwdWJs
aWM6CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzUmVkcmF3KCkKKyAgICAgICAgOiBt
X251bUNvbW1pdHMoMCkKKyAgICAgICAgLCBtX251bURyYXdzKDApCisgICAgeworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhyZWFkKE1vY2tMYXllclRyZWVIb3N0SW1w
bCogaW1wbCkKKyAgICB7CisgICAgICAgIEVYUEVDVF9FUSgwLCBpbXBsLT5zb3VyY2VGcmFtZU51
bWJlcigpKTsKKyAgICAgICAgaWYgKCFtX251bURyYXdzKQorICAgICAgICAgICAgaW1wbC0+c2V0
TmVlZHNSZWRyYXcoKTsgLy8gcmVkcmF3IGFnYWluIHRvIHZlcmlmeSB0aGF0IHRoZSBzZWNvbmQg
cmVkcmF3IGRvZXNudCBjb21taXQuCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVuZFRlc3Qo
KTsKKyAgICAgICAgbV9udW1EcmF3cysrOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBjb21t
aXRPbkNDVGhyZWFkKE1vY2tMYXllclRyZWVIb3N0KiBsYXllclRyZWVIb3N0LCBNb2NrTGF5ZXJU
cmVlSG9zdEltcGwqIGltcGwpCisgICAgeworICAgICAgICBtX251bUNvbW1pdHMrKzsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkKKyAgICB7CisgICAgICAgIEVYUEVDVF9H
RSgyLCBtX251bURyYXdzKTsKKyAgICAgICAgRVhQRUNUX0VRKDEsIG1fbnVtQ29tbWl0cyk7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIGludCBtX251bUNvbW1pdHM7CisgICAgaW50IG1fbnVtRHJh
d3M7Cit9OworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc1JlZHJhdywgcnVuKQor
eworICAgIHJ1blRlc3QoKTsKK30KKworfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmIC8vIFVTRShU
SFJFQURFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NUaHJlYWRUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NU
aHJlYWRUZXN0LmNwcAppbmRleCAwOWM0MTkzZGE5MjJiNWM3OTViZjY4MTZhMmJjNTcwNDFhZDFl
ZDhlLi40YzczNGQ5NmVkMTNkY2EzOGFkNzQ4NmIyOTcxNTE2OGYyNzk5ZGRhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGhyZWFkVGVzdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RocmVhZFRlc3QuY3BwCkBAIC01MSw2ICs1MSw3
IEBAIHB1YmxpYzoKIFRFU1QoQ0NUaHJlYWRUZXN0LCBwaW5nUG9uZ1VzaW5nQ29uZGl0aW9uKQog
ewogICAgIE93blB0cjxDQ1RocmVhZD4gdGhyZWFkID0gQ0NUaHJlYWQ6OmNyZWF0ZSgpOworCiAg
ICAgUGluZ1BvbmdVc2luZ0NvbmRpdGlvbiB0YXJnZXQ7CiAgICAgQ0NDb21wbGV0aW9uRXZlbnQg
Y29tcGxldGlvbjsKICAgICB0aHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzaygmdGFy
Z2V0LCAmUGluZ1BvbmdVc2luZ0NvbmRpdGlvbjo6cGluZywgCmRpZmYgLS1naXQgYS9Ub29scy9D
aGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZjI3YjdiNjdlZmJiOGIzNmQ5ZjIxYjAz
ODAwNzczMjk4M2JjMGExZC4uNTYzYTIwOGJiODMxNGM0NTgxZmJiYjNkYWQ1ODQ0ODAwZjQ5OWNk
ZCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDEzIEBACisyMDExLTA1LTE3ICBOYXQgRHVjYSAgPG5kdWNhQGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21p
dW1dIEltcGxlbWVudCBDQ0xheWVyVHJlZUhvc3QgYW5kIENDTGF5ZXJUcmVlSG9zdEltcGwgcG9y
dGlvbnMgb2YgdGhyZWFkZWQgY29tcG9zaXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg0MDgKKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1dlYlZpZXdIb3N0LmNwcDoKKyAgICAgICAgKFdlYlZpZXdIb3N0OjpwYWludEludmFs
aWRhdGVkUmVnaW9uKToKKwogMjAxMS0wNS0xNiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KZGlmZiAtLWdpdCBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcCBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcAppbmRleCBjMDFjZGQ2OTg1NWIwZWVl
ODA5NmJjODkyYTc0MzhjMGY2OGUzNTRjLi4xMDQ1OTBmNjM4ZTMwMmE0ZDEyZGRmMmQxNGM5N2U4
ZmUwNDdiZjVlIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJW
aWV3SG9zdC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hv
c3QuY3BwCkBAIC0xNDg2LDcgKzE0ODYsNyBAQCB2b2lkIFdlYlZpZXdIb3N0OjpwYWludFJlY3Qo
Y29uc3QgV2ViUmVjdCYgcmVjdCkKIHZvaWQgV2ViVmlld0hvc3Q6OnBhaW50SW52YWxpZGF0ZWRS
ZWdpb24oKQogewogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKLSAgICB3ZWJX
aWRnZXQoKS0+YW5pbWF0ZSgpOworICAgIHdlYldpZGdldCgpLT5hbmltYXRlKDAuMCk7CiAjZW5k
aWYKICAgICB3ZWJXaWRnZXQoKS0+bGF5b3V0KCk7CiAgICAgV2ViU2l6ZSB3aWRnZXRTaXplID0g
d2ViV2lkZ2V0KCktPnNpemUoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93982</attachid>
            <date>2011-05-18 14:06:06 -0700</date>
            <delta_ts>2011-06-23 16:50:58 -0700</delta_ts>
            <desc>more rebasing.</desc>
            <filename>bug-58408-20110518140605.patch</filename>
            <type>text/plain</type>
            <size>88642</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxMjdmZDNiN2VlNWRkMzI5NTQzODA1NjAwZDlkZDM0Y2ZlZTg0MjFjLi44
ZDRlNzhmMTU0ZTlkMGFkMGQ1MDc5NDJkYjc2YmUwZmJhOGFkMzYwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsOTMgQEAKKzIwMTEtMDUtMTcgIE5hdCBEdWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1
bV0gSW1wbGVtZW50IENDTGF5ZXJUcmVlSG9zdCBhbmQgQ0NMYXllclRyZWVIb3N0SW1wbCBwb3J0
aW9ucyBvZiB0aHJlYWRlZCBjb21wb3NpdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01ODQwOAorCisgICAgICAgIENyZWF0ZSBDQ0xheWVyVHJlZUhv
c3QgYW5kIENDTGF5ZXJUcmVlSG9zdEltcGwsIHdoaWNoIGFyZSB0aGUgbWFpbgorICAgICAgICB0
aHJlYWQgYW5kIGNvbXBvc2l0b3IgdGhyZWFkIGhhbHZlcyBvZiBhIGNvbXBvc2l0ZWQgdmlldy4g
Q29tbXVuaWNhdGlvbgorICAgICAgICBiZXR3ZWVuIHRoZSB0d28gaXMgYmFzZWQgb24gdGhlIGRl
c2lnbiB1c2VkIGluIEZpbGVTdHJlYW1Qcm94eS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToK
KyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9UcmFjZUV2ZW50Lmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0Vmlld3BvcnQpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bUltcGw6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsOjpkcmF3TGF5ZXJzQW5kUHJlc2Vu
dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsOjpMYXllclJl
bmRlcmVyQ2hyb21pdW1JbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJv
bWl1bUltcGw6OmRyYXdMYXllcnNPbk1haW5UaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJSZW5kZXJlckNocm9taXVtSW1wbFByb3h5OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbFByb3h5OjpjcmVhdGVMYXllclRyZWVIb3N0SW1wbCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsUHJveHk6OkxheWVy
UmVuZGVyZXJDaHJvbWl1bUltcGxQcm94eSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRl
cmVyQ2hyb21pdW06OmNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsUHJveHkpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NIZWFkc1VwRGlzcGxheTo6c2V0U2hvd0ZQU0NvdW50ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NIZWFkc1VwRGlzcGxheTo6c2V0U2hvd1BsYXRmb3JtTGF5ZXJU
cmVlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBE
aXNwbGF5Lmg6CisgICAgICAgIChXZWJDb3JlOjpDQ0hlYWRzVXBEaXNwbGF5OjpjdXJyZW50RnJh
bWVOdW1iZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdDo6Q0NMYXllclRyZWVIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdDo6aW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6On5DQ0xheWVy
VHJlZUhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpiZWdpbkNvbW1p
dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNvbW1pdENvbXBsZXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0ZUFuZExheW91dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZUxheWVyVHJlZUhvc3RDb21t
aXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpzZXROZWVkc0NvbW1p
dEFuZFJlZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnNldE5lZWRz
UmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlTGF5ZXJz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3QuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NUaHJlYWQuY3BwLgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojpm
cmFtZU51bWJlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0Q29tbWl0dGVyLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuY3BwLgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyOjpjb21taXQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5oOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5j
cHAuCisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI6OkNDTGF5ZXJU
cmVlSG9zdENvbW1pdHRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyVHJlZUhvc3RJbXBsOjp+Q0NMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpiZWdpbkNvbW1pdCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb21taXRDb21wbGV0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNldE5lZWRzUmVkcmF3KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmg6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGhyZWFkLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQ6
On5DQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdEltcGw6OmZyYW1lTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGw6OnNvdXJjZUZyYW1lTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdEltcGw6OnNldFNvdXJjZUZyYW1lTnVtYmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6Q0NMYXllclRyZWVI
b3N0SW1wbFByb3h5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eTo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojp+
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGxQcm94eTo6aXNTdGFydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGxQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc1JlZHJhdyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnN0b3ApOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpwb3N0RHJhd0xheWVyc1Rhc2tPbkNDVGhyZWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6cmVxdWVzdEZy
YW1lQW5kQ29tbWl0T25DQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHk6OmlzTWFpblRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJl
ZUhvc3RJbXBsUHJveHk6OmlzQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21taXQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpjb21taXRPbkNDVGhyZWFkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc0Nv
bW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0SW1wbFByb3h5OjpzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppbml0SW1wbE9uQ0NUaHJlYWQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2Vk
T25DQ1RocmVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbFByb3h5Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0SW1wbFByb3h5Ojpob3N0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ01haW5UaHJlYWRUYXNrLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWQ6
OnJ1bkxvb3ApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhy
ZWFkVGFzay5oOgorCiAyMDExLTA1LTE3ICBKZXJlbXkgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmlu
ZGV4IDJkNjhkOGJjNjFjZTdiMjg1YjA3NzcwMmUzNTJlNTE1MDdiNzk1MTkuLjI0ZjJlYzk1ZDE4
ZWQ1ZmYyNDNiZWU2YjZhZjYxYWJmNGZhY2FlMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTQwODcs
NiArNDA4NywxNCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJJbXBsLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJTb3J0ZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyU29ydGVyLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIu
Y3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RDb21taXR0ZXIuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCcsCisgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5
LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0SW1wbFByb3h5LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTWFpblRocmVhZC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWRUYXNrLmgnLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vVHJhY2VFdmVudC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vVHJhY2VFdmVudC5oCmluZGV4IGZmOGZiZWNkOTMwNWZmYTQ5
ZWRkODdkMWVkMTY1M2ZmY2E4M2FiMTcuLmMyM2YyODQwMjY2M2ZiMDkwYWZkNzY0ZWM2YzJhMjFl
YzdjMjJlMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Ry
YWNlRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9UcmFjZUV2
ZW50LmgKQEAgLTI2LDYgKzI2LDcgQEAKICNkZWZpbmUgVHJhY2VFdmVudF9oCiAKICNpbmNsdWRl
ICJQbGF0Zm9ybUJyaWRnZS5oIgorI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgogCiAvLyBJ
bXBsZW1lbnRhdGlvbiBkZXRhaWw6IHRyYWNlIGV2ZW50IG1hY3JvcyBjcmVhdGUgdGVtcG9yYXJ5
IHZhcmlhYmxlcwogLy8gdG8ga2VlcCBpbnN0cnVtZW50YXRpb24gb3ZlcmhlYWQgbG93LiBUaGVz
ZSBtYWNyb3MgZ2l2ZSBlYWNoIHRlbXBvcmFyeQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5jcHAKaW5kZXggMjA4Nzc3ZWRlM2U0OGMxZmRiMGJiYTAyYjRkZjNiMzQyYjg2Njg1MC4u
YTFkMTBiYTM0MTBiMjgyMDFjMGJkN2U1Zjk1YmQxNDAzZTlhMmFlMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC00OCw2ICs0OCw4IEBACiAjaW5jbHVkZSAiVHJh
Y2VFdmVudC5oIgogI2luY2x1ZGUgIldlYkdMTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgImNj
L0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgorI2lu
Y2x1ZGUgImNjL0NDTWFpblRocmVhZFRhc2suaCIKICNpZiBVU0UoU0tJQSkKICNpbmNsdWRlICJO
YXRpdmVJbWFnZVNraWEuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCkBAIC05
NCwyMSArOTYsMjUgQEAgc3RhdGljIGJvb2wgaXNTY2FsZU9yVHJhbnNsYXRpb24oY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIG0pCiAKIH0KIAotUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hy
b21pdW0+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKFBhc3NSZWZQdHI8R3JhcGhpY3ND
b250ZXh0M0Q+IGNvbnRleHQsIFBhc3NPd25QdHI8VGlsZVBhaW50SW50ZXJmYWNlPiBjb250ZW50
UGFpbnQpCitQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpjcmVhdGUoQ0NMYXllclRyZWVIb3N0Q2xpZW50KiBjbGllbnQsIFBhc3NPd25QdHI8
VGlsZVBhaW50SW50ZXJmYWNlPiBjb250ZW50UGFpbnQpCiB7CisgICAgUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiBjb250ZXh0ID0gY2xpZW50LT5jcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNE
KCk7CiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFJlZlB0cjxM
YXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVyUmVuZGVyZXIoYWRvcHRSZWYobmV3IExheWVyUmVu
ZGVyZXJDaHJvbWl1bShjb250ZXh0LCBjb250ZW50UGFpbnQpKSk7CisgICAgUmVmUHRyPExheWVy
UmVuZGVyZXJDaHJvbWl1bT4gbGF5ZXJSZW5kZXJlcihhZG9wdFJlZihuZXcgTGF5ZXJSZW5kZXJl
ckNocm9taXVtKGNsaWVudCwgY29udGV4dCwgY29udGVudFBhaW50KSkpOworICAgIGxheWVyUmVu
ZGVyZXItPmluaXQoKTsKICAgICBpZiAoIWxheWVyUmVuZGVyZXItPmhhcmR3YXJlQ29tcG9zaXRp
bmcoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICByZXR1cm4gbGF5ZXJSZW5kZXJlci5yZWxl
YXNlKCk7CiB9CiAKLUxheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVt
KFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsCitMYXllclJlbmRlcmVyQ2hy
b21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1bShDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVu
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQYXNzT3duUHRyPFRpbGVQYWludEludGVyZmFjZT4gY29udGVu
dFBhaW50KQotICAgIDogbV92aWV3cG9ydFNjcm9sbFBvc2l0aW9uKEludFBvaW50KC0xLCAtMSkp
CisgICAgOiBDQ0xheWVyVHJlZUhvc3QoY2xpZW50KQorICAgICwgbV92aWV3cG9ydFNjcm9sbFBv
c2l0aW9uKEludFBvaW50KC0xLCAtMSkpCiAgICAgLCBtX3Jvb3RMYXllcigwKQogICAgICwgbV9y
b290TGF5ZXJDb250ZW50UGFpbnQoY29udGVudFBhaW50KQogICAgICwgbV9jdXJyZW50U2hhZGVy
KDApCkBAIC0xOTIsMTAgKzE5OCwxMyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0
Vmlld3BvcnQoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlYwogICAgICAg
ICBtX2N1cnJlbnRSZW5kZXJTdXJmYWNlID0gMDsKICAgICAgICAgbV9yb290TGF5ZXJDb250ZW50
VGlsZXItPmludmFsaWRhdGVFbnRpcmVMYXllcigpOwogICAgIH0KKyAgICBzZXROZWVkc0NvbW1p
dEFuZFJlZHJhdygpOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQW5k
RHJhd0xheWVycygpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzKCkK
IHsKKyAgICBDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVycygpOworCiAgICAgLy8gRklYTUU6
IHVzZSB0aGUgZnJhbWUgYmVnaW4gdGltZSBmcm9tIHRoZSBvdmVyYWxsIGNvbXBvc2l0b3Igc2No
ZWR1bGVyLgogICAgIC8vIFRoaXMgdmFsdWUgaXMgY3VycmVudGx5IGluYWNjZXNzaWJsZSBiZWNh
dXNlIGl0IGlzIHVwIGluIENocm9taXVtJ3MKICAgICAvLyBSZW5kZXJXaWRnZXQuCkBAIC0yMTcs
MTAgKzIyNiwxNCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQW5kRHJhd0xh
eWVycygpCiAgICAgICAgIG1fcm9vdENDTGF5ZXJJbXBsID0gVHJlZVN5bmNocm9uaXplcjo6c3lu
Y2hyb25pemVUcmVlcyhtX3Jvb3RMYXllci5nZXQoKSwgbV9yb290Q0NMYXllckltcGwuZ2V0KCkp
OwogICAgIH0KIAotICAgIExheWVyTGlzdCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwotCi0gICAg
dXBkYXRlTGF5ZXJzKHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIG1fY29tcHV0ZWRSZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0ID0gYWRvcHRQdHIobmV3IExheWVyTGlzdCgpKTsKKyAgICB1cGRh
dGVMYXllcnMoKm1fY29tcHV0ZWRSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKK30KIAordm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoKQoreworICAgIEFTU0VSVChtX2hhcmR3
YXJlQ29tcG9zaXRpbmcpOworICAgIEFTU0VSVChtX2NvbXB1dGVkUmVuZGVyU3VyZmFjZUxheWVy
TGlzdCk7CiAgICAgLy8gQmVmb3JlIGRyYXdMYXllcnM6CiAgICAgaWYgKGhhcmR3YXJlQ29tcG9z
aXRpbmcoKSAmJiBtX2NvbnRleHRTdXBwb3J0c0xhdGNoKSB7CiAgICAgICAgIC8vIEZJWE1FOiBU
aGUgbXVsdGl0aHJlYWRlZCBjb21wb3NpdG9yIGNhc2Ugd2lsbCBub3Qgd29yayBhcyBsb25nIGFz
CkBAIC0yNDYsNyArMjU5LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUFu
ZERyYXdMYXllcnMoKQogICAgICAgICBtX2NoaWxkQ29udGV4dHNXZXJlQ29waWVkID0gZmFsc2U7
CiAgICAgfQogCi0gICAgZHJhd0xheWVycyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBk
cmF3TGF5ZXJzKCptX2NvbXB1dGVkUmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAKICAgICBtX3Rl
eHR1cmVNYW5hZ2VyLT51bnByb3RlY3RBbGxUZXh0dXJlcygpOwogCkBAIC0xMTQxLDYgKzExNTQs
NzQgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmR1bXBSZW5kZXJTdXJmYWNlcyhUZXh0
U3RyZWFtJiB0cywgaW50IGluZGVudCwgTGF5ZXIKICAgICAgICAgZHVtcFJlbmRlclN1cmZhY2Vz
KHRzLCBpbmRlbnQsIGxheWVyLT5jaGlsZHJlbigpW2ldLmdldCgpKTsKIH0KIAorY2xhc3MgTGF5
ZXJSZW5kZXJlckNocm9taXVtSW1wbCA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RJbXBsIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsPiBj
cmVhdGUoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogY2xpZW50LCBMYXllclJlbmRlcmVyQ2hy
b21pdW0qIGxheWVyUmVuZGVyZXIpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IExheWVyUmVuZGVyZXJDaHJvbWl1bUltcGwoY2xpZW50LCBsYXllclJlbmRlcmVyKSk7CisgICAg
fQorCisgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNBbmRQcmVzZW50KCkKKyAgICB7CisgICAg
ICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CisgICAgICAgIGJvb2wgY29udGV4dExv
c3Q7CisgICAgICAgIENDTWFpblRocmVhZDo6cG9zdFRhc2soY3JlYXRlTWFpblRocmVhZFRhc2so
dGhpcywgJkxheWVyUmVuZGVyZXJDaHJvbWl1bUltcGw6OmRyYXdMYXllcnNPbk1haW5UaHJlYWQs
IEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pLCBBbGxvd0Nyb3NzVGhyZWFkQWNj
ZXNzKCZjb250ZXh0TG9zdCkpKTsKKyAgICAgICAgY29tcGxldGlvbi53YWl0KCk7CisKKyAgICAg
ICAgLy8gRklYTUU6IFNlbmQgdGhlICJVcGRhdGVSZWN0IiBtZXNzYWdlIHVwIHRvIHRoZSBSZW5k
ZXJXaWRnZXQgW29yIG1vdmVwbHVnaW4gZXF1aXZhbGVudHMuLi5dCisKKyAgICAgICAgLy8gRklY
TUU6IGhhbmRsZSBjb250ZXh0IGxvc3QKKyAgICAgICAgaWYgKGNvbnRleHRMb3N0KQorICAgICAg
ICAgICAgRkFUQUwoIkxheWVyUmVuZGVyZXJDaHJvbWl1bUltcGwgZG9lcyBub3QgaGFuZGxlIGNv
bnRleHQgbG9zdCB5ZXQuIik7CisgICAgfQorCitwcml2YXRlOgorICAgIExheWVyUmVuZGVyZXJD
aHJvbWl1bUltcGwoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogY2xpZW50LCBMYXllclJlbmRl
cmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCisgICAgICAgIDogQ0NMYXllclRyZWVIb3N0SW1w
bChjbGllbnQpCisgICAgICAgICwgbV9sYXllclJlbmRlcmVyKGxheWVyUmVuZGVyZXIpIHsgfQor
CisgICAgdm9pZCBkcmF3TGF5ZXJzT25NYWluVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21w
bGV0aW9uLCBib29sKiBjb250ZXh0TG9zdCkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisKKyAgICAgICAgaWYgKG1fbGF5ZXJSZW5kZXJlci0+cm9vdExheWVyKCkpIHsK
KyAgICAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVycygpOworICAgICAgICAgICAg
bV9sYXllclJlbmRlcmVyLT5wcmVzZW50KCk7CisKKyAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0ID0gbV9sYXllclJlbmRlcmVyLT5jb250ZXh0KCk7CisgICAgICAgICAgICAq
Y29udGV4dExvc3QgPSBjb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNzUmVzZXRT
dGF0dXNBUkIoKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgKmNvbnRleHRMb3N0ID0gZmFsc2U7CisgICAgICAgIGNvbXBsZXRpb24t
PnNpZ25hbCgpOworICAgIH0KKworICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbV9sYXllclJl
bmRlcmVyOworfTsKKworY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbFByb3h5IDogcHVi
bGljIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NP
d25QdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbFByb3h5PiBjcmVhdGUoTGF5ZXJSZW5kZXJl
ckNocm9taXVtKiBsYXllclJlbmRlcmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsUHJveHkobGF5ZXJSZW5kZXJlcikpOworICAg
IH0KKworICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBjcmVhdGVM
YXllclRyZWVIb3N0SW1wbCgpCisgICAgeworICAgICAgICByZXR1cm4gTGF5ZXJSZW5kZXJlckNo
cm9taXVtSW1wbDo6Y3JlYXRlKHRoaXMsIHN0YXRpY19jYXN0PExheWVyUmVuZGVyZXJDaHJvbWl1
bSo+KGhvc3QoKSkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBMYXllclJlbmRlcmVyQ2hyb21p
dW1JbXBsUHJveHkoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQorICAgICAg
ICA6IENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eShsYXllclJlbmRlcmVyKSB7IH0KK307CisKK1Bh
c3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5PiBMYXllclJlbmRlcmVyQ2hyb21pdW06
OmNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsUHJveHkoKQoreworICAgIE93blB0cjxDQ0xheWVyVHJl
ZUhvc3RJbXBsUHJveHk+IHByb3h5ID0gTGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbFByb3h5Ojpj
cmVhdGUodGhpcyk7CisgICAgcHJveHktPnN0YXJ0KCk7CisgICAgcmV0dXJuIHByb3h5LnJlbGVh
c2UoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAppbmRl
eCA2NWYxY2Y3MTA4ZWY2M2FiZWEzN2QwMTVhNjk0YmNiNTA2MTFhYWIyLi5kYjIzN2ExZjc0ZjAw
OTE3NTc0ZTNhZDNhMWIwNTI1ZDVmN2I1YzlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uaApAQCAtNDQsMTMgKzQ0LDEzIEBACiAjaW5jbHVkZSAiY2MvQ0NDYW52YXNMYXllcklt
cGwuaCIKICNpbmNsdWRlICJjYy9DQ0hlYWRzVXBEaXNwbGF5LmgiCiAjaW5jbHVkZSAiY2MvQ0NM
YXllclNvcnRlci5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUg
ImNjL0NDUGx1Z2luTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NWaWRlb0xheWVySW1wbC5o
IgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
CiAjaWYgVVNFKENHKQpAQCAtNjIsMTMgKzYyLDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgQ0NIZWFkc1VwRGlzcGxheTsKIGNsYXNzIENDTGF5ZXJJbXBsOworY2xhc3MgQ0NMYXll
clRyZWVIb3N0Q29tbWl0dGVyOworY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbDsKIGNsYXNzIEdl
b21ldHJ5QmluZGluZzsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogCiAvLyBDbGFzcyB0aGF0
IGhhbmRsZXMgZHJhd2luZyBvZiBjb21wb3NpdGVkIHJlbmRlciBsYXllcnMgdXNpbmcgR0wuCi1j
bGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW0gOiBwdWJsaWMgUmVmQ291bnRlZDxMYXllclJlbmRl
cmVyQ2hyb21pdW0+IHsKK2NsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bSA6IHB1YmxpYyBDQ0xh
eWVyVHJlZUhvc3QgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyUmVuZGVy
ZXJDaHJvbWl1bT4gY3JlYXRlKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBQYXNzT3du
UHRyPFRpbGVQYWludEludGVyZmFjZT4gY29udGVudFBhaW50KTsKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGNyZWF0ZShDQ0xheWVyVHJlZUhvc3RDbGllbnQq
LCBQYXNzT3duUHRyPFRpbGVQYWludEludGVyZmFjZT4gY29udGVudFBhaW50KTsKIAogICAgIH5M
YXllclJlbmRlcmVyQ2hyb21pdW0oKTsKIApAQCAtODAsNyArODIsOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZXRWaWV3cG9ydChjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVj
dCYgY29udGVudFJlY3QsIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbik7CiAKICAgICAv
LyB1cGRhdGVzIGFuZCBkcmF3cyB0aGUgY3VycmVudCBsYXllcnMgb250byB0aGUgYmFja2J1ZmZl
cgotICAgIHZvaWQgdXBkYXRlQW5kRHJhd0xheWVycygpOworICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVMYXllcnMoKTsKKyAgICB2b2lkIGRyYXdMYXllcnMoKTsKIAogICAgIC8vIFNldCBieSBXZWJW
aWV3SW1wbCB3aGVuIGFuaW1hdGlvbiBjYWxsYmFja3MgYXJlIHJ1bm5pbmcuCiAgICAgLy8gRklY
TUU6IFdoZW4gd2UgbW92ZSBzY2hlZHVsaW5nIGludG8gdGhlIGNvbXBvc2l0b3IsIHdlIGNhbiBy
ZW1vdmUgdGhpcyBmbGFnLgpAQCAtMTQ0LDE0ICsxNDcsMTcgQEAgcHVibGljOgogI2lmbmRlZiBO
REVCVUcKICAgICBzdGF0aWMgYm9vbCBzX2luUGFpbnRMYXllckNvbnRlbnRzOwogI2VuZGlmCitw
cm90ZWN0ZWQ6CisgICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eT4gY3JlYXRlTGF5ZXJUcmVlSG9zdEltcGxQcm94eSgpOworCiBwcml2YXRlOgogICAgIHR5cGVk
ZWYgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiBMYXllckxpc3Q7CiAgICAgdHlwZWRlZiBI
YXNoTWFwPEdyYXBoaWNzQ29udGV4dDNEKiwgaW50PiBDaGlsZENvbnRleHRNYXA7CiAKLSAgICAv
LyBGSVhNRTogVGhpcyBuZWVkcyB0byBiZSBtb3ZlZCB0byB0aGUgQ0NWaWV3SW1wbCB3aGVuIHRo
YXQgY2xhc3MgZXhpc3RzLgorICAgIC8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGJlIG1vdmVkIHRv
IHRoZSBDQ0xheWVyVHJlZUhvc3RJbXBsIHdoZW4gdGhhdCBjbGFzcyBleGlzdHMuCiAgICAgUmVm
UHRyPENDTGF5ZXJJbXBsPiBtX3Jvb3RDQ0xheWVySW1wbDsKIAotICAgIExheWVyUmVuZGVyZXJD
aHJvbWl1bShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgUGFzc093blB0cjxUaWxlUGFp
bnRJbnRlcmZhY2U+IGNvbnRlbnRQYWludCk7CisgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKEND
TGF5ZXJUcmVlSG9zdENsaWVudCosIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBQYXNz
T3duUHRyPFRpbGVQYWludEludGVyZmFjZT4gY29udGVudFBhaW50KTsKIAogICAgIHZvaWQgdXBk
YXRlTGF5ZXJzKExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAgdm9pZCB1
cGRhdGVSb290TGF5ZXJDb250ZW50cygpOwpAQCAtMTk2LDYgKzIwMiw4IEBAIHByaXZhdGU6CiAK
ICAgICBib29sIG1faGFyZHdhcmVDb21wb3NpdGluZzsKIAorICAgIE93blB0cjxMYXllckxpc3Q+
IG1fY29tcHV0ZWRSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworCiAgICAgdW5zaWduZWQgbV9jdXJy
ZW50U2hhZGVyOwogICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogbV9jdXJyZW50UmVuZGVyU3Vy
ZmFjZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcAppbmRleCBhZmM3OWZhYzYz
OGE3ZjMxNjI4Y2U0M2NlNzQzZmY0OWY5NzJmNWQ2Li41MjE5Mzc0Mjg1NjNhNjBlZDQ5MTJjYTFl
MTc5MTljN2Q4ZWQ3ZGNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcApAQCAt
MjM0LDYgKzIzNCwxOCBAQCB2b2lkIENDSGVhZHNVcERpc3BsYXk6Om9uUHJlc2VudCgpCiAgICAg
bV9jdXJyZW50RnJhbWVOdW1iZXIgKz0gMTsKIH0KIAordm9pZCBDQ0hlYWRzVXBEaXNwbGF5Ojpz
ZXRTaG93RlBTQ291bnRlcihib29sIHNob3cpCit7CisgICAgbV9zaG93RlBTQ291bnRlciA9IHNo
b3c7CisgICAgbV9sYXllclJlbmRlcmVyLT5zZXROZWVkc1JlZHJhdygpOworfQorCit2b2lkIEND
SGVhZHNVcERpc3BsYXk6OnNldFNob3dQbGF0Zm9ybUxheWVyVHJlZShib29sIHNob3cpCit7Cisg
ICAgbV9zaG93UGxhdGZvcm1MYXllclRyZWUgPSBzaG93OworICAgIG1fbGF5ZXJSZW5kZXJlci0+
c2V0TmVlZHNSZWRyYXcoKTsKK30KKwogfQogCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oCmluZGV4IGQ2NDg3OGRhOWFj
NWY4NGI5NWNkMjBlMjQyNmRiZmRlOTczNmYzN2EuLjk5MmJiYTA2NzRkODA5MGY5YTBhODFmYjkx
MjdhZmMzODAxMjY0YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmgKQEAgLTQ5LDEz
ICs0OSwxNSBAQCBwdWJsaWM6CiAKICAgICB+Q0NIZWFkc1VwRGlzcGxheSgpOwogCisgICAgaW50
IGN1cnJlbnRGcmFtZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEZyYW1lTnVtYmVy
OyB9CisKICAgICB2b2lkIG9uRnJhbWVCZWdpbihkb3VibGUgdGltZXN0YW1wKTsKICAgICB2b2lk
IG9uUHJlc2VudCgpOwogCi0gICAgdm9pZCBzZXRTaG93RlBTQ291bnRlcihib29sIGVuYWJsZSkg
eyBtX3Nob3dGUFNDb3VudGVyID0gZW5hYmxlOyB9CisgICAgdm9pZCBzZXRTaG93RlBTQ291bnRl
cihib29sIGVuYWJsZSk7CiAgICAgYm9vbCBzaG93RlBTQ291bnRlcigpIGNvbnN0IHsgcmV0dXJu
IG1fc2hvd0ZQU0NvdW50ZXI7IH0KIAotICAgIHZvaWQgc2V0U2hvd1BsYXRmb3JtTGF5ZXJUcmVl
KGJvb2wgZW5hYmxlKSB7IG1fc2hvd1BsYXRmb3JtTGF5ZXJUcmVlID0gZW5hYmxlOyB9CisgICAg
dm9pZCBzZXRTaG93UGxhdGZvcm1MYXllclRyZWUoYm9vbCBlbmFibGUpOwogICAgIGJvb2wgc2hv
d1BsYXRmb3JtTGF5ZXJUcmVlKCkgY29uc3QgeyByZXR1cm4gbV9zaG93UGxhdGZvcm1MYXllclRy
ZWU7IH0KIAogICAgIGJvb2wgZW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hvd1BsYXRmb3Jt
TGF5ZXJUcmVlIHx8IG1fc2hvd0ZQU0NvdW50ZXI7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjUxOGE5MWVlNTE5YTc0OTUzYjMyMGQwMDhiOTg4YjNhMWU3ODgw
YzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9z
dC5oIgorCisjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVl
SG9zdENvbW1pdHRlci5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKKwor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NDTGF5ZXJUcmVlSG9zdDo6Q0NMYXllclRyZWVIb3N0
KENDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xpZW50KQorICAgIDogbV9jbGllbnQoY2xpZW50KQor
ICAgICwgbV9mcmFtZU51bWJlcigwKQoreworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6aW5p
dCgpCit7CisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgIG1fcHJveHkgPSBjcmVh
dGVMYXllclRyZWVIb3N0SW1wbFByb3h5KCk7CisgICAgQVNTRVJUKG1fcHJveHktPmlzU3RhcnRl
ZCgpKTsKKyAgICBtX3Byb3h5LT5zZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOworI2VuZGlmCit9
CisKK0NDTGF5ZXJUcmVlSG9zdDo6fkNDTGF5ZXJUcmVlSG9zdCgpCit7CisgICAgVFJBQ0VfRVZF
TlQoIkNDTGF5ZXJUcmVlSG9zdDo6fkNDTGF5ZXJUcmVlSG9zdCIsIHRoaXMsIDApOworI2lmIFVT
RShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICBtX3Byb3h5LT5zdG9wKCk7CisgICAgbV9wcm94
eS5jbGVhcigpOworI2VuZGlmCit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpiZWdpbkNvbW1p
dCgpCit7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0Ojpjb21taXRDb21wbGV0ZSgpCit7Cisg
ICAgbV9mcmFtZU51bWJlcisrOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0ZUFu
ZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpCit7CisgICAgbV9jbGllbnQtPmFuaW1hdGVB
bmRMYXlvdXQoZnJhbWVCZWdpblRpbWUpOworfQorCitQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9z
dENvbW1pdHRlcj4gQ0NMYXllclRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVIb3N0Q29tbWl0dGVy
KCkKK3sKKyAgICByZXR1cm4gQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyOjpjcmVhdGUoKTsKK30K
Kwordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCkKK3sKKyNp
ZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgbV9wcm94eS0+c2V0TmVlZHNDb21taXRB
bmRSZWRyYXcoKTsKKyNlbmRpZgorfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0TmVlZHNS
ZWRyYXcoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3Q6OnNldE5lZWRzUmVk
cmF3IiwgdGhpcywgMCk7CisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgIG1fcHJv
eHktPnNldE5lZWRzUmVkcmF3KCk7CisjZW5kaWYKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3Q6
OnVwZGF0ZUxheWVycygpCit7CisgICAgbV9jbGllbnQtPnVwZGF0ZUxheWVycygpOworfQorCit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJlOWY5YzFjNjMzY2U2OWM4
ZWE1YTYzZDVmNGQxOTlkMmY2ZDNmYmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApAQCAtMCww
ICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDTGF5ZXJUcmVlSG9zdF9oCisjZGVm
aW5lIENDTGF5ZXJUcmVlSG9zdF9oCisKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21t
aXR0ZXIuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaCIKKyNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBD
Q0xheWVyVHJlZUhvc3RJbXBsOworY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudDsKK2Ns
YXNzIEdyYXBoaWNzQ29udGV4dDNEOworCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RDbGllbnQgewor
cHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJl
Z2luVGltZSkgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlTGF5ZXJzKCkgPSAwOworfTsKKworY2xhc3MgQ0NMYXllclRyZWVIb3N0IDogcHVibGljIFJl
ZkNvdW50ZWQ8Q0NMYXllclRyZWVIb3N0PiB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQ0NMYXll
clRyZWVIb3N0KENDTGF5ZXJUcmVlSG9zdENsaWVudCopOworICAgIHZvaWQgaW5pdCgpOworICAg
IHZpcnR1YWwgfkNDTGF5ZXJUcmVlSG9zdCgpOworCisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVB
bmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5D
b21taXQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q29tcGxldGUoKTsKKyAgICB2aXJ0dWFs
IFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyPiBjcmVhdGVMYXllclRyZWVIb3N0
Q29tbWl0dGVyKCk7CisKKyAgICBpbnQgZnJhbWVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2Zy
YW1lTnVtYmVyOyB9CisKKyAgICB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAg
dm9pZCBzZXROZWVkc1JlZHJhdygpOworCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUxheWVycygp
OworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdElt
cGxQcm94eT4gY3JlYXRlTGF5ZXJUcmVlSG9zdEltcGxQcm94eSgpID0gMDsKKworcHJpdmF0ZToK
KyAgICBDQ0xheWVyVHJlZUhvc3RDbGllbnQqIG1fY2xpZW50OworICAgIGludCBtX2ZyYW1lTnVt
YmVyOworICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk+IG1fcHJveHk7Cit9Owor
Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRl
ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNzJkZDcxNGJlN2UzODRjOGVmOWUxMDkyNGZmNWNkMjA1ODY5OWJl
YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5jcHAKQEAgLTAsMCArMSw0NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NMYXll
clRyZWVIb3N0Q29tbWl0dGVyLmgiCisKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIK
KyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI+IENDTGF5ZXJUcmVlSG9z
dENvbW1pdHRlcjo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDTGF5ZXJU
cmVlSG9zdENvbW1pdHRlcigpKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI6
OmNvbW1pdChDQ0xheWVyVHJlZUhvc3QqIGhvc3QsIENDTGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJ
bXBsKQoreworICAgIGhvc3RJbXBsLT5zZXRTb3VyY2VGcmFtZU51bWJlcihob3N0LT5mcmFtZU51
bWJlcigpKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iNDkyNjA4YjQ3ZTRiYzJlYzk3NGFiZDFhMGE0ZDJmNjQzODVmYmM2
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmgKQEAgLTAsMCArMSw0OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXJfaAorI2RlZmluZSBD
Q0xheWVyVHJlZUhvc3RDb21taXR0ZXJfaAorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBDQ0xheWVyVHJlZUhvc3Q7CitjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsOworCisvLyBG
SVhNRTogbWVyZ2UgaW4gVHJlZVN5bmNocm9uaXplciBjb2RlIGludG8gaGVyZQorY2xhc3MgQ0NM
YXllclRyZWVIb3N0Q29tbWl0dGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ0xheWVy
VHJlZUhvc3RDb21taXR0ZXIpOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5
ZXJUcmVlSG9zdENvbW1pdHRlcj4gY3JlYXRlKCk7CisgICAgdmlydHVhbCB2b2lkIGNvbW1pdChD
Q0xheWVyVHJlZUhvc3QqLCBDQ0xheWVyVHJlZUhvc3RJbXBsKik7CisKK3Byb3RlY3RlZDoKKyAg
ICBleHBsaWNpdCBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIoKSB7IH0KK307CisKK30KKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEz
YWEyYmEyMTBkYmRkZDE2YjljYTFhZDEyZTYxMTU1NThiMmFiMzcKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmNwcApAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCisKKyNpbmNs
dWRlICJUcmFjZUV2ZW50LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCisjaW5j
bHVkZSAiY2MvQ0NUaHJlYWRUYXNrLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVI
b3N0SW1wbChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX3NvdXJj
ZUZyYW1lTnVtYmVyKC0xKQorICAgICwgbV9mcmFtZU51bWJlcigwKQorICAgICwgbV9jbGllbnQo
Y2xpZW50KQorICAgICwgbV9jb21taXRQZW5kaW5nKGZhbHNlKQorICAgICwgbV9yZWRyYXdQZW5k
aW5nKGZhbHNlKQoreworfQorCitDQ0xheWVyVHJlZUhvc3RJbXBsOjp+Q0NMYXllclRyZWVIb3N0
SW1wbCgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6On5DQ0xheWVy
VHJlZUhvc3RJbXBsKCkiLCB0aGlzLCAwKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBs
OjpiZWdpbkNvbW1pdCgpCit7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29tbWl0
Q29tcGxldGUoKQoreworICAgIG1fY29tbWl0UGVuZGluZyA9IGZhbHNlOworICAgIHNldE5lZWRz
UmVkcmF3KCk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycygpCit7
CisgICAgLy8gSWYgYSBjb21taXQgaXMgcGVuZGluZywgZG8gbm90IGRyYXcuIFRoaXMgaXMgYSB0
ZW1wb3JhcnkgcmVzdHJpY3Rpb24gdGhhdAorICAgIC8vIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGRy
YXdMYXllcnMgaXMgY3VycmVudGx5IGEgYmxvY2tpbmcgb3BlcmF0aW9uIG9uIHRoZSBtYWluIHRo
cmVhZC4KKyAgICBpZiAobV9jb21taXRQZW5kaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBU
UkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycyIsIHRoaXMsIDApOwor
ICAgIEFTU0VSVChtX3JlZHJhd1BlbmRpbmcpOworICAgIG1fcmVkcmF3UGVuZGluZyA9IGZhbHNl
OworCisgICAgeworICAgICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJh
d0xheWVyc0FuZFByZXNlbnQiLCB0aGlzLCAwKTsKKyAgICAgICAgZHJhd0xheWVyc0FuZFByZXNl
bnQoKTsKKyAgICB9CisKKyAgICArK21fZnJhbWVOdW1iZXI7Cit9CisKK3ZvaWQgQ0NMYXllclRy
ZWVIb3N0SW1wbDo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKQoreworICAgIFRSQUNFX0VWRU5U
KCJDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdyIsIHRoaXMsIDAp
OworCisgICAgLy8gRklYTUU6IG1vdmUgdGhlIHJlcXVlc3RGcmFtZUFuZENvbW1pdCBvdXQgZnJv
bSBoZXJlIG9uY2Ugd2UgYWRkIGZyYW1lcmF0ZSB0aHJvdHRsaW5nL2FuaW1hdGlvbgorICAgIGRv
dWJsZSBmcmFtZUJlZ2luVGltZSA9IGN1cnJlbnRUaW1lKCk7CisgICAgbV9jb21taXRQZW5kaW5n
ID0gdHJ1ZTsKKyAgICBtX2NsaWVudC0+cmVxdWVzdEZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZChm
cmFtZUJlZ2luVGltZSk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNS
ZWRyYXcoKQoreworICAgIGlmIChtX3JlZHJhd1BlbmRpbmcgfHwgbV9jb21taXRQZW5kaW5nKQor
ICAgICAgICByZXR1cm47CisKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6
c2V0TmVlZHNSZWRyYXciLCB0aGlzLCAwKTsKKyAgICBtX3JlZHJhd1BlbmRpbmcgPSB0cnVlOwor
ICAgIG1fY2xpZW50LT5wb3N0RHJhd0xheWVyc1Rhc2tPbkNDVGhyZWFkKCk7Cit9CisKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZDkwNDk1ZGVkMmM4
MGMzOWY4ZjNhMTk1YjJlMDE1ZDZhMDhjYWI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5o
CkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NMYXllclRyZWVIb3N0
SW1wbF9oCisjZGVmaW5lIENDTGF5ZXJUcmVlSG9zdEltcGxfaAorCisjaW5jbHVkZSAiY2MvQ0NU
aHJlYWQuaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNh
ZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gUHJvdmlkZXMgc2No
ZWR1bGluZyBpbmZyYXN0cnVjdHVyZSBmb3IgYSBDQ0xheWVyVHJlZUhvc3RJbXBsCitjbGFzcyBD
Q0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50ICB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+Q0NMYXll
clRyZWVIb3N0SW1wbENsaWVudCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwb3N0RHJhd0xheWVy
c1Rhc2tPbkNDVGhyZWFkKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0RnJhbWVBbmRD
b21taXRPbkNDVGhyZWFkKGRvdWJsZSBmcmFtZUJlZ2luVGltZSkgPSAwOworfTsKKworLy8gQ0NM
YXllclRyZWVIb3N0SW1wbCBvd25zIHRoZSBDQ0xheWVySW1wbCB0cmVlIGFzIHdlbGwgYXMgYXNz
b2NpYXRlZCByZW5kZXJpbmcgc3RhdGUKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGwgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKENDTGF5ZXJUcmVlSG9zdEltcGwpOworcHVibGljOgorICAg
IGV4cGxpY2l0IENDTGF5ZXJUcmVlSG9zdEltcGwoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCop
OworICAgIHZpcnR1YWwgfkNDTGF5ZXJUcmVlSG9zdEltcGwoKTsKKworICAgIHZpcnR1YWwgdm9p
ZCBiZWdpbkNvbW1pdCgpOworICAgIHZpcnR1YWwgdm9pZCBjb21taXRDb21wbGV0ZSgpOworCisg
ICAgdm9pZCBkcmF3TGF5ZXJzKCk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNBbmRQcmVz
ZW50KCkgPSAwOworCisgICAgaW50IGZyYW1lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9mcmFt
ZU51bWJlcjsgfQorCisgICAgdm9pZCBzZXROZWVkc1JlZHJhdygpOworICAgIHZvaWQgc2V0TmVl
ZHNDb21taXRBbmRSZWRyYXcoKTsKKworICAgIGludCBzb3VyY2VGcmFtZU51bWJlcigpIGNvbnN0
IHsgcmV0dXJuIG1fc291cmNlRnJhbWVOdW1iZXI7IH0KKyAgICB2b2lkIHNldFNvdXJjZUZyYW1l
TnVtYmVyKGludCBmcmFtZU51bWJlcikgeyBtX3NvdXJjZUZyYW1lTnVtYmVyID0gZnJhbWVOdW1i
ZXI7IH0KKworcHJvdGVjdGVkOgorICAgIGludCBtX3NvdXJjZUZyYW1lTnVtYmVyOworICAgIGlu
dCBtX2ZyYW1lTnVtYmVyOworCitwcml2YXRlOgorICAgIENDTGF5ZXJUcmVlSG9zdEltcGxDbGll
bnQqIG1fY2xpZW50OworICAgIGJvb2wgbV9jb21taXRQZW5kaW5nOworICAgIGJvb2wgbV9yZWRy
YXdQZW5kaW5nOworfTsKKworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHku
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0SW1wbFByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYzE3MmYyZWUwNjAwYjc4Yjg5MzY3
YTNmZTQ0YmI4NmNkYzlhYjZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmNwcApA
QCAtMCwwICsxLDIyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmgiCisKKyNpbmNsdWRlICJUcmFj
ZUV2ZW50LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCisjaW5jbHVkZSAiY2Mv
Q0NNYWluVGhyZWFkVGFzay5oIgorI2luY2x1ZGUgImNjL0NDVGhyZWFkVGFzay5oIgorCisKK3Vz
aW5nIG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIHsK
K0NDVGhyZWFkKiBjY1RocmVhZDsKK2ludCBudW1Qcm94aWVzID0gMDsKK30KKworQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5OjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkoQ0NMYXllclRyZWVIb3N0
KiBsYXllclRyZWVIb3N0KQorICAgIDogbV9jb21taXRQZW5kaW5nKGZhbHNlKQorICAgICwgbV9s
YXllclRyZWVIb3N0KGxheWVyVHJlZUhvc3QpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJU
cmVlSG9zdEltcGxQcm94eTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5IiwgdGhpcywgMCk7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBudW1Qcm94aWVzKys7CisgICAgaWYgKCFj
Y1RocmVhZCkKKyAgICAgICAgY2NUaHJlYWQgPSBDQ1RocmVhZDo6Y3JlYXRlKCkubGVha1B0cigp
OworfQorCisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzdGFydCgpCit7CisgICAg
Ly8gQ3JlYXRlIExheWVyVHJlZUhvc3RJbXBsLgorICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBs
ZXRpb247CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAm
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppbml0SW1wbE9uQ0NUaHJlYWQsIEFsbG93Q3Jvc3NU
aHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pKSk7CisgICAgY29tcGxldGlvbi53YWl0KCk7Cit9CisK
K0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6fkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSgpCit7
CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6fkNDTGF5ZXJUcmVl
SG9zdEltcGxQcm94eSIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Cisg
ICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3RJbXBsICYmICFtX2xheWVyVHJlZUhvc3QpOyAvLyBt
YWtlIHN1cmUgc3RvcCgpIGdvdCBjYWxsZWQuCisKKyAgICBudW1Qcm94aWVzLS07CisgICAgaWYg
KCFudW1Qcm94aWVzKSB7CisgICAgICAgIGRlbGV0ZSBjY1RocmVhZDsKKyAgICAgICAgY2NUaHJl
YWQgPSAwOworICAgIH0KK30KKworYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmlzU3Rh
cnRlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdEltcGw7Cit9CisKK3Zv
aWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpCit7
CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAobV9jb21taXRQZW5kaW5nKQor
ICAgICAgICByZXR1cm47CisKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFBy
b3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdyIsIHRoaXMsIDApOworICAgIG1fY29tbWl0UGVu
ZGluZyA9IHRydWU7CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0
aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09u
Q0NUaHJlYWQpKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRz
UmVkcmF3KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGNjVGhyZWFkLT5w
b3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eTo6c2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKSk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0
SW1wbFByb3h5OjpzdG9wKCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1w
bFByb3h5OjpzdG9wIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAg
ICAvLyBTeW5jaHJvbm91c2x5IGRlbGV0ZXMgdGhlIGltcGwuCisgICAgQ0NDb21wbGV0aW9uRXZl
bnQgY29tcGxldGlvbjsKKyAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNr
KHRoaXMsICZDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmxheWVyVHJlZUhvc3RDbG9zZWRPbkND
VGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9uKSkpOworICAgIGNvbXBs
ZXRpb24ud2FpdCgpOworCisgICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3RJbXBsKTsgLy8gdmVy
aWZ5IHRoYXQgdGhlIGltcGwgZGVsZXRlZC4KKyAgICBtX2xheWVyVHJlZUhvc3QgPSAwOworfQor
Cit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6cG9zdERyYXdMYXllcnNUYXNrT25DQ1Ro
cmVhZCgpCit7CisgICAgQVNTRVJUKGlzQ0NUaHJlYWQoKSk7CisgICAgaWYgKG1fbGF5ZXJUcmVl
SG9zdEltcGwpCisgICAgICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2so
dGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQpKTsK
K30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1p
dE9uQ0NUaHJlYWQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQoreworICAgIFRSQUNFX0VWRU5UKCJD
Q0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQi
LCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNDQ1RocmVhZCgpKTsKKyAgICBpZiAobV9sYXllclRy
ZWVIb3N0SW1wbCkKKyAgICAgICAgQ0NNYWluVGhyZWFkOjpwb3N0VGFzayhjcmVhdGVNYWluVGhy
ZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpyZXF1ZXN0RnJhbWVBbmRD
b21taXQsIGZyYW1lQmVnaW5UaW1lKSk7Cit9CisKK2Jvb2wgQ0NMYXllclRyZWVIb3N0SW1wbFBy
b3h5Ojppc01haW5UaHJlYWQoKSBjb25zdAoreworICAgIHJldHVybiA6OmlzTWFpblRocmVhZCgp
OworfQorCitib29sIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNDQ1RocmVhZCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGN1cnJlbnRUaHJlYWQoKSA9PSBjY1RocmVhZC0+dGhyZWFkSUQoKTsK
K30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1p
dChkb3VibGUgZnJhbWVCZWdpblRpbWUpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KyAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgVFJBQ0Vf
RVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0Iiwg
dGhpcywgMCk7CisgICAgeworICAgICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojph
bmltYXRlQW5kTGF5b3V0IiwgdGhpcywgMCk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+YW5p
bWF0ZUFuZExheW91dChmcmFtZUJlZ2luVGltZSk7CisgICAgfQorCisgICAgbV9jb21taXRQZW5k
aW5nID0gZmFsc2U7CisgICAgeworICAgICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0
Ojp1cGRhdGVMYXllcnMiLCB0aGlzLCAwKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT51cGRh
dGVMYXllcnMoKTsKKyAgICB9CisKKyAgICBPd25QdHI8Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVy
PiBjb21taXR0ZXIgPSBtX2xheWVyVHJlZUhvc3QtPmNyZWF0ZUxheWVyVHJlZUhvc3RDb21taXR0
ZXIoKTsKKyAgICBtX2xheWVyVHJlZUhvc3QtPmJlZ2luQ29tbWl0KCk7CisKKyAgICAvLyBCbG9j
a2luZyBjYWxsIHRvIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6cGVyZm9ybUNvbW1pdAorICAg
IENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNy
ZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpjb21taXRP
bkNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKGNvbW1pdHRlci5nZXQoKSksIEFsbG93
Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pKSk7CisgICAgY29tcGxldGlvbi53YWl0KCk7
CisKKyAgICBjb21taXR0ZXIuY2xlYXIoKTsKKworICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0
Q29tcGxldGUoKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmNvbW1pdE9u
Q0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyKiBjb21taXR0ZXIsIENDQ29tcGxldGlv
bkV2ZW50KiBjb21wbGV0aW9uKQoreworICAgIEFTU0VSVChpc0NDVGhyZWFkKCkpOworICAgIFRS
QUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQiLCB0
aGlzLCAwKTsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5iZWdpbkNvbW1pdCgpOworICAgIHsK
KyAgICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0IiwgdGhpcywgMCk7
CisgICAgICAgIGNvbW1pdHRlci0+Y29tbWl0KG1fbGF5ZXJUcmVlSG9zdCwgbV9sYXllclRyZWVI
b3N0SW1wbC5nZXQoKSk7CisgICAgfQorICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOworCisgICAg
bV9sYXllclRyZWVIb3N0SW1wbC0+Y29tbWl0Q29tcGxldGUoKTsKK30KKwordm9pZCBDQ0xheWVy
VHJlZUhvc3RJbXBsUHJveHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkKCkKK3sKKyAgICBUUkFDRV9F
VkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpkcmF3TGF5ZXJzT25DQ1RocmVhZCIsIHRo
aXMsIDApOworICAgIEFTU0VSVChpc0NDVGhyZWFkKCkpOworICAgIGlmIChtX2xheWVyVHJlZUhv
c3RJbXBsKQorICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5kcmF3TGF5ZXJzKCk7Cit9CisK
K3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09u
Q0NUaHJlYWQoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6
OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VS
VChpc0NDVGhyZWFkKCkgJiYgbV9sYXllclRyZWVIb3N0SW1wbCk7CisgICAgbV9sYXllclRyZWVI
b3N0SW1wbC0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKK30KKwordm9pZCBDQ0xheWVyVHJl
ZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCgpCit7CisgICAgVFJBQ0Vf
RVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFk
IiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzQ0NUaHJlYWQoKSAmJiBtX2xheWVyVHJlZUhvc3RJ
bXBsKTsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5zZXROZWVkc1JlZHJhdygpOworfQorCit2
b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aW5pdEltcGxPbkNDVGhyZWFkKENDQ29tcGxl
dGlvbkV2ZW50KiBjb21wbGV0aW9uKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHk6OmluaXRJbXBsT25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChp
c0NDVGhyZWFkKCkpOworICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwgPSBjcmVhdGVMYXllclRyZWVI
b3N0SW1wbCgpOworICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOworfQorCit2b2lkIENDTGF5ZXJU
cmVlSG9zdEltcGxQcm94eTo6bGF5ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJlYWQoQ0NDb21wbGV0
aW9uRXZlbnQqIGNvbXBsZXRpb24pCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eTo6bGF5ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAg
ICBBU1NFUlQoaXNDQ1RocmVhZCgpKTsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLmNsZWFyKCk7
CisgICAgY29tcGxldGlvbi0+c2lnbmFsKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbFByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjk1YmUzY2FiNjIxZjM5OWUzYzQ0
OWM0MjRjNTg3NTMxYTM5MGNlYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oCkBA
IC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NMYXllclRyZWVIb3N0SW1w
bFByb3h5X2gKKyNkZWZpbmUgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5X2gKKworI2luY2x1ZGUg
ImNjL0NDQ29tcGxldGlvbkV2ZW50LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1w
bC5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBDQ0xheWVyVHJlZUhvc3Q7CitjbGFzcyBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI7CisK
K2NsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RJ
bXBsQ2xpZW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ0xheWVyVHJlZUhvc3RJbXBs
UHJveHkpOworcHVibGljOgorICAgIHZpcnR1YWwgfkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSgp
OworCisgICAgYm9vbCBpc1N0YXJ0ZWQoKSBjb25zdDsKKworICAgIHZvaWQgc2V0TmVlZHNDb21t
aXRBbmRSZWRyYXcoKTsKKyAgICB2b2lkIHNldE5lZWRzUmVkcmF3KCk7CisKKyAgICB2b2lkIHN0
YXJ0KCk7IC8vIE11c3QgYmUgY2FsbGVkIGJlZm9yZSB1c2luZyB0aGUgcHJveHkuCisgICAgdm9p
ZCBzdG9wKCk7IC8vIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBkZWxldGluZyB0aGUgcHJveHkuCisK
KyAgICAvLyBDQ0xheWVyVHJlZUhvc3RJbXBsQ2llbnQgLS0gY2FsbGVkIG9uIENDVGhyZWFkCisg
ICAgdmlydHVhbCB2b2lkIHBvc3REcmF3TGF5ZXJzVGFza09uQ0NUaHJlYWQoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcmVxdWVzdEZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZChkb3VibGUgZnJhbWVCZWdp
blRpbWUpOworCitwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQgQ0NMYXllclRyZWVIb3N0SW1wbFBy
b3h5KENDTGF5ZXJUcmVlSG9zdCopOworICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVyVHJl
ZUhvc3RJbXBsPiBjcmVhdGVMYXllclRyZWVIb3N0SW1wbCgpID0gMDsKKyAgICBDQ0xheWVyVHJl
ZUhvc3QqIGhvc3QoKSBjb25zdCB7IHJldHVybiBtX2xheWVyVHJlZUhvc3Q7IH0KKworcHJpdmF0
ZToKKyAgICBib29sIGlzTWFpblRocmVhZCgpIGNvbnN0OworICAgIGJvb2wgaXNDQ1RocmVhZCgp
IGNvbnN0OworCisgICAgLy8gQ2FsbGVkIG9uIENDTWFpblRocmVhZAorICAgIHZvaWQgcmVxdWVz
dEZyYW1lQW5kQ29tbWl0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CisKKyAgICAvLyBDYWxsZWQg
b24gQ0NUaHJlYWQKKyAgICB2b2lkIGNvbW1pdE9uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0Q29t
bWl0dGVyKiwgQ0NDb21wbGV0aW9uRXZlbnQqKTsKKyAgICB2b2lkIGRyYXdMYXllcnNPbkNDVGhy
ZWFkKCk7CisgICAgdm9pZCBpbml0SW1wbE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsK
KyAgICB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCgpOworICAgIHZvaWQg
c2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKCk7CisgICAgdm9pZCBsYXllclRyZWVIb3N0Q2xvc2Vk
T25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCopOworCisgICAgLy8gVXNlZCBvbiBtYWluLXRo
cmVhZCBvbmx5LgorICAgIGJvb2wgbV9jb21taXRQZW5kaW5nOworCisgICAgLy8gQWNjZXNzZWQg
b24gbWFpbiB0aHJlYWQgb25seS4KKyAgICBDQ0xheWVyVHJlZUhvc3QqIG1fbGF5ZXJUcmVlSG9z
dDsKKworICAgIC8vIFVzZWQgb24gdGhlIENDVGhyZWFkLCBidXQgY2hlY2tlZCBvbiBtYWluIHRo
cmVhZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24vc2h1dGRvd24uCisgICAgT3duUHRyPENDTGF5ZXJU
cmVlSG9zdEltcGw+IG1fbGF5ZXJUcmVlSG9zdEltcGw7Cit9OworCit9CisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NN
YWluVGhyZWFkVGFzay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NNYWluVGhyZWFkVGFzay5oCmluZGV4IDdkZThkNzEzZTg4Yzg4NDIyMjQwNzkzZmYy
NzdkNTlkZjUzYWRlN2IuLmZhYzZlNjQzZjA1YTE4YmJiYWFkNTdiMjliYmMwM2E2MjgwZWFjOGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTWFpblRocmVhZFRhc2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWRUYXNrLmgKQEAgLTI0LDkgKzI0LDkgQEAKICNpZm5k
ZWYgQ0NNYWluVGhyZWFkVGFza19oCiAjZGVmaW5lIENDTWFpblRocmVhZFRhc2tfaAogCi0jaW5j
bHVkZSAiQ0NNYWluVGhyZWFkLmgiCiAjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRDb3BpZXIuaCIKICNp
bmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKKyNpbmNsdWRlICJjYy9DQ01haW5UaHJlYWQuaCIK
ICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGhyZWFkLmNwcAppbmRleCA5NTY2NTg0NWM1OGM0OGNhMDYyMjAwMjQyNDhiNzQ3
YWJhYjc2MGNmLi5kZTE3M2ExMzQ5ODI0YWY5MGZhZGNlNzgxOTBmYmI4M2NjNDBlYjg1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Ro
cmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaHJlYWQuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiQ0NUaHJlYWQuaCIK
IAogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlRyYWNlRXZl
bnQuaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CkBAIC02NCw2ICs2
NSw3IEBAIHZvaWQqIENDVGhyZWFkOjpjb21wb3NpdG9yVGhyZWFkU3RhcnQodm9pZCogdXNlcmRh
dGEpCiAKIHZvaWQqIENDVGhyZWFkOjpydW5Mb29wKCkKIHsKKyAgICBUUkFDRV9FVkVOVCgiQ0NU
aHJlYWQ6OnJ1bkxvb3AiLCB0aGlzLCAwKTsKICAgICB7CiAgICAgICAgIC8vIFdhaXQgZm9yIEND
VGhyZWFkOjpzdGFydCgpIHRvIGNvbXBsZXRlIHRvIGhhdmUgbV90aHJlYWRJRAogICAgICAgICAv
LyBlc3RhYmxpc2hlZCBiZWZvcmUgc3RhcnRpbmcgdGhlIG1haW4gbG9vcC4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkVGFz
ay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJl
YWRUYXNrLmgKaW5kZXggNzEyNDVkM2U0ZTBlY2U1MzUwNWEwZGVkZTc1MzY4ZWNjNmQwZmM0Ny4u
OTFjNThlNWQyNWI3YmIyODZlMjE2YzRlMDY4Y2JlMTA5NTc4ZjE4MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRUYXNrLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJl
YWRUYXNrLmgKQEAgLTI0LDkgKzI0LDkgQEAKICNpZm5kZWYgQ0NUaHJlYWRUYXNrX2gKICNkZWZp
bmUgQ0NUaHJlYWRUYXNrX2gKIAotI2luY2x1ZGUgIkNDVGhyZWFkLmgiCiAjaW5jbHVkZSAiQ3Jv
c3NUaHJlYWRDb3BpZXIuaCIKICNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKKyNpbmNsdWRl
ICJjYy9DQ1RocmVhZC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAxOTIxOTZl
NGE5MmU1MTJkNDllMDU4ZjNiZTgwNTAxMWQ1ZWRiYWVlLi40Zjc1N2Q1N2E1MDg2NTA0NWMwYzQ5
MDU1NzIyYThjZWEwYjllODdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDEwMyBAQAorMjAxMS0wNS0xNyAgTmF0IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBJ
bXBsZW1lbnQgQ0NMYXllclRyZWVIb3N0IGFuZCBDQ0xheWVyVHJlZUhvc3RJbXBsIHBvcnRpb25z
IG9mIHRocmVhZGVkIGNvbXBvc2l0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTU4NDA4CisKKyAgICAgICAgUmVkaXJlY3QgaW52YWxpZGF0ZXMgYW5k
IHNjaGVkdWxpbmcgaW50byBjb21wb3NpdG9yIHdoZW4gaW4KKyAgICAgICAgdGhyZWFkZWQgY29t
cG9zaXRpbmcgbW9kZS4gQWRkIHN0cmVzcyB0ZXN0cyBmb3IgQ0NMYXllclRyZWVIb3N0LgorCisg
ICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogcHVibGljL1dlYldpZGdldC5oOgorICAg
ICAgICAqIHNyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUG9w
dXBNZW51SW1wbDo6YW5pbWF0ZSk6CisgICAgICAgICogc3JjL1dlYlBvcHVwTWVudUltcGwuaDoK
KyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
SW1wbDo6YW5pbWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpwYWludCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjphbmltYXRlQW5kTGF5b3V0KToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlld0ltcGw6OnVwZGF0ZUxheWVycyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXdJbXBsOjpjb21wb3NpdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0
Um9vdExheWVyTmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNl
dElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXdJbXBsOjpkb0NvbXBvc2l0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjcmVh
dGVMYXllclRyZWVIb3N0Q29udGV4dDNEKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6
OnJlYWxsb2NhdGVSZW5kZXJlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp1cGRh
dGVMYXllclJlbmRlcmVyU2V0dGluZ3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
dXBkYXRlTGF5ZXJSZW5kZXJlclZpZXdwb3J0KToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwu
aDoKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcDogQWRkZWQuCisgICAg
ICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3Q6OkNDTGF5ZXJUcmVlSG9zdFRlc3QpOgorICAg
ICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0OjphbmltYXRlQW5kTGF5b3V0KToKKyAgICAg
ICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6YmVnaW5Db21taXRPbkNDVGhyZWFkKToKKyAg
ICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6YmVnaW5Db21taXRPbk1haW5UaHJlYWQp
OgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0Ojpjb21taXRPbkNDVGhyZWFkKToK
KyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6Y29tbWl0Q29tcGxldGVPbkNDVGhy
ZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6Y29tbWl0Q29tcGxldGVP
bk1haW5UaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0OjpkcmF3TGF5
ZXJzQW5kUHJlc2VudE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RU
ZXN0Ojp1cGRhdGVMYXllcnMpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0Ojpv
bkJlZ2luVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3Q6OmRvRW5kVGVz
dCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3Q6Om9uRW5kVGVzdCk6CisgICAg
ICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3Q6OnJ1blRlc3QpOgorICAgICAgICAoV1RGOjpD
Q0xheWVyVHJlZUhvc3RUZXN0Ojp0ZXN0VGltZW91dCk6CisgICAgICAgIChXVEY6Ok1vY2tMYXll
clRyZWVIb3N0Q2xpZW50OjpNb2NrTGF5ZXJUcmVlSG9zdENsaWVudCk6CisgICAgICAgIChXVEY6
Ok1vY2tMYXllclRyZWVIb3N0Q2xpZW50OjpjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKToK
KyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3RDbGllbnQ6OmFuaW1hdGVBbmRMYXlvdXQp
OgorICAgICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdENsaWVudDo6dXBkYXRlTGF5ZXJzKToK
KyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3RDb21taXR0ZXI6OmNyZWF0ZSk6CisgICAg
ICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0Q29tbWl0dGVyOjpjb21taXQpOgorICAgICAgICAo
V1RGOjpNb2NrTGF5ZXJUcmVlSG9zdENvbW1pdHRlcjo6TW9ja0xheWVyVHJlZUhvc3RDb21taXR0
ZXIpOgorICAgICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdEltcGw6OmNyZWF0ZSk6CisgICAg
ICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0SW1wbDo6YmVnaW5Db21taXQpOgorICAgICAgICAo
V1RGOjpNb2NrTGF5ZXJUcmVlSG9zdEltcGw6OmNvbW1pdENvbXBsZXRlKToKKyAgICAgICAgKFdU
Rjo6TW9ja0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzQW5kUHJlc2VudCk6CisgICAgICAg
IChXVEY6Ok1vY2tMYXllclRyZWVIb3N0SW1wbDo6TW9ja0xheWVyVHJlZUhvc3RJbXBsKToKKyAg
ICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmNyZWF0ZSk6CisgICAgICAg
IChXVEY6Ok1vY2tMYXllclRyZWVIb3N0SW1wbFByb3h5OjpjcmVhdGVMYXllclRyZWVIb3N0SW1w
bCk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0SW1wbFByb3h5OjpNb2NrTGF5ZXJU
cmVlSG9zdEltcGxQcm94eSk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0OjpNb2Nr
TGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0OjpjcmVhdGVM
YXllclRyZWVIb3N0SW1wbFByb3h5KToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3Q6
OnVwZGF0ZUxheWVycyk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0OjpjcmVhdGVM
YXllclRyZWVIb3N0Q29tbWl0dGVyKToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3Q6
OmJlZ2luQ29tbWl0KToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3Q6OmNvbW1pdENv
bXBsZXRlKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6ZG9CZWdpblRlc3Qp
OgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0OjplbmRUZXN0KToKKyAgICAgICAg
KFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQxOjpDQ0xheWVyVHJlZUhvc3RUZXN0
U2hvcnRsaXZlZDEpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZl
ZDE6OmJlZ2luVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTaG9ydGxp
dmVkMTo6YWZ0ZXJUZXN0KToKKyAgICAgICAgKFdURjo6VEVTVF9GKToKKyAgICAgICAgKFdURjo6
Q0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQyOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRs
aXZlZDIpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDI6OmJl
Z2luVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTaG9ydGxpdmVkMjo6
YWZ0ZXJUZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQz
OjpDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDMpOgorICAgICAgICAoV1RGOjpDQ0xheWVy
VHJlZUhvc3RUZXN0U2hvcnRsaXZlZDM6OmJlZ2luVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5
ZXJUcmVlSG9zdFRlc3RTaG9ydGxpdmVkMzo6YWZ0ZXJUZXN0KToKKyAgICAgICAgKFdURjo6Q0NM
YXllclRyZWVIb3N0VGVzdENvbW1pdGluZ1dpdGhDb250aW51b3VzUmVkcmF3OjpDQ0xheWVyVHJl
ZUhvc3RUZXN0Q29tbWl0aW5nV2l0aENvbnRpbnVvdXNSZWRyYXcpOgorICAgICAgICAoV1RGOjpD
Q0xheWVyVHJlZUhvc3RUZXN0Q29tbWl0aW5nV2l0aENvbnRpbnVvdXNSZWRyYXc6OmJlZ2luVGVz
dCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RDb21taXRpbmdXaXRoQ29udGlu
dW91c1JlZHJhdzo6Y29tbWl0Q29tcGxldGVPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NM
YXllclRyZWVIb3N0VGVzdENvbW1pdGluZ1dpdGhDb250aW51b3VzUmVkcmF3OjpkcmF3TGF5ZXJz
QW5kUHJlc2VudE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0
Q29tbWl0aW5nV2l0aENvbnRpbnVvdXNSZWRyYXc6OmFmdGVyVGVzdCk6CisgICAgICAgIChXVEY6
OkNDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc0NvbW1pdDE6OkNDTGF5ZXJUcmVlSG9zdFRlc3RT
ZXROZWVkc0NvbW1pdDEpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVl
ZHNDb21taXQxOjpiZWdpblRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0
U2V0TmVlZHNDb21taXQxOjpkcmF3TGF5ZXJzQW5kUHJlc2VudE9uQ0NUaHJlYWQpOgorICAgICAg
ICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQxOjpjb21taXRPbkNDVGhy
ZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzQ29tbWl0MTo6
YWZ0ZXJUZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzQ29t
bWl0Mjo6Q0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzQ29tbWl0Mik6CisgICAgICAgIChXVEY6
OkNDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc0NvbW1pdDI6OmJlZ2luVGVzdCk6CisgICAgICAg
IChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc0NvbW1pdDI6OmRyYXdMYXllcnNBbmRQ
cmVzZW50T25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTZXRO
ZWVkc0NvbW1pdDI6OmNvbW1pdE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJl
ZUhvc3RUZXN0U2V0TmVlZHNDb21taXQyOjphZnRlclRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xh
eWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNSZWRyYXc6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVk
c1JlZHJhdyk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc1JlZHJh
dzo6YmVnaW5UZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRz
UmVkcmF3OjpkcmF3TGF5ZXJzQW5kUHJlc2VudE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpD
Q0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNSZWRyYXc6OmNvbW1pdE9uQ0NUaHJlYWQpOgorICAg
ICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNSZWRyYXc6OmFmdGVyVGVzdCk6
CisgICAgICAgICogdGVzdHMvQ0NUaHJlYWRUZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRF
U1QpOgorCiAyMDExLTA1LTE3ICBUYW8gQmFpICA8bWljaGFlbGJhaUBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cGkKaW5kZXggZjBlNGQzMWEwZTg1NzhmNjM1NThhNmM0ODAwYzhhYTI2ZWIzMzI2MS4uYjc1
ZDY5YjhkMDM5MTNkMzI3Y2NlNDk5YzU1ODMyYWI2ZTExYjViMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXBpCkBAIC01Myw4ICs1MywxMCBAQAogICAgICAgICBdLAogICAgICAgICAnd2Vi
a2l0X3VuaXR0ZXN0X2ZpbGVzJzogWwogICAgICAgICAgICAgJ3Rlc3RzL0FyZW5hVGVzdEhlbHBl
cnMuaCcsCisgICAgICAgICAgICAndGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RzL0NDVGhyZWFkVGFza1Rlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0
cy9DQ1RocmVhZFRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9EcmFnSW1hZ2VUZXN0LmNw
cCcsCiAgICAgICAgICAgICAndGVzdHMvSURCQmluZGluZ1V0aWxpdGllc1Rlc3QuY3BwJywKICAg
ICAgICAgICAgICd0ZXN0cy9JREJLZXlQYXRoVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3Rz
L0lEQkxldmVsREJDb2RpbmdUZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYldpZGdldC5oCmluZGV4IDEwMTQzZTEyOWU3ZmQwZTEyYjIzZjJiNzIwNTI3NTcxNjEyYzgy
YzQuLjFhODkxOTQ2MjA2MDVjMzA3ZGNhYzY0ZGJlY2FmM2ZhMjM5MWYxODQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oCkBAIC00Nyw2ICs0Nyw5IEBAIHN0cnVj
dCBXZWJSZWN0Owogc3RydWN0IFdlYlNpemU7CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3Mg
V2ViVmVjdG9yOwogCisvLyBGSVhNRTogcmVtb3ZlIHRoaXMgZGVmaW5lIG9uY2UgcmVuZGVyX3dp
ZGdldCBoYXMgYmVlbiBjaGFuZ2VkIHRvIGlzc3VlIHRocmVhZGVkIGNvbXBvc2l0b3IgY2FsbHMK
KyNkZWZpbmUgV0VCV0lER0VUX0hBU19BTklNQVRFX0NIQU5HRVMgMQorCiBjbGFzcyBXZWJXaWRn
ZXQgewogcHVibGljOgogICAgIC8vIFRoaXMgbWV0aG9kIGNsb3NlcyBhbmQgZGVsZXRlcyB0aGUg
V2ViV2lkZ2V0LgpAQCAtNTgsMTUgKzYxLDE3IEBAIHB1YmxpYzoKICAgICAvLyBDYWxsZWQgdG8g
cmVzaXplIHRoZSBXZWJXaWRnZXQuCiAgICAgdmlydHVhbCB2b2lkIHJlc2l6ZShjb25zdCBXZWJT
aXplJikgPSAwOwogCi0gICAgLy8gQ2FsbGVkIHRvIHVwZGF0ZSBpbXBlcmF0aXZlIGFuaW1hdGlv
biBzdGF0ZS4gIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUKLSAgICAvLyBwYWludCwgYWx0
aG91Z2ggdGhlIGNsaWVudCBjYW4gcmF0ZS1saW1pdCB0aGVzZSBjYWxscy4KLSAgICB2aXJ0dWFs
IHZvaWQgYW5pbWF0ZSgpID0gMDsKKyAgICAvLyBDYWxsZWQgdG8gdXBkYXRlIGltcGVyYXRpdmUg
YW5pbWF0aW9uIHN0YXRlLiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlCisgICAgLy8gcGFp
bnQsIGFsdGhvdWdoIHRoZSBjbGllbnQgY2FuIHJhdGUtbGltaXQgdGhlc2UgY2FsbHMuIFdoZW4K
KyAgICAvLyBmcmFtZUJlZ2luVGltZSBpcyAwLjAsIHRoZSBXZWJXaWRnZXQgd2lsbCBkZXRlcm1p
bmUgdGhlIGZyYW1lIGJlZ2luIHRpbWUKKyAgICAvLyBpdHNlbGYuCisgICAgdmlydHVhbCB2b2lk
IGFuaW1hdGUoZG91YmxlIGZyYW1lQmVnaW5UaW1lKSA9IDA7CiAKICAgICAvLyBDYWxsZWQgdG8g
bGF5b3V0IHRoZSBXZWJXaWRnZXQuICBUaGlzIE1VU1QgYmUgY2FsbGVkIGJlZm9yZSBQYWludCwK
ICAgICAvLyBhbmQgaXQgbWF5IHJlc3VsdCBpbiBjYWxscyB0byBXZWJXaWRnZXRDbGllbnQ6OmRp
ZEludmFsaWRhdGVSZWN0LgogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKSA9IDA7CiAKLSAgICAv
LyBDYWxsZWQgdG8gcGFpbnQgdGhlIHJlY3Rhbmd1bGFyIHJlZ2lvbiB3aXRoaW4gdGhlIFdlYldp
ZGdldCAKKyAgICAvLyBDYWxsZWQgdG8gcGFpbnQgdGhlIHJlY3Rhbmd1bGFyIHJlZ2lvbiB3aXRo
aW4gdGhlIFdlYldpZGdldAogICAgIC8vIG9udG8gdGhlIHNwZWNpZmllZCBjYW52YXMgYXQgKHZp
ZXdQb3J0Lngsdmlld1BvcnQueSkuIFlvdSBNVVNUIGNhbGwKICAgICAvLyBMYXlvdXQgYmVmb3Jl
IGNhbGxpbmcgdGhpcyBtZXRob2QuICBJdCBpcyBva2F5IHRvIGNhbGwgcGFpbnQKICAgICAvLyBt
dWx0aXBsZSB0aW1lcyBvbmNlIGxheW91dCBoYXMgYmVlbiBjYWxsZWQsIGFzc3VtaW5nIG5vIG90
aGVyCkBAIC03NSwxMSArODAsMTQgQEAgcHVibGljOgogICAgIC8vIHdhcnJhbnRlZCBiZWZvcmUg
cGFpbnRpbmcgYWdhaW4pLgogICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJDYW52YXMqLCBjb25z
dCBXZWJSZWN0JiB2aWV3UG9ydCkgPSAwOwogCi0gICAgLy8gVHJpZ2dlcnMgY29tcG9zaXRpbmcg
b2YgdGhlIGN1cnJlbnQgbGF5ZXJzIG9udG8gdGhlIHNjcmVlbi4KLSAgICAvLyBUaGUgZmluaXNo
IGFyZ3VtZW50IGNvbnRyb2xzIHdoZXRoZXIgdGhlIGNvbXBvc2l0b3Igd2lsbCB3YWl0IGZvciB0
aGUKLSAgICAvLyBHUFUgdG8gZmluaXNoIHJlbmRlcmluZyBiZWZvcmUgcmV0dXJuaW5nLiBZb3Ug
TVVTVCBjYWxsIExheW91dAotICAgIC8vIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLCBmb3Ig
dGhlIHNhbWUgcmVhc29ucyBkZXNjcmliZWQgaW4KLSAgICAvLyB0aGUgcGFpbnQgbWV0aG9kIGFi
b3ZlLgorICAgIC8vIEluIG5vbi10aHJlYWRlZCBjb21wb3NpdGluZyBtb2RlLCB0cmlnZ2VycyBj
b21wb3NpdGluZyBvZiB0aGUgY3VycmVudAorICAgIC8vIGxheWVycyBvbnRvIHRoZSBzY3JlZW4u
IFlvdSBNVVNUIGNhbGwgTGF5b3V0IGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLCBmb3IgdGhl
IHNhbWUKKyAgICAvLyByZWFzb25zIGRlc2NyaWJlZCBpbiB0aGUgcGFpbnQgbWV0aG9kIGFib3Zl
CisgICAgLy8KKyAgICAvLyBJbiB0aHJlYWRlZCBjb21wb3NpdGluZyBtb2RlLCBpbmRpY2F0ZXMg
dGhhdCB0aGUgd2lkZ2V0IHNob3VsZCB1cGRhdGUKKyAgICAvLyBpdHNlbGYsIGZvciBleGFtcGxl
IGR1ZSB0byB3aW5kb3cgZGFtYWdlLiBUaGUgcmVkcmF3IHdpbGwgYmVnaW4KKyAgICAvLyBhc3lu
Y2hyb25vdXNseSBhbmQgcGVyZm9ybSBsYXlvdXQgYW5kIGFuaW1hdGlvbiBpbnRlcm5hbGx5LiBE
byBub3QgY2FsbAorICAgIC8vIGFuaW1hdGUgb3IgbGF5b3V0IGluIHRoaXMgY2FzZS4KICAgICB2
aXJ0dWFsIHZvaWQgY29tcG9zaXRlKGJvb2wgZmluaXNoKSA9IDA7CiAKICAgICAvLyBDYWxsZWQg
dG8gaW5mb3JtIHRoZSBXZWJXaWRnZXQgb2YgYSBjaGFuZ2UgaW4gdGhlbWUuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuY3BwCmluZGV4IDBmMzE4OTJm
ZDg3NDk1ZTU2NTA1N2VjOWZjMWRhYjMxMGM3OGI0Y2IuLjRhN2Y0YTBhY2E5MDdmZDliNWM0ZTZk
MGVjMmE2ZjBlYTUzZmEwN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlBvcHVwTWVudUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlBvcHVwTWVudUltcGwuY3BwCkBAIC0xNTMsNyArMTUzLDcgQEAgdm9pZCBXZWJQb3B1cE1lbnVJ
bXBsOjpyZXNpemUoY29uc3QgV2ViU2l6ZSYgbmV3U2l6ZSkKICAgICB9CiB9CiAKLXZvaWQgV2Vi
UG9wdXBNZW51SW1wbDo6YW5pbWF0ZSgpCit2b2lkIFdlYlBvcHVwTWVudUltcGw6OmFuaW1hdGUo
ZG91YmxlIGZyYW1lQmVnaW5UaW1lKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJQb3B1cE1lbnVJbXBsLmgKaW5kZXggNWFlMWI0OGRiZTE0Mzg3MTllYTdhMjVkMDQ0
M2ZjZDA1MWY0NzIxNy4uOTY3YzllMmY3NTI2NmY2MzY0OTc4NzliNmU4MGYzMTA5YmM1YzE4ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuaApAQCAt
NjMsNyArNjMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCk7CiAgICAgdmly
dHVhbCBXZWJTaXplIHNpemUoKSB7IHJldHVybiBtX3NpemU7IH0KICAgICB2aXJ0dWFsIHZvaWQg
cmVzaXplKGNvbnN0IFdlYlNpemUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZSgpOworICAg
IHZpcnR1YWwgdm9pZCBhbmltYXRlKGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CiAgICAgdmlydHVh
bCB2b2lkIGxheW91dCgpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJDYW52YXMqIGNhbnZh
cywgY29uc3QgV2ViUmVjdCYgcmVjdCk7CiAgICAgdmlydHVhbCB2b2lkIHRoZW1lQ2hhbmdlZCgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCmluZGV4IDc5YWQ4
NzM3YTYyMDNjNjg5YmNiY2E2NDI2NTA2NDFjZDQ0ZmU1ZjQuLjQ3YWZjYTk0ODAyYzk1MGExODg2
YzFiNzJhYWViZmI4NjAxY2VjMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlZpZXdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJW
aWV3SW1wbC5jcHAKQEAgLTEwMDEsMTYgKzEwMDEsMjAgQEAgdm9pZCBXZWJWaWV3SW1wbDo6cmVz
aXplKGNvbnN0IFdlYlNpemUmIG5ld1NpemUpCiAjZW5kaWYKIH0KIAotdm9pZCBXZWJWaWV3SW1w
bDo6YW5pbWF0ZSgpCit2b2lkIFdlYlZpZXdJbXBsOjphbmltYXRlKGRvdWJsZSBmcmFtZUJlZ2lu
VGltZSkKIHsKICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCisgICAgLy8gRklY
TUU6IHJlbW92ZSB0aGlzIG9uY2UgcmVuZGVyX3dpZGdldCBoYXMgYmVlbiBtb2RpZmllZCB0byBw
YXNzIGluIGEKKyAgICAvLyBmcmFtZUJlZ2luVGltZS4KKyAgICBpZiAoIWZyYW1lQmVnaW5UaW1l
KQorICAgICAgICBmcmFtZUJlZ2luVGltZSA9IGN1cnJlbnRUaW1lKCk7CiAgICAgV2ViRnJhbWVJ
bXBsKiB3ZWJmcmFtZSA9IG1haW5GcmFtZUltcGwoKTsKICAgICBpZiAod2ViZnJhbWUpIHsKICAg
ICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gd2ViZnJhbWUtPmZyYW1lVmlldygpOwogICAgICAgICBp
ZiAodmlldykgewogICAgICAgICAgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKICAgICAgICAgICAg
ICAgICBtX2xheWVyUmVuZGVyZXItPnNldElzQW5pbWF0aW5nKHRydWUpOwotICAgICAgICAgICAg
dmlldy0+c2VydmljZVNjcmlwdGVkQW5pbWF0aW9ucyhjb252ZXJ0U2Vjb25kc1RvRE9NVGltZVN0
YW1wKGN1cnJlbnRUaW1lKCkpKTsKKyAgICAgICAgICAgIHZpZXctPnNlcnZpY2VTY3JpcHRlZEFu
aW1hdGlvbnMoY29udmVydFNlY29uZHNUb0RPTVRpbWVTdGFtcChmcmFtZUJlZ2luVGltZSkpOwog
ICAgICAgICAgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKICAgICAgICAgICAgICAgICBtX2xheWVy
UmVuZGVyZXItPnNldElzQW5pbWF0aW5nKGZhbHNlKTsKICAgICAgICAgfQpAQCAtMTA4Myw2ICsx
MDg3LDEwIEBAIHZvaWQgV2ViVmlld0ltcGw6OnBhaW50KFdlYkNhbnZhcyogY2FudmFzLCBjb25z
dCBXZWJSZWN0JiByZWN0KQogewogICAgIGlmIChpc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3Rp
dmUoKSkgewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpZiBVU0UoVEhSRUFE
RURfQ09NUE9TSVRJTkcpCisgICAgICAgIC8vIEZJWE1FOiBkbyByZWFkYmFjayBpbiB0aHJlYWRl
ZCBjb21wb3NpdGluZyBtb2RlIHJhdGhlciB0aGFuIHJldHVybmluZyBub3RoaW5nCisgICAgICAg
IHJldHVybjsKKyNlbmRpZgogICAgICAgICBkb0NvbXBvc2l0ZSgpOwogCiAgICAgICAgIC8vIElm
IGEgY2FudmFzIHdhcyBwYXNzZWQgaW4sIHdlIHVzZSBpdCB0byBncmFiIGEgY29weSBvZiB0aGUK
QEAgLTExMTEsMTYgKzExMTksMjkgQEAgdm9pZCBXZWJWaWV3SW1wbDo6dGhlbWVDaGFuZ2VkKCkK
ICAgICB2aWV3LT5pbnZhbGlkYXRlUmVjdChkYW1hZ2VkUmVjdCk7CiB9CiAKLXZvaWQgV2ViVmll
d0ltcGw6OmNvbXBvc2l0ZShib29sIGZpbmlzaCkKK3ZvaWQgV2ViVmlld0ltcGw6OmFuaW1hdGVB
bmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQoreworICAgIGFuaW1hdGUoZnJhbWVCZWdp
blRpbWUpOworICAgIGxheW91dCgpOworfQorCit2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVMYXll
cnMoKQogewotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICAvLyBVcGRhdGUg
dGhlIGNvbXBvc2l0aW5nIHJlcXVpcmVtZW50cyBmb3IgYWxsIGZyYW1lIGluIHRoZSB0cmVlIGJl
Zm9yZSBkb2luZyBhbnkgcGFpbnRpbmcKICAgICAvLyBhcyB0aGUgY29tcG9zaXRpbmcgcmVxdWly
ZW1lbnRzIGZvciBhIFJlbmRlckxheWVyIHdpdGhpbiBhIHN1YmZyYW1lIG1pZ2h0IGNoYW5nZS4K
ICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IHBhZ2UoKS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFt
ZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dCgpKQogICAgICAgICBmcmFtZS0+dmlldygp
LT51cGRhdGVDb21wb3NpdGluZ0xheWVycygpOwogICAgIHBhZ2UoKS0+bWFpbkZyYW1lKCktPnZp
ZXcoKS0+c3luY0NvbXBvc2l0aW5nU3RhdGVJbmNsdWRpbmdTdWJmcmFtZXMoKTsKK30KIAordm9p
ZCBXZWJWaWV3SW1wbDo6Y29tcG9zaXRlKGJvb2wgZmluaXNoKQoreworI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKKyNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgbV9s
YXllclJlbmRlcmVyLT5zZXROZWVkc1JlZHJhdygpOworI2Vsc2UKICAgICBUUkFDRV9FVkVOVCgi
V2ViVmlld0ltcGw6OmNvbXBvc2l0ZSIsIHRoaXMsIDApOworCiAgICAgaWYgKG1fcmVjcmVhdGlu
Z0dyYXBoaWNzQ29udGV4dCkgewogICAgICAgICAvLyByZWFsbG9jYXRlUmVuZGVyZXIgd2lsbCBy
ZXF1ZXN0IGEgcmVwYWludCB3aGV0aGVyIG9yIG5vdCBpdCBzdWNjZWVkZWQKICAgICAgICAgLy8g
aW4gY3JlYXRpbmcgYSBuZXcgY29udGV4dC4KQEAgLTExMzAsMTAgKzExNTEsNiBAQCB2b2lkIFdl
YlZpZXdJbXBsOjpjb21wb3NpdGUoYm9vbCBmaW5pc2gpCiAgICAgfQogICAgIGRvQ29tcG9zaXRl
KCk7CiAKLSAgICAvLyBGaW5pc2ggaWYgcmVxdWVzdGVkLgotICAgIGlmIChmaW5pc2gpCi0gICAg
ICAgIG1fbGF5ZXJSZW5kZXJlci0+ZmluaXNoKCk7Ci0KICAgICAvLyBQdXQgcmVzdWx0IG9uc2Ny
ZWVuLgogICAgIG1fbGF5ZXJSZW5kZXJlci0+cHJlc2VudCgpOwogCkBAIC0xMTQ5LDYgKzExNjYs
NyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpjb21wb3NpdGUoYm9vbCBmaW5pc2gpCiAgICAgICAgIHNl
dFJvb3RMYXllck5lZWRzRGlzcGxheSgpOwogICAgIH0KICNlbmRpZgorI2VuZGlmCiB9CiAKIGNv
bnN0IFdlYklucHV0RXZlbnQqIFdlYlZpZXdJbXBsOjptX2N1cnJlbnRJbnB1dEV2ZW50ID0gMDsK
QEAgLTIzODUsNyArMjQwMywxMiBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRSb290R3JhcGhpY3NM
YXllcihXZWJDb3JlOjpQbGF0Zm9ybUxheWVyKiBsYXllcikKIAogdm9pZCBXZWJWaWV3SW1wbDo6
c2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCkKIHsKKyNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJ
TkcpCisgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5z
ZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOworI2Vsc2UKICAgICBtX2NsaWVudC0+c2NoZWR1bGVD
b21wb3NpdGUoKTsKKyNlbmRpZgogfQogCiAKQEAgLTI0NTcsMTYgKzI0ODAsOSBAQCB2b2lkIFdl
YlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoYm9vbCBhY3RpdmUp
CiAKICAgICAgICAgbV9jbGllbnQtPmRpZEFjdGl2YXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyh0
cnVlKTsKICAgICB9IGVsc2UgewotICAgICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNv
bnRleHQgPSBtX3RlbXBvcmFyeU9uc2NyZWVuR3JhcGhpY3NDb250ZXh0M0QucmVsZWFzZSgpOwot
ICAgICAgICBpZiAoIWNvbnRleHQpIHsKLSAgICAgICAgICAgIGNvbnRleHQgPSBHcmFwaGljc0Nv
bnRleHQzRDo6Y3JlYXRlKGdldENvbXBvc2l0b3JDb250ZXh0QXR0cmlidXRlcygpLCBtX3BhZ2Ut
PmNocm9tZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cp
OwotICAgICAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVz
aGFwZShzdGQ6Om1heCgxLCBtX3NpemUud2lkdGgpLCBzdGQ6Om1heCgxLCBtX3NpemUuaGVpZ2h0
KSk7Ci0gICAgICAgIH0KLQotCi0gICAgICAgIG1fbGF5ZXJSZW5kZXJlciA9IExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6Y3JlYXRlKGNvbnRleHQucmVsZWFzZSgpLCBXZWJWaWV3SW1wbENvbnRlbnRQ
YWludGVyOjpjcmVhdGUodGhpcykpOworICAgICAgICBtX2xheWVyUmVuZGVyZXIgPSBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCBXZWJWaWV3SW1wbENvbnRlbnRQYWludGVyOjpj
cmVhdGUodGhpcykpOwogICAgICAgICBpZiAobV9sYXllclJlbmRlcmVyKSB7CisgICAgICAgICAg
ICB1cGRhdGVMYXllclJlbmRlcmVyU2V0dGluZ3MoKTsKICAgICAgICAgICAgIG1fY2xpZW50LT5k
aWRBY3RpdmF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcodHJ1ZSk7CiAgICAgICAgICAgICBtX2lz
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSA9IHRydWU7CiAgICAgICAgICAgICBtX2NvbXBv
c2l0b3JDcmVhdGlvbkZhaWxlZCA9IGZhbHNlOwpAQCAtMjQ5MiwzNSArMjUwOCwzOSBAQCB2b2lk
IFdlYlZpZXdJbXBsOjpkb0NvbXBvc2l0ZSgpCiAgICAgaWYgKCFwYWdlKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIG1fbGF5ZXJSZW5kZXJlci0+c2V0Q29tcG9zaXRlT2Zmc2NyZWVuKHNldHRp
bmdzKCktPmNvbXBvc2l0ZVRvVGV4dHVyZUVuYWJsZWQoKSk7Ci0KLSAgICBDQ0hlYWRzVXBEaXNw
bGF5KiBodWQgPSBtX2xheWVyUmVuZGVyZXItPmhlYWRzVXBEaXNwbGF5KCk7Ci0gICAgaHVkLT5z
ZXRTaG93RlBTQ291bnRlcihzZXR0aW5ncygpLT5zaG93RlBTQ291bnRlcigpKTsKLSAgICBodWQt
PnNldFNob3dQbGF0Zm9ybUxheWVyVHJlZShzZXR0aW5ncygpLT5zaG93UGxhdGZvcm1MYXllclRy
ZWUoKSk7CisgICAgbV9sYXllclJlbmRlcmVyLT51cGRhdGVMYXllcnMoKTsKKyAgICBtX2xheWVy
UmVuZGVyZXItPmRyYXdMYXllcnMoKTsKK30KIAotICAgIG1fbGF5ZXJSZW5kZXJlci0+dXBkYXRl
QW5kRHJhd0xheWVycygpOworUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gV2ViVmlld0lt
cGw6OmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKQoreworICAgIFJlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gY29udGV4dCA9IG1fdGVtcG9yYXJ5T25zY3JlZW5HcmFwaGljc0NvbnRleHQz
RC5yZWxlYXNlKCk7CisgICAgaWYgKCFjb250ZXh0KSB7CisgICAgICAgIGNvbnRleHQgPSBHcmFw
aGljc0NvbnRleHQzRDo6Y3JlYXRlKGdldENvbXBvc2l0b3JDb250ZXh0QXR0cmlidXRlcygpLCBt
X3BhZ2UtPmNocm9tZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RX
aW5kb3cpOworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlc2hh
cGUoc3RkOjptYXgoMSwgbV9zaXplLndpZHRoKSwgc3RkOjptYXgoMSwgbV9zaXplLmhlaWdodCkp
OworICAgIH0KKyAgICByZXR1cm4gY29udGV4dDsKIH0KIAogdm9pZCBXZWJWaWV3SW1wbDo6cmVh
bGxvY2F0ZVJlbmRlcmVyKCkKIHsKLSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG5ld0Nv
bnRleHQgPSBtX3RlbXBvcmFyeU9uc2NyZWVuR3JhcGhpY3NDb250ZXh0M0QuZ2V0KCk7Ci0gICAg
V2ViR3JhcGhpY3NDb250ZXh0M0QqIHdlYkNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzREludGVy
bmFsOjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0QobmV3Q29udGV4dC5nZXQoKSk7Ci0gICAg
aWYgKCFuZXdDb250ZXh0IHx8ICF3ZWJDb250ZXh0IHx8IHdlYkNvbnRleHQtPmlzQ29udGV4dExv
c3QoKSkKLSAgICAgICAgbmV3Q29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoCi0g
ICAgICAgICAgICBnZXRDb21wb3NpdG9yQ29udGV4dEF0dHJpYnV0ZXMoKSwgbV9wYWdlLT5jaHJv
bWUoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKICAg
ICAvLyBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlIG1pZ2h0IGZhaWwgYW5kIHJldHVybiAwLCBp
biB0aGF0IGNhc2UgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUgd2lsbCBhbHNvIHJldHVy
biAwLgotICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVyUmVuZGVyZXIgPSBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShuZXdDb250ZXh0LCBXZWJWaWV3SW1wbENvbnRl
bnRQYWludGVyOjpjcmVhdGUodGhpcykpOworICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21p
dW0+IGxheWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCBX
ZWJWaWV3SW1wbENvbnRlbnRQYWludGVyOjpjcmVhdGUodGhpcykpOwogCiAgICAgLy8gUmVhdHRh
Y2ggdGhlIHJvb3QgbGF5ZXIuICBDaGlsZCBsYXllcnMgd2lsbCBnZXQgcmVhdHRhY2hlZCBhcyBh
IHNpZGUgZWZmZWN0IG9mIHVwZGF0ZUxheWVyc1JlY3Vyc2l2ZS4KICAgICBpZiAobGF5ZXJSZW5k
ZXJlcikgeworCiAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+dHJhbnNmZXJSb290TGF5ZXIobGF5
ZXJSZW5kZXJlci5nZXQoKSk7CiAgICAgICAgIG1fbGF5ZXJSZW5kZXJlciA9IGxheWVyUmVuZGVy
ZXI7CisgICAgICAgIHVwZGF0ZUxheWVyUmVuZGVyZXJTZXR0aW5ncygpOworCiAgICAgICAgIC8v
IEZJWE1FOiBJbiBNYWNPUyBuZXdDb250ZXh0LT5yZXNoYXBlIG1ldGhvZCBuZWVkcyB0byBiZSBj
YWxsZWQgdG8KICAgICAgICAgLy8gYWxsb2NhdGUgSU9TdXJmYWNlcy4gQWxsIGNhbGxzIHRvIGNy
ZWF0ZSBhIGNvbnRleHQgZm9sbG93ZWQgYnkKICAgICAgICAgLy8gcmVzaGFwZSBzaG91bGQgcmVh
bGx5IGJlIGV4dHJhY3RlZCBpbnRvIG9uZSBmdW5jdGlvbjsgaXQgaXMgbm90CiAgICAgICAgIC8v
IGltbWVkaWF0ZWx5IG9idmlvdXMgdGhhdCBHcmFwaGljc0NvbnRleHQzRCBvYmplY3Qgd2lsbCBu
b3QKICAgICAgICAgLy8gZnVuY3Rpb24gcHJvcGVybHkgdW50aWwgaXRzIHJlc2hhcGUgbWV0aG9k
IGlzIGNhbGxlZC4KLSAgICAgICAgbmV3Q29udGV4dC0+cmVzaGFwZShzdGQ6Om1heCgxLCBtX3Np
emUud2lkdGgpLCBzdGQ6Om1heCgxLCBtX3NpemUuaGVpZ2h0KSk7CisgICAgICAgIGxheWVyUmVu
ZGVyZXItPmNvbnRleHQoKS0+cmVzaGFwZShzdGQ6Om1heCgxLCBtX3NpemUud2lkdGgpLCBzdGQ6
Om1heCgxLCBtX3NpemUuaGVpZ2h0KSk7CiAgICAgICAgIHNldFJvb3RHcmFwaGljc0xheWVyKG1f
bGF5ZXJSZW5kZXJlci0+cm9vdExheWVyKCkpOwogICAgICAgICAvLyBGb3JjZXMgVmlld0hvc3RN
c2dfRGlkQWN0aXZhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nIHRvIGJlIHNlbnQgc28KICAgICAg
ICAgLy8gdGhhdCB0aGUgYnJvd3NlciBwcm9jZXNzIGNhbiByZWFjcXVpcmUgc3VyZmFjZXMuCkBA
IC0yNTMwLDEwICsyNTUwLDE4IEBAIHZvaWQgV2ViVmlld0ltcGw6OnJlYWxsb2NhdGVSZW5kZXJl
cigpCiB9CiAjZW5kaWYKIAotdm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlTGF5ZXJSZW5kZXJlclZp
ZXdwb3J0KCkKK3ZvaWQgV2ViVmlld0ltcGw6OnVwZGF0ZUxheWVyUmVuZGVyZXJTZXR0aW5ncygp
CiB7CiAgICAgQVNTRVJUKG1fbGF5ZXJSZW5kZXJlcik7CisgICAgbV9sYXllclJlbmRlcmVyLT5z
ZXRDb21wb3NpdGVPZmZzY3JlZW4oc2V0dGluZ3MoKS0+Y29tcG9zaXRlVG9UZXh0dXJlRW5hYmxl
ZCgpKTsKKworICAgIENDSGVhZHNVcERpc3BsYXkqIGh1ZCA9IG1fbGF5ZXJSZW5kZXJlci0+aGVh
ZHNVcERpc3BsYXkoKTsKKyAgICBodWQtPnNldFNob3dGUFNDb3VudGVyKHNldHRpbmdzKCktPnNo
b3dGUFNDb3VudGVyKCkpOworICAgIGh1ZC0+c2V0U2hvd1BsYXRmb3JtTGF5ZXJUcmVlKHNldHRp
bmdzKCktPnNob3dQbGF0Zm9ybUxheWVyVHJlZSgpKTsKK30KIAordm9pZCBXZWJWaWV3SW1wbDo6
dXBkYXRlTGF5ZXJSZW5kZXJlclZpZXdwb3J0KCkKK3sKICAgICBpZiAoIXBhZ2UoKSkKICAgICAg
ICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJW
aWV3SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAppbmRl
eCBmMjkwODI3NjlmM2ZiMmQyNjhlMGE0N2JkZTM5N2UxNzQ4YWJjNjMxLi5iMjIyZDhhZTU4NjM2
Yjg5NWY4ZDZhMjMzYjZkZmUzNWY1ZGU3MmZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlZpZXdJbXBsLmgKQEAgLTU1LDYgKzU1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xh
c3MgQ2hyb21pdW1EYXRhT2JqZWN0OwogY2xhc3MgRG9jdW1lbnRMb2FkZXI7CiBjbGFzcyBGcmFt
ZTsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogY2xhc3MgSGlzdG9yeUl0ZW07CiBjbGFzcyBI
aXRUZXN0UmVzdWx0OwogY2xhc3MgS2V5Ym9hcmRFdmVudDsKQEAgLTg2LDEzICs4NywxMyBAQCBj
bGFzcyBXZWJNb3VzZVdoZWVsRXZlbnQ7CiBjbGFzcyBXZWJTZXR0aW5nc0ltcGw7CiBjbGFzcyBX
ZWJUb3VjaEV2ZW50OwogCi1jbGFzcyBXZWJWaWV3SW1wbCA6IHB1YmxpYyBXZWJWaWV3LCBwdWJs
aWMgUmVmQ291bnRlZDxXZWJWaWV3SW1wbD4geworY2xhc3MgV2ViVmlld0ltcGwgOiBwdWJsaWMg
V2ViVmlldywgcHVibGljIFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdENsaWVudCwgcHVibGljIFJl
ZkNvdW50ZWQ8V2ViVmlld0ltcGw+IHsKIHB1YmxpYzoKICAgICAvLyBXZWJXaWRnZXQgbWV0aG9k
czoKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsKICAgICB2aXJ0dWFsIFdlYlNpemUgc2l6ZSgp
IHsgcmV0dXJuIG1fc2l6ZTsgfQogICAgIHZpcnR1YWwgdm9pZCByZXNpemUoY29uc3QgV2ViU2l6
ZSYpOwotICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlKCk7CisgICAgdmlydHVhbCB2b2lkIGFuaW1h
dGUoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAg
ICAgdmlydHVhbCB2b2lkIHBhaW50KFdlYkNhbnZhcyosIGNvbnN0IFdlYlJlY3QmKTsKICAgICB2
aXJ0dWFsIHZvaWQgdGhlbWVDaGFuZ2VkKCk7CkBAIC0xOTksNiArMjAwLDExIEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluYWN0aXZlRm9y
ZWdyb3VuZENvbG9yKTsKICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybUN1c3RvbUNvbnRleHRNZW51
QWN0aW9uKHVuc2lnbmVkIGFjdGlvbik7CiAKKyAgICAvLyBDQ0xheWVyVHJlZUhvc3RDbGllbnQK
KyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUp
OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRD4gY3Jl
YXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVMYXll
cnMoKTsKKwogICAgIC8vIFdlYlZpZXdJbXBsCiAKICAgICB2b2lkIHNldElnbm9yZUlucHV0RXZl
bnRzKGJvb2wgbmV3VmFsdWUpOwpAQCAtMzQ3LDYgKzM1Myw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpOwogICAgIHZvaWQgc2Nyb2xsUm9vdExheWVyUmVj
dChjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxEZWx0YSwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgY2xpcFJlY3QpOwogICAgIHZvaWQgaW52YWxpZGF0ZVJvb3RMYXllclJlY3QoY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQgZG9VcGRhdGVBbmRDb21wb3NpdGUoKTsKICNl
bmRpZgogCiAgICAgLy8gUmV0dXJucyB0aGUgb25zY3JlZW4gM0QgY29udGV4dCB1c2VkIGJ5IHRo
ZSBjb21wb3NpdG9yLiBUaGlzIGlzCkBAIC00MDksMTEgKzQxNiwxMyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJQb2lu
dCYgc2NyZWVuUG9pbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIERyYWdBY3Rpb24pOwogCisKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CiAgICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoYm9vbCk7CiAgICAg
dm9pZCBkb0NvbXBvc2l0ZSgpOwogICAgIHZvaWQgZG9QaXhlbFJlYWRiYWNrVG9DYW52YXMoV2Vi
Q2FudmFzKiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwogICAgIHZvaWQgcmVhbGxvY2F0ZVJl
bmRlcmVyKCk7CisgICAgdm9pZCB1cGRhdGVMYXllclJlbmRlcmVyU2V0dGluZ3MoKTsKICAgICB2
b2lkIHVwZGF0ZUxheWVyUmVuZGVyZXJWaWV3cG9ydCgpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmQ4NTQ4MDY1ODRmZjMzZWExMzVjNmQwOWI1NTJmNzA5ZWQwMTY3MTAKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRl
c3QuY3BwCkBAIC0wLDAgKzEsNTM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJjYy9DQ0xh
eWVyVHJlZUhvc3QuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVk
ZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgorI2luY2x1ZGUgImNjL0NDTWFpblRocmVhZFRh
c2suaCIKKyNpbmNsdWRlICJjYy9DQ1RocmVhZFRhc2suaCIKKyNpbmNsdWRlIDxndGVzdC9ndGVz
dC5oPgorI2luY2x1ZGUgPHdlYmtpdC9zdXBwb3J0L3dlYmtpdF9zdXBwb3J0Lmg+CisjaW5jbHVk
ZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5h
bWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIE1vY2tMYXllclRyZWVIb3N0Owor
Y2xhc3MgTW9ja0xheWVyVHJlZUhvc3RDbGllbnQ7CitjbGFzcyBNb2NrTGF5ZXJUcmVlSG9zdElt
cGw7CisKKy8vIFRoZSBDQ0xheWVyVHJlZUhvc3RUZXN0IHJ1bnMgd2l0aCB0aGUgbWFpbiBsb29w
IHJ1bm5pbmcuIEl0IGluc3RhbnRpYXRlcyBhIHNpbmdsZSBNb2NrTGF5ZXJUcmVlSG9zdCBhbmQg
YXNzb2NpYXRlZAorLy8gTW9ja0xheWVyVHJlZUhvc3RJbXBsL01vY2tMYXllclRyZWVIb3N0Q2xp
ZW50LgorLy8KKy8vIGJlZ2luVGVzdCgpIGlzIGNhbGxlZCBvbmNlIHRoZSBtYWluIG1lc3NhZ2Ug
bG9vcCBpcyBydW5uaW5nIGFuZCB0aGUgbGF5ZXIgdHJlZSBob3N0IGlzIGluaXRpYWxpemVkLgor
Ly8KKy8vIEtleSBzdGFnZXMgb2YgdGhlIGRyYXdpbmcgbG9vcCwgZS5nLiBkcmF3aW5nIG9yIGNv
bW1pdGluZywgcmVkaXJlY3QgdG8gQ0NMYXllclRyZWVIb3N0VGVzdCBtZXRob2RzIG9mIHNpbWls
YXIgbmFtZXMuCisvLyBUbyB0cmFjayB0aGUgY29tbWl0IHByb2Nlc3MsIG92ZXJyaWRlIHRoZXNl
IGZ1bmN0aW9ucy4KKy8vCisvLyBUaGUgdGVzdCBjb250aW51ZXMgdW50aWwgc29tZW9uZSBjYWxs
cyBlbmRUZXN0LiBlbmRUZXN0IGNhbiBiZSBjYWxsZWQgb24gYW55IHRocmVhZCwgYnV0IGJlIGF3
YXJlIHRoYXQKKy8vIGVuZGluZyB0aGUgdGVzdCBpcyBhbiBhc3luY2hyb25vdXMgcHJvY2Vzcy4K
K2NsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7CitwdWJs
aWM6CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdCgpCisgICAgICAgIDogbV9iZWdpbm5pbmcoZmFs
c2UpCisgICAgICAgICwgbV9lbmRXaGVuQmVnaW5SZXR1cm5zKGZhbHNlKQorICAgICAgICAsIG1f
cnVubmluZyhmYWxzZSkKKyAgICAgICAgLCBtX3RpbWVkT3V0KGZhbHNlKSB7IH0KKworICAgIHZp
cnR1YWwgdm9pZCBhZnRlclRlc3QoKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0
KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KE1vY2tMYXllclRyZWVI
b3N0Q2xpZW50KiBsYXllclRyZWVIb3N0LCBkb3VibGUgZnJhbWVCZWdpblRpbWUpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdE9uQ0NUaHJlYWQoTW9ja0xheWVyVHJlZUhvc3RJbXBs
KiBsYXllclRyZWVIb3N0SW1wbCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0T25N
YWluVGhyZWFkKE1vY2tMYXllclRyZWVIb3N0KiBsYXllclRyZWVIb3N0KSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgY29tbWl0T25DQ1RocmVhZChNb2NrTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9z
dCwgTW9ja0xheWVyVHJlZUhvc3RJbXBsKiBsYXllclRyZWVIb3N0SW1wbCkgeyB9CisgICAgdmly
dHVhbCB2b2lkIGNvbW1pdENvbXBsZXRlT25DQ1RocmVhZChNb2NrTGF5ZXJUcmVlSG9zdEltcGwq
IGxheWVyVHJlZUhvc3RJbXBsKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q29tcGxldGVP
bk1haW5UaHJlYWQoTW9ja0xheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QpIHsgfQorICAgIHZp
cnR1YWwgdm9pZCBkcmF3TGF5ZXJzQW5kUHJlc2VudE9uQ0NUaHJlYWQoTW9ja0xheWVyVHJlZUhv
c3RJbXBsKiBsYXllclRyZWVIb3N0SW1wbCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUxh
eWVycyhNb2NrTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCkgeyB9CisKKyAgICB2b2lkIGVu
ZFRlc3QoKTsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZG9CZWdpblRlc3QoKTsKKworICAgIHN0
YXRpYyB2b2lkIG9uQmVnaW5UZXN0KHZvaWQqIHNlbGYpCisgICAgeworICAgICAgICBzdGF0aWNf
Y2FzdDxDQ0xheWVyVHJlZUhvc3RUZXN0Kj4oc2VsZiktPmRvQmVnaW5UZXN0KCk7CisgICAgfQor
CisgICAgdm9pZCBkb0VuZFRlc3QoKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBv
bkVuZFRlc3Qodm9pZCogc2VsZikKKyAgICB7CisgICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdFRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxDQ0xh
eWVyVHJlZUhvc3RUZXN0Kj4oc2VsZik7CisgICAgICAgIHRlc3QtPm1fbGF5ZXJUcmVlSG9zdC5j
bGVhcigpOworICAgICAgICB0ZXN0LT5tX2NsaWVudC5jbGVhcigpOworICAgICAgICB3ZWJraXRf
c3VwcG9ydDo6UXVpdE1lc3NhZ2VMb29wKCk7CisgICAgfQorCisgICAgdm9pZCBydW5UZXN0KCkK
KyAgICB7CisgICAgICAgIHdlYmtpdF9zdXBwb3J0OjpQb3N0RGVsYXllZFRhc2soQ0NMYXllclRy
ZWVIb3N0VGVzdDo6b25CZWdpblRlc3QsIHN0YXRpY19jYXN0PHZvaWQqPih0aGlzKSwgMCk7Cisg
ICAgICAgIHdlYmtpdF9zdXBwb3J0OjpQb3N0RGVsYXllZFRhc2soQ0NMYXllclRyZWVIb3N0VGVz
dDo6dGVzdFRpbWVvdXQsIHN0YXRpY19jYXN0PHZvaWQqPih0aGlzKSwgNTAwMCk7CisgICAgICAg
IHdlYmtpdF9zdXBwb3J0OjpSdW5NZXNzYWdlTG9vcCgpOworICAgICAgICBtX3J1bm5pbmcgPSBm
YWxzZTsKKyAgICAgICAgYm9vbCB0aW1lZE91dCA9IG1fdGltZWRPdXQ7IC8vIFNhdmUgd2hldGhl
ciB3ZSdyZSB0aW1lZCBvdXQgaW4gY2FzZSBSdW5BbGxQZW5kaW5nTWVzc2FnZXMgaGFzIHRoZSB0
aW1lb3V0LgorICAgICAgICB3ZWJraXRfc3VwcG9ydDo6UnVuQWxsUGVuZGluZ01lc3NhZ2VzKCk7
CisgICAgICAgIGlmICh0aW1lZE91dCkgeworICAgICAgICAgICAgcHJpbnRmKCJUZXN0IHRpbWVk
IG91dCIpOworICAgICAgICAgICAgRkFJTCgpIDw8ICJUZXN0IHRpbWVkIG91dCI7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYWZ0ZXJUZXN0KCk7CisgICAgfQorCisg
ICAgc3RhdGljIHZvaWQgdGVzdFRpbWVvdXQodm9pZCogc2VsZikKKyAgICB7CisgICAgICAgIEND
TGF5ZXJUcmVlSG9zdFRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxDQ0xheWVyVHJlZUhvc3RUZXN0
Kj4oc2VsZik7CisgICAgICAgIGlmICghdGVzdC0+bV9ydW5uaW5nKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB0ZXN0LT5tX3RpbWVkT3V0ID0gdHJ1ZTsKKyAgICAgICAgdGVzdC0+ZW5k
VGVzdCgpOworICAgIH0KKworICAgIE11dGV4IG1fdHJhY2VzTG9jazsKKyAgICBWZWN0b3I8c3Rk
OjpzdHJpbmc+IG1fdHJhY2VzOworCisgICAgT3duUHRyPE1vY2tMYXllclRyZWVIb3N0Q2xpZW50
PiBtX2NsaWVudDsKKyAgICBSZWZQdHI8TW9ja0xheWVyVHJlZUhvc3Q+IG1fbGF5ZXJUcmVlSG9z
dDsKKworcHJpdmF0ZToKKyAgICBib29sIG1fYmVnaW5uaW5nOworICAgIGJvb2wgbV9lbmRXaGVu
QmVnaW5SZXR1cm5zOworICAgIGJvb2wgbV9ydW5uaW5nOworICAgIGJvb2wgbV90aW1lZE91dDsK
K307CisKK2NsYXNzIE1vY2tMYXllclRyZWVIb3N0Q2xpZW50IDogcHVibGljIENDTGF5ZXJUcmVl
SG9zdENsaWVudCB7CitwdWJsaWM6CisgICAgTW9ja0xheWVyVHJlZUhvc3RDbGllbnQoQ0NMYXll
clRyZWVIb3N0VGVzdCogdGVzdCkgOiBtX3Rlc3QodGVzdCkgeyB9CisKKyAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0Qo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmPEdyYXBoaWNzQ29udGV4dDNEPigwKTsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVC
ZWdpblRpbWUpCisgICAgeworICAgICAgICBtX3Rlc3QtPmFuaW1hdGVBbmRMYXlvdXQodGhpcywg
ZnJhbWVCZWdpblRpbWUpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVMYXllcnMo
KQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdCogbV90
ZXN0OworfTsKKworY2xhc3MgTW9ja0xheWVyVHJlZUhvc3RDb21taXR0ZXIgOiBwdWJsaWMgQ0NM
YXllclRyZWVIb3N0Q29tbWl0dGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxN
b2NrTGF5ZXJUcmVlSG9zdENvbW1pdHRlcj4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdFRlc3QqIHRl
c3QpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE1vY2tMYXllclRyZWVIb3N0
Q29tbWl0dGVyKHRlc3QpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0KENDTGF5
ZXJUcmVlSG9zdCogaG9zdCwgQ0NMYXllclRyZWVIb3N0SW1wbCogaG9zdEltcGwpCisgICAgewor
ICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI6OmNvbW1pdChob3N0LCBob3N0SW1wbCk7
CisgICAgICAgIG1fdGVzdC0+Y29tbWl0T25DQ1RocmVhZChyZWludGVycHJldF9jYXN0PE1vY2tM
YXllclRyZWVIb3N0Kj4oaG9zdCksIHJlaW50ZXJwcmV0X2Nhc3Q8TW9ja0xheWVyVHJlZUhvc3RJ
bXBsKj4oaG9zdEltcGwpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTW9ja0xheWVyVHJlZUhv
c3RDb21taXR0ZXIoQ0NMYXllclRyZWVIb3N0VGVzdCogdGVzdCkgOiBtX3Rlc3QodGVzdCkgeyB9
CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdCogbV90ZXN0OworfTsKKworY2xhc3MgTW9ja0xheWVy
VHJlZUhvc3RJbXBsIDogcHVibGljIENDTGF5ZXJUcmVlSG9zdEltcGwgeworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzT3duUHRyPE1vY2tMYXllclRyZWVIb3N0SW1wbD4gY3JlYXRlKENDTGF5ZXJU
cmVlSG9zdEltcGxDbGllbnQqIGNsaWVudCwgQ0NMYXllclRyZWVIb3N0VGVzdCogdGVzdCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgTW9ja0xheWVyVHJlZUhvc3RJbXBsKGNs
aWVudCwgdGVzdCkpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdCgpCisg
ICAgeworICAgICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsOjpiZWdpbkNvbW1pdCgpOworICAgICAg
ICBtX3Rlc3QtPmJlZ2luQ29tbWl0T25DQ1RocmVhZCh0aGlzKTsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgY29tbWl0Q29tcGxldGUoKQorICAgIHsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0
SW1wbDo6Y29tbWl0Q29tcGxldGUoKTsKKyAgICAgICAgbV90ZXN0LT5jb21taXRDb21wbGV0ZU9u
Q0NUaHJlYWQodGhpcyk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNBbmRQ
cmVzZW50KCkKKyAgICB7CisgICAgICAgIG1fdGVzdC0+ZHJhd0xheWVyc0FuZFByZXNlbnRPbkND
VGhyZWFkKHRoaXMpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNb2NrTGF5ZXJUcmVlSG9zdElt
cGwoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogY2xpZW50LCBDQ0xheWVyVHJlZUhvc3RUZXN0
KiB0ZXN0KQorICAgICAgICAgICAgOiBDQ0xheWVyVHJlZUhvc3RJbXBsKGNsaWVudCkKKyAgICAg
ICAgICAgICwgbV90ZXN0KHRlc3QpCisgICAgeworICAgIH0KKworICAgIENDTGF5ZXJUcmVlSG9z
dFRlc3QqIG1fdGVzdDsKK307CisKK2NsYXNzIE1vY2tMYXllclRyZWVIb3N0SW1wbFByb3h5IDog
cHVibGljIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NPd25QdHI8TW9ja0xheWVyVHJlZUhvc3RJbXBsUHJveHk+IGNyZWF0ZShDQ0xheWVyVHJlZUhv
c3QqIGhvc3QsIENDTGF5ZXJUcmVlSG9zdFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRQdHIobmV3IE1vY2tMYXllclRyZWVIb3N0SW1wbFByb3h5KGhvc3QsIHRlc3QpKTsK
KyAgICB9CisKKyAgICBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IGNyZWF0ZUxheWVy
VHJlZUhvc3RJbXBsKCkKKyAgICB7CisgICAgICAgIHJldHVybiBNb2NrTGF5ZXJUcmVlSG9zdElt
cGw6OmNyZWF0ZSh0aGlzLCBtX3Rlc3QpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNb2NrTGF5
ZXJUcmVlSG9zdEltcGxQcm94eShDQ0xheWVyVHJlZUhvc3QqIGhvc3QsIENDTGF5ZXJUcmVlSG9z
dFRlc3QqIHRlc3QpCisgICAgICAgIDogQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5KGhvc3QpCisg
ICAgICAgICwgbV90ZXN0KHRlc3QpIHsgfQorCisgICAgQ0NMYXllclRyZWVIb3N0VGVzdCogbV90
ZXN0OworfTsKKworY2xhc3MgTW9ja0xheWVyVHJlZUhvc3QgOiBwdWJsaWMgQ0NMYXllclRyZWVI
b3N0IHsKK3B1YmxpYzoKKyAgICBNb2NrTGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3RDbGll
bnQqIGNsaWVudCwgQ0NMYXllclRyZWVIb3N0VGVzdCogdGVzdCkKKyAgICAgICAgOiBDQ0xheWVy
VHJlZUhvc3QoY2xpZW50KQorICAgICAgICAsIG1fdGVzdCh0ZXN0KSB7IH0KKworICAgIHZpcnR1
YWwgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk+IGNyZWF0ZUxheWVyVHJlZUhv
c3RJbXBsUHJveHkoKQorICAgIHsKKyAgICAgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eT4gcHJveHkgPSBNb2NrTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6Y3JlYXRlKHRoaXMsIG1f
dGVzdCk7CisgICAgICAgIHByb3h5LT5zdGFydCgpOworICAgICAgICByZXR1cm4gcHJveHkucmVs
ZWFzZSgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVMYXllcnMoKQorICAgIHsK
KyAgICAgICAgbV90ZXN0LT51cGRhdGVMYXllcnModGhpcyk7CisgICAgfQorCisgICAgdmlydHVh
bCBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcj4gY3JlYXRlTGF5ZXJUcmVlSG9z
dENvbW1pdHRlcigpCisgICAgeworICAgICAgICByZXR1cm4gTW9ja0xheWVyVHJlZUhvc3RDb21t
aXR0ZXI6OmNyZWF0ZShtX3Rlc3QpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNv
bW1pdCgpCisgICAgeworICAgICAgICBDQ0xheWVyVHJlZUhvc3Q6OmJlZ2luQ29tbWl0KCk7Cisg
ICAgICAgIG1fdGVzdC0+YmVnaW5Db21taXRPbk1haW5UaHJlYWQodGhpcyk7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIGNvbW1pdENvbXBsZXRlKCkKKyAgICB7CisgICAgICAgIG1fdGVzdC0+
Y29tbWl0Q29tcGxldGVPbk1haW5UaHJlYWQodGhpcyk7CisgICAgICAgIENDTGF5ZXJUcmVlSG9z
dDo6Y29tbWl0Q29tcGxldGUoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ0NMYXllclRyZWVI
b3N0VGVzdCogbV90ZXN0OworfTsKKwordm9pZCBDQ0xheWVyVHJlZUhvc3RUZXN0Ojpkb0JlZ2lu
VGVzdCgpCit7CisgICAgQVNTRVJUKCFtX3J1bm5pbmcpOworICAgIG1fcnVubmluZyA9IHRydWU7
CisgICAgbV9jbGllbnQgPSBhZG9wdFB0cihuZXcgTW9ja0xheWVyVHJlZUhvc3RDbGllbnQodGhp
cykpOworICAgIG1fbGF5ZXJUcmVlSG9zdCA9IGFkb3B0UmVmKG5ldyBNb2NrTGF5ZXJUcmVlSG9z
dChtX2NsaWVudC5nZXQoKSwgdGhpcykpOworICAgIG1fbGF5ZXJUcmVlSG9zdC0+aW5pdCgpOwor
ICAgIG1fYmVnaW5uaW5nID0gdHJ1ZTsKKyAgICBiZWdpblRlc3QoKTsKKyAgICBtX2JlZ2lubmlu
ZyA9IGZhbHNlOworICAgIGlmIChtX2VuZFdoZW5CZWdpblJldHVybnMpCisgICAgICAgIG9uRW5k
VGVzdChzdGF0aWNfY2FzdDx2b2lkKj4odGhpcykpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9z
dFRlc3Q6OmVuZFRlc3QoKQoreworICAgIC8vIElmIHdlIGFyZSBjYWxsZWQgZnJvbSB0aGUgQ0NU
aHJlYWQsIHJlLWNhbGwgZW5kVGVzdCBvbiB0aGUgbWFpbiB0aHJlYWQuCisgICAgaWYgKCFpc01h
aW5UaHJlYWQoKSkKKyAgICAgICAgQ0NNYWluVGhyZWFkOjpwb3N0VGFzayhjcmVhdGVNYWluVGhy
ZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0VGVzdDo6ZW5kVGVzdCkpOworICAgIGVsc2Ug
eworICAgICAgICAvLyBGb3IgdGhlIGNhc2Ugd2hlcmUgd2UgZW5kVGVzdCBkdXJpbmcgYmVnaW5U
ZXN0KCksIHNldCBhIGZsYWcgdG8gaW5kaWNhdGUgdGhhdAorICAgICAgICAvLyB0aGUgdGVzdCBz
aG91bGQgZW5kIHRoZSBzZWNvbmQgYmVnaW5UZXN0IHJlZ2FpbnMgY29udHJvbC4KKyAgICAgICAg
aWYgKG1fYmVnaW5uaW5nKQorICAgICAgICAgICAgbV9lbmRXaGVuQmVnaW5SZXR1cm5zID0gdHJ1
ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb25FbmRUZXN0KHN0YXRpY19jYXN0PHZvaWQq
Pih0aGlzKSk7CisgICAgfQorfQorCisvLyBTaG9ydGxpdmVkIGxheWVyVHJlZUhvc3RzIHNob3Vs
ZG4ndCBkaWUuCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDEgOiBwdWJsaWMg
Q0NMYXllclRyZWVIb3N0VGVzdCB7CitwdWJsaWM6CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdFNo
b3J0bGl2ZWQxKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkKKyAgICB7Cisg
ICAgICAgIGVuZFRlc3QoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkK
KyAgICB7CisgICAgfQorfTsKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDEs
IHJ1bikKK3sKKyAgICBydW5UZXN0KCk7Cit9CisKKy8vIFNob3J0bGl2ZWQgbGF5ZXJUcmVlSG9z
dHMgc2hvdWxkbid0IGRpZSB3aXRoIGEgY29tbWl0IGluIGZsaWdodC4KK2NsYXNzIENDTGF5ZXJU
cmVlSG9zdFRlc3RTaG9ydGxpdmVkMiA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0IHsKK3B1
YmxpYzoKKyAgICBDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDIoKSB7IH0KKworICAgIHZp
cnR1YWwgdm9pZCBiZWdpblRlc3QoKQorICAgIHsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5z
ZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOworICAgICAgICBlbmRUZXN0KCk7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIGFmdGVyVGVzdCgpCisgICAgeworICAgIH0KK307CitURVNUX0YoQ0NM
YXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQyLCBydW4pCit7CisgICAgcnVuVGVzdCgpOworfQor
CisvLyBTaG9ydGxpdmVkIGxheWVyVHJlZUhvc3RzIHNob3VsZG4ndCBkaWUgd2l0aCBhIHJlZHJh
dyBpbiBmbGlnaHQuCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDMgOiBwdWJs
aWMgQ0NMYXllclRyZWVIb3N0VGVzdCB7CitwdWJsaWM6CisgICAgQ0NMYXllclRyZWVIb3N0VGVz
dFNob3J0bGl2ZWQzKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkKKyAgICB7
CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0TmVlZHNSZWRyYXcoKTsKKyAgICAgICAgZW5k
VGVzdCgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhZnRlclRlc3QoKQorICAgIHsKKyAg
ICB9Cit9OworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RTaG9ydGxpdmVkMywgcnVuKQorewor
ICAgIHJ1blRlc3QoKTsKK30KKworLy8gQ29uc3RhbnRseSByZWRyYXdpbmcgbGF5ZXJUcmVlSG9z
dHMgc2hvdWxkbid0IGRpZSB3aGVuIHRoZXkgY29tbWl0CitjbGFzcyBDQ0xheWVyVHJlZUhvc3RU
ZXN0Q29tbWl0aW5nV2l0aENvbnRpbnVvdXNSZWRyYXcgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0
VGVzdCB7CitwdWJsaWM6CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdENvbW1pdGluZ1dpdGhDb250
aW51b3VzUmVkcmF3KCkKKyAgICAgICAgOiBtX251bUNvbXBsZXRlQ29tbWl0cygwKQorICAgICAg
ICAsIG1fbnVtRHJhd3MoMCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGJlZ2lu
VGVzdCgpCisgICAgeworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldE5lZWRzQ29tbWl0QW5k
UmVkcmF3KCk7CisgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
Y29tbWl0Q29tcGxldGVPbkNDVGhyZWFkKE1vY2tMYXllclRyZWVIb3N0SW1wbCogbGF5ZXJUcmVl
SG9zdEltcGwpCisgICAgeworICAgICAgICBtX251bUNvbXBsZXRlQ29tbWl0cysrOworICAgICAg
ICBpZiAobV9udW1Db21wbGV0ZUNvbW1pdHMgPT0gMikKKyAgICAgICAgICAgIGVuZFRlc3QoKTsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhyZWFk
KE1vY2tMYXllclRyZWVIb3N0SW1wbCogbGF5ZXJUcmVlSG9zdEltcGwpCisgICAgeworICAgICAg
ICBpZiAobV9udW1EcmF3cyA9PSAxKQorICAgICAgICAgICAgbGF5ZXJUcmVlSG9zdEltcGwtPnNl
dE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgICAgIG1fbnVtRHJhd3MrKzsKKyAgICAgICAg
bGF5ZXJUcmVlSG9zdEltcGwtPnNldE5lZWRzUmVkcmF3KCk7CisgICAgfQorCisgICAgdmlydHVh
bCB2b2lkIGFmdGVyVGVzdCgpCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICBpbnQgbV9u
dW1Db21wbGV0ZUNvbW1pdHM7CisgICAgaW50IG1fbnVtRHJhd3M7Cit9OworVEVTVF9GKENDTGF5
ZXJUcmVlSG9zdFRlc3RDb21taXRpbmdXaXRoQ29udGludW91c1JlZHJhdywgcnVuKQoreworICAg
IHJ1blRlc3QoKTsKK30KKworLy8gVHdvIHNldE5lZWRzQ29tbWl0cyBpbiBhIHJvdyBzaG91bGQg
bGVhZCB0byBhdCBsZWFzdCAxIGNvbW1pdCBhbmQgYXQgbGVhc3QgMQorLy8gZHJhdyB3aXRoIGZy
YW1lIDAuCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQxIDogcHVibGlj
IENDTGF5ZXJUcmVlSG9zdFRlc3QgeworcHVibGljOgorICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RT
ZXROZWVkc0NvbW1pdDEoKQorICAgICAgICA6IG1fbnVtQ29tbWl0cygwKQorICAgICAgICAsIG1f
bnVtRHJhd3MoMCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGJlZ2luVGVzdCgp
CisgICAgeworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3
KCk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhyZWFk
KE1vY2tMYXllclRyZWVIb3N0SW1wbCogbGF5ZXJUcmVlSG9zdEltcGwpCisgICAgeworICAgICAg
ICBtX251bURyYXdzKys7CisgICAgICAgIGlmICghbGF5ZXJUcmVlSG9zdEltcGwtPnNvdXJjZUZy
YW1lTnVtYmVyKCkpCisgICAgICAgICAgICBlbmRUZXN0KCk7CisgICAgfQorCisgICAgdmlydHVh
bCB2b2lkIGNvbW1pdE9uQ0NUaHJlYWQoTW9ja0xheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3Qs
IE1vY2tMYXllclRyZWVIb3N0SW1wbCogaW1wbCkKKyAgICB7CisgICAgICAgIG1fbnVtQ29tbWl0
cysrOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhZnRlclRlc3QoKQorICAgIHsKKyAgICAg
ICAgRVhQRUNUX0dFKDEsIG1fbnVtQ29tbWl0cyk7CisgICAgICAgIEVYUEVDVF9HRSgxLCBtX251
bURyYXdzKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgaW50IG1fbnVtQ29tbWl0czsKKyAgICBp
bnQgbV9udW1EcmF3czsKK307CitURVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzQ29t
bWl0MSwgcnVuKQoreworICAgIHJ1blRlc3QoKTsKK30KKworLy8gQSBzZXROZWVkc0NvbW1pdCBz
aG91bGQgbGVhZCB0byAxIGNvbW1pdC4gSXNzdWluZyBhIHNlY29uZCBjb21taXQgYWZ0ZXIgdGhh
dAorLy8gZmlyc3QgY29tbWl0dGVkIGZyYW1lIGRyYXdzIHNob3VsZCBsZWFkIHRvIGFub3RoZXIg
Y29tbWl0LgorY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzQ29tbWl0MiA6IHB1Ymxp
YyBDQ0xheWVyVHJlZUhvc3RUZXN0IHsKK3B1YmxpYzoKKyAgICBDQ0xheWVyVHJlZUhvc3RUZXN0
U2V0TmVlZHNDb21taXQyKCkKKyAgICAgICAgOiBtX251bUNvbW1pdHMoMCkKKyAgICAgICAgLCBt
X251bURyYXdzKDApCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3Qo
KQorICAgIHsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXROZWVkc0NvbW1pdEFuZFJlZHJh
dygpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGF5ZXJzQW5kUHJlc2VudE9uQ0NU
aHJlYWQoTW9ja0xheWVyVHJlZUhvc3RJbXBsKiBsYXllclRyZWVIb3N0SW1wbCkKKyAgICB7Cisg
ICAgICAgIGlmICghbGF5ZXJUcmVlSG9zdEltcGwtPnNvdXJjZUZyYW1lTnVtYmVyKCkpCisgICAg
ICAgICAgICBsYXllclRyZWVIb3N0SW1wbC0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAg
ICAgICAgZWxzZSBpZiAobGF5ZXJUcmVlSG9zdEltcGwtPnNvdXJjZUZyYW1lTnVtYmVyKCkgPT0g
MSkKKyAgICAgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY29t
bWl0T25DQ1RocmVhZChNb2NrTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCwgTW9ja0xheWVy
VHJlZUhvc3RJbXBsKiBpbXBsKQorICAgIHsKKyAgICAgICAgbV9udW1Db21taXRzKys7CisgICAg
fQorCisgICAgdmlydHVhbCB2b2lkIGFmdGVyVGVzdCgpCisgICAgeworICAgICAgICBFWFBFQ1Rf
RVEoMiwgbV9udW1Db21taXRzKTsKKyAgICAgICAgRVhQRUNUX0dFKDIsIG1fbnVtRHJhd3MpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBpbnQgbV9udW1Db21taXRzOworICAgIGludCBtX251bURy
YXdzOworfTsKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQyLCBydW4p
Cit7CisgICAgcnVuVGVzdCgpOworfQorCisvLyAxIHNldE5lZWRzUmVkcmF3IGFmdGVyIHRoZSBm
aXJzdCBjb21taXQgaGFzIGNvbXBsZXRlZCBzaG91bGQgbGVhZCB0byAxCisvLyBhZGRpdGlvbmFs
IGRyYXcuCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNSZWRyYXcgOiBwdWJsaWMg
Q0NMYXllclRyZWVIb3N0VGVzdCB7CitwdWJsaWM6CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdFNl
dE5lZWRzUmVkcmF3KCkKKyAgICAgICAgOiBtX251bUNvbW1pdHMoMCkKKyAgICAgICAgLCBtX251
bURyYXdzKDApCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKQor
ICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVyc0FuZFByZXNlbnRPbkND
VGhyZWFkKE1vY2tMYXllclRyZWVIb3N0SW1wbCogaW1wbCkKKyAgICB7CisgICAgICAgIEVYUEVD
VF9FUSgwLCBpbXBsLT5zb3VyY2VGcmFtZU51bWJlcigpKTsKKyAgICAgICAgaWYgKCFtX251bURy
YXdzKQorICAgICAgICAgICAgaW1wbC0+c2V0TmVlZHNSZWRyYXcoKTsgLy8gcmVkcmF3IGFnYWlu
IHRvIHZlcmlmeSB0aGF0IHRoZSBzZWNvbmQgcmVkcmF3IGRvZXNudCBjb21taXQuCisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGVuZFRlc3QoKTsKKyAgICAgICAgbV9udW1EcmF3cysrOworICAg
IH0KKworICAgIHZpcnR1YWwgdm9pZCBjb21taXRPbkNDVGhyZWFkKE1vY2tMYXllclRyZWVIb3N0
KiBsYXllclRyZWVIb3N0LCBNb2NrTGF5ZXJUcmVlSG9zdEltcGwqIGltcGwpCisgICAgeworICAg
ICAgICBtX251bUNvbW1pdHMrKzsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0
KCkKKyAgICB7CisgICAgICAgIEVYUEVDVF9HRSgyLCBtX251bURyYXdzKTsKKyAgICAgICAgRVhQ
RUNUX0VRKDEsIG1fbnVtQ29tbWl0cyk7CisgICAgfQorCitwcml2YXRlOgorICAgIGludCBtX251
bUNvbW1pdHM7CisgICAgaW50IG1fbnVtRHJhd3M7Cit9OworVEVTVF9GKENDTGF5ZXJUcmVlSG9z
dFRlc3RTZXROZWVkc1JlZHJhdywgcnVuKQoreworICAgIHJ1blRlc3QoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UKKworI2VuZGlmIC8vIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaHJlYWRUZXN0LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaHJlYWRUZXN0LmNwcAppbmRleCAwOWM0MTkzZGE5
MjJiNWM3OTViZjY4MTZhMmJjNTcwNDFhZDFlZDhlLi40YzczNGQ5NmVkMTNkY2EzOGFkNzQ4NmIy
OTcxNTE2OGYyNzk5ZGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDVGhyZWFkVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1Ro
cmVhZFRlc3QuY3BwCkBAIC01MSw2ICs1MSw3IEBAIHB1YmxpYzoKIFRFU1QoQ0NUaHJlYWRUZXN0
LCBwaW5nUG9uZ1VzaW5nQ29uZGl0aW9uKQogewogICAgIE93blB0cjxDQ1RocmVhZD4gdGhyZWFk
ID0gQ0NUaHJlYWQ6OmNyZWF0ZSgpOworCiAgICAgUGluZ1BvbmdVc2luZ0NvbmRpdGlvbiB0YXJn
ZXQ7CiAgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKICAgICB0aHJlYWQtPnBvc3RU
YXNrKGNyZWF0ZUNDVGhyZWFkVGFzaygmdGFyZ2V0LCAmUGluZ1BvbmdVc2luZ0NvbmRpdGlvbjo6
cGluZywgCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5k
ZXggN2RiMjQ0MTc2NWFiMzc4YThjYjI2ZjdlZjAxMmI3ZDc3NDY0ZWUzNC4uOWQzYTg3N2NlMjFm
MzgzNWU3MTAxYTJjY2UzNjlhNDk5NjhmOTk3OCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9n
CisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDExLTA1LTE3ICBOYXQg
RHVjYSAgPG5kdWNhQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIEltcGxlbWVudCBDQ0xheWVyVHJlZUhvc3Qg
YW5kIENDTGF5ZXJUcmVlSG9zdEltcGwgcG9ydGlvbnMgb2YgdGhyZWFkZWQgY29tcG9zaXRvcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg0MDgKKwor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcDoKKyAgICAg
ICAgKFdlYlZpZXdIb3N0OjpwYWludEludmFsaWRhdGVkUmVnaW9uKToKKwogMjAxMS0wNS0xNiAg
Um9iZXJ0IEhvZ2FuICA8cm9iZXJ0QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
S2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9XZWJWaWV3SG9zdC5jcHAKaW5kZXggYzAxY2RkNjk4NTViMGVlZTgwOTZiYzg5MmE3NDM4
YzBmNjhlMzU0Yy4uMTA0NTkwZjYzOGUzMDJhNGQxMmRkZjJkMTRjOTdlOGZlMDQ3YmY1ZSAxMDA2
NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCisr
KyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcApAQCAtMTQ4
Niw3ICsxNDg2LDcgQEAgdm9pZCBXZWJWaWV3SG9zdDo6cGFpbnRSZWN0KGNvbnN0IFdlYlJlY3Qm
IHJlY3QpCiB2b2lkIFdlYlZpZXdIb3N0OjpwYWludEludmFsaWRhdGVkUmVnaW9uKCkKIHsKICNp
ZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCi0gICAgd2ViV2lkZ2V0KCktPmFuaW1h
dGUoKTsKKyAgICB3ZWJXaWRnZXQoKS0+YW5pbWF0ZSgwLjApOwogI2VuZGlmCiAgICAgd2ViV2lk
Z2V0KCktPmxheW91dCgpOwogICAgIFdlYlNpemUgd2lkZ2V0U2l6ZSA9IHdlYldpZGdldCgpLT5z
aXplKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98441</attachid>
            <date>2011-06-23 17:25:03 -0700</date>
            <delta_ts>2022-02-27 23:43:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58408-20110623172501.patch</filename>
            <type>text/plain</type>
            <size>91616</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODkzOTMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwNmZiNmIxN2VjNGZlZTZj
NDZlOGI0MzM2N2NmZDFmMTk4ZmE4NmZlLi43Zjc1ZmM3ZmQxOWQ5N2M3YTEzOTFmNDI0NmU1Mzhh
ZjYxZWI0NTkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTMgQEAKKzIwMTEtMDUtMTcgIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50IENDTGF5ZXJUcmVlSG9zdCBh
bmQgQ0NMYXllclRyZWVIb3N0SW1wbCBwb3J0aW9ucyBvZiB0aHJlYWRlZCBjb21wb3NpdG9yCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODQwOAorCisg
ICAgICAgIENyZWF0ZSBDQ0xheWVyVHJlZUhvc3QgYW5kIENDTGF5ZXJUcmVlSG9zdEltcGwsIHdo
aWNoIGFyZSB0aGUgbWFpbgorICAgICAgICB0aHJlYWQgYW5kIGNvbXBvc2l0b3IgdGhyZWFkIGhh
bHZlcyBvZiBhIGNvbXBvc2l0ZWQgdmlldy4gQ29tbXVuaWNhdGlvbgorICAgICAgICBiZXR3ZWVu
IHRoZSB0d28gaXMgYmFzZWQgb24gdGhlIGRlc2lnbiB1c2VkIGluIEZpbGVTdHJlYW1Qcm94eS4K
KworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9U
cmFjZUV2ZW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJv
bWl1bTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJD
aHJvbWl1bTo6c2V0Vmlld3BvcnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNo
cm9taXVtOjp1cGRhdGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJv
bWl1bUltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21p
dW1JbXBsOjpkcmF3TGF5ZXJzQW5kUHJlc2VudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJl
bmRlcmVyQ2hyb21pdW1JbXBsOjpMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bUltcGw6OmRyYXdMYXllcnNPbk1haW5UaHJl
YWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbFByb3h5Ojpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbFByb3h5
OjpjcmVhdGVMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRl
cmVyQ2hyb21pdW1JbXBsUHJveHk6OkxheWVyUmVuZGVyZXJDaHJvbWl1bUltcGxQcm94eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZUxheWVyVHJlZUhv
c3RJbXBsUHJveHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NIZWFkc1VwRGlz
cGxheTo6c2V0U2hvd0ZQU0NvdW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NIZWFkc1VwRGlz
cGxheTo6c2V0U2hvd1BsYXRmb3JtTGF5ZXJUcmVlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5Lmg6CisgICAgICAgIChXZWJDb3JlOjpD
Q0hlYWRzVXBEaXNwbGF5OjpjdXJyZW50RnJhbWVOdW1iZXIpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmNwcC4K
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6Q0NMYXllclRyZWVIb3N0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6aW5pdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyVHJlZUhvc3Q6On5DQ0xheWVyVHJlZUhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0OjpiZWdpbkNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3Q6OmNvbW1pdENvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdDo6YW5pbWF0ZUFuZExheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3Q6OmNyZWF0ZUxheWVyVHJlZUhvc3RDb21taXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdyk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyVHJlZUhvc3Q6OnNldE5lZWRzUmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJUcmVlSG9zdDo6dXBkYXRlTGF5ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuY3BwLgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpmcmFtZU51bWJlcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmNwcDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NU
aHJlYWQuY3BwLgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyOjpjb21t
aXQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdENvbW1pdHRlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3RDb21taXR0ZXI6OkNDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVI
b3N0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjp+Q0NMYXll
clRyZWVIb3N0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpi
ZWdpbkNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb21t
aXRDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3
TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNldE5lZWRz
Q29tbWl0QW5kUmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6
OnNldE5lZWRzUmVkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RJbXBsLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQ6On5DQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmZyYW1lTnVtYmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNvdXJjZUZyYW1lTnVtYmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFNvdXJjZUZyYW1lTnVt
YmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsUHJveHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGxQcm94eTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5KToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojp+Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNTdGFydGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHNDb21taXRB
bmRSZWRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpz
ZXROZWVkc1JlZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHk6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpw
b3N0RHJhd0xheWVyc1Rhc2tPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdEltcGxQcm94eTo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmlzTWFpblRocmVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmlzQ0NUaHJlYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpyZXF1ZXN0RnJhbWVB
bmRDb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpj
b21taXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc1JlZHJhd09u
Q0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpp
bml0SW1wbE9uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1w
bFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Lmg6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpob3N0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWRUYXNrLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWQ6OnJ1bkxvb3ApOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkVGFzay5oOgorCiAyMDExLTA2LTIxICBaaGVu
eWFvIE1vICA8em1vQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBS
dXNzZWxsLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDNkMDg5YTFhNzQ2ZWNkMWJiNGY5Nzk5MDVhYmIz
NmNlOWRjMGI3ZjcuLjdiZGQ1ZjMwZWM1NjllYjMwMmM1OWQ3ZjFjMDMyMTMzZjBlYTA3ZGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKQEAgLTQxNjUsNiArNDE2NSwxNCBAQAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJTb3J0ZXIuY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyU29ydGVyLmgnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5j
cHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RDb21taXR0ZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIuaCcsCisgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdEltcGwuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZC5jcHAnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZC5oJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWRU
YXNrLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggZDMzYmY4
NDdmZTBhMDI1ZThiYjRlMzI3OTM4NTM4MWZiNTM3ODdmMi4uMjY5MjFiYmIyMDFhNWRkZmUzNTcy
NzFjMDQ5MTIzOGQ5MWIzNmI0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
Y3BwCkBAIC01MCw2ICs1MCw4IEBACiAjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgogI2luY2x1ZGUg
IldlYkdMTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5j
bHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgorI2luY2x1ZGUgImNjL0NDTWFpblRocmVh
ZFRhc2suaCIKICNpZiBVU0UoU0tJQSkKICNpbmNsdWRlICJFeHRlbnNpb25zM0QuaCIKICNpbmNs
dWRlICJHckNvbnRleHQuaCIKQEAgLTk4LDIyICsxMDAsMjYgQEAgc3RhdGljIGJvb2wgaXNTY2Fs
ZU9yVHJhbnNsYXRpb24oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG0pCiAKIH0KIAotUGFz
c1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3Jl
YXRlKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsIFBhc3NPd25QdHI8TGF5
ZXJQYWludGVyQ2hyb21pdW0+IGNvbnRlbnRQYWludCwgYm9vbCBhY2NlbGVyYXRlRHJhd2luZykK
K1Bhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRlcmVyQ2hyb21pdW06
OmNyZWF0ZShDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVudCwgUGFzc093blB0cjxMYXllclBh
aW50ZXJDaHJvbWl1bT4gY29udGVudFBhaW50LCBib29sIGFjY2VsZXJhdGVEcmF3aW5nKQogewor
ICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IGNsaWVudC0+Y3JlYXRlTGF5
ZXJUcmVlSG9zdENvbnRleHQzRCgpOwogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyKGFk
b3B0UmVmKG5ldyBMYXllclJlbmRlcmVyQ2hyb21pdW0oY29udGV4dCwgY29udGVudFBhaW50LCBh
Y2NlbGVyYXRlRHJhd2luZykpKTsKKyAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBs
YXllclJlbmRlcmVyKGFkb3B0UmVmKG5ldyBMYXllclJlbmRlcmVyQ2hyb21pdW0oY2xpZW50LCBj
b250ZXh0LCBjb250ZW50UGFpbnQsIGFjY2VsZXJhdGVEcmF3aW5nKSkpOworICAgIGxheWVyUmVu
ZGVyZXItPmluaXQoKTsKICAgICBpZiAoIWxheWVyUmVuZGVyZXItPmhhcmR3YXJlQ29tcG9zaXRp
bmcoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICByZXR1cm4gbGF5ZXJSZW5kZXJlci5yZWxl
YXNlKCk7CiB9CiAKLUxheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVt
KFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsCitMYXllclJlbmRlcmVyQ2hy
b21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1bShDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVu
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBjb250
ZW50UGFpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGFjY2VsZXJhdGVEcmF3aW5nKQotICAgIDogbV92aWV3cG9ydFNjcm9sbFBvc2l0aW9uKElu
dFBvaW50KC0xLCAtMSkpCisgICAgOiBDQ0xheWVyVHJlZUhvc3QoY2xpZW50KQorICAgICwgbV92
aWV3cG9ydFNjcm9sbFBvc2l0aW9uKEludFBvaW50KC0xLCAtMSkpCiAgICAgLCBtX3Jvb3RMYXll
cigwKQogICAgICwgbV9hY2NlbGVyYXRlRHJhd2luZyhhY2NlbGVyYXRlRHJhd2luZykKICAgICAs
IG1fY3VycmVudFJlbmRlclN1cmZhY2UoMCkKQEAgLTIwNywxMCArMjEzLDEyIEBAIHZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpzZXRWaWV3cG9ydChjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVj
dCwgY29uc3QgSW50UmVjCiAgICAgICAgIG1fY3VycmVudFJlbmRlclN1cmZhY2UgPSAwOwogICAg
ICAgICBtX3Jvb3RMYXllckNvbnRlbnRUaWxlci0+aW52YWxpZGF0ZUVudGlyZUxheWVyKCk7CiAg
ICAgfQorICAgIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CiB9CiAKLXZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjp1cGRhdGVBbmREcmF3TGF5ZXJzKCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjp1cGRhdGVMYXllcnMoKQogeworICAgIENDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlTGF5
ZXJzKCk7CiAgICAgaWYgKG1fdmlld3BvcnRWaXNpYmxlUmVjdC5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybjsKIApAQCAtMjM1LDkgKzI0MywxNCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6dXBkYXRlQW5kRHJhd0xheWVycygpCiAgICAgICAgIG1fcm9vdENDTGF5ZXJJbXBsID0gVHJl
ZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhtX3Jvb3RMYXllci5nZXQoKSwgbV9yb290
Q0NMYXllckltcGwuZ2V0KCkpOwogICAgIH0KIAotICAgIExheWVyTGlzdCByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0OwotICAgIHVwZGF0ZUxheWVycyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAg
ICBtX2NvbXB1dGVkUmVuZGVyU3VyZmFjZUxheWVyTGlzdCA9IGFkb3B0UHRyKG5ldyBMYXllckxp
c3QoKSk7CisgICAgdXBkYXRlTGF5ZXJzKCptX2NvbXB1dGVkUmVuZGVyU3VyZmFjZUxheWVyTGlz
dCk7Cit9CiAKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKCkKK3sKKyAg
ICBBU1NFUlQobV9oYXJkd2FyZUNvbXBvc2l0aW5nKTsKKyAgICBBU1NFUlQobV9jb21wdXRlZFJl
bmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgIC8vIEJlZm9yZSBkcmF3TGF5ZXJzOgogICAgIGlm
IChoYXJkd2FyZUNvbXBvc2l0aW5nKCkgJiYgbV9jb250ZXh0U3VwcG9ydHNMYXRjaCkgewogICAg
ICAgICAvLyBGSVhNRTogVGhlIG11bHRpdGhyZWFkZWQgY29tcG9zaXRvciBjYXNlIHdpbGwgbm90
IHdvcmsgYXMgbG9uZyBhcwpAQCAtMjYzLDcgKzI3Niw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjp1cGRhdGVBbmREcmF3TGF5ZXJzKCkKICAgICAgICAgbV9jaGlsZENvbnRleHRzV2Vy
ZUNvcGllZCA9IGZhbHNlOwogICAgIH0KIAotICAgIGRyYXdMYXllcnMocmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCk7CisgICAgZHJhd0xheWVycygqbV9jb21wdXRlZFJlbmRlclN1cmZhY2VMYXllckxp
c3QpOwogCiAgICAgbV90ZXh0dXJlTWFuYWdlci0+dW5wcm90ZWN0QWxsVGV4dHVyZXMoKTsKIApA
QCAtMTI4Miw2ICsxMjk1LDc0IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkdW1wUmVu
ZGVyU3VyZmFjZXMoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQsIExheWVyCiAgICAgICAgIGR1
bXBSZW5kZXJTdXJmYWNlcyh0cywgaW5kZW50LCBsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7
CiB9CiAKK2NsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bUltcGwgOiBwdWJsaWMgQ0NMYXllclRy
ZWVIb3N0SW1wbCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8TGF5ZXJSZW5kZXJl
ckNocm9taXVtSW1wbD4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqIGNsaWVudCwg
TGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsKGNsaWVudCwgbGF5ZXJS
ZW5kZXJlcikpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGF5ZXJzQW5kUHJlc2Vu
dCgpCisgICAgeworICAgICAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOworICAgICAg
ICBib29sIGNvbnRleHRMb3N0OworICAgICAgICBDQ01haW5UaHJlYWQ6OnBvc3RUYXNrKGNyZWF0
ZU1haW5UaHJlYWRUYXNrKHRoaXMsICZMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsOjpkcmF3TGF5
ZXJzT25NYWluVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9uKSwgQWxs
b3dDcm9zc1RocmVhZEFjY2VzcygmY29udGV4dExvc3QpKSk7CisgICAgICAgIGNvbXBsZXRpb24u
d2FpdCgpOworCisgICAgICAgIC8vIEZJWE1FOiBTZW5kIHRoZSAiVXBkYXRlUmVjdCIgbWVzc2Fn
ZSB1cCB0byB0aGUgUmVuZGVyV2lkZ2V0IFtvciBtb3ZlcGx1Z2luIGVxdWl2YWxlbnRzLi4uXQor
CisgICAgICAgIC8vIEZJWE1FOiBoYW5kbGUgY29udGV4dCBsb3N0CisgICAgICAgIGlmIChjb250
ZXh0TG9zdCkKKyAgICAgICAgICAgIEZBVEFMKCJMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsIGRv
ZXMgbm90IGhhbmRsZSBjb250ZXh0IGxvc3QgeWV0LiIpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqIGNs
aWVudCwgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQorICAgICAgICA6IEND
TGF5ZXJUcmVlSG9zdEltcGwoY2xpZW50KQorICAgICAgICAsIG1fbGF5ZXJSZW5kZXJlcihsYXll
clJlbmRlcmVyKSB7IH0KKworICAgIHZvaWQgZHJhd0xheWVyc09uTWFpblRocmVhZChDQ0NvbXBs
ZXRpb25FdmVudCogY29tcGxldGlvbiwgYm9vbCogY29udGV4dExvc3QpCisgICAgeworICAgICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgICAgIGlmIChtX2xheWVyUmVuZGVyZXIt
PnJvb3RMYXllcigpKSB7CisgICAgICAgICAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdMYXllcnMo
KTsKKyAgICAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+cHJlc2VudCgpOworCisgICAgICAgICAg
ICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IG1fbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgp
OworICAgICAgICAgICAgKmNvbnRleHRMb3N0ID0gY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5n
ZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9S
OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICpjb250ZXh0TG9zdCA9IGZhbHNlOworICAg
ICAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKKyAgICB9CisKKyAgICBMYXllclJlbmRlcmVyQ2hy
b21pdW0qIG1fbGF5ZXJSZW5kZXJlcjsKK307CisKK2NsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1
bUltcGxQcm94eSA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkgeworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bUltcGxQcm94eT4gY3Jl
YXRlKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFB0cihuZXcgTGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbFByb3h5KGxheWVy
UmVuZGVyZXIpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NMYXllclRyZWVI
b3N0SW1wbD4gY3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IExheWVyUmVuZGVyZXJDaHJvbWl1bUltcGw6OmNyZWF0ZSh0aGlzLCBzdGF0aWNfY2FzdDxMYXll
clJlbmRlcmVyQ2hyb21pdW0qPihob3N0KCkpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTGF5
ZXJSZW5kZXJlckNocm9taXVtSW1wbFByb3h5KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJS
ZW5kZXJlcikKKyAgICAgICAgOiBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkobGF5ZXJSZW5kZXJl
cikgeyB9Cit9OworCitQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eT4gTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpjcmVhdGVMYXllclRyZWVIb3N0SW1wbFByb3h5KCkKK3sKKyAgICBP
d25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5PiBwcm94eSA9IExheWVyUmVuZGVyZXJDaHJv
bWl1bUltcGxQcm94eTo6Y3JlYXRlKHRoaXMpOworICAgIHByb3h5LT5zdGFydCgpOworICAgIHJl
dHVybiBwcm94eS5yZWxlYXNlKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmgKaW5kZXggZGI2ZmYzZWQ0MGEzYmRjYWNlMjVhNzg4MGNmMGRlYjMzYzNhMmQ3
Yy4uYmExNmI3ZTI3ZDU0ZDY3ZGY2NmFiOTgzM2ZhNGJhMmNhMjQ1MjZkOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmgKQEAgLTQ0LDEzICs0NCwxMyBAQAogI2luY2x1ZGUgImNj
L0NDQ2FudmFzTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NIZWFkc1VwRGlzcGxheS5oIgog
I2luY2x1ZGUgImNjL0NDTGF5ZXJTb3J0ZXIuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhv
c3QuaCIKICNpbmNsdWRlICJjYy9DQ1BsdWdpbkxheWVySW1wbC5oIgogI2luY2x1ZGUgImNjL0ND
VmlkZW9MYXllckltcGwuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KIAogI2lmIFVTRShDRykKQEAgLTY2LDE0ICs2NiwxNiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIENDSGVhZHNVcERpc3BsYXk7CiBjbGFzcyBDQ0xheWVySW1w
bDsKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcjsKK2NsYXNzIENDTGF5ZXJUcmVlSG9z
dEltcGw7CiBjbGFzcyBHZW9tZXRyeUJpbmRpbmc7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsK
IGNsYXNzIExheWVyUGFpbnRlckNocm9taXVtOwogCiAvLyBDbGFzcyB0aGF0IGhhbmRsZXMgZHJh
d2luZyBvZiBjb21wb3NpdGVkIHJlbmRlciBsYXllcnMgdXNpbmcgR0wuCi1jbGFzcyBMYXllclJl
bmRlcmVyQ2hyb21pdW0gOiBwdWJsaWMgUmVmQ291bnRlZDxMYXllclJlbmRlcmVyQ2hyb21pdW0+
IHsKK2NsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bSA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3Qg
ewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4g
Y3JlYXRlKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBQYXNzT3duUHRyPExheWVyUGFp
bnRlckNocm9taXVtPiBjb250ZW50UGFpbnQsIGJvb2wgYWNjZWxlcmF0ZURyYXdpbmcpOworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gY3JlYXRlKENDTGF5ZXJU
cmVlSG9zdENsaWVudCosIFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IGNvbnRlbnRQ
YWludCwgYm9vbCBhY2NlbGVyYXRlRHJhd2luZyk7CiAKICAgICB+TGF5ZXJSZW5kZXJlckNocm9t
aXVtKCk7CiAKQEAgLTg4LDcgKzkwLDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0Vmlld3BvcnQo
Y29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBj
b25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pOwogCiAgICAgLy8gdXBkYXRlcyBhbmQgZHJh
d3MgdGhlIGN1cnJlbnQgbGF5ZXJzIG9udG8gdGhlIGJhY2tidWZmZXIKLSAgICB2b2lkIHVwZGF0
ZUFuZERyYXdMYXllcnMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlTGF5ZXJzKCk7CisgICAg
dm9pZCBkcmF3TGF5ZXJzKCk7CiAKICAgICAvLyBTZXQgYnkgV2ViVmlld0ltcGwgd2hlbiBhbmlt
YXRpb24gY2FsbGJhY2tzIGFyZSBydW5uaW5nLgogICAgIC8vIEZJWE1FOiBXaGVuIHdlIG1vdmUg
c2NoZWR1bGluZyBpbnRvIHRoZSBjb21wb3NpdG9yLCB3ZSBjYW4gcmVtb3ZlIHRoaXMgZmxhZy4K
QEAgLTE1MiwxNCArMTU1LDE3IEBAIHB1YmxpYzoKICNpZm5kZWYgTkRFQlVHCiAgICAgc3RhdGlj
IGJvb2wgc19pblBhaW50TGF5ZXJDb250ZW50czsKICNlbmRpZgorcHJvdGVjdGVkOgorICAgIHZp
cnR1YWwgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk+IGNyZWF0ZUxheWVyVHJl
ZUhvc3RJbXBsUHJveHkoKTsKKwogcHJpdmF0ZToKICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8
Q0NMYXllckltcGw+ID4gTGF5ZXJMaXN0OwogICAgIHR5cGVkZWYgSGFzaE1hcDxHcmFwaGljc0Nv
bnRleHQzRCosIGludD4gQ2hpbGRDb250ZXh0TWFwOwogCi0gICAgLy8gRklYTUU6IFRoaXMgbmVl
ZHMgdG8gYmUgbW92ZWQgdG8gdGhlIENDVmlld0ltcGwgd2hlbiB0aGF0IGNsYXNzIGV4aXN0cy4K
KyAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyB0byBiZSBtb3ZlZCB0byB0aGUgQ0NMYXllclRyZWVI
b3N0SW1wbCB3aGVuIHRoYXQgY2xhc3MgZXhpc3RzLgogICAgIFJlZlB0cjxDQ0xheWVySW1wbD4g
bV9yb290Q0NMYXllckltcGw7CiAKLSAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0oUGFzc1JlZlB0
cjxHcmFwaGljc0NvbnRleHQzRD4sIFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IGNv
bnRlbnRQYWludCwgYm9vbCBhY2NlbGVyYXRlRHJhd2luZyk7CisgICAgTGF5ZXJSZW5kZXJlckNo
cm9taXVtKENDTGF5ZXJUcmVlSG9zdENsaWVudCosIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+LCBQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBjb250ZW50UGFpbnQsIGJvb2wg
YWNjZWxlcmF0ZURyYXdpbmcpOwogCiAgICAgUGFzc093blB0cjxMYXllclRleHR1cmVVcGRhdGVy
PiBjcmVhdGVSb290TGF5ZXJUZXh0dXJlVXBkYXRlcihQYXNzT3duUHRyPExheWVyUGFpbnRlckNo
cm9taXVtPik7CiAKQEAgLTIwNyw2ICsyMTMsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9oYXJk
d2FyZUNvbXBvc2l0aW5nOwogICAgIGJvb2wgbV9hY2NlbGVyYXRlRHJhd2luZzsKIAorICAgIE93
blB0cjxMYXllckxpc3Q+IG1fY29tcHV0ZWRSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworCiAgICAg
UmVuZGVyU3VyZmFjZUNocm9taXVtKiBtX2N1cnJlbnRSZW5kZXJTdXJmYWNlOwogICAgIHVuc2ln
bmVkIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZDsKICAgICBib29sIG1fY29tcG9zaXRlT2Zmc2Ny
ZWVuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcAppbmRleCBmMmE3MmExNDE2YjFi
NDM4ODY1ZDUyMTUzNWQxOWU3NjJlYzI1NGQxLi4yOTVkMzEwZGI0ZjJkYmNjZDExOTJjYzY0ZWJm
MTQ0NTBmOGU1ZDBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcApAQCAtMjQ3
LDYgKzI0NywxOCBAQCB2b2lkIENDSGVhZHNVcERpc3BsYXk6Om9uUHJlc2VudCgpCiAgICAgbV9j
dXJyZW50RnJhbWVOdW1iZXIgKz0gMTsKIH0KIAordm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjpzZXRT
aG93RlBTQ291bnRlcihib29sIHNob3cpCit7CisgICAgbV9zaG93RlBTQ291bnRlciA9IHNob3c7
CisgICAgbV9sYXllclJlbmRlcmVyLT5zZXROZWVkc1JlZHJhdygpOworfQorCit2b2lkIENDSGVh
ZHNVcERpc3BsYXk6OnNldFNob3dQbGF0Zm9ybUxheWVyVHJlZShib29sIHNob3cpCit7CisgICAg
bV9zaG93UGxhdGZvcm1MYXllclRyZWUgPSBzaG93OworICAgIG1fbGF5ZXJSZW5kZXJlci0+c2V0
TmVlZHNSZWRyYXcoKTsKK30KKwogfQogCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oCmluZGV4IGQ2NDg3OGRhOWFjNWY4
NGI5NWNkMjBlMjQyNmRiZmRlOTczNmYzN2EuLjk5MmJiYTA2NzRkODA5MGY5YTBhODFmYjkxMjdh
ZmMzODAxMjY0YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmgKQEAgLTQ5LDEzICs0
OSwxNSBAQCBwdWJsaWM6CiAKICAgICB+Q0NIZWFkc1VwRGlzcGxheSgpOwogCisgICAgaW50IGN1
cnJlbnRGcmFtZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEZyYW1lTnVtYmVyOyB9
CisKICAgICB2b2lkIG9uRnJhbWVCZWdpbihkb3VibGUgdGltZXN0YW1wKTsKICAgICB2b2lkIG9u
UHJlc2VudCgpOwogCi0gICAgdm9pZCBzZXRTaG93RlBTQ291bnRlcihib29sIGVuYWJsZSkgeyBt
X3Nob3dGUFNDb3VudGVyID0gZW5hYmxlOyB9CisgICAgdm9pZCBzZXRTaG93RlBTQ291bnRlcihi
b29sIGVuYWJsZSk7CiAgICAgYm9vbCBzaG93RlBTQ291bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1f
c2hvd0ZQU0NvdW50ZXI7IH0KIAotICAgIHZvaWQgc2V0U2hvd1BsYXRmb3JtTGF5ZXJUcmVlKGJv
b2wgZW5hYmxlKSB7IG1fc2hvd1BsYXRmb3JtTGF5ZXJUcmVlID0gZW5hYmxlOyB9CisgICAgdm9p
ZCBzZXRTaG93UGxhdGZvcm1MYXllclRyZWUoYm9vbCBlbmFibGUpOwogICAgIGJvb2wgc2hvd1Bs
YXRmb3JtTGF5ZXJUcmVlKCkgY29uc3QgeyByZXR1cm4gbV9zaG93UGxhdGZvcm1MYXllclRyZWU7
IH0KIAogICAgIGJvb2wgZW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hvd1BsYXRmb3JtTGF5
ZXJUcmVlIHx8IG1fc2hvd0ZQU0NvdW50ZXI7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3Qu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjUxOGE5MWVlNTE5YTc0OTUzYjMyMGQwMDhiOTg4YjNhMWU3ODgwYzAK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
CisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5o
IgorCisjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9z
dENvbW1pdHRlci5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKKworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK0NDTGF5ZXJUcmVlSG9zdDo6Q0NMYXllclRyZWVIb3N0KEND
TGF5ZXJUcmVlSG9zdENsaWVudCogY2xpZW50KQorICAgIDogbV9jbGllbnQoY2xpZW50KQorICAg
ICwgbV9mcmFtZU51bWJlcigwKQoreworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6aW5pdCgp
Cit7CisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgIG1fcHJveHkgPSBjcmVhdGVM
YXllclRyZWVIb3N0SW1wbFByb3h5KCk7CisgICAgQVNTRVJUKG1fcHJveHktPmlzU3RhcnRlZCgp
KTsKKyAgICBtX3Byb3h5LT5zZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOworI2VuZGlmCit9CisK
K0NDTGF5ZXJUcmVlSG9zdDo6fkNDTGF5ZXJUcmVlSG9zdCgpCit7CisgICAgVFJBQ0VfRVZFTlQo
IkNDTGF5ZXJUcmVlSG9zdDo6fkNDTGF5ZXJUcmVlSG9zdCIsIHRoaXMsIDApOworI2lmIFVTRShU
SFJFQURFRF9DT01QT1NJVElORykKKyAgICBtX3Byb3h5LT5zdG9wKCk7CisgICAgbV9wcm94eS5j
bGVhcigpOworI2VuZGlmCit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpiZWdpbkNvbW1pdCgp
Cit7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0Ojpjb21taXRDb21wbGV0ZSgpCit7CisgICAg
bV9mcmFtZU51bWJlcisrOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0ZUFuZExh
eW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpCit7CisgICAgbV9jbGllbnQtPmFuaW1hdGVBbmRM
YXlvdXQoZnJhbWVCZWdpblRpbWUpOworfQorCitQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdENv
bW1pdHRlcj4gQ0NMYXllclRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVIb3N0Q29tbWl0dGVyKCkK
K3sKKyAgICByZXR1cm4gQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyOjpjcmVhdGUoKTsKK30KKwor
dm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCkKK3sKKyNpZiBV
U0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgbV9wcm94eS0+c2V0TmVlZHNDb21taXRBbmRS
ZWRyYXcoKTsKKyNlbmRpZgorfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0TmVlZHNSZWRy
YXcoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3Q6OnNldE5lZWRzUmVkcmF3
IiwgdGhpcywgMCk7CisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgIG1fcHJveHkt
PnNldE5lZWRzUmVkcmF3KCk7CisjZW5kaWYKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnVw
ZGF0ZUxheWVycygpCit7CisgICAgbV9jbGllbnQtPnVwZGF0ZUxheWVycygpOworfQorCit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJlOWY5YzFjNjMzY2U2OWM4ZWE1
YTYzZDVmNGQxOTlkMmY2ZDNmYmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApAQCAtMCwwICsx
LDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDTGF5ZXJUcmVlSG9zdF9oCisjZGVmaW5l
IENDTGF5ZXJUcmVlSG9zdF9oCisKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0
ZXIuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaCIKKyNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ0xh
eWVyVHJlZUhvc3RJbXBsOworY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudDsKK2NsYXNz
IEdyYXBoaWNzQ29udGV4dDNEOworCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RDbGllbnQgeworcHVi
bGljOgorICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2lu
VGltZSkgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3Jl
YXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
TGF5ZXJzKCkgPSAwOworfTsKKworY2xhc3MgQ0NMYXllclRyZWVIb3N0IDogcHVibGljIFJlZkNv
dW50ZWQ8Q0NMYXllclRyZWVIb3N0PiB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQ0NMYXllclRy
ZWVIb3N0KENDTGF5ZXJUcmVlSG9zdENsaWVudCopOworICAgIHZvaWQgaW5pdCgpOworICAgIHZp
cnR1YWwgfkNDTGF5ZXJUcmVlSG9zdCgpOworCisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVBbmRM
YXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21t
aXQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q29tcGxldGUoKTsKKyAgICB2aXJ0dWFsIFBh
c3NPd25QdHI8Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyPiBjcmVhdGVMYXllclRyZWVIb3N0Q29t
bWl0dGVyKCk7CisKKyAgICBpbnQgZnJhbWVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1l
TnVtYmVyOyB9CisKKyAgICB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgdm9p
ZCBzZXROZWVkc1JlZHJhdygpOworCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUxheWVycygpOwor
Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eT4gY3JlYXRlTGF5ZXJUcmVlSG9zdEltcGxQcm94eSgpID0gMDsKKworcHJpdmF0ZToKKyAg
ICBDQ0xheWVyVHJlZUhvc3RDbGllbnQqIG1fY2xpZW50OworICAgIGludCBtX2ZyYW1lTnVtYmVy
OworICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk+IG1fcHJveHk7Cit9OworCit9
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNzJkZDcxNGJlN2UzODRjOGVmOWUxMDkyNGZmNWNkMjA1ODY5OWJlYQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5jcHAKQEAgLTAsMCArMSw0NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NMYXllclRy
ZWVIb3N0Q29tbWl0dGVyLmgiCisKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKKyNp
bmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI+IENDTGF5ZXJUcmVlSG9zdENv
bW1pdHRlcjo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDTGF5ZXJUcmVl
SG9zdENvbW1pdHRlcigpKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI6OmNv
bW1pdChDQ0xheWVyVHJlZUhvc3QqIGhvc3QsIENDTGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJbXBs
KQoreworICAgIGhvc3RJbXBsLT5zZXRTb3VyY2VGcmFtZU51bWJlcihob3N0LT5mcmFtZU51bWJl
cigpKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5kZDhlOTE4MmI4NjE5NmQ1NTIwZDNiZjliYzRlYmJhYjEwMWQwYzY3Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXJfaAorI2RlZmluZSBDQ0xh
eWVyVHJlZUhvc3RDb21taXR0ZXJfaAorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Cisj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBDQ0xheWVyVHJlZUhvc3Q7CitjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsOworCisvLyBGSVhN
RTogbWVyZ2UgaW4gVHJlZVN5bmNocm9uaXplciBjb2RlIGludG8gaGVyZQorY2xhc3MgQ0NMYXll
clRyZWVIb3N0Q29tbWl0dGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ0xheWVyVHJl
ZUhvc3RDb21taXR0ZXIpOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJU
cmVlSG9zdENvbW1pdHRlcj4gY3JlYXRlKCk7CisgICAgdmlydHVhbCB2b2lkIGNvbW1pdChDQ0xh
eWVyVHJlZUhvc3QqLCBDQ0xheWVyVHJlZUhvc3RJbXBsKik7CisKK3Byb3RlY3RlZDoKKyAgICBD
Q0xheWVyVHJlZUhvc3RDb21taXR0ZXIoKSB7IH0KK307CisKK30KKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEzYWEyYmEyMTBkYmRk
ZDE2YjljYTFhZDEyZTYxMTU1NThiMmFiMzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNw
cApAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCisKKyNpbmNsdWRlICJUcmFjZUV2
ZW50LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCisjaW5jbHVkZSAiY2MvQ0NU
aHJlYWRUYXNrLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworQ0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVIb3N0SW1wbChDQ0xh
eWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX3NvdXJjZUZyYW1lTnVtYmVy
KC0xKQorICAgICwgbV9mcmFtZU51bWJlcigwKQorICAgICwgbV9jbGllbnQoY2xpZW50KQorICAg
ICwgbV9jb21taXRQZW5kaW5nKGZhbHNlKQorICAgICwgbV9yZWRyYXdQZW5kaW5nKGZhbHNlKQor
eworfQorCitDQ0xheWVyVHJlZUhvc3RJbXBsOjp+Q0NMYXllclRyZWVIb3N0SW1wbCgpCit7Cisg
ICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6On5DQ0xheWVyVHJlZUhvc3RJbXBs
KCkiLCB0aGlzLCAwKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpiZWdpbkNvbW1p
dCgpCit7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29tbWl0Q29tcGxldGUoKQor
eworICAgIG1fY29tbWl0UGVuZGluZyA9IGZhbHNlOworICAgIHNldE5lZWRzUmVkcmF3KCk7Cit9
CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycygpCit7CisgICAgLy8gSWYg
YSBjb21taXQgaXMgcGVuZGluZywgZG8gbm90IGRyYXcuIFRoaXMgaXMgYSB0ZW1wb3JhcnkgcmVz
dHJpY3Rpb24gdGhhdAorICAgIC8vIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGRyYXdMYXllcnMgaXMg
Y3VycmVudGx5IGEgYmxvY2tpbmcgb3BlcmF0aW9uIG9uIHRoZSBtYWluIHRocmVhZC4KKyAgICBp
ZiAobV9jb21taXRQZW5kaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBUUkFDRV9FVkVOVCgi
Q0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycyIsIHRoaXMsIDApOworICAgIEFTU0VSVCht
X3JlZHJhd1BlbmRpbmcpOworICAgIG1fcmVkcmF3UGVuZGluZyA9IGZhbHNlOworCisgICAgewor
ICAgICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVyc0FuZFBy
ZXNlbnQiLCB0aGlzLCAwKTsKKyAgICAgICAgZHJhd0xheWVyc0FuZFByZXNlbnQoKTsKKyAgICB9
CisKKyAgICArK21fZnJhbWVOdW1iZXI7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6
c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdyIsIHRoaXMsIDApOworCisgICAgLy8g
RklYTUU6IG1vdmUgdGhlIHJlcXVlc3RGcmFtZUFuZENvbW1pdCBvdXQgZnJvbSBoZXJlIG9uY2Ug
d2UgYWRkIGZyYW1lcmF0ZSB0aHJvdHRsaW5nL2FuaW1hdGlvbgorICAgIGRvdWJsZSBmcmFtZUJl
Z2luVGltZSA9IGN1cnJlbnRUaW1lKCk7CisgICAgbV9jb21taXRQZW5kaW5nID0gdHJ1ZTsKKyAg
ICBtX2NsaWVudC0+cmVxdWVzdEZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZChmcmFtZUJlZ2luVGlt
ZSk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNSZWRyYXcoKQorewor
ICAgIGlmIChtX3JlZHJhd1BlbmRpbmcgfHwgbV9jb21taXRQZW5kaW5nKQorICAgICAgICByZXR1
cm47CisKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNSZWRy
YXciLCB0aGlzLCAwKTsKKyAgICBtX3JlZHJhd1BlbmRpbmcgPSB0cnVlOworICAgIG1fY2xpZW50
LT5wb3N0RHJhd0xheWVyc1Rhc2tPbkNDVGhyZWFkKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdEltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZDkwNDk1ZGVkMmM4MGMzOWY4ZjNhMTk1
YjJlMDE1ZDZhMDhjYWI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCkBAIC0wLDAgKzEs
NzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NMYXllclRyZWVIb3N0SW1wbF9oCisjZGVm
aW5lIENDTGF5ZXJUcmVlSG9zdEltcGxfaAorCisjaW5jbHVkZSAiY2MvQ0NUaHJlYWQuaCIKKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVk
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gUHJvdmlkZXMgc2NoZWR1bGluZyBpbmZy
YXN0cnVjdHVyZSBmb3IgYSBDQ0xheWVyVHJlZUhvc3RJbXBsCitjbGFzcyBDQ0xheWVyVHJlZUhv
c3RJbXBsQ2xpZW50ICB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+Q0NMYXllclRyZWVIb3N0SW1w
bENsaWVudCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwb3N0RHJhd0xheWVyc1Rhc2tPbkNDVGhy
ZWFkKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhy
ZWFkKGRvdWJsZSBmcmFtZUJlZ2luVGltZSkgPSAwOworfTsKKworLy8gQ0NMYXllclRyZWVIb3N0
SW1wbCBvd25zIHRoZSBDQ0xheWVySW1wbCB0cmVlIGFzIHdlbGwgYXMgYXNzb2NpYXRlZCByZW5k
ZXJpbmcgc3RhdGUKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGwgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKENDTGF5ZXJUcmVlSG9zdEltcGwpOworcHVibGljOgorICAgIGV4cGxpY2l0IEND
TGF5ZXJUcmVlSG9zdEltcGwoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCopOworICAgIHZpcnR1
YWwgfkNDTGF5ZXJUcmVlSG9zdEltcGwoKTsKKworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1p
dCgpOworICAgIHZpcnR1YWwgdm9pZCBjb21taXRDb21wbGV0ZSgpOworCisgICAgdm9pZCBkcmF3
TGF5ZXJzKCk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNBbmRQcmVzZW50KCkgPSAwOwor
CisgICAgaW50IGZyYW1lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZU51bWJlcjsgfQor
CisgICAgdm9pZCBzZXROZWVkc1JlZHJhdygpOworICAgIHZvaWQgc2V0TmVlZHNDb21taXRBbmRS
ZWRyYXcoKTsKKworICAgIGludCBzb3VyY2VGcmFtZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1f
c291cmNlRnJhbWVOdW1iZXI7IH0KKyAgICB2b2lkIHNldFNvdXJjZUZyYW1lTnVtYmVyKGludCBm
cmFtZU51bWJlcikgeyBtX3NvdXJjZUZyYW1lTnVtYmVyID0gZnJhbWVOdW1iZXI7IH0KKworcHJv
dGVjdGVkOgorICAgIGludCBtX3NvdXJjZUZyYW1lTnVtYmVyOworICAgIGludCBtX2ZyYW1lTnVt
YmVyOworCitwcml2YXRlOgorICAgIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqIG1fY2xpZW50
OworICAgIGJvb2wgbV9jb21taXRQZW5kaW5nOworICAgIGJvb2wgbV9yZWRyYXdQZW5kaW5nOwor
fTsKKworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bFByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYzE3MmYyZWUwNjAwYjc4Yjg5MzY3YTNmZTQ0YmI4NmNk
YzlhYjZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmNwcApAQCAtMCwwICsxLDIy
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmgiCisKKyNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCisj
aW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCisjaW5jbHVkZSAiY2MvQ0NNYWluVGhyZWFk
VGFzay5oIgorI2luY2x1ZGUgImNjL0NDVGhyZWFkVGFzay5oIgorCisKK3VzaW5nIG5hbWVzcGFj
ZSBXVEY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIHsKK0NDVGhyZWFkKiBj
Y1RocmVhZDsKK2ludCBudW1Qcm94aWVzID0gMDsKK30KKworQ0NMYXllclRyZWVIb3N0SW1wbFBy
b3h5OjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkoQ0NMYXllclRyZWVIb3N0KiBsYXllclRyZWVI
b3N0KQorICAgIDogbV9jb21taXRQZW5kaW5nKGZhbHNlKQorICAgICwgbV9sYXllclRyZWVIb3N0
KGxheWVyVHJlZUhvc3QpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5IiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKyAgICBudW1Qcm94aWVzKys7CisgICAgaWYgKCFjY1RocmVhZCkKKyAg
ICAgICAgY2NUaHJlYWQgPSBDQ1RocmVhZDo6Y3JlYXRlKCkubGVha1B0cigpOworfQorCisKK3Zv
aWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzdGFydCgpCit7CisgICAgLy8gQ3JlYXRlIExh
eWVyVHJlZUhvc3RJbXBsLgorICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CisgICAg
Y2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVI
b3N0SW1wbFByb3h5Ojppbml0SW1wbE9uQ0NUaHJlYWQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3Mo
JmNvbXBsZXRpb24pKSk7CisgICAgY29tcGxldGlvbi53YWl0KCk7Cit9CisKK0NDTGF5ZXJUcmVl
SG9zdEltcGxQcm94eTo6fkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSgpCit7CisgICAgVFJBQ0Vf
RVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6fkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eSIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKCFt
X2xheWVyVHJlZUhvc3RJbXBsICYmICFtX2xheWVyVHJlZUhvc3QpOyAvLyBtYWtlIHN1cmUgc3Rv
cCgpIGdvdCBjYWxsZWQuCisKKyAgICBudW1Qcm94aWVzLS07CisgICAgaWYgKCFudW1Qcm94aWVz
KSB7CisgICAgICAgIGRlbGV0ZSBjY1RocmVhZDsKKyAgICAgICAgY2NUaHJlYWQgPSAwOworICAg
IH0KK30KKworYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmlzU3RhcnRlZCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdEltcGw7Cit9CisKK3ZvaWQgQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpCit7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAobV9jb21taXRQZW5kaW5nKQorICAgICAgICByZXR1
cm47CisKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVk
c0NvbW1pdEFuZFJlZHJhdyIsIHRoaXMsIDApOworICAgIG1fY29tbWl0UGVuZGluZyA9IHRydWU7
CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXll
clRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQpKTsK
K30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVkcmF3KCkKK3sK
KyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVh
dGVDQ1RocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHNS
ZWRyYXdPbkNDVGhyZWFkKSk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpz
dG9wKCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzdG9w
IiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAvLyBTeW5jaHJv
bm91c2x5IGRlbGV0ZXMgdGhlIGltcGwuCisgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlv
bjsKKyAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ0xh
eWVyVHJlZUhvc3RJbXBsUHJveHk6OmxheWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkLCBBbGxv
d0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9uKSkpOworICAgIGNvbXBsZXRpb24ud2FpdCgp
OworCisgICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3RJbXBsKTsgLy8gdmVyaWZ5IHRoYXQgdGhl
IGltcGwgZGVsZXRlZC4KKyAgICBtX2xheWVyVHJlZUhvc3QgPSAwOworfQorCit2b2lkIENDTGF5
ZXJUcmVlSG9zdEltcGxQcm94eTo6cG9zdERyYXdMYXllcnNUYXNrT25DQ1RocmVhZCgpCit7Cisg
ICAgQVNTRVJUKGlzQ0NUaHJlYWQoKSk7CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdEltcGwpCisg
ICAgICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDTGF5
ZXJUcmVlSG9zdEltcGxQcm94eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQpKTsKK30KKwordm9pZCBD
Q0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQo
ZG91YmxlIGZyYW1lQmVnaW5UaW1lKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsK
KyAgICBBU1NFUlQoaXNDQ1RocmVhZCgpKTsKKyAgICBpZiAobV9sYXllclRyZWVIb3N0SW1wbCkK
KyAgICAgICAgQ0NNYWluVGhyZWFkOjpwb3N0VGFzayhjcmVhdGVNYWluVGhyZWFkVGFzayh0aGlz
LCAmQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21taXQsIGZyYW1l
QmVnaW5UaW1lKSk7Cit9CisKK2Jvb2wgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppc01haW5U
aHJlYWQoKSBjb25zdAoreworICAgIHJldHVybiA6OmlzTWFpblRocmVhZCgpOworfQorCitib29s
IENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNDQ1RocmVhZCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGN1cnJlbnRUaHJlYWQoKSA9PSBjY1RocmVhZC0+dGhyZWFkSUQoKTsKK30KKwordm9pZCBD
Q0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdChkb3VibGUgZnJh
bWVCZWdpblRpbWUpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAoIW1f
bGF5ZXJUcmVlSG9zdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5
ZXJUcmVlSG9zdEltcGxQcm94eTo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0IiwgdGhpcywgMCk7Cisg
ICAgeworICAgICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0OjphbmltYXRlQW5kTGF5
b3V0IiwgdGhpcywgMCk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+YW5pbWF0ZUFuZExheW91
dChmcmFtZUJlZ2luVGltZSk7CisgICAgfQorCisgICAgbV9jb21taXRQZW5kaW5nID0gZmFsc2U7
CisgICAgeworICAgICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXll
cnMiLCB0aGlzLCAwKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT51cGRhdGVMYXllcnMoKTsK
KyAgICB9CisKKyAgICBPd25QdHI8Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyPiBjb21taXR0ZXIg
PSBtX2xheWVyVHJlZUhvc3QtPmNyZWF0ZUxheWVyVHJlZUhvc3RDb21taXR0ZXIoKTsKKyAgICBt
X2xheWVyVHJlZUhvc3QtPmJlZ2luQ29tbWl0KCk7CisKKyAgICAvLyBCbG9ja2luZyBjYWxsIHRv
IENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6cGVyZm9ybUNvbW1pdAorICAgIENDQ29tcGxldGlv
bkV2ZW50IGNvbXBsZXRpb247CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFk
VGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpjb21taXRPbkNDVGhyZWFkLCBB
bGxvd0Nyb3NzVGhyZWFkQWNjZXNzKGNvbW1pdHRlci5nZXQoKSksIEFsbG93Q3Jvc3NUaHJlYWRB
Y2Nlc3MoJmNvbXBsZXRpb24pKSk7CisgICAgY29tcGxldGlvbi53YWl0KCk7CisKKyAgICBjb21t
aXR0ZXIuY2xlYXIoKTsKKworICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0Q29tcGxldGUoKTsK
K30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQoQ0NM
YXllclRyZWVIb3N0Q29tbWl0dGVyKiBjb21taXR0ZXIsIENDQ29tcGxldGlvbkV2ZW50KiBjb21w
bGV0aW9uKQoreworICAgIEFTU0VSVChpc0NDVGhyZWFkKCkpOworICAgIFRSQUNFX0VWRU5UKCJD
Q0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAg
ICBtX2xheWVyVHJlZUhvc3RJbXBsLT5iZWdpbkNvbW1pdCgpOworICAgIHsKKyAgICAgICAgVFJB
Q0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0IiwgdGhpcywgMCk7CisgICAgICAgIGNv
bW1pdHRlci0+Y29tbWl0KG1fbGF5ZXJUcmVlSG9zdCwgbV9sYXllclRyZWVIb3N0SW1wbC5nZXQo
KSk7CisgICAgfQorICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOworCisgICAgbV9sYXllclRyZWVI
b3N0SW1wbC0+Y29tbWl0Q29tcGxldGUoKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBs
UHJveHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkKCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXll
clRyZWVIb3N0SW1wbFByb3h5OjpkcmF3TGF5ZXJzT25DQ1RocmVhZCIsIHRoaXMsIDApOworICAg
IEFTU0VSVChpc0NDVGhyZWFkKCkpOworICAgIGlmIChtX2xheWVyVHJlZUhvc3RJbXBsKQorICAg
ICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5kcmF3TGF5ZXJzKCk7Cit9CisKK3ZvaWQgQ0NMYXll
clRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQoKQor
eworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzQ29t
bWl0QW5kUmVkcmF3T25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc0NDVGhyZWFk
KCkgJiYgbV9sYXllclRyZWVIb3N0SW1wbCk7CisgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+c2V0
TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5
ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkIiwgdGhpcywgMCk7
CisgICAgQVNTRVJUKGlzQ0NUaHJlYWQoKSAmJiBtX2xheWVyVHJlZUhvc3RJbXBsKTsKKyAgICBt
X2xheWVyVHJlZUhvc3RJbXBsLT5zZXROZWVkc1JlZHJhdygpOworfQorCit2b2lkIENDTGF5ZXJU
cmVlSG9zdEltcGxQcm94eTo6aW5pdEltcGxPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBj
b21wbGV0aW9uKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6
OmluaXRJbXBsT25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc0NDVGhyZWFkKCkp
OworICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwgPSBjcmVhdGVMYXllclRyZWVIb3N0SW1wbCgpOwor
ICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eTo6bGF5ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNv
bXBsZXRpb24pCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6
bGF5ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXND
Q1RocmVhZCgpKTsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLmNsZWFyKCk7CisgICAgY29tcGxl
dGlvbi0+c2lnbmFsKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbFByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjk1YmUzY2FiNjIxZjM5OWUzYzQ0OWM0MjRjNTg3NTMx
YTM5MGNlYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oCkBAIC0wLDAgKzEsODYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5X2gKKyNk
ZWZpbmUgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5X2gKKworI2luY2x1ZGUgImNjL0NDQ29tcGxl
dGlvbkV2ZW50LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgorI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ0xheWVy
VHJlZUhvc3Q7CitjbGFzcyBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI7CisKK2NsYXNzIENDTGF5
ZXJUcmVlSG9zdEltcGxQcm94eSA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50IHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkpOworcHVi
bGljOgorICAgIHZpcnR1YWwgfkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSgpOworCisgICAgYm9v
bCBpc1N0YXJ0ZWQoKSBjb25zdDsKKworICAgIHZvaWQgc2V0TmVlZHNDb21taXRBbmRSZWRyYXco
KTsKKyAgICB2b2lkIHNldE5lZWRzUmVkcmF3KCk7CisKKyAgICB2b2lkIHN0YXJ0KCk7IC8vIE11
c3QgYmUgY2FsbGVkIGJlZm9yZSB1c2luZyB0aGUgcHJveHkuCisgICAgdm9pZCBzdG9wKCk7IC8v
IE11c3QgYmUgY2FsbGVkIGJlZm9yZSBkZWxldGluZyB0aGUgcHJveHkuCisKKyAgICAvLyBDQ0xh
eWVyVHJlZUhvc3RJbXBsQ2llbnQgLS0gY2FsbGVkIG9uIENDVGhyZWFkCisgICAgdmlydHVhbCB2
b2lkIHBvc3REcmF3TGF5ZXJzVGFza09uQ0NUaHJlYWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVx
dWVzdEZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZChkb3VibGUgZnJhbWVCZWdpblRpbWUpOworCitw
cm90ZWN0ZWQ6CisgICAgZXhwbGljaXQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5KENDTGF5ZXJU
cmVlSG9zdCopOworICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBj
cmVhdGVMYXllclRyZWVIb3N0SW1wbCgpID0gMDsKKyAgICBDQ0xheWVyVHJlZUhvc3QqIGhvc3Qo
KSBjb25zdCB7IHJldHVybiBtX2xheWVyVHJlZUhvc3Q7IH0KKworcHJpdmF0ZToKKyAgICBib29s
IGlzTWFpblRocmVhZCgpIGNvbnN0OworICAgIGJvb2wgaXNDQ1RocmVhZCgpIGNvbnN0OworCisg
ICAgLy8gQ2FsbGVkIG9uIENDTWFpblRocmVhZAorICAgIHZvaWQgcmVxdWVzdEZyYW1lQW5kQ29t
bWl0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CisKKyAgICAvLyBDYWxsZWQgb24gQ0NUaHJlYWQK
KyAgICB2b2lkIGNvbW1pdE9uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyKiwgQ0ND
b21wbGV0aW9uRXZlbnQqKTsKKyAgICB2b2lkIGRyYXdMYXllcnNPbkNDVGhyZWFkKCk7CisgICAg
dm9pZCBpbml0SW1wbE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsKKyAgICB2b2lkIHNl
dE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCgpOworICAgIHZvaWQgc2V0TmVlZHNSZWRy
YXdPbkNDVGhyZWFkKCk7CisgICAgdm9pZCBsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZChD
Q0NvbXBsZXRpb25FdmVudCopOworCisgICAgLy8gVXNlZCBvbiBtYWluLXRocmVhZCBvbmx5Lgor
ICAgIGJvb2wgbV9jb21taXRQZW5kaW5nOworCisgICAgLy8gQWNjZXNzZWQgb24gbWFpbiB0aHJl
YWQgb25seS4KKyAgICBDQ0xheWVyVHJlZUhvc3QqIG1fbGF5ZXJUcmVlSG9zdDsKKworICAgIC8v
IFVzZWQgb24gdGhlIENDVGhyZWFkLCBidXQgY2hlY2tlZCBvbiBtYWluIHRocmVhZCBkdXJpbmcg
aW5pdGlhbGl6YXRpb24vc2h1dGRvd24uCisgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+
IG1fbGF5ZXJUcmVlSG9zdEltcGw7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkVGFz
ay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWlu
VGhyZWFkVGFzay5oCmluZGV4IDdkZThkNzEzZTg4Yzg4NDIyMjQwNzkzZmYyNzdkNTlkZjUzYWRl
N2IuLmZhYzZlNjQzZjA1YTE4YmJiYWFkNTdiMjliYmMwM2E2MjgwZWFjOGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVh
ZFRhc2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ01haW5UaHJlYWRUYXNrLmgKQEAgLTI0LDkgKzI0LDkgQEAKICNpZm5kZWYgQ0NNYWluVGhy
ZWFkVGFza19oCiAjZGVmaW5lIENDTWFpblRocmVhZFRhc2tfaAogCi0jaW5jbHVkZSAiQ0NNYWlu
VGhyZWFkLmgiCiAjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRDb3BpZXIuaCIKICNpbmNsdWRlICJDcm9z
c1RocmVhZFRhc2suaCIKKyNpbmNsdWRlICJjYy9DQ01haW5UaHJlYWQuaCIKICNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFk
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhy
ZWFkLmNwcAppbmRleCA5NTY2NTg0NWM1OGM0OGNhMDYyMjAwMjQyNDhiNzQ3YWJhYjc2MGNmLi5k
ZTE3M2ExMzQ5ODI0YWY5MGZhZGNlNzgxOTBmYmI4M2NjNDBlYjg1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQu
Y3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiQ0NUaHJlYWQuaCIKIAogI2luY2x1ZGUg
IkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKICNpbmNs
dWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CkBAIC02NCw2ICs2NSw3IEBAIHZvaWQq
IENDVGhyZWFkOjpjb21wb3NpdG9yVGhyZWFkU3RhcnQodm9pZCogdXNlcmRhdGEpCiAKIHZvaWQq
IENDVGhyZWFkOjpydW5Mb29wKCkKIHsKKyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWQ6OnJ1bkxv
b3AiLCB0aGlzLCAwKTsKICAgICB7CiAgICAgICAgIC8vIFdhaXQgZm9yIENDVGhyZWFkOjpzdGFy
dCgpIHRvIGNvbXBsZXRlIHRvIGhhdmUgbV90aHJlYWRJRAogICAgICAgICAvLyBlc3RhYmxpc2hl
ZCBiZWZvcmUgc3RhcnRpbmcgdGhlIG1haW4gbG9vcC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkVGFzay5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRUYXNrLmgKaW5k
ZXggNzEyNDVkM2U0ZTBlY2U1MzUwNWEwZGVkZTc1MzY4ZWNjNmQwZmM0Ny4uOTFjNThlNWQyNWI3
YmIyODZlMjE2YzRlMDY4Y2JlMTA5NTc4ZjE4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRUYXNrLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRUYXNrLmgKQEAg
LTI0LDkgKzI0LDkgQEAKICNpZm5kZWYgQ0NUaHJlYWRUYXNrX2gKICNkZWZpbmUgQ0NUaHJlYWRU
YXNrX2gKIAotI2luY2x1ZGUgIkNDVGhyZWFkLmgiCiAjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRDb3Bp
ZXIuaCIKICNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKKyNpbmNsdWRlICJjYy9DQ1RocmVh
ZC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAyNzkwM2YzMTc5ZDM0NjkwNzU1
NjE2YTA0NzM3YThjNjU1NjM2MDhiLi4wYWFjMmRkMmMwOGJlY2VjMGIxM2EyYzI3OGQ2NzMxN2I3
YWQ1OWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMyBAQAorMjAx
MS0wNS0xNyAgTmF0IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBJbXBsZW1lbnQgQ0NM
YXllclRyZWVIb3N0IGFuZCBDQ0xheWVyVHJlZUhvc3RJbXBsIHBvcnRpb25zIG9mIHRocmVhZGVk
IGNvbXBvc2l0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTU4NDA4CisKKyAgICAgICAgUmVkaXJlY3QgaW52YWxpZGF0ZXMgYW5kIHNjaGVkdWxpbmcg
aW50byBjb21wb3NpdG9yIHdoZW4gaW4KKyAgICAgICAgdGhyZWFkZWQgY29tcG9zaXRpbmcgbW9k
ZS4gQWRkIHN0cmVzcyB0ZXN0cyBmb3IgQ0NMYXllclRyZWVIb3N0LgorCisgICAgICAgICogV2Vi
S2l0Lmd5cGk6CisgICAgICAgICogcHVibGljL1dlYldpZGdldC5oOgorICAgICAgICAqIHNyYy9X
ZWJQb3B1cE1lbnVJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51SW1wbDo6
YW5pbWF0ZSk6CisgICAgICAgICogc3JjL1dlYlBvcHVwTWVudUltcGwuaDoKKyAgICAgICAgKiBz
cmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6YW5pbWF0
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpwYWludCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXdJbXBsOjphbmltYXRlQW5kTGF5b3V0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld0ltcGw6OnVwZGF0ZUxheWVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpj
b21wb3NpdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0Um9vdExheWVyTmVl
ZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0FjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpkb0Nv
bXBvc2l0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjcmVhdGVMYXllclRyZWVI
b3N0Q29udGV4dDNEKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnJlYWxsb2NhdGVS
ZW5kZXJlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp1cGRhdGVMYXllclJlbmRl
cmVyU2V0dGluZ3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6dXBkYXRlTGF5ZXJS
ZW5kZXJlclZpZXdwb3J0KToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKyAgICAgICAg
KiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OkND
TGF5ZXJUcmVlSG9zdFRlc3Q6OkNDTGF5ZXJUcmVlSG9zdFRlc3QpOgorICAgICAgICAoV1RGOjpD
Q0xheWVyVHJlZUhvc3RUZXN0OjphbmltYXRlQW5kTGF5b3V0KToKKyAgICAgICAgKFdURjo6Q0NM
YXllclRyZWVIb3N0VGVzdDo6YmVnaW5Db21taXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6
Q0NMYXllclRyZWVIb3N0VGVzdDo6YmVnaW5Db21taXRPbk1haW5UaHJlYWQpOgorICAgICAgICAo
V1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0Ojpjb21taXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdU
Rjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6Y29tbWl0Q29tcGxldGVPbkNDVGhyZWFkKToKKyAgICAg
ICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6Y29tbWl0Q29tcGxldGVPbk1haW5UaHJlYWQp
OgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0OjpkcmF3TGF5ZXJzQW5kUHJlc2Vu
dE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0Ojp1cGRhdGVM
YXllcnMpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0OjpvbkJlZ2luVGVzdCk6
CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3Q6OmRvRW5kVGVzdCk6CisgICAgICAg
IChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3Q6Om9uRW5kVGVzdCk6CisgICAgICAgIChXVEY6OkND
TGF5ZXJUcmVlSG9zdFRlc3Q6OnJ1blRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhv
c3RUZXN0Ojp0ZXN0VGltZW91dCk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0Q2xp
ZW50OjpNb2NrTGF5ZXJUcmVlSG9zdENsaWVudCk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRy
ZWVIb3N0Q2xpZW50OjpjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKToKKyAgICAgICAgKFdU
Rjo6TW9ja0xheWVyVHJlZUhvc3RDbGllbnQ6OmFuaW1hdGVBbmRMYXlvdXQpOgorICAgICAgICAo
V1RGOjpNb2NrTGF5ZXJUcmVlSG9zdENsaWVudDo6dXBkYXRlTGF5ZXJzKToKKyAgICAgICAgKFdU
Rjo6TW9ja0xheWVyVHJlZUhvc3RDb21taXR0ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXVEY6Ok1v
Y2tMYXllclRyZWVIb3N0Q29tbWl0dGVyOjpjb21taXQpOgorICAgICAgICAoV1RGOjpNb2NrTGF5
ZXJUcmVlSG9zdENvbW1pdHRlcjo6TW9ja0xheWVyVHJlZUhvc3RDb21taXR0ZXIpOgorICAgICAg
ICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdEltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXVEY6Ok1v
Y2tMYXllclRyZWVIb3N0SW1wbDo6YmVnaW5Db21taXQpOgorICAgICAgICAoV1RGOjpNb2NrTGF5
ZXJUcmVlSG9zdEltcGw6OmNvbW1pdENvbXBsZXRlKToKKyAgICAgICAgKFdURjo6TW9ja0xheWVy
VHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzQW5kUHJlc2VudCk6CisgICAgICAgIChXVEY6Ok1vY2tM
YXllclRyZWVIb3N0SW1wbDo6TW9ja0xheWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAgKFdURjo6
TW9ja0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmNyZWF0ZSk6CisgICAgICAgIChXVEY6Ok1vY2tM
YXllclRyZWVIb3N0SW1wbFByb3h5OjpjcmVhdGVMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAg
IChXVEY6Ok1vY2tMYXllclRyZWVIb3N0SW1wbFByb3h5OjpNb2NrTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eSk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0OjpNb2NrTGF5ZXJUcmVlSG9z
dCk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVIb3N0
SW1wbFByb3h5KToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVy
cyk6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVIb3N0
Q29tbWl0dGVyKToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3Q6OmJlZ2luQ29tbWl0
KToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3Q6OmNvbW1pdENvbXBsZXRlKToKKyAg
ICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6ZG9CZWdpblRlc3QpOgorICAgICAgICAo
V1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0OjplbmRUZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXll
clRyZWVIb3N0VGVzdFNob3J0bGl2ZWQxOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDEp
OgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDE6OmJlZ2luVGVz
dCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTaG9ydGxpdmVkMTo6YWZ0ZXJU
ZXN0KToKKyAgICAgICAgKFdURjo6VEVTVF9GKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVI
b3N0VGVzdFNob3J0bGl2ZWQyOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDIpOgorICAg
ICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDI6OmJlZ2luVGVzdCk6Cisg
ICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTaG9ydGxpdmVkMjo6YWZ0ZXJUZXN0KToK
KyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQzOjpDQ0xheWVyVHJl
ZUhvc3RUZXN0U2hvcnRsaXZlZDMpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0
U2hvcnRsaXZlZDM6OmJlZ2luVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRl
c3RTaG9ydGxpdmVkMzo6YWZ0ZXJUZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0
VGVzdENvbW1pdGluZ1dpdGhDb250aW51b3VzUmVkcmF3OjpDQ0xheWVyVHJlZUhvc3RUZXN0Q29t
bWl0aW5nV2l0aENvbnRpbnVvdXNSZWRyYXcpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhv
c3RUZXN0Q29tbWl0aW5nV2l0aENvbnRpbnVvdXNSZWRyYXc6OmJlZ2luVGVzdCk6CisgICAgICAg
IChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RDb21taXRpbmdXaXRoQ29udGludW91c1JlZHJhdzo6
Y29tbWl0Q29tcGxldGVPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0
VGVzdENvbW1pdGluZ1dpdGhDb250aW51b3VzUmVkcmF3OjpkcmF3TGF5ZXJzQW5kUHJlc2VudE9u
Q0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0Q29tbWl0aW5nV2l0
aENvbnRpbnVvdXNSZWRyYXc6OmFmdGVyVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVl
SG9zdFRlc3RTZXROZWVkc0NvbW1pdDE6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc0NvbW1p
dDEpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQxOjpi
ZWdpblRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNDb21t
aXQxOjpkcmF3TGF5ZXJzQW5kUHJlc2VudE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ0xh
eWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQxOjpjb21taXRPbkNDVGhyZWFkKToKKyAgICAg
ICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzQ29tbWl0MTo6YWZ0ZXJUZXN0KToK
KyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzQ29tbWl0Mjo6Q0NMYXll
clRyZWVIb3N0VGVzdFNldE5lZWRzQ29tbWl0Mik6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVl
SG9zdFRlc3RTZXROZWVkc0NvbW1pdDI6OmJlZ2luVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5
ZXJUcmVlSG9zdFRlc3RTZXROZWVkc0NvbW1pdDI6OmRyYXdMYXllcnNBbmRQcmVzZW50T25DQ1Ro
cmVhZCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc0NvbW1pdDI6
OmNvbW1pdE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2V0
TmVlZHNDb21taXQyOjphZnRlclRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RU
ZXN0U2V0TmVlZHNSZWRyYXc6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc1JlZHJhdyk6Cisg
ICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc1JlZHJhdzo6YmVnaW5UZXN0
KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzUmVkcmF3OjpkcmF3
TGF5ZXJzQW5kUHJlc2VudE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhv
c3RUZXN0U2V0TmVlZHNSZWRyYXc6OmNvbW1pdE9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpD
Q0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNSZWRyYXc6OmFmdGVyVGVzdCk6CisgICAgICAgICog
dGVzdHMvQ0NUaHJlYWRUZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorCiAyMDEx
LTA2LTIxICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgS2VubmV0aCBSdXNzZWxsLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggZjJh
MGRjNzIzYmMwMjJhNzY3YTNmMDUzMGMwN2JlODMxMDM2YmZlMC4uYzRjYTkwZGRhOGNmYWIyNjZk
MjZjNzZhYTkwZmM2NmE3OTRkODZiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBA
IC01NCwxMiArNTQsMTMgQEAKICAgICAgICAgJ3dlYmtpdF91bml0dGVzdF9maWxlcyc6IFsKICAg
ICAgICAgICAgICd0ZXN0cy9BcmVuYVRlc3RIZWxwZXJzLmgnLAogICAgICAgICAgICAgJ3Rlc3Rz
L0Fzc29jaWF0ZWRVUkxMb2FkZXJUZXN0LmNwcCcsCi0gICAgICAgICAgICAndGVzdHMvSW5uZXJH
ZXN0dXJlUmVjb2duaXplclRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyVHJl
ZUhvc3RUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NUaHJlYWRUYXNrVGVzdC5jcHAn
LAogICAgICAgICAgICAgJ3Rlc3RzL0NDVGhyZWFkVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rl
c3RzL0lEQkJpbmRpbmdVdGlsaXRpZXNUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvSURC
S2V5UGF0aFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9JREJMZXZlbERCQ29kaW5nVGVz
dC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0lubmVyR2VzdHVyZVJlY29nbml6ZXJUZXN0LmNw
cCcsCiAgICAgICAgICAgICAndGVzdHMvS2V5Ym9hcmRUZXN0LmNwcCcsCiAgICAgICAgICAgICAn
dGVzdHMvS1VSTFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9QT0RBcmVuYVRlc3QuY3Bw
JywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5o
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0LmgKaW5kZXggNzQzNDQx
MjkwOTBkYzE0Y2ViYTgxMWE4N2I0NWVlMzdjZGE1YTRlOC4uZjZlNzNmMWI0NjQyMWQ2YTRjYzAz
M2ZlZTg3MmU2ZDgzYzRkMjkxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViV2lkZ2V0LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
V2lkZ2V0LmgKQEAgLTQ3LDYgKzQ3LDkgQEAgY2xhc3MgV2ViU3RyaW5nOwogc3RydWN0IFdlYlBv
aW50OwogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYlZlY3RvcjsKIAorLy8gRklYTUU6
IHJlbW92ZSB0aGlzIGRlZmluZSBvbmNlIHJlbmRlcl93aWRnZXQgaGFzIGJlZW4gY2hhbmdlZCB0
byBpc3N1ZSB0aHJlYWRlZCBjb21wb3NpdG9yIGNhbGxzCisjZGVmaW5lIFdFQldJREdFVF9IQVNf
QU5JTUFURV9DSEFOR0VTIDEKKwogY2xhc3MgV2ViV2lkZ2V0IHsKIHB1YmxpYzoKICAgICAvLyBU
aGlzIG1ldGhvZCBjbG9zZXMgYW5kIGRlbGV0ZXMgdGhlIFdlYldpZGdldC4KQEAgLTY4LDE1ICs3
MSwxNyBAQCBwdWJsaWM6CiAgICAgLy8gd2lsbFN0YXJ0TGl2ZVJlc2l6ZS4KICAgICB2aXJ0dWFs
IHZvaWQgd2lsbEVuZExpdmVSZXNpemUoKSB7IH0KIAotICAgIC8vIENhbGxlZCB0byB1cGRhdGUg
aW1wZXJhdGl2ZSBhbmltYXRpb24gc3RhdGUuICBUaGlzIHNob3VsZCBiZSBjYWxsZWQgYmVmb3Jl
Ci0gICAgLy8gcGFpbnQsIGFsdGhvdWdoIHRoZSBjbGllbnQgY2FuIHJhdGUtbGltaXQgdGhlc2Ug
Y2FsbHMuCi0gICAgdmlydHVhbCB2b2lkIGFuaW1hdGUoKSB7IH0KKyAgICAvLyBDYWxsZWQgdG8g
dXBkYXRlIGltcGVyYXRpdmUgYW5pbWF0aW9uIHN0YXRlLiBUaGlzIHNob3VsZCBiZSBjYWxsZWQg
YmVmb3JlCisgICAgLy8gcGFpbnQsIGFsdGhvdWdoIHRoZSBjbGllbnQgY2FuIHJhdGUtbGltaXQg
dGhlc2UgY2FsbHMuIFdoZW4KKyAgICAvLyBmcmFtZUJlZ2luVGltZSBpcyAwLjAsIHRoZSBXZWJX
aWRnZXQgd2lsbCBkZXRlcm1pbmUgdGhlIGZyYW1lIGJlZ2luIHRpbWUKKyAgICAvLyBpdHNlbGYu
CisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGUoZG91YmxlIGZyYW1lQmVnaW5UaW1lKSB7IH0KIAog
ICAgIC8vIENhbGxlZCB0byBsYXlvdXQgdGhlIFdlYldpZGdldC4gIFRoaXMgTVVTVCBiZSBjYWxs
ZWQgYmVmb3JlIFBhaW50LAogICAgIC8vIGFuZCBpdCBtYXkgcmVzdWx0IGluIGNhbGxzIHRvIFdl
YldpZGdldENsaWVudDo6ZGlkSW52YWxpZGF0ZVJlY3QuCiAgICAgdmlydHVhbCB2b2lkIGxheW91
dCgpIHsgfQogCi0gICAgLy8gQ2FsbGVkIHRvIHBhaW50IHRoZSByZWN0YW5ndWxhciByZWdpb24g
d2l0aGluIHRoZSBXZWJXaWRnZXQgCisgICAgLy8gQ2FsbGVkIHRvIHBhaW50IHRoZSByZWN0YW5n
dWxhciByZWdpb24gd2l0aGluIHRoZSBXZWJXaWRnZXQKICAgICAvLyBvbnRvIHRoZSBzcGVjaWZp
ZWQgY2FudmFzIGF0ICh2aWV3UG9ydC54LHZpZXdQb3J0LnkpLiBZb3UgTVVTVCBjYWxsCiAgICAg
Ly8gTGF5b3V0IGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLiAgSXQgaXMgb2theSB0byBjYWxs
IHBhaW50CiAgICAgLy8gbXVsdGlwbGUgdGltZXMgb25jZSBsYXlvdXQgaGFzIGJlZW4gY2FsbGVk
LCBhc3N1bWluZyBubyBvdGhlcgpAQCAtODUsMTIgKzkwLDE1IEBAIHB1YmxpYzoKICAgICAvLyB3
YXJyYW50ZWQgYmVmb3JlIHBhaW50aW5nIGFnYWluKS4KICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQo
V2ViQ2FudmFzKiwgY29uc3QgV2ViUmVjdCYgdmlld1BvcnQpIHsgfQogCi0gICAgLy8gVHJpZ2dl
cnMgY29tcG9zaXRpbmcgb2YgdGhlIGN1cnJlbnQgbGF5ZXJzIG9udG8gdGhlIHNjcmVlbi4KLSAg
ICAvLyBUaGUgZmluaXNoIGFyZ3VtZW50IGNvbnRyb2xzIHdoZXRoZXIgdGhlIGNvbXBvc2l0b3Ig
d2lsbCB3YWl0IGZvciB0aGUKLSAgICAvLyBHUFUgdG8gZmluaXNoIHJlbmRlcmluZyBiZWZvcmUg
cmV0dXJuaW5nLiBZb3UgTVVTVCBjYWxsIExheW91dAotICAgIC8vIGJlZm9yZSBjYWxsaW5nIHRo
aXMgbWV0aG9kLCBmb3IgdGhlIHNhbWUgcmVhc29ucyBkZXNjcmliZWQgaW4KLSAgICAvLyB0aGUg
cGFpbnQgbWV0aG9kIGFib3ZlLgotICAgIHZpcnR1YWwgdm9pZCBjb21wb3NpdGUoYm9vbCBmaW5p
c2gpIHsgfQorICAgIC8vIEluIG5vbi10aHJlYWRlZCBjb21wb3NpdGluZyBtb2RlLCB0cmlnZ2Vy
cyBjb21wb3NpdGluZyBvZiB0aGUgY3VycmVudAorICAgIC8vIGxheWVycyBvbnRvIHRoZSBzY3Jl
ZW4uIFlvdSBNVVNUIGNhbGwgTGF5b3V0IGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLCBmb3Ig
dGhlIHNhbWUKKyAgICAvLyByZWFzb25zIGRlc2NyaWJlZCBpbiB0aGUgcGFpbnQgbWV0aG9kIGFi
b3ZlCisgICAgLy8KKyAgICAvLyBJbiB0aHJlYWRlZCBjb21wb3NpdGluZyBtb2RlLCBpbmRpY2F0
ZXMgdGhhdCB0aGUgd2lkZ2V0IHNob3VsZCB1cGRhdGUKKyAgICAvLyBpdHNlbGYsIGZvciBleGFt
cGxlIGR1ZSB0byB3aW5kb3cgZGFtYWdlLiBUaGUgcmVkcmF3IHdpbGwgYmVnaW4KKyAgICAvLyBh
c3luY2hyb25vdXNseSBhbmQgcGVyZm9ybSBsYXlvdXQgYW5kIGFuaW1hdGlvbiBpbnRlcm5hbGx5
LiBEbyBub3QgY2FsbAorICAgIC8vIGFuaW1hdGUgb3IgbGF5b3V0IGluIHRoaXMgY2FzZS4KKyAg
ICB2aXJ0dWFsIHZvaWQgY29tcG9zaXRlKGJvb2wgZmluaXNoKSA9IDA7CiAKICAgICAvLyBDYWxs
ZWQgdG8gaW5mb3JtIHRoZSBXZWJXaWRnZXQgb2YgYSBjaGFuZ2UgaW4gdGhlbWUuCiAgICAgLy8g
SW1wbGVtZW50b3JzIHRoYXQgY2FjaGUgcmVuZGVyZWQgY29waWVzIG9mIHdpZGdldHMgbmVlZCB0
byByZS1yZW5kZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBv
cHVwTWVudUltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51
SW1wbC5jcHAKaW5kZXggNWNiZjVmZjA2MGZhMzQyM2Q0Y2Q0ODgyZDVkYjE3Zjk5M2MxNzc3ZS4u
NDA5ZTZmNzFlYjdkODVmNzAxYmRjZWFiNmRkMDNhMTY2ZThkNDliOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5jcHAKQEAgLTE2Nyw3ICsxNjcs
NyBAQCB2b2lkIFdlYlBvcHVwTWVudUltcGw6OndpbGxFbmRMaXZlUmVzaXplKCkKIHsKIH0KIAot
dm9pZCBXZWJQb3B1cE1lbnVJbXBsOjphbmltYXRlKCkKK3ZvaWQgV2ViUG9wdXBNZW51SW1wbDo6
YW5pbWF0ZShkb3VibGUpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlBvcHVwTWVudUltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlBvcHVwTWVudUltcGwuaAppbmRleCBhOTFmYWYxYzBiOTRkZjQwZDY0YjdkMzNhOTgzNTA0NDM0
ZGUxNGQwLi40NWU4ODk3MjE0NTE1YjhmMTg2MTBhODI4YTdhMWEwODk3YTdkMDYzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmgKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5oCkBAIC02NSw3ICs2
NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgd2lsbFN0YXJ0TGl2ZVJlc2l6ZSgpOwog
ICAgIHZpcnR1YWwgdm9pZCByZXNpemUoY29uc3QgV2ViU2l6ZSYpOwogICAgIHZpcnR1YWwgdm9p
ZCB3aWxsRW5kTGl2ZVJlc2l6ZSgpOwotICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlKCk7CisgICAg
dmlydHVhbCB2b2lkIGFuaW1hdGUoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKICAgICB2aXJ0dWFs
IHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFdlYkNhbnZhcyogY2FudmFz
LCBjb25zdCBXZWJSZWN0JiByZWN0KTsKICAgICB2aXJ0dWFsIHZvaWQgdGhlbWVDaGFuZ2VkKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggMDg3ODZk
OTNhYWQwOGEwNzIzNGZiMmEwZGVhMDg1OGVkMjU5Y2JlNS4uMjYxMDFjNDZlMGY4Y2ExMTZiNDM3
YjBiN2Q0NGNiZTJjYjE3ZDczZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViVmlld0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZp
ZXdJbXBsLmNwcApAQCAtMTQ4LDYgKzE0OCw3IEBACiAjaW5jbHVkZSA8Y21hdGg+IC8vIGZvciBz
dGQ6OnBvdwogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7
CiAKIG5hbWVzcGFjZSB7CiAKQEAgLTEwMDQsOCArMTAwNSw4IEBAIHZvaWQgV2ViVmlld0ltcGw6
OnJlc2l6ZShjb25zdCBXZWJTaXplJiBuZXdTaXplKQogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQogICAgIGlmIChtX2xheWVyUmVuZGVyZXIgJiYgaXNBY2NlbGVyYXRlZENvbXBv
c2l0aW5nQWN0aXZlKCkpIHsKLSAgICAgICAgbV9sYXllclJlbmRlcmVyLT5yZXNpemVPbnNjcmVl
bkNvbnRlbnQoSW50U2l6ZShzdGQ6Om1heCgxLCBtX3NpemUud2lkdGgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KDEsIG1f
c2l6ZS5oZWlnaHQpKSk7CisgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+cmVzaXplT25zY3JlZW5D
b250ZW50KEludFNpemUobWF4KDEsIG1fc2l6ZS53aWR0aCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4KDEsIG1fc2l6ZS5oZWlnaHQp
KSk7CiAgICAgfQogI2VuZGlmCiB9CkBAIC0xMDE2LDE3ICsxMDE3LDIxIEBAIHZvaWQgV2ViVmll
d0ltcGw6OndpbGxFbmRMaXZlUmVzaXplKCkKICAgICAgICAgbWFpbkZyYW1lSW1wbCgpLT5mcmFt
ZVZpZXcoKS0+d2lsbEVuZExpdmVSZXNpemUoKTsKIH0KIAotdm9pZCBXZWJWaWV3SW1wbDo6YW5p
bWF0ZSgpCit2b2lkIFdlYlZpZXdJbXBsOjphbmltYXRlKGRvdWJsZSBmcmFtZUJlZ2luVGltZSkK
IHsKLSAgICBUUkFDRV9FVkVOVCgiV2ViVmlld0ltcGw6OmFuaW1hdGUiLCB0aGlzLCAwKTsKICNp
ZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCisgICAgVFJBQ0VfRVZFTlQoIldlYlZp
ZXdJbXBsOjphbmltYXRlIiwgdGhpcywgMCk7CisgICAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIHpl
cm8tY2hlY2sgb25jZSByZW5kZXJfd2lkZ2V0IGhhcyBiZWVuIG1vZGlmaWVkIHRvCisgICAgLy8g
cGFzcyBpbiBhIGZyYW1lQmVnaW5UaW1lLgorICAgIGlmICghZnJhbWVCZWdpblRpbWUpCisgICAg
ICAgIGZyYW1lQmVnaW5UaW1lID0gY3VycmVudFRpbWUoKTsKICAgICBXZWJGcmFtZUltcGwqIHdl
YmZyYW1lID0gbWFpbkZyYW1lSW1wbCgpOwogICAgIGlmICh3ZWJmcmFtZSkgewotICAgICAgICBG
cmFtZVZpZXcqIHZpZXcgPSB3ZWJmcmFtZS0+ZnJhbWVWaWV3KCk7CisgICAgICAgRnJhbWVWaWV3
KiB2aWV3ID0gd2ViZnJhbWUtPmZyYW1lVmlldygpOwogICAgICAgICBpZiAodmlldykgewogICAg
ICAgICAgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKICAgICAgICAgICAgICAgICBtX2xheWVyUmVu
ZGVyZXItPnNldElzQW5pbWF0aW5nKHRydWUpOwotICAgICAgICAgICAgdmlldy0+c2VydmljZVNj
cmlwdGVkQW5pbWF0aW9ucyhjb252ZXJ0U2Vjb25kc1RvRE9NVGltZVN0YW1wKGN1cnJlbnRUaW1l
KCkpKTsKKyAgICAgICAgICAgIHZpZXctPnNlcnZpY2VTY3JpcHRlZEFuaW1hdGlvbnMoY29udmVy
dFNlY29uZHNUb0RPTVRpbWVTdGFtcChmcmFtZUJlZ2luVGltZSkpOwogICAgICAgICAgICAgaWYg
KG1fbGF5ZXJSZW5kZXJlcikKICAgICAgICAgICAgICAgICBtX2xheWVyUmVuZGVyZXItPnNldElz
QW5pbWF0aW5nKGZhbHNlKTsKICAgICAgICAgfQpAQCAtMTA5NSw2ICsxMTAwLDEwIEBAIHZvaWQg
V2ViVmlld0ltcGw6OnBhaW50KFdlYkNhbnZhcyogY2FudmFzLCBjb25zdCBXZWJSZWN0JiByZWN0
KQogewogICAgIGlmIChpc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSkgewogI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcp
CisgICAgICAgIC8vIEZJWE1FOiBkbyByZWFkYmFjayBpbiB0aHJlYWRlZCBjb21wb3NpdGluZyBt
b2RlIHJhdGhlciB0aGFuIHJldHVybmluZyBub3RoaW5nCisgICAgICAgIHJldHVybjsKKyNlbmRp
ZgogICAgICAgICBkb0NvbXBvc2l0ZSgpOwogCiAgICAgICAgIC8vIElmIGEgY2FudmFzIHdhcyBw
YXNzZWQgaW4sIHdlIHVzZSBpdCB0byBncmFiIGEgY29weSBvZiB0aGUKQEAgLTExMjgsMTYgKzEx
MzcsMjkgQEAgdm9pZCBXZWJWaWV3SW1wbDo6dGhlbWVDaGFuZ2VkKCkKICAgICB2aWV3LT5pbnZh
bGlkYXRlUmVjdChkYW1hZ2VkUmVjdCk7CiB9CiAKLXZvaWQgV2ViVmlld0ltcGw6OmNvbXBvc2l0
ZShib29sIGZpbmlzaCkKK3ZvaWQgV2ViVmlld0ltcGw6OmFuaW1hdGVBbmRMYXlvdXQoZG91Ymxl
IGZyYW1lQmVnaW5UaW1lKQoreworICAgIGFuaW1hdGUoZnJhbWVCZWdpblRpbWUpOworICAgIGxh
eW91dCgpOworfQorCit2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVMYXllcnMoKQogewotI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICAvLyBVcGRhdGUgdGhlIGNvbXBvc2l0aW5n
IHJlcXVpcmVtZW50cyBmb3IgYWxsIGZyYW1lIGluIHRoZSB0cmVlIGJlZm9yZSBkb2luZyBhbnkg
cGFpbnRpbmcKICAgICAvLyBhcyB0aGUgY29tcG9zaXRpbmcgcmVxdWlyZW1lbnRzIGZvciBhIFJl
bmRlckxheWVyIHdpdGhpbiBhIHN1YmZyYW1lIG1pZ2h0IGNoYW5nZS4KICAgICBmb3IgKEZyYW1l
KiBmcmFtZSA9IHBhZ2UoKS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVl
KCktPnRyYXZlcnNlTmV4dCgpKQogICAgICAgICBmcmFtZS0+dmlldygpLT51cGRhdGVDb21wb3Np
dGluZ0xheWVycygpOwogICAgIHBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+c3luY0NvbXBv
c2l0aW5nU3RhdGVJbmNsdWRpbmdTdWJmcmFtZXMoKTsKK30KIAordm9pZCBXZWJWaWV3SW1wbDo6
Y29tcG9zaXRlKGJvb2wgZmluaXNoKQoreworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKKyNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgbV9sYXllclJlbmRlcmVyLT5z
ZXROZWVkc1JlZHJhdygpOworI2Vsc2UKICAgICBUUkFDRV9FVkVOVCgiV2ViVmlld0ltcGw6OmNv
bXBvc2l0ZSIsIHRoaXMsIDApOworCiAgICAgaWYgKG1fcmVjcmVhdGluZ0dyYXBoaWNzQ29udGV4
dCkgewogICAgICAgICAvLyByZWFsbG9jYXRlUmVuZGVyZXIgd2lsbCByZXF1ZXN0IGEgcmVwYWlu
dCB3aGV0aGVyIG9yIG5vdCBpdCBzdWNjZWVkZWQKICAgICAgICAgLy8gaW4gY3JlYXRpbmcgYSBu
ZXcgY29udGV4dC4KQEAgLTExNDcsMTAgKzExNjksNiBAQCB2b2lkIFdlYlZpZXdJbXBsOjpjb21w
b3NpdGUoYm9vbCBmaW5pc2gpCiAgICAgfQogICAgIGRvQ29tcG9zaXRlKCk7CiAKLSAgICAvLyBG
aW5pc2ggaWYgcmVxdWVzdGVkLgotICAgIGlmIChmaW5pc2gpCi0gICAgICAgIG1fbGF5ZXJSZW5k
ZXJlci0+ZmluaXNoKCk7Ci0KICAgICAvLyBQdXQgcmVzdWx0IG9uc2NyZWVuLgogICAgIG1fbGF5
ZXJSZW5kZXJlci0+cHJlc2VudCgpOwogCkBAIC0xMTY2LDYgKzExODQsNyBAQCB2b2lkIFdlYlZp
ZXdJbXBsOjpjb21wb3NpdGUoYm9vbCBmaW5pc2gpCiAgICAgICAgIHNldFJvb3RMYXllck5lZWRz
RGlzcGxheSgpOwogICAgIH0KICNlbmRpZgorI2VuZGlmCiB9CiAKIGNvbnN0IFdlYklucHV0RXZl
bnQqIFdlYlZpZXdJbXBsOjptX2N1cnJlbnRJbnB1dEV2ZW50ID0gMDsKQEAgLTE3NzksMTMgKzE3
OTgsMTMgQEAgdm9pZCBXZWJWaWV3SW1wbDo6ZnVsbEZyYW1lUGx1Z2luWm9vbUxldmVsQ2hhbmdl
ZChkb3VibGUgem9vbUxldmVsKQogICAgIGlmICh6b29tTGV2ZWwgPT0gbV96b29tTGV2ZWwpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIG1fem9vbUxldmVsID0gc3RkOjptYXgoc3RkOjptaW4oem9v
bUxldmVsLCBtX21heGltdW1ab29tTGV2ZWwpLCBtX21pbmltdW1ab29tTGV2ZWwpOworICAgIG1f
em9vbUxldmVsID0gbWF4KG1pbih6b29tTGV2ZWwsIG1fbWF4aW11bVpvb21MZXZlbCksIG1fbWlu
aW11bVpvb21MZXZlbCk7CiAgICAgbV9jbGllbnQtPnpvb21MZXZlbENoYW5nZWQoKTsKIH0KIAog
ZG91YmxlIFdlYlZpZXc6Onpvb21MZXZlbFRvWm9vbUZhY3Rvcihkb3VibGUgem9vbUxldmVsKQog
ewotICAgIHJldHVybiBzdGQ6OnBvdyh0ZXh0U2l6ZU11bHRpcGxpZXJSYXRpbywgem9vbUxldmVs
KTsKKyAgICByZXR1cm4gcG93KHRleHRTaXplTXVsdGlwbGllclJhdGlvLCB6b29tTGV2ZWwpOwog
fQogCiBkb3VibGUgV2ViVmlldzo6em9vbUZhY3RvclRvWm9vbUxldmVsKGRvdWJsZSBmYWN0b3Ip
CkBAIC0yNDE5LDcgKzI0MzgsMTIgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0Um9vdFBsYXRmb3Jt
TGF5ZXIoV2ViQ29yZTo6UGxhdGZvcm1MYXllciogbGF5ZXIpCiAKIHZvaWQgV2ViVmlld0ltcGw6
OnNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpCiB7CisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lU
SU5HKQorICAgIGlmIChtX2xheWVyUmVuZGVyZXIpCisgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+
c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyNlbHNlCiAgICAgbV9jbGllbnQtPnNjaGVkdWxl
Q29tcG9zaXRlKCk7CisjZW5kaWYKIH0KIAogCkBAIC0yNDkxLDIyICsyNTE1LDE2IEBAIHZvaWQg
V2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZShib29sIGFjdGl2
ZSkKICAgICAgICAgbV9jbGllbnQtPmRpZEFjdGl2YXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyhm
YWxzZSk7CiAgICAgfSBlbHNlIGlmIChtX2xheWVyUmVuZGVyZXIpIHsKICAgICAgICAgbV9pc0Fj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUgPSB0cnVlOwotICAgICAgICBtX2xheWVyUmVuZGVy
ZXItPnJlc2l6ZU9uc2NyZWVuQ29udGVudChXZWJDb3JlOjpJbnRTaXplKHN0ZDo6bWF4KDEsIG1f
c2l6ZS53aWR0aCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgoMSwgbV9zaXplLmhlaWdodCkpKTsKKyAgICAg
ICAgbV9sYXllclJlbmRlcmVyLT5yZXNpemVPbnNjcmVlbkNvbnRlbnQoV2ViQ29yZTo6SW50U2l6
ZShtYXgoMSwgbV9zaXplLndpZHRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXgoMSwgbV9zaXplLmhlaWdodCkpKTsK
IAogICAgICAgICBtX2NsaWVudC0+ZGlkQWN0aXZhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nKHRy
dWUpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIFRSQUNFX0VWRU5UKCJXZWJWaWV3SW1wbDo6c2V0
SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKHRydWUpIiwgdGhpcywgMCk7Ci0gICAgICAg
IFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IG1fdGVtcG9yYXJ5T25zY3JlZW5H
cmFwaGljc0NvbnRleHQzRC5yZWxlYXNlKCk7Ci0gICAgICAgIGlmICghY29udGV4dCkgewotICAg
ICAgICAgICAgY29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoZ2V0Q29tcG9zaXRv
ckNvbnRleHRBdHRyaWJ1dGVzKCksIG1fcGFnZS0+Y2hyb21lKCksIEdyYXBoaWNzQ29udGV4dDNE
OjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7Ci0gICAgICAgICAgICBpZiAoY29udGV4dCkK
LSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZXNoYXBlKHN0ZDo6bWF4KDEsIG1fc2l6ZS53aWR0
aCksIHN0ZDo6bWF4KDEsIG1fc2l6ZS5oZWlnaHQpKTsKLSAgICAgICAgfQotCiAKLSAgICAgICAg
bV9sYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUoY29udGV4dC5y
ZWxlYXNlKCksIFdlYlZpZXdJbXBsQ29udGVudFBhaW50ZXI6OmNyZWF0ZSh0aGlzKSwgbV9wYWdl
LT5zZXR0aW5ncygpLT5hY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKCkpOworICAgICAgICBtX2xh
eWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCBXZWJWaWV3
SW1wbENvbnRlbnRQYWludGVyOjpjcmVhdGUodGhpcyksIG1fcGFnZS0+c2V0dGluZ3MoKS0+YWNj
ZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCgpKTsKICAgICAgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikg
eworICAgICAgICAgICAgdXBkYXRlTGF5ZXJSZW5kZXJlclNldHRpbmdzKCk7CiAgICAgICAgICAg
ICBtX2NsaWVudC0+ZGlkQWN0aXZhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nKHRydWUpOwogICAg
ICAgICAgICAgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUgPSB0cnVlOwogICAgICAg
ICAgICAgbV9jb21wb3NpdG9yQ3JlYXRpb25GYWlsZWQgPSBmYWxzZTsKQEAgLTI1MzQsMzkgKzI1
NTIsNDQgQEAgdm9pZCBXZWJWaWV3SW1wbDo6ZG9Db21wb3NpdGUoKQogICAgIGlmICghcGFnZSgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2xheWVyUmVuZGVyZXItPnNldENvbXBvc2l0ZU9m
ZnNjcmVlbihzZXR0aW5ncygpLT5jb21wb3NpdGVUb1RleHR1cmVFbmFibGVkKCkpOwotCi0gICAg
Q0NIZWFkc1VwRGlzcGxheSogaHVkID0gbV9sYXllclJlbmRlcmVyLT5oZWFkc1VwRGlzcGxheSgp
OwotICAgIGh1ZC0+c2V0U2hvd0ZQU0NvdW50ZXIoc2V0dGluZ3MoKS0+c2hvd0ZQU0NvdW50ZXIo
KSk7Ci0gICAgaHVkLT5zZXRTaG93UGxhdGZvcm1MYXllclRyZWUoc2V0dGluZ3MoKS0+c2hvd1Bs
YXRmb3JtTGF5ZXJUcmVlKCkpOwotCiAgICAgaWYgKG1fcGFnZU92ZXJsYXkpCiAgICAgICAgIG1f
cGFnZU92ZXJsYXktPnVwZGF0ZSgpOwogCi0gICAgbV9sYXllclJlbmRlcmVyLT51cGRhdGVBbmRE
cmF3TGF5ZXJzKCk7CisgICAgbV9sYXllclJlbmRlcmVyLT51cGRhdGVMYXllcnMoKTsKKyAgICBt
X2xheWVyUmVuZGVyZXItPmRyYXdMYXllcnMoKTsKK30KKworUGFzc1JlZlB0cjxHcmFwaGljc0Nv
bnRleHQzRD4gV2ViVmlld0ltcGw6OmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKQorewor
ICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IG1fdGVtcG9yYXJ5T25zY3Jl
ZW5HcmFwaGljc0NvbnRleHQzRC5yZWxlYXNlKCk7CisgICAgaWYgKCFjb250ZXh0KSB7CisgICAg
ICAgIGNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKGdldENvbXBvc2l0b3JDb250
ZXh0QXR0cmlidXRlcygpLCBtX3BhZ2UtPmNocm9tZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVu
ZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
ICAgIGNvbnRleHQtPnJlc2hhcGUobWF4KDEsIG1fc2l6ZS53aWR0aCksIG1heCgxLCBtX3NpemUu
aGVpZ2h0KSk7CisgICAgfQorICAgIHJldHVybiBjb250ZXh0OwogfQogCiB2b2lkIFdlYlZpZXdJ
bXBsOjpyZWFsbG9jYXRlUmVuZGVyZXIoKQogewotICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4gbmV3Q29udGV4dCA9IG1fdGVtcG9yYXJ5T25zY3JlZW5HcmFwaGljc0NvbnRleHQzRC5nZXQo
KTsKLSAgICBXZWJHcmFwaGljc0NvbnRleHQzRCogd2ViQ29udGV4dCA9IEdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQzRChuZXdDb250ZXh0LmdldCgp
KTsKLSAgICBpZiAoIW5ld0NvbnRleHQgfHwgIXdlYkNvbnRleHQgfHwgd2ViQ29udGV4dC0+aXND
b250ZXh0TG9zdCgpKQotICAgICAgICBuZXdDb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OmNy
ZWF0ZSgKLSAgICAgICAgICAgIGdldENvbXBvc2l0b3JDb250ZXh0QXR0cmlidXRlcygpLCBtX3Bh
Z2UtPmNocm9tZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5k
b3cpOwogICAgIC8vIEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUgbWlnaHQgZmFpbCBhbmQgcmV0
dXJuIDAsIGluIHRoYXQgY2FzZSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSB3aWxsIGFs
c28gcmV0dXJuIDAuCi0gICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbGF5ZXJSZW5k
ZXJlciA9IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKG5ld0NvbnRleHQsIFdlYlZpZXdJ
bXBsQ29udGVudFBhaW50ZXI6OmNyZWF0ZSh0aGlzKSwgbV9wYWdlLT5zZXR0aW5ncygpLT5hY2Nl
bGVyYXRlZERyYXdpbmdFbmFibGVkKCkpOworICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21p
dW0+IGxheWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCBX
ZWJWaWV3SW1wbENvbnRlbnRQYWludGVyOjpjcmVhdGUodGhpcyksIG1fcGFnZS0+c2V0dGluZ3Mo
KS0+YWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCgpKTsKIAogICAgIC8vIFJlYXR0YWNoIHRoZSBy
b290IGxheWVyLiAgQ2hpbGQgbGF5ZXJzIHdpbGwgZ2V0IHJlYXR0YWNoZWQgYXMgYSBzaWRlIGVm
ZmVjdCBvZiB1cGRhdGVMYXllcnNSZWN1cnNpdmUuCiAgICAgaWYgKGxheWVyUmVuZGVyZXIpIHsK
KwogICAgICAgICBtX2xheWVyUmVuZGVyZXItPnRyYW5zZmVyUm9vdExheWVyKGxheWVyUmVuZGVy
ZXIuZ2V0KCkpOwogICAgICAgICBtX2xheWVyUmVuZGVyZXIgPSBsYXllclJlbmRlcmVyOworICAg
ICAgICB1cGRhdGVMYXllclJlbmRlcmVyU2V0dGluZ3MoKTsKKwogICAgICAgICAvLyBGSVhNRTog
SW4gTWFjT1MgbmV3Q29udGV4dC0+cmVzaGFwZSBtZXRob2QgbmVlZHMgdG8gYmUgY2FsbGVkIHRv
CiAgICAgICAgIC8vIGFsbG9jYXRlIElPU3VyZmFjZXMuIEFsbCBjYWxscyB0byBjcmVhdGUgYSBj
b250ZXh0IGZvbGxvd2VkIGJ5CiAgICAgICAgIC8vIHJlc2hhcGUgc2hvdWxkIHJlYWxseSBiZSBl
eHRyYWN0ZWQgaW50byBvbmUgZnVuY3Rpb247IGl0IGlzIG5vdAogICAgICAgICAvLyBpbW1lZGlh
dGVseSBvYnZpb3VzIHRoYXQgR3JhcGhpY3NDb250ZXh0M0Qgb2JqZWN0IHdpbGwgbm90CiAgICAg
ICAgIC8vIGZ1bmN0aW9uIHByb3Blcmx5IHVudGlsIGl0cyByZXNoYXBlIG1ldGhvZCBpcyBjYWxs
ZWQuCi0gICAgICAgIG5ld0NvbnRleHQtPnJlc2hhcGUoc3RkOjptYXgoMSwgbV9zaXplLndpZHRo
KSwgc3RkOjptYXgoMSwgbV9zaXplLmhlaWdodCkpOworICAgICAgICBsYXllclJlbmRlcmVyLT5j
b250ZXh0KCktPnJlc2hhcGUobWF4KDEsIG1fc2l6ZS53aWR0aCksIG1heCgxLCBtX3NpemUuaGVp
Z2h0KSk7CiAgICAgICAgIHNldFJvb3RQbGF0Zm9ybUxheWVyKG1fbGF5ZXJSZW5kZXJlci0+cm9v
dExheWVyKCkpOworCiAgICAgICAgIC8vIEZvcmNlcyBWaWV3SG9zdE1zZ19EaWRBY3RpdmF0ZUFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmcgdG8gYmUgc2VudCBzbwogICAgICAgICAvLyB0aGF0IHRoZSBi
cm93c2VyIHByb2Nlc3MgY2FuIHJlYWNxdWlyZSBzdXJmYWNlcy4KICAgICAgICAgbV9jbGllbnQt
PmRpZEFjdGl2YXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyh0cnVlKTsKQEAgLTI1NzcsMTAgKzI2
MDAsMTggQEAgdm9pZCBXZWJWaWV3SW1wbDo6cmVhbGxvY2F0ZVJlbmRlcmVyKCkKIH0KICNlbmRp
ZgogCi12b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVMYXllclJlbmRlcmVyVmlld3BvcnQoKQordm9p
ZCBXZWJWaWV3SW1wbDo6dXBkYXRlTGF5ZXJSZW5kZXJlclNldHRpbmdzKCkKIHsKICAgICBBU1NF
UlQobV9sYXllclJlbmRlcmVyKTsKKyAgICBtX2xheWVyUmVuZGVyZXItPnNldENvbXBvc2l0ZU9m
ZnNjcmVlbihzZXR0aW5ncygpLT5jb21wb3NpdGVUb1RleHR1cmVFbmFibGVkKCkpOwogCisgICAg
Q0NIZWFkc1VwRGlzcGxheSogaHVkID0gbV9sYXllclJlbmRlcmVyLT5oZWFkc1VwRGlzcGxheSgp
OworICAgIGh1ZC0+c2V0U2hvd0ZQU0NvdW50ZXIoc2V0dGluZ3MoKS0+c2hvd0ZQU0NvdW50ZXIo
KSk7CisgICAgaHVkLT5zZXRTaG93UGxhdGZvcm1MYXllclRyZWUoc2V0dGluZ3MoKS0+c2hvd1Bs
YXRmb3JtTGF5ZXJUcmVlKCkpOworfQorCit2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVMYXllclJl
bmRlcmVyVmlld3BvcnQoKQorewogICAgIGlmICghcGFnZSgpKQogICAgICAgICByZXR1cm47CiAK
QEAgLTI2MDgsNyArMjYzOSw3IEBAIFdlYkdyYXBoaWNzQ29udGV4dDNEKiBXZWJWaWV3SW1wbDo6
Z3JhcGhpY3NDb250ZXh0M0QoKQogICAgICAgICB9CiAgICAgICAgIG1fdGVtcG9yYXJ5T25zY3Jl
ZW5HcmFwaGljc0NvbnRleHQzRCA9IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoZ2V0Q29tcG9z
aXRvckNvbnRleHRBdHRyaWJ1dGVzKCksIG1fcGFnZS0+Y2hyb21lKCksIEdyYXBoaWNzQ29udGV4
dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7CiAgICAgICAgIGlmIChtX3RlbXBvcmFy
eU9uc2NyZWVuR3JhcGhpY3NDb250ZXh0M0QpCi0gICAgICAgICAgICBtX3RlbXBvcmFyeU9uc2Ny
ZWVuR3JhcGhpY3NDb250ZXh0M0QtPnJlc2hhcGUoc3RkOjptYXgoMSwgbV9zaXplLndpZHRoKSwg
c3RkOjptYXgoMSwgbV9zaXplLmhlaWdodCkpOworICAgICAgICAgICAgbV90ZW1wb3JhcnlPbnNj
cmVlbkdyYXBoaWNzQ29udGV4dDNELT5yZXNoYXBlKG1heCgxLCBtX3NpemUud2lkdGgpLCBtYXgo
MSwgbV9zaXplLmhlaWdodCkpOwogICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbDo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29udGV4dDNEKG1fdGVtcG9yYXJ5T25zY3JlZW5HcmFw
aGljc0NvbnRleHQzRC5nZXQoKSk7CiAgICAgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViVmlld0ltcGwuaAppbmRleCA2ZDg5N2RmODA5NzNkOGRjMTBkN2QyMDAxMTg5MTBm
ZWI1ZWU5ZGMzLi42NTUzYjU4YjBjMGRjMTFiMGUzMDA0MTIxODc1OGQ4M2E5ZGVkZjc0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKQEAgLTU2LDYgKzU2LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ2hyb21pdW1EYXRhT2JqZWN0OwogY2xhc3MgRG9j
dW1lbnRMb2FkZXI7CiBjbGFzcyBGcmFtZTsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogY2xh
c3MgSGlzdG9yeUl0ZW07CiBjbGFzcyBIaXRUZXN0UmVzdWx0OwogY2xhc3MgS2V5Ym9hcmRFdmVu
dDsKQEAgLTg3LDcgKzg4LDcgQEAgY2xhc3MgV2ViTW91c2VXaGVlbEV2ZW50OwogY2xhc3MgV2Vi
U2V0dGluZ3NJbXBsOwogY2xhc3MgV2ViVG91Y2hFdmVudDsKIAotY2xhc3MgV2ViVmlld0ltcGwg
OiBwdWJsaWMgV2ViVmlldywgcHVibGljIFJlZkNvdW50ZWQ8V2ViVmlld0ltcGw+IHsKK2NsYXNz
IFdlYlZpZXdJbXBsIDogcHVibGljIFdlYlZpZXcsIHB1YmxpYyBXZWJDb3JlOjpDQ0xheWVyVHJl
ZUhvc3RDbGllbnQsIHB1YmxpYyBSZWZDb3VudGVkPFdlYlZpZXdJbXBsPiB7CiBwdWJsaWM6CiAg
ICAgLy8gV2ViV2lkZ2V0IG1ldGhvZHM6CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCk7CkBAIC05
NSw3ICs5Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgd2lsbFN0YXJ0TGl2ZVJlc2l6
ZSgpOwogICAgIHZpcnR1YWwgdm9pZCByZXNpemUoY29uc3QgV2ViU2l6ZSYpOwogICAgIHZpcnR1
YWwgdm9pZCB3aWxsRW5kTGl2ZVJlc2l6ZSgpOwotICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlKCk7
CisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGUoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKICAgICB2
aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFdlYkNhbnZhcyos
IGNvbnN0IFdlYlJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgdGhlbWVDaGFuZ2VkKCk7CkBAIC0y
MDIsNiArMjAzLDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGluYWN0aXZlRm9yZWdyb3VuZENvbG9yKTsKICAgICB2aXJ0dWFsIHZvaWQg
cGVyZm9ybUN1c3RvbUNvbnRleHRNZW51QWN0aW9uKHVuc2lnbmVkIGFjdGlvbik7CiAKKyAgICAv
LyBDQ0xheWVyVHJlZUhvc3RDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUFuZExheW91
dChkb3VibGUgZnJhbWVCZWdpblRpbWUpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpOworICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVMYXllcnMoKTsKKwogICAgIC8vIFdlYlZpZXdJbXBsCiAKICAg
ICB2b2lkIHNldElnbm9yZUlucHV0RXZlbnRzKGJvb2wgbmV3VmFsdWUpOwpAQCAtMzU2LDYgKzM2
Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpOwogICAg
IHZvaWQgc2Nyb2xsUm9vdExheWVyUmVjdChjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxE
ZWx0YSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpOwogICAgIHZvaWQgaW52YWxp
ZGF0ZVJvb3RMYXllclJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQgZG9V
cGRhdGVBbmRDb21wb3NpdGUoKTsKICNlbmRpZgogCiAgICAgLy8gUmV0dXJucyB0aGUgb25zY3Jl
ZW4gM0QgY29udGV4dCB1c2VkIGJ5IHRoZSBjb21wb3NpdG9yLiBUaGlzIGlzCkBAIC00MjMsNiAr
NDMwLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRvQ29tcG9zaXRlKCk7CiAgICAgdm9pZCBkb1Bp
eGVsUmVhZGJhY2tUb0NhbnZhcyhXZWJDYW52YXMqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7
CiAgICAgdm9pZCByZWFsbG9jYXRlUmVuZGVyZXIoKTsKKyAgICB2b2lkIHVwZGF0ZUxheWVyUmVu
ZGVyZXJTZXR0aW5ncygpOwogICAgIHZvaWQgdXBkYXRlTGF5ZXJSZW5kZXJlclZpZXdwb3J0KCk7
CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xh
eWVyVHJlZUhvc3RUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXll
clRyZWVIb3N0VGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDg1NDgwNjU4NGZmMzNlYTEzNWM2ZDA5YjU1
MmY3MDllZDAxNjcxMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKQEAgLTAsMCArMSw1MzggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElO
RykKKworI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgorCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCisjaW5j
bHVkZSAiY2MvQ0NNYWluVGhyZWFkVGFzay5oIgorI2luY2x1ZGUgImNjL0NDVGhyZWFkVGFzay5o
IgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8d2Via2l0L3N1cHBvcnQvd2Vi
a2l0X3N1cHBvcnQuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNlIHsKKworY2xh
c3MgTW9ja0xheWVyVHJlZUhvc3Q7CitjbGFzcyBNb2NrTGF5ZXJUcmVlSG9zdENsaWVudDsKK2Ns
YXNzIE1vY2tMYXllclRyZWVIb3N0SW1wbDsKKworLy8gVGhlIENDTGF5ZXJUcmVlSG9zdFRlc3Qg
cnVucyB3aXRoIHRoZSBtYWluIGxvb3AgcnVubmluZy4gSXQgaW5zdGFudGlhdGVzIGEgc2luZ2xl
IE1vY2tMYXllclRyZWVIb3N0IGFuZCBhc3NvY2lhdGVkCisvLyBNb2NrTGF5ZXJUcmVlSG9zdElt
cGwvTW9ja0xheWVyVHJlZUhvc3RDbGllbnQuCisvLworLy8gYmVnaW5UZXN0KCkgaXMgY2FsbGVk
IG9uY2UgdGhlIG1haW4gbWVzc2FnZSBsb29wIGlzIHJ1bm5pbmcgYW5kIHRoZSBsYXllciB0cmVl
IGhvc3QgaXMgaW5pdGlhbGl6ZWQuCisvLworLy8gS2V5IHN0YWdlcyBvZiB0aGUgZHJhd2luZyBs
b29wLCBlLmcuIGRyYXdpbmcgb3IgY29tbWl0aW5nLCByZWRpcmVjdCB0byBDQ0xheWVyVHJlZUhv
c3RUZXN0IG1ldGhvZHMgb2Ygc2ltaWxhciBuYW1lcy4KKy8vIFRvIHRyYWNrIHRoZSBjb21taXQg
cHJvY2Vzcywgb3ZlcnJpZGUgdGhlc2UgZnVuY3Rpb25zLgorLy8KKy8vIFRoZSB0ZXN0IGNvbnRp
bnVlcyB1bnRpbCBzb21lb25lIGNhbGxzIGVuZFRlc3QuIGVuZFRlc3QgY2FuIGJlIGNhbGxlZCBv
biBhbnkgdGhyZWFkLCBidXQgYmUgYXdhcmUgdGhhdAorLy8gZW5kaW5nIHRoZSB0ZXN0IGlzIGFu
IGFzeW5jaHJvbm91cyBwcm9jZXNzLgorY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdCA6IHB1Ymxp
YyB0ZXN0aW5nOjpUZXN0IHsKK3B1YmxpYzoKKyAgICBDQ0xheWVyVHJlZUhvc3RUZXN0KCkKKyAg
ICAgICAgOiBtX2JlZ2lubmluZyhmYWxzZSkKKyAgICAgICAgLCBtX2VuZFdoZW5CZWdpblJldHVy
bnMoZmFsc2UpCisgICAgICAgICwgbV9ydW5uaW5nKGZhbHNlKQorICAgICAgICAsIG1fdGltZWRP
dXQoZmFsc2UpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGFmdGVyVGVzdCgpID0gMDsKKworICAg
IHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVB
bmRMYXlvdXQoTW9ja0xheWVyVHJlZUhvc3RDbGllbnQqIGxheWVyVHJlZUhvc3QsIGRvdWJsZSBm
cmFtZUJlZ2luVGltZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0T25DQ1RocmVh
ZChNb2NrTGF5ZXJUcmVlSG9zdEltcGwqIGxheWVyVHJlZUhvc3RJbXBsKSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgYmVnaW5Db21taXRPbk1haW5UaHJlYWQoTW9ja0xheWVyVHJlZUhvc3QqIGxheWVy
VHJlZUhvc3QpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjb21taXRPbkNDVGhyZWFkKE1vY2tMYXll
clRyZWVIb3N0KiBsYXllclRyZWVIb3N0LCBNb2NrTGF5ZXJUcmVlSG9zdEltcGwqIGxheWVyVHJl
ZUhvc3RJbXBsKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q29tcGxldGVPbkNDVGhyZWFk
KE1vY2tMYXllclRyZWVIb3N0SW1wbCogbGF5ZXJUcmVlSG9zdEltcGwpIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBjb21taXRDb21wbGV0ZU9uTWFpblRocmVhZChNb2NrTGF5ZXJUcmVlSG9zdCogbGF5
ZXJUcmVlSG9zdCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNBbmRQcmVzZW50T25D
Q1RocmVhZChNb2NrTGF5ZXJUcmVlSG9zdEltcGwqIGxheWVyVHJlZUhvc3RJbXBsKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlTGF5ZXJzKE1vY2tMYXllclRyZWVIb3N0KiBsYXllclRyZWVI
b3N0KSB7IH0KKworICAgIHZvaWQgZW5kVGVzdCgpOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBk
b0JlZ2luVGVzdCgpOworCisgICAgc3RhdGljIHZvaWQgb25CZWdpblRlc3Qodm9pZCogc2VsZikK
KyAgICB7CisgICAgICAgIHN0YXRpY19jYXN0PENDTGF5ZXJUcmVlSG9zdFRlc3QqPihzZWxmKS0+
ZG9CZWdpblRlc3QoKTsKKyAgICB9CisKKyAgICB2b2lkIGRvRW5kVGVzdCgpCisgICAgeworICAg
IH0KKworICAgIHN0YXRpYyB2b2lkIG9uRW5kVGVzdCh2b2lkKiBzZWxmKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0VGVzdCog
dGVzdCA9IHN0YXRpY19jYXN0PENDTGF5ZXJUcmVlSG9zdFRlc3QqPihzZWxmKTsKKyAgICAgICAg
dGVzdC0+bV9sYXllclRyZWVIb3N0LmNsZWFyKCk7CisgICAgICAgIHRlc3QtPm1fY2xpZW50LmNs
ZWFyKCk7CisgICAgICAgIHdlYmtpdF9zdXBwb3J0OjpRdWl0TWVzc2FnZUxvb3AoKTsKKyAgICB9
CisKKyAgICB2b2lkIHJ1blRlc3QoKQorICAgIHsKKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlBv
c3REZWxheWVkVGFzayhDQ0xheWVyVHJlZUhvc3RUZXN0OjpvbkJlZ2luVGVzdCwgc3RhdGljX2Nh
c3Q8dm9pZCo+KHRoaXMpLCAwKTsKKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlBvc3REZWxheWVk
VGFzayhDQ0xheWVyVHJlZUhvc3RUZXN0Ojp0ZXN0VGltZW91dCwgc3RhdGljX2Nhc3Q8dm9pZCo+
KHRoaXMpLCA1MDAwKTsKKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlJ1bk1lc3NhZ2VMb29wKCk7
CisgICAgICAgIG1fcnVubmluZyA9IGZhbHNlOworICAgICAgICBib29sIHRpbWVkT3V0ID0gbV90
aW1lZE91dDsgLy8gU2F2ZSB3aGV0aGVyIHdlJ3JlIHRpbWVkIG91dCBpbiBjYXNlIFJ1bkFsbFBl
bmRpbmdNZXNzYWdlcyBoYXMgdGhlIHRpbWVvdXQuCisgICAgICAgIHdlYmtpdF9zdXBwb3J0OjpS
dW5BbGxQZW5kaW5nTWVzc2FnZXMoKTsKKyAgICAgICAgaWYgKHRpbWVkT3V0KSB7CisgICAgICAg
ICAgICBwcmludGYoIlRlc3QgdGltZWQgb3V0Iik7CisgICAgICAgICAgICBGQUlMKCkgPDwgIlRl
c3QgdGltZWQgb3V0IjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBh
ZnRlclRlc3QoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCB0ZXN0VGltZW91dCh2b2lkKiBz
ZWxmKQorICAgIHsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0VGVzdCogdGVzdCA9IHN0YXRpY19j
YXN0PENDTGF5ZXJUcmVlSG9zdFRlc3QqPihzZWxmKTsKKyAgICAgICAgaWYgKCF0ZXN0LT5tX3J1
bm5pbmcpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRlc3QtPm1fdGltZWRPdXQgPSB0
cnVlOworICAgICAgICB0ZXN0LT5lbmRUZXN0KCk7CisgICAgfQorCisgICAgTXV0ZXggbV90cmFj
ZXNMb2NrOworICAgIFZlY3RvcjxzdGQ6OnN0cmluZz4gbV90cmFjZXM7CisKKyAgICBPd25QdHI8
TW9ja0xheWVyVHJlZUhvc3RDbGllbnQ+IG1fY2xpZW50OworICAgIFJlZlB0cjxNb2NrTGF5ZXJU
cmVlSG9zdD4gbV9sYXllclRyZWVIb3N0OworCitwcml2YXRlOgorICAgIGJvb2wgbV9iZWdpbm5p
bmc7CisgICAgYm9vbCBtX2VuZFdoZW5CZWdpblJldHVybnM7CisgICAgYm9vbCBtX3J1bm5pbmc7
CisgICAgYm9vbCBtX3RpbWVkT3V0OworfTsKKworY2xhc3MgTW9ja0xheWVyVHJlZUhvc3RDbGll
bnQgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0Q2xpZW50IHsKK3B1YmxpYzoKKyAgICBNb2NrTGF5
ZXJUcmVlSG9zdENsaWVudChDQ0xheWVyVHJlZUhvc3RUZXN0KiB0ZXN0KSA6IG1fdGVzdCh0ZXN0
KSB7IH0KKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRl
TGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWY8
R3JhcGhpY3NDb250ZXh0M0Q+KDApOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhbmltYXRl
QW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKKyAgICB7CisgICAgICAgIG1fdGVzdC0+
YW5pbWF0ZUFuZExheW91dCh0aGlzLCBmcmFtZUJlZ2luVGltZSk7CisgICAgfQorCisgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZUxheWVycygpCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICBD
Q0xheWVyVHJlZUhvc3RUZXN0KiBtX3Rlc3Q7Cit9OworCitjbGFzcyBNb2NrTGF5ZXJUcmVlSG9z
dENvbW1pdHRlciA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIgeworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPE1vY2tMYXllclRyZWVIb3N0Q29tbWl0dGVyPiBjcmVhdGUo
Q0NMYXllclRyZWVIb3N0VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0
cihuZXcgTW9ja0xheWVyVHJlZUhvc3RDb21taXR0ZXIodGVzdCkpOworICAgIH0KKworICAgIHZp
cnR1YWwgdm9pZCBjb21taXQoQ0NMYXllclRyZWVIb3N0KiBob3N0LCBDQ0xheWVyVHJlZUhvc3RJ
bXBsKiBob3N0SW1wbCkKKyAgICB7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcjo6
Y29tbWl0KGhvc3QsIGhvc3RJbXBsKTsKKyAgICAgICAgbV90ZXN0LT5jb21taXRPbkNDVGhyZWFk
KHJlaW50ZXJwcmV0X2Nhc3Q8TW9ja0xheWVyVHJlZUhvc3QqPihob3N0KSwgcmVpbnRlcnByZXRf
Y2FzdDxNb2NrTGF5ZXJUcmVlSG9zdEltcGwqPihob3N0SW1wbCkpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBNb2NrTGF5ZXJUcmVlSG9zdENvbW1pdHRlcihDQ0xheWVyVHJlZUhvc3RUZXN0KiB0
ZXN0KSA6IG1fdGVzdCh0ZXN0KSB7IH0KKyAgICBDQ0xheWVyVHJlZUhvc3RUZXN0KiBtX3Rlc3Q7
Cit9OworCitjbGFzcyBNb2NrTGF5ZXJUcmVlSG9zdEltcGwgOiBwdWJsaWMgQ0NMYXllclRyZWVI
b3N0SW1wbCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8TW9ja0xheWVyVHJlZUhv
c3RJbXBsPiBjcmVhdGUoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogY2xpZW50LCBDQ0xheWVy
VHJlZUhvc3RUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBN
b2NrTGF5ZXJUcmVlSG9zdEltcGwoY2xpZW50LCB0ZXN0KSk7CisgICAgfQorCisgICAgdmlydHVh
bCB2b2lkIGJlZ2luQ29tbWl0KCkKKyAgICB7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6
OmJlZ2luQ29tbWl0KCk7CisgICAgICAgIG1fdGVzdC0+YmVnaW5Db21taXRPbkNDVGhyZWFkKHRo
aXMpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBjb21taXRDb21wbGV0ZSgpCisgICAgewor
ICAgICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb21taXRDb21wbGV0ZSgpOworICAgICAgICBt
X3Rlc3QtPmNvbW1pdENvbXBsZXRlT25DQ1RocmVhZCh0aGlzKTsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgZHJhd0xheWVyc0FuZFByZXNlbnQoKQorICAgIHsKKyAgICAgICAgbV90ZXN0LT5k
cmF3TGF5ZXJzQW5kUHJlc2VudE9uQ0NUaHJlYWQodGhpcyk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIE1vY2tMYXllclRyZWVIb3N0SW1wbChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGll
bnQsIENDTGF5ZXJUcmVlSG9zdFRlc3QqIHRlc3QpCisgICAgICAgICAgICA6IENDTGF5ZXJUcmVl
SG9zdEltcGwoY2xpZW50KQorICAgICAgICAgICAgLCBtX3Rlc3QodGVzdCkKKyAgICB7CisgICAg
fQorCisgICAgQ0NMYXllclRyZWVIb3N0VGVzdCogbV90ZXN0OworfTsKKworY2xhc3MgTW9ja0xh
eWVyVHJlZUhvc3RJbXBsUHJveHkgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxNb2NrTGF5ZXJUcmVlSG9zdEltcGxQcm94
eT4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdCogaG9zdCwgQ0NMYXllclRyZWVIb3N0VGVzdCogdGVz
dCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgTW9ja0xheWVyVHJlZUhvc3RJ
bXBsUHJveHkoaG9zdCwgdGVzdCkpOworICAgIH0KKworICAgIFBhc3NPd25QdHI8Q0NMYXllclRy
ZWVIb3N0SW1wbD4gY3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIE1vY2tMYXllclRyZWVIb3N0SW1wbDo6Y3JlYXRlKHRoaXMsIG1fdGVzdCk7CisgICAgfQor
Citwcml2YXRlOgorICAgIE1vY2tMYXllclRyZWVIb3N0SW1wbFByb3h5KENDTGF5ZXJUcmVlSG9z
dCogaG9zdCwgQ0NMYXllclRyZWVIb3N0VGVzdCogdGVzdCkKKyAgICAgICAgOiBDQ0xheWVyVHJl
ZUhvc3RJbXBsUHJveHkoaG9zdCkKKyAgICAgICAgLCBtX3Rlc3QodGVzdCkgeyB9CisKKyAgICBD
Q0xheWVyVHJlZUhvc3RUZXN0KiBtX3Rlc3Q7Cit9OworCitjbGFzcyBNb2NrTGF5ZXJUcmVlSG9z
dCA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3QgeworcHVibGljOgorICAgIE1vY2tMYXllclRyZWVI
b3N0KENDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xpZW50LCBDQ0xheWVyVHJlZUhvc3RUZXN0KiB0
ZXN0KQorICAgICAgICA6IENDTGF5ZXJUcmVlSG9zdChjbGllbnQpCisgICAgICAgICwgbV90ZXN0
KHRlc3QpIHsgfQorCisgICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eT4gY3JlYXRlTGF5ZXJUcmVlSG9zdEltcGxQcm94eSgpCisgICAgeworICAgICAgICBPd25Q
dHI8Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5PiBwcm94eSA9IE1vY2tMYXllclRyZWVIb3N0SW1w
bFByb3h5OjpjcmVhdGUodGhpcywgbV90ZXN0KTsKKyAgICAgICAgcHJveHktPnN0YXJ0KCk7Cisg
ICAgICAgIHJldHVybiBwcm94eS5yZWxlYXNlKCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZUxheWVycygpCisgICAgeworICAgICAgICBtX3Rlc3QtPnVwZGF0ZUxheWVycyh0aGlz
KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0Q29tbWl0
dGVyPiBjcmVhdGVMYXllclRyZWVIb3N0Q29tbWl0dGVyKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBNb2NrTGF5ZXJUcmVlSG9zdENvbW1pdHRlcjo6Y3JlYXRlKG1fdGVzdCk7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0KCkKKyAgICB7CisgICAgICAgIENDTGF5ZXJUcmVl
SG9zdDo6YmVnaW5Db21taXQoKTsKKyAgICAgICAgbV90ZXN0LT5iZWdpbkNvbW1pdE9uTWFpblRo
cmVhZCh0aGlzKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q29tcGxldGUoKQor
ICAgIHsKKyAgICAgICAgbV90ZXN0LT5jb21taXRDb21wbGV0ZU9uTWFpblRocmVhZCh0aGlzKTsK
KyAgICAgICAgQ0NMYXllclRyZWVIb3N0Ojpjb21taXRDb21wbGV0ZSgpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBDQ0xheWVyVHJlZUhvc3RUZXN0KiBtX3Rlc3Q7Cit9OworCit2b2lkIENDTGF5
ZXJUcmVlSG9zdFRlc3Q6OmRvQmVnaW5UZXN0KCkKK3sKKyAgICBBU1NFUlQoIW1fcnVubmluZyk7
CisgICAgbV9ydW5uaW5nID0gdHJ1ZTsKKyAgICBtX2NsaWVudCA9IGFkb3B0UHRyKG5ldyBNb2Nr
TGF5ZXJUcmVlSG9zdENsaWVudCh0aGlzKSk7CisgICAgbV9sYXllclRyZWVIb3N0ID0gYWRvcHRS
ZWYobmV3IE1vY2tMYXllclRyZWVIb3N0KG1fY2xpZW50LmdldCgpLCB0aGlzKSk7CisgICAgbV9s
YXllclRyZWVIb3N0LT5pbml0KCk7CisgICAgbV9iZWdpbm5pbmcgPSB0cnVlOworICAgIGJlZ2lu
VGVzdCgpOworICAgIG1fYmVnaW5uaW5nID0gZmFsc2U7CisgICAgaWYgKG1fZW5kV2hlbkJlZ2lu
UmV0dXJucykKKyAgICAgICAgb25FbmRUZXN0KHN0YXRpY19jYXN0PHZvaWQqPih0aGlzKSk7Cit9
CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0VGVzdDo6ZW5kVGVzdCgpCit7CisgICAgLy8gSWYgd2Ug
YXJlIGNhbGxlZCBmcm9tIHRoZSBDQ1RocmVhZCwgcmUtY2FsbCBlbmRUZXN0IG9uIHRoZSBtYWlu
IHRocmVhZC4KKyAgICBpZiAoIWlzTWFpblRocmVhZCgpKQorICAgICAgICBDQ01haW5UaHJlYWQ6
OnBvc3RUYXNrKGNyZWF0ZU1haW5UaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RUZXN0
OjplbmRUZXN0KSk7CisgICAgZWxzZSB7CisgICAgICAgIC8vIEZvciB0aGUgY2FzZSB3aGVyZSB3
ZSBlbmRUZXN0IGR1cmluZyBiZWdpblRlc3QoKSwgc2V0IGEgZmxhZyB0byBpbmRpY2F0ZSB0aGF0
CisgICAgICAgIC8vIHRoZSB0ZXN0IHNob3VsZCBlbmQgdGhlIHNlY29uZCBiZWdpblRlc3QgcmVn
YWlucyBjb250cm9sLgorICAgICAgICBpZiAobV9iZWdpbm5pbmcpCisgICAgICAgICAgICBtX2Vu
ZFdoZW5CZWdpblJldHVybnMgPSB0cnVlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvbkVu
ZFRlc3Qoc3RhdGljX2Nhc3Q8dm9pZCo+KHRoaXMpKTsKKyAgICB9Cit9CisKKy8vIFNob3J0bGl2
ZWQgbGF5ZXJUcmVlSG9zdHMgc2hvdWxkbid0IGRpZS4KK2NsYXNzIENDTGF5ZXJUcmVlSG9zdFRl
c3RTaG9ydGxpdmVkMSA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0IHsKK3B1YmxpYzoKKyAg
ICBDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDEoKSB7IH0KKworICAgIHZpcnR1YWwgdm9p
ZCBiZWdpblRlc3QoKQorICAgIHsKKyAgICAgICAgZW5kVGVzdCgpOworICAgIH0KKworICAgIHZp
cnR1YWwgdm9pZCBhZnRlclRlc3QoKQorICAgIHsKKyAgICB9Cit9OworVEVTVF9GKENDTGF5ZXJU
cmVlSG9zdFRlc3RTaG9ydGxpdmVkMSwgcnVuKQoreworICAgIHJ1blRlc3QoKTsKK30KKworLy8g
U2hvcnRsaXZlZCBsYXllclRyZWVIb3N0cyBzaG91bGRuJ3QgZGllIHdpdGggYSBjb21taXQgaW4g
ZmxpZ2h0LgorY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQyIDogcHVibGljIEND
TGF5ZXJUcmVlSG9zdFRlc3QgeworcHVibGljOgorICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RTaG9y
dGxpdmVkMigpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGJlZ2luVGVzdCgpCisgICAgeworICAg
ICAgICBtX2xheWVyVHJlZUhvc3QtPnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgICAg
IGVuZFRlc3QoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkKKyAgICB7
CisgICAgfQorfTsKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDIsIHJ1bikK
K3sKKyAgICBydW5UZXN0KCk7Cit9CisKKy8vIFNob3J0bGl2ZWQgbGF5ZXJUcmVlSG9zdHMgc2hv
dWxkbid0IGRpZSB3aXRoIGEgcmVkcmF3IGluIGZsaWdodC4KK2NsYXNzIENDTGF5ZXJUcmVlSG9z
dFRlc3RTaG9ydGxpdmVkMyA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0IHsKK3B1YmxpYzoK
KyAgICBDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDMoKSB7IH0KKworICAgIHZpcnR1YWwg
dm9pZCBiZWdpblRlc3QoKQorICAgIHsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXROZWVk
c1JlZHJhdygpOworICAgICAgICBlbmRUZXN0KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lk
IGFmdGVyVGVzdCgpCisgICAgeworICAgIH0KK307CitURVNUX0YoQ0NMYXllclRyZWVIb3N0VGVz
dFNob3J0bGl2ZWQzLCBydW4pCit7CisgICAgcnVuVGVzdCgpOworfQorCisvLyBDb25zdGFudGx5
IHJlZHJhd2luZyBsYXllclRyZWVIb3N0cyBzaG91bGRuJ3QgZGllIHdoZW4gdGhleSBjb21taXQK
K2NsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3RDb21taXRpbmdXaXRoQ29udGludW91c1JlZHJhdyA6
IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0IHsKK3B1YmxpYzoKKyAgICBDQ0xheWVyVHJlZUhv
c3RUZXN0Q29tbWl0aW5nV2l0aENvbnRpbnVvdXNSZWRyYXcoKQorICAgICAgICA6IG1fbnVtQ29t
cGxldGVDb21taXRzKDApCisgICAgICAgICwgbV9udW1EcmF3cygwKQorICAgIHsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkKKyAgICB7CisgICAgICAgIG1fbGF5ZXJUcmVl
SG9zdC0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICAgICAgZW5kVGVzdCgpOworICAg
IH0KKworICAgIHZpcnR1YWwgdm9pZCBjb21taXRDb21wbGV0ZU9uQ0NUaHJlYWQoTW9ja0xheWVy
VHJlZUhvc3RJbXBsKiBsYXllclRyZWVIb3N0SW1wbCkKKyAgICB7CisgICAgICAgIG1fbnVtQ29t
cGxldGVDb21taXRzKys7CisgICAgICAgIGlmIChtX251bUNvbXBsZXRlQ29tbWl0cyA9PSAyKQor
ICAgICAgICAgICAgZW5kVGVzdCgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGF5
ZXJzQW5kUHJlc2VudE9uQ0NUaHJlYWQoTW9ja0xheWVyVHJlZUhvc3RJbXBsKiBsYXllclRyZWVI
b3N0SW1wbCkKKyAgICB7CisgICAgICAgIGlmIChtX251bURyYXdzID09IDEpCisgICAgICAgICAg
ICBsYXllclRyZWVIb3N0SW1wbC0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICAgICAg
bV9udW1EcmF3cysrOworICAgICAgICBsYXllclRyZWVIb3N0SW1wbC0+c2V0TmVlZHNSZWRyYXco
KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkKKyAgICB7CisgICAgfQor
Citwcml2YXRlOgorICAgIGludCBtX251bUNvbXBsZXRlQ29tbWl0czsKKyAgICBpbnQgbV9udW1E
cmF3czsKK307CitURVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdENvbW1pdGluZ1dpdGhDb250aW51
b3VzUmVkcmF3LCBydW4pCit7CisgICAgcnVuVGVzdCgpOworfQorCisvLyBUd28gc2V0TmVlZHND
b21taXRzIGluIGEgcm93IHNob3VsZCBsZWFkIHRvIGF0IGxlYXN0IDEgY29tbWl0IGFuZCBhdCBs
ZWFzdCAxCisvLyBkcmF3IHdpdGggZnJhbWUgMC4KK2NsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3RT
ZXROZWVkc0NvbW1pdDEgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdCB7CitwdWJsaWM6Cisg
ICAgQ0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzQ29tbWl0MSgpCisgICAgICAgIDogbV9udW1D
b21taXRzKDApCisgICAgICAgICwgbV9udW1EcmF3cygwKQorICAgIHsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkKKyAgICB7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+
c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRO
ZWVkc0NvbW1pdEFuZFJlZHJhdygpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGF5
ZXJzQW5kUHJlc2VudE9uQ0NUaHJlYWQoTW9ja0xheWVyVHJlZUhvc3RJbXBsKiBsYXllclRyZWVI
b3N0SW1wbCkKKyAgICB7CisgICAgICAgIG1fbnVtRHJhd3MrKzsKKyAgICAgICAgaWYgKCFsYXll
clRyZWVIb3N0SW1wbC0+c291cmNlRnJhbWVOdW1iZXIoKSkKKyAgICAgICAgICAgIGVuZFRlc3Qo
KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0T25DQ1RocmVhZChNb2NrTGF5ZXJU
cmVlSG9zdCogbGF5ZXJUcmVlSG9zdCwgTW9ja0xheWVyVHJlZUhvc3RJbXBsKiBpbXBsKQorICAg
IHsKKyAgICAgICAgbV9udW1Db21taXRzKys7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFm
dGVyVGVzdCgpCisgICAgeworICAgICAgICBFWFBFQ1RfR0UoMSwgbV9udW1Db21taXRzKTsKKyAg
ICAgICAgRVhQRUNUX0dFKDEsIG1fbnVtRHJhd3MpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBp
bnQgbV9udW1Db21taXRzOworICAgIGludCBtX251bURyYXdzOworfTsKK1RFU1RfRihDQ0xheWVy
VHJlZUhvc3RUZXN0U2V0TmVlZHNDb21taXQxLCBydW4pCit7CisgICAgcnVuVGVzdCgpOworfQor
CisvLyBBIHNldE5lZWRzQ29tbWl0IHNob3VsZCBsZWFkIHRvIDEgY29tbWl0LiBJc3N1aW5nIGEg
c2Vjb25kIGNvbW1pdCBhZnRlciB0aGF0CisvLyBmaXJzdCBjb21taXR0ZWQgZnJhbWUgZHJhd3Mg
c2hvdWxkIGxlYWQgdG8gYW5vdGhlciBjb21taXQuCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0
U2V0TmVlZHNDb21taXQyIDogcHVibGljIENDTGF5ZXJUcmVlSG9zdFRlc3QgeworcHVibGljOgor
ICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc0NvbW1pdDIoKQorICAgICAgICA6IG1fbnVt
Q29tbWl0cygwKQorICAgICAgICAsIG1fbnVtRHJhd3MoMCkKKyAgICB7CisgICAgfQorCisgICAg
dmlydHVhbCB2b2lkIGJlZ2luVGVzdCgpCisgICAgeworICAgICAgICBtX2xheWVyVHJlZUhvc3Qt
PnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRy
YXdMYXllcnNBbmRQcmVzZW50T25DQ1RocmVhZChNb2NrTGF5ZXJUcmVlSG9zdEltcGwqIGxheWVy
VHJlZUhvc3RJbXBsKQorICAgIHsKKyAgICAgICAgaWYgKCFsYXllclRyZWVIb3N0SW1wbC0+c291
cmNlRnJhbWVOdW1iZXIoKSkKKyAgICAgICAgICAgIGxheWVyVHJlZUhvc3RJbXBsLT5zZXROZWVk
c0NvbW1pdEFuZFJlZHJhdygpOworICAgICAgICBlbHNlIGlmIChsYXllclRyZWVIb3N0SW1wbC0+
c291cmNlRnJhbWVOdW1iZXIoKSA9PSAxKQorICAgICAgICAgICAgZW5kVGVzdCgpOworICAgIH0K
KworICAgIHZpcnR1YWwgdm9pZCBjb21taXRPbkNDVGhyZWFkKE1vY2tMYXllclRyZWVIb3N0KiBs
YXllclRyZWVIb3N0LCBNb2NrTGF5ZXJUcmVlSG9zdEltcGwqIGltcGwpCisgICAgeworICAgICAg
ICBtX251bUNvbW1pdHMrKzsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkK
KyAgICB7CisgICAgICAgIEVYUEVDVF9FUSgyLCBtX251bUNvbW1pdHMpOworICAgICAgICBFWFBF
Q1RfR0UoMiwgbV9udW1EcmF3cyk7CisgICAgfQorCitwcml2YXRlOgorICAgIGludCBtX251bUNv
bW1pdHM7CisgICAgaW50IG1fbnVtRHJhd3M7Cit9OworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRl
c3RTZXROZWVkc0NvbW1pdDIsIHJ1bikKK3sKKyAgICBydW5UZXN0KCk7Cit9CisKKy8vIDEgc2V0
TmVlZHNSZWRyYXcgYWZ0ZXIgdGhlIGZpcnN0IGNvbW1pdCBoYXMgY29tcGxldGVkIHNob3VsZCBs
ZWFkIHRvIDEKKy8vIGFkZGl0aW9uYWwgZHJhdy4KK2NsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3RT
ZXROZWVkc1JlZHJhdyA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0IHsKK3B1YmxpYzoKKyAg
ICBDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNSZWRyYXcoKQorICAgICAgICA6IG1fbnVtQ29t
bWl0cygwKQorICAgICAgICAsIG1fbnVtRHJhd3MoMCkKKyAgICB7CisgICAgfQorCisgICAgdmly
dHVhbCB2b2lkIGJlZ2luVGVzdCgpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBk
cmF3TGF5ZXJzQW5kUHJlc2VudE9uQ0NUaHJlYWQoTW9ja0xheWVyVHJlZUhvc3RJbXBsKiBpbXBs
KQorICAgIHsKKyAgICAgICAgRVhQRUNUX0VRKDAsIGltcGwtPnNvdXJjZUZyYW1lTnVtYmVyKCkp
OworICAgICAgICBpZiAoIW1fbnVtRHJhd3MpCisgICAgICAgICAgICBpbXBsLT5zZXROZWVkc1Jl
ZHJhdygpOyAvLyByZWRyYXcgYWdhaW4gdG8gdmVyaWZ5IHRoYXQgdGhlIHNlY29uZCByZWRyYXcg
ZG9lc250IGNvbW1pdC4KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW5kVGVzdCgpOworICAg
ICAgICBtX251bURyYXdzKys7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGNvbW1pdE9uQ0NU
aHJlYWQoTW9ja0xheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QsIE1vY2tMYXllclRyZWVIb3N0
SW1wbCogaW1wbCkKKyAgICB7CisgICAgICAgIG1fbnVtQ29tbWl0cysrOworICAgIH0KKworICAg
IHZpcnR1YWwgdm9pZCBhZnRlclRlc3QoKQorICAgIHsKKyAgICAgICAgRVhQRUNUX0dFKDIsIG1f
bnVtRHJhd3MpOworICAgICAgICBFWFBFQ1RfRVEoMSwgbV9udW1Db21taXRzKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgaW50IG1fbnVtQ29tbWl0czsKKyAgICBpbnQgbV9udW1EcmF3czsKK307
CitURVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzUmVkcmF3LCBydW4pCit7CisgICAg
cnVuVGVzdCgpOworfQorCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYgLy8gVVNFKFRIUkVBREVE
X0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q1RocmVhZFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RocmVhZFRl
c3QuY3BwCmluZGV4IDA5YzQxOTNkYTkyMmI1Yzc5NWJmNjgxNmEyYmM1NzA0MWFkMWVkOGUuLmUw
MjE4Y2VjNTU5YTE0NWMyNzVmOTA1ZDg1MzNlOTUxZjBlNjI1M2UgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaHJlYWRUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDVGhyZWFkVGVzdC5jcHAKQEAgLTUzLDcgKzUzLDcgQEAgVEVT
VChDQ1RocmVhZFRlc3QsIHBpbmdQb25nVXNpbmdDb25kaXRpb24pCiAgICAgT3duUHRyPENDVGhy
ZWFkPiB0aHJlYWQgPSBDQ1RocmVhZDo6Y3JlYXRlKCk7CiAgICAgUGluZ1BvbmdVc2luZ0NvbmRp
dGlvbiB0YXJnZXQ7CiAgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKLSAgICB0aHJl
YWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzaygmdGFyZ2V0LCAmUGluZ1BvbmdVc2luZ0Nv
bmRpdGlvbjo6cGluZywgCisgICAgdGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2so
JnRhcmdldCwgJlBpbmdQb25nVXNpbmdDb25kaXRpb246OnBpbmcsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29tcGxldGlv
bikpKTsKICAgICBjb21wbGV0aW9uLndhaXQoKTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdl
TG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGRiYTI1ZjQ0ZGVjOGE3OGI3ODQwYTFhMzkzZjA5
Y2Q3ZTkxNzFjYjUuLmY0ZjhiMDg5ZGM1Y2I4ZjAxNjE1MTUxNzNiNmRkYjliYzIzYzBkNzYgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxMyBAQAorMjAxMS0wNS0xNyAgTmF0IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBJ
bXBsZW1lbnQgQ0NMYXllclRyZWVIb3N0IGFuZCBDQ0xheWVyVHJlZUhvc3RJbXBsIHBvcnRpb25z
IG9mIHRocmVhZGVkIGNvbXBvc2l0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTU4NDA4CisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9XZWJWaWV3SG9zdC5jcHA6CisgICAgICAgIChXZWJWaWV3SG9zdDo6cGFpbnRJbnZhbGlkYXRl
ZFJlZ2lvbik6CisKIDIwMTEtMDYtMjEgIERtaXRyeSBMb21vdiAgPGRzbG9tb3ZAZ29vZ2xlLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVuLgpkaWZmIC0tZ2l0IGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCmluZGV4IDdlZjQ3YjM2OTU4NDM4YmIwYjA4
YTg4NzE3ZDdmNjQ1OTg3YzlmZDIuLjMzZDU4OTMyZTE0Y2UxMTFjMjg1NjJhMzRlZTZiNWUzNjUy
MTQwZTAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdI
b3N0LmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5j
cHAKQEAgLTE0ODYsNyArMTQ4Niw3IEBAIHZvaWQgV2ViVmlld0hvc3Q6OnBhaW50UmVjdChjb25z
dCBXZWJSZWN0JiByZWN0KQogdm9pZCBXZWJWaWV3SG9zdDo6cGFpbnRJbnZhbGlkYXRlZFJlZ2lv
bigpCiB7CiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQotICAgIHdlYldpZGdl
dCgpLT5hbmltYXRlKCk7CisgICAgd2ViV2lkZ2V0KCktPmFuaW1hdGUoMC4wKTsKICNlbmRpZgog
ICAgIHdlYldpZGdldCgpLT5sYXlvdXQoKTsKICAgICBXZWJTaXplIHdpZGdldFNpemUgPSB3ZWJX
aWRnZXQoKS0+c2l6ZSgpOwo=
</data>
<flag name="review"
          id="92668"
          type_id="1"
          status="+"
          setter="jamesr"
    />
          </attachment>
      

    </bug>

</bugzilla>