<?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>67417</bug_id>
          
          <creation_ts>2011-09-01 10:17:29 -0700</creation_ts>
          <short_desc>[chromium] Make CCThreadProxy draw</short_desc>
          <delta_ts>2011-09-27 06:42:33 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>66807</dependson>
    
    <dependson>67440</dependson>
          <blocked>67499</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>jamesr</cc>
    
    <cc>levin</cc>
    
    <cc>nduca</cc>
    
    <cc>piman</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>460561</commentid>
    <comment_count>0</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-09-01 10:17:29 -0700</bug_when>
    <thetext>The CCThreadProxy is mostly implemented, but needs to be updated to the new Update/Commit flow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461077</commentid>
    <comment_count>1</comment_count>
      <attachid>106102</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-09-02 00:36:44 -0700</bug_when>
    <thetext>Created attachment 106102
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461081</commentid>
    <comment_count>2</comment_count>
      <attachid>106102</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-02 00:43:06 -0700</bug_when>
    <thetext>Comment on attachment 106102
Patch

Attachment 106102 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9580560</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461093</commentid>
    <comment_count>3</comment_count>
      <attachid>106102</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-02 01:53:16 -0700</bug_when>
    <thetext>Comment on attachment 106102
Patch

Attachment 106102 did not pass cr-mac-ews (chromium):
Output: http://queues.webkit.org/results/9579655</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461474</commentid>
    <comment_count>4</comment_count>
      <attachid>106102</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-02 13:29:40 -0700</bug_when>
    <thetext>Comment on attachment 106102
Patch

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

Looks like this patch isn&apos;t quite complete, it&apos;s either missing some files or has too many.

&gt; Source/WebCore/ChangeLog:3
&gt; +        [chromium] Finish implementaiton of CCThreadProxy

this is a bit ambitious, I doubt we&apos;re completely done with CCThreadProxy :).  can you say what this patch does?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:309
&gt; +    // TODO: use the CCScheduler ot decide when to manage the conversion of this

TODO-&gt;FIXME
ot -&gt; to

&gt; Source/WebKit/chromium/tests/CCSchedulerTest.cpp:28
&gt; +#include &quot;CCScheduler.h&quot;

did you mean to add this file to the patch? i don&apos;t see a CCScheduler.h/cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467535</commentid>
    <comment_count>5</comment_count>
      <attachid>107441</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-09-14 19:01:26 -0700</bug_when>
    <thetext>Created attachment 107441
Real 2 phase commit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467548</commentid>
    <comment_count>6</comment_count>
      <attachid>107441</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-14 19:40:11 -0700</bug_when>
    <thetext>Comment on attachment 107441
Real 2 phase commit

Attachment 107441 did not pass cr-mac-ews (chromium):
Output: http://queues.webkit.org/results/9659838</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467573</commentid>
    <comment_count>7</comment_count>
      <attachid>107441</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-14 20:38:40 -0700</bug_when>
    <thetext>Comment on attachment 107441
Real 2 phase commit

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

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:155
&gt; +    deprecatedTurnOffVerifier();

Do we need to do this?  The comment says there&apos;s another way to disable the verifier (extending ThreadRestrictionVerifier?), but do we even need to do that?  What&apos;s it complaining about?

We should ASSERT() that we&apos;re on the expected thread here (main thread, i believe)

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:121
&gt; +// code that is logically a main thread operation, e.g. deletion of a Layer,

&quot;deletion of a Layer&quot; is a bit ambiguous since we have lots of layers - I think you mean LayerChromium here, right?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:122
&gt; +// shoudl be delayed until the CCLayerTreeHost::commitComplete, which will run

shoudl -&gt; should

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:152
&gt; +    m_updateList.clear();

You are in need of an update here, there&apos;s a new function CCLayerTreeHost called clearPendingUpdate to use instead.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:82
&gt; +// Allow IntRects across the thread boundary
&gt; +template&lt;&gt; struct CrossThreadCopierBase&lt;false, false, IntRect&gt; : public CrossThreadCopierPassThrough&lt;IntRect&gt; {
&gt; +};

General question: does this belong here, or in IntRect.h or something like that?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:90
&gt; +    // FIXME: implement readback:
&gt; +    // 0. finishAllRendering --- will make sure any commit pending has been done
&gt; +    // 1. send a blocking message to other side to do another drawLayers and a readback

think we still should have an ASSERT_NOT_REACHED() here. A thread ASSERT() wouldn&apos;t hurt either

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:102
&gt; +    if (m_commitRequested)  {

can we get a main-thread ASSERT() here?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:104
&gt; +        // FIXME: get the beginFrameAndCommit parameters with a blocking call to the impl thread
&gt; +        // run a beginFrameAndCommit

question: could we send a normal needsCommit message over here, and then rely on the blocking nature of the finishAllRendering completion to have the thread call back to for the bFAC before doing the finish()?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:113
&gt;  bool CCThreadProxy::isStarted() const
&gt;  {
&gt; -    return m_layerTreeHostImpl;
&gt; +    return m_started;

It&apos;s just a simple getter but could we get a thread ASSERT() here too? it&apos;s very easy to call these innocent-looking getters from the wrong thread and very hard to debug

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:-160
&gt; -    ASSERT(isMainThread());

why delete the ASSERT()?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:179
&gt; +    TRACE_EVENT(&quot;CCThreadProxy::setNeedsRedraw&quot;, this, 0);
&gt; +    ccThread-&gt;postTask(createCCThreadTask(this, &amp;CCThreadProxy::updateSchedulerStateOnCCThread, false, true));

I&apos;m confused - why doesn&apos;t this set m_redrawRequested ?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:209
&gt; +void CCThreadProxy::finishAllRenderingOnCCThread(CCCompletionEvent* completion)
&gt; +{

ASSERT(isImplThread()) ?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:242
&gt; +    // Clear the redraw and commit flag after animateAndLayout but before in case a

but before what? i think you accidentally a word

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:251
&gt; -    // Blocking call to CCThreadProxy::performCommit
&gt;      CCCompletionEvent completion;
&gt;      ccThread-&gt;postTask(createCCThreadTask(this, &amp;CCThreadProxy::commitOnCCThread, AllowCrossThreadAccess(&amp;completion)));
&gt;      completion.wait();

You deleted the comment saying this call is blocking, but it still looks blocking to me.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:268
&gt; +    m_layerTreeHostImpl-&gt;commitComplete();

why does the impl have a commitComplete()?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:309
&gt; +    if (!m_beginFrameAndCommitPendingOnCCThread) {
&gt; +        beginFrameAndCommitOnCCThread();
&gt; +        m_beginFrameAndCommitPendingOnCCThread = true;

nit: seems to make more sense to have beginFrameAndCommitOnCCThread() to set m_beingFrameAndCommitPendingOnCCThread to true, rather than having the caller have to do it

&gt; Source/WebKit/chromium/ChangeLog:3
&gt; +        [chromium] Make yCCThreadProxy draw

yCCThreadProxy -&gt; CCThreadProxy

&gt; Source/WebKit/chromium/ChangeLog:7
&gt; +        Disable CCLayerTreeHostTest completely as it does not
&gt; +        compile when the threaded switch is enabled.

:(. will husky&apos;s patch fix this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467574</commentid>
    <comment_count>8</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-14 20:39:57 -0700</bug_when>
    <thetext>CCThreadProxy.cpp didn&apos;t compile on cr-mac EWS, although the actual failure seems to be omitted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467869</commentid>
    <comment_count>9</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-09-15 09:49:59 -0700</bug_when>
    <thetext>Thanks James!

(In reply to comment #7)
&gt; &gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:155
&gt; &gt; +    deprecatedTurnOffVerifier();

Working on it. Got some advice from @levin, we&apos;ll see what I can do.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:90
&gt; &gt; +    // 0. finishAllRendering --- will make sure any commit pending has &gt; think we still should have an ASSERT_NOT_REACHED() here. A thread ASSERT() wouldn&apos;t hurt either

You can&apos;t actually use the browser if you make this a notreached... this way, it at least works. Since this is behind a flag, I think we&apos;re safe.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:104
&gt; &gt; +        // FIXME: get the beginFrameAndCommit parameters with a blocking call to the impl thread
&gt; &gt; +        // run a beginFrameAndCommit
&gt; 
&gt; question: could we send a normal needsCommit message over here, and then rely on the blocking nature of the finishAllRendering completion to have the thread call back to for the bFAC before doing the finish()?

The latest patch shows how I envisioned doing this.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:179
&gt; &gt; +    TRACE_EVENT(&quot;CCThreadProxy::setNeedsRedraw&quot;, this, 0);
&gt; &gt; +    ccThread-&gt;postTask(createCCThreadTask(this, &amp;CCThreadProxy::updateSchedulerStateOnCCThread, false, true));
&gt; 
&gt; I&apos;m confused - why doesn&apos;t this set m_redrawRequested ?
The impl thread can draw without telling the main thread. And, I&apos;m reluctant to have the impl thread tell the main thread every time it draws since the only time this function runs is on on WM_PAINT/expose/etc. Since its low-frequency, its safe to just send it over to the other side where it can be ignored or handled as needed. I added comments to this effect on the implementation.


&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:268
&gt; &gt; +    m_layerTreeHostImpl-&gt;commitComplete();
&gt; 
&gt; why does the impl have a commitComplete()?
Tests. I&apos;m vaguely amused cause we have this conversation about this function every time you see this code. :)

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:309
&gt; &gt; +    if (!m_beginFrameAndCommitPendingOnCCThread) {
&gt; &gt; +        beginFrameAndCommitOnCCThread();
&gt; &gt; +        m_beginFrameAndCommitPendingOnCCThread = true;
&gt; 
&gt; nit: seems to make more sense to have beginFrameAndCommitOnCCThread() to set m_beingFrameAndCommitPendingOnCCThread to true, rather than having the caller have to do it

The upcoming patch should make it clear why I didn&apos;t do it that way.

&gt; &gt; Source/WebKit/chromium/ChangeLog:7
&gt; &gt; +        Disable CCLayerTreeHostTest completely as it does not
&gt; &gt; +        compile when the threaded switch is enabled.
&gt; 
&gt; :(. will husky&apos;s patch fix this?

Yes!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467965</commentid>
    <comment_count>10</comment_count>
      <attachid>107523</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-09-15 11:51:26 -0700</bug_when>
    <thetext>Created attachment 107523
New hotness</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468213</commentid>
    <comment_count>11</comment_count>
      <attachid>107578</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-09-15 18:22:52 -0700</bug_when>
    <thetext>Created attachment 107578
Better impl of finishAllRendering</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468239</commentid>
    <comment_count>12</comment_count>
      <attachid>107578</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-15 19:13:13 -0700</bug_when>
    <thetext>Comment on attachment 107578
Better impl of finishAllRendering

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

left some nits, I will go home and try to grok the rest of this tonight on a full tummy.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:87
&gt; +    ASSERT(m_layerTreeHost);

broken record time: can you put a threading ASSERT() here too?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:90
&gt; +    bool success;

nit: could you initialize this bool here rather than just leave it some random value, just in case for some reason the task forgets to set it?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:228
&gt; +
&gt; +    m_started = true;

can this get a main thread ASSERT()?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:236
&gt; +    if (!m_started)
&gt; +        return;

is it valid to call stop() without calling start()? (or before start() completes, at least)?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:359
&gt;      ASSERT(isImplThread());

nit: mind putting the ASSERT() ahead of the early out? if we somehow get this wrong i want the ASSERT() to hit regardless of the value of that flag</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468247</commentid>
    <comment_count>13</comment_count>
      <attachid>107586</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-09-15 19:27:54 -0700</bug_when>
    <thetext>Created attachment 107586
Rebase and nits</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468827</commentid>
    <comment_count>14</comment_count>
      <attachid>107727</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-09-16 15:03:15 -0700</bug_when>
    <thetext>Created attachment 107727
Merge win the tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468857</commentid>
    <comment_count>15</comment_count>
      <attachid>107586</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-16 15:46:05 -0700</bug_when>
    <thetext>Comment on attachment 107586
Rebase and nits

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:279
&gt; +    // beginFrameAndCommitOnCCThread is enqueued. Since it CCMainThread doesn&apos;t

&quot;Since it CCMainThread&quot; does not parse

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:404
&gt; +    m_redrawRequestedOnCCThread |= redrawRequested;
&gt; +    if (!m_beginFrameAndCommitPendingOnCCThread)
&gt; +        CCMainThread::postTask(createBeginFrameAndCommitTaskOnCCThread());
&gt; +
&gt; +    // If no commit is pending, but a redraw is requested, then post a redraw right away
&gt; +    if (!m_beginFrameAndCommitPendingOnCCThread &amp;&amp; m_redrawRequestedOnCCThread)
&gt; +        scheduleDrawTaskOnCCThread();

I had trouble following the conditional logic here.  The first branch sets m_beginFrameAndCommitPendingOnCCThread to true, so if the first branch is hit the second can&apos;t.

I think this would be clearer with an explicit early return on the first branch instead of checking !m_beginFrameAndCommitPendingOnCCThread twice.  I think the intended flow is something like:

(1) update the state flags
(2) if we need a commit and we haven&apos;t sent a task, send the BFAC task to the main thread and do nothing else
(3) if we need a draw and we don&apos;t have one pending, post a task to ourself to draw

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.h:66
&gt; +    PassOwnPtr&lt;CCMainThread::Task&gt; createBeginFrameAndCommitTaskOnCCThread();
&gt; +    void createBeginFrameAndCommitTaskOnCCThread(CCCompletionEvent*, CCMainThread::Task**);

it&apos;s hard to follow the logic with these two functions sharing a name. IMO the create..() prefix should normally be used for a function that returns something, and the void version should have some other name.  It&apos;s doing something to the second parameter - maybe it&apos;s initializing the task instead of creating it?

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp:28
&gt; +// CCLayerTreeHost disabled. See b67418.
&gt; +#if 0

I think you should just leave the #if USE(THREADED_COMPOSITING) guard for this file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468860</commentid>
    <comment_count>16</comment_count>
      <attachid>107727</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-16 15:54:16 -0700</bug_when>
    <thetext>Comment on attachment 107727
Merge win the tests.

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

R=me.  I left some nits on the previous patch and this one which apply, but none that are too serious.

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp:307
&gt; +INSTANTIATE_TEST_CASE_P(

Very nifty - so we&apos;ll run the tests in threaded and non-threaded mode? Me likey

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp:311
&gt; +        CCSettings(false, false, false, false, false),
&gt; +        CCSettings(false, false, true, false, false)));

now I kind of wish CCSettings some sort of c&apos;tor where we could see what on earth these flags are at callsites.  I think I&apos;m wishing for a different language...

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp:558
&gt; +    CCSettings setings;

setings-&gt;settings ? What actually uses this, or do you just need to have something on the stack that a magical macro picks up?

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp:564
&gt; +#endif

looks like we have ourselves a comment fight going on!  I&apos;m personally a fan of the // USE(THREADED_COMPOSITING) comment on this #endif

&gt; Source/WebKit/chromium/tests/TreeSynchronizerTest.cpp:136
&gt; +    ScopedSetImplThread impl;

I&apos;m actually slightly surprised this works.  LayerChromium creation and destruction should always be a main thread thing, but I guess we don&apos;t have proper ASSERT()s to verify that so just doing the whole thing on the impl thread works just fine.

I think that the synchronizeTrees() function should have a ScopedSetImplThread doohickey, since normally we call that from commitTo(), but the LayerChromium setup should be main thread.  If this works for now, though, leave it this way and we can clean up when we add more ASSERT()s for LayerChromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468862</commentid>
    <comment_count>17</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-09-16 15:58:45 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 107727 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=107727&amp;action=review
&gt; &gt; Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp:311
&gt; &gt; +        CCSettings(false, false, false, false, false),
&gt; &gt; +        CCSettings(false, false, true, false, false)));
&gt; 
&gt; now I kind of wish CCSettings some sort of c&apos;tor where we could see what on earth these flags are at callsites.  I think I&apos;m wishing for a different language...

I thought we encouraged enums in these cases to help with this issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468864</commentid>
    <comment_count>18</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-16 16:01:38 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #16)
&gt; &gt; (From update of attachment 107727 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=107727&amp;action=review
&gt; &gt; &gt; Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp:311
&gt; &gt; &gt; +        CCSettings(false, false, false, false, false),
&gt; &gt; &gt; +        CCSettings(false, false, true, false, false)));
&gt; &gt; 
&gt; &gt; now I kind of wish CCSettings some sort of c&apos;tor where we could see what on earth these flags are at callsites.  I think I&apos;m wishing for a different language...
&gt; 
&gt; I thought we encouraged enums in these cases to help with this issue.

We do when the callers normally pass in literals.  In this case, all of the callers who instantiate real CCSettings initialize with named variables, not literals:

http://google.com/codesearch#OAMlx_jo-ck/src/third_party/WebKit/Source/WebKit/chromium/src/WebViewImpl.cpp&amp;q=CCSettings&amp;ct=rc&amp;exact_package=chromium&amp;cd=2&amp;sq=&amp;l=2646

so this caller is actually the exception to the rule.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468865</commentid>
    <comment_count>19</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-16 16:02:25 -0700</bug_when>
    <thetext>Also it looks like this macro doesn&apos;t less us expand out the CCSettings initialization in the normal way of doing:
CCSettings settings;
settings.foo = true;
settings.bar = false;
...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468866</commentid>
    <comment_count>20</comment_count>
      <attachid>107727</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-09-16 16:03:39 -0700</bug_when>
    <thetext>Comment on attachment 107727
Merge win the tests.

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

&gt;&gt;&gt;&gt; Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp:311
&gt;&gt;&gt;&gt; +        CCSettings(false, false, true, false, false)));
&gt;&gt;&gt; 
&gt;&gt;&gt; now I kind of wish CCSettings some sort of c&apos;tor where we could see what on earth these flags are at callsites.  I think I&apos;m wishing for a different language...
&gt;&gt; 
&gt;&gt; I thought we encouraged enums in these cases to help with this issue.
&gt; 
&gt; We do when the callers normally pass in literals.  In this case, all of the callers who instantiate real CCSettings initialize with named variables, not literals:
&gt; 
&gt; http://google.com/codesearch#OAMlx_jo-ck/src/third_party/WebKit/Source/WebKit/chromium/src/WebViewImpl.cpp&amp;q=CCSettings&amp;ct=rc&amp;exact_package=chromium&amp;cd=2&amp;sq=&amp;l=2646
&gt; 
&gt; so this caller is actually the exception to the rule.

That&apos;d be a lot of enums.  Another option is to remove the args from the constructor and force callers to set named member variables explicitly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468868</commentid>
    <comment_count>21</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-09-16 16:04:51 -0700</bug_when>
    <thetext>Omg folks, rapid rate of replying here!

Depressingly, our subclassing is fighting with the the value-parameterized tests. Scowl. I need to go do a bit more battle with GTest to make this work. :/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468869</commentid>
    <comment_count>22</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-09-16 16:05:43 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #17)
&gt; &gt; (In reply to comment #16)
&gt; &gt; &gt; (From update of attachment 107727 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=107727&amp;action=review
&gt; &gt; &gt; &gt; Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp:311
&gt; &gt; &gt; &gt; +        CCSettings(false, false, false, false, false),
&gt; &gt; &gt; &gt; +        CCSettings(false, false, true, false, false)));
&gt; &gt; &gt; 
&gt; &gt; &gt; now I kind of wish CCSettings some sort of c&apos;tor where we could see what on earth these flags are at callsites.  I think I&apos;m wishing for a different language...
&gt; &gt; 
&gt; &gt; I thought we encouraged enums in these cases to help with this issue.
&gt; 
&gt; We do when the callers normally pass in literals.  In this case, all of the callers who instantiate real CCSettings initialize with named variables, not literals:
&gt; 
&gt; http://google.com/codesearch#OAMlx_jo-ck/src/third_party/WebKit/Source/WebKit/chromium/src/WebViewImpl.cpp&amp;q=CCSettings&amp;ct=rc&amp;exact_package=chromium&amp;cd=2&amp;sq=&amp;l=2646
&gt; 
&gt; so this caller is actually the exception to the rule.

So basically the test code is the only ugly place.

btw, I&apos;m fine with the r+ -- just to be absolutely clear :).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468871</commentid>
    <comment_count>23</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-16 16:06:19 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 107727 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=107727&amp;action=review
&gt; 
&gt; &gt;&gt;&gt;&gt; Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp:311
&gt; &gt;&gt;&gt;&gt; +        CCSettings(false, false, true, false, false)));
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; now I kind of wish CCSettings some sort of c&apos;tor where we could see what on earth these flags are at callsites.  I think I&apos;m wishing for a different language...
&gt; &gt;&gt; 
&gt; &gt;&gt; I thought we encouraged enums in these cases to help with this issue.
&gt; &gt; 
&gt; &gt; We do when the callers normally pass in literals.  In this case, all of the callers who instantiate real CCSettings initialize with named variables, not literals:
&gt; &gt; 
&gt; &gt; http://google.com/codesearch#OAMlx_jo-ck/src/third_party/WebKit/Source/WebKit/chromium/src/WebViewImpl.cpp&amp;q=CCSettings&amp;ct=rc&amp;exact_package=chromium&amp;cd=2&amp;sq=&amp;l=2646
&gt; &gt; 
&gt; &gt; so this caller is actually the exception to the rule.
&gt; 
&gt; That&apos;d be a lot of enums.  Another option is to remove the args from the constructor and force callers to set named member variables explicitly.

Yeah but then we can&apos;t use this really cool paramaterized test harness thingy from gtest.  Maybe we could have a few global CCSettings objects initialized via some part of the test harness that runs before INSTANTIATE_... evaluates?  Is that even possible?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469134</commentid>
    <comment_count>24</comment_count>
      <attachid>107727</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-17 20:53:28 -0700</bug_when>
    <thetext>Comment on attachment 107727
Merge win the tests.

Attachment 107727 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/9723806</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469539</commentid>
    <comment_count>25</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-19 11:06:54 -0700</bug_when>
    <thetext>This doesn&apos;t compile on mac because of the CrossThreadCopier.h #include in IntRect.h.  You&apos;ll need to add that to the forwarding headers for the mac build :/

Maybe it&apos;s not so bad to have that in CCThreadProxy.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470540</commentid>
    <comment_count>26</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-09-20 18:26:00 -0700</bug_when>
    <thetext>Oddly, this passed the mac trybots:

http://build.chromium.org/p/tryserver.chromium/waterfall?branch=&amp;committer=nduca@chromium.org&amp;reload=60

James, what did you see that made you think this was a forwarding headers issue? The CrossThreadCopier is a WebCore/platform, not a WTF...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470542</commentid>
    <comment_count>27</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-20 18:34:11 -0700</bug_when>
    <thetext>It&apos;s broken on the Apple Mac port, not Chromium mac.  The reason I suspect forwarding headers is because of this output:

http://queues.webkit.org/results/9723806

In file included from /mnt/git/webkit-mac-ews/WebKitBuild/Release/WebCore.framework/PrivateHeaders/FrameSelection.h:30,
                 from /mnt/git/webkit-mac-ews/Source/WebKit/mac/WebView/WebFrameInternal.h:35,
                 from /mnt/git/webkit-mac-ews/Source/WebKit/mac/History/WebBackForwardList.mm:32:
/mnt/git/webkit-mac-ews/WebKitBuild/Release/WebCore.framework/PrivateHeaders/IntRect.h:29:31: error: CrossThreadCopier.h: No such file or directory
In file included from /mnt/git/webkit-mac-ews/WebKitBuild/Release/WebCore.framework/PrivateHeaders/FrameSelection.h:30,
                 from /mnt/git/webkit-mac-ews/Source/WebKit/mac/WebView/WebFrameInternal.h:35,
                 from /mnt/git/webkit-mac-ews/Source/WebKit/mac/History/WebBackForwardList.mm:32:
/mnt/git/webkit-mac-ews/WebKitBuild/Release/WebCore.framework/PrivateHeaders/IntRect.h:262: error: &apos;CrossThreadCopierBase&apos; is not a template
/mnt/git/webkit-mac-ews/WebKitBuild/Release/WebCore.framework/PrivateHeaders/IntRect.h:262: error: expected template-name before &apos;&lt;&apos; token
/mnt/git/webkit-mac-ews/WebKitBuild/Release/WebCore.framework/PrivateHeaders/IntRect.h:262: error: expected `{&apos; before &apos;&lt;&apos; token
/mnt/git/webkit-mac-ews/WebKitBuild/Release/WebCore.framework/PrivateHeaders/IntRect.h:262: error: expected unqualified-id before &apos;&lt;&apos; token

It looks like it&apos;s trying to compile files in the WebKit/ directory, but since CrossThreadCopierBase is not forwarded from WebCore/ to WebKit/ the build fails. I might be misinterpreting the tea leaves - I&apos;ll try patching this in locally on my mac pro and see what happens.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470994</commentid>
    <comment_count>28</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-21 11:47:02 -0700</bug_when>
    <thetext>Moving the CrossThreadCopierBase&lt;&gt; declaration back to CCThreadProxy.cpp like you did initially fixes the Mac compile.  Now that I think about it more, I&apos;m not sure if the CrossThreadCopier stuff is supposed to be public interface on IntRect or not.

Adding CrossThreadCopier.h to the the appropriate forwading headers headers from WebCore -&gt; WebKit for the mac build would probably also fix the mac compile (I haven&apos;t tried this yet since I don&apos;t know how to do that).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471018</commentid>
    <comment_count>29</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-21 12:07:58 -0700</bug_when>
    <thetext>After chatting with Dave Levin in IRC we decided that the best thing to do is to add the CrossThreadCopierBase&lt;&gt; incantation to CrossThreadCopier.h using a forward declaration of IntRect.  This seems to blend just fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471022</commentid>
    <comment_count>30</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-09-21 12:10:33 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; After chatting with Dave Levin in IRC we decided that the best thing to do is to add the CrossThreadCopierBase&lt;&gt; incantation to CrossThreadCopier.h using a forward declaration of IntRect.  This seems to blend just fine.

And while you&apos;re at it, feel free to add a comment in there about this being the way to do things :).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471398</commentid>
    <comment_count>31</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-22 00:21:21 -0700</bug_when>
    <thetext>Committed r95699: &lt;http://trac.webkit.org/changeset/95699&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471410</commentid>
    <comment_count>32</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-22 00:52:39 -0700</bug_when>
    <thetext>Reverted r95699 for reason:

Makes many chromium compositor tests crash

Committed r95702: &lt;http://trac.webkit.org/changeset/95702&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471824</commentid>
    <comment_count>33</comment_count>
      <attachid>108389</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-09-22 13:35:30 -0700</bug_when>
    <thetext>Created attachment 108389
More tweaks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471830</commentid>
    <comment_count>34</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-22 13:38:19 -0700</bug_when>
    <thetext>Attachment 108389 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/platform/CrossThreadCopier.h:44:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471861</commentid>
    <comment_count>35</comment_count>
      <attachid>108389</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-22 14:19:49 -0700</bug_when>
    <thetext>Comment on attachment 108389
More tweaks

Attachment 108389 did not pass cr-mac-ews (chromium):
Output: http://queues.webkit.org/results/9792496</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472016</commentid>
    <comment_count>36</comment_count>
      <attachid>108389</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-22 19:11:56 -0700</bug_when>
    <thetext>Comment on attachment 108389
More tweaks

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCProxy.cpp:44
&gt; +#ifndef NDEBUG

moving this #ifndef down breaks the compile in release builds, at least on linux, because of unused variables

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:117
&gt; +    commitIfNeeded();

why would we attempt to do a commit here?  This seems to be the cause of a lot of crashes

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:120
&gt; +    // If a commit is pending, perform the commit first.

I can&apos;t remember why we want to do this instead of just doing a blocking call to the thread to glFinish() whatever it&apos;s working on and then return control to the caller.  Today the only caller of this path is in shutdown where I don&apos;t think it matters which frame gets finished, so long as we finish() on the context at the end of some frame.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:257
&gt; +    TRACE_EVENT(&quot;CCThreadProxy::finishAllRenderingOnCCThread&quot;, this, 0);
&gt; +    ASSERT(isImplThread());
&gt; +    ASSERT(!m_beginFrameAndCommitPendingOnCCThread);
&gt; +    if (m_redrawRequestedOnCCThread) {
&gt; +        drawLayersOnCCThread();
&gt; +        m_layerTreeHostImpl-&gt;present();
&gt; +        m_redrawRequestedOnCCThread = false;
&gt; +    }

why do we draw here and not just glFinish()? couldn&apos;t the caller call compositeAndReadback() if they were interested in getting a new frame put up?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472023</commentid>
    <comment_count>37</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-22 19:33:30 -0700</bug_when>
    <thetext>Ah, I forgot that we use finishAllRendering() in the implementation of compositeAndReadback().

Alternate proposal: how about finishAllRendering() only does a blocking call to the thread to request a glFinish(), and the whole request BFAC task stuff is moved to be used only for compositeAndReadback() where it&apos;s really needed?  I think that&apos;s much closer to the semantics we want and it keeps all of the complexity limited to compositeAndReadback() which we know is slow and maybe (extreme optimism alert) something we can get rid of someday.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472047</commentid>
    <comment_count>38</comment_count>
      <attachid>108389</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-22 20:46:47 -0700</bug_when>
    <thetext>Comment on attachment 108389
More tweaks

Attachment 108389 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9796529</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472595</commentid>
    <comment_count>39</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-09-23 16:18:44 -0700</bug_when>
    <thetext>(In reply to comment #37)
&gt; Alternate proposal: how about finishAllRendering() only does a blocking call to the thread to request a 

Sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472611</commentid>
    <comment_count>40</comment_count>
      <attachid>108556</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-09-23 16:36:22 -0700</bug_when>
    <thetext>Created attachment 108556
Dont commit in finish.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472614</commentid>
    <comment_count>41</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-23 16:39:26 -0700</bug_when>
    <thetext>Attachment 108556 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/platform/CrossThreadCopier.h:44:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472618</commentid>
    <comment_count>42</comment_count>
      <attachid>108559</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-09-23 16:45:15 -0700</bug_when>
    <thetext>Created attachment 108559
Set Impl thread when setting layer renderer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472622</commentid>
    <comment_count>43</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-23 16:49:29 -0700</bug_when>
    <thetext>Attachment 108559 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/platform/CrossThreadCopier.h:44:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>473627</commentid>
    <comment_count>44</comment_count>
      <attachid>108559</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-26 19:03:21 -0700</bug_when>
    <thetext>Comment on attachment 108559
Set Impl thread when setting layer renderer

R=me. Will land by hand to babysit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>473634</commentid>
    <comment_count>45</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-26 19:17:33 -0700</bug_when>
    <thetext>Committed r96066: &lt;http://trac.webkit.org/changeset/96066&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>473913</commentid>
    <comment_count>46</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-09-27 06:42:33 -0700</bug_when>
    <thetext>(In reply to comment #45)
&gt; Committed r96066: &lt;http://trac.webkit.org/changeset/96066&gt;

Thanks James. Sorry to not have landed this weekend --- wasn&apos;t sure on the final review.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106102</attachid>
            <date>2011-09-02 00:36:44 -0700</date>
            <delta_ts>2011-09-14 19:01:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67417-20110902003643.patch</filename>
            <type>text/plain</type>
            <size>18580</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQzNTMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzYmY5NGExNTEyNDQyNmJm
MTg0ZDI3YTEwZjQ2OWIxOWRjNmIyZTc0Li4zNWU4YzZiNTA3ODY2NDk5ZDIyZDcxYjQ2NDJlZTM1
ZjE5MzJiNmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTEtMDktMDIgIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gRmluaXNoIGlt
cGxlbWVudGFpdG9uIG9mIENDVGhyZWFkUHJveHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY3NDE3CisKKyAgICAgICAgVGhpcyBpbXBsZW1lbnRhdGlv
biBvZiBDQ1RocmVhZFByb3h5IHJ1bnMgdGhlIHVwZGF0ZUxheWVycyBvbgorICAgICAgICB0aGUg
bWFpblRoZXJhZCB0byB3b3JrIGFyb3VuZCBjdXJyZW50IHVwZGF0ZUxheWVycyBsaW1pdGF0aW9u
cy4KKyAgICAgICAgV2hlbiBiNjY0MzAgYW5kIGI2NzQzOCBsYW5kLCB0aGUgcHJveHkgaW1wbGVt
ZW50YXRpb24gd2lsbCBzd2l0Y2gKKyAgICAgICAgdG8gYSB0d28gcGhhc2UgY29tbWl0LgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVtKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNDSGVhZHNVcERpc3BsYXk6OmVuYWJsZWQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6Q0NUaHJlYWRQcm94eSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1RocmVhZFByb3h5Ojp+Q0NUaHJlYWRQcm94eSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1RocmVhZFByb3h5Ojpjb21wb3NpdGVBbmRSZWFkYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1RocmVhZFByb3h5OjpmaW5pc2hBbGxSZW5kZXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NUaHJlYWRQcm94eTo6aXNTdGFydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJv
eHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFk
UHJveHk6OnNldE5lZWRzUmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6
OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OnN0b3ApOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6ZmluaXNoQWxsUmVuZGVyaW5nT25DQ1RocmVhZCk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0T25D
Q1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVBbmRDb21taXQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6Y29tbWl0QW5kRHJhd09uQ0NUaHJlYWQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6Y29tbWl0QW5kRHJhd0FuZFJlYWRi
YWNrT25DQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpkcmF3TGF5
ZXJzT25DQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpzZXROZWVk
c0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaDoKKwogMjAxMS0wOC0yOSAgTmF0IER1Y2EgIDxu
ZHVjYUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBJbnRyb2R1Y2UgQ0NTaW5n
bGVUaHJlYWRQcm94eSBpbiBvcmRlciB0byBtb3ZlIExheWVyUmVuZGVyZXIgdG8gQ0NMYXllclRy
ZWVIb3N0SW1wbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggMjY5
MjljYTE2ZTIzMzk4NWY4ZDA2MDczOWU5NmI1NDgzNTg0YzkwZS4uYzY3ZWZiY2FlN2M1OTYwOWUw
NmNhOTNiNTZjMjMxNmQ0YTkwYmRjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uY3BwCkBAIC00NzUsNiArNDc1LDcgQEAgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJl
bmRlcmVyQ2hyb21pdW0oQ0NMYXllclRyZWVIb3N0KiBvd25lciwKICAgICAsIG1fY29udGV4dChj
b250ZXh0KQogICAgICwgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZSgwKQogeworICAgIGRlcHJlY2F0
ZWRUdXJuT2ZmVmVyaWZpZXIoKTsKIH0KIAogYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06Omlu
aXRpYWxpemUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcAppbmRleCBiMjU2YzY3
ZjhlMDQ3ODAxOTZiNzJmYTkxOWMwMWVkMzU3NzgwMDQ5Li5jNzg0YjIxZjNiN2RmZjgzNzY1YmM4
Nzk5Y2MxZTdkZDFjYTU4ZmEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcApA
QCAtODksNiArODksOSBAQCB2b2lkIENDSGVhZHNVcERpc3BsYXk6Om9uUHJlc2VudCgpCiAKIGJv
b2wgQ0NIZWFkc1VwRGlzcGxheTo6ZW5hYmxlZCgpIGNvbnN0CiB7CisgICAgLy8gRklYTUU6IEhV
RCBkb2VzIG5vdCB3b3JrIGluIGNvbXBvc2l0b3IgdGhyZWFkIG1vZGUuCisgICAgaWYgKHNldHRp
bmdzKCkuZW5hYmxlQ29tcG9zaXRvclRocmVhZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IHJldHVybiBzZXR0aW5ncygpLnNob3dQbGF0Zm9ybUxheWVyVHJlZSB8fCBzZXR0aW5ncygpLnNo
b3dGUFNDb3VudGVyOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCmluZGV4IGQ5ZjBj
MWJmZjRjMjFmODViNmIxZGRhNDBkYWE3ZGZmZDMxNjQwY2IuLjdhNjhlMjQwNDg2ZDVjMGYyMWQ1
MWFiZmFjZGVmNDk0NGRhZGU5MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCkBAIC0z
MSw2ICszMSw3IEBACiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCiAjaW5jbHVkZSAi
Y2MvQ0NNYWluVGhyZWFkVGFzay5oIgogI2luY2x1ZGUgImNjL0NDVGhyZWFkVGFzay5oIgorI2lu
Y2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAK
IHVzaW5nIG5hbWVzcGFjZSBXVEY7CkBAIC00OCw4ICs0OSw5IEBAIFBhc3NPd25QdHI8Q0NQcm94
eT4gQ0NUaHJlYWRQcm94eTo6Y3JlYXRlKENDTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCkK
IH0KIAogQ0NUaHJlYWRQcm94eTo6Q0NUaHJlYWRQcm94eShDQ0xheWVyVHJlZUhvc3QqIGxheWVy
VHJlZUhvc3QpCi0gICAgOiBtX2NvbW1pdFBlbmRpbmcoZmFsc2UpCisgICAgOiBtX2NvbW1pdFJl
cXVlc3RlZChmYWxzZSkKICAgICAsIG1fbGF5ZXJUcmVlSG9zdChsYXllclRyZWVIb3N0KQorICAg
ICwgbV9zdGFydGVkKGZhbHNlKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpD
Q1RocmVhZFByb3h5IiwgdGhpcywgMCk7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKQEAg
LTY2LDggKzY4LDcgQEAgQ0NUaHJlYWRQcm94eTo6fkNDVGhyZWFkUHJveHkoKQogewogICAgIFRS
QUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5Ojp+Q0NUaHJlYWRQcm94eSIsIHRoaXMsIDApOwogICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3RJbXBs
KTsgLy8gTWFrZSBzdXJlIHN0b3AoKSBnb3QgY2FsbGVkLgotICAgIEFTU0VSVCghbV9sYXllclRy
ZWVIb3N0KTsgLy8gTWFrZSBzdXJlIHN0b3AoKSBnb3QgY2FsbGVkLgorICAgIEFTU0VSVCghbV9z
dGFydGVkKTsKIAogICAgIG51bVByb3hpZXMtLTsKICAgICBpZiAoIW51bVByb3hpZXMpIHsKQEAg
LTc2LDEwICs3NywyNCBAQCBDQ1RocmVhZFByb3h5Ojp+Q0NUaHJlYWRQcm94eSgpCiAgICAgfQog
fQogCisvLyBBbGxvdyBJbnRSZWN0cyBhY3Jvc3MgdGhlIHRocmVhZCBib3VuZGFyeQordGVtcGxh
dGU8PiBzdHJ1Y3QgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBmYWxzZSwgSW50UmVjdD4g
OiBwdWJsaWMgQ3Jvc3NUaHJlYWRDb3BpZXJQYXNzVGhyb3VnaDxJbnRSZWN0PiB7Cit9OworCiBi
b29sIENDVGhyZWFkUHJveHk6OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVscywgY29u
c3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gZmFsc2U7CisgICAgQVNTRVJUKG1fbGF5ZXJUcmVlSG9zdCk7CisgICAgbV9jb21taXRSZXF1
ZXN0ZWQgPSB0cnVlOworICAgIGJlZ2luRnJhbWUoY3VycmVudFRpbWUoKSk7CisKKyAgICBDQ0Nv
bXBsZXRpb25FdmVudCBjb21wbGV0aW9uOworICAgIGJvb2wgc3VjY2Vzc3M7CisgICAgY2NUaHJl
YWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6Y29t
bWl0QW5kRHJhd0FuZFJlYWRiYWNrT25DQ1RocmVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MocGl4ZWxzKSwgcmVjdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93Q3Jvc3NUaHJl
YWRBY2Nlc3MoJmNvbXBsZXRpb24pLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZzdWNjZXNzcykp
KTsKKworICAgIGNvbXBsZXRpb24ud2FpdCgpOworICAgIHJldHVybiBzdWNjZXNzczsKIH0KIAog
R3JhcGhpY3NDb250ZXh0M0QqIENDVGhyZWFkUHJveHk6OmNvbnRleHQoKQpAQCAtOTAsMTIgKzEw
NSwxNiBAQCBHcmFwaGljc0NvbnRleHQzRCogQ0NUaHJlYWRQcm94eTo6Y29udGV4dCgpCiAKIHZv
aWQgQ0NUaHJlYWRQcm94eTo6ZmluaXNoQWxsUmVuZGVyaW5nKCkKIHsKLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAvLyBGSVhNRTogbWFrZSBzdXJlIHRoYXQgYW55IHBlbmRpbmcgY29t
bWl0IGhhcHBlbnMgZmlyc3QuCisgICAgLy8gV2Ugb25seSBuZWVkIHRvIGZpeCB0aGlzIGlmIHdl
IHdhbnQgdG8gcHJldmVudCBmbGlja2VyIHdoZW4gdHVybmluZyBjb21wb3NpdGluZyBvZmYuCisg
ICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKKyAgICBjY1RocmVhZC0+cG9zdFRhc2so
Y3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5OjpmaW5pc2hBbGxSZW5kZXJp
bmdPbkNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9uKSkpOworICAg
IGNvbXBsZXRpb24ud2FpdCgpOwogfQogCiBib29sIENDVGhyZWFkUHJveHk6OmlzU3RhcnRlZCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdEltcGw7CisgICAgcmV0dXJuIG1f
c3RhcnRlZDsKIH0KIAogYm9vbCBDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJl
cihDQ0xheWVyVHJlZUhvc3QqIG93bmVySGFjaykKQEAgLTEzNywxOCArMTU2LDE5IEBAIHZvaWQg
Q0NUaHJlYWRQcm94eTo6bG9zZUNvbXBvc2l0b3JDb250ZXh0KCkKIHZvaWQgQ0NUaHJlYWRQcm94
eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7Ci0gICAgaWYgKG1fY29tbWl0UGVuZGluZykKKyAgICBpZiAobV9jb21taXRSZXF1ZXN0ZWQp
CiAgICAgICAgIHJldHVybjsKKyAgICBtX2NvbW1pdFJlcXVlc3RlZCA9IHRydWU7CiAKICAgICBU
UkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXciLCB0aGlz
LCAwKTsKLSAgICBtX2NvbW1pdFBlbmRpbmcgPSB0cnVlOwogICAgIGNjVGhyZWFkLT5wb3N0VGFz
ayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0
QW5kUmVkcmF3T25DQ1RocmVhZCkpOwogfQogCiB2b2lkIENDVGhyZWFkUHJveHk6OnNldE5lZWRz
UmVkcmF3KCkKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGNjVGhyZWFkLT5w
b3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OnNldE5lZWRz
UmVkcmF3T25DQ1RocmVhZCkpOworICAgIC8vIEZJWE1FOiBkaXN0aW5ndWlzaCBiZXR3ZWVuIGNv
bW1pdEFuZFJlZHJhdyBhbmQgcmVkcmF3IGZvciByZWR1Y2VkIGxhdGVuY3kKKyAgICAvLyBpbiBw
dXJlIHJlZHJhdyBjYXNlcy4KKyAgICBzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOwogfQogCiB2
b2lkIENDVGhyZWFkUHJveHk6OnN0YXJ0KCkKQEAgLTE1NywxMiArMTc3LDE2IEBAIHZvaWQgQ0NU
aHJlYWRQcm94eTo6c3RhcnQoKQogICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CiAg
ICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQ
cm94eTo6aW5pdGlhbGl6ZUltcGxPbkNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZj
b21wbGV0aW9uKSkpOwogICAgIGNvbXBsZXRpb24ud2FpdCgpOworCisgICAgbV9zdGFydGVkID0g
dHJ1ZTsKIH0KIAogdm9pZCBDQ1RocmVhZFByb3h5OjpzdG9wKCkKIHsKICAgICBUUkFDRV9FVkVO
VCgiQ0NUaHJlYWRQcm94eTo6c3RvcCIsIHRoaXMsIDApOwogICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CisgICAgaWYgKCFtX3N0YXJ0ZWQpCisgICAgICAgIHJldHVybjsKICAgICAvLyBTeW5j
aHJvbm91c2x5IGRlbGV0ZXMgdGhlIGltcGwuCiAgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxl
dGlvbjsKICAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZD
Q1RocmVhZFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZCwgQWxsb3dDcm9zc1Ro
cmVhZEFjY2VzcygmY29tcGxldGlvbikpKTsKQEAgLTE3MCw2ICsxOTQsNyBAQCB2b2lkIENDVGhy
ZWFkUHJveHk6OnN0b3AoKQogCiAgICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3RJbXBsKTsgLy8g
dmVyaWZ5IHRoYXQgdGhlIGltcGwgZGVsZXRlZC4KICAgICBtX2xheWVyVHJlZUhvc3QgPSAwOwor
ICAgIG1fc3RhcnRlZCA9IGZhbHNlOwogfQogCiBUZXh0dXJlTWFuYWdlciogQ0NUaHJlYWRQcm94
eTo6Y29udGVudHNUZXh0dXJlTWFuYWdlcigpCkBAIC0xNzgsNTUgKzIwMywxMDEgQEAgVGV4dHVy
ZU1hbmFnZXIqIENDVGhyZWFkUHJveHk6OmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKQogICAgIHJl
dHVybiAwOwogfQogCit2b2lkIENDVGhyZWFkUHJveHk6OmZpbmlzaEFsbFJlbmRlcmluZ09uQ0NU
aHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24pCit7CisgICAgbV9sYXllclRyZWVI
b3N0SW1wbC0+ZmluaXNoQWxsUmVuZGVyaW5nKCk7CisgICAgY29tcGxldGlvbi0+c2lnbmFsKCk7
Cit9CisKIHZvaWQgQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQo
KQogewogICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0
T25DQ1RocmVhZCIsIHRoaXMsIDApOwogICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7Ci0gICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgLy8gRklYTUU6IGNhbGwgYmVnaW5GcmFtZUFuZENv
bW1pdCBvbiBtYWluIHRocmVhZAorICAgIGRvdWJsZSBmcmFtZUJlZ2luVGltZSA9IGN1cnJlbnRU
aW1lKCk7CisgICAgQ0NNYWluVGhyZWFkOjpwb3N0VGFzayhjcmVhdGVNYWluVGhyZWFkVGFzayh0
aGlzLCAmQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUFuZENvbW1pdCwgZnJhbWVCZWdpblRpbWUp
KTsKKwogfQogCi12b2lkIENDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVBbmRDb21taXQoZG91Ymxl
IGZyYW1lQmVnaW5UaW1lKQordm9pZCBDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lKGRvdWJsZSBm
cmFtZUJlZ2luVGltZSkKIHsKKyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6YmVnaW5G
cmFtZSIsIHRoaXMsIDApOwogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKCFt
X2xheWVyVHJlZUhvc3QpCi0gICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQobV9sYXllclRyZWVI
b3N0KTsKKyAgICBBU1NFUlQobV9jb21taXRSZXF1ZXN0ZWQpOworCisgICAgLy8gRklYTUU6IHJl
Y3JlYXRlIHRoZSBjb250ZXh0IGlmIGl0IHdhcyByZXF1ZXN0ZWQgYnkgdGhlIGltcGwgdGhyZWFk
CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0ZUFuZExheW91dCIsIHRo
aXMsIDApOworICAgIG1fbGF5ZXJUcmVlSG9zdC0+YW5pbWF0ZUFuZExheW91dChmcmFtZUJlZ2lu
VGltZSk7CiAKLSAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6cmVxdWVzdEZyYW1lQW5k
Q29tbWl0IiwgdGhpcywgMCk7CisgICAgLy8gQ2xlYXIgdGhlIGZsYWcgYWZ0ZXIgYW5pbWF0ZUFu
ZExheW91dCBpbiBjYXNlIGEgZm9sbG93dXAgc3RlcCBjYXVzZXMgYWRkaXRpb25hbAorICAgIC8v
IGludmFsaWRhdGlvbgorICAgIG1fY29tbWl0UmVxdWVzdGVkID0gZmFsc2U7CisKKyAgICAvLyBG
SVhNRTogbWFrZSBwcmVjb21taXQgZ28gYXdheS4gSXRzIGhpZGVvdXMuCiAgICAgewotICAgICAg
ICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0OjphbmltYXRlQW5kTGF5b3V0IiwgdGhpcywg
MCk7Ci0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+YW5pbWF0ZUFuZExheW91dChmcmFtZUJlZ2lu
VGltZSk7CisgICAgICAgIENDUHJveHk6OnNldEltcGxUaHJlYWQodHJ1ZSk7CisgICAgICAgIG1f
bGF5ZXJUcmVlSG9zdC0+cHJlQ29tbWl0KG1fbGF5ZXJUcmVlSG9zdEltcGwuZ2V0KCkpOworICAg
ICAgICBDQ1Byb3h5OjpzZXRJbXBsVGhyZWFkKGZhbHNlKTsKICAgICB9CiAKLSAgICBtX2NvbW1p
dFBlbmRpbmcgPSBmYWxzZTsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT51cGRhdGVMYXllcnMo
KTsKK30KKwordm9pZCBDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0KGRvdWJsZSBm
cmFtZUJlZ2luVGltZSkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6YmVnaW5G
cmFtZUFuZENvbW1pdCIsIHRoaXMsIDApOworICAgIGlmICghbV9sYXllclRyZWVIb3N0KQorICAg
ICAgICByZXR1cm47CisKKyAgICBiZWdpbkZyYW1lKGZyYW1lQmVnaW5UaW1lKTsKIAotICAgIC8v
IEJsb2NraW5nIGNhbGwgdG8gQ0NUaHJlYWRQcm94eTo6cGVyZm9ybUNvbW1pdAogICAgIENDQ29t
cGxldGlvbkV2ZW50IGNvbXBsZXRpb247Ci0gICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUND
VGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6Y29tbWl0T25DQ1RocmVhZCwgQWxsb3dD
cm9zc1RocmVhZEFjY2VzcygmY29tcGxldGlvbikpKTsKKyAgICBjY1RocmVhZC0+cG9zdFRhc2so
Y3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5Ojpjb21taXRBbmREcmF3T25D
Q1RocmVhZCwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29tcGxldGlvbikpKTsKICAgICBjb21w
bGV0aW9uLndhaXQoKTsKIH0KIAotdm9pZCBDQ1RocmVhZFByb3h5Ojpjb21taXRPbkNDVGhyZWFk
KENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQordm9pZCBDQ1RocmVhZFByb3h5Ojpjb21t
aXRBbmREcmF3T25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbikKIHsKKyAg
ICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUFuZENvbW1pdE9uQ0NUaHJl
YWQiLCB0aGlzLCAwKTsKICAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOwotICAgIFRSQUNFX0VW
RU5UKCJDQ1RocmVhZFByb3h5Ojpjb21taXRPbkNDVGhyZWFkIiwgdGhpcywgMCk7Ci0gICAgbV9s
YXllclRyZWVIb3N0SW1wbC0+YmVnaW5Db21taXQoKTsKLSAgICB7Ci0gICAgICAgIFRSQUNFX0VW
RU5UKCJDQ0xheWVyVHJlZUhvc3Q6OmNvbW1pdCIsIHRoaXMsIDApOwotICAgICAgICBtX2xheWVy
VHJlZUhvc3QtPmNvbW1pdFRvKG1fbGF5ZXJUcmVlSG9zdEltcGwuZ2V0KCkpOworICAgIGlmICgh
bV9sYXllclRyZWVIb3N0SW1wbCkgeworICAgICAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKKyAg
ICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5iZWdpbkNvbW1p
dCgpOworICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0VG8obV9sYXllclRyZWVIb3N0SW1wbC5n
ZXQoKSk7CisgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+Y29tbWl0Q29tcGxldGUoKTsKKyAgICBk
cmF3TGF5ZXJzT25DQ1RocmVhZCgpOworICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPnByZXNlbnQo
KTsKICAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKK30KIAotICAgIG1fbGF5ZXJUcmVlSG9zdElt
cGwtPmNvbW1pdENvbXBsZXRlKCk7Ci0gICAgc2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKCk7Cit2
b2lkIENDVGhyZWFkUHJveHk6OmNvbW1pdEFuZERyYXdBbmRSZWFkYmFja09uQ0NUaHJlYWQodm9p
ZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0LCBDQ0NvbXBsZXRpb25FdmVudCogY29tcGxl
dGlvbiwgYm9vbCogc3VjY2Vzc3MpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6
OmNvbXBvc2l0ZUFuZFJlYWRiYWNrT25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChp
c0ltcGxUaHJlYWQoKSk7CisgICAgaWYgKCFtX2xheWVyVHJlZUhvc3RJbXBsKSB7CisgICAgICAg
ICpzdWNjZXNzcyA9IGZhbHNlOworICAgICAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmRyYXdMYXllcnMo
KTsKKyAgICBBU1NFUlQoIW1fbGF5ZXJUcmVlSG9zdEltcGwtPmlzQ29udGV4dExvc3QoKSk7Cisg
ICAgbV9sYXllclRyZWVIb3N0SW1wbC0+cmVhZGJhY2socGl4ZWxzLCByZWN0KTsKKyAgICBBU1NF
UlQoIW1fbGF5ZXJUcmVlSG9zdEltcGwtPmlzQ29udGV4dExvc3QoKSk7CisgICAgKnN1Y2Nlc3Nz
ID0gdHJ1ZTsKKyAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKIH0KIAogdm9pZCBDQ1RocmVhZFBy
b3h5OjpkcmF3TGF5ZXJzT25DQ1RocmVhZCgpCiB7CiAgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFk
UHJveHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkIiwgdGhpcywgMCk7CiAgICAgQVNTRVJUKGlzSW1w
bFRocmVhZCgpKTsKLSAgICBpZiAobV9sYXllclRyZWVIb3N0SW1wbCkKLSAgICAgICAgbV9sYXll
clRyZWVIb3N0SW1wbC0+ZHJhd0xheWVycygpOworICAgIEFTU0VSVChtX2xheWVyVHJlZUhvc3RJ
bXBsKTsKKworICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmRyYXdMYXllcnMoKTsKKyAgICBBU1NF
UlQoIW1fbGF5ZXJUcmVlSG9zdEltcGwtPmlzQ29udGV4dExvc3QoKSk7CiB9CiAKIHZvaWQgQ0NU
aHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhyZWFkKCkKQEAgLTIzNCwx
MyArMzA1LDEwIEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXdP
bkNDVGhyZWFkKCkKICAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21t
aXRBbmRSZWRyYXdPbkNDVGhyZWFkIiwgdGhpcywgMCk7CiAgICAgQVNTRVJUKGlzSW1wbFRocmVh
ZCgpKTsKICAgICBBU1NFUlQobV9sYXllclRyZWVIb3N0SW1wbCk7Ci0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci19CiAKLXZvaWQgQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNSZWRyYXdPbkNDVGhy
ZWFkKCkKLXsKLSAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNSZWRyYXdP
bkNDVGhyZWFkIiwgdGhpcywgMCk7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgLy8g
VE9ETzogdXNlIHRoZSBDQ1NjaGVkdWxlciBvdCBkZWNpZGUgd2hlbiB0byBtYW5hZ2UgdGhlIGNv
bnZlcnNpb24gb2YgdGhpcworICAgIC8vIGNvbW1pdCByZXF1ZXN0IGludG8gYW4gYWN0dWFsIGJl
Z2luRnJhbWVBbmRDb21taXRPbkNDVGhyZWFkIGNhbGwuCisgICAgYmVnaW5GcmFtZUFuZENvbW1p
dE9uQ0NUaHJlYWQoKTsKIH0KIAogdm9pZCBDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplSW1wbE9u
Q0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFBy
b3h5LmgKaW5kZXggYzhhOTk5NjgwNDE1MDIyYmI0MWMzOGZlYzNhMjliMjRkM2FjMzZkOS4uYWJk
OGUzMTdmZWE0N2NhNjU2ODhmOTQ5ZjdhNWU0YmRmYTQwYTE4YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFk
UHJveHkuaApAQCAtNjEsMjUgKzYxLDI2IEBAIHByaXZhdGU6CiAKICAgICAvLyBDYWxsZWQgb24g
Q0NNYWluVGhyZWFkCiAgICAgdm9pZCBiZWdpbkZyYW1lQW5kQ29tbWl0KGRvdWJsZSBmcmFtZUJl
Z2luVGltZSk7CisgICAgdm9pZCBiZWdpbkZyYW1lKGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CiAK
ICAgICAvLyBDYWxsZWQgb24gQ0NUaHJlYWQKICAgICB2b2lkIGJlZ2luRnJhbWVBbmRDb21taXRP
bkNDVGhyZWFkKCk7Ci0gICAgdm9pZCBjb21taXRPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50
Kik7CisgICAgdm9pZCBjb21taXRBbmREcmF3T25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCop
OworICAgIHZvaWQgY29tbWl0QW5kRHJhd0FuZFJlYWRiYWNrT25DQ1RocmVhZCh2b2lkICpwaXhl
bHMsIGNvbnN0IEludFJlY3QmLCBDQ0NvbXBsZXRpb25FdmVudCosIGJvb2wqIHN1Y2Nlc3NzKTsK
ICAgICB2b2lkIGRyYXdMYXllcnNPbkNDVGhyZWFkKCk7CisgICAgdm9pZCBmaW5pc2hBbGxSZW5k
ZXJpbmdPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50Kik7CiAgICAgdm9pZCBpbml0aWFsaXpl
SW1wbE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsKICAgICB2b2lkIGluaXRpYWxpemVM
YXllclJlbmRlcmVyT25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3QqLCBHcmFwaGljc0NvbnRleHQz
RCosIENDQ29tcGxldGlvbkV2ZW50KiwgYm9vbCogaW5pdGlhbGl6ZVN1Y2NlZWRlZCwgTGF5ZXJS
ZW5kZXJlckNhcGFiaWxpdGllcyopOwogICAgIHZvaWQgc2V0TmVlZHNDb21taXRBbmRSZWRyYXdP
bkNDVGhyZWFkKCk7Ci0gICAgdm9pZCBzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQoKTsKICAgICB2
b2lkIGxheWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50Kik7CiAK
LSAgICAvLyBVc2VkIG9uIG1haW4tdGhyZWFkIG9ubHkuCi0gICAgYm9vbCBtX2NvbW1pdFBlbmRp
bmc7Ci0KICAgICAvLyBBY2Nlc3NlZCBvbiBtYWluIHRocmVhZCBvbmx5LgorICAgIGJvb2wgbV9j
b21taXRSZXF1ZXN0ZWQ7CiAgICAgQ0NMYXllclRyZWVIb3N0KiBtX2xheWVyVHJlZUhvc3Q7CiAg
ICAgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyBtX2xheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXNN
YWluVGhyZWFkQ29weTsKKyAgICBib29sIG1fc3RhcnRlZDsKIAotICAgIC8vIFVzZWQgb24gdGhl
IENDVGhyZWFkLCBidXQgY2hlY2tlZCBvbiBtYWluIHRocmVhZCBkdXJpbmcgaW5pdGlhbGl6YXRp
b24vc2h1dGRvd24uCisgICAgLy8gVXNlZCBvbiB0aGUgQ0NUaHJlYWQgb25seQogICAgIE93blB0
cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBtX2xheWVyVHJlZUhvc3RJbXBsOwogfTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwppbmRleCA3ZjQyMWVkYzE2YTNkNzcwNzM2NjQ4MWJiNTE5ZjhhNDBi
MmYzOWIyLi5hMmM0ZDI0OWFjMDNiZmFhYzBjOWQ1ZjIzYjhkMjlkN2ZiNTk0NmFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDExLTA5LTAyICBOYXQgRHVj
YSAgPG5kdWNhQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEZpbmlzaCBpbXBs
ZW1lbnRhaXRvbiBvZiBDQ1RocmVhZFByb3h5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02NzQxNworCisgICAgICAgIERpc2FibGUgQ0NMYXllclRyZWVI
b3N0VGVzdCBjb21wbGV0ZWx5IGFzIGl0IGRvZXMgbm90CisgICAgICAgIGNvbXBpbGUgd2hlbiB0
aGUgdGhyZWFkZWQgc3dpdGNoIGlzIGVuYWJsZWQuCisKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVy
VHJlZUhvc3RUZXN0LmNwcDoKKyAgICAgICAgKiB0ZXN0cy9DQ1NjaGVkdWxlclRlc3QuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFRFU1QpOgorCiAyMDExLTA4LTI5ICBOYXQgRHVjYSAgPG5kdWNhQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIEludHJvZHVjZSBDQ1NpbmdsZVRocmVh
ZFByb3h5IGluIG9yZGVyIHRvIG1vdmUgTGF5ZXJSZW5kZXJlciB0byBDQ0xheWVyVHJlZUhvc3RJ
bXBsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVl
SG9zdFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhv
c3RUZXN0LmNwcAppbmRleCBkODU0ODA2NTg0ZmYzM2VhMTM1YzZkMDliNTUyZjcwOWVkMDE2NzEw
Li5mZDA3NmVlNTcxMzk1NjRkNzFhMzFlZmUxNTcyMDFkNWFmNzQ3ZGYxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKQEAg
LTI0LDcgKzI0LDggQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaWYgVVNFKFRIUkVBREVE
X0NPTVBPU0lUSU5HKQorLy8gQ0NMYXllclRyZWVIb3N0IGRpc2FibGVkLiBTZWUgYjY3NDE4Lgor
I2lmIDAKIAogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDU2NoZWR1bGVyVGVzdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDU2NoZWR1bGVyVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTk1
Mzk0ZWU5MDU5MmM1NDVhY2EyNTM2YTFkNzFlNzA1YzQzZjA3NQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NTY2hlZHVsZXJUZXN0LmNwcApAQCAtMCww
ICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQ0NTY2hl
ZHVsZXIuaCIKKworI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rl
c3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0
OwordXNpbmcgbmFtZXNwYWNlIHRlc3Rpbmc7CisKK1RFU1QoQ0NTY2hlZHVsZXJUZXN0LCBTdGF0
ZU1hY2hpbmVJZGxlKQoreworICAgIC8vIElkbGUgc3RhdGUKKyAgICBDQ1NjaGVkdWxlcjo6U3Rh
dGUgc3RhdGU7CisgICAgc3RhdGUuZGFtYWdlID0gZmFsc2U7CisgICAgc3RhdGUuYW5pbWF0aW9u
X3JlcXVlc3RlZCA9IGZhbHNlOworICAgIHN0YXRlLm5vbl9yYWZfZHJhd2luZyA9IGZhbHNlOwor
ICAgIHN0YXRlLnRocm90dGxlZCA9IGZhbHNlOworICAgIHN0YXRlLm5vd19pc19iZWZvcmVfbmV4
dF9mcmFtZV90aW1lID0gZmFsc2U7CisgICAgRVhQRUNUX0VRKENDU2NoZWR1bGVyOjpBY3Rpb25O
b3RoaW5nLCBDQ1NjaGVkdWxlcjo6Z2V0QWN0aW9uKHN0YXRlKSk7Cit9CisKK1RFU1QoQ0NTY2hl
ZHVsZXJUZXN0LCBTdGF0ZU1hY2hpbmVEYW1hZ2UpCit7CisgICAgLy8gRGFtYWdlCisgICAgQ0NT
Y2hlZHVsZXI6OlN0YXRlIHN0YXRlOworICAgIHN0YXRlLmRhbWFnZSA9IHRydWU7CisgICAgc3Rh
dGUuYW5pbWF0aW9uX3JlcXVlc3RlZCA9IGZhbHNlOworICAgIHN0YXRlLm5vbl9yYWZfZHJhd2lu
ZyA9IGZhbHNlOworICAgIHN0YXRlLnRocm90dGxlZCA9IGZhbHNlOworICAgIHN0YXRlLm5vd19p
c19iZWZvcmVfbmV4dF9mcmFtZV90aW1lID0gZmFsc2U7CisgICAgRVhQRUNUX0VRKENDU2NoZWR1
bGVyOjpBY3Rpb25Ob3RoaW5nLCBDQ1NjaGVkdWxlcjo6Z2V0QWN0aW9uKHN0YXRlKSk7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107441</attachid>
            <date>2011-09-14 19:01:26 -0700</date>
            <delta_ts>2011-09-15 11:51:23 -0700</delta_ts>
            <desc>Real 2 phase commit</desc>
            <filename>bug-67417-20110914190125.patch</filename>
            <type>text/plain</type>
            <size>21814</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTUxMjMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiNDM5ZGE3NTgwMDU0YzE1
YzNhMWI5ODYyNGZkNjJmNzA3NzgwOTQ1Li40MTUwZmJjYWZiMGUyNzQ4MzU1M2E5MDBhNDJjZjk1
YjU5OTc2Y2Q3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIwMTEtMDktMDIgIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTWFrZSBDQ1Ro
cmVhZFByb3h5IGRyYXcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTY3NDE3CisKKyAgICAgICAgVXBkYXRlIHRoZSBDQ1RocmVhZFByb3h5IHRvIGNvcnJl
Y3RseSBpbXBsZW1lbnQgdGhlIENDUHJveHkKKyAgICAgICAgaW50ZXJmYWNlLCBkbyBhbGwgdGhl
IHJpZ2h0IGNvbW1pdHRpbmcgYW5kIHVwZGF0aW5nIHN0ZXBzLCBhbmQKKyAgICAgICAgZHJhdyBh
IHBpY3R1cmUgb24gdGhlIHNjcmVlbi4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06
OkxheWVyUmVuZGVyZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0hlYWRz
VXBEaXNwbGF5OjplbmFibGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RocmVhZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6
OkNDVGhyZWFkUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6fkNDVGhy
ZWFkUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6Y29tcG9zaXRlQW5k
UmVhZGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6ZmluaXNoQWxsUmVu
ZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmlzU3RhcnRlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdyk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpzZXROZWVkc1JlZHJhdyk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1RocmVhZFByb3h5OjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmZp
bmlzaEFsbFJlbmRlcmluZ09uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQ
cm94eTo6YmVnaW5GcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFBy
b3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJv
eHk6OmNvbW1pdEFuZERyYXdPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFk
UHJveHk6OmNvbW1pdEFuZERyYXdBbmRSZWFkYmFja09uQ0NUaHJlYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NUaHJlYWRQcm94eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhyZWFkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5Lmg6
CisKIDIwMTEtMDktMTQgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODEwMwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggYzcyODE2OTc1ZDIyNDQ4NzZlMTgxY2I5
MDc0MDdiOWVlYTE1YWIxZi4uYjRlYzQ5NGIwZDZlMjVjZGFiOWRiY2RjY2Q2NGExNjE2MTMxZGFj
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC0xNTIsNiArMTUy
LDcgQEAgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0oQ0NMYXll
clRyZWVIb3N0SW1wbCogb3duZXIsCiAgICAgLCBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlKDApCiAg
ICAgLCBtX3NoYXJlZEdlb21ldHJ5UXVhZChGbG9hdFJlY3QoLTAuNWYsIC0wLjVmLCAxLjBmLCAx
LjBmKSkKIHsKKyAgICBkZXByZWNhdGVkVHVybk9mZlZlcmlmaWVyKCk7CiB9CiAKIGJvb2wgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplKCkKQEAgLTE4MSw2ICsxODIsNyBAQCBib29s
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZSgpCiAKIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6fkxheWVyUmVuZGVyZXJDaHJvbWl1bSgpCiB7CisgICAgQVNTRVJUKENDUHJveHk6Omlz
TWFpblRocmVhZCgpKTsKICAgICBtX2hlYWRzVXBEaXNwbGF5LmNsZWFyKCk7IC8vIEV4cGxpY2l0
bHkgZGVzdHJveSB0aGUgSFVEIGJlZm9yZSB0aGUgVGV4dHVyZU1hbmFnZXIgZGllcy4KICAgICBj
bGVhbnVwU2hhcmVkT2JqZWN0cygpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNw
cAppbmRleCA4YzA4NjMwMTBjMjUxOGJkZTk3MTI3ODJjY2E5ZWM2M2NiYWYxZmQwLi4yN2YwY2I5
YzNjMTA0OTFjZWMxNTA0ZjYzOTE0YTA1NzA3YTQxNDcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRz
VXBEaXNwbGF5LmNwcApAQCAtODksNiArODksOSBAQCB2b2lkIENDSGVhZHNVcERpc3BsYXk6Om9u
UHJlc2VudCgpCiAKIGJvb2wgQ0NIZWFkc1VwRGlzcGxheTo6ZW5hYmxlZCgpIGNvbnN0CiB7Cisg
ICAgLy8gRklYTUU6IEhVRCBkb2VzIG5vdCB3b3JrIGluIGNvbXBvc2l0b3IgdGhyZWFkIG1vZGUu
CisgICAgaWYgKHNldHRpbmdzKCkuZW5hYmxlQ29tcG9zaXRvclRocmVhZCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIHJldHVybiBzZXR0aW5ncygpLnNob3dQbGF0Zm9ybUxheWVyVHJlZSB8
fCBzZXR0aW5ncygpLnNob3dGUFNDb3VudGVyOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAK
aW5kZXggYjAyZjFlZjMxNjQ0YWNlOTk1Y2NkNmVjNTlkYjBiYTRiMDIwZTgzYS4uMmJiNDkwMWJh
MDRlNmVlZmE4OTVjNjVhYmExYzM5M2JkZDk2YzdmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNw
cApAQCAtNzksMTAgKzc5LDEyIEBAIENDTGF5ZXJJbXBsOjpDQ0xheWVySW1wbChpbnQgaWQpCiAg
ICAgLCBtX2RlYnVnQm9yZGVyV2lkdGgoMCkKICAgICAsIG1fbGF5ZXJSZW5kZXJlcigwKQogewor
ICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiB9CiAKIENDTGF5ZXJJbXBsOjp+
Q0NMYXllckltcGwoKQogeworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiB9
CiAKIHZvaWQgQ0NMYXllckltcGw6OmFkZENoaWxkKFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNo
aWxkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggY2VhNTc5YzkzNjk3M2Mx
ZWJiYTgyZmY4OGRjMDgxNGRkOWRjYWRiMC4uZjU2YjhhY2I2ODY4NWFkMTRhNDg0ZGY2NjMxMDM2
NGZlZjhlNzhlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC01Nyw2ICs1
Nyw3IEBAIENDTGF5ZXJUcmVlSG9zdDo6Q0NMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9zdENs
aWVudCogY2xpZW50LCBjb25zdCBDQ1NldHRpbmdzCiAgICAgLCBtX3pvb21BbmltYXRvclNjYWxl
KDEpCiAgICAgLCBtX3Zpc2libGUodHJ1ZSkKIHsKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNNYWlu
VGhyZWFkKCkpOwogfQogCiBib29sIENDTGF5ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZSgpCkBAIC0x
MTUsNiArMTE2LDExIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjphbmltYXRlQW5kTGF5b3V0KGRv
dWJsZSBmcmFtZUJlZ2luVGltZSkKICAgICBtX2FuaW1hdGluZyA9IGZhbHNlOwogfQogCisvLyBU
aGlzIGZ1bmN0aW9uIGNvbW1pdHMgdGhlIENDTGF5ZXJUcmVlSG9zdCB0byBhbiBpbXBsIHRyZWUu
IFdoZW4gbW9kaWZ5aW5nCisvLyB0aGlzIGZ1bmN0aW9uLCBrZWVwIGluIG1pbmQgdGhhdCB0aGUg
ZnVuY3Rpb24gKnJ1bnMqIG9uIHRoZSBpbXBsIHRocmVhZCEgQW55CisvLyBjb2RlIHRoYXQgaXMg
bG9naWNhbGx5IGEgbWFpbiB0aHJlYWQgb3BlcmF0aW9uLCBlLmcuIGRlbGV0aW9uIG9mIGEgTGF5
ZXIsCisvLyBzaG91ZGwgYmUgZGVsYXllZCB1bnRpbCB0aGUgQ0NMYXllclRyZWVIb3N0Ojpjb21t
aXRDb21wbGV0ZSwgd2hpY2ggd2lsbCBydW4KKy8vIGFmdGVyIHRoZSBjb21taXQsIGJ1dCBvbiB0
aGUgbWFpbiB0aHJlYWQuCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0VG8oQ0NMYXllclRy
ZWVIb3N0SW1wbCogaG9zdEltcGwpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVh
ZCgpKTsKQEAgLTEyNSwxNCArMTMxLDEyIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojpjb21taXRU
byhDQ0xheWVyVHJlZUhvc3RJbXBsKiBob3N0SW1wbCkKICAgICBjb250ZW50c1RleHR1cmVNYW5h
Z2VyKCktPmRlbGV0ZUV2aWN0ZWRUZXh0dXJlcyhob3N0SW1wbC0+Y29udGV4dCgpKTsKIAogICAg
IHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMobV91cGRhdGVMaXN0LCBob3N0SW1wbC0+Y29udGV4
dCgpKTsKLSAgICBtX3VwZGF0ZUxpc3QuY2xlYXIoKTsKIAogICAgIGhvc3RJbXBsLT5zZXRWaXNp
YmxlKG1fdmlzaWJsZSk7CiAgICAgaG9zdEltcGwtPnNldFpvb21BbmltYXRvclNjYWxlKG1fem9v
bUFuaW1hdG9yU2NhbGUpOwogICAgIGhvc3RJbXBsLT5zZXRWaWV3cG9ydCh2aWV3cG9ydFNpemUo
KSk7CiAKICAgICBob3N0SW1wbC0+bGF5ZXJSZW5kZXJlcigpLT5zZXRDb250ZW50c1RleHR1cmVN
ZW1vcnlVc2VCeXRlcyhtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPmN1cnJlbnRNZW1vcnlVc2VC
eXRlcygpKTsKLSAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnVucHJvdGVjdEFsbFRleHR1
cmVzKCk7CiAKICAgICAvLyBTeW5jaHJvbml6ZSB0cmVlcywgaWYgb25lIGV4aXN0cyBhdCBhbGwu
Li4KICAgICBpZiAocm9vdExheWVyKCkpCkBAIC0xNDMsNiArMTQ3LDEyIEBAIHZvaWQgQ0NMYXll
clRyZWVIb3N0Ojpjb21taXRUbyhDQ0xheWVyVHJlZUhvc3RJbXBsKiBob3N0SW1wbCkKICAgICBt
X2ZyYW1lTnVtYmVyKys7CiB9CiAKK3ZvaWQgQ0NMYXllclRyZWVIb3N0Ojpjb21taXRDb21wbGV0
ZSgpCit7CisgICAgbV91cGRhdGVMaXN0LmNsZWFyKCk7CisgICAgbV9jb250ZW50c1RleHR1cmVN
YW5hZ2VyLT51bnByb3RlY3RBbGxUZXh0dXJlcygpOworfQorCiBQYXNzT3duUHRyPENDVGhyZWFk
PiBDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZUNvbXBvc2l0b3JUaHJlYWQoKQogewogICAgIHJldHVy
biBtX2NsaWVudC0+Y3JlYXRlQ29tcG9zaXRvclRocmVhZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuaAppbmRleCBjNzEzZjAzZTdhZDIzMTc5YWM4Nzc2MzBhMjNjOWY0NzgxYjcxYzU3Li4x
NzMyOWMzODIyMDA5M2Q3MjM5YTZjY2MxYTRiODQxZTRlY2UxZTBiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3Qu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuaApAQCAtOTksNiArOTksNyBAQCBwdWJsaWM6CiAKICAgICAvLyBDQ0xheWVy
VHJlZUhvc3QgaW50ZXJmYWNlIHRvIENDUHJveHkuCiAgICAgdm9pZCBhbmltYXRlQW5kTGF5b3V0
KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CisgICAgdm9pZCBjb21taXRDb21wbGV0ZSgpOwogICAg
IHZvaWQgY29tbWl0VG8oQ0NMYXllclRyZWVIb3N0SW1wbCopOwogICAgIFBhc3NPd25QdHI8Q0NU
aHJlYWQ+IGNyZWF0ZUNvbXBvc2l0b3JUaHJlYWQoKTsKICAgICBQYXNzUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiBjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IGJlYzdjMDJkMjVlZTUxM2E5Mjg1Njc1Y2M3
NGI5MDU0NDE5MzU5MmIuLmM3NWViOThlMmQxYzg2OWY1ZjdkYTY1ZDkxYTE3YzU0MDYxM2E0YTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC00OCwxMCArNDgs
MTIgQEAgQ0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVIb3N0SW1wbChjb25zdCBDQ1Nl
dHRpbmdzJiBzZXR0aW5ncykKICAgICAsIG1fZnJhbWVOdW1iZXIoMCkKICAgICAsIG1fc2V0dGlu
Z3Moc2V0dGluZ3MpCiB7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKIH0K
IAogQ0NMYXllclRyZWVIb3N0SW1wbDo6fkNDTGF5ZXJUcmVlSG9zdEltcGwoKQogeworICAgIEFT
U0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJU
cmVlSG9zdEltcGw6On5DQ0xheWVyVHJlZUhvc3RJbXBsKCkiLCB0aGlzLCAwKTsKICAgICBpZiAo
bV9sYXllclJlbmRlcmVyKQogICAgICAgICBtX2xheWVyUmVuZGVyZXItPmNsb3NlKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Np
bmdsZVRocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCmluZGV4IDJkMjdkNzI5YjM4MjExMzlm
MDgxN2NlZGI0N2VhZWVmYWYzODU4ODcuLmU2ZjliOGQ4NzVlMWY0MTc3ZjQ4YzFhYWMxYjhlNWRk
NzEyNjYyZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCkBAIC0x
NTcsNiArMTU3LDcgQEAgdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdCgp
CiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0VG8obV9sYXllclRyZWVIb3N0SW1wbC5n
ZXQoKSk7CiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbW1pdENvbXBsZXRlKCk7CiAg
ICAgfQorICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0Q29tcGxldGUoKTsKIH0KIAogdm9pZCBD
Q1NpbmdsZVRocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpCkBAIC0yNTAsNiAr
MjUxLDcgQEAgdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21taXRJZk5lZWRlZCgpCiAgICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0VG8obV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSk7
CiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbW1pdENvbXBsZXRlKCk7CiAgICAgfQor
ICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0Q29tcGxldGUoKTsKIH0KIAogYm9vbCBDQ1Npbmds
ZVRocmVhZFByb3h5Ojpkb0NvbXBvc2l0ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCmlu
ZGV4IDEyYjViMzYxYTdiNWMyNmUwZDAwNmI3NzNmMDA4NjcwOTVjODczNjcuLmYyYTE1NTI2NWFm
MTQzNDM5M2ZkZDE1N2Y0Mzk5ZDkxNTY4ODdkMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHku
Y3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCiAj
aW5jbHVkZSAiY2MvQ0NNYWluVGhyZWFkVGFzay5oIgogI2luY2x1ZGUgImNjL0NDVGhyZWFkVGFz
ay5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhy
ZWFkLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CkBAIC00OCw4ICs0OSw5IEBAIFBhc3NPd25Q
dHI8Q0NQcm94eT4gQ0NUaHJlYWRQcm94eTo6Y3JlYXRlKENDTGF5ZXJUcmVlSG9zdCogbGF5ZXJU
cmVlSG9zdCkKIH0KIAogQ0NUaHJlYWRQcm94eTo6Q0NUaHJlYWRQcm94eShDQ0xheWVyVHJlZUhv
c3QqIGxheWVyVHJlZUhvc3QpCi0gICAgOiBtX2NvbW1pdFBlbmRpbmcoZmFsc2UpCisgICAgOiBt
X2NvbW1pdFJlcXVlc3RlZChmYWxzZSkKICAgICAsIG1fbGF5ZXJUcmVlSG9zdChsYXllclRyZWVI
b3N0KQorICAgICwgbV9zdGFydGVkKGZhbHNlKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVh
ZFByb3h5OjpDQ1RocmVhZFByb3h5IiwgdGhpcywgMCk7CiAgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKQEAgLTY2LDggKzY4LDcgQEAgQ0NUaHJlYWRQcm94eTo6fkNDVGhyZWFkUHJveHkoKQog
ewogICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5Ojp+Q0NUaHJlYWRQcm94eSIsIHRoaXMs
IDApOwogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKCFtX2xheWVyVHJl
ZUhvc3RJbXBsKTsgLy8gTWFrZSBzdXJlIHN0b3AoKSBnb3QgY2FsbGVkLgotICAgIEFTU0VSVCgh
bV9sYXllclRyZWVIb3N0KTsgLy8gTWFrZSBzdXJlIHN0b3AoKSBnb3QgY2FsbGVkLgorICAgIEFT
U0VSVCghbV9zdGFydGVkKTsKIAogICAgIG51bVByb3hpZXMtLTsKICAgICBpZiAoIW51bVByb3hp
ZXMpIHsKQEAgLTc2LDkgKzc3LDE3IEBAIENDVGhyZWFkUHJveHk6On5DQ1RocmVhZFByb3h5KCkK
ICAgICB9CiB9CiAKKy8vIEFsbG93IEludFJlY3RzIGFjcm9zcyB0aGUgdGhyZWFkIGJvdW5kYXJ5
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIGZhbHNlLCBJ
bnRSZWN0PiA6IHB1YmxpYyBDcm9zc1RocmVhZENvcGllclBhc3NUaHJvdWdoPEludFJlY3Q+IHsK
K307CisKIGJvb2wgQ0NUaHJlYWRQcm94eTo6Y29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4
ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIEFTU0VSVChtX2xheWVyVHJlZUhvc3QpOworCisgICAgLy8gRklYTUU6IGltcGxlbWVudCBy
ZWFkYmFjazoKKyAgICAvLyAwLiBmaW5pc2hBbGxSZW5kZXJpbmcgLS0tIHdpbGwgbWFrZSBzdXJl
IGFueSBjb21taXQgcGVuZGluZyBoYXMgYmVlbiBkb25lCisgICAgLy8gMS4gc2VuZCBhIGJsb2Nr
aW5nIG1lc3NhZ2UgdG8gb3RoZXIgc2lkZSB0byBkbyBhbm90aGVyIGRyYXdMYXllcnMgYW5kIGEg
cmVhZGJhY2sKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTkwLDEyICs5OSwxOCBAQCBHcmFw
aGljc0NvbnRleHQzRCogQ0NUaHJlYWRQcm94eTo6Y29udGV4dCgpCiAKIHZvaWQgQ0NUaHJlYWRQ
cm94eTo6ZmluaXNoQWxsUmVuZGVyaW5nKCkKIHsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICBpZiAobV9jb21taXRSZXF1ZXN0ZWQpICB7CisgICAgICAgIC8vIEZJWE1FOiBnZXQgdGhl
IGJlZ2luRnJhbWVBbmRDb21taXQgcGFyYW1ldGVycyB3aXRoIGEgYmxvY2tpbmcgY2FsbCB0byB0
aGUgaW1wbCB0aHJlYWQKKyAgICAgICAgLy8gcnVuIGEgYmVnaW5GcmFtZUFuZENvbW1pdAorICAg
IH0KKyAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOworICAgIGNjVGhyZWFkLT5wb3N0
VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OmZpbmlzaEFsbFJl
bmRlcmluZ09uQ0NUaHJlYWQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pKSk7
CisgICAgY29tcGxldGlvbi53YWl0KCk7CiB9CiAKIGJvb2wgQ0NUaHJlYWRQcm94eTo6aXNTdGFy
dGVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9sYXllclRyZWVIb3N0SW1wbDsKKyAgICByZXR1
cm4gbV9zdGFydGVkOwogfQogCiBib29sIENDVGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJl
bmRlcmVyKCkKQEAgLTEzNiwyOSArMTUxLDMyIEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6bG9zZUNv
bXBvc2l0b3JDb250ZXh0KGludCBudW1UaW1lcykKIHZvaWQgQ0NUaHJlYWRQcm94eTo6c2V0TmVl
ZHNDb21taXQoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKG1fY29t
bWl0UGVuZGluZykKKyAgICBpZiAobV9jb21taXRSZXF1ZXN0ZWQpCiAgICAgICAgIHJldHVybjsK
IAogICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdCIsIHRoaXMs
IDApOwotICAgIG1fY29tbWl0UGVuZGluZyA9IHRydWU7Ci0gICAgY2NUaHJlYWQtPnBvc3RUYXNr
KGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRP
bkNDVGhyZWFkKSk7CisgICAgbV9jb21taXRSZXF1ZXN0ZWQgPSB0cnVlOworICAgIGNjVGhyZWFk
LT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OnVwZGF0
ZVNjaGVkdWxlclN0YXRlT25DQ1RocmVhZCwgbV9jb21taXRSZXF1ZXN0ZWQsIG1fcmVkcmF3UmVx
dWVzdGVkKSk7CiB9CiAKIHZvaWQgQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRy
YXcoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKG1fY29tbWl0UGVu
ZGluZykKKyAgICBpZiAobV9jb21taXRSZXF1ZXN0ZWQgJiYgbV9yZWRyYXdSZXF1ZXN0ZWQpCiAg
ICAgICAgIHJldHVybjsKKyAgICBtX2NvbW1pdFJlcXVlc3RlZCA9IHRydWU7CisgICAgbV9yZWRy
YXdSZXF1ZXN0ZWQgPSB0cnVlOwogCiAgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OnNl
dE5lZWRzQ29tbWl0QW5kUmVkcmF3IiwgdGhpcywgMCk7Ci0gICAgbV9jb21taXRQZW5kaW5nID0g
dHJ1ZTsKLSAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZD
Q1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQpKTsKKyAgICBj
Y1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5
Ojp1cGRhdGVTY2hlZHVsZXJTdGF0ZU9uQ0NUaHJlYWQsIG1fY29tbWl0UmVxdWVzdGVkLCBtX3Jl
ZHJhd1JlcXVlc3RlZCkpOwogfQogCiB2b2lkIENDVGhyZWFkUHJveHk6OnNldE5lZWRzUmVkcmF3
KCkKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGNjVGhyZWFkLT5wb3N0VGFz
ayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OnNldE5lZWRzUmVkcmF3
T25DQ1RocmVhZCkpOworICAgIGlmIChtX2NvbW1pdFJlcXVlc3RlZCkgLy8gSW1wbGllcyB0aGF0
IGEgY29tbWl0IGlzIGluIGZsaWdodC4KKyAgICAgICAgcmV0dXJuOworICAgIFRSQUNFX0VWRU5U
KCJDQ1RocmVhZFByb3h5OjpzZXROZWVkc1JlZHJhdyIsIHRoaXMsIDApOworICAgIGNjVGhyZWFk
LT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OnVwZGF0
ZVNjaGVkdWxlclN0YXRlT25DQ1RocmVhZCwgZmFsc2UsIHRydWUpKTsKIH0KIAogdm9pZCBDQ1Ro
cmVhZFByb3h5OjpzdGFydCgpCkBAIC0xNjcsMTIgKzE4NSwxNiBAQCB2b2lkIENDVGhyZWFkUHJv
eHk6OnN0YXJ0KCkKICAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOwogICAgIGNjVGhy
ZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6Omlu
aXRpYWxpemVJbXBsT25DQ1RocmVhZCwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29tcGxldGlv
bikpKTsKICAgICBjb21wbGV0aW9uLndhaXQoKTsKKworICAgIG1fc3RhcnRlZCA9IHRydWU7CiB9
CiAKIHZvaWQgQ0NUaHJlYWRQcm94eTo6c3RvcCgpCiB7CiAgICAgVFJBQ0VfRVZFTlQoIkNDVGhy
ZWFkUHJveHk6OnN0b3AiLCB0aGlzLCAwKTsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgIGlmICghbV9zdGFydGVkKQorICAgICAgICByZXR1cm47CiAgICAgLy8gU3luY2hyb25vdXNs
eSBkZWxldGVzIHRoZSBpbXBsLgogICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CiAg
ICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQ
cm94eTo6bGF5ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJlYWQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nl
c3MoJmNvbXBsZXRpb24pKSk7CkBAIC0xODAsODAgKzIwMiwxMTUgQEAgdm9pZCBDQ1RocmVhZFBy
b3h5OjpzdG9wKCkKIAogICAgIEFTU0VSVCghbV9sYXllclRyZWVIb3N0SW1wbCk7IC8vIHZlcmlm
eSB0aGF0IHRoZSBpbXBsIGRlbGV0ZWQuCiAgICAgbV9sYXllclRyZWVIb3N0ID0gMDsKKyAgICBt
X3N0YXJ0ZWQgPSBmYWxzZTsKK30KKwordm9pZCBDQ1RocmVhZFByb3h5OjpmaW5pc2hBbGxSZW5k
ZXJpbmdPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQoreworICAgIEFT
U0VSVCghbV9iZWdpbkZyYW1lQW5kQ29tbWl0UGVuZGluZ09uQ0NUaHJlYWQpOworICAgIGlmICht
X3JlZHJhd1JlcXVlc3RlZE9uQ0NUaHJlYWQpIHsKKyAgICAgICAgZHJhd0xheWVyc09uQ0NUaHJl
YWQoKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+cHJlc2VudCgpOworICAgICAgICBt
X3JlZHJhd1JlcXVlc3RlZE9uQ0NUaHJlYWQgPSBmYWxzZTsKKyAgICB9CisgICAgbV9sYXllclRy
ZWVIb3N0SW1wbC0+ZmluaXNoQWxsUmVuZGVyaW5nKCk7CisgICAgY29tcGxldGlvbi0+c2lnbmFs
KCk7CiB9CiAKIHZvaWQgQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUFuZENvbW1pdE9uQ0NUaHJl
YWQoKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29t
bWl0T25DQ1RocmVhZCIsIHRoaXMsIDApOwogICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7Ci0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgLy8gRklYTUU6IGNhbGwgYmVnaW5GcmFtZUFu
ZENvbW1pdCBvbiBtYWluIHRocmVhZAorICAgIEFTU0VSVCghbV9iZWdpbkZyYW1lQW5kQ29tbWl0
UGVuZGluZ09uQ0NUaHJlYWQpOworICAgIGRvdWJsZSBmcmFtZUJlZ2luVGltZSA9IGN1cnJlbnRU
aW1lKCk7CisgICAgQ0NNYWluVGhyZWFkOjpwb3N0VGFzayhjcmVhdGVNYWluVGhyZWFkVGFzayh0
aGlzLCAmQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUFuZENvbW1pdCwgZnJhbWVCZWdpblRpbWUp
KTsKIH0KIAogdm9pZCBDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0KGRvdWJsZSBm
cmFtZUJlZ2luVGltZSkKIHsKKyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6YmVnaW5G
cmFtZUFuZENvbW1pdCIsIHRoaXMsIDApOwogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAg
ICAgaWYgKCFtX2xheWVyVHJlZUhvc3QpCiAgICAgICAgIHJldHVybjsKIAotICAgIFRSQUNFX0VW
RU5UKCJDQ1RocmVhZFByb3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21taXQiLCB0aGlzLCAwKTsKLSAg
ICB7Ci0gICAgICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3Q6OmFuaW1hdGVBbmRMYXlv
dXQiLCB0aGlzLCAwKTsKLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5hbmltYXRlQW5kTGF5b3V0
KGZyYW1lQmVnaW5UaW1lKTsKLSAgICB9CisgICAgQVNTRVJUKG1fY29tbWl0UmVxdWVzdGVkKTsK
KworICAgIC8vIEZJWE1FOiByZWNyZWF0ZSB0aGUgY29udGV4dCBpZiBpdCB3YXMgcmVxdWVzdGVk
IGJ5IHRoZSBpbXBsIHRocmVhZAorICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3Q6OmFu
aW1hdGVBbmRMYXlvdXQiLCB0aGlzLCAwKTsKKyAgICBtX2xheWVyVHJlZUhvc3QtPmFuaW1hdGVB
bmRMYXlvdXQoZnJhbWVCZWdpblRpbWUpOworCisgICAgLy8gQ2xlYXIgdGhlIHJlZHJhdyBhbmQg
Y29tbWl0IGZsYWcgYWZ0ZXIgYW5pbWF0ZUFuZExheW91dCBidXQgYmVmb3JlIGluIGNhc2UgYQor
ICAgIC8vIGZvbGxvd3VwIHN0ZXAgY2F1c2VzIGFkZGl0aW9uYWwgaW52YWxpZGF0aW9uCisgICAg
bV9jb21taXRSZXF1ZXN0ZWQgPSBmYWxzZTsKKyAgICBtX3JlZHJhd1JlcXVlc3RlZCA9IGZhbHNl
OwogCi0gICAgbV9jb21taXRQZW5kaW5nID0gZmFsc2U7CisgICAgbV9sYXllclRyZWVIb3N0LT51
cGRhdGVMYXllcnMoKTsKIAotICAgIC8vIEJsb2NraW5nIGNhbGwgdG8gQ0NUaHJlYWRQcm94eTo6
cGVyZm9ybUNvbW1pdAogICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CiAgICAgY2NU
aHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6
Y29tbWl0T25DQ1RocmVhZCwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29tcGxldGlvbikpKTsK
ICAgICBjb21wbGV0aW9uLndhaXQoKTsKKworICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0Q29t
cGxldGUoKTsKIH0KIAogdm9pZCBDQ1RocmVhZFByb3h5Ojpjb21taXRPbkNDVGhyZWFkKENDQ29t
cGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQogeworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFBy
b3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZCIsIHRoaXMsIDApOwogICAgIEFTU0VS
VChpc0ltcGxUaHJlYWQoKSk7Ci0gICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OmNvbW1p
dE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKLSAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5iZWdpbkNv
bW1pdCgpOwotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6Y29t
bWl0IiwgdGhpcywgMCk7Ci0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0VG8obV9sYXll
clRyZWVIb3N0SW1wbC5nZXQoKSk7CisgICAgQVNTRVJUKG1fYmVnaW5GcmFtZUFuZENvbW1pdFBl
bmRpbmdPbkNDVGhyZWFkKTsKKyAgICBtX2JlZ2luRnJhbWVBbmRDb21taXRQZW5kaW5nT25DQ1Ro
cmVhZCA9IGZhbHNlOworICAgIGlmICghbV9sYXllclRyZWVIb3N0SW1wbCkgeworICAgICAgICBj
b21wbGV0aW9uLT5zaWduYWwoKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBtX2xheWVy
VHJlZUhvc3RJbXBsLT5iZWdpbkNvbW1pdCgpOworICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0
VG8obV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSk7CisgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+
Y29tbWl0Q29tcGxldGUoKTsKKwogICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOwogCi0gICAgbV9s
YXllclRyZWVIb3N0SW1wbC0+Y29tbWl0Q29tcGxldGUoKTsKLSAgICBzZXROZWVkc1JlZHJhd09u
Q0NUaHJlYWQoKTsKKyAgICBpZiAobV9yZWRyYXdSZXF1ZXN0ZWRPbkNDVGhyZWFkKSB7CisgICAg
ICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFk
UHJveHk6OmRyYXdMYXllcnNBbmRQcmVzZW50T25DQ1RocmVhZCkpOworICAgICAgICBtX3JlZHJh
d1JlcXVlc3RlZE9uQ0NUaHJlYWQgPSBmYWxzZTsKKyAgICB9CiB9CiAKLXZvaWQgQ0NUaHJlYWRQ
cm94eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQoKQordm9pZCBDQ1RocmVhZFByb3h5OjpkcmF3TGF5
ZXJzQW5kUHJlc2VudE9uQ0NUaHJlYWQoKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFBy
b3h5OjpkcmF3TGF5ZXJzT25DQ1RocmVhZCIsIHRoaXMsIDApOwogICAgIEFTU0VSVChpc0ltcGxU
aHJlYWQoKSk7Ci0gICAgaWYgKG1fbGF5ZXJUcmVlSG9zdEltcGwpCi0gICAgICAgIG1fbGF5ZXJU
cmVlSG9zdEltcGwtPmRyYXdMYXllcnMoKTsKKyAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdEltcGwp
CisgICAgICAgIHJldHVybjsKKyAgICBkcmF3TGF5ZXJzT25DQ1RocmVhZCgpOworICAgIG1fbGF5
ZXJUcmVlSG9zdEltcGwtPnByZXNlbnQoKTsKIH0KIAotdm9pZCBDQ1RocmVhZFByb3h5OjpzZXRO
ZWVkc0NvbW1pdE9uQ0NUaHJlYWQoKQordm9pZCBDQ1RocmVhZFByb3h5OjpkcmF3TGF5ZXJzT25D
Q1RocmVhZCgpCiB7Ci0gICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OnNldE5lZWRzQ29t
bWl0T25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5
OjpkcmF3TGF5ZXJzT25DQ1RocmVhZCIsIHRoaXMsIDApOwogICAgIEFTU0VSVChpc0ltcGxUaHJl
YWQoKSk7CiAgICAgQVNTRVJUKG1fbGF5ZXJUcmVlSG9zdEltcGwpOwotICAgIC8vIEZJWE1FOiBO
b3QgeWV0IGltcGxlbWVudGVkLCBzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTY3NDE3Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICBtX2xheWVyVHJl
ZUhvc3RJbXBsLT5kcmF3TGF5ZXJzKCk7CisgICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3RJbXBs
LT5pc0NvbnRleHRMb3N0KCkpOwogfQogCi12b2lkIENDVGhyZWFkUHJveHk6OnNldE5lZWRzQ29t
bWl0QW5kUmVkcmF3T25DQ1RocmVhZCgpCit2b2lkIENDVGhyZWFkUHJveHk6OnVwZGF0ZVNjaGVk
dWxlclN0YXRlT25DQ1RocmVhZChib29sIGNvbW1pdFJlcXVlc3RlZCwgYm9vbCByZWRyYXdSZXF1
ZXN0ZWQpCiB7Ci0gICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0
QW5kUmVkcmF3T25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVh
ZFByb3h5OjpzZXROZWVkc0NvbW1pdE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKICAgICBBU1NFUlQo
aXNJbXBsVGhyZWFkKCkpOwogICAgIEFTU0VSVChtX2xheWVyVHJlZUhvc3RJbXBsKTsKLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KIAotdm9pZCBDQ1RocmVhZFByb3h5OjpzZXROZWVkc1Jl
ZHJhd09uQ0NUaHJlYWQoKQotewotICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpzZXRO
ZWVkc1JlZHJhd09uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAvLyBGSVhNRTogdXNlIENDU2NoZWR1bGVyIHRvIGRlY2lkZSB3aGVuIHRvIG1hbmFn
ZSB0aGUgY29udmVyc2lvbiBvZiB0aGlzCisgICAgLy8gY29tbWl0IHJlcXVlc3QgaW50byBhbiBh
Y3R1YWwgYmVnaW5GcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQgY2FsbC4KKyAgICBtX3JlZHJhd1Jl
cXVlc3RlZE9uQ0NUaHJlYWQgfD0gcmVkcmF3UmVxdWVzdGVkOworICAgIGlmICghbV9iZWdpbkZy
YW1lQW5kQ29tbWl0UGVuZGluZ09uQ0NUaHJlYWQpIHsKKyAgICAgICAgYmVnaW5GcmFtZUFuZENv
bW1pdE9uQ0NUaHJlYWQoKTsKKyAgICAgICAgbV9iZWdpbkZyYW1lQW5kQ29tbWl0UGVuZGluZ09u
Q0NUaHJlYWQgPSB0cnVlOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghY29tbWl0
UmVxdWVzdGVkKQorICAgICAgICBkcmF3TGF5ZXJzT25DQ1RocmVhZCgpOwogfQogCiB2b2lkIEND
VGhyZWFkUHJveHk6OmluaXRpYWxpemVJbXBsT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCog
Y29tcGxldGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaAppbmRleCAyNDY3NzI0MGNhYWE2OTEy
Njc2ZDdlZGZlMGZhYjJjYzIxMjYyZWMyLi4zNzI5ZjY0ZWQ2Nzk2ZDY0ZjYzZjgxN2RhMWJmNThj
YjVkMWMxOGE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oCkBAIC02MywyMyArNjMsMjUgQEAg
cHJpdmF0ZToKICAgICAvLyBDYWxsZWQgb24gQ0NUaHJlYWQKICAgICB2b2lkIGJlZ2luRnJhbWVB
bmRDb21taXRPbkNDVGhyZWFkKCk7CiAgICAgdm9pZCBjb21taXRPbkNDVGhyZWFkKENDQ29tcGxl
dGlvbkV2ZW50Kik7CisgICAgdm9pZCBkcmF3TGF5ZXJzQW5kUHJlc2VudE9uQ0NUaHJlYWQoKTsK
ICAgICB2b2lkIGRyYXdMYXllcnNPbkNDVGhyZWFkKCk7CisgICAgdm9pZCBmaW5pc2hBbGxSZW5k
ZXJpbmdPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50Kik7CiAgICAgdm9pZCBpbml0aWFsaXpl
SW1wbE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsKICAgICB2b2lkIGluaXRpYWxpemVM
YXllclJlbmRlcmVyT25DQ1RocmVhZChHcmFwaGljc0NvbnRleHQzRCosIENDQ29tcGxldGlvbkV2
ZW50KiwgYm9vbCogaW5pdGlhbGl6ZVN1Y2NlZWRlZCwgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGll
cyopOwogICAgIHZvaWQgc2V0TmVlZHNDb21taXRPbkNDVGhyZWFkKCk7Ci0gICAgdm9pZCBzZXRO
ZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQoKTsKLSAgICB2b2lkIHNldE5lZWRzUmVkcmF3
T25DQ1RocmVhZCgpOworICAgIHZvaWQgdXBkYXRlU2NoZWR1bGVyU3RhdGVPbkNDVGhyZWFkKGJv
b2wgY29tbWl0UmVxdWVzdGVkLCBib29sIHJlZHJhd1JlcXVlc3RlZCk7CiAgICAgdm9pZCBsYXll
clRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCopOwogCi0gICAgLy8g
VXNlZCBvbiBtYWluLXRocmVhZCBvbmx5LgotICAgIGJvb2wgbV9jb21taXRQZW5kaW5nOwotCiAg
ICAgLy8gQWNjZXNzZWQgb24gbWFpbiB0aHJlYWQgb25seS4KKyAgICBib29sIG1fY29tbWl0UmVx
dWVzdGVkOwogICAgIENDTGF5ZXJUcmVlSG9zdCogbV9sYXllclRyZWVIb3N0OwogICAgIExheWVy
UmVuZGVyZXJDYXBhYmlsaXRpZXMgbV9sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzTWFpblRocmVh
ZENvcHk7CisgICAgYm9vbCBtX3N0YXJ0ZWQ7CiAKLSAgICAvLyBVc2VkIG9uIHRoZSBDQ1RocmVh
ZCwgYnV0IGNoZWNrZWQgb24gbWFpbiB0aHJlYWQgZHVyaW5nIGluaXRpYWxpemF0aW9uL3NodXRk
b3duLgorICAgIC8vIFVzZWQgb24gdGhlIENDVGhyZWFkIG9ubHkKICAgICBPd25QdHI8Q0NMYXll
clRyZWVIb3N0SW1wbD4gbV9sYXllclRyZWVIb3N0SW1wbDsKKyAgICBib29sIG1fYmVnaW5GcmFt
ZUFuZENvbW1pdFBlbmRpbmdPbkNDVGhyZWFkOworICAgIGJvb2wgbV9yZWRyYXdSZXF1ZXN0ZWRP
bkNDVGhyZWFkOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBkYzhiMWYz
MzdjZWRiMTk0NGFhMzZiZjA2OTkwYjNlN2Y2MDFkODU3Li5jMDExYTYzYmQ5ZDY2MmViNmUzNGJl
OGExYzkwMDAwNzNmMTg4Nzc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDEzIEBACisyMDExLTA5LTAyICBOYXQgRHVjYSAgPG5kdWNhQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBbY2hyb21pdW1dIE1ha2UgeUNDVGhyZWFkUHJveHkgZHJhdworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc0MTcKKworICAgICAgICBEaXNhYmxl
IENDTGF5ZXJUcmVlSG9zdFRlc3QgY29tcGxldGVseSBhcyBpdCBkb2VzIG5vdAorICAgICAgICBj
b21waWxlIHdoZW4gdGhlIHRocmVhZGVkIHN3aXRjaCBpcyBlbmFibGVkLgorCisgICAgICAgICog
dGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHA6CisKIDIwMTEtMDktMTQgIEFuZGVycyBDYXJs
c3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggQ2hyb21pdW0gYnVpbGQu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9z
dFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RU
ZXN0LmNwcAppbmRleCBkODU0ODA2NTg0ZmYzM2VhMTM1YzZkMDliNTUyZjcwOWVkMDE2NzEwLi5m
ZDA3NmVlNTcxMzk1NjRkNzFhMzFlZmUxNTcyMDFkNWFmNzQ3ZGYxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKQEAgLTI0
LDcgKzI0LDggQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaWYgVVNFKFRIUkVBREVEX0NP
TVBPU0lUSU5HKQorLy8gQ0NMYXllclRyZWVIb3N0IGRpc2FibGVkLiBTZWUgYjY3NDE4LgorI2lm
IDAKIAogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107523</attachid>
            <date>2011-09-15 11:51:26 -0700</date>
            <delta_ts>2011-09-15 18:22:49 -0700</delta_ts>
            <desc>New hotness</desc>
            <filename>bug-67417-20110915115125.patch</filename>
            <type>text/plain</type>
            <size>25585</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTUxMjMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiNDM5ZGE3NTgwMDU0YzE1
YzNhMWI5ODYyNGZkNjJmNzA3NzgwOTQ1Li40MTUwZmJjYWZiMGUyNzQ4MzU1M2E5MDBhNDJjZjk1
YjU5OTc2Y2Q3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIwMTEtMDktMDIgIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTWFrZSBDQ1Ro
cmVhZFByb3h5IGRyYXcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTY3NDE3CisKKyAgICAgICAgVXBkYXRlIHRoZSBDQ1RocmVhZFByb3h5IHRvIGNvcnJl
Y3RseSBpbXBsZW1lbnQgdGhlIENDUHJveHkKKyAgICAgICAgaW50ZXJmYWNlLCBkbyBhbGwgdGhl
IHJpZ2h0IGNvbW1pdHRpbmcgYW5kIHVwZGF0aW5nIHN0ZXBzLCBhbmQKKyAgICAgICAgZHJhdyBh
IHBpY3R1cmUgb24gdGhlIHNjcmVlbi4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06
OkxheWVyUmVuZGVyZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0hlYWRz
VXBEaXNwbGF5OjplbmFibGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RocmVhZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6
OkNDVGhyZWFkUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6fkNDVGhy
ZWFkUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6Y29tcG9zaXRlQW5k
UmVhZGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6ZmluaXNoQWxsUmVu
ZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmlzU3RhcnRlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdyk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpzZXROZWVkc1JlZHJhdyk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1RocmVhZFByb3h5OjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmZp
bmlzaEFsbFJlbmRlcmluZ09uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQ
cm94eTo6YmVnaW5GcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFBy
b3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJv
eHk6OmNvbW1pdEFuZERyYXdPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFk
UHJveHk6OmNvbW1pdEFuZERyYXdBbmRSZWFkYmFja09uQ0NUaHJlYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NUaHJlYWRQcm94eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhyZWFkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5Lmg6
CisKIDIwMTEtMDktMTQgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODEwMwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCmluZGV4IDY3MGVhM2MxODg5ZTgwNWQx
NTc1OGI1ZGQ5MmU3ZTk0MGMwNzA4MWQuLjI0Zjg0YmVkNGY3NWY1YTY3NmEwNTRjNTFhMDU4YWI3
MjY1MDBmMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lu
dFJlY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgK
QEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgSW50UmVjdF9oCiAjZGVmaW5lIEludFJlY3RfaAog
CisjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRDb3BpZXIuaCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtMjU3LDYgKzI1OCwxMCBAQCBJbnRSZWN0IGVu
Y2xvc2luZ0ludFJlY3QoY29uc3QgQ0dSZWN0Jik7CiBJbnRSZWN0IGVuY2xvc2luZ0ludFJlY3Qo
Y29uc3QgTlNSZWN0Jik7CiAjZW5kaWYKIAorLy8gQWxsb3cgSW50UmVjdHMgdG8gbW92ZSBhY3Jv
c3MgdGhyZWFkIGJvdW5kYXJpZXMuCit0ZW1wbGF0ZTw+IHN0cnVjdCBDcm9zc1RocmVhZENvcGll
ckJhc2U8ZmFsc2UsIGZhbHNlLCBJbnRSZWN0PiA6IHB1YmxpYyBDcm9zc1RocmVhZENvcGllclBh
c3NUaHJvdWdoPEludFJlY3Q+IHsKK307CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIEludFJlY3RfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5k
ZXggYzcyODE2OTc1ZDIyNDQ4NzZlMTgxY2I5MDc0MDdiOWVlYTE1YWIxZi4uNjIwM2I1YjE2NGFk
ZjkwZDg4ZjE5NzIxMWQwM2JhNmIyZWRiNzY1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uY3BwCkBAIC0xODEsNiArMTgxLDcgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmluaXRpYWxpemUoKQogCiBMYXllclJlbmRlcmVyQ2hyb21pdW06On5MYXllclJlbmRlcmVy
Q2hyb21pdW0oKQogeworICAgIEFTU0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQoKSk7CiAgICAg
bV9oZWFkc1VwRGlzcGxheS5jbGVhcigpOyAvLyBFeHBsaWNpdGx5IGRlc3Ryb3kgdGhlIEhVRCBi
ZWZvcmUgdGhlIFRleHR1cmVNYW5hZ2VyIGRpZXMuCiAgICAgY2xlYW51cFNoYXJlZE9iamVjdHMo
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAKaW5kZXggOGMwODYzMDEwYzI1
MThiZGU5NzEyNzgyY2NhOWVjNjNjYmFmMWZkMC4uMjdmMGNiOWMzYzEwNDkxY2VjMTUwNGY2Mzkx
NGEwNTcwN2E0MTQ3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAKQEAgLTg5
LDYgKzg5LDkgQEAgdm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjpvblByZXNlbnQoKQogCiBib29sIEND
SGVhZHNVcERpc3BsYXk6OmVuYWJsZWQoKSBjb25zdAogeworICAgIC8vIEZJWE1FOiBIVUQgZG9l
cyBub3Qgd29yayBpbiBjb21wb3NpdG9yIHRocmVhZCBtb2RlLgorICAgIGlmIChzZXR0aW5ncygp
LmVuYWJsZUNvbXBvc2l0b3JUaHJlYWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1
cm4gc2V0dGluZ3MoKS5zaG93UGxhdGZvcm1MYXllclRyZWUgfHwgc2V0dGluZ3MoKS5zaG93RlBT
Q291bnRlcjsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCmluZGV4IGIwMmYxZWYzMTY0NGFj
ZTk5NWNjZDZlYzU5ZGIwYmE0YjAyMGU4M2EuLjJiYjQ5MDFiYTA0ZTZlZWZhODk1YzY1YWJhMWMz
OTNiZGQ5NmM3ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKQEAgLTc5LDEwICs3OSwxMiBA
QCBDQ0xheWVySW1wbDo6Q0NMYXllckltcGwoaW50IGlkKQogICAgICwgbV9kZWJ1Z0JvcmRlcldp
ZHRoKDApCiAgICAgLCBtX2xheWVyUmVuZGVyZXIoMCkKIHsKKyAgICBBU1NFUlQoQ0NQcm94eTo6
aXNJbXBsVGhyZWFkKCkpOwogfQogCiBDQ0xheWVySW1wbDo6fkNDTGF5ZXJJbXBsKCkKIHsKKyAg
ICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogfQogCiB2b2lkIENDTGF5ZXJJbXBs
OjphZGRDaGlsZChQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuY3BwCmluZGV4IGNlYTU3OWM5MzY5NzNjMWViYmE4MmZmODhkYzA4MTRkZDlk
Y2FkYjAuLjk4YjYxYmMxYzA5ZmE3Y2M0MzliOGI0ZjI5ZjNmZDQ2MGJiYjZkM2UgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtNTcsNiArNTcsNyBAQCBDQ0xheWVyVHJlZUhv
c3Q6OkNDTGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVudCwgY29uc3Qg
Q0NTZXR0aW5ncwogICAgICwgbV96b29tQW5pbWF0b3JTY2FsZSgxKQogICAgICwgbV92aXNpYmxl
KHRydWUpCiB7CisgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKIH0KIAogYm9v
bCBDQ0xheWVyVHJlZUhvc3Q6OmluaXRpYWxpemUoKQpAQCAtMTE1LDYgKzExNiwxMSBAQCB2b2lk
IENDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUp
CiAgICAgbV9hbmltYXRpbmcgPSBmYWxzZTsKIH0KIAorLy8gVGhpcyBmdW5jdGlvbiBjb21taXRz
IHRoZSBDQ0xheWVyVHJlZUhvc3QgdG8gYW4gaW1wbCB0cmVlLiBXaGVuIG1vZGlmeWluZworLy8g
dGhpcyBmdW5jdGlvbiwga2VlcCBpbiBtaW5kIHRoYXQgdGhlIGZ1bmN0aW9uICpydW5zKiBvbiB0
aGUgaW1wbCB0aHJlYWQhIEFueQorLy8gY29kZSB0aGF0IGlzIGxvZ2ljYWxseSBhIG1haW4gdGhy
ZWFkIG9wZXJhdGlvbiwgZS5nLiBkZWxldGlvbiBvZiBhIExheWVyQ2hyb21pdW0sCisvLyBzaG91
bGQgYmUgZGVsYXllZCB1bnRpbCB0aGUgQ0NMYXllclRyZWVIb3N0Ojpjb21taXRDb21wbGV0ZSwg
d2hpY2ggd2lsbCBydW4KKy8vIGFmdGVyIHRoZSBjb21taXQsIGJ1dCBvbiB0aGUgbWFpbiB0aHJl
YWQuCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0VG8oQ0NMYXllclRyZWVIb3N0SW1wbCog
aG9zdEltcGwpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKQEAgLTEy
NSwxNCArMTMxLDEyIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojpjb21taXRUbyhDQ0xheWVyVHJl
ZUhvc3RJbXBsKiBob3N0SW1wbCkKICAgICBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCktPmRlbGV0
ZUV2aWN0ZWRUZXh0dXJlcyhob3N0SW1wbC0+Y29udGV4dCgpKTsKIAogICAgIHVwZGF0ZUNvbXBv
c2l0b3JSZXNvdXJjZXMobV91cGRhdGVMaXN0LCBob3N0SW1wbC0+Y29udGV4dCgpKTsKLSAgICBt
X3VwZGF0ZUxpc3QuY2xlYXIoKTsKIAogICAgIGhvc3RJbXBsLT5zZXRWaXNpYmxlKG1fdmlzaWJs
ZSk7CiAgICAgaG9zdEltcGwtPnNldFpvb21BbmltYXRvclNjYWxlKG1fem9vbUFuaW1hdG9yU2Nh
bGUpOwogICAgIGhvc3RJbXBsLT5zZXRWaWV3cG9ydCh2aWV3cG9ydFNpemUoKSk7CiAKICAgICBo
b3N0SW1wbC0+bGF5ZXJSZW5kZXJlcigpLT5zZXRDb250ZW50c1RleHR1cmVNZW1vcnlVc2VCeXRl
cyhtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPmN1cnJlbnRNZW1vcnlVc2VCeXRlcygpKTsKLSAg
ICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnVucHJvdGVjdEFsbFRleHR1cmVzKCk7CiAKICAg
ICAvLyBTeW5jaHJvbml6ZSB0cmVlcywgaWYgb25lIGV4aXN0cyBhdCBhbGwuLi4KICAgICBpZiAo
cm9vdExheWVyKCkpCkBAIC0xNDMsNiArMTQ3LDEyIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojpj
b21taXRUbyhDQ0xheWVyVHJlZUhvc3RJbXBsKiBob3N0SW1wbCkKICAgICBtX2ZyYW1lTnVtYmVy
Kys7CiB9CiAKK3ZvaWQgQ0NMYXllclRyZWVIb3N0Ojpjb21taXRDb21wbGV0ZSgpCit7CisgICAg
bV91cGRhdGVMaXN0LmNsZWFyKCk7CisgICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT51bnBy
b3RlY3RBbGxUZXh0dXJlcygpOworfQorCiBQYXNzT3duUHRyPENDVGhyZWFkPiBDQ0xheWVyVHJl
ZUhvc3Q6OmNyZWF0ZUNvbXBvc2l0b3JUaHJlYWQoKQogewogICAgIHJldHVybiBtX2NsaWVudC0+
Y3JlYXRlQ29tcG9zaXRvclRocmVhZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAppbmRl
eCBjNzEzZjAzZTdhZDIzMTc5YWM4Nzc2MzBhMjNjOWY0NzgxYjcxYzU3Li4xNzMyOWMzODIyMDA5
M2Q3MjM5YTZjY2MxYTRiODQxZTRlY2UxZTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3Qu
aApAQCAtOTksNiArOTksNyBAQCBwdWJsaWM6CiAKICAgICAvLyBDQ0xheWVyVHJlZUhvc3QgaW50
ZXJmYWNlIHRvIENDUHJveHkuCiAgICAgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFt
ZUJlZ2luVGltZSk7CisgICAgdm9pZCBjb21taXRDb21wbGV0ZSgpOwogICAgIHZvaWQgY29tbWl0
VG8oQ0NMYXllclRyZWVIb3N0SW1wbCopOwogICAgIFBhc3NPd25QdHI8Q0NUaHJlYWQ+IGNyZWF0
ZUNvbXBvc2l0b3JUaHJlYWQoKTsKICAgICBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBj
cmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdEltcGwuY3BwCmluZGV4IGJlYzdjMDJkMjVlZTUxM2E5Mjg1Njc1Y2M3NGI5MDU0NDE5MzU5
MmIuLmM3NWViOThlMmQxYzg2OWY1ZjdkYTY1ZDkxYTE3YzU0MDYxM2E0YTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC00OCwxMCArNDgsMTIgQEAgQ0NMYXll
clRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVIb3N0SW1wbChjb25zdCBDQ1NldHRpbmdzJiBzZXR0
aW5ncykKICAgICAsIG1fZnJhbWVOdW1iZXIoMCkKICAgICAsIG1fc2V0dGluZ3Moc2V0dGluZ3Mp
CiB7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKIH0KIAogQ0NMYXllclRy
ZWVIb3N0SW1wbDo6fkNDTGF5ZXJUcmVlSG9zdEltcGwoKQogeworICAgIEFTU0VSVChDQ1Byb3h5
Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6
On5DQ0xheWVyVHJlZUhvc3RJbXBsKCkiLCB0aGlzLCAwKTsKICAgICBpZiAobV9sYXllclJlbmRl
cmVyKQogICAgICAgICBtX2xheWVyUmVuZGVyZXItPmNsb3NlKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFBy
b3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
U2luZ2xlVGhyZWFkUHJveHkuY3BwCmluZGV4IDJkMjdkNzI5YjM4MjExMzlmMDgxN2NlZGI0N2Vh
ZWVmYWYzODU4ODcuLjAwMmE0YWI3NjUwMWY1NzEwMjUzZmViYjk1NTc4MWEwYTVhNmNiYTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
U2luZ2xlVGhyZWFkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCkBAIC0xMTEsOCArMTExLDE1
IEBAIEdyYXBoaWNzQ29udGV4dDNEKiBDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb250ZXh0KCkKIHZv
aWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6ZmluaXNoQWxsUmVuZGVyaW5nKCkKIHsKICAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwotICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKLSAgICBt
X2xheWVyVHJlZUhvc3RJbXBsLT5maW5pc2hBbGxSZW5kZXJpbmcoKTsKKyAgICBpZiAoIXJlY3Jl
YXRlQ29udGV4dElmTmVlZGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbW1pdElmTmVl
ZGVkKCk7CisKKyAgICB7CisgICAgICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICAg
ICAgbV9sYXllclRyZWVIb3N0SW1wbC0+ZmluaXNoQWxsUmVuZGVyaW5nKCk7CisgICAgfQogfQog
CiBib29sIENDU2luZ2xlVGhyZWFkUHJveHk6OmlzU3RhcnRlZCgpIGNvbnN0CkBAIC0xNTcsNiAr
MTY0LDcgQEAgdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdCgpCiAgICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0VG8obV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSk7
CiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbW1pdENvbXBsZXRlKCk7CiAgICAgfQor
ICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0Q29tcGxldGUoKTsKIH0KIAogdm9pZCBDQ1Npbmds
ZVRocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpCkBAIC0yNTAsNiArMjU4LDcg
QEAgdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21taXRJZk5lZWRlZCgpCiAgICAgICAgIG1f
bGF5ZXJUcmVlSG9zdC0+Y29tbWl0VG8obV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSk7CiAgICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbW1pdENvbXBsZXRlKCk7CiAgICAgfQorICAgIG1f
bGF5ZXJUcmVlSG9zdC0+Y29tbWl0Q29tcGxldGUoKTsKIH0KIAogYm9vbCBDQ1NpbmdsZVRocmVh
ZFByb3h5Ojpkb0NvbXBvc2l0ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCmluZGV4IDEy
YjViMzYxYTdiNWMyNmUwZDAwNmI3NzNmMDA4NjcwOTVjODczNjcuLjA0N2I0ZGZkMzhkNjI2YTQ3
ODM2ZWEyNDQ5NjVlNjM3ODM3ZTU2ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCkBA
IC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCiAjaW5jbHVk
ZSAiY2MvQ0NNYWluVGhyZWFkVGFzay5oIgogI2luY2x1ZGUgImNjL0NDVGhyZWFkVGFzay5oIgor
I2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
CiAKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CkBAIC00OCw4ICs0OSw5IEBAIFBhc3NPd25QdHI8Q0NQ
cm94eT4gQ0NUaHJlYWRQcm94eTo6Y3JlYXRlKENDTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9z
dCkKIH0KIAogQ0NUaHJlYWRQcm94eTo6Q0NUaHJlYWRQcm94eShDQ0xheWVyVHJlZUhvc3QqIGxh
eWVyVHJlZUhvc3QpCi0gICAgOiBtX2NvbW1pdFBlbmRpbmcoZmFsc2UpCisgICAgOiBtX2NvbW1p
dFJlcXVlc3RlZChmYWxzZSkKICAgICAsIG1fbGF5ZXJUcmVlSG9zdChsYXllclRyZWVIb3N0KQor
ICAgICwgbV9zdGFydGVkKGZhbHNlKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5
OjpDQ1RocmVhZFByb3h5IiwgdGhpcywgMCk7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
QEAgLTY2LDggKzY4LDcgQEAgQ0NUaHJlYWRQcm94eTo6fkNDVGhyZWFkUHJveHkoKQogewogICAg
IFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5Ojp+Q0NUaHJlYWRQcm94eSIsIHRoaXMsIDApOwog
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3RJ
bXBsKTsgLy8gTWFrZSBzdXJlIHN0b3AoKSBnb3QgY2FsbGVkLgotICAgIEFTU0VSVCghbV9sYXll
clRyZWVIb3N0KTsgLy8gTWFrZSBzdXJlIHN0b3AoKSBnb3QgY2FsbGVkLgorICAgIEFTU0VSVCgh
bV9zdGFydGVkKTsKIAogICAgIG51bVByb3hpZXMtLTsKICAgICBpZiAoIW51bVByb3hpZXMpIHsK
QEAgLTc4LDggKzc5LDI4IEBAIENDVGhyZWFkUHJveHk6On5DQ1RocmVhZFByb3h5KCkKIAogYm9v
bCBDQ1RocmVhZFByb3h5Ojpjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMsIGNvbnN0
IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJu
IGZhbHNlOworICAgIEFTU0VSVChtX2xheWVyVHJlZUhvc3QpOworCisgICAgZmluaXNoQWxsUmVu
ZGVyaW5nKCk7CisgICAgYm9vbCBzdWNjZXNzOworICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBs
ZXRpb247CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAm
Q0NUaHJlYWRQcm94eTo6ZHJhd0xheWVyc0FuZFJlYWRiYWNrT25DQ1RocmVhZCwgQWxsb3dDcm9z
c1RocmVhZEFjY2VzcygmY29tcGxldGlvbiksIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJnN1Y2Nl
c3MpLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHBpeGVscyksIHJlY3QpKTsKKyAgICBjb21wbGV0
aW9uLndhaXQoKTsKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKwordm9pZCBDQ1RocmVhZFByb3h5
OjpkcmF3TGF5ZXJzQW5kUmVhZGJhY2tPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21w
bGV0aW9uLCBib29sKiBzdWNjZXNzLCB2b2lkKiBwaXhlbHMsIGNvbnN0IEludFJlY3QmIHJlY3Qp
Cit7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKyAgICBpZiAoIW1fbGF5
ZXJUcmVlSG9zdEltcGwpIHsKKyAgICAgICAgKnN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgY29t
cGxldGlvbi0+c2lnbmFsKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZHJhd0xheWVy
c09uQ0NUaHJlYWQoKTsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5yZWFkYmFjayhwaXhlbHMs
IHJlY3QpOworICAgICpzdWNjZXNzID0gbV9sYXllclRyZWVIb3N0SW1wbC0+aXNDb250ZXh0TG9z
dCgpOworICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOwogfQogCiBHcmFwaGljc0NvbnRleHQzRCog
Q0NUaHJlYWRQcm94eTo6Y29udGV4dCgpCkBAIC05MCwxMiArMTExLDM0IEBAIEdyYXBoaWNzQ29u
dGV4dDNEKiBDQ1RocmVhZFByb3h5Ojpjb250ZXh0KCkKIAogdm9pZCBDQ1RocmVhZFByb3h5Ojpm
aW5pc2hBbGxSZW5kZXJpbmcoKQogewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIEFT
U0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQoKSk7CisgICAgLy8gSWYgYSBjb21taXQgaXMgcGVu
ZGluZywgcGVyZm9ybSB0aGUgY29tbWl0IGZpcnN0LgorICAgIGlmIChtX2NvbW1pdFJlcXVlc3Rl
ZCkgIHsKKyAgICAgICAgLy8gVGhpcyBiaXQgb2YgY29kZSBpcyB1Z2xpZXIgdGhhbiBpdCBzaG91
bGQgYmUgYmVjYXVzZSByZXR1cm5pbmcKKyAgICAgICAgLy8gcG9pbnRlcnMgdmlhIHRoZSBDQ1Ro
cmVhZCB0YXNrIG1vZGVsIGlzIHJlYWxseSBtZXNzeS4gRWZmZWN0aXZlbHksIHdlCisgICAgICAg
IC8vIGFyZSBtYWtpbmcgYSBibG9ja2luZyBjYWxsIHRvIGNyZWF0ZUJlZ2luRnJhbWVBbmRDb21t
aXRUYXNrT25DQ1RocmVhZCwKKyAgICAgICAgLy8gYW5kIHRyeWluZyB0byBnZXQgdGhlIENDTWFp
blRocmVhZDo6VGFzayBpdCByZXR1cm5zIHNvIHdlIGNhbiBydW4gaXQuCisgICAgICAgIE93blB0
cjxDQ01haW5UaHJlYWQ6OlRhc2s+IGJlZ2luRnJhbWVBbmRDb21taXRUYXNrOworICAgICAgICB7
CisgICAgICAgICAgICBDQ01haW5UaHJlYWQ6OlRhc2sqIHRhc2tQdHI7CisgICAgICAgICAgICBD
Q0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOworICAgICAgICAgICAgY2NUaHJlYWQtPnBvc3RU
YXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6Y3JlYXRlQmVnaW5G
cmFtZUFuZENvbW1pdFRhc2tPbkNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21w
bGV0aW9uKSwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmdGFza1B0cikpKTsKKyAgICAgICAgICAg
IGNvbXBsZXRpb24ud2FpdCgpOworICAgICAgICAgICAgYmVnaW5GcmFtZUFuZENvbW1pdFRhc2sg
PSBhZG9wdFB0cih0YXNrUHRyKTsKKyAgICAgICAgfQorCisgICAgICAgIGJlZ2luRnJhbWVBbmRD
b21taXRUYXNrLT5wZXJmb3JtVGFzaygpOworICAgIH0KKyAgICAvLyBNYWtlIHN1cmUgYWxsIEdM
IGRyYXdpbmcgaXMgZmluaXNoZWQgb24gdGhlIGltcGwgdGhyZWFkLgorICAgIENDQ29tcGxldGlv
bkV2ZW50IGNvbXBsZXRpb247CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFk
VGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6ZmluaXNoQWxsUmVuZGVyaW5nT25DQ1RocmVhZCwg
QWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29tcGxldGlvbikpKTsKKyAgICBjb21wbGV0aW9uLndh
aXQoKTsKIH0KIAogYm9vbCBDQ1RocmVhZFByb3h5Ojppc1N0YXJ0ZWQoKSBjb25zdAogewotICAg
IHJldHVybiBtX2xheWVyVHJlZUhvc3RJbXBsOworICAgIEFTU0VSVChDQ1Byb3h5Ojppc01haW5U
aHJlYWQoKSk7CisgICAgcmV0dXJuIG1fc3RhcnRlZDsKIH0KIAogYm9vbCBDQ1RocmVhZFByb3h5
Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlcigpCkBAIC0xMzYsMjkgKzE3OSwzOCBAQCB2b2lkIEND
VGhyZWFkUHJveHk6Omxvc2VDb21wb3NpdG9yQ29udGV4dChpbnQgbnVtVGltZXMpCiB2b2lkIEND
VGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0KCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwotICAgIGlmIChtX2NvbW1pdFBlbmRpbmcpCisgICAgaWYgKG1fY29tbWl0UmVxdWVzdGVk
KQogICAgICAgICByZXR1cm47CiAKICAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6c2V0
TmVlZHNDb21taXQiLCB0aGlzLCAwKTsKLSAgICBtX2NvbW1pdFBlbmRpbmcgPSB0cnVlOwotICAg
IGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJv
eHk6OnNldE5lZWRzQ29tbWl0T25DQ1RocmVhZCkpOworICAgIG1fY29tbWl0UmVxdWVzdGVkID0g
dHJ1ZTsKKyAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZD
Q1RocmVhZFByb3h5Ojp1cGRhdGVTY2hlZHVsZXJTdGF0ZU9uQ0NUaHJlYWQsIG1fY29tbWl0UmVx
dWVzdGVkLCB0cnVlKSk7CiB9CiAKIHZvaWQgQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRB
bmRSZWRyYXcoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKG1fY29t
bWl0UGVuZGluZykKKyAgICBpZiAobV9jb21taXRSZXF1ZXN0ZWQpCiAgICAgICAgIHJldHVybjsK
KyAgICBtX2NvbW1pdFJlcXVlc3RlZCA9IHRydWU7CiAKICAgICBUUkFDRV9FVkVOVCgiQ0NUaHJl
YWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXciLCB0aGlzLCAwKTsKLSAgICBtX2NvbW1p
dFBlbmRpbmcgPSB0cnVlOwotICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRh
c2sodGhpcywgJkNDVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVh
ZCkpOworICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkND
VGhyZWFkUHJveHk6OnVwZGF0ZVNjaGVkdWxlclN0YXRlT25DQ1RocmVhZCwgbV9jb21taXRSZXF1
ZXN0ZWQsIHRydWUpKTsKIH0KIAogdm9pZCBDQ1RocmVhZFByb3h5OjpzZXROZWVkc1JlZHJhdygp
CiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBjY1RocmVhZC0+cG9zdFRhc2so
Y3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5OjpzZXROZWVkc1JlZHJhd09u
Q0NUaHJlYWQpKTsKKyAgICBpZiAobV9jb21taXRSZXF1ZXN0ZWQpIC8vIEltcGxpZXMgdGhhdCBh
IGNvbW1pdCBpcyBpbiBmbGlnaHQuCisgICAgICAgIHJldHVybjsKKyAgICAvLyBVbmxpa2Ugc2V0
TmVlZHNDb21taXQgdGhhdCB0cmFja3Mgd2hldGhlciBhIGNvbW1pdCBtZXNzYWdlIGhhcyBiZWVu
IHNlbnQsCisgICAgLy8gc2V0TmVlZHNSZWRyYXcgYWx3YXlzIHNlbmRzIGEgbWVzc2FnZSB0byB0
aGUgY29tcG9zaXRvciB0aHJlYWQuIFRoaXMgaXMKKyAgICAvLyBiZWNhdXNlIHRoZSBjb21wb3Np
dG9yIHRocmVhZCBjYW4gZHJhdyB3aXRob3V0IHRlbGxpbmcgdGhlIG1haW4KKyAgICAvLyB0aHJl
YWQuIFRoaXMgc2hvdWxkIG5vdCBiZSBtdWNoIG9mIGEgcHJvYmxlbSBiZWNhdXNlIGNhbGxzIHRv
CisgICAgLy8gc2V0TmVlZHNSZWRyYXcgbWVzc2FnZXMgYXJlIHVuY29tbW9uIChvbmx5IHRyaWdn
ZXJlZCBieSBXTV9QQUlOVC9ldGMpLAorICAgIC8vIGNvbXBhcmVkIHRvIHNldE5lZWRzQ29tbWl0
QW5kUmVkcmF3IG1lc3NhZ2VzLgorICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpzZXRO
ZWVkc1JlZHJhdyIsIHRoaXMsIDApOworICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1Ro
cmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OnVwZGF0ZVNjaGVkdWxlclN0YXRlT25DQ1Ro
cmVhZCwgZmFsc2UsIHRydWUpKTsKIH0KIAogdm9pZCBDQ1RocmVhZFByb3h5OjpzdGFydCgpCkBA
IC0xNjcsMTIgKzIxOSwxNiBAQCB2b2lkIENDVGhyZWFkUHJveHk6OnN0YXJ0KCkKICAgICBDQ0Nv
bXBsZXRpb25FdmVudCBjb21wbGV0aW9uOwogICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVD
Q1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OmluaXRpYWxpemVJbXBsT25DQ1RocmVh
ZCwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29tcGxldGlvbikpKTsKICAgICBjb21wbGV0aW9u
LndhaXQoKTsKKworICAgIG1fc3RhcnRlZCA9IHRydWU7CiB9CiAKIHZvaWQgQ0NUaHJlYWRQcm94
eTo6c3RvcCgpCiB7CiAgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OnN0b3AiLCB0aGlz
LCAwKTsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlmICghbV9zdGFydGVkKQor
ICAgICAgICByZXR1cm47CiAgICAgLy8gU3luY2hyb25vdXNseSBkZWxldGVzIHRoZSBpbXBsLgog
ICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CiAgICAgY2NUaHJlYWQtPnBvc3RUYXNr
KGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6bGF5ZXJUcmVlSG9zdENs
b3NlZE9uQ0NUaHJlYWQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pKSk7CkBA
IC0xODAsODAgKzIzNiwxMjkgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpzdG9wKCkKIAogICAgIEFT
U0VSVCghbV9sYXllclRyZWVIb3N0SW1wbCk7IC8vIHZlcmlmeSB0aGF0IHRoZSBpbXBsIGRlbGV0
ZWQuCiAgICAgbV9sYXllclRyZWVIb3N0ID0gMDsKKyAgICBtX3N0YXJ0ZWQgPSBmYWxzZTsKK30K
Kwordm9pZCBDQ1RocmVhZFByb3h5OjpmaW5pc2hBbGxSZW5kZXJpbmdPbkNDVGhyZWFkKENDQ29t
cGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQoreworICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7
CisgICAgQVNTRVJUKCFtX2JlZ2luRnJhbWVBbmRDb21taXRQZW5kaW5nT25DQ1RocmVhZCk7Cisg
ICAgaWYgKG1fcmVkcmF3UmVxdWVzdGVkT25DQ1RocmVhZCkgeworICAgICAgICBkcmF3TGF5ZXJz
T25DQ1RocmVhZCgpOworICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5wcmVzZW50KCk7Cisg
ICAgICAgIG1fcmVkcmF3UmVxdWVzdGVkT25DQ1RocmVhZCA9IGZhbHNlOworICAgIH0KKyAgICBt
X2xheWVyVHJlZUhvc3RJbXBsLT5maW5pc2hBbGxSZW5kZXJpbmcoKTsKKyAgICBjb21wbGV0aW9u
LT5zaWduYWwoKTsKIH0KIAotdm9pZCBDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0
T25DQ1RocmVhZCgpCit2b2lkIENDVGhyZWFkUHJveHk6OmNyZWF0ZUJlZ2luRnJhbWVBbmRDb21t
aXRUYXNrT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbiwgQ0NNYWluVGhy
ZWFkOjpUYXNrKiogdGFza1B0cikKK3sKKyAgICBPd25QdHI8Q0NNYWluVGhyZWFkOjpUYXNrPiB0
YXNrID0gY3JlYXRlQmVnaW5GcmFtZUFuZENvbW1pdFRhc2tPbkNDVGhyZWFkKCk7CisgICAgKnRh
c2tQdHIgPSB0YXNrLmxlYWtQdHIoKTsKKyAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKK30KKwor
UGFzc093blB0cjxDQ01haW5UaHJlYWQ6OlRhc2s+IENDVGhyZWFkUHJveHk6OmNyZWF0ZUJlZ2lu
RnJhbWVBbmRDb21taXRUYXNrT25DQ1RocmVhZCgpCiB7CiAgICAgVFJBQ0VfRVZFTlQoIkNDVGhy
ZWFkUHJveHk6OmJlZ2luRnJhbWVBbmRDb21taXRPbkNDVGhyZWFkIiwgdGhpcywgMCk7CiAgICAg
QVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAv
LyBGSVhNRTogY2FsbCBiZWdpbkZyYW1lQW5kQ29tbWl0IG9uIG1haW4gdGhyZWFkCisgICAgQVNT
RVJUKCFtX2JlZ2luRnJhbWVBbmRDb21taXRQZW5kaW5nT25DQ1RocmVhZCk7CisgICAgZG91Ymxl
IGZyYW1lQmVnaW5UaW1lID0gY3VycmVudFRpbWUoKTsKKyAgICBtX2JlZ2luRnJhbWVBbmRDb21t
aXRQZW5kaW5nT25DQ1RocmVhZCA9IHRydWU7CisgICAgcmV0dXJuIGNyZWF0ZU1haW5UaHJlYWRU
YXNrKHRoaXMsICZDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0LCBmcmFtZUJlZ2lu
VGltZSk7CiB9CiAKIHZvaWQgQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUFuZENvbW1pdChkb3Vi
bGUgZnJhbWVCZWdpblRpbWUpCiB7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OmJl
Z2luRnJhbWVBbmRDb21taXQiLCB0aGlzLCAwKTsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwogICAgIGlmICghbV9sYXllclRyZWVIb3N0KQogICAgICAgICByZXR1cm47CiAKLSAgICBUUkFD
RV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0IiwgdGhpcywgMCk7
CisgICAgQVNTRVJUKG1fY29tbWl0UmVxdWVzdGVkKTsKKworICAgIC8vIEZJWE1FOiByZWNyZWF0
ZSB0aGUgY29udGV4dCBpZiBpdCB3YXMgcmVxdWVzdGVkIGJ5IHRoZSBpbXBsIHRocmVhZAogICAg
IHsKICAgICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0ZUFuZExheW91
dCIsIHRoaXMsIDApOwogICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmFuaW1hdGVBbmRMYXlvdXQo
ZnJhbWVCZWdpblRpbWUpOwogICAgIH0KIAotICAgIG1fY29tbWl0UGVuZGluZyA9IGZhbHNlOwor
ICAgIC8vIENsZWFyIHRoZSBjb21taXQgZmxhZyBhZnRlciBhbmltYXRlQW5kTGF5b3V0IGhlcmUg
LS0tIG9iamVjdHMgdGhhdCBvbmx5CisgICAgLy8gbGF5b3V0IHdoZW4gcGFpbnRlZCB3aWxsIHRy
aWdnZXIgYW5vdGhlciBzZXROZWVkc0NvbW1pdCBpbnNpZGUKKyAgICAvLyB1cGRhdGVMYXllcnMu
CisgICAgbV9jb21taXRSZXF1ZXN0ZWQgPSBmYWxzZTsKIAotICAgIC8vIEJsb2NraW5nIGNhbGwg
dG8gQ0NUaHJlYWRQcm94eTo6cGVyZm9ybUNvbW1pdAotICAgIENDQ29tcGxldGlvbkV2ZW50IGNv
bXBsZXRpb247Ci0gICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlz
LCAmQ0NUaHJlYWRQcm94eTo6Y29tbWl0T25DQ1RocmVhZCwgQWxsb3dDcm9zc1RocmVhZEFjY2Vz
cygmY29tcGxldGlvbikpKTsKLSAgICBjb21wbGV0aW9uLndhaXQoKTsKKyAgICBtX2xheWVyVHJl
ZUhvc3QtPnVwZGF0ZUxheWVycygpOworCisgICAgeworICAgICAgICAvLyBCbG9ja2luZyBjYWxs
IHRvIENDVGhyZWFkUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQKKyAgICAgICAgVFJBQ0VfRVZFTlQo
ImNvbW1pdCIsIHRoaXMsIDApOworICAgICAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9u
OworICAgICAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZD
Q1RocmVhZFByb3h5Ojpjb21taXRPbkNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZj
b21wbGV0aW9uKSkpOworICAgICAgICBjb21wbGV0aW9uLndhaXQoKTsKKyAgICB9CisKKyAgICBt
X2xheWVyVHJlZUhvc3QtPmNvbW1pdENvbXBsZXRlKCk7CiB9CiAKIHZvaWQgQ0NUaHJlYWRQcm94
eTo6Y29tbWl0T25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbikKIHsKKyAg
ICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUFuZENvbW1pdE9uQ0NUaHJl
YWQiLCB0aGlzLCAwKTsKICAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOwotICAgIFRSQUNFX0VW
RU5UKCJDQ1RocmVhZFByb3h5Ojpjb21taXRPbkNDVGhyZWFkIiwgdGhpcywgMCk7Ci0gICAgbV9s
YXllclRyZWVIb3N0SW1wbC0+YmVnaW5Db21taXQoKTsKLSAgICB7Ci0gICAgICAgIFRSQUNFX0VW
RU5UKCJDQ0xheWVyVHJlZUhvc3Q6OmNvbW1pdCIsIHRoaXMsIDApOwotICAgICAgICBtX2xheWVy
VHJlZUhvc3QtPmNvbW1pdFRvKG1fbGF5ZXJUcmVlSG9zdEltcGwuZ2V0KCkpOworICAgIEFTU0VS
VChtX2JlZ2luRnJhbWVBbmRDb21taXRQZW5kaW5nT25DQ1RocmVhZCk7CisgICAgbV9iZWdpbkZy
YW1lQW5kQ29tbWl0UGVuZGluZ09uQ0NUaHJlYWQgPSBmYWxzZTsKKyAgICBpZiAoIW1fbGF5ZXJU
cmVlSG9zdEltcGwpIHsKKyAgICAgICAgY29tcGxldGlvbi0+c2lnbmFsKCk7CisgICAgICAgIHJl
dHVybjsKICAgICB9CisgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+YmVnaW5Db21taXQoKTsKKyAg
ICBtX2xheWVyVHJlZUhvc3QtPmNvbW1pdFRvKG1fbGF5ZXJUcmVlSG9zdEltcGwuZ2V0KCkpOwor
ICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbW1pdENvbXBsZXRlKCk7CisKICAgICBjb21wbGV0
aW9uLT5zaWduYWwoKTsKIAotICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbW1pdENvbXBsZXRl
KCk7Ci0gICAgc2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKCk7CisgICAgaWYgKG1fcmVkcmF3UmVx
dWVzdGVkT25DQ1RocmVhZCkgeworICAgICAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NU
aHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5OjpkcmF3TGF5ZXJzQW5kUHJlc2VudE9uQ0NU
aHJlYWQpKTsKKyAgICAgICAgbV9yZWRyYXdSZXF1ZXN0ZWRPbkNDVGhyZWFkID0gZmFsc2U7Cisg
ICAgfQogfQogCi12b2lkIENDVGhyZWFkUHJveHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkKCkKK3Zv
aWQgQ0NUaHJlYWRQcm94eTo6ZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhyZWFkKCkKIHsKICAg
ICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQiLCB0aGlz
LCAwKTsKICAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOwotICAgIGlmIChtX2xheWVyVHJlZUhv
c3RJbXBsKQotICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5kcmF3TGF5ZXJzKCk7CisgICAg
aWYgKCFtX2xheWVyVHJlZUhvc3RJbXBsKQorICAgICAgICByZXR1cm47CisgICAgZHJhd0xheWVy
c09uQ0NUaHJlYWQoKTsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5wcmVzZW50KCk7CiB9CiAK
LXZvaWQgQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRPbkNDVGhyZWFkKCkKK3ZvaWQgQ0NU
aHJlYWRQcm94eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQoKQogewotICAgIFRSQUNFX0VWRU5UKCJD
Q1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICBU
UkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQiLCB0aGlzLCAw
KTsKICAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOwogICAgIEFTU0VSVChtX2xheWVyVHJlZUhv
c3RJbXBsKTsKLSAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZCwgc2VlIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzQxNwotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworCisgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+ZHJhd0xheWVycygpOworICAgIEFT
U0VSVCghbV9sYXllclRyZWVIb3N0SW1wbC0+aXNDb250ZXh0TG9zdCgpKTsKIH0KIAotdm9pZCBD
Q1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQoKQordm9pZCBD
Q1RocmVhZFByb3h5Ojp1cGRhdGVTY2hlZHVsZXJTdGF0ZU9uQ0NUaHJlYWQoYm9vbCBjb21taXRS
ZXF1ZXN0ZWQsIGJvb2wgcmVkcmF3UmVxdWVzdGVkKQogewotICAgIFRSQUNFX0VWRU5UKCJDQ1Ro
cmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQiLCB0aGlzLCAwKTsK
KyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRPbkNDVGhyZWFk
IiwgdGhpcywgMCk7CiAgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKICAgICBBU1NFUlQobV9s
YXllclRyZWVIb3N0SW1wbCk7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19CiAKLXZvaWQg
Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKCkKLXsKLSAgICBUUkFDRV9F
VkVOVCgiQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkIiwgdGhpcywgMCk7
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgLy8gRklYTUU6IHVzZSBDQ1NjaGVkdWxl
ciB0byBkZWNpZGUgd2hlbiB0byBtYW5hZ2UgdGhlIGNvbnZlcnNpb24gb2YgdGhpcworICAgIC8v
IGNvbW1pdCByZXF1ZXN0IGludG8gYW4gYWN0dWFsIGNyZWF0ZUJlZ2luRnJhbWVBbmRDb21taXRU
YXNrT25DQ1RocmVhZCBjYWxsLgorICAgIG1fcmVkcmF3UmVxdWVzdGVkT25DQ1RocmVhZCB8PSBy
ZWRyYXdSZXF1ZXN0ZWQ7CisgICAgaWYgKCFtX2JlZ2luRnJhbWVBbmRDb21taXRQZW5kaW5nT25D
Q1RocmVhZCkgeworICAgICAgICBDQ01haW5UaHJlYWQ6OnBvc3RUYXNrKGNyZWF0ZUJlZ2luRnJh
bWVBbmRDb21taXRUYXNrT25DQ1RocmVhZCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBpZiAoIWNvbW1pdFJlcXVlc3RlZCkKKyAgICAgICAgZHJhd0xheWVyc09uQ0NUaHJlYWQoKTsK
IH0KIAogdm9pZCBDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplSW1wbE9uQ0NUaHJlYWQoQ0NDb21w
bGV0aW9uRXZlbnQqIGNvbXBsZXRpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmgKaW5kZXggMjQ2
NzcyNDBjYWFhNjkxMjY3NmQ3ZWRmZTBmYWIyY2MyMTI2MmVjMi4uYWRjOGJiNWVhZTg2ZTBjZTgx
MWVhNjcyYzlhNzg2ZDFmMjZlNjBhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaApAQCAtMjcs
NiArMjcsNyBAQAogCiAjaW5jbHVkZSAiY2MvQ0NDb21wbGV0aW9uRXZlbnQuaCIKICNpbmNsdWRl
ICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NNYWluVGhyZWFkLmgi
CiAjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIApAQCAt
NjEsMjUgKzYyLDI5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBiZWdpbkZyYW1lQW5kQ29tbWl0KGRv
dWJsZSBmcmFtZUJlZ2luVGltZSk7CiAKICAgICAvLyBDYWxsZWQgb24gQ0NUaHJlYWQKLSAgICB2
b2lkIGJlZ2luRnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKCk7CisgICAgUGFzc093blB0cjxDQ01h
aW5UaHJlYWQ6OlRhc2s+IGNyZWF0ZUJlZ2luRnJhbWVBbmRDb21taXRUYXNrT25DQ1RocmVhZCgp
OworICAgIHZvaWQgY3JlYXRlQmVnaW5GcmFtZUFuZENvbW1pdFRhc2tPbkNDVGhyZWFkKENDQ29t
cGxldGlvbkV2ZW50KiwgQ0NNYWluVGhyZWFkOjpUYXNrKiopOwogICAgIHZvaWQgY29tbWl0T25D
Q1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCopOworICAgIHZvaWQgZHJhd0xheWVyc0FuZFByZXNl
bnRPbkNDVGhyZWFkKCk7CiAgICAgdm9pZCBkcmF3TGF5ZXJzT25DQ1RocmVhZCgpOworICAgIHZv
aWQgZHJhd0xheWVyc0FuZFJlYWRiYWNrT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCosIGJv
b2wqIHN1Y2Nlc3MsIHZvaWQqIHBpeGVscywgY29uc3QgSW50UmVjdCYpOworICAgIHZvaWQgZmlu
aXNoQWxsUmVuZGVyaW5nT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCopOwogICAgIHZvaWQg
aW5pdGlhbGl6ZUltcGxPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50Kik7CiAgICAgdm9pZCBp
bml0aWFsaXplTGF5ZXJSZW5kZXJlck9uQ0NUaHJlYWQoR3JhcGhpY3NDb250ZXh0M0QqLCBDQ0Nv
bXBsZXRpb25FdmVudCosIGJvb2wqIGluaXRpYWxpemVTdWNjZWVkZWQsIExheWVyUmVuZGVyZXJD
YXBhYmlsaXRpZXMqKTsKICAgICB2b2lkIHNldE5lZWRzQ29tbWl0T25DQ1RocmVhZCgpOwotICAg
IHZvaWQgc2V0TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhyZWFkKCk7Ci0gICAgdm9pZCBzZXRO
ZWVkc1JlZHJhd09uQ0NUaHJlYWQoKTsKKyAgICB2b2lkIHVwZGF0ZVNjaGVkdWxlclN0YXRlT25D
Q1RocmVhZChib29sIGNvbW1pdFJlcXVlc3RlZCwgYm9vbCByZWRyYXdSZXF1ZXN0ZWQpOwogICAg
IHZvaWQgbGF5ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsK
IAotICAgIC8vIFVzZWQgb24gbWFpbi10aHJlYWQgb25seS4KLSAgICBib29sIG1fY29tbWl0UGVu
ZGluZzsKLQogICAgIC8vIEFjY2Vzc2VkIG9uIG1haW4gdGhyZWFkIG9ubHkuCisgICAgYm9vbCBt
X2NvbW1pdFJlcXVlc3RlZDsKICAgICBDQ0xheWVyVHJlZUhvc3QqIG1fbGF5ZXJUcmVlSG9zdDsK
ICAgICBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzIG1fbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGll
c01haW5UaHJlYWRDb3B5OworICAgIGJvb2wgbV9zdGFydGVkOwogCi0gICAgLy8gVXNlZCBvbiB0
aGUgQ0NUaHJlYWQsIGJ1dCBjaGVja2VkIG9uIG1haW4gdGhyZWFkIGR1cmluZyBpbml0aWFsaXph
dGlvbi9zaHV0ZG93bi4KKyAgICAvLyBVc2VkIG9uIHRoZSBDQ1RocmVhZCBvbmx5CiAgICAgT3du
UHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IG1fbGF5ZXJUcmVlSG9zdEltcGw7CisgICAgYm9vbCBt
X2JlZ2luRnJhbWVBbmRDb21taXRQZW5kaW5nT25DQ1RocmVhZDsKKyAgICBib29sIG1fcmVkcmF3
UmVxdWVzdGVkT25DQ1RocmVhZDsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5k
ZXggZGM4YjFmMzM3Y2VkYjE5NDRhYTM2YmYwNjk5MGIzZTdmNjAxZDg1Ny4uMGM2YTgyMmI5OWZk
ZDVkYzFlZDA2MjNlYTAzNmViMWY2NzA3NDMzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxMyBAQAorMjAxMS0wOS0wMiAgTmF0IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBNYWtlIENDVGhyZWFkUHJveHkgZHJhdworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc0MTcKKworICAgICAg
ICBEaXNhYmxlIENDTGF5ZXJUcmVlSG9zdFRlc3QgY29tcGxldGVseSBhcyBpdCBkb2VzIG5vdAor
ICAgICAgICBjb21waWxlIHdoZW4gdGhlIHRocmVhZGVkIHN3aXRjaCBpcyBlbmFibGVkLgorCisg
ICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHA6CisKIDIwMTEtMDktMTQgIEFu
ZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggQ2hyb21p
dW0gYnVpbGQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5
ZXJUcmVlSG9zdFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVy
VHJlZUhvc3RUZXN0LmNwcAppbmRleCBkODU0ODA2NTg0ZmYzM2VhMTM1YzZkMDliNTUyZjcwOWVk
MDE2NzEwLi5mZDA3NmVlNTcxMzk1NjRkNzFhMzFlZmUxNTcyMDFkNWFmNzQ3ZGYxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5j
cHAKQEAgLTI0LDcgKzI0LDggQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaWYgVVNFKFRI
UkVBREVEX0NPTVBPU0lUSU5HKQorLy8gQ0NMYXllclRyZWVIb3N0IGRpc2FibGVkLiBTZWUgYjY3
NDE4LgorI2lmIDAKIAogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107578</attachid>
            <date>2011-09-15 18:22:52 -0700</date>
            <delta_ts>2011-09-15 19:27:51 -0700</delta_ts>
            <desc>Better impl of finishAllRendering</desc>
            <filename>bug-67417-20110915182251.patch</filename>
            <type>text/plain</type>
            <size>28629</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTUxMjMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiNDM5ZGE3NTgwMDU0YzE1
YzNhMWI5ODYyNGZkNjJmNzA3NzgwOTQ1Li40MTUwZmJjYWZiMGUyNzQ4MzU1M2E5MDBhNDJjZjk1
YjU5OTc2Y2Q3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIwMTEtMDktMDIgIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTWFrZSBDQ1Ro
cmVhZFByb3h5IGRyYXcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTY3NDE3CisKKyAgICAgICAgVXBkYXRlIHRoZSBDQ1RocmVhZFByb3h5IHRvIGNvcnJl
Y3RseSBpbXBsZW1lbnQgdGhlIENDUHJveHkKKyAgICAgICAgaW50ZXJmYWNlLCBkbyBhbGwgdGhl
IHJpZ2h0IGNvbW1pdHRpbmcgYW5kIHVwZGF0aW5nIHN0ZXBzLCBhbmQKKyAgICAgICAgZHJhdyBh
IHBpY3R1cmUgb24gdGhlIHNjcmVlbi4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06
OkxheWVyUmVuZGVyZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0hlYWRz
VXBEaXNwbGF5OjplbmFibGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RocmVhZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6
OkNDVGhyZWFkUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6fkNDVGhy
ZWFkUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6Y29tcG9zaXRlQW5k
UmVhZGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6ZmluaXNoQWxsUmVu
ZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmlzU3RhcnRlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdyk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpzZXROZWVkc1JlZHJhdyk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1RocmVhZFByb3h5OjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmZp
bmlzaEFsbFJlbmRlcmluZ09uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQ
cm94eTo6YmVnaW5GcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFBy
b3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJv
eHk6OmNvbW1pdEFuZERyYXdPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFk
UHJveHk6OmNvbW1pdEFuZERyYXdBbmRSZWFkYmFja09uQ0NUaHJlYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NUaHJlYWRQcm94eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhyZWFkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5Lmg6
CisKIDIwMTEtMDktMTQgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODEwMwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCmluZGV4IDY3MGVhM2MxODg5ZTgwNWQx
NTc1OGI1ZGQ5MmU3ZTk0MGMwNzA4MWQuLjI0Zjg0YmVkNGY3NWY1YTY3NmEwNTRjNTFhMDU4YWI3
MjY1MDBmMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lu
dFJlY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgK
QEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgSW50UmVjdF9oCiAjZGVmaW5lIEludFJlY3RfaAog
CisjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRDb3BpZXIuaCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtMjU3LDYgKzI1OCwxMCBAQCBJbnRSZWN0IGVu
Y2xvc2luZ0ludFJlY3QoY29uc3QgQ0dSZWN0Jik7CiBJbnRSZWN0IGVuY2xvc2luZ0ludFJlY3Qo
Y29uc3QgTlNSZWN0Jik7CiAjZW5kaWYKIAorLy8gQWxsb3cgSW50UmVjdHMgdG8gbW92ZSBhY3Jv
c3MgdGhyZWFkIGJvdW5kYXJpZXMuCit0ZW1wbGF0ZTw+IHN0cnVjdCBDcm9zc1RocmVhZENvcGll
ckJhc2U8ZmFsc2UsIGZhbHNlLCBJbnRSZWN0PiA6IHB1YmxpYyBDcm9zc1RocmVhZENvcGllclBh
c3NUaHJvdWdoPEludFJlY3Q+IHsKK307CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIEludFJlY3RfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5k
ZXggYzcyODE2OTc1ZDIyNDQ4NzZlMTgxY2I5MDc0MDdiOWVlYTE1YWIxZi4uNjIwM2I1YjE2NGFk
ZjkwZDg4ZjE5NzIxMWQwM2JhNmIyZWRiNzY1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uY3BwCkBAIC0xODEsNiArMTgxLDcgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmluaXRpYWxpemUoKQogCiBMYXllclJlbmRlcmVyQ2hyb21pdW06On5MYXllclJlbmRlcmVy
Q2hyb21pdW0oKQogeworICAgIEFTU0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQoKSk7CiAgICAg
bV9oZWFkc1VwRGlzcGxheS5jbGVhcigpOyAvLyBFeHBsaWNpdGx5IGRlc3Ryb3kgdGhlIEhVRCBi
ZWZvcmUgdGhlIFRleHR1cmVNYW5hZ2VyIGRpZXMuCiAgICAgY2xlYW51cFNoYXJlZE9iamVjdHMo
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAKaW5kZXggOGMwODYzMDEwYzI1
MThiZGU5NzEyNzgyY2NhOWVjNjNjYmFmMWZkMC4uMjdmMGNiOWMzYzEwNDkxY2VjMTUwNGY2Mzkx
NGEwNTcwN2E0MTQ3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAKQEAgLTg5
LDYgKzg5LDkgQEAgdm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjpvblByZXNlbnQoKQogCiBib29sIEND
SGVhZHNVcERpc3BsYXk6OmVuYWJsZWQoKSBjb25zdAogeworICAgIC8vIEZJWE1FOiBIVUQgZG9l
cyBub3Qgd29yayBpbiBjb21wb3NpdG9yIHRocmVhZCBtb2RlLgorICAgIGlmIChzZXR0aW5ncygp
LmVuYWJsZUNvbXBvc2l0b3JUaHJlYWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1
cm4gc2V0dGluZ3MoKS5zaG93UGxhdGZvcm1MYXllclRyZWUgfHwgc2V0dGluZ3MoKS5zaG93RlBT
Q291bnRlcjsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCmluZGV4IGIwMmYxZWYzMTY0NGFj
ZTk5NWNjZDZlYzU5ZGIwYmE0YjAyMGU4M2EuLjJiYjQ5MDFiYTA0ZTZlZWZhODk1YzY1YWJhMWMz
OTNiZGQ5NmM3ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKQEAgLTc5LDEwICs3OSwxMiBA
QCBDQ0xheWVySW1wbDo6Q0NMYXllckltcGwoaW50IGlkKQogICAgICwgbV9kZWJ1Z0JvcmRlcldp
ZHRoKDApCiAgICAgLCBtX2xheWVyUmVuZGVyZXIoMCkKIHsKKyAgICBBU1NFUlQoQ0NQcm94eTo6
aXNJbXBsVGhyZWFkKCkpOwogfQogCiBDQ0xheWVySW1wbDo6fkNDTGF5ZXJJbXBsKCkKIHsKKyAg
ICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogfQogCiB2b2lkIENDTGF5ZXJJbXBs
OjphZGRDaGlsZChQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuY3BwCmluZGV4IGNlYTU3OWM5MzY5NzNjMWViYmE4MmZmODhkYzA4MTRkZDlk
Y2FkYjAuLmZiMGZhZmZjMTQ2NDlkZmZlZmRjYmE3OTdiMDIwOGNkODA4OWQwMTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtNTcsNiArNTcsNyBAQCBDQ0xheWVyVHJlZUhv
c3Q6OkNDTGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVudCwgY29uc3Qg
Q0NTZXR0aW5ncwogICAgICwgbV96b29tQW5pbWF0b3JTY2FsZSgxKQogICAgICwgbV92aXNpYmxl
KHRydWUpCiB7CisgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKIH0KIAogYm9v
bCBDQ0xheWVyVHJlZUhvc3Q6OmluaXRpYWxpemUoKQpAQCAtMTE1LDYgKzExNiwxMSBAQCB2b2lk
IENDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUp
CiAgICAgbV9hbmltYXRpbmcgPSBmYWxzZTsKIH0KIAorLy8gVGhpcyBmdW5jdGlvbiBjb21taXRz
IHRoZSBDQ0xheWVyVHJlZUhvc3QgdG8gYW4gaW1wbCB0cmVlLiBXaGVuIG1vZGlmeWluZworLy8g
dGhpcyBmdW5jdGlvbiwga2VlcCBpbiBtaW5kIHRoYXQgdGhlIGZ1bmN0aW9uICpydW5zKiBvbiB0
aGUgaW1wbCB0aHJlYWQhIEFueQorLy8gY29kZSB0aGF0IGlzIGxvZ2ljYWxseSBhIG1haW4gdGhy
ZWFkIG9wZXJhdGlvbiwgZS5nLiBkZWxldGlvbiBvZiBhIExheWVyQ2hyb21pdW0sCisvLyBzaG91
bGQgYmUgZGVsYXllZCB1bnRpbCB0aGUgQ0NMYXllclRyZWVIb3N0Ojpjb21taXRDb21wbGV0ZSwg
d2hpY2ggd2lsbCBydW4KKy8vIGFmdGVyIHRoZSBjb21taXQsIGJ1dCBvbiB0aGUgbWFpbiB0aHJl
YWQuCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0VG8oQ0NMYXllclRyZWVIb3N0SW1wbCog
aG9zdEltcGwpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKQEAgLTEy
NSwxNCArMTMxLDEyIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojpjb21taXRUbyhDQ0xheWVyVHJl
ZUhvc3RJbXBsKiBob3N0SW1wbCkKICAgICBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCktPmRlbGV0
ZUV2aWN0ZWRUZXh0dXJlcyhob3N0SW1wbC0+Y29udGV4dCgpKTsKIAogICAgIHVwZGF0ZUNvbXBv
c2l0b3JSZXNvdXJjZXMobV91cGRhdGVMaXN0LCBob3N0SW1wbC0+Y29udGV4dCgpKTsKLSAgICBt
X3VwZGF0ZUxpc3QuY2xlYXIoKTsKIAogICAgIGhvc3RJbXBsLT5zZXRWaXNpYmxlKG1fdmlzaWJs
ZSk7CiAgICAgaG9zdEltcGwtPnNldFpvb21BbmltYXRvclNjYWxlKG1fem9vbUFuaW1hdG9yU2Nh
bGUpOwogICAgIGhvc3RJbXBsLT5zZXRWaWV3cG9ydCh2aWV3cG9ydFNpemUoKSk7CiAKICAgICBo
b3N0SW1wbC0+bGF5ZXJSZW5kZXJlcigpLT5zZXRDb250ZW50c1RleHR1cmVNZW1vcnlVc2VCeXRl
cyhtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPmN1cnJlbnRNZW1vcnlVc2VCeXRlcygpKTsKLSAg
ICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnVucHJvdGVjdEFsbFRleHR1cmVzKCk7CiAKICAg
ICAvLyBTeW5jaHJvbml6ZSB0cmVlcywgaWYgb25lIGV4aXN0cyBhdCBhbGwuLi4KICAgICBpZiAo
cm9vdExheWVyKCkpCkBAIC0xNDMsNiArMTQ3LDEyIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojpj
b21taXRUbyhDQ0xheWVyVHJlZUhvc3RJbXBsKiBob3N0SW1wbCkKICAgICBtX2ZyYW1lTnVtYmVy
Kys7CiB9CiAKK3ZvaWQgQ0NMYXllclRyZWVIb3N0Ojpjb21taXRDb21wbGV0ZSgpCit7CisgICAg
bV91cGRhdGVMaXN0LmNsZWFyKCk7CisgICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT51bnBy
b3RlY3RBbGxUZXh0dXJlcygpOworfQorCiBQYXNzT3duUHRyPENDVGhyZWFkPiBDQ0xheWVyVHJl
ZUhvc3Q6OmNyZWF0ZUNvbXBvc2l0b3JUaHJlYWQoKQogewogICAgIHJldHVybiBtX2NsaWVudC0+
Y3JlYXRlQ29tcG9zaXRvclRocmVhZCgpOwpAQCAtMjI0LDcgKzIzNCw2IEBAIHZvaWQgQ0NMYXll
clRyZWVIb3N0OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpCiB2b2lkIENDTGF5ZXJUcmVlSG9z
dDo6c2V0TmVlZHNSZWRyYXcoKQogewogI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKLSAg
ICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0OjpzZXROZWVkc1JlZHJhdyIsIHRoaXMsIDAp
OwogICAgIG1fcHJveHktPnNldE5lZWRzUmVkcmF3KCk7CiAjZWxzZQogICAgIG1fY2xpZW50LT5z
Y2hlZHVsZUNvbXBvc2l0ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAppbmRleCBjNzEz
ZjAzZTdhZDIzMTc5YWM4Nzc2MzBhMjNjOWY0NzgxYjcxYzU3Li4xNzMyOWMzODIyMDA5M2Q3MjM5
YTZjY2MxYTRiODQxZTRlY2UxZTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApAQCAt
OTksNiArOTksNyBAQCBwdWJsaWM6CiAKICAgICAvLyBDQ0xheWVyVHJlZUhvc3QgaW50ZXJmYWNl
IHRvIENDUHJveHkuCiAgICAgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2lu
VGltZSk7CisgICAgdm9pZCBjb21taXRDb21wbGV0ZSgpOwogICAgIHZvaWQgY29tbWl0VG8oQ0NM
YXllclRyZWVIb3N0SW1wbCopOwogICAgIFBhc3NPd25QdHI8Q0NUaHJlYWQ+IGNyZWF0ZUNvbXBv
c2l0b3JUaHJlYWQoKTsKICAgICBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGVM
YXllclRyZWVIb3N0Q29udGV4dDNEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuY3BwCmluZGV4IGJlYzdjMDJkMjVlZTUxM2E5Mjg1Njc1Y2M3NGI5MDU0NDE5MzU5MmIuLmM3
NWViOThlMmQxYzg2OWY1ZjdkYTY1ZDkxYTE3YzU0MDYxM2E0YTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC00OCwxMCArNDgsMTIgQEAgQ0NMYXllclRyZWVI
b3N0SW1wbDo6Q0NMYXllclRyZWVIb3N0SW1wbChjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncykK
ICAgICAsIG1fZnJhbWVOdW1iZXIoMCkKICAgICAsIG1fc2V0dGluZ3Moc2V0dGluZ3MpCiB7Cisg
ICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKIH0KIAogQ0NMYXllclRyZWVIb3N0
SW1wbDo6fkNDTGF5ZXJUcmVlSG9zdEltcGwoKQogeworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0lt
cGxUaHJlYWQoKSk7CiAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6On5DQ0xh
eWVyVHJlZUhvc3RJbXBsKCkiLCB0aGlzLCAwKTsKICAgICBpZiAobV9sYXllclJlbmRlcmVyKQog
ICAgICAgICBtX2xheWVyUmVuZGVyZXItPmNsb3NlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xl
VGhyZWFkUHJveHkuY3BwCmluZGV4IDJkMjdkNzI5YjM4MjExMzlmMDgxN2NlZGI0N2VhZWVmYWYz
ODU4ODcuLjAwMmE0YWI3NjUwMWY1NzEwMjUzZmViYjk1NTc4MWEwYTVhNmNiYTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xl
VGhyZWFkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCkBAIC0xMTEsOCArMTExLDE1IEBAIEdy
YXBoaWNzQ29udGV4dDNEKiBDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb250ZXh0KCkKIHZvaWQgQ0NT
aW5nbGVUaHJlYWRQcm94eTo6ZmluaXNoQWxsUmVuZGVyaW5nKCkKIHsKICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwotICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKLSAgICBtX2xheWVy
VHJlZUhvc3RJbXBsLT5maW5pc2hBbGxSZW5kZXJpbmcoKTsKKyAgICBpZiAoIXJlY3JlYXRlQ29u
dGV4dElmTmVlZGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbW1pdElmTmVlZGVkKCk7
CisKKyAgICB7CisgICAgICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICAgICAgbV9s
YXllclRyZWVIb3N0SW1wbC0+ZmluaXNoQWxsUmVuZGVyaW5nKCk7CisgICAgfQogfQogCiBib29s
IENDU2luZ2xlVGhyZWFkUHJveHk6OmlzU3RhcnRlZCgpIGNvbnN0CkBAIC0xNTcsNiArMTY0LDcg
QEAgdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdCgpCiAgICAgICAgIG1f
bGF5ZXJUcmVlSG9zdC0+Y29tbWl0VG8obV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSk7CiAgICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbW1pdENvbXBsZXRlKCk7CiAgICAgfQorICAgIG1f
bGF5ZXJUcmVlSG9zdC0+Y29tbWl0Q29tcGxldGUoKTsKIH0KIAogdm9pZCBDQ1NpbmdsZVRocmVh
ZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpCkBAIC0yNTAsNiArMjU4LDcgQEAgdm9p
ZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21taXRJZk5lZWRlZCgpCiAgICAgICAgIG1fbGF5ZXJU
cmVlSG9zdC0+Y29tbWl0VG8obV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSk7CiAgICAgICAgIG1f
bGF5ZXJUcmVlSG9zdEltcGwtPmNvbW1pdENvbXBsZXRlKCk7CiAgICAgfQorICAgIG1fbGF5ZXJU
cmVlSG9zdC0+Y29tbWl0Q29tcGxldGUoKTsKIH0KIAogYm9vbCBDQ1NpbmdsZVRocmVhZFByb3h5
Ojpkb0NvbXBvc2l0ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCmluZGV4IDEyYjViMzYx
YTdiNWMyNmUwZDAwNmI3NzNmMDA4NjcwOTVjODczNjcuLjJkOTUwMDczYTkyZjU5NzMwZTEyNGU5
MzA4MDY5MjE2ZjJkYmFlYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCkBAIC0zMSw2
ICszMSw3IEBACiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCiAjaW5jbHVkZSAiY2Mv
Q0NNYWluVGhyZWFkVGFzay5oIgogI2luY2x1ZGUgImNjL0NDVGhyZWFkVGFzay5oIgorI2luY2x1
ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKIHVz
aW5nIG5hbWVzcGFjZSBXVEY7CkBAIC00OCw4ICs0OSwxNCBAQCBQYXNzT3duUHRyPENDUHJveHk+
IENDVGhyZWFkUHJveHk6OmNyZWF0ZShDQ0xheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QpCiB9
CiAKIENDVGhyZWFkUHJveHk6OkNDVGhyZWFkUHJveHkoQ0NMYXllclRyZWVIb3N0KiBsYXllclRy
ZWVIb3N0KQotICAgIDogbV9jb21taXRQZW5kaW5nKGZhbHNlKQorICAgIDogbV9jb21taXRSZXF1
ZXN0ZWQoZmFsc2UpCiAgICAgLCBtX2xheWVyVHJlZUhvc3QobGF5ZXJUcmVlSG9zdCkKKyAgICAs
IG1fc3RhcnRlZChmYWxzZSkKKyAgICAsIG1fbGFzdEV4ZWN1dGVkQmVnaW5GcmFtZUFuZENvbW1p
dFNlcXVlbmNlTnVtYmVyKC0xKQorICAgICwgbV9udW1CZWdpbkZyYW1lQW5kQ29tbWl0c0lzc3Vl
ZE9uQ0NUaHJlYWQoMCkKKyAgICAsIG1fYmVnaW5GcmFtZUFuZENvbW1pdFBlbmRpbmdPbkNDVGhy
ZWFkKGZhbHNlKQorICAgICwgbV9kcmF3VGFza1Bvc3RlZE9uQ0NUaHJlYWQoZmFsc2UpCisgICAg
LCBtX3JlZHJhd1JlcXVlc3RlZE9uQ0NUaHJlYWQoZmFsc2UpCiB7CiAgICAgVFJBQ0VfRVZFTlQo
IkNDVGhyZWFkUHJveHk6OkNDVGhyZWFkUHJveHkiLCB0aGlzLCAwKTsKICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwpAQCAtNjYsOCArNzMsNyBAQCBDQ1RocmVhZFByb3h5Ojp+Q0NUaHJlYWRQ
cm94eSgpCiB7CiAgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6On5DQ1RocmVhZFByb3h5
IiwgdGhpcywgMCk7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQoIW1f
bGF5ZXJUcmVlSG9zdEltcGwpOyAvLyBNYWtlIHN1cmUgc3RvcCgpIGdvdCBjYWxsZWQuCi0gICAg
QVNTRVJUKCFtX2xheWVyVHJlZUhvc3QpOyAvLyBNYWtlIHN1cmUgc3RvcCgpIGdvdCBjYWxsZWQu
CisgICAgQVNTRVJUKCFtX3N0YXJ0ZWQpOwogCiAgICAgbnVtUHJveGllcy0tOwogICAgIGlmICgh
bnVtUHJveGllcykgewpAQCAtNzgsOCArODQsMjggQEAgQ0NUaHJlYWRQcm94eTo6fkNDVGhyZWFk
UHJveHkoKQogCiBib29sIENDVGhyZWFkUHJveHk6OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQg
KnBpeGVscywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJUKG1fbGF5ZXJUcmVlSG9zdCk7CisKKyAg
ICBmaW5pc2hBbGxSZW5kZXJpbmcoKTsKKyAgICBib29sIHN1Y2Nlc3M7CisgICAgQ0NDb21wbGV0
aW9uRXZlbnQgY29tcGxldGlvbjsKKyAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJl
YWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5OjpkcmF3TGF5ZXJzQW5kUmVhZGJhY2tPbkNDVGhy
ZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9uKSwgQWxsb3dDcm9zc1RocmVh
ZEFjY2Vzcygmc3VjY2VzcyksIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MocGl4ZWxzKSwgcmVjdCkp
OworICAgIGNvbXBsZXRpb24ud2FpdCgpOworICAgIHJldHVybiBzdWNjZXNzOworfQorCit2b2lk
IENDVGhyZWFkUHJveHk6OmRyYXdMYXllcnNBbmRSZWFkYmFja09uQ0NUaHJlYWQoQ0NDb21wbGV0
aW9uRXZlbnQqIGNvbXBsZXRpb24sIGJvb2wqIHN1Y2Nlc3MsIHZvaWQqIHBpeGVscywgY29uc3Qg
SW50UmVjdCYgcmVjdCkKK3sKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwor
ICAgIGlmICghbV9sYXllclRyZWVIb3N0SW1wbCkgeworICAgICAgICAqc3VjY2VzcyA9IGZhbHNl
OworICAgICAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBkcmF3TGF5ZXJzT25DQ1RocmVhZCgpOworICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJl
YWRiYWNrKHBpeGVscywgcmVjdCk7CisgICAgKnN1Y2Nlc3MgPSBtX2xheWVyVHJlZUhvc3RJbXBs
LT5pc0NvbnRleHRMb3N0KCk7CisgICAgY29tcGxldGlvbi0+c2lnbmFsKCk7CiB9CiAKIEdyYXBo
aWNzQ29udGV4dDNEKiBDQ1RocmVhZFByb3h5Ojpjb250ZXh0KCkKQEAgLTkwLDEyICsxMTYsMzQg
QEAgR3JhcGhpY3NDb250ZXh0M0QqIENDVGhyZWFkUHJveHk6OmNvbnRleHQoKQogCiB2b2lkIEND
VGhyZWFkUHJveHk6OmZpbmlzaEFsbFJlbmRlcmluZygpCiB7Ci0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKKyAgICAvLyBJZiBh
IGNvbW1pdCBpcyBwZW5kaW5nLCBwZXJmb3JtIHRoZSBjb21taXQgZmlyc3QuCisgICAgaWYgKG1f
Y29tbWl0UmVxdWVzdGVkKSAgeworICAgICAgICAvLyBUaGlzIGJpdCBvZiBjb2RlIGlzIHVnbGll
ciB0aGFuIGl0IHNob3VsZCBiZSBiZWNhdXNlIHJldHVybmluZworICAgICAgICAvLyBwb2ludGVy
cyB2aWEgdGhlIENDVGhyZWFkIHRhc2sgbW9kZWwgaXMgcmVhbGx5IG1lc3N5LiBFZmZlY3RpdmVs
eSwgd2UKKyAgICAgICAgLy8gYXJlIG1ha2luZyBhIGJsb2NraW5nIGNhbGwgdG8gY3JlYXRlQmVn
aW5GcmFtZUFuZENvbW1pdFRhc2tPbkNDVGhyZWFkLAorICAgICAgICAvLyBhbmQgdHJ5aW5nIHRv
IGdldCB0aGUgQ0NNYWluVGhyZWFkOjpUYXNrIGl0IHJldHVybnMgc28gd2UgY2FuIHJ1biBpdC4K
KyAgICAgICAgT3duUHRyPENDTWFpblRocmVhZDo6VGFzaz4gYmVnaW5GcmFtZUFuZENvbW1pdFRh
c2s7CisgICAgICAgIHsKKyAgICAgICAgICAgIENDTWFpblRocmVhZDo6VGFzayogdGFza1B0cjsK
KyAgICAgICAgICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CisgICAgICAgICAgICBj
Y1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5
OjpjcmVhdGVCZWdpbkZyYW1lQW5kQ29tbWl0VGFza09uQ0NUaHJlYWQsIEFsbG93Q3Jvc3NUaHJl
YWRBY2Nlc3MoJmNvbXBsZXRpb24pLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZ0YXNrUHRyKSkp
OworICAgICAgICAgICAgY29tcGxldGlvbi53YWl0KCk7CisgICAgICAgICAgICBiZWdpbkZyYW1l
QW5kQ29tbWl0VGFzayA9IGFkb3B0UHRyKHRhc2tQdHIpOworICAgICAgICB9CisKKyAgICAgICAg
YmVnaW5GcmFtZUFuZENvbW1pdFRhc2stPnBlcmZvcm1UYXNrKCk7CisgICAgfQorICAgIC8vIE1h
a2Ugc3VyZSBhbGwgR0wgZHJhd2luZyBpcyBmaW5pc2hlZCBvbiB0aGUgaW1wbCB0aHJlYWQuCisg
ICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKKyAgICBjY1RocmVhZC0+cG9zdFRhc2so
Y3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5OjpmaW5pc2hBbGxSZW5kZXJp
bmdPbkNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9uKSkpOworICAg
IGNvbXBsZXRpb24ud2FpdCgpOwogfQogCiBib29sIENDVGhyZWFkUHJveHk6OmlzU3RhcnRlZCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdEltcGw7CisgICAgQVNTRVJUKEND
UHJveHk6OmlzTWFpblRocmVhZCgpKTsKKyAgICByZXR1cm4gbV9zdGFydGVkOwogfQogCiBib29s
IENDVGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKCkKQEAgLTEzNiwyOSArMTg0
LDM4IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6bG9zZUNvbXBvc2l0b3JDb250ZXh0KGludCBudW1U
aW1lcykKIHZvaWQgQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXQoKQogewogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKG1fY29tbWl0UGVuZGluZykKKyAgICBpZiAobV9j
b21taXRSZXF1ZXN0ZWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIFRSQUNFX0VWRU5UKCJDQ1Ro
cmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdCIsIHRoaXMsIDApOwotICAgIG1fY29tbWl0UGVuZGlu
ZyA9IHRydWU7Ci0gICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlz
LCAmQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRPbkNDVGhyZWFkKSk7CisgICAgbV9jb21t
aXRSZXF1ZXN0ZWQgPSB0cnVlOworICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVh
ZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OnVwZGF0ZVNjaGVkdWxlclN0YXRlT25DQ1RocmVh
ZCwgbV9jb21taXRSZXF1ZXN0ZWQsIHRydWUpKTsKIH0KIAogdm9pZCBDQ1RocmVhZFByb3h5Ojpz
ZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
LSAgICBpZiAobV9jb21taXRQZW5kaW5nKQorICAgIGlmIChtX2NvbW1pdFJlcXVlc3RlZCkKICAg
ICAgICAgcmV0dXJuOworICAgIG1fY29tbWl0UmVxdWVzdGVkID0gdHJ1ZTsKIAogICAgIFRSQUNF
X0VWRU5UKCJDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdyIsIHRoaXMsIDAp
OwotICAgIG1fY29tbWl0UGVuZGluZyA9IHRydWU7Ci0gICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNy
ZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRS
ZWRyYXdPbkNDVGhyZWFkKSk7CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFk
VGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6dXBkYXRlU2NoZWR1bGVyU3RhdGVPbkNDVGhyZWFk
LCBtX2NvbW1pdFJlcXVlc3RlZCwgdHJ1ZSkpOwogfQogCiB2b2lkIENDVGhyZWFkUHJveHk6OnNl
dE5lZWRzUmVkcmF3KCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGNjVGhy
ZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OnNl
dE5lZWRzUmVkcmF3T25DQ1RocmVhZCkpOworICAgIGlmIChtX2NvbW1pdFJlcXVlc3RlZCkgLy8g
SW1wbGllcyB0aGF0IGEgY29tbWl0IGlzIGluIGZsaWdodC4KKyAgICAgICAgcmV0dXJuOworICAg
IC8vIFVubGlrZSBzZXROZWVkc0NvbW1pdCB0aGF0IHRyYWNrcyB3aGV0aGVyIGEgY29tbWl0IG1l
c3NhZ2UgaGFzIGJlZW4gc2VudCwKKyAgICAvLyBzZXROZWVkc1JlZHJhdyBhbHdheXMgc2VuZHMg
YSBtZXNzYWdlIHRvIHRoZSBjb21wb3NpdG9yIHRocmVhZC4gVGhpcyBpcworICAgIC8vIGJlY2F1
c2UgdGhlIGNvbXBvc2l0b3IgdGhyZWFkIGNhbiBkcmF3IHdpdGhvdXQgdGVsbGluZyB0aGUgbWFp
bgorICAgIC8vIHRocmVhZC4gVGhpcyBzaG91bGQgbm90IGJlIG11Y2ggb2YgYSBwcm9ibGVtIGJl
Y2F1c2UgY2FsbHMgdG8KKyAgICAvLyBzZXROZWVkc1JlZHJhdyBtZXNzYWdlcyBhcmUgdW5jb21t
b24gKG9ubHkgdHJpZ2dlcmVkIGJ5IFdNX1BBSU5UL2V0YyksCisgICAgLy8gY29tcGFyZWQgdG8g
c2V0TmVlZHNDb21taXRBbmRSZWRyYXcgbWVzc2FnZXMuCisgICAgVFJBQ0VfRVZFTlQoIkNDVGhy
ZWFkUHJveHk6OnNldE5lZWRzUmVkcmF3IiwgdGhpcywgMCk7CisgICAgY2NUaHJlYWQtPnBvc3RU
YXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6dXBkYXRlU2NoZWR1
bGVyU3RhdGVPbkNDVGhyZWFkLCBmYWxzZSwgdHJ1ZSkpOwogfQogCiB2b2lkIENDVGhyZWFkUHJv
eHk6OnN0YXJ0KCkKQEAgLTE2NywxMiArMjI0LDE2IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6c3Rh
cnQoKQogICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CiAgICAgY2NUaHJlYWQtPnBv
c3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6
ZUltcGxPbkNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9uKSkpOwog
ICAgIGNvbXBsZXRpb24ud2FpdCgpOworCisgICAgbV9zdGFydGVkID0gdHJ1ZTsKIH0KIAogdm9p
ZCBDQ1RocmVhZFByb3h5OjpzdG9wKCkKIHsKICAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94
eTo6c3RvcCIsIHRoaXMsIDApOwogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYg
KCFtX3N0YXJ0ZWQpCisgICAgICAgIHJldHVybjsKICAgICAvLyBTeW5jaHJvbm91c2x5IGRlbGV0
ZXMgdGhlIGltcGwuCiAgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKICAgICBjY1Ro
cmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5Ojps
YXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZCwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29t
cGxldGlvbikpKTsKQEAgLTE4MCw4MCArMjQxLDE2NiBAQCB2b2lkIENDVGhyZWFkUHJveHk6OnN0
b3AoKQogCiAgICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3RJbXBsKTsgLy8gdmVyaWZ5IHRoYXQg
dGhlIGltcGwgZGVsZXRlZC4KICAgICBtX2xheWVyVHJlZUhvc3QgPSAwOworICAgIG1fc3RhcnRl
ZCA9IGZhbHNlOwogfQogCi12b2lkIENDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVBbmRDb21taXRP
bkNDVGhyZWFkKCkKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6ZmluaXNoQWxsUmVuZGVyaW5nT25DQ1Ro
cmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbikKIHsKLSAgICBUUkFDRV9FVkVOVCgi
Q0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsK
KyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6ZmluaXNoQWxsUmVuZGVyaW5nT25DQ1Ro
cmVhZCIsIHRoaXMsIDApOwogICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7Ci0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgLy8gRklYTUU6IGNhbGwgYmVnaW5GcmFtZUFuZENvbW1pdCBv
biBtYWluIHRocmVhZAorICAgIEFTU0VSVCghbV9iZWdpbkZyYW1lQW5kQ29tbWl0UGVuZGluZ09u
Q0NUaHJlYWQpOworICAgIGlmIChtX3JlZHJhd1JlcXVlc3RlZE9uQ0NUaHJlYWQpIHsKKyAgICAg
ICAgZHJhd0xheWVyc09uQ0NUaHJlYWQoKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+
cHJlc2VudCgpOworICAgICAgICBtX3JlZHJhd1JlcXVlc3RlZE9uQ0NUaHJlYWQgPSBmYWxzZTsK
KyAgICB9CisgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+ZmluaXNoQWxsUmVuZGVyaW5nKCk7Cisg
ICAgY29tcGxldGlvbi0+c2lnbmFsKCk7CiB9CiAKLXZvaWQgQ0NUaHJlYWRQcm94eTo6YmVnaW5G
cmFtZUFuZENvbW1pdChkb3VibGUgZnJhbWVCZWdpblRpbWUpCit2b2lkIENDVGhyZWFkUHJveHk6
OmNyZWF0ZUJlZ2luRnJhbWVBbmRDb21taXRUYXNrT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVu
dCogY29tcGxldGlvbiwgQ0NNYWluVGhyZWFkOjpUYXNrKiogdGFza1B0cikKIHsKKyAgICBPd25Q
dHI8Q0NNYWluVGhyZWFkOjpUYXNrPiB0YXNrID0gY3JlYXRlQmVnaW5GcmFtZUFuZENvbW1pdFRh
c2tPbkNDVGhyZWFkKCk7CisgICAgKnRhc2tQdHIgPSB0YXNrLmxlYWtQdHIoKTsKKyAgICBjb21w
bGV0aW9uLT5zaWduYWwoKTsKK30KKworUGFzc093blB0cjxDQ01haW5UaHJlYWQ6OlRhc2s+IEND
VGhyZWFkUHJveHk6OmNyZWF0ZUJlZ2luRnJhbWVBbmRDb21taXRUYXNrT25DQ1RocmVhZCgpCit7
CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OmNyZWF0ZUJlZ2luRnJhbWVBbmRDb21t
aXRUYXNrT25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7
CisgICAgZG91YmxlIGZyYW1lQmVnaW5UaW1lID0gY3VycmVudFRpbWUoKTsKKyAgICBtX2JlZ2lu
RnJhbWVBbmRDb21taXRQZW5kaW5nT25DQ1RocmVhZCA9IHRydWU7CisKKyAgICAvLyBOT1RFLCBp
dCBpcyBwb3NzaWJsZSB0byByZWNlaWV2ZSBhIHJlcXVlc3QgZm9yIGEKKyAgICAvLyBiZWdpbkZy
YW1lQW5kQ29tbWl0T25DQ1RocmVhZCBmcm9tIGZpbmlzaEFsbFJlbmRlcmluZyB3aGlsZSBhCisg
ICAgLy8gYmVnaW5GcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQgaXMgZW5xdWV1ZWQuIFNpbmNlIGl0
IENDTWFpblRocmVhZCBkb2Vzbid0CisgICAgLy8gcHJvdmlkZSBhIHRocmVhZHNhZmUgd2F5IHRv
IGNhbmNlbCB0YXNrcywgaXQgaXMgaW1wb3J0YW50IHRoYXQKKyAgICAvLyBiZWdpbkZyYW1lQW5k
Q29tbWl0IGJlIHN0cnVjdHVyZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGl0IG1heSBnZXQgY2FsbGVk
IGF0CisgICAgLy8gYSBwb2ludCB0aGF0IGl0IHNob3VsZG4ndC4gV2UgZG8gdGhpcyBieSBhc3Np
Z25pbmcgYSBzZXF1ZW5jZSBudW1iZXIgdG8KKyAgICAvLyBldmVyeSBuZXcgYmVnaW5GcmFtZUFu
ZENvbW1pdCB0YXNrLiBUaGVuLCBiZWdpbkZyYW1lQW5kQ29tbWl0IHRyYWNrcyB0aGUKKyAgICAv
LyBsYXN0IGV4ZWN1dGVkIHNlcXVlbmNlIG51bWJlciwgZHJvcHBpbmcgYmVnaW5GcmFtZUFuZENv
bW1pdCB3aXRoIHNlcXVlbmNlCisgICAgLy8gbnVtYmVycyBiZWxvdyB0aGUgbGFzdCBleGVjdXRl
ZCBvbmUuCisgICAgaW50IHRoaXNUYXNrU2VxdWVuY2VOdW1iZXIgPSBtX251bUJlZ2luRnJhbWVB
bmRDb21taXRzSXNzdWVkT25DQ1RocmVhZDsKKyAgICBtX251bUJlZ2luRnJhbWVBbmRDb21taXRz
SXNzdWVkT25DQ1RocmVhZCsrOworICAgIHJldHVybiBjcmVhdGVNYWluVGhyZWFkVGFzayh0aGlz
LCAmQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUFuZENvbW1pdCwgdGhpc1Rhc2tTZXF1ZW5jZU51
bWJlciwgZnJhbWVCZWdpblRpbWUpOworfQorCit2b2lkIENDVGhyZWFkUHJveHk6OmJlZ2luRnJh
bWVBbmRDb21taXQoaW50IHNlcXVlbmNlTnVtYmVyLCBkb3VibGUgZnJhbWVCZWdpblRpbWUpCit7
CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVBbmRDb21taXQiLCB0
aGlzLCAwKTsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIGlmICghbV9sYXllclRy
ZWVIb3N0KQogICAgICAgICByZXR1cm47CiAKLSAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94
eTo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0IiwgdGhpcywgMCk7CisgICAgLy8gRHJvcCBiZWdpbkZy
YW1lQW5kQ29tbWl0IGNhbGxzIHRoYXQgb2NjdXIgb3V0IG9mIHNlcXVlbmNlLiBTZWUgY3JlYXRl
QmVnaW5GcmFtZUFuZENvbW1pdFRhc2tPbkNDVGhyZWFkIGZvcgorICAgIC8vIGFuIGV4cGxhbmF0
aW9uIG9mIGhvdyBvdXQtb2Ytc2VxdWVuY2UgYmVnaW5GcmFtZUFuZENvbW1pdCB0YXNrcyBjYW4g
b2NjdXIuCisgICAgaWYgKHNlcXVlbmNlTnVtYmVyIDwgbV9sYXN0RXhlY3V0ZWRCZWdpbkZyYW1l
QW5kQ29tbWl0U2VxdWVuY2VOdW1iZXIpIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoIkVhcmx5T3V0
X1N0YWxlQmVnaW5GcmFtZUFuZENvbW1pdCIsIHRoaXMsIDApOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIG1fbGFzdEV4ZWN1dGVkQmVnaW5GcmFtZUFuZENvbW1pdFNlcXVlbmNlTnVtYmVy
ID0gc2VxdWVuY2VOdW1iZXI7CisKKyAgICBBU1NFUlQobV9jb21taXRSZXF1ZXN0ZWQpOworCisg
ICAgLy8gRklYTUU6IHJlY3JlYXRlIHRoZSBjb250ZXh0IGlmIGl0IHdhcyByZXF1ZXN0ZWQgYnkg
dGhlIGltcGwgdGhyZWFkCiAgICAgewogICAgICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVI
b3N0OjphbmltYXRlQW5kTGF5b3V0IiwgdGhpcywgMCk7CiAgICAgICAgIG1fbGF5ZXJUcmVlSG9z
dC0+YW5pbWF0ZUFuZExheW91dChmcmFtZUJlZ2luVGltZSk7CiAgICAgfQogCi0gICAgbV9jb21t
aXRQZW5kaW5nID0gZmFsc2U7CisgICAgQVNTRVJUKG1fbGFzdEV4ZWN1dGVkQmVnaW5GcmFtZUFu
ZENvbW1pdFNlcXVlbmNlTnVtYmVyID09IHNlcXVlbmNlTnVtYmVyKTsKIAotICAgIC8vIEJsb2Nr
aW5nIGNhbGwgdG8gQ0NUaHJlYWRQcm94eTo6cGVyZm9ybUNvbW1pdAotICAgIENDQ29tcGxldGlv
bkV2ZW50IGNvbXBsZXRpb247Ci0gICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFk
VGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6Y29tbWl0T25DQ1RocmVhZCwgQWxsb3dDcm9zc1Ro
cmVhZEFjY2VzcygmY29tcGxldGlvbikpKTsKLSAgICBjb21wbGV0aW9uLndhaXQoKTsKKyAgICAv
LyBDbGVhciB0aGUgY29tbWl0IGZsYWcgYWZ0ZXIgYW5pbWF0ZUFuZExheW91dCBoZXJlIC0tLSBv
YmplY3RzIHRoYXQgb25seQorICAgIC8vIGxheW91dCB3aGVuIHBhaW50ZWQgd2lsbCB0cmlnZ2Vy
IGFub3RoZXIgc2V0TmVlZHNDb21taXQgaW5zaWRlCisgICAgLy8gdXBkYXRlTGF5ZXJzLgorICAg
IG1fY29tbWl0UmVxdWVzdGVkID0gZmFsc2U7CisKKyAgICBtX2xheWVyVHJlZUhvc3QtPnVwZGF0
ZUxheWVycygpOworCisgICAgeworICAgICAgICAvLyBCbG9ja2luZyBjYWxsIHRvIENDVGhyZWFk
UHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQKKyAgICAgICAgVFJBQ0VfRVZFTlQoImNvbW1pdCIsIHRo
aXMsIDApOworICAgICAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOworICAgICAgICBj
Y1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5
Ojpjb21taXRPbkNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9uKSkp
OworICAgICAgICBjb21wbGV0aW9uLndhaXQoKTsKKyAgICB9CisKKyAgICBtX2xheWVyVHJlZUhv
c3QtPmNvbW1pdENvbXBsZXRlKCk7CisKKyAgICBBU1NFUlQobV9sYXN0RXhlY3V0ZWRCZWdpbkZy
YW1lQW5kQ29tbWl0U2VxdWVuY2VOdW1iZXIgPT0gc2VxdWVuY2VOdW1iZXIpOwogfQogCiB2b2lk
IENDVGhyZWFkUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBs
ZXRpb24pCiB7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVBbmRD
b21taXRPbkNDVGhyZWFkIiwgdGhpcywgMCk7CiAgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsK
LSAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6Y29tbWl0T25DQ1RocmVhZCIsIHRoaXMs
IDApOwotICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmJlZ2luQ29tbWl0KCk7Ci0gICAgewotICAg
ICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojpjb21taXQiLCB0aGlzLCAwKTsKLSAg
ICAgICAgbV9sYXllclRyZWVIb3N0LT5jb21taXRUbyhtX2xheWVyVHJlZUhvc3RJbXBsLmdldCgp
KTsKKyAgICBBU1NFUlQobV9iZWdpbkZyYW1lQW5kQ29tbWl0UGVuZGluZ09uQ0NUaHJlYWQpOwor
ICAgIG1fYmVnaW5GcmFtZUFuZENvbW1pdFBlbmRpbmdPbkNDVGhyZWFkID0gZmFsc2U7CisgICAg
aWYgKCFtX2xheWVyVHJlZUhvc3RJbXBsKSB7CisgICAgICAgIGNvbXBsZXRpb24tPnNpZ25hbCgp
OworICAgICAgICByZXR1cm47CiAgICAgfQorICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmJlZ2lu
Q29tbWl0KCk7CisgICAgbV9sYXllclRyZWVIb3N0LT5jb21taXRUbyhtX2xheWVyVHJlZUhvc3RJ
bXBsLmdldCgpKTsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5jb21taXRDb21wbGV0ZSgpOwor
CiAgICAgY29tcGxldGlvbi0+c2lnbmFsKCk7CiAKLSAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5j
b21taXRDb21wbGV0ZSgpOwotICAgIHNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCgpOworICAgIGlm
IChtX3JlZHJhd1JlcXVlc3RlZE9uQ0NUaHJlYWQpCisgICAgICAgIHNjaGVkdWxlRHJhd1Rhc2tP
bkNDVGhyZWFkKCk7CiB9CiAKLXZvaWQgQ0NUaHJlYWRQcm94eTo6ZHJhd0xheWVyc09uQ0NUaHJl
YWQoKQordm9pZCBDQ1RocmVhZFByb3h5OjpzY2hlZHVsZURyYXdUYXNrT25DQ1RocmVhZCgpCiB7
Ci0gICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkIiwg
dGhpcywgMCk7CisgICAgaWYgKG1fZHJhd1Rhc2tQb3N0ZWRPbkNDVGhyZWFkKQorICAgICAgICBy
ZXR1cm47CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OnNjaGVkdWxlRHJhd1Rhc2tP
bkNDVGhyZWFkIiwgdGhpcywgMCk7CiAgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKLSAgICBp
ZiAobV9sYXllclRyZWVIb3N0SW1wbCkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+ZHJh
d0xheWVycygpOworICAgIEFTU0VSVChtX2xheWVyVHJlZUhvc3RJbXBsKTsKKyAgICBtX2RyYXdU
YXNrUG9zdGVkT25DQ1RocmVhZCA9IHRydWU7CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0
ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6ZHJhd0xheWVyc0FuZFByZXNlbnRP
bkNDVGhyZWFkKSk7CiB9CiAKLXZvaWQgQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRPbkND
VGhyZWFkKCkKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6ZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhy
ZWFkKCkKIHsKLSAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRP
bkNDVGhyZWFkIiwgdGhpcywgMCk7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OmRy
YXdMYXllcnNPbkNDVGhyZWFkIiwgdGhpcywgMCk7CiAgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgp
KTsKLSAgICBBU1NFUlQobV9sYXllclRyZWVIb3N0SW1wbCk7Ci0gICAgLy8gRklYTUU6IE5vdCB5
ZXQgaW1wbGVtZW50ZWQsIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Njc0MTcKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBpZiAoIW1fbGF5ZXJUcmVl
SG9zdEltcGwpCisgICAgICAgIHJldHVybjsKKworICAgIGRyYXdMYXllcnNPbkNDVGhyZWFkKCk7
CisgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+cHJlc2VudCgpOworICAgIG1fcmVkcmF3UmVxdWVz
dGVkT25DQ1RocmVhZCA9IGZhbHNlOworICAgIG1fZHJhd1Rhc2tQb3N0ZWRPbkNDVGhyZWFkID0g
ZmFsc2U7CiB9CiAKLXZvaWQgQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXdP
bkNDVGhyZWFkKCkKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQoKQog
ewotICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJh
d09uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6
ZHJhd0xheWVyc09uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKICAgICBBU1NFUlQoaXNJbXBsVGhyZWFk
KCkpOwogICAgIEFTU0VSVChtX2xheWVyVHJlZUhvc3RJbXBsKTsKLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKworICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmRyYXdMYXllcnMoKTsKKyAgICBB
U1NFUlQoIW1fbGF5ZXJUcmVlSG9zdEltcGwtPmlzQ29udGV4dExvc3QoKSk7CiB9CiAKLXZvaWQg
Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKCkKK3ZvaWQgQ0NUaHJlYWRQ
cm94eTo6dXBkYXRlU2NoZWR1bGVyU3RhdGVPbkNDVGhyZWFkKGJvb2wgY29tbWl0UmVxdWVzdGVk
LCBib29sIHJlZHJhd1JlcXVlc3RlZCkKIHsKLSAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94
eTo6c2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkIiwgdGhpcywgMCk7Ci0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OnVwZGF0ZVNjaGVkdWxl
clN0YXRlT25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7
CisgICAgQVNTRVJUKG1fbGF5ZXJUcmVlSG9zdEltcGwpOworCisgICAgLy8gRklYTUU6IHVzZSBD
Q1NjaGVkdWxlciB0byBkZWNpZGUgd2hlbiB0byBtYW5hZ2UgdGhlIGNvbnZlcnNpb24gb2YgdGhp
cworICAgIC8vIGNvbW1pdCByZXF1ZXN0IGludG8gYW4gYWN0dWFsIGNyZWF0ZUJlZ2luRnJhbWVB
bmRDb21taXRUYXNrT25DQ1RocmVhZCBjYWxsLgorICAgIG1fcmVkcmF3UmVxdWVzdGVkT25DQ1Ro
cmVhZCB8PSByZWRyYXdSZXF1ZXN0ZWQ7CisgICAgaWYgKCFtX2JlZ2luRnJhbWVBbmRDb21taXRQ
ZW5kaW5nT25DQ1RocmVhZCkKKyAgICAgICAgQ0NNYWluVGhyZWFkOjpwb3N0VGFzayhjcmVhdGVC
ZWdpbkZyYW1lQW5kQ29tbWl0VGFza09uQ0NUaHJlYWQoKSk7CisKKyAgICAvLyBJZiBubyBjb21t
aXQgaXMgcGVuZGluZywgYnV0IGEgcmVkcmF3IGlzIHJlcXVlc3RlZCwgdGhlbiBwb3N0IGEgcmVk
cmF3IHJpZ2h0IGF3YXkKKyAgICBpZiAoIW1fYmVnaW5GcmFtZUFuZENvbW1pdFBlbmRpbmdPbkND
VGhyZWFkICYmIG1fcmVkcmF3UmVxdWVzdGVkT25DQ1RocmVhZCkKKyAgICAgICAgc2NoZWR1bGVE
cmF3VGFza09uQ0NUaHJlYWQoKTsKKwogfQogCiB2b2lkIENDVGhyZWFkUHJveHk6OmluaXRpYWxp
emVJbXBsT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFk
UHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGhyZWFkUHJveHkuaAppbmRleCAyNDY3NzI0MGNhYWE2OTEyNjc2ZDdlZGZlMGZhYjJjYzIxMjYy
ZWMyLi41YTBlYTY3YjUwMTQ1MTkxNzMwNTVmYzdhZGNlMTFkYmM5YTgxMWZjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFBy
b3h5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUaHJlYWRQcm94eS5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJjYy9DQ0NvbXBs
ZXRpb25FdmVudC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKKyNpbmNs
dWRlICJjYy9DQ01haW5UaHJlYWQuaCIKICNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCiAjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgogCkBAIC01OCwyOCArNTksMzYgQEAgcHJpdmF0ZToKICAgICBleHBs
aWNpdCBDQ1RocmVhZFByb3h5KENDTGF5ZXJUcmVlSG9zdCopOwogCiAgICAgLy8gQ2FsbGVkIG9u
IENDTWFpblRocmVhZAotICAgIHZvaWQgYmVnaW5GcmFtZUFuZENvbW1pdChkb3VibGUgZnJhbWVC
ZWdpblRpbWUpOworICAgIHZvaWQgYmVnaW5GcmFtZUFuZENvbW1pdChpbnQgc2VxdWVuY2VOdW1i
ZXIsIGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CiAKICAgICAvLyBDYWxsZWQgb24gQ0NUaHJlYWQK
LSAgICB2b2lkIGJlZ2luRnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKCk7CisgICAgUGFzc093blB0
cjxDQ01haW5UaHJlYWQ6OlRhc2s+IGNyZWF0ZUJlZ2luRnJhbWVBbmRDb21taXRUYXNrT25DQ1Ro
cmVhZCgpOworICAgIHZvaWQgY3JlYXRlQmVnaW5GcmFtZUFuZENvbW1pdFRhc2tPbkNDVGhyZWFk
KENDQ29tcGxldGlvbkV2ZW50KiwgQ0NNYWluVGhyZWFkOjpUYXNrKiopOwogICAgIHZvaWQgY29t
bWl0T25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCopOworICAgIHZvaWQgZHJhd0xheWVyc0Fu
ZFByZXNlbnRPbkNDVGhyZWFkKCk7CiAgICAgdm9pZCBkcmF3TGF5ZXJzT25DQ1RocmVhZCgpOwor
ICAgIHZvaWQgZHJhd0xheWVyc0FuZFJlYWRiYWNrT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVu
dCosIGJvb2wqIHN1Y2Nlc3MsIHZvaWQqIHBpeGVscywgY29uc3QgSW50UmVjdCYpOworICAgIHZv
aWQgZmluaXNoQWxsUmVuZGVyaW5nT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCopOwogICAg
IHZvaWQgaW5pdGlhbGl6ZUltcGxPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50Kik7CiAgICAg
dm9pZCBpbml0aWFsaXplTGF5ZXJSZW5kZXJlck9uQ0NUaHJlYWQoR3JhcGhpY3NDb250ZXh0M0Qq
LCBDQ0NvbXBsZXRpb25FdmVudCosIGJvb2wqIGluaXRpYWxpemVTdWNjZWVkZWQsIExheWVyUmVu
ZGVyZXJDYXBhYmlsaXRpZXMqKTsKICAgICB2b2lkIHNldE5lZWRzQ29tbWl0T25DQ1RocmVhZCgp
OwotICAgIHZvaWQgc2V0TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhyZWFkKCk7Ci0gICAgdm9p
ZCBzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQoKTsKKyAgICB2b2lkIHVwZGF0ZVNjaGVkdWxlclN0
YXRlT25DQ1RocmVhZChib29sIGNvbW1pdFJlcXVlc3RlZCwgYm9vbCByZWRyYXdSZXF1ZXN0ZWQp
OwogICAgIHZvaWQgbGF5ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZl
bnQqKTsKLQotICAgIC8vIFVzZWQgb24gbWFpbi10aHJlYWQgb25seS4KLSAgICBib29sIG1fY29t
bWl0UGVuZGluZzsKKyAgICB2b2lkIHNjaGVkdWxlRHJhd1Rhc2tPbkNDVGhyZWFkKCk7CiAKICAg
ICAvLyBBY2Nlc3NlZCBvbiBtYWluIHRocmVhZCBvbmx5LgorICAgIGJvb2wgbV9jb21taXRSZXF1
ZXN0ZWQ7CiAgICAgQ0NMYXllclRyZWVIb3N0KiBtX2xheWVyVHJlZUhvc3Q7CiAgICAgTGF5ZXJS
ZW5kZXJlckNhcGFiaWxpdGllcyBtX2xheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXNNYWluVGhyZWFk
Q29weTsKKyAgICBib29sIG1fc3RhcnRlZDsKKyAgICBpbnQgbV9sYXN0RXhlY3V0ZWRCZWdpbkZy
YW1lQW5kQ29tbWl0U2VxdWVuY2VOdW1iZXI7CiAKLSAgICAvLyBVc2VkIG9uIHRoZSBDQ1RocmVh
ZCwgYnV0IGNoZWNrZWQgb24gbWFpbiB0aHJlYWQgZHVyaW5nIGluaXRpYWxpemF0aW9uL3NodXRk
b3duLgorICAgIC8vIFVzZWQgb24gdGhlIENDVGhyZWFkIG9ubHkKICAgICBPd25QdHI8Q0NMYXll
clRyZWVIb3N0SW1wbD4gbV9sYXllclRyZWVIb3N0SW1wbDsKKyAgICBpbnQgbV9udW1CZWdpbkZy
YW1lQW5kQ29tbWl0c0lzc3VlZE9uQ0NUaHJlYWQ7CisgICAgYm9vbCBtX2JlZ2luRnJhbWVBbmRD
b21taXRQZW5kaW5nT25DQ1RocmVhZDsKKyAgICBib29sIG1fZHJhd1Rhc2tQb3N0ZWRPbkNDVGhy
ZWFkOworICAgIGJvb2wgbV9yZWRyYXdSZXF1ZXN0ZWRPbkNDVGhyZWFkOwogfTsKIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBkYzhiMWYzMzdjZWRiMTk0NGFhMzZiZjA2OTkwYjNl
N2Y2MDFkODU3Li4wYzZhODIyYjk5ZmRkNWRjMWVkMDYyM2VhMDM2ZWIxZjY3MDc0MzMwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDExLTA5LTAyICBOYXQg
RHVjYSAgPG5kdWNhQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIE1ha2UgQ0NU
aHJlYWRQcm94eSBkcmF3CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02NzQxNworCisgICAgICAgIERpc2FibGUgQ0NMYXllclRyZWVIb3N0VGVzdCBjb21w
bGV0ZWx5IGFzIGl0IGRvZXMgbm90CisgICAgICAgIGNvbXBpbGUgd2hlbiB0aGUgdGhyZWFkZWQg
c3dpdGNoIGlzIGVuYWJsZWQuCisKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0
LmNwcDoKKwogMjAxMS0wOS0xNCAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29t
PgogCiAgICAgICAgIEZpeCBDaHJvbWl1bSBidWlsZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCmluZGV4IGQ4NTQ4MDY1ODRm
ZjMzZWExMzVjNmQwOWI1NTJmNzA5ZWQwMTY3MTAuLmZkMDc2ZWU1NzEzOTU2NGQ3MWEzMWVmZTE1
NzIwMWQ1YWY3NDdkZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NMYXllclRyZWVIb3N0VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcApAQCAtMjQsNyArMjQsOCBAQAogCiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAKLSNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisvLyBDQ0xheWVyVHJl
ZUhvc3QgZGlzYWJsZWQuIFNlZSBiNjc0MTguCisjaWYgMAogCiAjaW5jbHVkZSAiY2MvQ0NMYXll
clRyZWVIb3N0LmgiCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107586</attachid>
            <date>2011-09-15 19:27:54 -0700</date>
            <delta_ts>2011-09-16 15:46:05 -0700</delta_ts>
            <desc>Rebase and nits</desc>
            <filename>bug-67417-20110915192753.patch</filename>
            <type>text/plain</type>
            <size>30578</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTUxODcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkZmM1YWQ2MWIxODg0OThi
MzIwZWU3YTkzMjgxZWFiMTRiZmYzYjFkLi44N2JhYmQ4ZGE3YzE4NmNlYzFmYmVkYWRkYzQ4ZDMy
MmJlOTQwNjBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTEtMDktMTUgIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTWFrZSBDQ1Ro
cmVhZFByb3h5IGRyYXcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTY3NDE3CisKKyAgICAgICAgVXBkYXRlIHRoZSBDQ1RocmVhZFByb3h5IHRvIGNvcnJl
Y3RseSBpbXBsZW1lbnQgdGhlIENDUHJveHkKKyAgICAgICAgaW50ZXJmYWNlLCBkbyBhbGwgdGhl
IHJpZ2h0IGNvbW1pdHRpbmcgYW5kIHVwZGF0aW5nIHN0ZXBzLCBhbmQKKyAgICAgICAgZHJhdyBh
IHBpY3R1cmUgb24gdGhlIHNjcmVlbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ludFJlY3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNo
cm9taXVtOjp+TGF5ZXJSZW5kZXJlckNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNDSGVhZHNVcERpc3BsYXk6OmVuYWJsZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJ
bXBsOjpDQ0xheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6fkNDTGF5
ZXJJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpDQ0xheWVy
VHJlZUhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojpjb21taXRUbyk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNvbW1pdENvbXBsZXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2V0TmVlZHNSZWRyYXcpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVI
b3N0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjp+Q0NMYXll
clRyZWVIb3N0SW1wbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NTaW5nbGVUaHJlYWRQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVh
ZFByb3h5OjpmaW5pc2hBbGxSZW5kZXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVU
aHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVU
aHJlYWRQcm94eTo6Y29tbWl0SWZOZWVkZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJl
YWRQcm94eTo6Q0NUaHJlYWRQcm94eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5
Ojp+Q0NUaHJlYWRQcm94eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5Ojpjb21w
b3NpdGVBbmRSZWFkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpkcmF3
TGF5ZXJzQW5kUmVhZGJhY2tPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFk
UHJveHk6OmZpbmlzaEFsbFJlbmRlcmluZyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFBy
b3h5Ojppc1N0YXJ0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVl
ZHNDb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21t
aXRBbmRSZWRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNS
ZWRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c3RhcnQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Ro
cmVhZFByb3h5OjpmaW5pc2hBbGxSZW5kZXJpbmdPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDVGhyZWFkUHJveHk6OmNyZWF0ZUJlZ2luRnJhbWVBbmRDb21taXRUYXNrT25DQ1RocmVh
ZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c2NoZWR1bGVEcmF3VGFza09uQ0NUaHJl
YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6ZHJhd0xheWVyc0FuZFByZXNl
bnRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmRyYXdMYXll
cnNPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OnVwZGF0ZVNj
aGVkdWxlclN0YXRlT25DQ1RocmVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oOgorCiAyMDExLTA5LTE1ICBQZXRlciBCZXZlcmxvbyAg
PHBldGVyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIE1ha2Ugc3VyZSB0aGF0
IHRoZSBBUk0gTkVPTiBmaWxlcyBidWlsZCB3aXRoIC1tYXJtCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgKaW5kZXggNjcwZWEzYzE4ODllODA1ZDE1NzU4YjVkZDky
ZTdlOTQwYzA3MDgxZC4uMjRmODRiZWQ0Zjc1ZjVhNjc2YTA1NGM1MWEwNThhYjcyNjUwMGYyZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaApAQCAtMjYsNiAr
MjYsNyBAQAogI2lmbmRlZiBJbnRSZWN0X2gKICNkZWZpbmUgSW50UmVjdF9oCiAKKyNpbmNsdWRl
ICJDcm9zc1RocmVhZENvcGllci5oIgogI2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogCkBAIC0yNTcsNiArMjU4LDEwIEBAIEludFJlY3QgZW5jbG9zaW5nSW50
UmVjdChjb25zdCBDR1JlY3QmKTsKIEludFJlY3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBOU1Jl
Y3QmKTsKICNlbmRpZgogCisvLyBBbGxvdyBJbnRSZWN0cyB0byBtb3ZlIGFjcm9zcyB0aHJlYWQg
Ym91bmRhcmllcy4KK3RlbXBsYXRlPD4gc3RydWN0IENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxz
ZSwgZmFsc2UsIEludFJlY3Q+IDogcHVibGljIENyb3NzVGhyZWFkQ29waWVyUGFzc1Rocm91Z2g8
SW50UmVjdD4geworfTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gSW50
UmVjdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRleCBmM2JhMGM1
ZDc2ZDRkNjU2NjMyZmQ3NmZkYTY1NTllOTQ3Mjg5MDA4Li42M2ZlNDUzMDk4OTk5Y2I0YmVmNWVj
NDhmYTQzNWI0YTBkYjk1MTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHAKQEAgLTE4MSw2ICsxODEsNyBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlh
bGl6ZSgpCiAKIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6fkxheWVyUmVuZGVyZXJDaHJvbWl1bSgp
CiB7CisgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKICAgICBtX2hlYWRzVXBE
aXNwbGF5LmNsZWFyKCk7IC8vIEV4cGxpY2l0bHkgZGVzdHJveSB0aGUgSFVEIGJlZm9yZSB0aGUg
VGV4dHVyZU1hbmFnZXIgZGllcy4KICAgICBjbGVhbnVwU2hhcmVkT2JqZWN0cygpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NI
ZWFkc1VwRGlzcGxheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcAppbmRleCA4YzA4NjMwMTBjMjUxOGJkZTk3MTI3
ODJjY2E5ZWM2M2NiYWYxZmQwLi4yN2YwY2I5YzNjMTA0OTFjZWMxNTA0ZjYzOTE0YTA1NzA3YTQx
NDcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcApAQCAtODksNiArODksOSBA
QCB2b2lkIENDSGVhZHNVcERpc3BsYXk6Om9uUHJlc2VudCgpCiAKIGJvb2wgQ0NIZWFkc1VwRGlz
cGxheTo6ZW5hYmxlZCgpIGNvbnN0CiB7CisgICAgLy8gRklYTUU6IEhVRCBkb2VzIG5vdCB3b3Jr
IGluIGNvbXBvc2l0b3IgdGhyZWFkIG1vZGUuCisgICAgaWYgKHNldHRpbmdzKCkuZW5hYmxlQ29t
cG9zaXRvclRocmVhZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBzZXR0aW5n
cygpLnNob3dQbGF0Zm9ybUxheWVyVHJlZSB8fCBzZXR0aW5ncygpLnNob3dGUFNDb3VudGVyOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKaW5kZXggODQ1NDA2NDM1Yjg3ZjIwM2QxNzcwOGRj
NDc1NDljNmJhNmU5YTJmNy4uNGJjY2EwNzMwNzZiYTI0YzI5ZWZhNDBkZmUzYjNiMzk2MDllZDdh
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApAQCAtNzgsMTAgKzc4LDEyIEBAIENDTGF5ZXJJ
bXBsOjpDQ0xheWVySW1wbChpbnQgaWQpCiAgICAgLCBtX2RlYnVnQm9yZGVyQ29sb3IoMCwgMCwg
MCwgMCkKICAgICAsIG1fZGVidWdCb3JkZXJXaWR0aCgwKQogeworICAgIEFTU0VSVChDQ1Byb3h5
Ojppc0ltcGxUaHJlYWQoKSk7CiB9CiAKIENDTGF5ZXJJbXBsOjp+Q0NMYXllckltcGwoKQogewor
ICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiB9CiAKIHZvaWQgQ0NMYXllcklt
cGw6OmFkZENoaWxkKFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggZTgyMWFlYjQzMjAzZDM5NGFkMDJkYmU4ZjlkNjA0YzZi
ZjQyN2NiYi4uNWUyOGI4YzQ5ZWMyNmI0YjdhYjU0NmM3ZmZlMmM0NDIwMzc0ZDQ3MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC01Niw2ICs1Niw3IEBAIENDTGF5ZXJUcmVl
SG9zdDo6Q0NMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xpZW50LCBQYXNz
UmVmUHRyPExheWVyCiAgICAgLCBtX3pvb21BbmltYXRvclNjYWxlKDEpCiAgICAgLCBtX3Zpc2li
bGUodHJ1ZSkKIHsKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNNYWluVGhyZWFkKCkpOwogfQogCiBi
b29sIENDTGF5ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZSgpCkBAIC0xMDYsNiArMTA3LDExIEBAIHZv
aWQgQ0NMYXllclRyZWVIb3N0OjphbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGlt
ZSkKICAgICBtX2FuaW1hdGluZyA9IGZhbHNlOwogfQogCisvLyBUaGlzIGZ1bmN0aW9uIGNvbW1p
dHMgdGhlIENDTGF5ZXJUcmVlSG9zdCB0byBhbiBpbXBsIHRyZWUuIFdoZW4gbW9kaWZ5aW5nCisv
LyB0aGlzIGZ1bmN0aW9uLCBrZWVwIGluIG1pbmQgdGhhdCB0aGUgZnVuY3Rpb24gKnJ1bnMqIG9u
IHRoZSBpbXBsIHRocmVhZCEgQW55CisvLyBjb2RlIHRoYXQgaXMgbG9naWNhbGx5IGEgbWFpbiB0
aHJlYWQgb3BlcmF0aW9uLCBlLmcuIGRlbGV0aW9uIG9mIGEgTGF5ZXJDaHJvbWl1bSwKKy8vIHNo
b3VsZCBiZSBkZWxheWVkIHVudGlsIHRoZSBDQ0xheWVyVHJlZUhvc3Q6OmNvbW1pdENvbXBsZXRl
LCB3aGljaCB3aWxsIHJ1bgorLy8gYWZ0ZXIgdGhlIGNvbW1pdCwgYnV0IG9uIHRoZSBtYWluIHRo
cmVhZC4KIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojpjb21taXRUbyhDQ0xheWVyVHJlZUhvc3RJbXBs
KiBob3N0SW1wbCkKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwpAQCAt
MTE2LDE0ICsxMjIsMTIgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmNvbW1pdFRvKENDTGF5ZXJU
cmVlSG9zdEltcGwqIGhvc3RJbXBsKQogICAgIGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+ZGVs
ZXRlRXZpY3RlZFRleHR1cmVzKGhvc3RJbXBsLT5jb250ZXh0KCkpOwogCiAgICAgdXBkYXRlQ29t
cG9zaXRvclJlc291cmNlcyhtX3VwZGF0ZUxpc3QsIGhvc3RJbXBsLT5jb250ZXh0KCkpOwotICAg
IGNsZWFyUGVuZGluZ1VwZGF0ZSgpOwogCiAgICAgaG9zdEltcGwtPnNldFZpc2libGUobV92aXNp
YmxlKTsKICAgICBob3N0SW1wbC0+c2V0Wm9vbUFuaW1hdG9yU2NhbGUobV96b29tQW5pbWF0b3JT
Y2FsZSk7CiAgICAgaG9zdEltcGwtPnNldFZpZXdwb3J0KHZpZXdwb3J0U2l6ZSgpKTsKIAogICAg
IGhvc3RJbXBsLT5sYXllclJlbmRlcmVyKCktPnNldENvbnRlbnRzVGV4dHVyZU1lbW9yeVVzZUJ5
dGVzKG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCkpOwot
ICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+dW5wcm90ZWN0QWxsVGV4dHVyZXMoKTsKIAog
ICAgIC8vIFN5bmNocm9uaXplIHRyZWVzLCBpZiBvbmUgZXhpc3RzIGF0IGFsbC4uLgogICAgIGlm
IChyb290TGF5ZXIoKSkKQEAgLTEzNCw2ICsxMzgsMTIgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6
OmNvbW1pdFRvKENDTGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJbXBsKQogICAgIG1fZnJhbWVOdW1i
ZXIrKzsKIH0KIAordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmNvbW1pdENvbXBsZXRlKCkKK3sKKyAg
ICBjbGVhclBlbmRpbmdVcGRhdGUoKTsKKyAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnVu
cHJvdGVjdEFsbFRleHR1cmVzKCk7Cit9CisKIFBhc3NPd25QdHI8Q0NUaHJlYWQ+IENDTGF5ZXJU
cmVlSG9zdDo6Y3JlYXRlQ29tcG9zaXRvclRocmVhZCgpCiB7CiAgICAgcmV0dXJuIG1fY2xpZW50
LT5jcmVhdGVDb21wb3NpdG9yVGhyZWFkKCk7CkBAIC0yMTAsNyArMjIwLDYgQEAgdm9pZCBDQ0xh
eWVyVHJlZUhvc3Q6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCkKIHZvaWQgQ0NMYXllclRyZWVI
b3N0OjpzZXROZWVkc1JlZHJhdygpCiB7CiAjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQot
ICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3Q6OnNldE5lZWRzUmVkcmF3IiwgdGhpcywg
MCk7CiAgICAgbV9wcm94eS0+c2V0TmVlZHNSZWRyYXcoKTsKICNlbHNlCiAgICAgbV9jbGllbnQt
PnNjaGVkdWxlQ29tcG9zaXRlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCmluZGV4IGI1
MjNmNzc1ZDljY2I2YzNmY2RmNzJmY2QwZGEwMDI0ZjMzYzJmNzguLjRhNjJkMThkNWRhOTc1OTkw
NzhiN2VhOGZjZjViMmY4ZjIyNjQzYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCkBA
IC05Niw2ICs5Niw3IEBAIHB1YmxpYzoKIAogICAgIC8vIENDTGF5ZXJUcmVlSG9zdCBpbnRlcmZh
Y2UgdG8gQ0NQcm94eS4KICAgICB2b2lkIGFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVn
aW5UaW1lKTsKKyAgICB2b2lkIGNvbW1pdENvbXBsZXRlKCk7CiAgICAgdm9pZCBjb21taXRUbyhD
Q0xheWVyVHJlZUhvc3RJbXBsKik7CiAgICAgUGFzc093blB0cjxDQ1RocmVhZD4gY3JlYXRlQ29t
cG9zaXRvclRocmVhZCgpOwogICAgIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0
ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5jcHAKaW5kZXggYjMwNDgzNjhkYWEyMDc2ZmE0OWRiYTE0YmI5YzkzNjk4YjY3NmUxZC4u
NGExYzM5ZDRkMDkxMGJiZWJlYmY2ODY1N2ExMjEzNzQ0ZDU1Mjk1YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTQ4LDEwICs0OCwxMiBAQCBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpDQ0xheWVyVHJlZUhvc3RJbXBsKGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdz
KQogICAgICwgbV9mcmFtZU51bWJlcigwKQogICAgICwgbV9zZXR0aW5ncyhzZXR0aW5ncykKIHsK
KyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogfQogCiBDQ0xheWVyVHJlZUhv
c3RJbXBsOjp+Q0NMYXllclRyZWVIb3N0SW1wbCgpCiB7CisgICAgQVNTRVJUKENDUHJveHk6Omlz
SW1wbFRocmVhZCgpKTsKICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6fkND
TGF5ZXJUcmVlSG9zdEltcGwoKSIsIHRoaXMsIDApOwogICAgIGlmIChtX2xheWVyUmVuZGVyZXIp
CiAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+Y2xvc2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHku
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5n
bGVUaHJlYWRQcm94eS5jcHAKaW5kZXggMmQyN2Q3MjliMzgyMTEzOWYwODE3Y2VkYjQ3ZWFlZWZh
ZjM4NTg4Ny4uMDAyYTRhYjc2NTAxZjU3MTAyNTNmZWJiOTU1NzgxYTBhNWE2Y2JhNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5n
bGVUaHJlYWRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKQEAgLTExMSw4ICsxMTEsMTUgQEAg
R3JhcGhpY3NDb250ZXh0M0QqIENDU2luZ2xlVGhyZWFkUHJveHk6OmNvbnRleHQoKQogdm9pZCBD
Q1NpbmdsZVRocmVhZFByb3h5OjpmaW5pc2hBbGxSZW5kZXJpbmcoKQogewogICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7Ci0gICAgU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOwotICAgIG1fbGF5
ZXJUcmVlSG9zdEltcGwtPmZpbmlzaEFsbFJlbmRlcmluZygpOworICAgIGlmICghcmVjcmVhdGVD
b250ZXh0SWZOZWVkZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29tbWl0SWZOZWVkZWQo
KTsKKworICAgIHsKKyAgICAgICAgU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOworICAgICAgICBt
X2xheWVyVHJlZUhvc3RJbXBsLT5maW5pc2hBbGxSZW5kZXJpbmcoKTsKKyAgICB9CiB9CiAKIGJv
b2wgQ0NTaW5nbGVUaHJlYWRQcm94eTo6aXNTdGFydGVkKCkgY29uc3QKQEAgLTE1Nyw2ICsxNjQs
NyBAQCB2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0KCkKICAgICAgICAg
bV9sYXllclRyZWVIb3N0LT5jb21taXRUbyhtX2xheWVyVHJlZUhvc3RJbXBsLmdldCgpKTsKICAg
ICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+Y29tbWl0Q29tcGxldGUoKTsKICAgICB9CisgICAg
bV9sYXllclRyZWVIb3N0LT5jb21taXRDb21wbGV0ZSgpOwogfQogCiB2b2lkIENDU2luZ2xlVGhy
ZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCkKQEAgLTI1MCw2ICsyNTgsNyBAQCB2
b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OmNvbW1pdElmTmVlZGVkKCkKICAgICAgICAgbV9sYXll
clRyZWVIb3N0LT5jb21taXRUbyhtX2xheWVyVHJlZUhvc3RJbXBsLmdldCgpKTsKICAgICAgICAg
bV9sYXllclRyZWVIb3N0SW1wbC0+Y29tbWl0Q29tcGxldGUoKTsKICAgICB9CisgICAgbV9sYXll
clRyZWVIb3N0LT5jb21taXRDb21wbGV0ZSgpOwogfQogCiBib29sIENDU2luZ2xlVGhyZWFkUHJv
eHk6OmRvQ29tcG9zaXRlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKaW5kZXggMTJiNWIz
NjFhN2I1YzI2ZTBkMDA2Yjc3M2YwMDg2NzA5NWM4NzM2Ny4uZmJlNzVmYWZmYmMzNTRmZDQ3NTMx
Zjg3ZTZhNjE3ZjUyMzc5OWU5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKQEAgLTMx
LDYgKzMxLDcgQEAKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlICJj
Yy9DQ01haW5UaHJlYWRUYXNrLmgiCiAjaW5jbHVkZSAiY2MvQ0NUaHJlYWRUYXNrLmgiCisjaW5j
bHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAog
dXNpbmcgbmFtZXNwYWNlIFdURjsKQEAgLTQ4LDggKzQ5LDE0IEBAIFBhc3NPd25QdHI8Q0NQcm94
eT4gQ0NUaHJlYWRQcm94eTo6Y3JlYXRlKENDTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCkK
IH0KIAogQ0NUaHJlYWRQcm94eTo6Q0NUaHJlYWRQcm94eShDQ0xheWVyVHJlZUhvc3QqIGxheWVy
VHJlZUhvc3QpCi0gICAgOiBtX2NvbW1pdFBlbmRpbmcoZmFsc2UpCisgICAgOiBtX2NvbW1pdFJl
cXVlc3RlZChmYWxzZSkKICAgICAsIG1fbGF5ZXJUcmVlSG9zdChsYXllclRyZWVIb3N0KQorICAg
ICwgbV9zdGFydGVkKGZhbHNlKQorICAgICwgbV9sYXN0RXhlY3V0ZWRCZWdpbkZyYW1lQW5kQ29t
bWl0U2VxdWVuY2VOdW1iZXIoLTEpCisgICAgLCBtX251bUJlZ2luRnJhbWVBbmRDb21taXRzSXNz
dWVkT25DQ1RocmVhZCgwKQorICAgICwgbV9iZWdpbkZyYW1lQW5kQ29tbWl0UGVuZGluZ09uQ0NU
aHJlYWQoZmFsc2UpCisgICAgLCBtX2RyYXdUYXNrUG9zdGVkT25DQ1RocmVhZChmYWxzZSkKKyAg
ICAsIG1fcmVkcmF3UmVxdWVzdGVkT25DQ1RocmVhZChmYWxzZSkKIHsKICAgICBUUkFDRV9FVkVO
VCgiQ0NUaHJlYWRQcm94eTo6Q0NUaHJlYWRQcm94eSIsIHRoaXMsIDApOwogICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CkBAIC02Niw4ICs3Myw3IEBAIENDVGhyZWFkUHJveHk6On5DQ1RocmVh
ZFByb3h5KCkKIHsKICAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6fkNDVGhyZWFkUHJv
eHkiLCB0aGlzLCAwKTsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVCgh
bV9sYXllclRyZWVIb3N0SW1wbCk7IC8vIE1ha2Ugc3VyZSBzdG9wKCkgZ290IGNhbGxlZC4KLSAg
ICBBU1NFUlQoIW1fbGF5ZXJUcmVlSG9zdCk7IC8vIE1ha2Ugc3VyZSBzdG9wKCkgZ290IGNhbGxl
ZC4KKyAgICBBU1NFUlQoIW1fc3RhcnRlZCk7CiAKICAgICBudW1Qcm94aWVzLS07CiAgICAgaWYg
KCFudW1Qcm94aWVzKSB7CkBAIC03OCw4ICs4NCwyOSBAQCBDQ1RocmVhZFByb3h5Ojp+Q0NUaHJl
YWRQcm94eSgpCiAKIGJvb2wgQ0NUaHJlYWRQcm94eTo6Y29tcG9zaXRlQW5kUmVhZGJhY2sodm9p
ZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIHJldHVybiBmYWxzZTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAg
IEFTU0VSVChtX2xheWVyVHJlZUhvc3QpOworCisgICAgZmluaXNoQWxsUmVuZGVyaW5nKCk7Cisg
ICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CisgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlv
bjsKKyAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1Ro
cmVhZFByb3h5OjpkcmF3TGF5ZXJzQW5kUmVhZGJhY2tPbkNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhy
ZWFkQWNjZXNzKCZjb21wbGV0aW9uKSwgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcygmc3VjY2Vzcyks
IEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MocGl4ZWxzKSwgcmVjdCkpOworICAgIGNvbXBsZXRpb24u
d2FpdCgpOworICAgIHJldHVybiBzdWNjZXNzOworfQorCit2b2lkIENDVGhyZWFkUHJveHk6OmRy
YXdMYXllcnNBbmRSZWFkYmFja09uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRp
b24sIGJvb2wqIHN1Y2Nlc3MsIHZvaWQqIHBpeGVscywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sK
KyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOworICAgIGlmICghbV9sYXllclRy
ZWVIb3N0SW1wbCkgeworICAgICAgICAqc3VjY2VzcyA9IGZhbHNlOworICAgICAgICBjb21wbGV0
aW9uLT5zaWduYWwoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBkcmF3TGF5ZXJzT25D
Q1RocmVhZCgpOworICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJlYWRiYWNrKHBpeGVscywgcmVj
dCk7CisgICAgKnN1Y2Nlc3MgPSBtX2xheWVyVHJlZUhvc3RJbXBsLT5pc0NvbnRleHRMb3N0KCk7
CisgICAgY29tcGxldGlvbi0+c2lnbmFsKCk7CiB9CiAKIEdyYXBoaWNzQ29udGV4dDNEKiBDQ1Ro
cmVhZFByb3h5Ojpjb250ZXh0KCkKQEAgLTkwLDEyICsxMTcsMzQgQEAgR3JhcGhpY3NDb250ZXh0
M0QqIENDVGhyZWFkUHJveHk6OmNvbnRleHQoKQogCiB2b2lkIENDVGhyZWFkUHJveHk6OmZpbmlz
aEFsbFJlbmRlcmluZygpCiB7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgQVNTRVJU
KENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKKyAgICAvLyBJZiBhIGNvbW1pdCBpcyBwZW5kaW5n
LCBwZXJmb3JtIHRoZSBjb21taXQgZmlyc3QuCisgICAgaWYgKG1fY29tbWl0UmVxdWVzdGVkKSAg
eworICAgICAgICAvLyBUaGlzIGJpdCBvZiBjb2RlIGlzIHVnbGllciB0aGFuIGl0IHNob3VsZCBi
ZSBiZWNhdXNlIHJldHVybmluZworICAgICAgICAvLyBwb2ludGVycyB2aWEgdGhlIENDVGhyZWFk
IHRhc2sgbW9kZWwgaXMgcmVhbGx5IG1lc3N5LiBFZmZlY3RpdmVseSwgd2UKKyAgICAgICAgLy8g
YXJlIG1ha2luZyBhIGJsb2NraW5nIGNhbGwgdG8gY3JlYXRlQmVnaW5GcmFtZUFuZENvbW1pdFRh
c2tPbkNDVGhyZWFkLAorICAgICAgICAvLyBhbmQgdHJ5aW5nIHRvIGdldCB0aGUgQ0NNYWluVGhy
ZWFkOjpUYXNrIGl0IHJldHVybnMgc28gd2UgY2FuIHJ1biBpdC4KKyAgICAgICAgT3duUHRyPEND
TWFpblRocmVhZDo6VGFzaz4gYmVnaW5GcmFtZUFuZENvbW1pdFRhc2s7CisgICAgICAgIHsKKyAg
ICAgICAgICAgIENDTWFpblRocmVhZDo6VGFzayogdGFza1B0ciA9IDA7CisgICAgICAgICAgICBD
Q0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOworICAgICAgICAgICAgY2NUaHJlYWQtPnBvc3RU
YXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6Y3JlYXRlQmVnaW5G
cmFtZUFuZENvbW1pdFRhc2tPbkNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21w
bGV0aW9uKSwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmdGFza1B0cikpKTsKKyAgICAgICAgICAg
IGNvbXBsZXRpb24ud2FpdCgpOworICAgICAgICAgICAgYmVnaW5GcmFtZUFuZENvbW1pdFRhc2sg
PSBhZG9wdFB0cih0YXNrUHRyKTsKKyAgICAgICAgfQorCisgICAgICAgIGJlZ2luRnJhbWVBbmRD
b21taXRUYXNrLT5wZXJmb3JtVGFzaygpOworICAgIH0KKyAgICAvLyBNYWtlIHN1cmUgYWxsIEdM
IGRyYXdpbmcgaXMgZmluaXNoZWQgb24gdGhlIGltcGwgdGhyZWFkLgorICAgIENDQ29tcGxldGlv
bkV2ZW50IGNvbXBsZXRpb247CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFk
VGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6ZmluaXNoQWxsUmVuZGVyaW5nT25DQ1RocmVhZCwg
QWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29tcGxldGlvbikpKTsKKyAgICBjb21wbGV0aW9uLndh
aXQoKTsKIH0KIAogYm9vbCBDQ1RocmVhZFByb3h5Ojppc1N0YXJ0ZWQoKSBjb25zdAogewotICAg
IHJldHVybiBtX2xheWVyVHJlZUhvc3RJbXBsOworICAgIEFTU0VSVChDQ1Byb3h5Ojppc01haW5U
aHJlYWQoKSk7CisgICAgcmV0dXJuIG1fc3RhcnRlZDsKIH0KIAogYm9vbCBDQ1RocmVhZFByb3h5
Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlcigpCkBAIC0xMTIsNyArMTYxLDcgQEAgYm9vbCBDQ1Ro
cmVhZFByb3h5Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlcigpCiAgICAgLy8gTWFrZSBhIGJsb2Nr
aW5nIGNhbGwgdG8gaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJPbkNDVGhyZWFkLiBUaGUgcmVzdWx0
cyBvZiB0aGF0IGNhbGwKICAgICAvLyBhcmUgcHVzaGVkIGludG8gdGhlIGluaXRpYWxpemVTdWNj
ZWVkZWQgYW5kIGNhcGFiaWxpdGllcyBsb2NhbCB2YXJpYWJsZXMuCiAgICAgQ0NDb21wbGV0aW9u
RXZlbnQgY29tcGxldGlvbjsKLSAgICBib29sIGluaXRpYWxpemVTdWNjZWVkZWQ7CisgICAgYm9v
bCBpbml0aWFsaXplU3VjY2VlZGVkID0gZmFsc2U7CiAgICAgTGF5ZXJSZW5kZXJlckNhcGFiaWxp
dGllcyBjYXBhYmlsaXRpZXM7CiAgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFk
VGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJPbkNDVGhy
ZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dDcm9z
c1RocmVhZEFjY2Vzcyhjb250ZXh0UHRyKSwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29tcGxl
dGlvbiksIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmluaXRpYWxpemVTdWNjZWVkZWQpLCBBbGxv
d0Nyb3NzVGhyZWFkQWNjZXNzKCZjYXBhYmlsaXRpZXMpKSk7CkBAIC0xMzYsNDMgKzE4NSw1NyBA
QCB2b2lkIENDVGhyZWFkUHJveHk6Omxvc2VDb21wb3NpdG9yQ29udGV4dChpbnQgbnVtVGltZXMp
CiB2b2lkIENDVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0KCkKIHsKICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwotICAgIGlmIChtX2NvbW1pdFBlbmRpbmcpCisgICAgaWYgKG1fY29tbWl0
UmVxdWVzdGVkKQogICAgICAgICByZXR1cm47CiAKICAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQ
cm94eTo6c2V0TmVlZHNDb21taXQiLCB0aGlzLCAwKTsKLSAgICBtX2NvbW1pdFBlbmRpbmcgPSB0
cnVlOwotICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkND
VGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0T25DQ1RocmVhZCkpOworICAgIG1fY29tbWl0UmVx
dWVzdGVkID0gdHJ1ZTsKKyAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNr
KHRoaXMsICZDQ1RocmVhZFByb3h5Ojp1cGRhdGVTY2hlZHVsZXJTdGF0ZU9uQ0NUaHJlYWQsIG1f
Y29tbWl0UmVxdWVzdGVkLCB0cnVlKSk7CiB9CiAKIHZvaWQgQ0NUaHJlYWRQcm94eTo6c2V0TmVl
ZHNDb21taXRBbmRSZWRyYXcoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAg
aWYgKG1fY29tbWl0UGVuZGluZykKKyAgICBpZiAobV9jb21taXRSZXF1ZXN0ZWQpCiAgICAgICAg
IHJldHVybjsKKyAgICBtX2NvbW1pdFJlcXVlc3RlZCA9IHRydWU7CiAKICAgICBUUkFDRV9FVkVO
VCgiQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXciLCB0aGlzLCAwKTsKLSAg
ICBtX2NvbW1pdFBlbmRpbmcgPSB0cnVlOwotICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVD
Q1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3
T25DQ1RocmVhZCkpOworICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2so
dGhpcywgJkNDVGhyZWFkUHJveHk6OnVwZGF0ZVNjaGVkdWxlclN0YXRlT25DQ1RocmVhZCwgbV9j
b21taXRSZXF1ZXN0ZWQsIHRydWUpKTsKIH0KIAogdm9pZCBDQ1RocmVhZFByb3h5OjpzZXROZWVk
c1JlZHJhdygpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBjY1RocmVhZC0+
cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5OjpzZXROZWVk
c1JlZHJhd09uQ0NUaHJlYWQpKTsKKyAgICBpZiAobV9jb21taXRSZXF1ZXN0ZWQpIC8vIEltcGxp
ZXMgdGhhdCBhIGNvbW1pdCBpcyBpbiBmbGlnaHQuCisgICAgICAgIHJldHVybjsKKyAgICAvLyBV
bmxpa2Ugc2V0TmVlZHNDb21taXQgdGhhdCB0cmFja3Mgd2hldGhlciBhIGNvbW1pdCBtZXNzYWdl
IGhhcyBiZWVuIHNlbnQsCisgICAgLy8gc2V0TmVlZHNSZWRyYXcgYWx3YXlzIHNlbmRzIGEgbWVz
c2FnZSB0byB0aGUgY29tcG9zaXRvciB0aHJlYWQuIFRoaXMgaXMKKyAgICAvLyBiZWNhdXNlIHRo
ZSBjb21wb3NpdG9yIHRocmVhZCBjYW4gZHJhdyB3aXRob3V0IHRlbGxpbmcgdGhlIG1haW4KKyAg
ICAvLyB0aHJlYWQuIFRoaXMgc2hvdWxkIG5vdCBiZSBtdWNoIG9mIGEgcHJvYmxlbSBiZWNhdXNl
IGNhbGxzIHRvCisgICAgLy8gc2V0TmVlZHNSZWRyYXcgbWVzc2FnZXMgYXJlIHVuY29tbW9uIChv
bmx5IHRyaWdnZXJlZCBieSBXTV9QQUlOVC9ldGMpLAorICAgIC8vIGNvbXBhcmVkIHRvIHNldE5l
ZWRzQ29tbWl0QW5kUmVkcmF3IG1lc3NhZ2VzLgorICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFBy
b3h5OjpzZXROZWVkc1JlZHJhdyIsIHRoaXMsIDApOworICAgIGNjVGhyZWFkLT5wb3N0VGFzayhj
cmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OnVwZGF0ZVNjaGVkdWxlclN0
YXRlT25DQ1RocmVhZCwgZmFsc2UsIHRydWUpKTsKIH0KIAogdm9pZCBDQ1RocmVhZFByb3h5Ojpz
dGFydCgpCiB7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICAvLyBDcmVhdGUgTGF5
ZXJUcmVlSG9zdEltcGwuCiAgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKICAgICBj
Y1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5
Ojppbml0aWFsaXplSW1wbE9uQ0NUaHJlYWQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBs
ZXRpb24pKSk7CiAgICAgY29tcGxldGlvbi53YWl0KCk7CisKKyAgICBtX3N0YXJ0ZWQgPSB0cnVl
OwogfQogCiB2b2lkIENDVGhyZWFkUHJveHk6OnN0b3AoKQogewogICAgIFRSQUNFX0VWRU5UKCJD
Q1RocmVhZFByb3h5OjpzdG9wIiwgdGhpcywgMCk7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKKyAgICBBU1NFUlQobV9zdGFydGVkKTsKKwogICAgIC8vIFN5bmNocm9ub3VzbHkgZGVsZXRl
cyB0aGUgaW1wbC4KICAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOwogICAgIGNjVGhy
ZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6Omxh
eWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21w
bGV0aW9uKSkpOwpAQCAtMTgwLDgwICsyNDMsMTY2IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6c3Rv
cCgpCiAKICAgICBBU1NFUlQoIW1fbGF5ZXJUcmVlSG9zdEltcGwpOyAvLyB2ZXJpZnkgdGhhdCB0
aGUgaW1wbCBkZWxldGVkLgogICAgIG1fbGF5ZXJUcmVlSG9zdCA9IDA7CisgICAgbV9zdGFydGVk
ID0gZmFsc2U7CiB9CiAKLXZvaWQgQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUFuZENvbW1pdE9u
Q0NUaHJlYWQoKQordm9pZCBDQ1RocmVhZFByb3h5OjpmaW5pc2hBbGxSZW5kZXJpbmdPbkNDVGhy
ZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQogewotICAgIFRSQUNFX0VWRU5UKCJD
Q1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZCIsIHRoaXMsIDApOwor
ICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpmaW5pc2hBbGxSZW5kZXJpbmdPbkNDVGhy
ZWFkIiwgdGhpcywgMCk7CiAgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKLSAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAvLyBGSVhNRTogY2FsbCBiZWdpbkZyYW1lQW5kQ29tbWl0IG9u
IG1haW4gdGhyZWFkCisgICAgQVNTRVJUKCFtX2JlZ2luRnJhbWVBbmRDb21taXRQZW5kaW5nT25D
Q1RocmVhZCk7CisgICAgaWYgKG1fcmVkcmF3UmVxdWVzdGVkT25DQ1RocmVhZCkgeworICAgICAg
ICBkcmF3TGF5ZXJzT25DQ1RocmVhZCgpOworICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5w
cmVzZW50KCk7CisgICAgICAgIG1fcmVkcmF3UmVxdWVzdGVkT25DQ1RocmVhZCA9IGZhbHNlOwor
ICAgIH0KKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5maW5pc2hBbGxSZW5kZXJpbmcoKTsKKyAg
ICBjb21wbGV0aW9uLT5zaWduYWwoKTsKK30KKwordm9pZCBDQ1RocmVhZFByb3h5OjpjcmVhdGVC
ZWdpbkZyYW1lQW5kQ29tbWl0VGFza09uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBs
ZXRpb24sIENDTWFpblRocmVhZDo6VGFzayoqIHRhc2tQdHIpCit7CisgICAgT3duUHRyPENDTWFp
blRocmVhZDo6VGFzaz4gdGFzayA9IGNyZWF0ZUJlZ2luRnJhbWVBbmRDb21taXRUYXNrT25DQ1Ro
cmVhZCgpOworICAgICp0YXNrUHRyID0gdGFzay5sZWFrUHRyKCk7CisgICAgY29tcGxldGlvbi0+
c2lnbmFsKCk7CiB9CiAKLXZvaWQgQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUFuZENvbW1pdChk
b3VibGUgZnJhbWVCZWdpblRpbWUpCitQYXNzT3duUHRyPENDTWFpblRocmVhZDo6VGFzaz4gQ0NU
aHJlYWRQcm94eTo6Y3JlYXRlQmVnaW5GcmFtZUFuZENvbW1pdFRhc2tPbkNDVGhyZWFkKCkKIHsK
KyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6Y3JlYXRlQmVnaW5GcmFtZUFuZENvbW1p
dFRhc2tPbkNDVGhyZWFkIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsK
KyAgICBkb3VibGUgZnJhbWVCZWdpblRpbWUgPSBjdXJyZW50VGltZSgpOworICAgIG1fYmVnaW5G
cmFtZUFuZENvbW1pdFBlbmRpbmdPbkNDVGhyZWFkID0gdHJ1ZTsKKworICAgIC8vIE5PVEUsIGl0
IGlzIHBvc3NpYmxlIHRvIHJlY2VpZXZlIGEgcmVxdWVzdCBmb3IgYQorICAgIC8vIGJlZ2luRnJh
bWVBbmRDb21taXRPbkNDVGhyZWFkIGZyb20gZmluaXNoQWxsUmVuZGVyaW5nIHdoaWxlIGEKKyAg
ICAvLyBiZWdpbkZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZCBpcyBlbnF1ZXVlZC4gU2luY2UgaXQg
Q0NNYWluVGhyZWFkIGRvZXNuJ3QKKyAgICAvLyBwcm92aWRlIGEgdGhyZWFkc2FmZSB3YXkgdG8g
Y2FuY2VsIHRhc2tzLCBpdCBpcyBpbXBvcnRhbnQgdGhhdAorICAgIC8vIGJlZ2luRnJhbWVBbmRD
b21taXQgYmUgc3RydWN0dXJlZCB0byB1bmRlcnN0YW5kIHRoYXQgaXQgbWF5IGdldCBjYWxsZWQg
YXQKKyAgICAvLyBhIHBvaW50IHRoYXQgaXQgc2hvdWxkbid0LiBXZSBkbyB0aGlzIGJ5IGFzc2ln
bmluZyBhIHNlcXVlbmNlIG51bWJlciB0bworICAgIC8vIGV2ZXJ5IG5ldyBiZWdpbkZyYW1lQW5k
Q29tbWl0IHRhc2suIFRoZW4sIGJlZ2luRnJhbWVBbmRDb21taXQgdHJhY2tzIHRoZQorICAgIC8v
IGxhc3QgZXhlY3V0ZWQgc2VxdWVuY2UgbnVtYmVyLCBkcm9wcGluZyBiZWdpbkZyYW1lQW5kQ29t
bWl0IHdpdGggc2VxdWVuY2UKKyAgICAvLyBudW1iZXJzIGJlbG93IHRoZSBsYXN0IGV4ZWN1dGVk
IG9uZS4KKyAgICBpbnQgdGhpc1Rhc2tTZXF1ZW5jZU51bWJlciA9IG1fbnVtQmVnaW5GcmFtZUFu
ZENvbW1pdHNJc3N1ZWRPbkNDVGhyZWFkOworICAgIG1fbnVtQmVnaW5GcmFtZUFuZENvbW1pdHNJ
c3N1ZWRPbkNDVGhyZWFkKys7CisgICAgcmV0dXJuIGNyZWF0ZU1haW5UaHJlYWRUYXNrKHRoaXMs
ICZDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0LCB0aGlzVGFza1NlcXVlbmNlTnVt
YmVyLCBmcmFtZUJlZ2luVGltZSk7Cit9CisKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFt
ZUFuZENvbW1pdChpbnQgc2VxdWVuY2VOdW1iZXIsIGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKK3sK
KyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUFuZENvbW1pdCIsIHRo
aXMsIDApOwogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgaWYgKCFtX2xheWVyVHJl
ZUhvc3QpCiAgICAgICAgIHJldHVybjsKIAotICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5
OjpyZXF1ZXN0RnJhbWVBbmRDb21taXQiLCB0aGlzLCAwKTsKKyAgICAvLyBEcm9wIGJlZ2luRnJh
bWVBbmRDb21taXQgY2FsbHMgdGhhdCBvY2N1ciBvdXQgb2Ygc2VxdWVuY2UuIFNlZSBjcmVhdGVC
ZWdpbkZyYW1lQW5kQ29tbWl0VGFza09uQ0NUaHJlYWQgZm9yCisgICAgLy8gYW4gZXhwbGFuYXRp
b24gb2YgaG93IG91dC1vZi1zZXF1ZW5jZSBiZWdpbkZyYW1lQW5kQ29tbWl0IHRhc2tzIGNhbiBv
Y2N1ci4KKyAgICBpZiAoc2VxdWVuY2VOdW1iZXIgPCBtX2xhc3RFeGVjdXRlZEJlZ2luRnJhbWVB
bmRDb21taXRTZXF1ZW5jZU51bWJlcikgeworICAgICAgICBUUkFDRV9FVkVOVCgiRWFybHlPdXRf
U3RhbGVCZWdpbkZyYW1lQW5kQ29tbWl0IiwgdGhpcywgMCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgbV9sYXN0RXhlY3V0ZWRCZWdpbkZyYW1lQW5kQ29tbWl0U2VxdWVuY2VOdW1iZXIg
PSBzZXF1ZW5jZU51bWJlcjsKKworICAgIEFTU0VSVChtX2NvbW1pdFJlcXVlc3RlZCk7CisKKyAg
ICAvLyBGSVhNRTogcmVjcmVhdGUgdGhlIGNvbnRleHQgaWYgaXQgd2FzIHJlcXVlc3RlZCBieSB0
aGUgaW1wbCB0aHJlYWQKICAgICB7CiAgICAgICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhv
c3Q6OmFuaW1hdGVBbmRMYXlvdXQiLCB0aGlzLCAwKTsKICAgICAgICAgbV9sYXllclRyZWVIb3N0
LT5hbmltYXRlQW5kTGF5b3V0KGZyYW1lQmVnaW5UaW1lKTsKICAgICB9CiAKLSAgICBtX2NvbW1p
dFBlbmRpbmcgPSBmYWxzZTsKKyAgICBBU1NFUlQobV9sYXN0RXhlY3V0ZWRCZWdpbkZyYW1lQW5k
Q29tbWl0U2VxdWVuY2VOdW1iZXIgPT0gc2VxdWVuY2VOdW1iZXIpOwogCi0gICAgLy8gQmxvY2tp
bmcgY2FsbCB0byBDQ1RocmVhZFByb3h5OjpwZXJmb3JtQ29tbWl0Ci0gICAgQ0NDb21wbGV0aW9u
RXZlbnQgY29tcGxldGlvbjsKLSAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRU
YXNrKHRoaXMsICZDQ1RocmVhZFByb3h5Ojpjb21taXRPbkNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhy
ZWFkQWNjZXNzKCZjb21wbGV0aW9uKSkpOwotICAgIGNvbXBsZXRpb24ud2FpdCgpOworICAgIC8v
IENsZWFyIHRoZSBjb21taXQgZmxhZyBhZnRlciBhbmltYXRlQW5kTGF5b3V0IGhlcmUgLS0tIG9i
amVjdHMgdGhhdCBvbmx5CisgICAgLy8gbGF5b3V0IHdoZW4gcGFpbnRlZCB3aWxsIHRyaWdnZXIg
YW5vdGhlciBzZXROZWVkc0NvbW1pdCBpbnNpZGUKKyAgICAvLyB1cGRhdGVMYXllcnMuCisgICAg
bV9jb21taXRSZXF1ZXN0ZWQgPSBmYWxzZTsKKworICAgIG1fbGF5ZXJUcmVlSG9zdC0+dXBkYXRl
TGF5ZXJzKCk7CisKKyAgICB7CisgICAgICAgIC8vIEJsb2NraW5nIGNhbGwgdG8gQ0NUaHJlYWRQ
cm94eTo6Y29tbWl0T25DQ1RocmVhZAorICAgICAgICBUUkFDRV9FVkVOVCgiY29tbWl0IiwgdGhp
cywgMCk7CisgICAgICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CisgICAgICAgIGNj
VGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6
OmNvbW1pdE9uQ0NUaHJlYWQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pKSk7
CisgICAgICAgIGNvbXBsZXRpb24ud2FpdCgpOworICAgIH0KKworICAgIG1fbGF5ZXJUcmVlSG9z
dC0+Y29tbWl0Q29tcGxldGUoKTsKKworICAgIEFTU0VSVChtX2xhc3RFeGVjdXRlZEJlZ2luRnJh
bWVBbmRDb21taXRTZXF1ZW5jZU51bWJlciA9PSBzZXF1ZW5jZU51bWJlcik7CiB9CiAKIHZvaWQg
Q0NUaHJlYWRQcm94eTo6Y29tbWl0T25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxl
dGlvbikKIHsKKyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUFuZENv
bW1pdE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKICAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOwot
ICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5Ojpjb21taXRPbkNDVGhyZWFkIiwgdGhpcywg
MCk7Ci0gICAgbV9sYXllclRyZWVIb3N0SW1wbC0+YmVnaW5Db21taXQoKTsKLSAgICB7Ci0gICAg
ICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3Q6OmNvbW1pdCIsIHRoaXMsIDApOwotICAg
ICAgICBtX2xheWVyVHJlZUhvc3QtPmNvbW1pdFRvKG1fbGF5ZXJUcmVlSG9zdEltcGwuZ2V0KCkp
OworICAgIEFTU0VSVChtX2JlZ2luRnJhbWVBbmRDb21taXRQZW5kaW5nT25DQ1RocmVhZCk7Cisg
ICAgbV9iZWdpbkZyYW1lQW5kQ29tbWl0UGVuZGluZ09uQ0NUaHJlYWQgPSBmYWxzZTsKKyAgICBp
ZiAoIW1fbGF5ZXJUcmVlSG9zdEltcGwpIHsKKyAgICAgICAgY29tcGxldGlvbi0+c2lnbmFsKCk7
CisgICAgICAgIHJldHVybjsKICAgICB9CisgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+YmVnaW5D
b21taXQoKTsKKyAgICBtX2xheWVyVHJlZUhvc3QtPmNvbW1pdFRvKG1fbGF5ZXJUcmVlSG9zdElt
cGwuZ2V0KCkpOworICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbW1pdENvbXBsZXRlKCk7CisK
ICAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKIAotICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNv
bW1pdENvbXBsZXRlKCk7Ci0gICAgc2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKCk7CisgICAgaWYg
KG1fcmVkcmF3UmVxdWVzdGVkT25DQ1RocmVhZCkKKyAgICAgICAgc2NoZWR1bGVEcmF3VGFza09u
Q0NUaHJlYWQoKTsKIH0KIAotdm9pZCBDQ1RocmVhZFByb3h5OjpkcmF3TGF5ZXJzT25DQ1RocmVh
ZCgpCit2b2lkIENDVGhyZWFkUHJveHk6OnNjaGVkdWxlRHJhd1Rhc2tPbkNDVGhyZWFkKCkKIHsK
LSAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQiLCB0
aGlzLCAwKTsKICAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOwotICAgIGlmIChtX2xheWVyVHJl
ZUhvc3RJbXBsKQotICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5kcmF3TGF5ZXJzKCk7Cisg
ICAgaWYgKG1fZHJhd1Rhc2tQb3N0ZWRPbkNDVGhyZWFkKQorICAgICAgICByZXR1cm47CisgICAg
VFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OnNjaGVkdWxlRHJhd1Rhc2tPbkNDVGhyZWFkIiwg
dGhpcywgMCk7CisgICAgQVNTRVJUKG1fbGF5ZXJUcmVlSG9zdEltcGwpOworICAgIG1fZHJhd1Rh
c2tQb3N0ZWRPbkNDVGhyZWFkID0gdHJ1ZTsKKyAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRl
Q0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5OjpkcmF3TGF5ZXJzQW5kUHJlc2VudE9u
Q0NUaHJlYWQpKTsKIH0KIAotdm9pZCBDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdE9uQ0NU
aHJlYWQoKQordm9pZCBDQ1RocmVhZFByb3h5OjpkcmF3TGF5ZXJzQW5kUHJlc2VudE9uQ0NUaHJl
YWQoKQogewotICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdE9u
Q0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6ZHJh
d0xheWVyc09uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKICAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkp
OwotICAgIEFTU0VSVChtX2xheWVyVHJlZUhvc3RJbXBsKTsKLSAgICAvLyBGSVhNRTogTm90IHll
dCBpbXBsZW1lbnRlZCwgc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02NzQxNwotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIGlmICghbV9sYXllclRyZWVI
b3N0SW1wbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZHJhd0xheWVyc09uQ0NUaHJlYWQoKTsK
KyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5wcmVzZW50KCk7CisgICAgbV9yZWRyYXdSZXF1ZXN0
ZWRPbkNDVGhyZWFkID0gZmFsc2U7CisgICAgbV9kcmF3VGFza1Bvc3RlZE9uQ0NUaHJlYWQgPSBm
YWxzZTsKIH0KIAotdm9pZCBDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09u
Q0NUaHJlYWQoKQordm9pZCBDQ1RocmVhZFByb3h5OjpkcmF3TGF5ZXJzT25DQ1RocmVhZCgpCiB7
Ci0gICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3
T25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5Ojpk
cmF3TGF5ZXJzT25DQ1RocmVhZCIsIHRoaXMsIDApOwogICAgIEFTU0VSVChpc0ltcGxUaHJlYWQo
KSk7CiAgICAgQVNTRVJUKG1fbGF5ZXJUcmVlSG9zdEltcGwpOwotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworCisgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+ZHJhd0xheWVycygpOworICAgIEFT
U0VSVCghbV9sYXllclRyZWVIb3N0SW1wbC0+aXNDb250ZXh0TG9zdCgpKTsKIH0KIAotdm9pZCBD
Q1RocmVhZFByb3h5OjpzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQoKQordm9pZCBDQ1RocmVhZFBy
b3h5Ojp1cGRhdGVTY2hlZHVsZXJTdGF0ZU9uQ0NUaHJlYWQoYm9vbCBjb21taXRSZXF1ZXN0ZWQs
IGJvb2wgcmVkcmF3UmVxdWVzdGVkKQogewotICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5
OjpzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6dXBkYXRlU2NoZWR1bGVy
U3RhdGVPbkNDVGhyZWFkIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsK
KyAgICBBU1NFUlQobV9sYXllclRyZWVIb3N0SW1wbCk7CisKKyAgICAvLyBGSVhNRTogdXNlIEND
U2NoZWR1bGVyIHRvIGRlY2lkZSB3aGVuIHRvIG1hbmFnZSB0aGUgY29udmVyc2lvbiBvZiB0aGlz
CisgICAgLy8gY29tbWl0IHJlcXVlc3QgaW50byBhbiBhY3R1YWwgY3JlYXRlQmVnaW5GcmFtZUFu
ZENvbW1pdFRhc2tPbkNDVGhyZWFkIGNhbGwuCisgICAgbV9yZWRyYXdSZXF1ZXN0ZWRPbkNDVGhy
ZWFkIHw9IHJlZHJhd1JlcXVlc3RlZDsKKyAgICBpZiAoIW1fYmVnaW5GcmFtZUFuZENvbW1pdFBl
bmRpbmdPbkNDVGhyZWFkKQorICAgICAgICBDQ01haW5UaHJlYWQ6OnBvc3RUYXNrKGNyZWF0ZUJl
Z2luRnJhbWVBbmRDb21taXRUYXNrT25DQ1RocmVhZCgpKTsKKworICAgIC8vIElmIG5vIGNvbW1p
dCBpcyBwZW5kaW5nLCBidXQgYSByZWRyYXcgaXMgcmVxdWVzdGVkLCB0aGVuIHBvc3QgYSByZWRy
YXcgcmlnaHQgYXdheQorICAgIGlmICghbV9iZWdpbkZyYW1lQW5kQ29tbWl0UGVuZGluZ09uQ0NU
aHJlYWQgJiYgbV9yZWRyYXdSZXF1ZXN0ZWRPbkNDVGhyZWFkKQorICAgICAgICBzY2hlZHVsZURy
YXdUYXNrT25DQ1RocmVhZCgpOworCiB9CiAKIHZvaWQgQ0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6
ZUltcGxPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQ
cm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NU
aHJlYWRQcm94eS5oCmluZGV4IDI0Njc3MjQwY2FhYTY5MTI2NzZkN2VkZmUwZmFiMmNjMjEyNjJl
YzIuLjVhMGVhNjdiNTAxNDUxOTE3MzA1NWZjN2FkY2UxMWRiYzlhODExZmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJv
eHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RocmVhZFByb3h5LmgKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgImNjL0NDQ29tcGxl
dGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgorI2luY2x1
ZGUgImNjL0NDTWFpblRocmVhZC5oIgogI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKICNpbmNsdWRl
IDx3dGYvT3duUHRyLmg+CiAKQEAgLTU4LDI4ICs1OSwzNiBAQCBwcml2YXRlOgogICAgIGV4cGxp
Y2l0IENDVGhyZWFkUHJveHkoQ0NMYXllclRyZWVIb3N0Kik7CiAKICAgICAvLyBDYWxsZWQgb24g
Q0NNYWluVGhyZWFkCi0gICAgdm9pZCBiZWdpbkZyYW1lQW5kQ29tbWl0KGRvdWJsZSBmcmFtZUJl
Z2luVGltZSk7CisgICAgdm9pZCBiZWdpbkZyYW1lQW5kQ29tbWl0KGludCBzZXF1ZW5jZU51bWJl
ciwgZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKIAogICAgIC8vIENhbGxlZCBvbiBDQ1RocmVhZAot
ICAgIHZvaWQgYmVnaW5GcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQoKTsKKyAgICBQYXNzT3duUHRy
PENDTWFpblRocmVhZDo6VGFzaz4gY3JlYXRlQmVnaW5GcmFtZUFuZENvbW1pdFRhc2tPbkNDVGhy
ZWFkKCk7CisgICAgdm9pZCBjcmVhdGVCZWdpbkZyYW1lQW5kQ29tbWl0VGFza09uQ0NUaHJlYWQo
Q0NDb21wbGV0aW9uRXZlbnQqLCBDQ01haW5UaHJlYWQ6OlRhc2sqKik7CiAgICAgdm9pZCBjb21t
aXRPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50Kik7CisgICAgdm9pZCBkcmF3TGF5ZXJzQW5k
UHJlc2VudE9uQ0NUaHJlYWQoKTsKICAgICB2b2lkIGRyYXdMYXllcnNPbkNDVGhyZWFkKCk7Cisg
ICAgdm9pZCBkcmF3TGF5ZXJzQW5kUmVhZGJhY2tPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50
KiwgYm9vbCogc3VjY2Vzcywgdm9pZCogcGl4ZWxzLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdm9p
ZCBmaW5pc2hBbGxSZW5kZXJpbmdPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50Kik7CiAgICAg
dm9pZCBpbml0aWFsaXplSW1wbE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsKICAgICB2
b2lkIGluaXRpYWxpemVMYXllclJlbmRlcmVyT25DQ1RocmVhZChHcmFwaGljc0NvbnRleHQzRCos
IENDQ29tcGxldGlvbkV2ZW50KiwgYm9vbCogaW5pdGlhbGl6ZVN1Y2NlZWRlZCwgTGF5ZXJSZW5k
ZXJlckNhcGFiaWxpdGllcyopOwogICAgIHZvaWQgc2V0TmVlZHNDb21taXRPbkNDVGhyZWFkKCk7
Ci0gICAgdm9pZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQoKTsKLSAgICB2b2lk
IHNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCgpOworICAgIHZvaWQgdXBkYXRlU2NoZWR1bGVyU3Rh
dGVPbkNDVGhyZWFkKGJvb2wgY29tbWl0UmVxdWVzdGVkLCBib29sIHJlZHJhd1JlcXVlc3RlZCk7
CiAgICAgdm9pZCBsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVu
dCopOwotCi0gICAgLy8gVXNlZCBvbiBtYWluLXRocmVhZCBvbmx5LgotICAgIGJvb2wgbV9jb21t
aXRQZW5kaW5nOworICAgIHZvaWQgc2NoZWR1bGVEcmF3VGFza09uQ0NUaHJlYWQoKTsKIAogICAg
IC8vIEFjY2Vzc2VkIG9uIG1haW4gdGhyZWFkIG9ubHkuCisgICAgYm9vbCBtX2NvbW1pdFJlcXVl
c3RlZDsKICAgICBDQ0xheWVyVHJlZUhvc3QqIG1fbGF5ZXJUcmVlSG9zdDsKICAgICBMYXllclJl
bmRlcmVyQ2FwYWJpbGl0aWVzIG1fbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllc01haW5UaHJlYWRD
b3B5OworICAgIGJvb2wgbV9zdGFydGVkOworICAgIGludCBtX2xhc3RFeGVjdXRlZEJlZ2luRnJh
bWVBbmRDb21taXRTZXF1ZW5jZU51bWJlcjsKIAotICAgIC8vIFVzZWQgb24gdGhlIENDVGhyZWFk
LCBidXQgY2hlY2tlZCBvbiBtYWluIHRocmVhZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24vc2h1dGRv
d24uCisgICAgLy8gVXNlZCBvbiB0aGUgQ0NUaHJlYWQgb25seQogICAgIE93blB0cjxDQ0xheWVy
VHJlZUhvc3RJbXBsPiBtX2xheWVyVHJlZUhvc3RJbXBsOworICAgIGludCBtX251bUJlZ2luRnJh
bWVBbmRDb21taXRzSXNzdWVkT25DQ1RocmVhZDsKKyAgICBib29sIG1fYmVnaW5GcmFtZUFuZENv
bW1pdFBlbmRpbmdPbkNDVGhyZWFkOworICAgIGJvb2wgbV9kcmF3VGFza1Bvc3RlZE9uQ0NUaHJl
YWQ7CisgICAgYm9vbCBtX3JlZHJhd1JlcXVlc3RlZE9uQ0NUaHJlYWQ7CiB9OwogCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDdkZDJhYTc4YmZkYjYzNTM5ZjAwMWVlNDMwYTBiN2E1
YTA1YTgxM2MuLmMxNjg0OGJkNjA1NzMxYmU2MGQ3ZjIwY2E3YzQ2MGYyOWE5NDRkN2UgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDktMTUgIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTWFrZSBDQ1Ro
cmVhZFByb3h5IGRyYXcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTY3NDE3CisKKyAgICAgICAgRGlzYWJsZSBDQ0xheWVyVHJlZUhvc3RUZXN0IHRlbXBv
cmFyaWx5LiBXaWxsIHJlLWVuYWJsZQorICAgICAgICB3aXRoIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02NzQxOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHA6CisKIDIw
MTEtMDktMTQgIEhhbyBaaGVuZyAgPHpoZW5naGFvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBS
ZW1vdmUgc29tZSBkZXBlbmRlbmNpZXMgb2YgRFJUIGZvciBBbmRyb2lkLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKaW5kZXgg
ZDg1NDgwNjU4NGZmMzNlYTEzNWM2ZDA5YjU1MmY3MDllZDAxNjcxMC4uZmQwNzZlZTU3MTM5NTY0
ZDcxYTMxZWZlMTU3MjAxZDVhZjc0N2RmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCkBAIC0yNCw3ICsyNCw4IEBACiAK
ICNpbmNsdWRlICJjb25maWcuaCIKIAotI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKKy8v
IENDTGF5ZXJUcmVlSG9zdCBkaXNhYmxlZC4gU2VlIGI2NzQxOC4KKyNpZiAwCiAKICNpbmNsdWRl
ICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107727</attachid>
            <date>2011-09-16 15:03:15 -0700</date>
            <delta_ts>2011-09-22 13:35:25 -0700</delta_ts>
            <desc>Merge win the tests.</desc>
            <filename>bug-67417-20110916150314.patch</filename>
            <type>text/plain</type>
            <size>37270</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTUzMDkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzMzNlYmFlYzg0MWZiMWM5
Y2FiMzE3YWQ2NTViYjYzNzFiMmRiM2RlLi4wMmY2MTBjYTAzNzNhMjA5NzEwY2I5ODdiNWQwMTI3
NWYzM2E0YmY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTEtMDktMTUgIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTWFrZSBDQ1Ro
cmVhZFByb3h5IGRyYXcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTY3NDE3CisKKyAgICAgICAgVXBkYXRlIHRoZSBDQ1RocmVhZFByb3h5IHRvIGNvcnJl
Y3RseSBpbXBsZW1lbnQgdGhlIENDUHJveHkKKyAgICAgICAgaW50ZXJmYWNlLCBkbyBhbGwgdGhl
IHJpZ2h0IGNvbW1pdHRpbmcgYW5kIHVwZGF0aW5nIHN0ZXBzLCBhbmQKKyAgICAgICAgZHJhdyBh
IHBpY3R1cmUgb24gdGhlIHNjcmVlbi4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp+TGF5ZXJSZW5kZXJlckNo
cm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRz
VXBEaXNwbGF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDSGVhZHNVcERpc3BsYXk6OmVuYWJs
ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpDQ0xheWVySW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6fkNDTGF5ZXJJbXBsKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpDQ0xheWVyVHJlZUhvc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0Ojpjb21taXRUbyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3Q6OmNvbW1pdENvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdDo6c2V0TmVlZHNSZWRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjp+Q0NMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5OjpmaW5pc2hBbGxSZW5kZXJp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21t
aXQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tbWl0SWZOZWVk
ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJv
eHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6Q0NUaHJlYWRQcm94eSk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5Ojp+Q0NUaHJlYWRQcm94eSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5Ojpjb21wb3NpdGVBbmRSZWFkYmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpkcmF3TGF5ZXJzQW5kUmVhZGJhY2tPbkNDVGhy
ZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmZpbmlzaEFsbFJlbmRlcmlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5Ojppc1N0YXJ0ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNSZWRyYXcpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NUaHJlYWRQcm94eTo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94
eTo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpmaW5pc2hBbGxSZW5k
ZXJpbmdPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmNyZWF0
ZUJlZ2luRnJhbWVBbmRDb21taXRUYXNrT25DQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkND
VGhyZWFkUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJl
YWRQcm94eTo6c2NoZWR1bGVEcmF3VGFza09uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NUaHJlYWRQcm94eTo6ZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhyZWFkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OnVwZGF0ZVNjaGVkdWxlclN0YXRlT25DQ1RocmVhZCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5o
OgorCiAyMDExLTA5LTE2ICBJYWluIE1lcnJpY2sgIDxodXNreUBnb29nbGUuY29tPgogCiAgICAg
ICAgIFtjaHJvbWl1bV0gRml4IENDTGF5ZXJUcmVlSG9zdFRlc3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAppbmRleCA2NzBlYTNjMTg4OWU4MDVkMTU3NThiNWRk
OTJlN2U5NDBjMDcwODFkLi4yNGY4NGJlZDRmNzVmNWE2NzZhMDU0YzUxYTA1OGFiNzI2NTAwZjJm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCkBAIC0yNiw2
ICsyNiw3IEBACiAjaWZuZGVmIEludFJlY3RfaAogI2RlZmluZSBJbnRSZWN0X2gKIAorI2luY2x1
ZGUgIkNyb3NzVGhyZWFkQ29waWVyLmgiCiAjaW5jbHVkZSAiSW50UG9pbnQuaCIKICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKQEAgLTI1Nyw2ICsyNTgsMTAgQEAgSW50UmVjdCBlbmNsb3NpbmdJ
bnRSZWN0KGNvbnN0IENHUmVjdCYpOwogSW50UmVjdCBlbmNsb3NpbmdJbnRSZWN0KGNvbnN0IE5T
UmVjdCYpOwogI2VuZGlmCiAKKy8vIEFsbG93IEludFJlY3RzIHRvIG1vdmUgYWNyb3NzIHRocmVh
ZCBib3VuZGFyaWVzLgordGVtcGxhdGU8PiBzdHJ1Y3QgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZh
bHNlLCBmYWxzZSwgSW50UmVjdD4gOiBwdWJsaWMgQ3Jvc3NUaHJlYWRDb3BpZXJQYXNzVGhyb3Vn
aDxJbnRSZWN0PiB7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBJ
bnRSZWN0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IDdhZmNi
NzM1YThkMTAzNTgzMmYyZjEzOTI0YzQzZTUzYWEyMzRhMjUuLmQwZjRlOTdlMTViY2U0OTExMDBi
ZWZmZDFiOGM3MzcyOGU3NTJmNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmNwcApAQCAtMTgyLDYgKzE4Miw3IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0
aWFsaXplKCkKIAogTGF5ZXJSZW5kZXJlckNocm9taXVtOjp+TGF5ZXJSZW5kZXJlckNocm9taXVt
KCkKIHsKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNNYWluVGhyZWFkKCkpOwogICAgIG1faGVhZHNV
cERpc3BsYXkuY2xlYXIoKTsgLy8gRXhwbGljaXRseSBkZXN0cm95IHRoZSBIVUQgYmVmb3JlIHRo
ZSBUZXh0dXJlTWFuYWdlciBkaWVzLgogICAgIGNsZWFudXBTaGFyZWRPYmplY3RzKCk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0hlYWRzVXBEaXNwbGF5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwCmluZGV4IDhjMDg2MzAxMGMyNTE4YmRlOTcx
Mjc4MmNjYTllYzYzY2JhZjFmZDAuLjI3ZjBjYjljM2MxMDQ5MWNlYzE1MDRmNjM5MTRhMDU3MDdh
NDE0NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwCkBAIC04OSw2ICs4OSw5
IEBAIHZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6b25QcmVzZW50KCkKIAogYm9vbCBDQ0hlYWRzVXBE
aXNwbGF5OjplbmFibGVkKCkgY29uc3QKIHsKKyAgICAvLyBGSVhNRTogSFVEIGRvZXMgbm90IHdv
cmsgaW4gY29tcG9zaXRvciB0aHJlYWQgbW9kZS4KKyAgICBpZiAoc2V0dGluZ3MoKS5lbmFibGVD
b21wb3NpdG9yVGhyZWFkKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHNldHRp
bmdzKCkuc2hvd1BsYXRmb3JtTGF5ZXJUcmVlIHx8IHNldHRpbmdzKCkuc2hvd0ZQU0NvdW50ZXI7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRleCA4NDU0MDY0MzViODdmMjAzZDE3NzA4
ZGM0NzU0OWM2YmE2ZTlhMmY3Li40YmNjYTA3MzA3NmJhMjRjMjllZmE0MGRmZTNiM2IzOTYwOWVk
N2EzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBAIC03OCwxMCArNzgsMTIgQEAgQ0NMYXll
ckltcGw6OkNDTGF5ZXJJbXBsKGludCBpZCkKICAgICAsIG1fZGVidWdCb3JkZXJDb2xvcigwLCAw
LCAwLCAwKQogICAgICwgbV9kZWJ1Z0JvcmRlcldpZHRoKDApCiB7CisgICAgQVNTRVJUKENDUHJv
eHk6OmlzSW1wbFRocmVhZCgpKTsKIH0KIAogQ0NMYXllckltcGw6On5DQ0xheWVySW1wbCgpCiB7
CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKIH0KIAogdm9pZCBDQ0xheWVy
SW1wbDo6YWRkQ2hpbGQoUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmNwcAppbmRleCBhMjU3YjQxMWFiOWY0YzRkNmFjZWJmZTdhNzUzYmYx
OWRhYjgzMmM4Li5iZGE2MDA0NzU0MTUwYzFmNjVlYjk4Y2NlYzU0NWZhMTgyMzQ4NzQwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTU2LDYgKzU2LDcgQEAgQ0NMYXllclRy
ZWVIb3N0OjpDQ0xheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0Q2xpZW50KiBjbGllbnQsIFBh
c3NSZWZQdHI8TGF5ZXIKICAgICAsIG1fem9vbUFuaW1hdG9yU2NhbGUoMSkKICAgICAsIG1fdmlz
aWJsZSh0cnVlKQogeworICAgIEFTU0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQoKSk7CiB9CiAK
IGJvb2wgQ0NMYXllclRyZWVIb3N0Ojppbml0aWFsaXplKCkKQEAgLTEwNiw2ICsxMDcsMTEgQEAg
dm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5U
aW1lKQogICAgIG1fYW5pbWF0aW5nID0gZmFsc2U7CiB9CiAKKy8vIFRoaXMgZnVuY3Rpb24gY29t
bWl0cyB0aGUgQ0NMYXllclRyZWVIb3N0IHRvIGFuIGltcGwgdHJlZS4gV2hlbiBtb2RpZnlpbmcK
Ky8vIHRoaXMgZnVuY3Rpb24sIGtlZXAgaW4gbWluZCB0aGF0IHRoZSBmdW5jdGlvbiAqcnVucyog
b24gdGhlIGltcGwgdGhyZWFkISBBbnkKKy8vIGNvZGUgdGhhdCBpcyBsb2dpY2FsbHkgYSBtYWlu
IHRocmVhZCBvcGVyYXRpb24sIGUuZy4gZGVsZXRpb24gb2YgYSBMYXllckNocm9taXVtLAorLy8g
c2hvdWxkIGJlIGRlbGF5ZWQgdW50aWwgdGhlIENDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0Q29tcGxl
dGUsIHdoaWNoIHdpbGwgcnVuCisvLyBhZnRlciB0aGUgY29tbWl0LCBidXQgb24gdGhlIG1haW4g
dGhyZWFkLgogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmNvbW1pdFRvKENDTGF5ZXJUcmVlSG9zdElt
cGwqIGhvc3RJbXBsKQogewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CkBA
IC0xMjAsMTQgKzEyNiwxMiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0VG8oQ0NMYXll
clRyZWVIb3N0SW1wbCogaG9zdEltcGwpCiAgICAgY29udGVudHNUZXh0dXJlTWFuYWdlcigpLT5k
ZWxldGVFdmljdGVkVGV4dHVyZXMoaG9zdEltcGwtPmNvbnRleHQoKSk7CiAKICAgICB1cGRhdGVD
b21wb3NpdG9yUmVzb3VyY2VzKG1fdXBkYXRlTGlzdCwgaG9zdEltcGwtPmNvbnRleHQoKSk7Ci0g
ICAgY2xlYXJQZW5kaW5nVXBkYXRlKCk7CiAKICAgICBob3N0SW1wbC0+c2V0VmlzaWJsZShtX3Zp
c2libGUpOwogICAgIGhvc3RJbXBsLT5zZXRab29tQW5pbWF0b3JTY2FsZShtX3pvb21BbmltYXRv
clNjYWxlKTsKICAgICBob3N0SW1wbC0+c2V0Vmlld3BvcnQodmlld3BvcnRTaXplKCkpOwogCiAg
ICAgaG9zdEltcGwtPmxheWVyUmVuZGVyZXIoKS0+c2V0Q29udGVudHNUZXh0dXJlTWVtb3J5VXNl
Qnl0ZXMobV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5jdXJyZW50TWVtb3J5VXNlQnl0ZXMoKSk7
Ci0gICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT51bnByb3RlY3RBbGxUZXh0dXJlcygpOwog
CiAgICAgLy8gU3luY2hyb25pemUgdHJlZXMsIGlmIG9uZSBleGlzdHMgYXQgYWxsLi4uCiAgICAg
aWYgKHJvb3RMYXllcigpKQpAQCAtMTM4LDYgKzE0MiwxMiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9z
dDo6Y29tbWl0VG8oQ0NMYXllclRyZWVIb3N0SW1wbCogaG9zdEltcGwpCiAgICAgbV9mcmFtZU51
bWJlcisrOwogfQogCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0Q29tcGxldGUoKQorewor
ICAgIGNsZWFyUGVuZGluZ1VwZGF0ZSgpOworICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+
dW5wcm90ZWN0QWxsVGV4dHVyZXMoKTsKK30KKwogUGFzc093blB0cjxDQ1RocmVhZD4gQ0NMYXll
clRyZWVIb3N0OjpjcmVhdGVDb21wb3NpdG9yVGhyZWFkKCkKIHsKICAgICByZXR1cm4gbV9jbGll
bnQtPmNyZWF0ZUNvbXBvc2l0b3JUaHJlYWQoKTsKQEAgLTIxNCw3ICsyMjQsNiBAQCB2b2lkIEND
TGF5ZXJUcmVlSG9zdDo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKQogdm9pZCBDQ0xheWVyVHJl
ZUhvc3Q6OnNldE5lZWRzUmVkcmF3KCkKIHsKICNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcp
Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6c2V0TmVlZHNSZWRyYXciLCB0aGlz
LCAwKTsKICAgICBtX3Byb3h5LT5zZXROZWVkc1JlZHJhdygpOwogI2Vsc2UKICAgICBtX2NsaWVu
dC0+c2NoZWR1bGVDb21wb3NpdGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXgg
ZmVlMjk1NjEyYjkyMTI3OTBkMGJlYzEwNjg3ZDA1YmQxMTc4YmYxNy4uYjdiOTA0OGZiZjU3MzBj
M2IxMGQ0MmFlMTY4N2NlZjllMDU5NTBmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgK
QEAgLTY3LDYgKzY3LDEyIEBAIHN0cnVjdCBDQ1NldHRpbmdzIHsKICAgICAgICAgICAgICwgZW5h
YmxlQ29tcG9zaXRvclRocmVhZChmYWxzZSkKICAgICAgICAgICAgICwgc2hvd0ZQU0NvdW50ZXIo
ZmFsc2UpCiAgICAgICAgICAgICAsIHNob3dQbGF0Zm9ybUxheWVyVHJlZShmYWxzZSkgeyB9Cisg
ICAgQ0NTZXR0aW5ncyhib29sIGFjY2VsZXJhdGVQYWludGluZywgYm9vbCBjb21wb3NpdGVPZmZz
Y3JlZW4sIGJvb2wgZW5hYmxlQ29tcG9zaXRvclRocmVhZCwgYm9vbCBzaG93RlBTQ291bnRlciwg
Ym9vbCBzaG93UGxhdGZvcm1MYXllclRyZWUpCisgICAgICAgICAgICA6IGFjY2VsZXJhdGVQYWlu
dGluZyhhY2NlbGVyYXRlUGFpbnRpbmcpCisgICAgICAgICAgICAsIGNvbXBvc2l0ZU9mZnNjcmVl
bihjb21wb3NpdGVPZmZzY3JlZW4pCisgICAgICAgICAgICAsIGVuYWJsZUNvbXBvc2l0b3JUaHJl
YWQoZW5hYmxlQ29tcG9zaXRvclRocmVhZCkKKyAgICAgICAgICAgICwgc2hvd0ZQU0NvdW50ZXIo
c2hvd0ZQU0NvdW50ZXIpCisgICAgICAgICAgICAsIHNob3dQbGF0Zm9ybUxheWVyVHJlZShzaG93
UGxhdGZvcm1MYXllclRyZWUpIHsgfQogCiAgICAgYm9vbCBhY2NlbGVyYXRlUGFpbnRpbmc7CiAg
ICAgYm9vbCBjb21wb3NpdGVPZmZzY3JlZW47CkBAIC05Niw2ICsxMDIsNyBAQCBwdWJsaWM6CiAK
ICAgICAvLyBDQ0xheWVyVHJlZUhvc3QgaW50ZXJmYWNlIHRvIENDUHJveHkuCiAgICAgdm9pZCBh
bmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CisgICAgdm9pZCBjb21taXRD
b21wbGV0ZSgpOwogICAgIHZvaWQgY29tbWl0VG8oQ0NMYXllclRyZWVIb3N0SW1wbCopOwogICAg
IFBhc3NPd25QdHI8Q0NUaHJlYWQ+IGNyZWF0ZUNvbXBvc2l0b3JUaHJlYWQoKTsKICAgICBQYXNz
UmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IGIzMDQ4MzY4ZGFh
MjA3NmZhNDlkYmExNGJiOWM5MzY5OGI2NzZlMWQuLjRhMWMzOWQ0ZDA5MTBiYmViZWJmNjg2NTdh
MTIxMzc0NGQ1NTI5NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3Bw
CkBAIC00OCwxMCArNDgsMTIgQEAgQ0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVIb3N0
SW1wbChjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncykKICAgICAsIG1fZnJhbWVOdW1iZXIoMCkK
ICAgICAsIG1fc2V0dGluZ3Moc2V0dGluZ3MpCiB7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1w
bFRocmVhZCgpKTsKIH0KIAogQ0NMYXllclRyZWVIb3N0SW1wbDo6fkNDTGF5ZXJUcmVlSG9zdElt
cGwoKQogeworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAgVFJBQ0Vf
RVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6On5DQ0xheWVyVHJlZUhvc3RJbXBsKCkiLCB0aGlz
LCAwKTsKICAgICBpZiAobV9sYXllclJlbmRlcmVyKQogICAgICAgICBtX2xheWVyUmVuZGVyZXIt
PmNsb3NlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1Byb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1Byb3h5LmgKaW5kZXggZjVlNDE4YjBlODNkYzY3YWMyYzM2ZTZmYTVhYmE5
YTY5ZGZhYzZjMi4uYjIyMmI5OTg4ZDgxN2Y0OTVjMmEzYTBmMDVjNGNhMWNlZGFkZDE2MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQ
cm94eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUHJveHkuaApAQCAtNzUsMTkgKzc1LDIwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBp
c0ltcGxUaHJlYWQoKTsKICNlbmRpZgogCi0gICAgLy8gVGVzdGluZyBob29rcwotICAgIHZpcnR1
YWwgdm9pZCBsb3NlQ29tcG9zaXRvckNvbnRleHQoaW50IG51bVRpbWVzKSA9IDA7Ci0KICAgICAv
LyBUZW1wb3JhcnkgaGFjayB3aGlsZSByZW5kZXJfd2lkZ2V0IHN0aWxsIGRvZXMgc2NoZWR1bGlu
ZyBmb3IgQ0NMYXllclRyZWVIb3N0TWFpblRocmVhZEkKICAgICB2aXJ0dWFsIEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0KCkgPSAwOwogCi1wcm90ZWN0ZWQ6Ci0gICAgQ0NQcm94eSgpIHsgfQot
ICAgIGZyaWVuZCBjbGFzcyBTY29wZWRTZXRJbXBsVGhyZWFkOworICAgIC8vIFRlc3RpbmcgaG9v
a3MKKyAgICB2aXJ0dWFsIHZvaWQgbG9zZUNvbXBvc2l0b3JDb250ZXh0KGludCBudW1UaW1lcykg
PSAwOworCiAjaWZuZGVmIE5ERUJVRwogICAgIHN0YXRpYyB2b2lkIHNldEltcGxUaHJlYWQoYm9v
bCk7CiAgICAgc3RhdGljIHZvaWQgc2V0SW1wbFRocmVhZChXVEY6OlRocmVhZElkZW50aWZpZXIp
OwogI2VuZGlmCisKK3Byb3RlY3RlZDoKKyAgICBDQ1Byb3h5KCkgeyB9CisgICAgZnJpZW5kIGNs
YXNzIFNjb3BlZFNldEltcGxUaHJlYWQ7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xl
VGhyZWFkUHJveHkuY3BwCmluZGV4IDJkMjdkNzI5YjM4MjExMzlmMDgxN2NlZGI0N2VhZWVmYWYz
ODU4ODcuLjAwMmE0YWI3NjUwMWY1NzEwMjUzZmViYjk1NTc4MWEwYTVhNmNiYTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xl
VGhyZWFkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCkBAIC0xMTEsOCArMTExLDE1IEBAIEdy
YXBoaWNzQ29udGV4dDNEKiBDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb250ZXh0KCkKIHZvaWQgQ0NT
aW5nbGVUaHJlYWRQcm94eTo6ZmluaXNoQWxsUmVuZGVyaW5nKCkKIHsKICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwotICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKLSAgICBtX2xheWVy
VHJlZUhvc3RJbXBsLT5maW5pc2hBbGxSZW5kZXJpbmcoKTsKKyAgICBpZiAoIXJlY3JlYXRlQ29u
dGV4dElmTmVlZGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbW1pdElmTmVlZGVkKCk7
CisKKyAgICB7CisgICAgICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICAgICAgbV9s
YXllclRyZWVIb3N0SW1wbC0+ZmluaXNoQWxsUmVuZGVyaW5nKCk7CisgICAgfQogfQogCiBib29s
IENDU2luZ2xlVGhyZWFkUHJveHk6OmlzU3RhcnRlZCgpIGNvbnN0CkBAIC0xNTcsNiArMTY0LDcg
QEAgdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdCgpCiAgICAgICAgIG1f
bGF5ZXJUcmVlSG9zdC0+Y29tbWl0VG8obV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSk7CiAgICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbW1pdENvbXBsZXRlKCk7CiAgICAgfQorICAgIG1f
bGF5ZXJUcmVlSG9zdC0+Y29tbWl0Q29tcGxldGUoKTsKIH0KIAogdm9pZCBDQ1NpbmdsZVRocmVh
ZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpCkBAIC0yNTAsNiArMjU4LDcgQEAgdm9p
ZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21taXRJZk5lZWRlZCgpCiAgICAgICAgIG1fbGF5ZXJU
cmVlSG9zdC0+Y29tbWl0VG8obV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSk7CiAgICAgICAgIG1f
bGF5ZXJUcmVlSG9zdEltcGwtPmNvbW1pdENvbXBsZXRlKCk7CiAgICAgfQorICAgIG1fbGF5ZXJU
cmVlSG9zdC0+Y29tbWl0Q29tcGxldGUoKTsKIH0KIAogYm9vbCBDQ1NpbmdsZVRocmVhZFByb3h5
Ojpkb0NvbXBvc2l0ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCmluZGV4IDlhODRkYTZj
MDUzYTM0MDI5ZTNkYWQzN2I3NmJiODI0MzUwMDdmNzEuLjNkNGVkNWVkMDE1OGZlZDA4NjBkN2M1
ZDJjMzEwN2MyNDEyZjUyMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCkBAIC0zMSw2
ICszMSw3IEBACiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCiAjaW5jbHVkZSAiY2Mv
Q0NNYWluVGhyZWFkVGFzay5oIgogI2luY2x1ZGUgImNjL0NDVGhyZWFkVGFzay5oIgorI2luY2x1
ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKIHVz
aW5nIG5hbWVzcGFjZSBXVEY7CkBAIC00OCw4ICs0OSwxNCBAQCBQYXNzT3duUHRyPENDUHJveHk+
IENDVGhyZWFkUHJveHk6OmNyZWF0ZShDQ0xheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QpCiB9
CiAKIENDVGhyZWFkUHJveHk6OkNDVGhyZWFkUHJveHkoQ0NMYXllclRyZWVIb3N0KiBsYXllclRy
ZWVIb3N0KQotICAgIDogbV9jb21taXRQZW5kaW5nKGZhbHNlKQorICAgIDogbV9jb21taXRSZXF1
ZXN0ZWQoZmFsc2UpCiAgICAgLCBtX2xheWVyVHJlZUhvc3QobGF5ZXJUcmVlSG9zdCkKKyAgICAs
IG1fc3RhcnRlZChmYWxzZSkKKyAgICAsIG1fbGFzdEV4ZWN1dGVkQmVnaW5GcmFtZUFuZENvbW1p
dFNlcXVlbmNlTnVtYmVyKC0xKQorICAgICwgbV9udW1CZWdpbkZyYW1lQW5kQ29tbWl0c0lzc3Vl
ZE9uQ0NUaHJlYWQoMCkKKyAgICAsIG1fYmVnaW5GcmFtZUFuZENvbW1pdFBlbmRpbmdPbkNDVGhy
ZWFkKGZhbHNlKQorICAgICwgbV9kcmF3VGFza1Bvc3RlZE9uQ0NUaHJlYWQoZmFsc2UpCisgICAg
LCBtX3JlZHJhd1JlcXVlc3RlZE9uQ0NUaHJlYWQoZmFsc2UpCiB7CiAgICAgVFJBQ0VfRVZFTlQo
IkNDVGhyZWFkUHJveHk6OkNDVGhyZWFkUHJveHkiLCB0aGlzLCAwKTsKICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwpAQCAtNjYsOCArNzMsNyBAQCBDQ1RocmVhZFByb3h5Ojp+Q0NUaHJlYWRQ
cm94eSgpCiB7CiAgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6On5DQ1RocmVhZFByb3h5
IiwgdGhpcywgMCk7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQoIW1f
bGF5ZXJUcmVlSG9zdEltcGwpOyAvLyBNYWtlIHN1cmUgc3RvcCgpIGdvdCBjYWxsZWQuCi0gICAg
QVNTRVJUKCFtX2xheWVyVHJlZUhvc3QpOyAvLyBNYWtlIHN1cmUgc3RvcCgpIGdvdCBjYWxsZWQu
CisgICAgQVNTRVJUKCFtX3N0YXJ0ZWQpOwogCiAgICAgbnVtUHJveGllcy0tOwogICAgIGlmICgh
bnVtUHJveGllcykgewpAQCAtNzgsOCArODQsMjkgQEAgQ0NUaHJlYWRQcm94eTo6fkNDVGhyZWFk
UHJveHkoKQogCiBib29sIENDVGhyZWFkUHJveHk6OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQg
KnBpeGVscywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBB
U1NFUlQobV9sYXllclRyZWVIb3N0KTsKKworICAgIGZpbmlzaEFsbFJlbmRlcmluZygpOworICAg
IGJvb2wgc3VjY2VzcyA9IGZhbHNlOworICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247
CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJl
YWRQcm94eTo6ZHJhd0xheWVyc0FuZFJlYWRiYWNrT25DQ1RocmVhZCwgQWxsb3dDcm9zc1RocmVh
ZEFjY2VzcygmY29tcGxldGlvbiksIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJnN1Y2Nlc3MpLCBB
bGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHBpeGVscyksIHJlY3QpKTsKKyAgICBjb21wbGV0aW9uLndh
aXQoKTsKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKwordm9pZCBDQ1RocmVhZFByb3h5OjpkcmF3
TGF5ZXJzQW5kUmVhZGJhY2tPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9u
LCBib29sKiBzdWNjZXNzLCB2b2lkKiBwaXhlbHMsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7Cisg
ICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKyAgICBpZiAoIW1fbGF5ZXJUcmVl
SG9zdEltcGwpIHsKKyAgICAgICAgKnN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgY29tcGxldGlv
bi0+c2lnbmFsKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZHJhd0xheWVyc09uQ0NU
aHJlYWQoKTsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5yZWFkYmFjayhwaXhlbHMsIHJlY3Qp
OworICAgICpzdWNjZXNzID0gbV9sYXllclRyZWVIb3N0SW1wbC0+aXNDb250ZXh0TG9zdCgpOwor
ICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOwogfQogCiBHcmFwaGljc0NvbnRleHQzRCogQ0NUaHJl
YWRQcm94eTo6Y29udGV4dCgpCkBAIC04OSwxMiArMTE2LDM0IEBAIEdyYXBoaWNzQ29udGV4dDNE
KiBDQ1RocmVhZFByb3h5Ojpjb250ZXh0KCkKIAogdm9pZCBDQ1RocmVhZFByb3h5OjpmaW5pc2hB
bGxSZW5kZXJpbmcoKQogewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIEFTU0VSVChD
Q1Byb3h5Ojppc01haW5UaHJlYWQoKSk7CisgICAgLy8gSWYgYSBjb21taXQgaXMgcGVuZGluZywg
cGVyZm9ybSB0aGUgY29tbWl0IGZpcnN0LgorICAgIGlmIChtX2NvbW1pdFJlcXVlc3RlZCkgIHsK
KyAgICAgICAgLy8gVGhpcyBiaXQgb2YgY29kZSBpcyB1Z2xpZXIgdGhhbiBpdCBzaG91bGQgYmUg
YmVjYXVzZSByZXR1cm5pbmcKKyAgICAgICAgLy8gcG9pbnRlcnMgdmlhIHRoZSBDQ1RocmVhZCB0
YXNrIG1vZGVsIGlzIHJlYWxseSBtZXNzeS4gRWZmZWN0aXZlbHksIHdlCisgICAgICAgIC8vIGFy
ZSBtYWtpbmcgYSBibG9ja2luZyBjYWxsIHRvIGNyZWF0ZUJlZ2luRnJhbWVBbmRDb21taXRUYXNr
T25DQ1RocmVhZCwKKyAgICAgICAgLy8gYW5kIHRyeWluZyB0byBnZXQgdGhlIENDTWFpblRocmVh
ZDo6VGFzayBpdCByZXR1cm5zIHNvIHdlIGNhbiBydW4gaXQuCisgICAgICAgIE93blB0cjxDQ01h
aW5UaHJlYWQ6OlRhc2s+IGJlZ2luRnJhbWVBbmRDb21taXRUYXNrOworICAgICAgICB7CisgICAg
ICAgICAgICBDQ01haW5UaHJlYWQ6OlRhc2sqIHRhc2tQdHIgPSAwOworICAgICAgICAgICAgQ0ND
b21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKKyAgICAgICAgICAgIGNjVGhyZWFkLT5wb3N0VGFz
ayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OmNyZWF0ZUJlZ2luRnJh
bWVBbmRDb21taXRUYXNrT25DQ1RocmVhZCwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29tcGxl
dGlvbiksIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJnRhc2tQdHIpKSk7CisgICAgICAgICAgICBj
b21wbGV0aW9uLndhaXQoKTsKKyAgICAgICAgICAgIGJlZ2luRnJhbWVBbmRDb21taXRUYXNrID0g
YWRvcHRQdHIodGFza1B0cik7CisgICAgICAgIH0KKworICAgICAgICBiZWdpbkZyYW1lQW5kQ29t
bWl0VGFzay0+cGVyZm9ybVRhc2soKTsKKyAgICB9CisgICAgLy8gTWFrZSBzdXJlIGFsbCBHTCBk
cmF3aW5nIGlzIGZpbmlzaGVkIG9uIHRoZSBpbXBsIHRocmVhZC4KKyAgICBDQ0NvbXBsZXRpb25F
dmVudCBjb21wbGV0aW9uOworICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRh
c2sodGhpcywgJkNDVGhyZWFkUHJveHk6OmZpbmlzaEFsbFJlbmRlcmluZ09uQ0NUaHJlYWQsIEFs
bG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pKSk7CisgICAgY29tcGxldGlvbi53YWl0
KCk7CiB9CiAKIGJvb2wgQ0NUaHJlYWRQcm94eTo6aXNTdGFydGVkKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gbV9sYXllclRyZWVIb3N0SW1wbDsKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNNYWluVGhy
ZWFkKCkpOworICAgIHJldHVybiBtX3N0YXJ0ZWQ7CiB9CiAKIGJvb2wgQ0NUaHJlYWRQcm94eTo6
aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoKQpAQCAtMTExLDcgKzE2MCw3IEBAIGJvb2wgQ0NUaHJl
YWRQcm94eTo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoKQogICAgIC8vIE1ha2UgYSBibG9ja2lu
ZyBjYWxsIHRvIGluaXRpYWxpemVMYXllclJlbmRlcmVyT25DQ1RocmVhZC4gVGhlIHJlc3VsdHMg
b2YgdGhhdCBjYWxsCiAgICAgLy8gYXJlIHB1c2hlZCBpbnRvIHRoZSBpbml0aWFsaXplU3VjY2Vl
ZGVkIGFuZCBjYXBhYmlsaXRpZXMgbG9jYWwgdmFyaWFibGVzLgogICAgIENDQ29tcGxldGlvbkV2
ZW50IGNvbXBsZXRpb247Ci0gICAgYm9vbCBpbml0aWFsaXplU3VjY2VlZGVkOworICAgIGJvb2wg
aW5pdGlhbGl6ZVN1Y2NlZWRlZCA9IGZhbHNlOwogICAgIExheWVyUmVuZGVyZXJDYXBhYmlsaXRp
ZXMgY2FwYWJpbGl0aWVzOwogICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRh
c2sodGhpcywgJkNDVGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVyT25DQ1RocmVh
ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93Q3Jvc3NU
aHJlYWRBY2Nlc3MoY29udGV4dFB0ciksIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRp
b24pLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZpbml0aWFsaXplU3VjY2VlZGVkKSwgQWxsb3dD
cm9zc1RocmVhZEFjY2VzcygmY2FwYWJpbGl0aWVzKSkpOwpAQCAtMTM1LDQzICsxODQsNTcgQEAg
dm9pZCBDQ1RocmVhZFByb3h5Ojpsb3NlQ29tcG9zaXRvckNvbnRleHQoaW50IG51bVRpbWVzKQog
dm9pZCBDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdCgpCiB7CiAgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKLSAgICBpZiAobV9jb21taXRQZW5kaW5nKQorICAgIGlmIChtX2NvbW1pdFJl
cXVlc3RlZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJv
eHk6OnNldE5lZWRzQ29tbWl0IiwgdGhpcywgMCk7Ci0gICAgbV9jb21taXRQZW5kaW5nID0gdHJ1
ZTsKLSAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1Ro
cmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdE9uQ0NUaHJlYWQpKTsKKyAgICBtX2NvbW1pdFJlcXVl
c3RlZCA9IHRydWU7CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0
aGlzLCAmQ0NUaHJlYWRQcm94eTo6dXBkYXRlU2NoZWR1bGVyU3RhdGVPbkNDVGhyZWFkLCBtX2Nv
bW1pdFJlcXVlc3RlZCwgdHJ1ZSkpOwogfQogCiB2b2lkIENDVGhyZWFkUHJveHk6OnNldE5lZWRz
Q29tbWl0QW5kUmVkcmF3KCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGlm
IChtX2NvbW1pdFBlbmRpbmcpCisgICAgaWYgKG1fY29tbWl0UmVxdWVzdGVkKQogICAgICAgICBy
ZXR1cm47CisgICAgbV9jb21taXRSZXF1ZXN0ZWQgPSB0cnVlOwogCiAgICAgVFJBQ0VfRVZFTlQo
IkNDVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3IiwgdGhpcywgMCk7Ci0gICAg
bV9jb21taXRQZW5kaW5nID0gdHJ1ZTsKLSAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NU
aHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09u
Q0NUaHJlYWQpKTsKKyAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRo
aXMsICZDQ1RocmVhZFByb3h5Ojp1cGRhdGVTY2hlZHVsZXJTdGF0ZU9uQ0NUaHJlYWQsIG1fY29t
bWl0UmVxdWVzdGVkLCB0cnVlKSk7CiB9CiAKIHZvaWQgQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNS
ZWRyYXcoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgY2NUaHJlYWQtPnBv
c3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNS
ZWRyYXdPbkNDVGhyZWFkKSk7CisgICAgaWYgKG1fY29tbWl0UmVxdWVzdGVkKSAvLyBJbXBsaWVz
IHRoYXQgYSBjb21taXQgaXMgaW4gZmxpZ2h0LgorICAgICAgICByZXR1cm47CisgICAgLy8gVW5s
aWtlIHNldE5lZWRzQ29tbWl0IHRoYXQgdHJhY2tzIHdoZXRoZXIgYSBjb21taXQgbWVzc2FnZSBo
YXMgYmVlbiBzZW50LAorICAgIC8vIHNldE5lZWRzUmVkcmF3IGFsd2F5cyBzZW5kcyBhIG1lc3Nh
Z2UgdG8gdGhlIGNvbXBvc2l0b3IgdGhyZWFkLiBUaGlzIGlzCisgICAgLy8gYmVjYXVzZSB0aGUg
Y29tcG9zaXRvciB0aHJlYWQgY2FuIGRyYXcgd2l0aG91dCB0ZWxsaW5nIHRoZSBtYWluCisgICAg
Ly8gdGhyZWFkLiBUaGlzIHNob3VsZCBub3QgYmUgbXVjaCBvZiBhIHByb2JsZW0gYmVjYXVzZSBj
YWxscyB0bworICAgIC8vIHNldE5lZWRzUmVkcmF3IG1lc3NhZ2VzIGFyZSB1bmNvbW1vbiAob25s
eSB0cmlnZ2VyZWQgYnkgV01fUEFJTlQvZXRjKSwKKyAgICAvLyBjb21wYXJlZCB0byBzZXROZWVk
c0NvbW1pdEFuZFJlZHJhdyBtZXNzYWdlcy4KKyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94
eTo6c2V0TmVlZHNSZWRyYXciLCB0aGlzLCAwKTsKKyAgICBjY1RocmVhZC0+cG9zdFRhc2soY3Jl
YXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5Ojp1cGRhdGVTY2hlZHVsZXJTdGF0
ZU9uQ0NUaHJlYWQsIGZhbHNlLCB0cnVlKSk7CiB9CiAKIHZvaWQgQ0NUaHJlYWRQcm94eTo6c3Rh
cnQoKQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgLy8gQ3JlYXRlIExheWVy
VHJlZUhvc3RJbXBsLgogICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CiAgICAgY2NU
aHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6
aW5pdGlhbGl6ZUltcGxPbkNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0
aW9uKSkpOwogICAgIGNvbXBsZXRpb24ud2FpdCgpOworCisgICAgbV9zdGFydGVkID0gdHJ1ZTsK
IH0KIAogdm9pZCBDQ1RocmVhZFByb3h5OjpzdG9wKCkKIHsKICAgICBUUkFDRV9FVkVOVCgiQ0NU
aHJlYWRQcm94eTo6c3RvcCIsIHRoaXMsIDApOwogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisgICAgQVNTRVJUKG1fc3RhcnRlZCk7CisKICAgICAvLyBTeW5jaHJvbm91c2x5IGRlbGV0ZXMg
dGhlIGltcGwuCiAgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKICAgICBjY1RocmVh
ZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5OjpsYXll
clRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZCwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29tcGxl
dGlvbikpKTsKQEAgLTE3OSw4MiArMjQyLDE2NiBAQCB2b2lkIENDVGhyZWFkUHJveHk6OnN0b3Ao
KQogCiAgICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3RJbXBsKTsgLy8gdmVyaWZ5IHRoYXQgdGhl
IGltcGwgZGVsZXRlZC4KICAgICBtX2xheWVyVHJlZUhvc3QgPSAwOworICAgIG1fc3RhcnRlZCA9
IGZhbHNlOwogfQogCi12b2lkIENDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVBbmRDb21taXRPbkND
VGhyZWFkKCkKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6ZmluaXNoQWxsUmVuZGVyaW5nT25DQ1RocmVh
ZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbikKIHsKLSAgICBUUkFDRV9FVkVOVCgiQ0NU
aHJlYWRQcm94eTo6YmVnaW5GcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAg
ICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6ZmluaXNoQWxsUmVuZGVyaW5nT25DQ1RocmVh
ZCIsIHRoaXMsIDApOwogICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7Ci0gICAgLy8gVEVNUCBI
QUNLIHNvIHdlIGNhbiBleGVyY2lzZSB0aGlzIGNvZGUgaW4gdW5pdCB0ZXN0cy4KLSAgICBDQ01h
aW5UaHJlYWQ6OnBvc3RUYXNrKGNyZWF0ZU1haW5UaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFBy
b3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0LCAwLjApKTsKKyAgICBBU1NFUlQoIW1fYmVnaW5GcmFt
ZUFuZENvbW1pdFBlbmRpbmdPbkNDVGhyZWFkKTsKKyAgICBpZiAobV9yZWRyYXdSZXF1ZXN0ZWRP
bkNDVGhyZWFkKSB7CisgICAgICAgIGRyYXdMYXllcnNPbkNDVGhyZWFkKCk7CisgICAgICAgIG1f
bGF5ZXJUcmVlSG9zdEltcGwtPnByZXNlbnQoKTsKKyAgICAgICAgbV9yZWRyYXdSZXF1ZXN0ZWRP
bkNDVGhyZWFkID0gZmFsc2U7CisgICAgfQorICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmZpbmlz
aEFsbFJlbmRlcmluZygpOworICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOworfQorCit2b2lkIEND
VGhyZWFkUHJveHk6OmNyZWF0ZUJlZ2luRnJhbWVBbmRDb21taXRUYXNrT25DQ1RocmVhZChDQ0Nv
bXBsZXRpb25FdmVudCogY29tcGxldGlvbiwgQ0NNYWluVGhyZWFkOjpUYXNrKiogdGFza1B0cikK
K3sKKyAgICBPd25QdHI8Q0NNYWluVGhyZWFkOjpUYXNrPiB0YXNrID0gY3JlYXRlQmVnaW5GcmFt
ZUFuZENvbW1pdFRhc2tPbkNDVGhyZWFkKCk7CisgICAgKnRhc2tQdHIgPSB0YXNrLmxlYWtQdHIo
KTsKKyAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKIH0KIAotdm9pZCBDQ1RocmVhZFByb3h5Ojpi
ZWdpbkZyYW1lQW5kQ29tbWl0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKK1Bhc3NPd25QdHI8Q0NN
YWluVGhyZWFkOjpUYXNrPiBDQ1RocmVhZFByb3h5OjpjcmVhdGVCZWdpbkZyYW1lQW5kQ29tbWl0
VGFza09uQ0NUaHJlYWQoKQogeworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpjcmVh
dGVCZWdpbkZyYW1lQW5kQ29tbWl0VGFza09uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICBBU1NF
UlQoaXNJbXBsVGhyZWFkKCkpOworICAgIGRvdWJsZSBmcmFtZUJlZ2luVGltZSA9IGN1cnJlbnRU
aW1lKCk7CisgICAgbV9iZWdpbkZyYW1lQW5kQ29tbWl0UGVuZGluZ09uQ0NUaHJlYWQgPSB0cnVl
OworCisgICAgLy8gTk9URSwgaXQgaXMgcG9zc2libGUgdG8gcmVjZWlldmUgYSByZXF1ZXN0IGZv
ciBhCisgICAgLy8gYmVnaW5GcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQgZnJvbSBmaW5pc2hBbGxS
ZW5kZXJpbmcgd2hpbGUgYQorICAgIC8vIGJlZ2luRnJhbWVBbmRDb21taXRPbkNDVGhyZWFkIGlz
IGVucXVldWVkLiBTaW5jZSBpdCBDQ01haW5UaHJlYWQgZG9lc24ndAorICAgIC8vIHByb3ZpZGUg
YSB0aHJlYWRzYWZlIHdheSB0byBjYW5jZWwgdGFza3MsIGl0IGlzIGltcG9ydGFudCB0aGF0Cisg
ICAgLy8gYmVnaW5GcmFtZUFuZENvbW1pdCBiZSBzdHJ1Y3R1cmVkIHRvIHVuZGVyc3RhbmQgdGhh
dCBpdCBtYXkgZ2V0IGNhbGxlZCBhdAorICAgIC8vIGEgcG9pbnQgdGhhdCBpdCBzaG91bGRuJ3Qu
IFdlIGRvIHRoaXMgYnkgYXNzaWduaW5nIGEgc2VxdWVuY2UgbnVtYmVyIHRvCisgICAgLy8gZXZl
cnkgbmV3IGJlZ2luRnJhbWVBbmRDb21taXQgdGFzay4gVGhlbiwgYmVnaW5GcmFtZUFuZENvbW1p
dCB0cmFja3MgdGhlCisgICAgLy8gbGFzdCBleGVjdXRlZCBzZXF1ZW5jZSBudW1iZXIsIGRyb3Bw
aW5nIGJlZ2luRnJhbWVBbmRDb21taXQgd2l0aCBzZXF1ZW5jZQorICAgIC8vIG51bWJlcnMgYmVs
b3cgdGhlIGxhc3QgZXhlY3V0ZWQgb25lLgorICAgIGludCB0aGlzVGFza1NlcXVlbmNlTnVtYmVy
ID0gbV9udW1CZWdpbkZyYW1lQW5kQ29tbWl0c0lzc3VlZE9uQ0NUaHJlYWQ7CisgICAgbV9udW1C
ZWdpbkZyYW1lQW5kQ29tbWl0c0lzc3VlZE9uQ0NUaHJlYWQrKzsKKyAgICByZXR1cm4gY3JlYXRl
TWFpblRocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVBbmRDb21taXQs
IHRoaXNUYXNrU2VxdWVuY2VOdW1iZXIsIGZyYW1lQmVnaW5UaW1lKTsKK30KKwordm9pZCBDQ1Ro
cmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0KGludCBzZXF1ZW5jZU51bWJlciwgZG91Ymxl
IGZyYW1lQmVnaW5UaW1lKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpiZWdp
bkZyYW1lQW5kQ29tbWl0IiwgdGhpcywgMCk7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
ICAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVFJBQ0Vf
RVZFTlQoIkNDVGhyZWFkUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdCIsIHRoaXMsIDApOwor
ICAgIC8vIERyb3AgYmVnaW5GcmFtZUFuZENvbW1pdCBjYWxscyB0aGF0IG9jY3VyIG91dCBvZiBz
ZXF1ZW5jZS4gU2VlIGNyZWF0ZUJlZ2luRnJhbWVBbmRDb21taXRUYXNrT25DQ1RocmVhZCBmb3IK
KyAgICAvLyBhbiBleHBsYW5hdGlvbiBvZiBob3cgb3V0LW9mLXNlcXVlbmNlIGJlZ2luRnJhbWVB
bmRDb21taXQgdGFza3MgY2FuIG9jY3VyLgorICAgIGlmIChzZXF1ZW5jZU51bWJlciA8IG1fbGFz
dEV4ZWN1dGVkQmVnaW5GcmFtZUFuZENvbW1pdFNlcXVlbmNlTnVtYmVyKSB7CisgICAgICAgIFRS
QUNFX0VWRU5UKCJFYXJseU91dF9TdGFsZUJlZ2luRnJhbWVBbmRDb21taXQiLCB0aGlzLCAwKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2xhc3RFeGVjdXRlZEJlZ2luRnJhbWVBbmRD
b21taXRTZXF1ZW5jZU51bWJlciA9IHNlcXVlbmNlTnVtYmVyOworCisgICAgQVNTRVJUKG1fY29t
bWl0UmVxdWVzdGVkKTsKKworICAgIC8vIEZJWE1FOiByZWNyZWF0ZSB0aGUgY29udGV4dCBpZiBp
dCB3YXMgcmVxdWVzdGVkIGJ5IHRoZSBpbXBsIHRocmVhZAogICAgIHsKICAgICAgICAgVFJBQ0Vf
RVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0ZUFuZExheW91dCIsIHRoaXMsIDApOwogICAg
ICAgICBtX2xheWVyVHJlZUhvc3QtPmFuaW1hdGVBbmRMYXlvdXQoZnJhbWVCZWdpblRpbWUpOwog
ICAgIH0KIAotICAgIG1fY29tbWl0UGVuZGluZyA9IGZhbHNlOworICAgIEFTU0VSVChtX2xhc3RF
eGVjdXRlZEJlZ2luRnJhbWVBbmRDb21taXRTZXF1ZW5jZU51bWJlciA9PSBzZXF1ZW5jZU51bWJl
cik7CiAKLSAgICAvLyBCbG9ja2luZyBjYWxsIHRvIENDVGhyZWFkUHJveHk6OnBlcmZvcm1Db21t
aXQKLSAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOwotICAgIGNjVGhyZWFkLT5wb3N0
VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OmNvbW1pdE9uQ0NU
aHJlYWQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pKSk7Ci0gICAgY29tcGxl
dGlvbi53YWl0KCk7CisgICAgLy8gQ2xlYXIgdGhlIGNvbW1pdCBmbGFnIGFmdGVyIGFuaW1hdGVB
bmRMYXlvdXQgaGVyZSAtLS0gb2JqZWN0cyB0aGF0IG9ubHkKKyAgICAvLyBsYXlvdXQgd2hlbiBw
YWludGVkIHdpbGwgdHJpZ2dlciBhbm90aGVyIHNldE5lZWRzQ29tbWl0IGluc2lkZQorICAgIC8v
IHVwZGF0ZUxheWVycy4KKyAgICBtX2NvbW1pdFJlcXVlc3RlZCA9IGZhbHNlOworCisgICAgbV9s
YXllclRyZWVIb3N0LT51cGRhdGVMYXllcnMoKTsKKworICAgIHsKKyAgICAgICAgLy8gQmxvY2tp
bmcgY2FsbCB0byBDQ1RocmVhZFByb3h5Ojpjb21taXRPbkNDVGhyZWFkCisgICAgICAgIFRSQUNF
X0VWRU5UKCJjb21taXQiLCB0aGlzLCAwKTsKKyAgICAgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29t
cGxldGlvbjsKKyAgICAgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0
aGlzLCAmQ0NUaHJlYWRQcm94eTo6Y29tbWl0T25DQ1RocmVhZCwgQWxsb3dDcm9zc1RocmVhZEFj
Y2VzcygmY29tcGxldGlvbikpKTsKKyAgICAgICAgY29tcGxldGlvbi53YWl0KCk7CisgICAgfQor
CisgICAgbV9sYXllclRyZWVIb3N0LT5jb21taXRDb21wbGV0ZSgpOworCisgICAgQVNTRVJUKG1f
bGFzdEV4ZWN1dGVkQmVnaW5GcmFtZUFuZENvbW1pdFNlcXVlbmNlTnVtYmVyID09IHNlcXVlbmNl
TnVtYmVyKTsKIH0KIAogdm9pZCBDQ1RocmVhZFByb3h5Ojpjb21taXRPbkNDVGhyZWFkKENDQ29t
cGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQogeworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFBy
b3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZCIsIHRoaXMsIDApOwogICAgIEFTU0VS
VChpc0ltcGxUaHJlYWQoKSk7Ci0gICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OmNvbW1p
dE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKLSAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5iZWdpbkNv
bW1pdCgpOwotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6Y29t
bWl0IiwgdGhpcywgMCk7Ci0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0VG8obV9sYXll
clRyZWVIb3N0SW1wbC5nZXQoKSk7CisgICAgQVNTRVJUKG1fYmVnaW5GcmFtZUFuZENvbW1pdFBl
bmRpbmdPbkNDVGhyZWFkKTsKKyAgICBtX2JlZ2luRnJhbWVBbmRDb21taXRQZW5kaW5nT25DQ1Ro
cmVhZCA9IGZhbHNlOworICAgIGlmICghbV9sYXllclRyZWVIb3N0SW1wbCkgeworICAgICAgICBj
b21wbGV0aW9uLT5zaWduYWwoKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBtX2xheWVy
VHJlZUhvc3RJbXBsLT5iZWdpbkNvbW1pdCgpOworICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0
VG8obV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSk7CisgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+
Y29tbWl0Q29tcGxldGUoKTsKKwogICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOwogCi0gICAgbV9s
YXllclRyZWVIb3N0SW1wbC0+Y29tbWl0Q29tcGxldGUoKTsKLSAgICBzZXROZWVkc1JlZHJhd09u
Q0NUaHJlYWQoKTsKKyAgICBpZiAobV9yZWRyYXdSZXF1ZXN0ZWRPbkNDVGhyZWFkKQorICAgICAg
ICBzY2hlZHVsZURyYXdUYXNrT25DQ1RocmVhZCgpOwogfQogCi12b2lkIENDVGhyZWFkUHJveHk6
OmRyYXdMYXllcnNPbkNDVGhyZWFkKCkKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6c2NoZWR1bGVEcmF3
VGFza09uQ0NUaHJlYWQoKQogewotICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpkcmF3
TGF5ZXJzT25DQ1RocmVhZCIsIHRoaXMsIDApOwogICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7
Ci0gICAgaWYgKG1fbGF5ZXJUcmVlSG9zdEltcGwpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdElt
cGwtPmRyYXdMYXllcnMoKTsKKyAgICBpZiAobV9kcmF3VGFza1Bvc3RlZE9uQ0NUaHJlYWQpCisg
ICAgICAgIHJldHVybjsKKyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6c2NoZWR1bGVE
cmF3VGFza09uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQobV9sYXllclRyZWVIb3N0
SW1wbCk7CisgICAgbV9kcmF3VGFza1Bvc3RlZE9uQ0NUaHJlYWQgPSB0cnVlOworICAgIGNjVGhy
ZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OmRy
YXdMYXllcnNBbmRQcmVzZW50T25DQ1RocmVhZCkpOwogfQogCi12b2lkIENDVGhyZWFkUHJveHk6
OnNldE5lZWRzQ29tbWl0T25DQ1RocmVhZCgpCit2b2lkIENDVGhyZWFkUHJveHk6OmRyYXdMYXll
cnNBbmRQcmVzZW50T25DQ1RocmVhZCgpCiB7Ci0gICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJv
eHk6OnNldE5lZWRzQ29tbWl0T25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIFRSQUNFX0VWRU5U
KCJDQ1RocmVhZFByb3h5OjpkcmF3TGF5ZXJzT25DQ1RocmVhZCIsIHRoaXMsIDApOwogICAgIEFT
U0VSVChpc0ltcGxUaHJlYWQoKSk7Ci0gICAgQVNTRVJUKG1fbGF5ZXJUcmVlSG9zdEltcGwpOwot
ICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkLCBzZWUgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY3NDE3Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgaWYgKCFtX2xheWVyVHJlZUhvc3RJbXBsKQorICAgICAgICByZXR1cm47CisKKyAgICBkcmF3
TGF5ZXJzT25DQ1RocmVhZCgpOworICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPnByZXNlbnQoKTsK
KyAgICBtX3JlZHJhd1JlcXVlc3RlZE9uQ0NUaHJlYWQgPSBmYWxzZTsKKyAgICBtX2RyYXdUYXNr
UG9zdGVkT25DQ1RocmVhZCA9IGZhbHNlOwogfQogCi12b2lkIENDVGhyZWFkUHJveHk6OnNldE5l
ZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCgpCit2b2lkIENDVGhyZWFkUHJveHk6OmRyYXdM
YXllcnNPbkNDVGhyZWFkKCkKIHsKLSAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6c2V0
TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhyZWFkIiwgdGhpcywgMCk7CisgICAgVFJBQ0VfRVZF
TlQoIkNDVGhyZWFkUHJveHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkIiwgdGhpcywgMCk7CiAgICAg
QVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKICAgICBBU1NFUlQobV9sYXllclRyZWVIb3N0SW1wbCk7
Ci0gICAgLy8gVEVNUCBIQUNLIHNvIHdlIGNhbiBleGVyY2lzZSB0aGlzIGNvZGUgaW4gdW5pdCB0
ZXN0cy4KLSAgICBDQ01haW5UaHJlYWQ6OnBvc3RUYXNrKGNyZWF0ZU1haW5UaHJlYWRUYXNrKHRo
aXMsICZDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0LCAwLjApKTsKKworICAgIG1f
bGF5ZXJUcmVlSG9zdEltcGwtPmRyYXdMYXllcnMoKTsKKyAgICBBU1NFUlQoIW1fbGF5ZXJUcmVl
SG9zdEltcGwtPmlzQ29udGV4dExvc3QoKSk7CiB9CiAKLXZvaWQgQ0NUaHJlYWRQcm94eTo6c2V0
TmVlZHNSZWRyYXdPbkNDVGhyZWFkKCkKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6dXBkYXRlU2NoZWR1
bGVyU3RhdGVPbkNDVGhyZWFkKGJvb2wgY29tbWl0UmVxdWVzdGVkLCBib29sIHJlZHJhd1JlcXVl
c3RlZCkKIHsKLSAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNSZWRyYXdP
bkNDVGhyZWFkIiwgdGhpcywgMCk7Ci0gICAgLy8gVEVNUCBIQUNLIHNvIHdlIGNhbiBleGVyY2lz
ZSB0aGlzIGNvZGUgaW4gdW5pdCB0ZXN0cy4KLSAgICBkcmF3TGF5ZXJzT25DQ1RocmVhZCgpOwor
ICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5Ojp1cGRhdGVTY2hlZHVsZXJTdGF0ZU9uQ0NU
aHJlYWQiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOworICAgIEFTU0VS
VChtX2xheWVyVHJlZUhvc3RJbXBsKTsKKworICAgIC8vIEZJWE1FOiB1c2UgQ0NTY2hlZHVsZXIg
dG8gZGVjaWRlIHdoZW4gdG8gbWFuYWdlIHRoZSBjb252ZXJzaW9uIG9mIHRoaXMKKyAgICAvLyBj
b21taXQgcmVxdWVzdCBpbnRvIGFuIGFjdHVhbCBjcmVhdGVCZWdpbkZyYW1lQW5kQ29tbWl0VGFz
a09uQ0NUaHJlYWQgY2FsbC4KKyAgICBtX3JlZHJhd1JlcXVlc3RlZE9uQ0NUaHJlYWQgfD0gcmVk
cmF3UmVxdWVzdGVkOworICAgIGlmICghbV9iZWdpbkZyYW1lQW5kQ29tbWl0UGVuZGluZ09uQ0NU
aHJlYWQpCisgICAgICAgIENDTWFpblRocmVhZDo6cG9zdFRhc2soY3JlYXRlQmVnaW5GcmFtZUFu
ZENvbW1pdFRhc2tPbkNDVGhyZWFkKCkpOworCisgICAgLy8gSWYgbm8gY29tbWl0IGlzIHBlbmRp
bmcsIGJ1dCBhIHJlZHJhdyBpcyByZXF1ZXN0ZWQsIHRoZW4gcG9zdCBhIHJlZHJhdyByaWdodCBh
d2F5CisgICAgaWYgKCFtX2JlZ2luRnJhbWVBbmRDb21taXRQZW5kaW5nT25DQ1RocmVhZCAmJiBt
X3JlZHJhd1JlcXVlc3RlZE9uQ0NUaHJlYWQpCisgICAgICAgIHNjaGVkdWxlRHJhd1Rhc2tPbkND
VGhyZWFkKCk7CisKIH0KIAogdm9pZCBDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplSW1wbE9uQ0NU
aHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5
LmgKaW5kZXggMjQ2NzcyNDBjYWFhNjkxMjY3NmQ3ZWRmZTBmYWIyY2MyMTI2MmVjMi4uNWEwZWE2
N2I1MDE0NTE5MTczMDU1ZmM3YWRjZTExZGJjOWE4MTFmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJv
eHkuaApAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiY2MvQ0NDb21wbGV0aW9uRXZlbnQu
aCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NN
YWluVGhyZWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgogI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KIApAQCAtNTgsMjggKzU5LDM2IEBAIHByaXZhdGU6CiAgICAgZXhwbGljaXQgQ0NUaHJl
YWRQcm94eShDQ0xheWVyVHJlZUhvc3QqKTsKIAogICAgIC8vIENhbGxlZCBvbiBDQ01haW5UaHJl
YWQKLSAgICB2b2lkIGJlZ2luRnJhbWVBbmRDb21taXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsK
KyAgICB2b2lkIGJlZ2luRnJhbWVBbmRDb21taXQoaW50IHNlcXVlbmNlTnVtYmVyLCBkb3VibGUg
ZnJhbWVCZWdpblRpbWUpOwogCiAgICAgLy8gQ2FsbGVkIG9uIENDVGhyZWFkCi0gICAgdm9pZCBi
ZWdpbkZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZCgpOworICAgIFBhc3NPd25QdHI8Q0NNYWluVGhy
ZWFkOjpUYXNrPiBjcmVhdGVCZWdpbkZyYW1lQW5kQ29tbWl0VGFza09uQ0NUaHJlYWQoKTsKKyAg
ICB2b2lkIGNyZWF0ZUJlZ2luRnJhbWVBbmRDb21taXRUYXNrT25DQ1RocmVhZChDQ0NvbXBsZXRp
b25FdmVudCosIENDTWFpblRocmVhZDo6VGFzayoqKTsKICAgICB2b2lkIGNvbW1pdE9uQ0NUaHJl
YWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsKKyAgICB2b2lkIGRyYXdMYXllcnNBbmRQcmVzZW50T25D
Q1RocmVhZCgpOwogICAgIHZvaWQgZHJhd0xheWVyc09uQ0NUaHJlYWQoKTsKKyAgICB2b2lkIGRy
YXdMYXllcnNBbmRSZWFkYmFja09uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqLCBib29sKiBz
dWNjZXNzLCB2b2lkKiBwaXhlbHMsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2b2lkIGZpbmlzaEFs
bFJlbmRlcmluZ09uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsKICAgICB2b2lkIGluaXRp
YWxpemVJbXBsT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCopOwogICAgIHZvaWQgaW5pdGlh
bGl6ZUxheWVyUmVuZGVyZXJPbkNDVGhyZWFkKEdyYXBoaWNzQ29udGV4dDNEKiwgQ0NDb21wbGV0
aW9uRXZlbnQqLCBib29sKiBpbml0aWFsaXplU3VjY2VlZGVkLCBMYXllclJlbmRlcmVyQ2FwYWJp
bGl0aWVzKik7CiAgICAgdm9pZCBzZXROZWVkc0NvbW1pdE9uQ0NUaHJlYWQoKTsKLSAgICB2b2lk
IHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCgpOwotICAgIHZvaWQgc2V0TmVlZHNS
ZWRyYXdPbkNDVGhyZWFkKCk7CisgICAgdm9pZCB1cGRhdGVTY2hlZHVsZXJTdGF0ZU9uQ0NUaHJl
YWQoYm9vbCBjb21taXRSZXF1ZXN0ZWQsIGJvb2wgcmVkcmF3UmVxdWVzdGVkKTsKICAgICB2b2lk
IGxheWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50Kik7Ci0KLSAg
ICAvLyBVc2VkIG9uIG1haW4tdGhyZWFkIG9ubHkuCi0gICAgYm9vbCBtX2NvbW1pdFBlbmRpbmc7
CisgICAgdm9pZCBzY2hlZHVsZURyYXdUYXNrT25DQ1RocmVhZCgpOwogCiAgICAgLy8gQWNjZXNz
ZWQgb24gbWFpbiB0aHJlYWQgb25seS4KKyAgICBib29sIG1fY29tbWl0UmVxdWVzdGVkOwogICAg
IENDTGF5ZXJUcmVlSG9zdCogbV9sYXllclRyZWVIb3N0OwogICAgIExheWVyUmVuZGVyZXJDYXBh
YmlsaXRpZXMgbV9sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzTWFpblRocmVhZENvcHk7CisgICAg
Ym9vbCBtX3N0YXJ0ZWQ7CisgICAgaW50IG1fbGFzdEV4ZWN1dGVkQmVnaW5GcmFtZUFuZENvbW1p
dFNlcXVlbmNlTnVtYmVyOwogCi0gICAgLy8gVXNlZCBvbiB0aGUgQ0NUaHJlYWQsIGJ1dCBjaGVj
a2VkIG9uIG1haW4gdGhyZWFkIGR1cmluZyBpbml0aWFsaXphdGlvbi9zaHV0ZG93bi4KKyAgICAv
LyBVc2VkIG9uIHRoZSBDQ1RocmVhZCBvbmx5CiAgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdElt
cGw+IG1fbGF5ZXJUcmVlSG9zdEltcGw7CisgICAgaW50IG1fbnVtQmVnaW5GcmFtZUFuZENvbW1p
dHNJc3N1ZWRPbkNDVGhyZWFkOworICAgIGJvb2wgbV9iZWdpbkZyYW1lQW5kQ29tbWl0UGVuZGlu
Z09uQ0NUaHJlYWQ7CisgICAgYm9vbCBtX2RyYXdUYXNrUG9zdGVkT25DQ1RocmVhZDsKKyAgICBi
b29sIG1fcmVkcmF3UmVxdWVzdGVkT25DQ1RocmVhZDsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKaW5kZXggYTEyMDhlNjlhMmM0OGNlNWRjNzliNGEyMGQ3NmExYWU3MjA5ZTJkYi4u
NjhlMDUxYmRkZmQzMzBjOGI3OTUzMzlhNGNkNDZkMTFkZjNmMGRiZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMS0wOS0xNSAgTmF0IER1Y2EgIDxuZHVj
YUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBNYWtlIENDVGhyZWFkUHJveHkg
ZHJhdworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc0
MTcKKworICAgICAgICBEaXNhYmxlIENDTGF5ZXJUcmVlSG9zdFRlc3QgdGVtcG9yYXJpbHkuIFdp
bGwgcmUtZW5hYmxlCisgICAgICAgIHdpdGggaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTY3NDE4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcDoKKwogMjAxMS0wOS0xNiAg
SWFpbiBNZXJyaWNrICA8aHVza3lAZ29vZ2xlLmNvbT4KIAogICAgICAgICBbY2hyb21pdW1dIEZp
eCBDQ0xheWVyVHJlZUhvc3RUZXN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAppbmRleCBmZjRmZmJlNjUxODQ0ZjVjYTVmMjk3
MTgxNGZhYzY1OTI3OGEzMDFkLi42NGMyMTYxMWI3OWIwMzFkZmI4OWI5MDhkZWI0OWY3ZTE5YzVi
MTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVl
SG9zdFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRy
ZWVIb3N0VGVzdC5jcHAKQEAgLTE3MCw2ICsxNzAsMTAgQEAgcHVibGljOgogICAgIHsKICAgICB9
CiAKKyNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgIHZpcnR1YWwgdm9pZCBzY2hl
ZHVsZUNvbXBvc2l0ZSgpIHsgfQorI2VuZGlmCisKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgTW9j
a0xheWVyVHJlZUhvc3RDbGllbnQoVGVzdEhvb2tzKiB0ZXN0SG9va3MpIDogbV90ZXN0SG9va3Mo
dGVzdEhvb2tzKSB7IH0KIApAQCAtMTg2LDggKzE5MCwxMSBAQCBwcml2YXRlOgogLy8KIC8vIFRo
ZSB0ZXN0IGNvbnRpbnVlcyB1bnRpbCBzb21lb25lIGNhbGxzIGVuZFRlc3QuIGVuZFRlc3QgY2Fu
IGJlIGNhbGxlZCBvbiBhbnkgdGhyZWFkLCBidXQgYmUgYXdhcmUgdGhhdAogLy8gZW5kaW5nIHRo
ZSB0ZXN0IGlzIGFuIGFzeW5jaHJvbm91cyBwcm9jZXNzLgotY2xhc3MgQ0NMYXllclRyZWVIb3N0
VGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0LCBUZXN0SG9va3MgeworY2xhc3MgQ0NMYXllclRy
ZWVIb3N0VGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0V2l0aFBhcmFtPENDU2V0dGluZ3M+LCBU
ZXN0SG9va3MgewogcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpCisgICAgeworICAg
IH0KICAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBi
ZWdpblRlc3QoKSA9IDA7CiAKQEAgLTI4NywxMCArMjk0LDggQEAgdm9pZCBDQ0xheWVyVHJlZUhv
c3RUZXN0Ojpkb0JlZ2luVGVzdCgpCiAgICAgbV9ydW5uaW5nID0gdHJ1ZTsKICAgICBtX2NsaWVu
dCA9IE1vY2tMYXllclRyZWVIb3N0Q2xpZW50OjpjcmVhdGUodGhpcyk7CiAKLSAgICBDQ1NldHRp
bmdzIHNldHRpbmdzOwotICAgIHNldHRpbmdzLmVuYWJsZUNvbXBvc2l0b3JUaHJlYWQgPSB0cnVl
OwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiByb290TGF5ZXI7Ci0gICAgbV9sYXllclRyZWVI
b3N0ID0gTW9ja0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSh0aGlzLCBtX2NsaWVudC5nZXQoKSwgcm9v
dExheWVyLCBzZXR0aW5ncyk7CisgICAgbV9sYXllclRyZWVIb3N0ID0gTW9ja0xheWVyVHJlZUhv
c3Q6OmNyZWF0ZSh0aGlzLCBtX2NsaWVudC5nZXQoKSwgcm9vdExheWVyLCBHZXRQYXJhbSgpKTsK
ICAgICBBU1NFUlQobV9sYXllclRyZWVIb3N0KTsKIAogICAgIG1fYmVnaW5uaW5nID0gdHJ1ZTsK
QEAgLTI5OSw2ICszMDQsMTEgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RUZXN0Ojpkb0JlZ2luVGVz
dCgpCiAgICAgaWYgKG1fZW5kV2hlbkJlZ2luUmV0dXJucykKICAgICAgICAgb25FbmRUZXN0KHN0
YXRpY19jYXN0PHZvaWQqPih0aGlzKSk7CiB9CitJTlNUQU5USUFURV9URVNUX0NBU0VfUCgKKyAg
ICBQcm94eVRlc3RzLCBDQ0xheWVyVHJlZUhvc3RUZXN0LAorICAgIHRlc3Rpbmc6OlZhbHVlcygK
KyAgICAgICAgQ0NTZXR0aW5ncyhmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpLAor
ICAgICAgICBDQ1NldHRpbmdzKGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlKSkpOwog
CiB2b2lkIENDTGF5ZXJUcmVlSG9zdFRlc3Q6OmVuZFRlc3QoKQogewpAQCAtNTQ1LDkgKzU1NSwx
MCBAQCBwcml2YXRlOgogfTsKIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNSZWRy
YXcsIHJ1bikKIHsKKyAgICBDQ1NldHRpbmdzIHNldGluZ3M7CiAgICAgcnVuVGVzdCgpOwogfQog
CiB9IC8vIG5hbWVzcGFjZQogCi0jZW5kaWYgLy8gVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5j
aHJvbml6ZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJlZVN5bmNo
cm9uaXplclRlc3QuY3BwCmluZGV4IDhhZGY0NzY5OWQ0ODcwZGQ1NDk3YTgxNTJhM2Q0ZWIwY2Nl
YjNkNWIuLmMzN2RlNzM2Mjc2NjlmOTBlNmZjNzFjZWNkNjYyMjk2OWJlYzUzMmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJlZVN5bmNocm9uaXplclRlc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJlZVN5bmNocm9uaXplclRlc3Qu
Y3BwCkBAIC0yOCwxMiArMjgsMjkgQEAKIAogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNp
bmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgorI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKICNpbmNs
dWRlIDxndGVzdC9ndGVzdC5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNw
YWNlIHsKIAorY2xhc3MgU2NvcGVkU2V0SW1wbFRocmVhZCB7CitwdWJsaWM6CisgICAgU2NvcGVk
U2V0SW1wbFRocmVhZCgpCisgICAgeworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgQ0NQcm94eTo6
c2V0SW1wbFRocmVhZCh0cnVlKTsKKyNlbmRpZgorICAgIH0KKyAgICB+U2NvcGVkU2V0SW1wbFRo
cmVhZCgpCisgICAgeworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgQ0NQcm94eTo6c2V0SW1wbFRo
cmVhZChmYWxzZSk7CisjZW5kaWYKKyAgICB9Cit9OworCiBjbGFzcyBNb2NrQ0NMYXllckltcGwg
OiBwdWJsaWMgQ0NMYXllckltcGwgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1v
Y2tDQ0xheWVySW1wbD4gY3JlYXRlKGludCBsYXllcklkKQpAQCAtMTE2LDYgKzEzMyw3IEBAIHZv
aWQgZXhwZWN0VHJlZXNBcmVJZGVudGljYWwoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIENDTGF5ZXJJ
bXBsKiBjY0xheWVyKQogLy8gQ29uc3RydWN0cyBhIHZlcnkgc2ltcGxlIHRyZWUgYW5kIHN5bmNo
cm9uaXplcyBpdCB3aXRob3V0IHRyeWluZyB0byByZXVzZSBhbnkgcHJlZXhpc3RpbmcgbGF5ZXJz
LgogVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVGcm9tRW1wdHkpCiB7
CisgICAgU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOwogICAgIFJlZlB0cjxMYXllckNocm9taXVt
PiBsYXllclRyZWVSb290ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOwogICAgIGxheWVyVHJl
ZVJvb3QtPmFkZENoaWxkKExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKSk7CiAgICAgbGF5ZXJUcmVl
Um9vdC0+YWRkQ2hpbGQoTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApKTsKQEAgLTEyOCw2ICsxNDYs
NyBAQCBURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jU2ltcGxlVHJlZUZyb21FbXB0eSkK
IC8vIENvbnN0cnVjdHMgYSB2ZXJ5IHNpbXBsZSB0cmVlIGFuZCBzeW5jaHJvbml6ZXMgaXQgYXR0
ZW1wdGluZyB0byByZXVzZSBzb21lIGxheWVycwogVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwg
c3luY1NpbXBsZVRyZWVSZXVzaW5nTGF5ZXJzKQogeworICAgIFNjb3BlZFNldEltcGxUaHJlYWQg
aW1wbDsKICAgICBWZWN0b3I8aW50PiBjY0xheWVyRGVzdHJ1Y3Rpb25MaXN0OwogCiAgICAgUmVm
UHRyPExheWVyQ2hyb21pdW0+IGxheWVyVHJlZVJvb3QgPSBNb2NrTGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlKCZjY0xheWVyRGVzdHJ1Y3Rpb25MaXN0KTsKQEAgLTE1Myw2ICsxNzIsNyBAQCBURVNUKFRy
ZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jU2ltcGxlVHJlZVJldXNpbmdMYXllcnMpCiAKIFRFU1Qo
VHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNTaW1wbGVUcmVlQW5kUHJvcGVydGllcykKIHsKKyAg
ICBTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGxh
eWVyVHJlZVJvb3QgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CiAgICAgbGF5ZXJUcmVlUm9v
dC0+YWRkQ2hpbGQoTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApKTsKICAgICBsYXllclRyZWVSb290
LT5hZGRDaGlsZChMYXllckNocm9taXVtOjpjcmVhdGUoMCkpOwpAQCAtMTg0LDYgKzIwNCw3IEBA
IFRFU1QoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNTaW1wbGVUcmVlQW5kUHJvcGVydGllcykK
IAogVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwgcmV1c2VDQ0xheWVyc0FmdGVyU3RydWN0dXJh
bENoYW5nZSkKIHsKKyAgICBTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CiAgICAgVmVjdG9yPGlu
dD4gY2NMYXllckRlc3RydWN0aW9uTGlzdDsKIAogICAgIC8vIFNldCB1cCBhIHRyZWUgd2l0aCB0
aGlzIHNvcnQgb2Ygc3RydWN0dXJlOgpAQCAtMjMwLDYgKzI1MSw3IEBAIFRFU1QoVHJlZVN5bmNo
cm9uaXplclRlc3QsIHJldXNlQ0NMYXllcnNBZnRlclN0cnVjdHVyYWxDaGFuZ2UpCiAvLyBDb25z
dHJ1Y3RzIGEgdmVyeSBzaW1wbGUgdHJlZSwgc3luY2hyb25pemVzIGl0LCB0aGVuIHN5bmNocm9u
aXplcyB0byBhIHRvdGFsbHkgbmV3IHRyZWUuIEFsbCBsYXllcnMgZnJvbSB0aGUgb2xkIHRyZWUg
c2hvdWxkIGJlIGRlbGV0ZWQuCiBURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jU2ltcGxl
VHJlZVRoZW5EZXN0cm95KQogeworICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKICAgICBW
ZWN0b3I8aW50PiBjY0xheWVyRGVzdHJ1Y3Rpb25MaXN0OwogCiAgICAgUmVmUHRyPExheWVyQ2hy
b21pdW0+IG9sZExheWVyVHJlZVJvb3QgPSBNb2NrTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZjY0xh
eWVyRGVzdHJ1Y3Rpb25MaXN0KTsKQEAgLTI2MCw2ICsyODIsNyBAQCBURVNUKFRyZWVTeW5jaHJv
bml6ZXJUZXN0LCBzeW5jU2ltcGxlVHJlZVRoZW5EZXN0cm95KQogLy8gQ29uc3RydWN0cytzeW5j
cyBhIHRyZWUgd2l0aCBtYXNrLCByZXBsaWNhLCBhbmQgcmVwbGljYSBtYXNrIGxheWVycy4KIFRF
U1QoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNNYXNrUmVwbGljYUFuZFJlcGxpY2FNYXNrTGF5
ZXJzKQogeworICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKICAgICBSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gbGF5ZXJUcmVlUm9vdCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKICAgICBs
YXllclRyZWVSb290LT5hZGRDaGlsZChMYXllckNocm9taXVtOjpjcmVhdGUoMCkpOwogICAgIGxh
eWVyVHJlZVJvb3QtPmFkZENoaWxkKExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108389</attachid>
            <date>2011-09-22 13:35:30 -0700</date>
            <delta_ts>2011-09-23 16:36:18 -0700</delta_ts>
            <desc>More tweaks</desc>
            <filename>bug-67417-20110922133529.patch</filename>
            <type>text/plain</type>
            <size>40760</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTUzMzQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2ODRkMDYyZmEyZDMyODdi
MThkNWNlOTk5YTcyYWNlMzY2YTYyN2E3Li5jMmRiNmVhNzljNTZjN2NiZDg0ODc0NTY4MzkxOTg4
YzE3NTdjODYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTEtMDktMTUgIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTWFrZSBDQ1Ro
cmVhZFByb3h5IGRyYXcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTY3NDE3CisKKyAgICAgICAgVXBkYXRlIHRoZSBDQ1RocmVhZFByb3h5IHRvIGNvcnJl
Y3RseSBpbXBsZW1lbnQgdGhlIENDUHJveHkKKyAgICAgICAgaW50ZXJmYWNlLCBkbyBhbGwgdGhl
IHJpZ2h0IGNvbW1pdHRpbmcgYW5kIHVwZGF0aW5nIHN0ZXBzLCBhbmQKKyAgICAgICAgZHJhdyBh
IHBpY3R1cmUgb24gdGhlIHNjcmVlbi4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp+TGF5ZXJSZW5kZXJlckNo
cm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRz
VXBEaXNwbGF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDSGVhZHNVcERpc3BsYXk6OmVuYWJs
ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpDQ0xheWVySW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6fkNDTGF5ZXJJbXBsKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpDQ0xheWVyVHJlZUhvc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0Ojpjb21taXRUbyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3Q6OmNvbW1pdENvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdDo6c2V0TmVlZHNSZWRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjp+Q0NMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5OjpmaW5pc2hBbGxSZW5kZXJp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21t
aXQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tbWl0SWZOZWVk
ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJv
eHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6Q0NUaHJlYWRQcm94eSk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5Ojp+Q0NUaHJlYWRQcm94eSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5Ojpjb21wb3NpdGVBbmRSZWFkYmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpkcmF3TGF5ZXJzQW5kUmVhZGJhY2tPbkNDVGhy
ZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmZpbmlzaEFsbFJlbmRlcmlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5Ojppc1N0YXJ0ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNSZWRyYXcpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NUaHJlYWRQcm94eTo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94
eTo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpmaW5pc2hBbGxSZW5k
ZXJpbmdPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmNyZWF0
ZUJlZ2luRnJhbWVBbmRDb21taXRUYXNrT25DQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkND
VGhyZWFkUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJl
YWRQcm94eTo6c2NoZWR1bGVEcmF3VGFza09uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NUaHJlYWRQcm94eTo6ZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhyZWFkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OnVwZGF0ZVNjaGVkdWxlclN0YXRlT25DQ1RocmVhZCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5o
OgorCiAyMDExLTA5LTE2ICBNYXggUGVyZXBlbGl0c3luICA8cHBoMzRyQGdtYWlsLmNvbT4KIAog
ICAgICAgICBTZXQgYnV0IG5vdCB1c2VkIHZhcmlhYmxlcyBjbGVhbnVwIChnY2MgNC42KQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmgKaW5kZXggN2NlN2Y5OGQx
ZjEwNDIxNjk4ZDkwZDBkOTc4NzczM2JhNWRlNmY5OS4uMzlkMTFiNTAxMGYzNDJiNjBkNzJkYjNk
YjUwZjBmNDE0Y2MxMDhhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3Jv
c3NUaHJlYWRDb3BpZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVh
ZENvcGllci5oCkBAIC00MSw2ICs0MSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorICAg
IGNsYXNzIEludFJlY3Q7CiAgICAgY2xhc3MgS1VSTDsKICAgICBjbGFzcyBSZXNvdXJjZUVycm9y
OwogICAgIGNsYXNzIFJlc291cmNlUmVxdWVzdDsKQEAgLTYzLDkgKzY0LDE0IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ3Jvc3NUaHJlYWRD
b3BpZXJCYXNlPHRydWUsIGZhbHNlLCBUPiA6IHB1YmxpYyBDcm9zc1RocmVhZENvcGllclBhc3NU
aHJvdWdoPFQ+IHsKICAgICB9OwogCisgICAgLy8gVG8gYWxsb3cgYSB0eXBlIHRvIGJlIHBhc3Nl
ZCBhY3Jvc3MgdGhyZWFkcyB1c2luZyBpdHMgY29weSBjb25zdHJ1Y3RvciwgYWRkIGEgZm9yd2Fy
ZCBkZWNsYXJhdGlvbiBvZiB0aGUgdHlwZSBhbmQKKyAgICAvLyBhIENvcHlUaHJlYWRDb3BpZXJC
YXNlPGZhbHNlLCBmYWxzZSwgVHlwZU5hbWU+IDogcHVibGljIENyb3NzVGhyZWFkQ29waWVyUGFz
c1Rocm91Z2g8VHlwZU5hbWU+IHsgfTsgdG8gdGhpcyBmaWxlLgogICAgIHRlbXBsYXRlPD4gc3Ry
dWN0IENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIFRocmVhZGFibGVMb2FkZXJP
cHRpb25zPiA6IHB1YmxpYyBDcm9zc1RocmVhZENvcGllclBhc3NUaHJvdWdoPFRocmVhZGFibGVM
b2FkZXJPcHRpb25zPiB7CiAgICAgfTsKIAorICAgIHRlbXBsYXRlPD4gc3RydWN0IENyb3NzVGhy
ZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIEludFJlY3Q+IDogcHVibGljIENyb3NzVGhyZWFk
Q29waWVyUGFzc1Rocm91Z2g8SW50UmVjdD4geworICAgIH07CisKICAgICAvLyBDdXN0b20gY29w
eSBtZXRob2RzLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDcm9zc1RocmVhZENv
cGllckJhc2U8ZmFsc2UsIHRydWUsIFQ+IHsKICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBXVEY6
OlJlbW92ZVRlbXBsYXRlPFQsIFJlZlB0cj46OlR5cGUgVHlwZVdpdGhvdXRSZWZQdHI7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRleCA3YWZjYjczNWE4ZDEwMzU4MzJm
MmYxMzkyNGM0M2U1M2FhMjM0YTI1Li43NDQwZjg2MDQ0OWJkMTRjMWY3YmJhMGU3MWVhZjA4NDA0
YzQ0YTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTE4Miw2
ICsxODIsOCBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZSgpCiAKIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6fkxheWVyUmVuZGVyZXJDaHJvbWl1bSgpCiB7CisgICAgQVNT
RVJUKENDUHJveHk6OmlzSW1wbFRocmVhZAorKCkpOwogICAgIG1faGVhZHNVcERpc3BsYXkuY2xl
YXIoKTsgLy8gRXhwbGljaXRseSBkZXN0cm95IHRoZSBIVUQgYmVmb3JlIHRoZSBUZXh0dXJlTWFu
YWdlciBkaWVzLgogICAgIGNsZWFudXBTaGFyZWRPYmplY3RzKCk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNw
bGF5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
SGVhZHNVcERpc3BsYXkuY3BwCmluZGV4IDhjMDg2MzAxMGMyNTE4YmRlOTcxMjc4MmNjYTllYzYz
Y2JhZjFmZDAuLjI3ZjBjYjljM2MxMDQ5MWNlYzE1MDRmNjM5MTRhMDU3MDdhNDE0NzIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVh
ZHNVcERpc3BsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwCkBAIC04OSw2ICs4OSw5IEBAIHZvaWQgQ0NI
ZWFkc1VwRGlzcGxheTo6b25QcmVzZW50KCkKIAogYm9vbCBDQ0hlYWRzVXBEaXNwbGF5OjplbmFi
bGVkKCkgY29uc3QKIHsKKyAgICAvLyBGSVhNRTogSFVEIGRvZXMgbm90IHdvcmsgaW4gY29tcG9z
aXRvciB0aHJlYWQgbW9kZS4KKyAgICBpZiAoc2V0dGluZ3MoKS5lbmFibGVDb21wb3NpdG9yVGhy
ZWFkKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHNldHRpbmdzKCkuc2hvd1Bs
YXRmb3JtTGF5ZXJUcmVlIHx8IHNldHRpbmdzKCkuc2hvd0ZQU0NvdW50ZXI7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJJbXBsLmNwcAppbmRleCA4NDU0MDY0MzViODdmMjAzZDE3NzA4ZGM0NzU0OWM2YmE2
ZTlhMmY3Li40YmNjYTA3MzA3NmJhMjRjMjllZmE0MGRmZTNiM2IzOTYwOWVkN2EzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckltcGwuY3BwCkBAIC03OCwxMCArNzgsMTIgQEAgQ0NMYXllckltcGw6OkNDTGF5
ZXJJbXBsKGludCBpZCkKICAgICAsIG1fZGVidWdCb3JkZXJDb2xvcigwLCAwLCAwLCAwKQogICAg
ICwgbV9kZWJ1Z0JvcmRlcldpZHRoKDApCiB7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRo
cmVhZCgpKTsKIH0KIAogQ0NMYXllckltcGw6On5DQ0xheWVySW1wbCgpCiB7CisgICAgQVNTRVJU
KENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKIH0KIAogdm9pZCBDQ0xheWVySW1wbDo6YWRkQ2hp
bGQoUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0LmNwcAppbmRleCBhMjU3YjQxMWFiOWY0YzRkNmFjZWJmZTdhNzUzYmYxOWRhYjgzMmM4Li5h
ZWIwZTk2YjhkZjI2MmU1NjVkOWI5OTI2N2ZmMjFjYWVlYWU4OGJhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTU2LDYgKzU2LDcgQEAgQ0NMYXllclRyZWVIb3N0OjpDQ0xh
eWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0Q2xpZW50KiBjbGllbnQsIFBhc3NSZWZQdHI8TGF5
ZXIKICAgICAsIG1fem9vbUFuaW1hdG9yU2NhbGUoMSkKICAgICAsIG1fdmlzaWJsZSh0cnVlKQog
eworICAgIEFTU0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQoKSk7CiB9CiAKIGJvb2wgQ0NMYXll
clRyZWVIb3N0Ojppbml0aWFsaXplKCkKQEAgLTYzLDYgKzY0LDEwIEBAIGJvb2wgQ0NMYXllclRy
ZWVIb3N0Ojppbml0aWFsaXplKCkKICAgICBpZiAobV9zZXR0aW5ncy5lbmFibGVDb21wb3NpdG9y
VGhyZWFkKSB7CiAgICAgICAgIC8vIEFjY2VsZXJhdGVkIFBhaW50aW5nIGlzIG5vdCBzdXBwb3J0
ZWQgaW4gdGhyZWFkZWQgbW9kZS4gVHVybiBpdCBvZmYuCiAgICAgICAgIG1fc2V0dGluZ3MuYWNj
ZWxlcmF0ZVBhaW50aW5nID0gZmFsc2U7CisgICAgICAgIC8vIFRoZSBIVUQgZG9lcyBub3Qgd29y
ayBpbiB0aHJlYWRlZCBtb2RlLiBUdXJuIGl0IG9mZi4KKyAgICAgICAgbV9zZXR0aW5ncy5zaG93
RlBTQ291bnRlciA9IGZhbHNlOworICAgICAgICBtX3NldHRpbmdzLnNob3dQbGF0Zm9ybUxheWVy
VHJlZSA9IGZhbHNlOworCiAgICAgICAgIG1fcHJveHkgPSBDQ1RocmVhZFByb3h5OjpjcmVhdGUo
dGhpcyk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fcHJveHkgPSBDQ1NpbmdsZVRocmVhZFByb3h5
OjpjcmVhdGUodGhpcyk7CkBAIC0xMDYsNiArMTExLDExIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0
OjphbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKICAgICBtX2FuaW1hdGlu
ZyA9IGZhbHNlOwogfQogCisvLyBUaGlzIGZ1bmN0aW9uIGNvbW1pdHMgdGhlIENDTGF5ZXJUcmVl
SG9zdCB0byBhbiBpbXBsIHRyZWUuIFdoZW4gbW9kaWZ5aW5nCisvLyB0aGlzIGZ1bmN0aW9uLCBr
ZWVwIGluIG1pbmQgdGhhdCB0aGUgZnVuY3Rpb24gKnJ1bnMqIG9uIHRoZSBpbXBsIHRocmVhZCEg
QW55CisvLyBjb2RlIHRoYXQgaXMgbG9naWNhbGx5IGEgbWFpbiB0aHJlYWQgb3BlcmF0aW9uLCBl
LmcuIGRlbGV0aW9uIG9mIGEgTGF5ZXJDaHJvbWl1bSwKKy8vIHNob3VsZCBiZSBkZWxheWVkIHVu
dGlsIHRoZSBDQ0xheWVyVHJlZUhvc3Q6OmNvbW1pdENvbXBsZXRlLCB3aGljaCB3aWxsIHJ1bgor
Ly8gYWZ0ZXIgdGhlIGNvbW1pdCwgYnV0IG9uIHRoZSBtYWluIHRocmVhZC4KIHZvaWQgQ0NMYXll
clRyZWVIb3N0Ojpjb21taXRUbyhDQ0xheWVyVHJlZUhvc3RJbXBsKiBob3N0SW1wbCkKIHsKICAg
ICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwpAQCAtMTIwLDE0ICsxMzAsMTIgQEAg
dm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmNvbW1pdFRvKENDTGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJ
bXBsKQogICAgIGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+ZGVsZXRlRXZpY3RlZFRleHR1cmVz
KGhvc3RJbXBsLT5jb250ZXh0KCkpOwogCiAgICAgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyht
X3VwZGF0ZUxpc3QsIGhvc3RJbXBsLT5jb250ZXh0KCkpOwotICAgIGNsZWFyUGVuZGluZ1VwZGF0
ZSgpOwogCiAgICAgaG9zdEltcGwtPnNldFZpc2libGUobV92aXNpYmxlKTsKICAgICBob3N0SW1w
bC0+c2V0Wm9vbUFuaW1hdG9yU2NhbGUobV96b29tQW5pbWF0b3JTY2FsZSk7CiAgICAgaG9zdElt
cGwtPnNldFZpZXdwb3J0KHZpZXdwb3J0U2l6ZSgpKTsKIAogICAgIGhvc3RJbXBsLT5sYXllclJl
bmRlcmVyKCktPnNldENvbnRlbnRzVGV4dHVyZU1lbW9yeVVzZUJ5dGVzKG1fY29udGVudHNUZXh0
dXJlTWFuYWdlci0+Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCkpOwotICAgIG1fY29udGVudHNUZXh0
dXJlTWFuYWdlci0+dW5wcm90ZWN0QWxsVGV4dHVyZXMoKTsKIAogICAgIC8vIFN5bmNocm9uaXpl
IHRyZWVzLCBpZiBvbmUgZXhpc3RzIGF0IGFsbC4uLgogICAgIGlmIChyb290TGF5ZXIoKSkKQEAg
LTEzOCw2ICsxNDYsMTIgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmNvbW1pdFRvKENDTGF5ZXJU
cmVlSG9zdEltcGwqIGhvc3RJbXBsKQogICAgIG1fZnJhbWVOdW1iZXIrKzsKIH0KIAordm9pZCBD
Q0xheWVyVHJlZUhvc3Q6OmNvbW1pdENvbXBsZXRlKCkKK3sKKyAgICBjbGVhclBlbmRpbmdVcGRh
dGUoKTsKKyAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnVucHJvdGVjdEFsbFRleHR1cmVz
KCk7Cit9CisKIFBhc3NPd25QdHI8Q0NUaHJlYWQ+IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlQ29t
cG9zaXRvclRocmVhZCgpCiB7CiAgICAgcmV0dXJuIG1fY2xpZW50LT5jcmVhdGVDb21wb3NpdG9y
VGhyZWFkKCk7CkBAIC0yMTQsNyArMjI4LDYgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldE5l
ZWRzQ29tbWl0QW5kUmVkcmF3KCkKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXROZWVkc1JlZHJh
dygpCiB7CiAjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQotICAgIFRSQUNFX0VWRU5UKCJD
Q0xheWVyVHJlZUhvc3Q6OnNldE5lZWRzUmVkcmF3IiwgdGhpcywgMCk7CiAgICAgbV9wcm94eS0+
c2V0TmVlZHNSZWRyYXcoKTsKICNlbHNlCiAgICAgbV9jbGllbnQtPnNjaGVkdWxlQ29tcG9zaXRl
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCmluZGV4IGZlZTI5NTYxMmI5MjEyNzkwZDBi
ZWMxMDY4N2QwNWJkMTE3OGJmMTcuLjAwYjdlYzIxMmQ2ZTk3M2U2YTVhM2NhODcxOGRkZDQ3NzY3
YTAxYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCkBAIC05Niw2ICs5Niw3IEBAIHB1
YmxpYzoKIAogICAgIC8vIENDTGF5ZXJUcmVlSG9zdCBpbnRlcmZhY2UgdG8gQ0NQcm94eS4KICAg
ICB2b2lkIGFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKKyAgICB2b2lk
IGNvbW1pdENvbXBsZXRlKCk7CiAgICAgdm9pZCBjb21taXRUbyhDQ0xheWVyVHJlZUhvc3RJbXBs
Kik7CiAgICAgUGFzc093blB0cjxDQ1RocmVhZD4gY3JlYXRlQ29tcG9zaXRvclRocmVhZCgpOwog
ICAgIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUxheWVyVHJlZUhvc3RDb250
ZXh0M0QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXggYjMw
NDgzNjhkYWEyMDc2ZmE0OWRiYTE0YmI5YzkzNjk4YjY3NmUxZC4uNGExYzM5ZDRkMDkxMGJiZWJl
YmY2ODY1N2ExMjEzNzQ0ZDU1Mjk1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5jcHAKQEAgLTQ4LDEwICs0OCwxMiBAQCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVy
VHJlZUhvc3RJbXBsKGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzKQogICAgICwgbV9mcmFtZU51
bWJlcigwKQogICAgICwgbV9zZXR0aW5ncyhzZXR0aW5ncykKIHsKKyAgICBBU1NFUlQoQ0NQcm94
eTo6aXNJbXBsVGhyZWFkKCkpOwogfQogCiBDQ0xheWVyVHJlZUhvc3RJbXBsOjp+Q0NMYXllclRy
ZWVIb3N0SW1wbCgpCiB7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAg
ICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6fkNDTGF5ZXJUcmVlSG9zdEltcGwo
KSIsIHRoaXMsIDApOwogICAgIGlmIChtX2xheWVyUmVuZGVyZXIpCiAgICAgICAgIG1fbGF5ZXJS
ZW5kZXJlci0+Y2xvc2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5jcHAKaW5kZXggZDYxYTJlNTNlZDIzMGY5Njdl
ZTFkODVkZDA4M2NiYWNmOWMyNjcxOC4uOWQwYTc3NTI3ZThiZmU2Y2Y4M2M4ZTI4OTdmYTk5MDE4
ZGJmYTA3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NQcm94eS5jcHAKQEAgLTM2LDE3ICszNiwxNyBAQCB1c2luZyBuYW1l
c3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSNpZm5kZWYgTkRFQlVHCi1ib29s
IENDUHJveHk6OmlzTWFpblRocmVhZCgpCi17Ci0gICAgcmV0dXJuIDo6aXNNYWluVGhyZWFkKCk7
Ci19Ci0KIG5hbWVzcGFjZSB7CiBib29sIGZha2VJbXBsVGhyZWFkID0gZmFsc2U7CiBzdGF0aWMg
V1RGOjpUaHJlYWRJZGVudGlmaWVyIGltcGxUaHJlYWRJRDsKIH0KIAorI2lmbmRlZiBOREVCVUcK
K2Jvb2wgQ0NQcm94eTo6aXNNYWluVGhyZWFkKCkKK3sKKyAgICByZXR1cm4gOjppc01haW5UaHJl
YWQoKSAmJiAhZmFrZUltcGxUaHJlYWQ7Cit9CisKIGJvb2wgQ0NQcm94eTo6aXNJbXBsVGhyZWFk
KCkKIHsKICAgICByZXR1cm4gZmFrZUltcGxUaHJlYWQgfHwgY3VycmVudFRocmVhZCgpID09IGlt
cGxUaHJlYWRJRDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUHJveHkuaAppbmRleCBmNWU0MThiMGU4M2RjNjdhYzJjMzZlNmZhNWFi
YTlhNjlkZmFjNmMyLi5iMjIyYjk5ODhkODE3ZjQ5NWMyYTNhMGYwNWM0Y2ExY2VkYWRkMTYzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1Byb3h5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NQcm94eS5oCkBAIC03NSwxOSArNzUsMjAgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29s
IGlzSW1wbFRocmVhZCgpOwogI2VuZGlmCiAKLSAgICAvLyBUZXN0aW5nIGhvb2tzCi0gICAgdmly
dHVhbCB2b2lkIGxvc2VDb21wb3NpdG9yQ29udGV4dChpbnQgbnVtVGltZXMpID0gMDsKLQogICAg
IC8vIFRlbXBvcmFyeSBoYWNrIHdoaWxlIHJlbmRlcl93aWRnZXQgc3RpbGwgZG9lcyBzY2hlZHVs
aW5nIGZvciBDQ0xheWVyVHJlZUhvc3RNYWluVGhyZWFkSQogICAgIHZpcnR1YWwgR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQoKSA9IDA7CiAKLXByb3RlY3RlZDoKLSAgICBDQ1Byb3h5KCkgeyB9
Ci0gICAgZnJpZW5kIGNsYXNzIFNjb3BlZFNldEltcGxUaHJlYWQ7CisgICAgLy8gVGVzdGluZyBo
b29rcworICAgIHZpcnR1YWwgdm9pZCBsb3NlQ29tcG9zaXRvckNvbnRleHQoaW50IG51bVRpbWVz
KSA9IDA7CisKICNpZm5kZWYgTkRFQlVHCiAgICAgc3RhdGljIHZvaWQgc2V0SW1wbFRocmVhZChi
b29sKTsKICAgICBzdGF0aWMgdm9pZCBzZXRJbXBsVGhyZWFkKFdURjo6VGhyZWFkSWRlbnRpZmll
cik7CiAjZW5kaWYKKworcHJvdGVjdGVkOgorICAgIENDUHJveHkoKSB7IH0KKyAgICBmcmllbmQg
Y2xhc3MgU2NvcGVkU2V0SW1wbFRocmVhZDsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHku
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5n
bGVUaHJlYWRQcm94eS5jcHAKaW5kZXggMmQyN2Q3MjliMzgyMTEzOWYwODE3Y2VkYjQ3ZWFlZWZh
ZjM4NTg4Ny4uZWY3MzAxNGI3NWUwNTUzMTgxNzY1MTgyYzM5YzdhMjA2MmQwYzgzYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5n
bGVUaHJlYWRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKQEAgLTY1LDcgKzY1LDcgQEAgQ0NT
aW5nbGVUaHJlYWRQcm94eTo6Q0NTaW5nbGVUaHJlYWRQcm94eShDQ0xheWVyVHJlZUhvc3QqIGxh
eWVyVHJlZUhvc3QpCiAgICAgLCBtX3RpbWVzUmVjcmVhdGVTaG91bGRGYWlsKDApCiB7CiAgICAg
VFJBQ0VfRVZFTlQoIkNDU2luZ2xlVGhyZWFkUHJveHk6OkNDU2luZ2xlVGhyZWFkUHJveHkiLCB0
aGlzLCAwKTsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChDQ1Byb3h5
Ojppc01haW5UaHJlYWQoKSk7CiB9CiAKIHZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6c3RhcnQo
KQpAQCAtNzcsMTMgKzc3LDEzIEBAIHZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6c3RhcnQoKQog
Q0NTaW5nbGVUaHJlYWRQcm94eTo6fkNDU2luZ2xlVGhyZWFkUHJveHkoKQogewogICAgIFRSQUNF
X0VWRU5UKCJDQ1NpbmdsZVRocmVhZFByb3h5Ojp+Q0NTaW5nbGVUaHJlYWRQcm94eSIsIHRoaXMs
IDApOwotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKENDUHJveHk6Omlz
TWFpblRocmVhZCgpKTsKICAgICBBU1NFUlQoIW1fbGF5ZXJUcmVlSG9zdEltcGwgJiYgIW1fbGF5
ZXJUcmVlSG9zdCk7IC8vIG1ha2Ugc3VyZSBzdG9wKCkgZ290IGNhbGxlZC4KIH0KIAogYm9vbCBD
Q1NpbmdsZVRocmVhZFByb3h5Ojpjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMsIGNv
bnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBB
U1NFUlQoQ0NQcm94eTo6aXNNYWluVGhyZWFkKCkpOwogCiAgICAgaWYgKCFyZWNyZWF0ZUNvbnRl
eHRJZk5lZWRlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDMsMjcgKzEwMywzNCBA
QCBib29sIENDU2luZ2xlVGhyZWFkUHJveHk6OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBp
eGVscywgY29uc3QgSW50UmVjdCYgcmVjdAogCiBHcmFwaGljc0NvbnRleHQzRCogQ0NTaW5nbGVU
aHJlYWRQcm94eTo6Y29udGV4dCgpCiB7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAg
ICBBU1NFUlQoQ0NQcm94eTo6aXNNYWluVGhyZWFkKCkpOwogICAgIFNjb3BlZFNldEltcGxUaHJl
YWQgaW1wbDsKICAgICByZXR1cm4gbV9sYXllclRyZWVIb3N0SW1wbC0+Y29udGV4dCgpOwogfQog
CiB2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OmZpbmlzaEFsbFJlbmRlcmluZygpCiB7Ci0gICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7Ci0g
ICAgbV9sYXllclRyZWVIb3N0SW1wbC0+ZmluaXNoQWxsUmVuZGVyaW5nKCk7CisgICAgQVNTRVJU
KENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAoIXJlY3JlYXRlQ29udGV4dElmTmVl
ZGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbW1pdElmTmVlZGVkKCk7CisKKyAgICB7
CisgICAgICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICAgICAgbV9sYXllclRyZWVI
b3N0SW1wbC0+ZmluaXNoQWxsUmVuZGVyaW5nKCk7CisgICAgfQogfQogCiBib29sIENDU2luZ2xl
VGhyZWFkUHJveHk6OmlzU3RhcnRlZCgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNNYWluVGhyZWFkKCkpOwogICAgIHJldHVybiBt
X2xheWVyVHJlZUhvc3RJbXBsOwogfQogCiBib29sIENDU2luZ2xlVGhyZWFkUHJveHk6OmluaXRp
YWxpemVMYXllclJlbmRlcmVyKCkKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAg
IEFTU0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQoKSk7CiAgICAgUmVmUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiBjb250ZXh0ID0gbV9sYXllclRyZWVIb3N0LT5jcmVhdGVMYXllclRyZWVIb3N0Q29u
dGV4dDNEKCk7CiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0x
NDksNyArMTU2LDcgQEAgdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpsb3NlQ29tcG9zaXRvckNv
bnRleHQoaW50IG51bVRpbWVzKQogCiB2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OnNldE5lZWRz
Q29tbWl0KCkKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChDQ1By
b3h5Ojppc01haW5UaHJlYWQoKSk7CiAgICAgLy8gQ29tbWl0IGltbWVkaWF0ZWx5CiAgICAgewog
ICAgICAgICBTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CkBAIC0xNTcsMTEgKzE2NCwxMiBAQCB2
b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0KCkKICAgICAgICAgbV9sYXll
clRyZWVIb3N0LT5jb21taXRUbyhtX2xheWVyVHJlZUhvc3RJbXBsLmdldCgpKTsKICAgICAgICAg
bV9sYXllclRyZWVIb3N0SW1wbC0+Y29tbWl0Q29tcGxldGUoKTsKICAgICB9CisgICAgbV9sYXll
clRyZWVIb3N0LT5jb21taXRDb21wbGV0ZSgpOwogfQogCiB2b2lkIENDU2luZ2xlVGhyZWFkUHJv
eHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCkKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworICAgIEFTU0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQoKSk7CiAjaWYgIVVTRShUSFJF
QURFRF9DT01QT1NJVElORykKICAgICBtX2xheWVyVHJlZUhvc3QtPnNjaGVkdWxlQ29tcG9zaXRl
KCk7CiAjZWxzZQpAQCAtMTgwLDcgKzE4OCw3IEBAIHZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6
c2V0TmVlZHNSZWRyYXcoKQogdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5OjpzdG9wKCkKIHsKICAg
ICBUUkFDRV9FVkVOVCgiQ0NTaW5nbGVUaHJlYWRQcm94eTo6c3RvcCIsIHRoaXMsIDApOwotICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVh
ZCgpKTsKICAgICB7CiAgICAgICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKICAgICAgICAg
bV9sYXllclRyZWVIb3N0LT5kZWxldGVDb250ZW50c1RleHR1cmVzKG1fbGF5ZXJUcmVlSG9zdElt
cGwtPmNvbnRleHQoKSk7CkBAIC0yMDYsNyArMjE0LDcgQEAgdm9pZCBDQ1NpbmdsZVRocmVhZFBy
b3h5Ojpjb21wb3NpdGVJbW1lZGlhdGVseSgpCiAKIGJvb2wgQ0NTaW5nbGVUaHJlYWRQcm94eTo6
cmVjcmVhdGVDb250ZXh0SWZOZWVkZWQoKQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKICAgICBpZiAoIW1fZ3JhcGhp
Y3NDb250ZXh0TG9zdCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiBjb250ZXh0OwpAQCAtMjUwLDYgKzI1OCw3IEBAIHZvaWQgQ0NTaW5nbGVUaHJl
YWRQcm94eTo6Y29tbWl0SWZOZWVkZWQoKQogICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmNvbW1p
dFRvKG1fbGF5ZXJUcmVlSG9zdEltcGwuZ2V0KCkpOwogICAgICAgICBtX2xheWVyVHJlZUhvc3RJ
bXBsLT5jb21taXRDb21wbGV0ZSgpOwogICAgIH0KKyAgICBtX2xheWVyVHJlZUhvc3QtPmNvbW1p
dENvbXBsZXRlKCk7CiB9CiAKIGJvb2wgQ0NTaW5nbGVUaHJlYWRQcm94eTo6ZG9Db21wb3NpdGUo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaHJlYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcAppbmRleCA5YTg0ZGE2YzA1M2EzNDAyOWUzZGFk
MzdiNzZiYjgyNDM1MDA3ZjcxLi40NzNhYjViOTdmMjdmNjAxZmM2ZDJhNGZhMjFlOTg3ZDBjNjg2
MjJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RocmVhZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgImNjL0NDTWFpblRocmVhZFRh
c2suaCIKICNpbmNsdWRlICJjYy9DQ1RocmVhZFRhc2suaCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVu
dFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCiB1c2luZyBuYW1lc3BhY2Ug
V1RGOwpAQCAtNDgsOCArNDksMTQgQEAgUGFzc093blB0cjxDQ1Byb3h5PiBDQ1RocmVhZFByb3h5
OjpjcmVhdGUoQ0NMYXllclRyZWVIb3N0KiBsYXllclRyZWVIb3N0KQogfQogCiBDQ1RocmVhZFBy
b3h5OjpDQ1RocmVhZFByb3h5KENDTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCkKLSAgICA6
IG1fY29tbWl0UGVuZGluZyhmYWxzZSkKKyAgICA6IG1fY29tbWl0UmVxdWVzdGVkKGZhbHNlKQog
ICAgICwgbV9sYXllclRyZWVIb3N0KGxheWVyVHJlZUhvc3QpCisgICAgLCBtX3N0YXJ0ZWQoZmFs
c2UpCisgICAgLCBtX2xhc3RFeGVjdXRlZEJlZ2luRnJhbWVBbmRDb21taXRTZXF1ZW5jZU51bWJl
cigtMSkKKyAgICAsIG1fbnVtQmVnaW5GcmFtZUFuZENvbW1pdHNJc3N1ZWRPbkNDVGhyZWFkKDAp
CisgICAgLCBtX2JlZ2luRnJhbWVBbmRDb21taXRQZW5kaW5nT25DQ1RocmVhZChmYWxzZSkKKyAg
ICAsIG1fZHJhd1Rhc2tQb3N0ZWRPbkNDVGhyZWFkKGZhbHNlKQorICAgICwgbV9yZWRyYXdSZXF1
ZXN0ZWRPbkNDVGhyZWFkKGZhbHNlKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5
OjpDQ1RocmVhZFByb3h5IiwgdGhpcywgMCk7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
QEAgLTY2LDggKzczLDcgQEAgQ0NUaHJlYWRQcm94eTo6fkNDVGhyZWFkUHJveHkoKQogewogICAg
IFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5Ojp+Q0NUaHJlYWRQcm94eSIsIHRoaXMsIDApOwog
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3RJ
bXBsKTsgLy8gTWFrZSBzdXJlIHN0b3AoKSBnb3QgY2FsbGVkLgotICAgIEFTU0VSVCghbV9sYXll
clRyZWVIb3N0KTsgLy8gTWFrZSBzdXJlIHN0b3AoKSBnb3QgY2FsbGVkLgorICAgIEFTU0VSVCgh
bV9zdGFydGVkKTsKIAogICAgIG51bVByb3hpZXMtLTsKICAgICBpZiAoIW51bVByb3hpZXMpIHsK
QEAgLTc4LDggKzg0LDI5IEBAIENDVGhyZWFkUHJveHk6On5DQ1RocmVhZFByb3h5KCkKIAogYm9v
bCBDQ1RocmVhZFByb3h5Ojpjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMsIGNvbnN0
IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJu
IGZhbHNlOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fbGF5ZXJU
cmVlSG9zdCk7CisKKyAgICBmaW5pc2hBbGxSZW5kZXJpbmcoKTsKKyAgICBib29sIHN1Y2Nlc3Mg
PSBmYWxzZTsKKyAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOworICAgIGNjVGhyZWFk
LT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OmRyYXdM
YXllcnNBbmRSZWFkYmFja09uQ0NUaHJlYWQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBs
ZXRpb24pLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZzdWNjZXNzKSwgQWxsb3dDcm9zc1RocmVh
ZEFjY2VzcyhwaXhlbHMpLCByZWN0KSk7CisgICAgY29tcGxldGlvbi53YWl0KCk7CisgICAgcmV0
dXJuIHN1Y2Nlc3M7Cit9CisKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6ZHJhd0xheWVyc0FuZFJlYWRi
YWNrT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbiwgYm9vbCogc3VjY2Vz
cywgdm9pZCogcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIEFTU0VSVChDQ1By
b3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgaWYgKCFtX2xheWVyVHJlZUhvc3RJbXBsKSB7Cisg
ICAgICAgICpzdWNjZXNzID0gZmFsc2U7CisgICAgICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGRyYXdMYXllcnNPbkNDVGhyZWFkKCk7CisgICAg
bV9sYXllclRyZWVIb3N0SW1wbC0+cmVhZGJhY2socGl4ZWxzLCByZWN0KTsKKyAgICAqc3VjY2Vz
cyA9IG1fbGF5ZXJUcmVlSG9zdEltcGwtPmlzQ29udGV4dExvc3QoKTsKKyAgICBjb21wbGV0aW9u
LT5zaWduYWwoKTsKIH0KIAogR3JhcGhpY3NDb250ZXh0M0QqIENDVGhyZWFkUHJveHk6OmNvbnRl
eHQoKQpAQCAtODksMTIgKzExNiwzNCBAQCBHcmFwaGljc0NvbnRleHQzRCogQ0NUaHJlYWRQcm94
eTo6Y29udGV4dCgpCiAKIHZvaWQgQ0NUaHJlYWRQcm94eTo6ZmluaXNoQWxsUmVuZGVyaW5nKCkK
IHsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNNYWlu
VGhyZWFkKCkpOworICAgIC8vIElmIGEgY29tbWl0IGlzIHBlbmRpbmcsIHBlcmZvcm0gdGhlIGNv
bW1pdCBmaXJzdC4KKyAgICBpZiAobV9jb21taXRSZXF1ZXN0ZWQpICB7CisgICAgICAgIC8vIFRo
aXMgYml0IG9mIGNvZGUgaXMgdWdsaWVyIHRoYW4gaXQgc2hvdWxkIGJlIGJlY2F1c2UgcmV0dXJu
aW5nCisgICAgICAgIC8vIHBvaW50ZXJzIHZpYSB0aGUgQ0NUaHJlYWQgdGFzayBtb2RlbCBpcyBy
ZWFsbHkgbWVzc3kuIEVmZmVjdGl2ZWx5LCB3ZQorICAgICAgICAvLyBhcmUgbWFraW5nIGEgYmxv
Y2tpbmcgY2FsbCB0byBjcmVhdGVCZWdpbkZyYW1lQW5kQ29tbWl0VGFza09uQ0NUaHJlYWQsCisg
ICAgICAgIC8vIGFuZCB0cnlpbmcgdG8gZ2V0IHRoZSBDQ01haW5UaHJlYWQ6OlRhc2sgaXQgcmV0
dXJucyBzbyB3ZSBjYW4gcnVuIGl0LgorICAgICAgICBPd25QdHI8Q0NNYWluVGhyZWFkOjpUYXNr
PiBiZWdpbkZyYW1lQW5kQ29tbWl0VGFzazsKKyAgICAgICAgeworICAgICAgICAgICAgQ0NNYWlu
VGhyZWFkOjpUYXNrKiB0YXNrUHRyID0gMDsKKyAgICAgICAgICAgIENDQ29tcGxldGlvbkV2ZW50
IGNvbXBsZXRpb247CisgICAgICAgICAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJl
YWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5OjpvYnRhaW5CZWdpbkZyYW1lQW5kQ29tbWl0VGFz
a0Zyb21DQ1RocmVhZCwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29tcGxldGlvbiksIEFsbG93
Q3Jvc3NUaHJlYWRBY2Nlc3MoJnRhc2tQdHIpKSk7CisgICAgICAgICAgICBjb21wbGV0aW9uLndh
aXQoKTsKKyAgICAgICAgICAgIGJlZ2luRnJhbWVBbmRDb21taXRUYXNrID0gYWRvcHRQdHIodGFz
a1B0cik7CisgICAgICAgIH0KKworICAgICAgICBiZWdpbkZyYW1lQW5kQ29tbWl0VGFzay0+cGVy
Zm9ybVRhc2soKTsKKyAgICB9CisgICAgLy8gTWFrZSBzdXJlIGFsbCBHTCBkcmF3aW5nIGlzIGZp
bmlzaGVkIG9uIHRoZSBpbXBsIHRocmVhZC4KKyAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0
aW9uOworICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkND
VGhyZWFkUHJveHk6OmZpbmlzaEFsbFJlbmRlcmluZ09uQ0NUaHJlYWQsIEFsbG93Q3Jvc3NUaHJl
YWRBY2Nlc3MoJmNvbXBsZXRpb24pKSk7CisgICAgY29tcGxldGlvbi53YWl0KCk7CiB9CiAKIGJv
b2wgQ0NUaHJlYWRQcm94eTo6aXNTdGFydGVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9sYXll
clRyZWVIb3N0SW1wbDsKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNNYWluVGhyZWFkKCkpOworICAg
IHJldHVybiBtX3N0YXJ0ZWQ7CiB9CiAKIGJvb2wgQ0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUxh
eWVyUmVuZGVyZXIoKQpAQCAtMTExLDcgKzE2MCw3IEBAIGJvb2wgQ0NUaHJlYWRQcm94eTo6aW5p
dGlhbGl6ZUxheWVyUmVuZGVyZXIoKQogICAgIC8vIE1ha2UgYSBibG9ja2luZyBjYWxsIHRvIGlu
aXRpYWxpemVMYXllclJlbmRlcmVyT25DQ1RocmVhZC4gVGhlIHJlc3VsdHMgb2YgdGhhdCBjYWxs
CiAgICAgLy8gYXJlIHB1c2hlZCBpbnRvIHRoZSBpbml0aWFsaXplU3VjY2VlZGVkIGFuZCBjYXBh
YmlsaXRpZXMgbG9jYWwgdmFyaWFibGVzLgogICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRp
b247Ci0gICAgYm9vbCBpbml0aWFsaXplU3VjY2VlZGVkOworICAgIGJvb2wgaW5pdGlhbGl6ZVN1
Y2NlZWRlZCA9IGZhbHNlOwogICAgIExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMgY2FwYWJpbGl0
aWVzOwogICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkND
VGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVyT25DQ1RocmVhZCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3Mo
Y29udGV4dFB0ciksIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pLCBBbGxvd0Ny
b3NzVGhyZWFkQWNjZXNzKCZpbml0aWFsaXplU3VjY2VlZGVkKSwgQWxsb3dDcm9zc1RocmVhZEFj
Y2VzcygmY2FwYWJpbGl0aWVzKSkpOwpAQCAtMTM1LDQzICsxODQsNTcgQEAgdm9pZCBDQ1RocmVh
ZFByb3h5Ojpsb3NlQ29tcG9zaXRvckNvbnRleHQoaW50IG51bVRpbWVzKQogdm9pZCBDQ1RocmVh
ZFByb3h5OjpzZXROZWVkc0NvbW1pdCgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
LSAgICBpZiAobV9jb21taXRQZW5kaW5nKQorICAgIGlmIChtX2NvbW1pdFJlcXVlc3RlZCkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OnNldE5lZWRz
Q29tbWl0IiwgdGhpcywgMCk7Ci0gICAgbV9jb21taXRQZW5kaW5nID0gdHJ1ZTsKLSAgICBjY1Ro
cmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5Ojpz
ZXROZWVkc0NvbW1pdE9uQ0NUaHJlYWQpKTsKKyAgICBtX2NvbW1pdFJlcXVlc3RlZCA9IHRydWU7
CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJl
YWRQcm94eTo6dXBkYXRlU2NoZWR1bGVyU3RhdGVPbkNDVGhyZWFkLCBtX2NvbW1pdFJlcXVlc3Rl
ZCwgdHJ1ZSkpOwogfQogCiB2b2lkIENDVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVk
cmF3KCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGlmIChtX2NvbW1pdFBl
bmRpbmcpCisgICAgaWYgKG1fY29tbWl0UmVxdWVzdGVkKQogICAgICAgICByZXR1cm47CisgICAg
bV9jb21taXRSZXF1ZXN0ZWQgPSB0cnVlOwogCiAgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJv
eHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3IiwgdGhpcywgMCk7Ci0gICAgbV9jb21taXRQZW5k
aW5nID0gdHJ1ZTsKLSAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRo
aXMsICZDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQpKTsK
KyAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVh
ZFByb3h5Ojp1cGRhdGVTY2hlZHVsZXJTdGF0ZU9uQ0NUaHJlYWQsIG1fY29tbWl0UmVxdWVzdGVk
LCB0cnVlKSk7CiB9CiAKIHZvaWQgQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNSZWRyYXcoKQogewog
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0
ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNSZWRyYXdPbkNDVGhy
ZWFkKSk7CisgICAgaWYgKG1fY29tbWl0UmVxdWVzdGVkKSAvLyBJbXBsaWVzIHRoYXQgYSBjb21t
aXQgaXMgaW4gZmxpZ2h0LgorICAgICAgICByZXR1cm47CisgICAgLy8gVW5saWtlIHNldE5lZWRz
Q29tbWl0IHRoYXQgdHJhY2tzIHdoZXRoZXIgYSBjb21taXQgbWVzc2FnZSBoYXMgYmVlbiBzZW50
LAorICAgIC8vIHNldE5lZWRzUmVkcmF3IGFsd2F5cyBzZW5kcyBhIG1lc3NhZ2UgdG8gdGhlIGNv
bXBvc2l0b3IgdGhyZWFkLiBUaGlzIGlzCisgICAgLy8gYmVjYXVzZSB0aGUgY29tcG9zaXRvciB0
aHJlYWQgY2FuIGRyYXcgd2l0aG91dCB0ZWxsaW5nIHRoZSBtYWluCisgICAgLy8gdGhyZWFkLiBU
aGlzIHNob3VsZCBub3QgYmUgbXVjaCBvZiBhIHByb2JsZW0gYmVjYXVzZSBjYWxscyB0bworICAg
IC8vIHNldE5lZWRzUmVkcmF3IG1lc3NhZ2VzIGFyZSB1bmNvbW1vbiAob25seSB0cmlnZ2VyZWQg
YnkgV01fUEFJTlQvZXRjKSwKKyAgICAvLyBjb21wYXJlZCB0byBzZXROZWVkc0NvbW1pdEFuZFJl
ZHJhdyBtZXNzYWdlcy4KKyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNS
ZWRyYXciLCB0aGlzLCAwKTsKKyAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRU
YXNrKHRoaXMsICZDQ1RocmVhZFByb3h5Ojp1cGRhdGVTY2hlZHVsZXJTdGF0ZU9uQ0NUaHJlYWQs
IGZhbHNlLCB0cnVlKSk7CiB9CiAKIHZvaWQgQ0NUaHJlYWRQcm94eTo6c3RhcnQoKQogeworICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgLy8gQ3JlYXRlIExheWVyVHJlZUhvc3RJbXBs
LgogICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CiAgICAgY2NUaHJlYWQtPnBvc3RU
YXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUlt
cGxPbkNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9uKSkpOwogICAg
IGNvbXBsZXRpb24ud2FpdCgpOworCisgICAgbV9zdGFydGVkID0gdHJ1ZTsKIH0KIAogdm9pZCBD
Q1RocmVhZFByb3h5OjpzdG9wKCkKIHsKICAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6
c3RvcCIsIHRoaXMsIDApOwogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJU
KG1fc3RhcnRlZCk7CisKICAgICAvLyBTeW5jaHJvbm91c2x5IGRlbGV0ZXMgdGhlIGltcGwuCiAg
ICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKICAgICBjY1RocmVhZC0+cG9zdFRhc2so
Y3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5OjpsYXllclRyZWVIb3N0Q2xv
c2VkT25DQ1RocmVhZCwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29tcGxldGlvbikpKTsKQEAg
LTE3OSw4MiArMjQyLDE2NyBAQCB2b2lkIENDVGhyZWFkUHJveHk6OnN0b3AoKQogCiAgICAgQVNT
RVJUKCFtX2xheWVyVHJlZUhvc3RJbXBsKTsgLy8gdmVyaWZ5IHRoYXQgdGhlIGltcGwgZGVsZXRl
ZC4KICAgICBtX2xheWVyVHJlZUhvc3QgPSAwOworICAgIG1fc3RhcnRlZCA9IGZhbHNlOwogfQog
Ci12b2lkIENDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKCkKK3Zv
aWQgQ0NUaHJlYWRQcm94eTo6ZmluaXNoQWxsUmVuZGVyaW5nT25DQ1RocmVhZChDQ0NvbXBsZXRp
b25FdmVudCogY29tcGxldGlvbikKIHsKLSAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6
YmVnaW5GcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICBUUkFDRV9FVkVO
VCgiQ0NUaHJlYWRQcm94eTo6ZmluaXNoQWxsUmVuZGVyaW5nT25DQ1RocmVhZCIsIHRoaXMsIDAp
OworICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7CisgICAgQVNTRVJUKCFtX2JlZ2luRnJhbWVB
bmRDb21taXRQZW5kaW5nT25DQ1RocmVhZCk7CisgICAgaWYgKG1fcmVkcmF3UmVxdWVzdGVkT25D
Q1RocmVhZCkgeworICAgICAgICBkcmF3TGF5ZXJzT25DQ1RocmVhZCgpOworICAgICAgICBtX2xh
eWVyVHJlZUhvc3RJbXBsLT5wcmVzZW50KCk7CisgICAgICAgIG1fcmVkcmF3UmVxdWVzdGVkT25D
Q1RocmVhZCA9IGZhbHNlOworICAgIH0KKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5maW5pc2hB
bGxSZW5kZXJpbmcoKTsKKyAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKK30KKwordm9pZCBDQ1Ro
cmVhZFByb3h5OjpvYnRhaW5CZWdpbkZyYW1lQW5kQ29tbWl0VGFza0Zyb21DQ1RocmVhZChDQ0Nv
bXBsZXRpb25FdmVudCogY29tcGxldGlvbiwgQ0NNYWluVGhyZWFkOjpUYXNrKiogdGFza1B0cikK
K3sKKyAgICBPd25QdHI8Q0NNYWluVGhyZWFkOjpUYXNrPiB0YXNrID0gY3JlYXRlQmVnaW5GcmFt
ZUFuZENvbW1pdFRhc2tPbkNDVGhyZWFkKCk7CisgICAgKnRhc2tQdHIgPSB0YXNrLmxlYWtQdHIo
KTsKKyAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKK30KKworUGFzc093blB0cjxDQ01haW5UaHJl
YWQ6OlRhc2s+IENDVGhyZWFkUHJveHk6OmNyZWF0ZUJlZ2luRnJhbWVBbmRDb21taXRUYXNrT25D
Q1RocmVhZCgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OmNyZWF0ZUJlZ2lu
RnJhbWVBbmRDb21taXRUYXNrT25DQ1RocmVhZCIsIHRoaXMsIDApOwogICAgIEFTU0VSVChpc0lt
cGxUaHJlYWQoKSk7Ci0gICAgLy8gVEVNUCBIQUNLIHNvIHdlIGNhbiBleGVyY2lzZSB0aGlzIGNv
ZGUgaW4gdW5pdCB0ZXN0cy4KLSAgICBDQ01haW5UaHJlYWQ6OnBvc3RUYXNrKGNyZWF0ZU1haW5U
aHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0LCAwLjAp
KTsKKyAgICBkb3VibGUgZnJhbWVCZWdpblRpbWUgPSBjdXJyZW50VGltZSgpOworICAgIG1fYmVn
aW5GcmFtZUFuZENvbW1pdFBlbmRpbmdPbkNDVGhyZWFkID0gdHJ1ZTsKKworICAgIC8vIE5PVEUs
IGl0IGlzIHBvc3NpYmxlIHRvIHJlY2VpZXZlIGEgcmVxdWVzdCBmb3IgYQorICAgIC8vIGJlZ2lu
RnJhbWVBbmRDb21taXRPbkNDVGhyZWFkIGZyb20gZmluaXNoQWxsUmVuZGVyaW5nIHdoaWxlIGEK
KyAgICAvLyBiZWdpbkZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZCBpcyBlbnF1ZXVlZC4gU2luY2Ug
Q0NNYWluVGhyZWFkIGRvZXNuJ3QKKyAgICAvLyBwcm92aWRlIGEgdGhyZWFkc2FmZSB3YXkgdG8g
Y2FuY2VsIHRhc2tzLCBpdCBpcyBpbXBvcnRhbnQgdGhhdAorICAgIC8vIGJlZ2luRnJhbWVBbmRD
b21taXQgYmUgc3RydWN0dXJlZCB0byB1bmRlcnN0YW5kIHRoYXQgaXQgbWF5IGdldCBjYWxsZWQg
YXQKKyAgICAvLyBhIHBvaW50IHRoYXQgaXQgc2hvdWxkbid0LiBXZSBkbyB0aGlzIGJ5IGFzc2ln
bmluZyBhIHNlcXVlbmNlIG51bWJlciB0bworICAgIC8vIGV2ZXJ5IG5ldyBiZWdpbkZyYW1lQW5k
Q29tbWl0IHRhc2suIFRoZW4sIGJlZ2luRnJhbWVBbmRDb21taXQgdHJhY2tzIHRoZQorICAgIC8v
IGxhc3QgZXhlY3V0ZWQgc2VxdWVuY2UgbnVtYmVyLCBkcm9wcGluZyBiZWdpbkZyYW1lQW5kQ29t
bWl0IHdpdGggc2VxdWVuY2UKKyAgICAvLyBudW1iZXJzIGJlbG93IHRoZSBsYXN0IGV4ZWN1dGVk
IG9uZS4KKyAgICBpbnQgdGhpc1Rhc2tTZXF1ZW5jZU51bWJlciA9IG1fbnVtQmVnaW5GcmFtZUFu
ZENvbW1pdHNJc3N1ZWRPbkNDVGhyZWFkOworICAgIG1fbnVtQmVnaW5GcmFtZUFuZENvbW1pdHNJ
c3N1ZWRPbkNDVGhyZWFkKys7CisgICAgcmV0dXJuIGNyZWF0ZU1haW5UaHJlYWRUYXNrKHRoaXMs
ICZDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0LCB0aGlzVGFza1NlcXVlbmNlTnVt
YmVyLCBmcmFtZUJlZ2luVGltZSk7CiB9CiAKLXZvaWQgQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFt
ZUFuZENvbW1pdChkb3VibGUgZnJhbWVCZWdpblRpbWUpCit2b2lkIENDVGhyZWFkUHJveHk6OmJl
Z2luRnJhbWVBbmRDb21taXQoaW50IHNlcXVlbmNlTnVtYmVyLCBkb3VibGUgZnJhbWVCZWdpblRp
bWUpCiB7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVBbmRDb21t
aXQiLCB0aGlzLCAwKTsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIGlmICghbV9s
YXllclRyZWVIb3N0KQogICAgICAgICByZXR1cm47CiAKLSAgICBUUkFDRV9FVkVOVCgiQ0NUaHJl
YWRQcm94eTo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0IiwgdGhpcywgMCk7CisgICAgLy8gRHJvcCBi
ZWdpbkZyYW1lQW5kQ29tbWl0IGNhbGxzIHRoYXQgb2NjdXIgb3V0IG9mIHNlcXVlbmNlLiBTZWUg
Y3JlYXRlQmVnaW5GcmFtZUFuZENvbW1pdFRhc2tPbkNDVGhyZWFkIGZvcgorICAgIC8vIGFuIGV4
cGxhbmF0aW9uIG9mIGhvdyBvdXQtb2Ytc2VxdWVuY2UgYmVnaW5GcmFtZUFuZENvbW1pdCB0YXNr
cyBjYW4gb2NjdXIuCisgICAgaWYgKHNlcXVlbmNlTnVtYmVyIDwgbV9sYXN0RXhlY3V0ZWRCZWdp
bkZyYW1lQW5kQ29tbWl0U2VxdWVuY2VOdW1iZXIpIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoIkVh
cmx5T3V0X1N0YWxlQmVnaW5GcmFtZUFuZENvbW1pdCIsIHRoaXMsIDApOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIG1fbGFzdEV4ZWN1dGVkQmVnaW5GcmFtZUFuZENvbW1pdFNlcXVlbmNl
TnVtYmVyID0gc2VxdWVuY2VOdW1iZXI7CisKKyAgICBBU1NFUlQobV9jb21taXRSZXF1ZXN0ZWQp
OworCisgICAgLy8gRklYTUU6IHJlY3JlYXRlIHRoZSBjb250ZXh0IGlmIGl0IHdhcyByZXF1ZXN0
ZWQgYnkgdGhlIGltcGwgdGhyZWFkCiAgICAgewogICAgICAgICBUUkFDRV9FVkVOVCgiQ0NMYXll
clRyZWVIb3N0OjphbmltYXRlQW5kTGF5b3V0IiwgdGhpcywgMCk7CiAgICAgICAgIG1fbGF5ZXJU
cmVlSG9zdC0+YW5pbWF0ZUFuZExheW91dChmcmFtZUJlZ2luVGltZSk7CiAgICAgfQogCi0gICAg
bV9jb21taXRQZW5kaW5nID0gZmFsc2U7CisgICAgQVNTRVJUKG1fbGFzdEV4ZWN1dGVkQmVnaW5G
cmFtZUFuZENvbW1pdFNlcXVlbmNlTnVtYmVyID09IHNlcXVlbmNlTnVtYmVyKTsKIAotICAgIC8v
IEJsb2NraW5nIGNhbGwgdG8gQ0NUaHJlYWRQcm94eTo6cGVyZm9ybUNvbW1pdAotICAgIENDQ29t
cGxldGlvbkV2ZW50IGNvbXBsZXRpb247Ci0gICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUND
VGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6Y29tbWl0T25DQ1RocmVhZCwgQWxsb3dD
cm9zc1RocmVhZEFjY2VzcygmY29tcGxldGlvbikpKTsKLSAgICBjb21wbGV0aW9uLndhaXQoKTsK
KyAgICAvLyBDbGVhciB0aGUgY29tbWl0IGZsYWcgYWZ0ZXIgYW5pbWF0ZUFuZExheW91dCBoZXJl
IC0tLSBvYmplY3RzIHRoYXQgb25seQorICAgIC8vIGxheW91dCB3aGVuIHBhaW50ZWQgd2lsbCB0
cmlnZ2VyIGFub3RoZXIgc2V0TmVlZHNDb21taXQgaW5zaWRlCisgICAgLy8gdXBkYXRlTGF5ZXJz
LgorICAgIG1fY29tbWl0UmVxdWVzdGVkID0gZmFsc2U7CisKKyAgICBtX2xheWVyVHJlZUhvc3Qt
PnVwZGF0ZUxheWVycygpOworCisgICAgeworICAgICAgICAvLyBCbG9ja2luZyBjYWxsIHRvIEND
VGhyZWFkUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQKKyAgICAgICAgVFJBQ0VfRVZFTlQoImNvbW1p
dCIsIHRoaXMsIDApOworICAgICAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOworICAg
ICAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVh
ZFByb3h5Ojpjb21taXRPbkNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0
aW9uKSkpOworICAgICAgICBjb21wbGV0aW9uLndhaXQoKTsKKyAgICB9CisKKyAgICBtX2xheWVy
VHJlZUhvc3QtPmNvbW1pdENvbXBsZXRlKCk7CisKKyAgICBBU1NFUlQobV9sYXN0RXhlY3V0ZWRC
ZWdpbkZyYW1lQW5kQ29tbWl0U2VxdWVuY2VOdW1iZXIgPT0gc2VxdWVuY2VOdW1iZXIpOwogfQog
CiB2b2lkIENDVGhyZWFkUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQq
IGNvbXBsZXRpb24pCiB7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OmJlZ2luRnJh
bWVBbmRDb21taXRPbkNDVGhyZWFkIiwgdGhpcywgMCk7CiAgICAgQVNTRVJUKGlzSW1wbFRocmVh
ZCgpKTsKLSAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6Y29tbWl0T25DQ1RocmVhZCIs
IHRoaXMsIDApOwotICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmJlZ2luQ29tbWl0KCk7Ci0gICAg
ewotICAgICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojpjb21taXQiLCB0aGlzLCAw
KTsKLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5jb21taXRUbyhtX2xheWVyVHJlZUhvc3RJbXBs
LmdldCgpKTsKKyAgICBBU1NFUlQobV9iZWdpbkZyYW1lQW5kQ29tbWl0UGVuZGluZ09uQ0NUaHJl
YWQpOworICAgIG1fYmVnaW5GcmFtZUFuZENvbW1pdFBlbmRpbmdPbkNDVGhyZWFkID0gZmFsc2U7
CisgICAgaWYgKCFtX2xheWVyVHJlZUhvc3RJbXBsKSB7CisgICAgICAgIGNvbXBsZXRpb24tPnNp
Z25hbCgpOworICAgICAgICByZXR1cm47CiAgICAgfQorICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwt
PmJlZ2luQ29tbWl0KCk7CisgICAgbV9sYXllclRyZWVIb3N0LT5jb21taXRUbyhtX2xheWVyVHJl
ZUhvc3RJbXBsLmdldCgpKTsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5jb21taXRDb21wbGV0
ZSgpOworCiAgICAgY29tcGxldGlvbi0+c2lnbmFsKCk7CiAKLSAgICBtX2xheWVyVHJlZUhvc3RJ
bXBsLT5jb21taXRDb21wbGV0ZSgpOwotICAgIHNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCgpOwor
ICAgIGlmIChtX3JlZHJhd1JlcXVlc3RlZE9uQ0NUaHJlYWQpCisgICAgICAgIHNjaGVkdWxlRHJh
d1Rhc2tPbkNDVGhyZWFkKCk7CiB9CiAKLXZvaWQgQ0NUaHJlYWRQcm94eTo6ZHJhd0xheWVyc09u
Q0NUaHJlYWQoKQordm9pZCBDQ1RocmVhZFByb3h5OjpzY2hlZHVsZURyYXdUYXNrT25DQ1RocmVh
ZCgpCiB7Ci0gICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OmRyYXdMYXllcnNPbkNDVGhy
ZWFkIiwgdGhpcywgMCk7CiAgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKLSAgICBpZiAobV9s
YXllclRyZWVIb3N0SW1wbCkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+ZHJhd0xheWVy
cygpOworICAgIGlmIChtX2RyYXdUYXNrUG9zdGVkT25DQ1RocmVhZCkKKyAgICAgICAgcmV0dXJu
OworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpzY2hlZHVsZURyYXdUYXNrT25DQ1Ro
cmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChtX2xheWVyVHJlZUhvc3RJbXBsKTsKKyAgICBt
X2RyYXdUYXNrUG9zdGVkT25DQ1RocmVhZCA9IHRydWU7CisgICAgY2NUaHJlYWQtPnBvc3RUYXNr
KGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6ZHJhd0xheWVyc0FuZFBy
ZXNlbnRPbkNDVGhyZWFkKSk7CiB9CiAKLXZvaWQgQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21t
aXRPbkNDVGhyZWFkKCkKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6ZHJhd0xheWVyc0FuZFByZXNlbnRP
bkNDVGhyZWFkKCkKIHsKLSAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHND
b21taXRPbkNDVGhyZWFkIiwgdGhpcywgMCk7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJv
eHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkIiwgdGhpcywgMCk7CiAgICAgQVNTRVJUKGlzSW1wbFRo
cmVhZCgpKTsKLSAgICBBU1NFUlQobV9sYXllclRyZWVIb3N0SW1wbCk7Ci0gICAgLy8gRklYTUU6
IE5vdCB5ZXQgaW1wbGVtZW50ZWQsIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Njc0MTcKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBpZiAoIW1fbGF5
ZXJUcmVlSG9zdEltcGwpCisgICAgICAgIHJldHVybjsKKworICAgIGRyYXdMYXllcnNPbkNDVGhy
ZWFkKCk7CisgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+cHJlc2VudCgpOworICAgIG1fcmVkcmF3
UmVxdWVzdGVkT25DQ1RocmVhZCA9IGZhbHNlOworICAgIG1fZHJhd1Rhc2tQb3N0ZWRPbkNDVGhy
ZWFkID0gZmFsc2U7CiB9CiAKLXZvaWQgQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRS
ZWRyYXdPbkNDVGhyZWFkKCkKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6ZHJhd0xheWVyc09uQ0NUaHJl
YWQoKQogewotICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFu
ZFJlZHJhd09uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQ
cm94eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKICAgICBBU1NFUlQoaXNJbXBs
VGhyZWFkKCkpOwogICAgIEFTU0VSVChtX2xheWVyVHJlZUhvc3RJbXBsKTsKLSAgICAvLyBURU1Q
IEhBQ0sgc28gd2UgY2FuIGV4ZXJjaXNlIHRoaXMgY29kZSBpbiB1bml0IHRlc3RzLgotICAgIEND
TWFpblRocmVhZDo6cG9zdFRhc2soY3JlYXRlTWFpblRocmVhZFRhc2sodGhpcywgJkNDVGhyZWFk
UHJveHk6OmJlZ2luRnJhbWVBbmRDb21taXQsIDAuMCkpOworCisgICAgbV9sYXllclRyZWVIb3N0
SW1wbC0+ZHJhd0xheWVycygpOworICAgIEFTU0VSVCghbV9sYXllclRyZWVIb3N0SW1wbC0+aXND
b250ZXh0TG9zdCgpKTsKIH0KIAotdm9pZCBDQ1RocmVhZFByb3h5OjpzZXROZWVkc1JlZHJhd09u
Q0NUaHJlYWQoKQordm9pZCBDQ1RocmVhZFByb3h5Ojp1cGRhdGVTY2hlZHVsZXJTdGF0ZU9uQ0NU
aHJlYWQoYm9vbCBjb21taXRSZXF1ZXN0ZWQsIGJvb2wgcmVkcmF3UmVxdWVzdGVkKQogewotICAg
IFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQiLCB0
aGlzLCAwKTsKLSAgICAvLyBURU1QIEhBQ0sgc28gd2UgY2FuIGV4ZXJjaXNlIHRoaXMgY29kZSBp
biB1bml0IHRlc3RzLgotICAgIGRyYXdMYXllcnNPbkNDVGhyZWFkKCk7CisgICAgVFJBQ0VfRVZF
TlQoIkNDVGhyZWFkUHJveHk6OnVwZGF0ZVNjaGVkdWxlclN0YXRlT25DQ1RocmVhZCIsIHRoaXMs
IDApOworICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fbGF5ZXJUcmVl
SG9zdEltcGwpOworCisgICAgLy8gRklYTUU6IHVzZSBDQ1NjaGVkdWxlciB0byBkZWNpZGUgd2hl
biB0byBtYW5hZ2UgdGhlIGNvbnZlcnNpb24gb2YgdGhpcworICAgIC8vIGNvbW1pdCByZXF1ZXN0
IGludG8gYW4gYWN0dWFsIGNyZWF0ZUJlZ2luRnJhbWVBbmRDb21taXRUYXNrT25DQ1RocmVhZCBj
YWxsLgorICAgIG1fcmVkcmF3UmVxdWVzdGVkT25DQ1RocmVhZCB8PSByZWRyYXdSZXF1ZXN0ZWQ7
CisgICAgaWYgKCFtX2JlZ2luRnJhbWVBbmRDb21taXRQZW5kaW5nT25DQ1RocmVhZCkgeworICAg
ICAgICBDQ01haW5UaHJlYWQ6OnBvc3RUYXNrKGNyZWF0ZUJlZ2luRnJhbWVBbmRDb21taXRUYXNr
T25DQ1RocmVhZCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIElmIG5vIGNv
bW1pdCBpcyBwZW5kaW5nLCBidXQgYSByZWRyYXcgaXMgcmVxdWVzdGVkLCB0aGVuIHBvc3QgYSBy
ZWRyYXcgcmlnaHQgYXdheQorICAgIGlmIChtX3JlZHJhd1JlcXVlc3RlZE9uQ0NUaHJlYWQpCisg
ICAgICAgIHNjaGVkdWxlRHJhd1Rhc2tPbkNDVGhyZWFkKCk7CiB9CiAKIHZvaWQgQ0NUaHJlYWRQ
cm94eTo6aW5pdGlhbGl6ZUltcGxPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0
aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NUaHJlYWRQcm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oCmluZGV4IDI0Njc3MjQwY2FhYTY5MTI2NzZkN2Vk
ZmUwZmFiMmNjMjEyNjJlYzIuLmQzYjQ4N2ZlYzQwZDQwMTU5MDdhOWY4MDk2Y2Q5ZGJjZTJkMWIx
OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGhyZWFkUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmgKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1
ZGUgImNjL0NDQ29tcGxldGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5oIgorI2luY2x1ZGUgImNjL0NDTWFpblRocmVhZC5oIgogI2luY2x1ZGUgImNjL0NDUHJv
eHkuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKQEAgLTU4LDI4ICs1OSwzNiBAQCBwcml2
YXRlOgogICAgIGV4cGxpY2l0IENDVGhyZWFkUHJveHkoQ0NMYXllclRyZWVIb3N0Kik7CiAKICAg
ICAvLyBDYWxsZWQgb24gQ0NNYWluVGhyZWFkCi0gICAgdm9pZCBiZWdpbkZyYW1lQW5kQ29tbWl0
KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CisgICAgdm9pZCBiZWdpbkZyYW1lQW5kQ29tbWl0KGlu
dCBzZXF1ZW5jZU51bWJlciwgZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKIAogICAgIC8vIENhbGxl
ZCBvbiBDQ1RocmVhZAotICAgIHZvaWQgYmVnaW5GcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQoKTsK
KyAgICBQYXNzT3duUHRyPENDTWFpblRocmVhZDo6VGFzaz4gY3JlYXRlQmVnaW5GcmFtZUFuZENv
bW1pdFRhc2tPbkNDVGhyZWFkKCk7CisgICAgdm9pZCBvYnRhaW5CZWdpbkZyYW1lQW5kQ29tbWl0
VGFza0Zyb21DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCosIENDTWFpblRocmVhZDo6VGFzayoq
KTsKICAgICB2b2lkIGNvbW1pdE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsKKyAgICB2
b2lkIGRyYXdMYXllcnNBbmRQcmVzZW50T25DQ1RocmVhZCgpOwogICAgIHZvaWQgZHJhd0xheWVy
c09uQ0NUaHJlYWQoKTsKKyAgICB2b2lkIGRyYXdMYXllcnNBbmRSZWFkYmFja09uQ0NUaHJlYWQo
Q0NDb21wbGV0aW9uRXZlbnQqLCBib29sKiBzdWNjZXNzLCB2b2lkKiBwaXhlbHMsIGNvbnN0IElu
dFJlY3QmKTsKKyAgICB2b2lkIGZpbmlzaEFsbFJlbmRlcmluZ09uQ0NUaHJlYWQoQ0NDb21wbGV0
aW9uRXZlbnQqKTsKICAgICB2b2lkIGluaXRpYWxpemVJbXBsT25DQ1RocmVhZChDQ0NvbXBsZXRp
b25FdmVudCopOwogICAgIHZvaWQgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJPbkNDVGhyZWFkKEdy
YXBoaWNzQ29udGV4dDNEKiwgQ0NDb21wbGV0aW9uRXZlbnQqLCBib29sKiBpbml0aWFsaXplU3Vj
Y2VlZGVkLCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKik7CiAgICAgdm9pZCBzZXROZWVkc0Nv
bW1pdE9uQ0NUaHJlYWQoKTsKLSAgICB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1Ro
cmVhZCgpOwotICAgIHZvaWQgc2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKCk7CisgICAgdm9pZCB1
cGRhdGVTY2hlZHVsZXJTdGF0ZU9uQ0NUaHJlYWQoYm9vbCBjb21taXRSZXF1ZXN0ZWQsIGJvb2wg
cmVkcmF3UmVxdWVzdGVkKTsKICAgICB2b2lkIGxheWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFk
KENDQ29tcGxldGlvbkV2ZW50Kik7Ci0KLSAgICAvLyBVc2VkIG9uIG1haW4tdGhyZWFkIG9ubHku
Ci0gICAgYm9vbCBtX2NvbW1pdFBlbmRpbmc7CisgICAgdm9pZCBzY2hlZHVsZURyYXdUYXNrT25D
Q1RocmVhZCgpOwogCiAgICAgLy8gQWNjZXNzZWQgb24gbWFpbiB0aHJlYWQgb25seS4KKyAgICBi
b29sIG1fY29tbWl0UmVxdWVzdGVkOwogICAgIENDTGF5ZXJUcmVlSG9zdCogbV9sYXllclRyZWVI
b3N0OwogICAgIExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMgbV9sYXllclJlbmRlcmVyQ2FwYWJp
bGl0aWVzTWFpblRocmVhZENvcHk7CisgICAgYm9vbCBtX3N0YXJ0ZWQ7CisgICAgaW50IG1fbGFz
dEV4ZWN1dGVkQmVnaW5GcmFtZUFuZENvbW1pdFNlcXVlbmNlTnVtYmVyOwogCi0gICAgLy8gVXNl
ZCBvbiB0aGUgQ0NUaHJlYWQsIGJ1dCBjaGVja2VkIG9uIG1haW4gdGhyZWFkIGR1cmluZyBpbml0
aWFsaXphdGlvbi9zaHV0ZG93bi4KKyAgICAvLyBVc2VkIG9uIHRoZSBDQ1RocmVhZCBvbmx5CiAg
ICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IG1fbGF5ZXJUcmVlSG9zdEltcGw7CisgICAg
aW50IG1fbnVtQmVnaW5GcmFtZUFuZENvbW1pdHNJc3N1ZWRPbkNDVGhyZWFkOworICAgIGJvb2wg
bV9iZWdpbkZyYW1lQW5kQ29tbWl0UGVuZGluZ09uQ0NUaHJlYWQ7CisgICAgYm9vbCBtX2RyYXdU
YXNrUG9zdGVkT25DQ1RocmVhZDsKKyAgICBib29sIG1fcmVkcmF3UmVxdWVzdGVkT25DQ1RocmVh
ZDsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZjljZGNhOTdhYWYyNzFh
YTA2NzM2YTM1YWUyMmI4YzdiMmFmZTFkOS4uMDE2NzdhNTRmZWRiY2RjN2E2YjMwODRiZWVkNGY5
MDEyYzI1YTFiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAor
MjAxMS0wOS0xNSAgTmF0IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2No
cm9taXVtXSBNYWtlIENDVGhyZWFkUHJveHkgZHJhdworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc0MTcKKworICAgICAgICBEaXNhYmxlIENDTGF5ZXJU
cmVlSG9zdFRlc3QgdGVtcG9yYXJpbHkuIFdpbGwgcmUtZW5hYmxlCisgICAgICAgIHdpdGggaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3NDE4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhv
c3RUZXN0LmNwcDoKKwogMjAxMS0wOS0xNiAgTmF0IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgW2Nocm9taXVtXSBDcmVhdGUgV2ViR0wgbGF5ZXIgZm9yIGdyYXBoaWNzIGNv
bnRleHRzIG9uIGRlbWFuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NMYXllclRyZWVIb3N0VGVzdC5jcHAKaW5kZXggZmY0ZmZiZTY1MTg0NGY1Y2E1ZjI5NzE4MTRm
YWM2NTkyNzhhMzAxZC4uMzM0MDUwZGI1ZDk2Y2Y3ZjIzZDUyZTJiZTg4NmU0MTYzMzZiMjcyNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RU
ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9z
dFRlc3QuY3BwCkBAIC0xNzAsNiArMTcwLDEwIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCisj
aWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVD
b21wb3NpdGUoKSB7IH0KKyNlbmRpZgorCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IE1vY2tMYXll
clRyZWVIb3N0Q2xpZW50KFRlc3RIb29rcyogdGVzdEhvb2tzKSA6IG1fdGVzdEhvb2tzKHRlc3RI
b29rcykgeyB9CiAKQEAgLTIwOCw3ICsyMTIsMTQgQEAgcHJvdGVjdGVkOgogICAgICAgICA6IG1f
YmVnaW5uaW5nKGZhbHNlKQogICAgICAgICAsIG1fZW5kV2hlbkJlZ2luUmV0dXJucyhmYWxzZSkK
ICAgICAgICAgLCBtX3J1bm5pbmcoZmFsc2UpCi0gICAgICAgICwgbV90aW1lZE91dChmYWxzZSkg
eyB9CisgICAgICAgICwgbV90aW1lZE91dChmYWxzZSkKKyAgICB7CisjaWYgVVNFKFRIUkVBREVE
X0NPTVBPU0lUSU5HKQorICAgICAgICBtX3NldHRpbmdzLmVuYWJsZUNvbXBvc2l0b3JUaHJlYWQg
PSB0cnVlOworI2Vsc2UKKyAgICAgICAgbV9zZXR0aW5ncy5lbmFibGVDb21wb3NpdG9yVGhyZWFk
ID0gZmFsc2U7CisjZW5kaWYKKyAgICB9CiAKICAgICB2b2lkIGRvQmVnaW5UZXN0KCk7CiAKQEAg
LTI3MCw2ICsyODEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIHRlc3QtPmVuZFRlc3QoKTsKICAg
ICB9CiAKKyAgICBDQ1NldHRpbmdzIG1fc2V0dGluZ3M7CiAgICAgT3duUHRyPE1vY2tMYXllclRy
ZWVIb3N0Q2xpZW50PiBtX2NsaWVudDsKICAgICBSZWZQdHI8Q0NMYXllclRyZWVIb3N0PiBtX2xh
eWVyVHJlZUhvc3Q7CiAKQEAgLTI4NywxMCArMjk5LDggQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RU
ZXN0Ojpkb0JlZ2luVGVzdCgpCiAgICAgbV9ydW5uaW5nID0gdHJ1ZTsKICAgICBtX2NsaWVudCA9
IE1vY2tMYXllclRyZWVIb3N0Q2xpZW50OjpjcmVhdGUodGhpcyk7CiAKLSAgICBDQ1NldHRpbmdz
IHNldHRpbmdzOwotICAgIHNldHRpbmdzLmVuYWJsZUNvbXBvc2l0b3JUaHJlYWQgPSB0cnVlOwog
ICAgIFJlZlB0cjxMYXllckNocm9taXVtPiByb290TGF5ZXI7Ci0gICAgbV9sYXllclRyZWVIb3N0
ID0gTW9ja0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSh0aGlzLCBtX2NsaWVudC5nZXQoKSwgcm9vdExh
eWVyLCBzZXR0aW5ncyk7CisgICAgbV9sYXllclRyZWVIb3N0ID0gTW9ja0xheWVyVHJlZUhvc3Q6
OmNyZWF0ZSh0aGlzLCBtX2NsaWVudC5nZXQoKSwgcm9vdExheWVyLCBtX3NldHRpbmdzKTsKICAg
ICBBU1NFUlQobV9sYXllclRyZWVIb3N0KTsKIAogICAgIG1fYmVnaW5uaW5nID0gdHJ1ZTsKQEAg
LTU0NSw5ICs1NTUsMTAgQEAgcHJpdmF0ZToKIH07CiBURVNUX0YoQ0NMYXllclRyZWVIb3N0VGVz
dFNldE5lZWRzUmVkcmF3LCBydW4pCiB7CisgICAgQ0NTZXR0aW5ncyBzZXRpbmdzOwogICAgIHJ1
blRlc3QoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UKIAotI2VuZGlmIC8vIFVTRShUSFJFQURFRF9D
T01QT1NJVElORykKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9UcmVlU3luY2hyb25pemVyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcAppbmRleCA4YWRmNDc2OTlkNDg3MGRkNTQ5N2E4
MTUyYTNkNGViMGNjZWIzZDViLi5jMzdkZTczNjI3NjY5ZjkwZTZmYzcxY2VjZDY2MjI5NjliZWM1
MzJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJv
bml6ZXJUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5j
aHJvbml6ZXJUZXN0LmNwcApAQCAtMjgsMTIgKzI4LDI5IEBACiAKICNpbmNsdWRlICJMYXllckNo
cm9taXVtLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ1By
b3h5LmgiCiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAKIG5hbWVzcGFjZSB7CiAKK2NsYXNzIFNjb3BlZFNldEltcGxUaHJlYWQgeworcHVibGlj
OgorICAgIFNjb3BlZFNldEltcGxUaHJlYWQoKQorICAgIHsKKyNpZm5kZWYgTkRFQlVHCisgICAg
ICAgIENDUHJveHk6OnNldEltcGxUaHJlYWQodHJ1ZSk7CisjZW5kaWYKKyAgICB9CisgICAgflNj
b3BlZFNldEltcGxUaHJlYWQoKQorICAgIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIENDUHJv
eHk6OnNldEltcGxUaHJlYWQoZmFsc2UpOworI2VuZGlmCisgICAgfQorfTsKKwogY2xhc3MgTW9j
a0NDTGF5ZXJJbXBsIDogcHVibGljIENDTGF5ZXJJbXBsIHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxNb2NrQ0NMYXllckltcGw+IGNyZWF0ZShpbnQgbGF5ZXJJZCkKQEAgLTExNiw2
ICsxMzMsNyBAQCB2b2lkIGV4cGVjdFRyZWVzQXJlSWRlbnRpY2FsKExheWVyQ2hyb21pdW0qIGxh
eWVyLCBDQ0xheWVySW1wbCogY2NMYXllcikKIC8vIENvbnN0cnVjdHMgYSB2ZXJ5IHNpbXBsZSB0
cmVlIGFuZCBzeW5jaHJvbml6ZXMgaXQgd2l0aG91dCB0cnlpbmcgdG8gcmV1c2UgYW55IHByZWV4
aXN0aW5nIGxheWVycy4KIFRFU1QoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNTaW1wbGVUcmVl
RnJvbUVtcHR5KQogeworICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKICAgICBSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gbGF5ZXJUcmVlUm9vdCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsK
ICAgICBsYXllclRyZWVSb290LT5hZGRDaGlsZChMYXllckNocm9taXVtOjpjcmVhdGUoMCkpOwog
ICAgIGxheWVyVHJlZVJvb3QtPmFkZENoaWxkKExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKSk7CkBA
IC0xMjgsNiArMTQ2LDcgQEAgVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY1NpbXBsZVRy
ZWVGcm9tRW1wdHkpCiAvLyBDb25zdHJ1Y3RzIGEgdmVyeSBzaW1wbGUgdHJlZSBhbmQgc3luY2hy
b25pemVzIGl0IGF0dGVtcHRpbmcgdG8gcmV1c2Ugc29tZSBsYXllcnMKIFRFU1QoVHJlZVN5bmNo
cm9uaXplclRlc3QsIHN5bmNTaW1wbGVUcmVlUmV1c2luZ0xheWVycykKIHsKKyAgICBTY29wZWRT
ZXRJbXBsVGhyZWFkIGltcGw7CiAgICAgVmVjdG9yPGludD4gY2NMYXllckRlc3RydWN0aW9uTGlz
dDsKIAogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBsYXllclRyZWVSb290ID0gTW9ja0xheWVy
Q2hyb21pdW06OmNyZWF0ZSgmY2NMYXllckRlc3RydWN0aW9uTGlzdCk7CkBAIC0xNTMsNiArMTcy
LDcgQEAgVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVSZXVzaW5nTGF5
ZXJzKQogCiBURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jU2ltcGxlVHJlZUFuZFByb3Bl
cnRpZXMpCiB7CisgICAgU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOwogICAgIFJlZlB0cjxMYXll
ckNocm9taXVtPiBsYXllclRyZWVSb290ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOwogICAg
IGxheWVyVHJlZVJvb3QtPmFkZENoaWxkKExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKSk7CiAgICAg
bGF5ZXJUcmVlUm9vdC0+YWRkQ2hpbGQoTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApKTsKQEAgLTE4
NCw2ICsyMDQsNyBAQCBURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jU2ltcGxlVHJlZUFu
ZFByb3BlcnRpZXMpCiAKIFRFU1QoVHJlZVN5bmNocm9uaXplclRlc3QsIHJldXNlQ0NMYXllcnNB
ZnRlclN0cnVjdHVyYWxDaGFuZ2UpCiB7CisgICAgU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOwog
ICAgIFZlY3RvcjxpbnQ+IGNjTGF5ZXJEZXN0cnVjdGlvbkxpc3Q7CiAKICAgICAvLyBTZXQgdXAg
YSB0cmVlIHdpdGggdGhpcyBzb3J0IG9mIHN0cnVjdHVyZToKQEAgLTIzMCw2ICsyNTEsNyBAQCBU
RVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCByZXVzZUNDTGF5ZXJzQWZ0ZXJTdHJ1Y3R1cmFsQ2hh
bmdlKQogLy8gQ29uc3RydWN0cyBhIHZlcnkgc2ltcGxlIHRyZWUsIHN5bmNocm9uaXplcyBpdCwg
dGhlbiBzeW5jaHJvbml6ZXMgdG8gYSB0b3RhbGx5IG5ldyB0cmVlLiBBbGwgbGF5ZXJzIGZyb20g
dGhlIG9sZCB0cmVlIHNob3VsZCBiZSBkZWxldGVkLgogVEVTVChUcmVlU3luY2hyb25pemVyVGVz
dCwgc3luY1NpbXBsZVRyZWVUaGVuRGVzdHJveSkKIHsKKyAgICBTY29wZWRTZXRJbXBsVGhyZWFk
IGltcGw7CiAgICAgVmVjdG9yPGludD4gY2NMYXllckRlc3RydWN0aW9uTGlzdDsKIAogICAgIFJl
ZlB0cjxMYXllckNocm9taXVtPiBvbGRMYXllclRyZWVSb290ID0gTW9ja0xheWVyQ2hyb21pdW06
OmNyZWF0ZSgmY2NMYXllckRlc3RydWN0aW9uTGlzdCk7CkBAIC0yNjAsNiArMjgyLDcgQEAgVEVT
VChUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVUaGVuRGVzdHJveSkKIC8vIENv
bnN0cnVjdHMrc3luY3MgYSB0cmVlIHdpdGggbWFzaywgcmVwbGljYSwgYW5kIHJlcGxpY2EgbWFz
ayBsYXllcnMuCiBURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jTWFza1JlcGxpY2FBbmRS
ZXBsaWNhTWFza0xheWVycykKIHsKKyAgICBTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CiAgICAg
UmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVyVHJlZVJvb3QgPSBMYXllckNocm9taXVtOjpjcmVh
dGUoMCk7CiAgICAgbGF5ZXJUcmVlUm9vdC0+YWRkQ2hpbGQoTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
KDApKTsKICAgICBsYXllclRyZWVSb290LT5hZGRDaGlsZChMYXllckNocm9taXVtOjpjcmVhdGUo
MCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108556</attachid>
            <date>2011-09-23 16:36:22 -0700</date>
            <delta_ts>2011-09-23 16:45:10 -0700</delta_ts>
            <desc>Dont commit in finish.</desc>
            <filename>bug-67417-20110923163621.patch</filename>
            <type>text/plain</type>
            <size>43086</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTUzMzQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2ODRkMDYyZmEyZDMyODdi
MThkNWNlOTk5YTcyYWNlMzY2YTYyN2E3Li5jMmRiNmVhNzljNTZjN2NiZDg0ODc0NTY4MzkxOTg4
YzE3NTdjODYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTEtMDktMTUgIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTWFrZSBDQ1Ro
cmVhZFByb3h5IGRyYXcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTY3NDE3CisKKyAgICAgICAgVXBkYXRlIHRoZSBDQ1RocmVhZFByb3h5IHRvIGNvcnJl
Y3RseSBpbXBsZW1lbnQgdGhlIENDUHJveHkKKyAgICAgICAgaW50ZXJmYWNlLCBkbyBhbGwgdGhl
IHJpZ2h0IGNvbW1pdHRpbmcgYW5kIHVwZGF0aW5nIHN0ZXBzLCBhbmQKKyAgICAgICAgZHJhdyBh
IHBpY3R1cmUgb24gdGhlIHNjcmVlbi4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp+TGF5ZXJSZW5kZXJlckNo
cm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRz
VXBEaXNwbGF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDSGVhZHNVcERpc3BsYXk6OmVuYWJs
ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpDQ0xheWVySW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6fkNDTGF5ZXJJbXBsKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpDQ0xheWVyVHJlZUhvc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0Ojpjb21taXRUbyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3Q6OmNvbW1pdENvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdDo6c2V0TmVlZHNSZWRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjp+Q0NMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5OjpmaW5pc2hBbGxSZW5kZXJp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21t
aXQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tbWl0SWZOZWVk
ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJv
eHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6Q0NUaHJlYWRQcm94eSk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5Ojp+Q0NUaHJlYWRQcm94eSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5Ojpjb21wb3NpdGVBbmRSZWFkYmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpkcmF3TGF5ZXJzQW5kUmVhZGJhY2tPbkNDVGhy
ZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmZpbmlzaEFsbFJlbmRlcmlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5Ojppc1N0YXJ0ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNSZWRyYXcpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NUaHJlYWRQcm94eTo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94
eTo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpmaW5pc2hBbGxSZW5k
ZXJpbmdPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmNyZWF0
ZUJlZ2luRnJhbWVBbmRDb21taXRUYXNrT25DQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkND
VGhyZWFkUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJl
YWRQcm94eTo6c2NoZWR1bGVEcmF3VGFza09uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NUaHJlYWRQcm94eTo6ZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhyZWFkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OnVwZGF0ZVNjaGVkdWxlclN0YXRlT25DQ1RocmVhZCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5o
OgorCiAyMDExLTA5LTE2ICBNYXggUGVyZXBlbGl0c3luICA8cHBoMzRyQGdtYWlsLmNvbT4KIAog
ICAgICAgICBTZXQgYnV0IG5vdCB1c2VkIHZhcmlhYmxlcyBjbGVhbnVwIChnY2MgNC42KQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmgKaW5kZXggN2NlN2Y5OGQx
ZjEwNDIxNjk4ZDkwZDBkOTc4NzczM2JhNWRlNmY5OS4uMzlkMTFiNTAxMGYzNDJiNjBkNzJkYjNk
YjUwZjBmNDE0Y2MxMDhhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3Jv
c3NUaHJlYWRDb3BpZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVh
ZENvcGllci5oCkBAIC00MSw2ICs0MSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorICAg
IGNsYXNzIEludFJlY3Q7CiAgICAgY2xhc3MgS1VSTDsKICAgICBjbGFzcyBSZXNvdXJjZUVycm9y
OwogICAgIGNsYXNzIFJlc291cmNlUmVxdWVzdDsKQEAgLTYzLDkgKzY0LDE0IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ3Jvc3NUaHJlYWRD
b3BpZXJCYXNlPHRydWUsIGZhbHNlLCBUPiA6IHB1YmxpYyBDcm9zc1RocmVhZENvcGllclBhc3NU
aHJvdWdoPFQ+IHsKICAgICB9OwogCisgICAgLy8gVG8gYWxsb3cgYSB0eXBlIHRvIGJlIHBhc3Nl
ZCBhY3Jvc3MgdGhyZWFkcyB1c2luZyBpdHMgY29weSBjb25zdHJ1Y3RvciwgYWRkIGEgZm9yd2Fy
ZCBkZWNsYXJhdGlvbiBvZiB0aGUgdHlwZSBhbmQKKyAgICAvLyBhIENvcHlUaHJlYWRDb3BpZXJC
YXNlPGZhbHNlLCBmYWxzZSwgVHlwZU5hbWU+IDogcHVibGljIENyb3NzVGhyZWFkQ29waWVyUGFz
c1Rocm91Z2g8VHlwZU5hbWU+IHsgfTsgdG8gdGhpcyBmaWxlLgogICAgIHRlbXBsYXRlPD4gc3Ry
dWN0IENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIFRocmVhZGFibGVMb2FkZXJP
cHRpb25zPiA6IHB1YmxpYyBDcm9zc1RocmVhZENvcGllclBhc3NUaHJvdWdoPFRocmVhZGFibGVM
b2FkZXJPcHRpb25zPiB7CiAgICAgfTsKIAorICAgIHRlbXBsYXRlPD4gc3RydWN0IENyb3NzVGhy
ZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIEludFJlY3Q+IDogcHVibGljIENyb3NzVGhyZWFk
Q29waWVyUGFzc1Rocm91Z2g8SW50UmVjdD4geworICAgIH07CisKICAgICAvLyBDdXN0b20gY29w
eSBtZXRob2RzLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDcm9zc1RocmVhZENv
cGllckJhc2U8ZmFsc2UsIHRydWUsIFQ+IHsKICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBXVEY6
OlJlbW92ZVRlbXBsYXRlPFQsIFJlZlB0cj46OlR5cGUgVHlwZVdpdGhvdXRSZWZQdHI7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRleCA3YWZjYjczNWE4ZDEwMzU4MzJm
MmYxMzkyNGM0M2U1M2FhMjM0YTI1Li43NDQwZjg2MDQ0OWJkMTRjMWY3YmJhMGU3MWVhZjA4NDA0
YzQ0YTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTE4Miw2
ICsxODIsOCBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZSgpCiAKIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6fkxheWVyUmVuZGVyZXJDaHJvbWl1bSgpCiB7CisgICAgQVNT
RVJUKENDUHJveHk6OmlzSW1wbFRocmVhZAorKCkpOwogICAgIG1faGVhZHNVcERpc3BsYXkuY2xl
YXIoKTsgLy8gRXhwbGljaXRseSBkZXN0cm95IHRoZSBIVUQgYmVmb3JlIHRoZSBUZXh0dXJlTWFu
YWdlciBkaWVzLgogICAgIGNsZWFudXBTaGFyZWRPYmplY3RzKCk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNw
bGF5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
SGVhZHNVcERpc3BsYXkuY3BwCmluZGV4IDhjMDg2MzAxMGMyNTE4YmRlOTcxMjc4MmNjYTllYzYz
Y2JhZjFmZDAuLjI3ZjBjYjljM2MxMDQ5MWNlYzE1MDRmNjM5MTRhMDU3MDdhNDE0NzIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVh
ZHNVcERpc3BsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwCkBAIC04OSw2ICs4OSw5IEBAIHZvaWQgQ0NI
ZWFkc1VwRGlzcGxheTo6b25QcmVzZW50KCkKIAogYm9vbCBDQ0hlYWRzVXBEaXNwbGF5OjplbmFi
bGVkKCkgY29uc3QKIHsKKyAgICAvLyBGSVhNRTogSFVEIGRvZXMgbm90IHdvcmsgaW4gY29tcG9z
aXRvciB0aHJlYWQgbW9kZS4KKyAgICBpZiAoc2V0dGluZ3MoKS5lbmFibGVDb21wb3NpdG9yVGhy
ZWFkKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHNldHRpbmdzKCkuc2hvd1Bs
YXRmb3JtTGF5ZXJUcmVlIHx8IHNldHRpbmdzKCkuc2hvd0ZQU0NvdW50ZXI7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJJbXBsLmNwcAppbmRleCA4NDU0MDY0MzViODdmMjAzZDE3NzA4ZGM0NzU0OWM2YmE2
ZTlhMmY3Li40YmNjYTA3MzA3NmJhMjRjMjllZmE0MGRmZTNiM2IzOTYwOWVkN2EzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckltcGwuY3BwCkBAIC03OCwxMCArNzgsMTIgQEAgQ0NMYXllckltcGw6OkNDTGF5
ZXJJbXBsKGludCBpZCkKICAgICAsIG1fZGVidWdCb3JkZXJDb2xvcigwLCAwLCAwLCAwKQogICAg
ICwgbV9kZWJ1Z0JvcmRlcldpZHRoKDApCiB7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRo
cmVhZCgpKTsKIH0KIAogQ0NMYXllckltcGw6On5DQ0xheWVySW1wbCgpCiB7CisgICAgQVNTRVJU
KENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKIH0KIAogdm9pZCBDQ0xheWVySW1wbDo6YWRkQ2hp
bGQoUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0LmNwcAppbmRleCBhMjU3YjQxMWFiOWY0YzRkNmFjZWJmZTdhNzUzYmYxOWRhYjgzMmM4Li5h
ZWIwZTk2YjhkZjI2MmU1NjVkOWI5OTI2N2ZmMjFjYWVlYWU4OGJhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTU2LDYgKzU2LDcgQEAgQ0NMYXllclRyZWVIb3N0OjpDQ0xh
eWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0Q2xpZW50KiBjbGllbnQsIFBhc3NSZWZQdHI8TGF5
ZXIKICAgICAsIG1fem9vbUFuaW1hdG9yU2NhbGUoMSkKICAgICAsIG1fdmlzaWJsZSh0cnVlKQog
eworICAgIEFTU0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQoKSk7CiB9CiAKIGJvb2wgQ0NMYXll
clRyZWVIb3N0Ojppbml0aWFsaXplKCkKQEAgLTYzLDYgKzY0LDEwIEBAIGJvb2wgQ0NMYXllclRy
ZWVIb3N0Ojppbml0aWFsaXplKCkKICAgICBpZiAobV9zZXR0aW5ncy5lbmFibGVDb21wb3NpdG9y
VGhyZWFkKSB7CiAgICAgICAgIC8vIEFjY2VsZXJhdGVkIFBhaW50aW5nIGlzIG5vdCBzdXBwb3J0
ZWQgaW4gdGhyZWFkZWQgbW9kZS4gVHVybiBpdCBvZmYuCiAgICAgICAgIG1fc2V0dGluZ3MuYWNj
ZWxlcmF0ZVBhaW50aW5nID0gZmFsc2U7CisgICAgICAgIC8vIFRoZSBIVUQgZG9lcyBub3Qgd29y
ayBpbiB0aHJlYWRlZCBtb2RlLiBUdXJuIGl0IG9mZi4KKyAgICAgICAgbV9zZXR0aW5ncy5zaG93
RlBTQ291bnRlciA9IGZhbHNlOworICAgICAgICBtX3NldHRpbmdzLnNob3dQbGF0Zm9ybUxheWVy
VHJlZSA9IGZhbHNlOworCiAgICAgICAgIG1fcHJveHkgPSBDQ1RocmVhZFByb3h5OjpjcmVhdGUo
dGhpcyk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fcHJveHkgPSBDQ1NpbmdsZVRocmVhZFByb3h5
OjpjcmVhdGUodGhpcyk7CkBAIC0xMDYsNiArMTExLDExIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0
OjphbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKICAgICBtX2FuaW1hdGlu
ZyA9IGZhbHNlOwogfQogCisvLyBUaGlzIGZ1bmN0aW9uIGNvbW1pdHMgdGhlIENDTGF5ZXJUcmVl
SG9zdCB0byBhbiBpbXBsIHRyZWUuIFdoZW4gbW9kaWZ5aW5nCisvLyB0aGlzIGZ1bmN0aW9uLCBr
ZWVwIGluIG1pbmQgdGhhdCB0aGUgZnVuY3Rpb24gKnJ1bnMqIG9uIHRoZSBpbXBsIHRocmVhZCEg
QW55CisvLyBjb2RlIHRoYXQgaXMgbG9naWNhbGx5IGEgbWFpbiB0aHJlYWQgb3BlcmF0aW9uLCBl
LmcuIGRlbGV0aW9uIG9mIGEgTGF5ZXJDaHJvbWl1bSwKKy8vIHNob3VsZCBiZSBkZWxheWVkIHVu
dGlsIHRoZSBDQ0xheWVyVHJlZUhvc3Q6OmNvbW1pdENvbXBsZXRlLCB3aGljaCB3aWxsIHJ1bgor
Ly8gYWZ0ZXIgdGhlIGNvbW1pdCwgYnV0IG9uIHRoZSBtYWluIHRocmVhZC4KIHZvaWQgQ0NMYXll
clRyZWVIb3N0Ojpjb21taXRUbyhDQ0xheWVyVHJlZUhvc3RJbXBsKiBob3N0SW1wbCkKIHsKICAg
ICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwpAQCAtMTIwLDE0ICsxMzAsMTIgQEAg
dm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmNvbW1pdFRvKENDTGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJ
bXBsKQogICAgIGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+ZGVsZXRlRXZpY3RlZFRleHR1cmVz
KGhvc3RJbXBsLT5jb250ZXh0KCkpOwogCiAgICAgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyht
X3VwZGF0ZUxpc3QsIGhvc3RJbXBsLT5jb250ZXh0KCkpOwotICAgIGNsZWFyUGVuZGluZ1VwZGF0
ZSgpOwogCiAgICAgaG9zdEltcGwtPnNldFZpc2libGUobV92aXNpYmxlKTsKICAgICBob3N0SW1w
bC0+c2V0Wm9vbUFuaW1hdG9yU2NhbGUobV96b29tQW5pbWF0b3JTY2FsZSk7CiAgICAgaG9zdElt
cGwtPnNldFZpZXdwb3J0KHZpZXdwb3J0U2l6ZSgpKTsKIAogICAgIGhvc3RJbXBsLT5sYXllclJl
bmRlcmVyKCktPnNldENvbnRlbnRzVGV4dHVyZU1lbW9yeVVzZUJ5dGVzKG1fY29udGVudHNUZXh0
dXJlTWFuYWdlci0+Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCkpOwotICAgIG1fY29udGVudHNUZXh0
dXJlTWFuYWdlci0+dW5wcm90ZWN0QWxsVGV4dHVyZXMoKTsKIAogICAgIC8vIFN5bmNocm9uaXpl
IHRyZWVzLCBpZiBvbmUgZXhpc3RzIGF0IGFsbC4uLgogICAgIGlmIChyb290TGF5ZXIoKSkKQEAg
LTEzOCw2ICsxNDYsMTIgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmNvbW1pdFRvKENDTGF5ZXJU
cmVlSG9zdEltcGwqIGhvc3RJbXBsKQogICAgIG1fZnJhbWVOdW1iZXIrKzsKIH0KIAordm9pZCBD
Q0xheWVyVHJlZUhvc3Q6OmNvbW1pdENvbXBsZXRlKCkKK3sKKyAgICBjbGVhclBlbmRpbmdVcGRh
dGUoKTsKKyAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnVucHJvdGVjdEFsbFRleHR1cmVz
KCk7Cit9CisKIFBhc3NPd25QdHI8Q0NUaHJlYWQ+IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlQ29t
cG9zaXRvclRocmVhZCgpCiB7CiAgICAgcmV0dXJuIG1fY2xpZW50LT5jcmVhdGVDb21wb3NpdG9y
VGhyZWFkKCk7CkBAIC0yMTQsNyArMjI4LDYgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldE5l
ZWRzQ29tbWl0QW5kUmVkcmF3KCkKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXROZWVkc1JlZHJh
dygpCiB7CiAjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQotICAgIFRSQUNFX0VWRU5UKCJD
Q0xheWVyVHJlZUhvc3Q6OnNldE5lZWRzUmVkcmF3IiwgdGhpcywgMCk7CiAgICAgbV9wcm94eS0+
c2V0TmVlZHNSZWRyYXcoKTsKICNlbHNlCiAgICAgbV9jbGllbnQtPnNjaGVkdWxlQ29tcG9zaXRl
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCmluZGV4IGZlZTI5NTYxMmI5MjEyNzkwZDBi
ZWMxMDY4N2QwNWJkMTE3OGJmMTcuLjAwYjdlYzIxMmQ2ZTk3M2U2YTVhM2NhODcxOGRkZDQ3NzY3
YTAxYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCkBAIC05Niw2ICs5Niw3IEBAIHB1
YmxpYzoKIAogICAgIC8vIENDTGF5ZXJUcmVlSG9zdCBpbnRlcmZhY2UgdG8gQ0NQcm94eS4KICAg
ICB2b2lkIGFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKKyAgICB2b2lk
IGNvbW1pdENvbXBsZXRlKCk7CiAgICAgdm9pZCBjb21taXRUbyhDQ0xheWVyVHJlZUhvc3RJbXBs
Kik7CiAgICAgUGFzc093blB0cjxDQ1RocmVhZD4gY3JlYXRlQ29tcG9zaXRvclRocmVhZCgpOwog
ICAgIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUxheWVyVHJlZUhvc3RDb250
ZXh0M0QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXggYjMw
NDgzNjhkYWEyMDc2ZmE0OWRiYTE0YmI5YzkzNjk4YjY3NmUxZC4uNGExYzM5ZDRkMDkxMGJiZWJl
YmY2ODY1N2ExMjEzNzQ0ZDU1Mjk1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5jcHAKQEAgLTQ4LDEwICs0OCwxMiBAQCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVy
VHJlZUhvc3RJbXBsKGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzKQogICAgICwgbV9mcmFtZU51
bWJlcigwKQogICAgICwgbV9zZXR0aW5ncyhzZXR0aW5ncykKIHsKKyAgICBBU1NFUlQoQ0NQcm94
eTo6aXNJbXBsVGhyZWFkKCkpOwogfQogCiBDQ0xheWVyVHJlZUhvc3RJbXBsOjp+Q0NMYXllclRy
ZWVIb3N0SW1wbCgpCiB7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAg
ICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6fkNDTGF5ZXJUcmVlSG9zdEltcGwo
KSIsIHRoaXMsIDApOwogICAgIGlmIChtX2xheWVyUmVuZGVyZXIpCiAgICAgICAgIG1fbGF5ZXJS
ZW5kZXJlci0+Y2xvc2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5jcHAKaW5kZXggZDYxYTJlNTNlZDIzMGY5Njdl
ZTFkODVkZDA4M2NiYWNmOWMyNjcxOC4uYjdlY2NlY2QxMGEwOGI4ZWJhODc2NWYwODk4ZmViMmQz
MTExYjI4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NQcm94eS5jcHAKQEAgLTM3LDE2ICszNywxNyBAQCB1c2luZyBuYW1l
c3BhY2UgV1RGOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWZuZGVmIE5ERUJVRwotYm9vbCBD
Q1Byb3h5Ojppc01haW5UaHJlYWQoKQotewotICAgIHJldHVybiA6OmlzTWFpblRocmVhZCgpOwot
fQogCiBuYW1lc3BhY2UgewogYm9vbCBmYWtlSW1wbFRocmVhZCA9IGZhbHNlOwogc3RhdGljIFdU
Rjo6VGhyZWFkSWRlbnRpZmllciBpbXBsVGhyZWFkSUQ7CiB9CiAKK2Jvb2wgQ0NQcm94eTo6aXNN
YWluVGhyZWFkKCkKK3sKKyAgICByZXR1cm4gOjppc01haW5UaHJlYWQoKSAmJiAhZmFrZUltcGxU
aHJlYWQ7Cit9CisKIGJvb2wgQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkKIHsKICAgICByZXR1cm4g
ZmFrZUltcGxUaHJlYWQgfHwgY3VycmVudFRocmVhZCgpID09IGltcGxUaHJlYWRJRDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJv
eHkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJv
eHkuaAppbmRleCBmNWU0MThiMGU4M2RjNjdhYzJjMzZlNmZhNWFiYTlhNjlkZmFjNmMyLi5iMjIy
Yjk5ODhkODE3ZjQ5NWMyYTNhMGYwNWM0Y2ExY2VkYWRkMTYzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Byb3h5LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5oCkBAIC03
NSwxOSArNzUsMjAgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGlzSW1wbFRocmVhZCgpOwog
I2VuZGlmCiAKLSAgICAvLyBUZXN0aW5nIGhvb2tzCi0gICAgdmlydHVhbCB2b2lkIGxvc2VDb21w
b3NpdG9yQ29udGV4dChpbnQgbnVtVGltZXMpID0gMDsKLQogICAgIC8vIFRlbXBvcmFyeSBoYWNr
IHdoaWxlIHJlbmRlcl93aWRnZXQgc3RpbGwgZG9lcyBzY2hlZHVsaW5nIGZvciBDQ0xheWVyVHJl
ZUhvc3RNYWluVGhyZWFkSQogICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQo
KSA9IDA7CiAKLXByb3RlY3RlZDoKLSAgICBDQ1Byb3h5KCkgeyB9Ci0gICAgZnJpZW5kIGNsYXNz
IFNjb3BlZFNldEltcGxUaHJlYWQ7CisgICAgLy8gVGVzdGluZyBob29rcworICAgIHZpcnR1YWwg
dm9pZCBsb3NlQ29tcG9zaXRvckNvbnRleHQoaW50IG51bVRpbWVzKSA9IDA7CisKICNpZm5kZWYg
TkRFQlVHCiAgICAgc3RhdGljIHZvaWQgc2V0SW1wbFRocmVhZChib29sKTsKICAgICBzdGF0aWMg
dm9pZCBzZXRJbXBsVGhyZWFkKFdURjo6VGhyZWFkSWRlbnRpZmllcik7CiAjZW5kaWYKKworcHJv
dGVjdGVkOgorICAgIENDUHJveHkoKSB7IH0KKyAgICBmcmllbmQgY2xhc3MgU2NvcGVkU2V0SW1w
bFRocmVhZDsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAK
aW5kZXggMmQyN2Q3MjliMzgyMTEzOWYwODE3Y2VkYjQ3ZWFlZWZhZjM4NTg4Ny4uMjI4ODUxMDc3
ZDU0YzJhZDgxOGExMTRjZTg3MmYyZGIyZWE2NjM3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5n
bGVUaHJlYWRQcm94eS5jcHAKQEAgLTQyLDYgKzQyLDcgQEAgcHVibGljOgogICAgIFNjb3BlZFNl
dEltcGxUaHJlYWQoKQogICAgIHsKICNpZm5kZWYgTkRFQlVHCisgICAgICAgIEFTU0VSVChDQ1By
b3h5Ojppc01haW5UaHJlYWQoKSk7CiAgICAgICAgIENDUHJveHk6OnNldEltcGxUaHJlYWQodHJ1
ZSk7CiAjZW5kaWYKICAgICB9CkBAIC02NSw3ICs2Niw3IEBAIENDU2luZ2xlVGhyZWFkUHJveHk6
OkNDU2luZ2xlVGhyZWFkUHJveHkoQ0NMYXllclRyZWVIb3N0KiBsYXllclRyZWVIb3N0KQogICAg
ICwgbV90aW1lc1JlY3JlYXRlU2hvdWxkRmFpbCgwKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ1Np
bmdsZVRocmVhZFByb3h5OjpDQ1NpbmdsZVRocmVhZFByb3h5IiwgdGhpcywgMCk7Ci0gICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNNYWluVGhyZWFkKCkp
OwogfQogCiB2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OnN0YXJ0KCkKQEAgLTc3LDEzICs3OCwx
MyBAQCB2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OnN0YXJ0KCkKIENDU2luZ2xlVGhyZWFkUHJv
eHk6On5DQ1NpbmdsZVRocmVhZFByb3h5KCkKIHsKICAgICBUUkFDRV9FVkVOVCgiQ0NTaW5nbGVU
aHJlYWRQcm94eTo6fkNDU2luZ2xlVGhyZWFkUHJveHkiLCB0aGlzLCAwKTsKLSAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQoKSk7CiAg
ICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3RJbXBsICYmICFtX2xheWVyVHJlZUhvc3QpOyAvLyBt
YWtlIHN1cmUgc3RvcCgpIGdvdCBjYWxsZWQuCiB9CiAKIGJvb2wgQ0NTaW5nbGVUaHJlYWRQcm94
eTo6Y29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0
KQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKENDUHJveHk6Omlz
TWFpblRocmVhZCgpKTsKIAogICAgIGlmICghcmVjcmVhdGVDb250ZXh0SWZOZWVkZWQoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTAzLDI3ICsxMDQsMzIgQEAgYm9vbCBDQ1NpbmdsZVRo
cmVhZFByb3h5Ojpjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJl
Y3QmIHJlY3QKIAogR3JhcGhpY3NDb250ZXh0M0QqIENDU2luZ2xlVGhyZWFkUHJveHk6OmNvbnRl
eHQoKQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKENDUHJveHk6
OmlzTWFpblRocmVhZCgpKTsKICAgICBTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CiAgICAgcmV0
dXJuIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRleHQoKTsKIH0KIAogdm9pZCBDQ1NpbmdsZVRo
cmVhZFByb3h5OjpmaW5pc2hBbGxSZW5kZXJpbmcoKQogewotICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7Ci0gICAgU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOwotICAgIG1fbGF5ZXJUcmVlSG9z
dEltcGwtPmZpbmlzaEFsbFJlbmRlcmluZygpOworICAgIEFTU0VSVChDQ1Byb3h5Ojppc01haW5U
aHJlYWQoKSk7CisgICAgaWYgKCFyZWNyZWF0ZUNvbnRleHRJZk5lZWRlZCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICB7CisgICAgICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICAg
ICAgbV9sYXllclRyZWVIb3N0SW1wbC0+ZmluaXNoQWxsUmVuZGVyaW5nKCk7CisgICAgfQogfQog
CiBib29sIENDU2luZ2xlVGhyZWFkUHJveHk6OmlzU3RhcnRlZCgpIGNvbnN0CiB7Ci0gICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNNYWluVGhyZWFkKCkp
OwogICAgIHJldHVybiBtX2xheWVyVHJlZUhvc3RJbXBsOwogfQogCiBib29sIENDU2luZ2xlVGhy
ZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKCkKIHsKLSAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworICAgIEFTU0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQoKSk7CiAgICAgUmVm
UHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gbV9sYXllclRyZWVIb3N0LT5jcmVhdGVM
YXllclRyZWVIb3N0Q29udGV4dDNEKCk7CiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC0xMzEsMTQgKzEzNywxNyBAQCBib29sIENDU2luZ2xlVGhyZWFkUHJveHk6
OmluaXRpYWxpemVMYXllclJlbmRlcmVyKCkKIAogICAgIHsKICAgICAgICAgU2NvcGVkU2V0SW1w
bFRocmVhZCBpbXBsOwotICAgICAgICByZXR1cm4gbV9sYXllclRyZWVIb3N0SW1wbC0+aW5pdGlh
bGl6ZUxheWVyUmVuZGVyZXIoY29udGV4dCk7CisgICAgICAgIGJvb2wgb2sgPSBtX2xheWVyVHJl
ZUhvc3RJbXBsLT5pbml0aWFsaXplTGF5ZXJSZW5kZXJlcihjb250ZXh0KTsKKyAgICAgICAgaWYg
KG9rKQorICAgICAgICAgICAgbV9sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzRm9yTWFpblRocmVh
ZCA9IG1fbGF5ZXJUcmVlSG9zdEltcGwtPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKTsKKyAg
ICAgICAgcmV0dXJuIG9rOwogICAgIH0KIH0KIAogY29uc3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxp
dGllcyYgQ0NTaW5nbGVUaHJlYWRQcm94eTo6bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpIGNv
bnN0CiB7Ci0gICAgU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOwotICAgIHJldHVybiBtX2xheWVy
VHJlZUhvc3RJbXBsLT5sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCk7CisgICAgLy8gTm90ZTog
dGhpcyBnZXRzIGNhbGxlZCBkdXJpbmcgdGhlIGNvbW1pdCBieSB0aGUgImltcGwiIHRocmVhZAor
ICAgIHJldHVybiBtX2xheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXNGb3JNYWluVGhyZWFkOwogfQog
CiB2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6Omxvc2VDb21wb3NpdG9yQ29udGV4dChpbnQgbnVt
VGltZXMpCkBAIC0xNDksNyArMTU4LDcgQEAgdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpsb3Nl
Q29tcG9zaXRvckNvbnRleHQoaW50IG51bVRpbWVzKQogCiB2b2lkIENDU2luZ2xlVGhyZWFkUHJv
eHk6OnNldE5lZWRzQ29tbWl0KCkKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAg
IEFTU0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQoKSk7CiAgICAgLy8gQ29tbWl0IGltbWVkaWF0
ZWx5CiAgICAgewogICAgICAgICBTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CkBAIC0xNTcsMTEg
KzE2NiwxMiBAQCB2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0KCkKICAg
ICAgICAgbV9sYXllclRyZWVIb3N0LT5jb21taXRUbyhtX2xheWVyVHJlZUhvc3RJbXBsLmdldCgp
KTsKICAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+Y29tbWl0Q29tcGxldGUoKTsKICAgICB9
CisgICAgbV9sYXllclRyZWVIb3N0LT5jb21taXRDb21wbGV0ZSgpOwogfQogCiB2b2lkIENDU2lu
Z2xlVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCkKIHsKLSAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQoKSk7CiAj
aWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKICAgICBtX2xheWVyVHJlZUhvc3QtPnNjaGVk
dWxlQ29tcG9zaXRlKCk7CiAjZWxzZQpAQCAtMTgwLDcgKzE5MCw3IEBAIHZvaWQgQ0NTaW5nbGVU
aHJlYWRQcm94eTo6c2V0TmVlZHNSZWRyYXcoKQogdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpz
dG9wKCkKIHsKICAgICBUUkFDRV9FVkVOVCgiQ0NTaW5nbGVUaHJlYWRQcm94eTo6c3RvcCIsIHRo
aXMsIDApOwotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKENDUHJveHk6
OmlzTWFpblRocmVhZCgpKTsKICAgICB7CiAgICAgICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1w
bDsKICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5kZWxldGVDb250ZW50c1RleHR1cmVzKG1fbGF5
ZXJUcmVlSG9zdEltcGwtPmNvbnRleHQoKSk7CkBAIC0yMDYsNyArMjE2LDcgQEAgdm9pZCBDQ1Np
bmdsZVRocmVhZFByb3h5Ojpjb21wb3NpdGVJbW1lZGlhdGVseSgpCiAKIGJvb2wgQ0NTaW5nbGVU
aHJlYWRQcm94eTo6cmVjcmVhdGVDb250ZXh0SWZOZWVkZWQoKQogewotICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKICAgICBp
ZiAoIW1fZ3JhcGhpY3NDb250ZXh0TG9zdCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgUmVm
UHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0OwpAQCAtMjE4LDYgKzIyOCw3IEBAIGJvb2wg
Q0NTaW5nbGVUaHJlYWRQcm94eTo6cmVjcmVhdGVDb250ZXh0SWZOZWVkZWQoKQogICAgIGlmIChj
b250ZXh0KSB7CiAgICAgICAgIEFTU0VSVChjb250ZXh0LT5oYXNPbmVSZWYoKSk7CiAgICAgICAg
IGlmIChtX2xheWVyVHJlZUhvc3RJbXBsLT5pbml0aWFsaXplTGF5ZXJSZW5kZXJlcihjb250ZXh0
KSkgeworICAgICAgICAgICAgbV9sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzRm9yTWFpblRocmVh
ZCA9IG1fbGF5ZXJUcmVlSG9zdEltcGwtPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKTsKICAg
ICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQodHJ1
ZSk7CiAgICAgICAgICAgICBtX2dyYXBoaWNzQ29udGV4dExvc3QgPSBmYWxzZTsKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwpAQCAtMjQwLDYgKzI1MSw4IEBAIGJvb2wgQ0NTaW5nbGVUaHJlYWRQ
cm94eTo6cmVjcmVhdGVDb250ZXh0SWZOZWVkZWQoKQogCiB2b2lkIENDU2luZ2xlVGhyZWFkUHJv
eHk6OmNvbW1pdElmTmVlZGVkKCkKIHsKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNNYWluVGhyZWFk
KCkpOworCiAgICAgLy8gVXBkYXRlCiAgICAgbV9sYXllclRyZWVIb3N0LT51cGRhdGVMYXllcnMo
KTsKIApAQCAtMjUwLDYgKzI2Myw3IEBAIHZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tbWl0
SWZOZWVkZWQoKQogICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmNvbW1pdFRvKG1fbGF5ZXJUcmVl
SG9zdEltcGwuZ2V0KCkpOwogICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5jb21taXRDb21w
bGV0ZSgpOwogICAgIH0KKyAgICBtX2xheWVyVHJlZUhvc3QtPmNvbW1pdENvbXBsZXRlKCk7CiB9
CiAKIGJvb2wgQ0NTaW5nbGVUaHJlYWRQcm94eTo6ZG9Db21wb3NpdGUoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJl
YWRQcm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NTaW5nbGVUaHJlYWRQcm94eS5oCmluZGV4IGJiYmU1ZjU5MDc2MmJlMThhMjg3NGE1ODhlYzQz
NzBhNjU5N2Y5MDAuLmMxOGU3ZjM2NDkzOGQxOTM2NGMzMTEwZjY2ZTRiZDNmOTMxNzJjNTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
U2luZ2xlVGhyZWFkUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgKQEAgLTY5LDYgKzY5LDcgQEAgcHJp
dmF0ZToKIAogICAgIC8vIFVzZWQgb24gdGhlIENDVGhyZWFkLCBidXQgY2hlY2tlZCBvbiBtYWlu
IHRocmVhZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24vc2h1dGRvd24uCiAgICAgT3duUHRyPENDTGF5
ZXJUcmVlSG9zdEltcGw+IG1fbGF5ZXJUcmVlSG9zdEltcGw7CisgICAgTGF5ZXJSZW5kZXJlckNh
cGFiaWxpdGllcyBtX2xheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXNGb3JNYWluVGhyZWFkOwogCiAg
ICAgaW50IG1fbnVtRmFpbGVkUmVjcmVhdGVBdHRlbXB0czsKICAgICBib29sIG1fZ3JhcGhpY3ND
b250ZXh0TG9zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKaW5kZXggOWE4NGRhNmMwNTNh
MzQwMjllM2RhZDM3Yjc2YmI4MjQzNTAwN2Y3MS4uYTFlNzFkYWRlYjRkMTg5YTdmZDY3ZmU4Y2U5
M2YwZDI5ZjQ0NzBlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKQEAgLTMxLDYgKzMx
LDcgQEAKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlICJjYy9DQ01h
aW5UaHJlYWRUYXNrLmgiCiAjaW5jbHVkZSAiY2MvQ0NUaHJlYWRUYXNrLmgiCisjaW5jbHVkZSA8
d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAogdXNpbmcg
bmFtZXNwYWNlIFdURjsKQEAgLTQ4LDggKzQ5LDE0IEBAIFBhc3NPd25QdHI8Q0NQcm94eT4gQ0NU
aHJlYWRQcm94eTo6Y3JlYXRlKENDTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCkKIH0KIAog
Q0NUaHJlYWRQcm94eTo6Q0NUaHJlYWRQcm94eShDQ0xheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhv
c3QpCi0gICAgOiBtX2NvbW1pdFBlbmRpbmcoZmFsc2UpCisgICAgOiBtX2NvbW1pdFJlcXVlc3Rl
ZChmYWxzZSkKICAgICAsIG1fbGF5ZXJUcmVlSG9zdChsYXllclRyZWVIb3N0KQorICAgICwgbV9z
dGFydGVkKGZhbHNlKQorICAgICwgbV9sYXN0RXhlY3V0ZWRCZWdpbkZyYW1lQW5kQ29tbWl0U2Vx
dWVuY2VOdW1iZXIoLTEpCisgICAgLCBtX251bUJlZ2luRnJhbWVBbmRDb21taXRzSXNzdWVkT25D
Q1RocmVhZCgwKQorICAgICwgbV9iZWdpbkZyYW1lQW5kQ29tbWl0UGVuZGluZ09uQ0NUaHJlYWQo
ZmFsc2UpCisgICAgLCBtX2RyYXdUYXNrUG9zdGVkT25DQ1RocmVhZChmYWxzZSkKKyAgICAsIG1f
cmVkcmF3UmVxdWVzdGVkT25DQ1RocmVhZChmYWxzZSkKIHsKICAgICBUUkFDRV9FVkVOVCgiQ0NU
aHJlYWRQcm94eTo6Q0NUaHJlYWRQcm94eSIsIHRoaXMsIDApOwogICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CkBAIC02Niw4ICs3Myw3IEBAIENDVGhyZWFkUHJveHk6On5DQ1RocmVhZFByb3h5
KCkKIHsKICAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6fkNDVGhyZWFkUHJveHkiLCB0
aGlzLCAwKTsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVCghbV9sYXll
clRyZWVIb3N0SW1wbCk7IC8vIE1ha2Ugc3VyZSBzdG9wKCkgZ290IGNhbGxlZC4KLSAgICBBU1NF
UlQoIW1fbGF5ZXJUcmVlSG9zdCk7IC8vIE1ha2Ugc3VyZSBzdG9wKCkgZ290IGNhbGxlZC4KKyAg
ICBBU1NFUlQoIW1fc3RhcnRlZCk7CiAKICAgICBudW1Qcm94aWVzLS07CiAgICAgaWYgKCFudW1Q
cm94aWVzKSB7CkBAIC03OCw4ICs4NCw0NyBAQCBDQ1RocmVhZFByb3h5Ojp+Q0NUaHJlYWRQcm94
eSgpCiAKIGJvb2wgQ0NUaHJlYWRQcm94eTo6Y29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4
ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIHJldHVybiBmYWxzZTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VS
VChtX2xheWVyVHJlZUhvc3QpOworCisgICAgLy8gSWYgYSBjb21taXQgaXMgcGVuZGluZywgcGVy
Zm9ybSB0aGUgY29tbWl0IGZpcnN0LgorICAgIGlmIChtX2NvbW1pdFJlcXVlc3RlZCkgIHsKKyAg
ICAgICAgLy8gVGhpcyBiaXQgb2YgY29kZSBpcyB1Z2xpZXIgdGhhbiBpdCBzaG91bGQgYmUgYmVj
YXVzZSByZXR1cm5pbmcKKyAgICAgICAgLy8gcG9pbnRlcnMgdmlhIHRoZSBDQ1RocmVhZCB0YXNr
IG1vZGVsIGlzIHJlYWxseSBtZXNzeS4gRWZmZWN0aXZlbHksIHdlCisgICAgICAgIC8vIGFyZSBt
YWtpbmcgYSBibG9ja2luZyBjYWxsIHRvIGNyZWF0ZUJlZ2luRnJhbWVBbmRDb21taXRUYXNrT25D
Q1RocmVhZCwKKyAgICAgICAgLy8gYW5kIHRyeWluZyB0byBnZXQgdGhlIENDTWFpblRocmVhZDo6
VGFzayBpdCByZXR1cm5zIHNvIHdlIGNhbiBydW4gaXQuCisgICAgICAgIE93blB0cjxDQ01haW5U
aHJlYWQ6OlRhc2s+IGJlZ2luRnJhbWVBbmRDb21taXRUYXNrOworICAgICAgICB7CisgICAgICAg
ICAgICBDQ01haW5UaHJlYWQ6OlRhc2sqIHRhc2tQdHIgPSAwOworICAgICAgICAgICAgQ0NDb21w
bGV0aW9uRXZlbnQgY29tcGxldGlvbjsKKyAgICAgICAgICAgIGNjVGhyZWFkLT5wb3N0VGFzayhj
cmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6Om9idGFpbkJlZ2luRnJhbWVB
bmRDb21taXRUYXNrRnJvbUNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0
aW9uKSwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmdGFza1B0cikpKTsKKyAgICAgICAgICAgIGNv
bXBsZXRpb24ud2FpdCgpOworICAgICAgICAgICAgYmVnaW5GcmFtZUFuZENvbW1pdFRhc2sgPSBh
ZG9wdFB0cih0YXNrUHRyKTsKKyAgICAgICAgfQorCisgICAgICAgIGJlZ2luRnJhbWVBbmRDb21t
aXRUYXNrLT5wZXJmb3JtVGFzaygpOworICAgIH0KKworICAgIC8vIERyYXcgdXNpbmcgdGhlIG5l
dyB0cmVlIGFuZCByZWFkIGJhY2sgdGhlIHJlc3VsdHMuCisgICAgYm9vbCBzdWNjZXNzID0gZmFs
c2U7CisgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKKyAgICBjY1RocmVhZC0+cG9z
dFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5OjpkcmF3TGF5ZXJz
QW5kUmVhZGJhY2tPbkNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9u
KSwgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcygmc3VjY2VzcyksIEFsbG93Q3Jvc3NUaHJlYWRBY2Nl
c3MocGl4ZWxzKSwgcmVjdCkpOworICAgIGNvbXBsZXRpb24ud2FpdCgpOworICAgIHJldHVybiBz
dWNjZXNzOworfQorCit2b2lkIENDVGhyZWFkUHJveHk6OmRyYXdMYXllcnNBbmRSZWFkYmFja09u
Q0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24sIGJvb2wqIHN1Y2Nlc3MsIHZv
aWQqIHBpeGVscywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBBU1NFUlQoQ0NQcm94eTo6
aXNJbXBsVGhyZWFkKCkpOworICAgIGlmICghbV9sYXllclRyZWVIb3N0SW1wbCkgeworICAgICAg
ICAqc3VjY2VzcyA9IGZhbHNlOworICAgICAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBkcmF3TGF5ZXJzT25DQ1RocmVhZCgpOworICAgIG1fbGF5
ZXJUcmVlSG9zdEltcGwtPnJlYWRiYWNrKHBpeGVscywgcmVjdCk7CisgICAgKnN1Y2Nlc3MgPSBt
X2xheWVyVHJlZUhvc3RJbXBsLT5pc0NvbnRleHRMb3N0KCk7CisgICAgY29tcGxldGlvbi0+c2ln
bmFsKCk7CiB9CiAKIEdyYXBoaWNzQ29udGV4dDNEKiBDQ1RocmVhZFByb3h5Ojpjb250ZXh0KCkK
QEAgLTg5LDEyICsxMzQsMTggQEAgR3JhcGhpY3NDb250ZXh0M0QqIENDVGhyZWFkUHJveHk6OmNv
bnRleHQoKQogCiB2b2lkIENDVGhyZWFkUHJveHk6OmZpbmlzaEFsbFJlbmRlcmluZygpCiB7Ci0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVh
ZCgpKTsKKworICAgIC8vIE1ha2Ugc3VyZSBhbGwgR0wgZHJhd2luZyBpcyBmaW5pc2hlZCBvbiB0
aGUgaW1wbCB0aHJlYWQuCisgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKKyAgICBj
Y1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5
OjpmaW5pc2hBbGxSZW5kZXJpbmdPbkNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZj
b21wbGV0aW9uKSkpOworICAgIGNvbXBsZXRpb24ud2FpdCgpOwogfQogCiBib29sIENDVGhyZWFk
UHJveHk6OmlzU3RhcnRlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdElt
cGw7CisgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKKyAgICByZXR1cm4gbV9z
dGFydGVkOwogfQogCiBib29sIENDVGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVy
KCkKQEAgLTExMSw3ICsxNjIsNyBAQCBib29sIENDVGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXll
clJlbmRlcmVyKCkKICAgICAvLyBNYWtlIGEgYmxvY2tpbmcgY2FsbCB0byBpbml0aWFsaXplTGF5
ZXJSZW5kZXJlck9uQ0NUaHJlYWQuIFRoZSByZXN1bHRzIG9mIHRoYXQgY2FsbAogICAgIC8vIGFy
ZSBwdXNoZWQgaW50byB0aGUgaW5pdGlhbGl6ZVN1Y2NlZWRlZCBhbmQgY2FwYWJpbGl0aWVzIGxv
Y2FsIHZhcmlhYmxlcy4KICAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOwotICAgIGJv
b2wgaW5pdGlhbGl6ZVN1Y2NlZWRlZDsKKyAgICBib29sIGluaXRpYWxpemVTdWNjZWVkZWQgPSBm
YWxzZTsKICAgICBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGllczsKICAgICBj
Y1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5
Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlck9uQ0NUaHJlYWQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKGNvbnRleHRQdHIp
LCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9uKSwgQWxsb3dDcm9zc1RocmVhZEFj
Y2VzcygmaW5pdGlhbGl6ZVN1Y2NlZWRlZCksIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNhcGFi
aWxpdGllcykpKTsKQEAgLTEzNSw0MyArMTg2LDU3IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6bG9z
ZUNvbXBvc2l0b3JDb250ZXh0KGludCBudW1UaW1lcykKIHZvaWQgQ0NUaHJlYWRQcm94eTo6c2V0
TmVlZHNDb21taXQoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKG1f
Y29tbWl0UGVuZGluZykKKyAgICBpZiAobV9jb21taXRSZXF1ZXN0ZWQpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdCIsIHRo
aXMsIDApOwotICAgIG1fY29tbWl0UGVuZGluZyA9IHRydWU7Ci0gICAgY2NUaHJlYWQtPnBvc3RU
YXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21t
aXRPbkNDVGhyZWFkKSk7CisgICAgbV9jb21taXRSZXF1ZXN0ZWQgPSB0cnVlOworICAgIGNjVGhy
ZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OnVw
ZGF0ZVNjaGVkdWxlclN0YXRlT25DQ1RocmVhZCwgbV9jb21taXRSZXF1ZXN0ZWQsIHRydWUpKTsK
IH0KIAogdm9pZCBDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpCiB7CiAg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAobV9jb21taXRQZW5kaW5nKQorICAg
IGlmIChtX2NvbW1pdFJlcXVlc3RlZCkKICAgICAgICAgcmV0dXJuOworICAgIG1fY29tbWl0UmVx
dWVzdGVkID0gdHJ1ZTsKIAogICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpzZXROZWVk
c0NvbW1pdEFuZFJlZHJhdyIsIHRoaXMsIDApOwotICAgIG1fY29tbWl0UGVuZGluZyA9IHRydWU7
Ci0gICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJl
YWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhyZWFkKSk7CisgICAgY2NUaHJl
YWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6dXBk
YXRlU2NoZWR1bGVyU3RhdGVPbkNDVGhyZWFkLCBtX2NvbW1pdFJlcXVlc3RlZCwgdHJ1ZSkpOwog
fQogCiB2b2lkIENDVGhyZWFkUHJveHk6OnNldE5lZWRzUmVkcmF3KCkKIHsKICAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwotICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRh
c2sodGhpcywgJkNDVGhyZWFkUHJveHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCkpOworICAg
IGlmIChtX2NvbW1pdFJlcXVlc3RlZCkgLy8gSW1wbGllcyB0aGF0IGEgY29tbWl0IGlzIGluIGZs
aWdodC4KKyAgICAgICAgcmV0dXJuOworICAgIC8vIFVubGlrZSBzZXROZWVkc0NvbW1pdCB0aGF0
IHRyYWNrcyB3aGV0aGVyIGEgY29tbWl0IG1lc3NhZ2UgaGFzIGJlZW4gc2VudCwKKyAgICAvLyBz
ZXROZWVkc1JlZHJhdyBhbHdheXMgc2VuZHMgYSBtZXNzYWdlIHRvIHRoZSBjb21wb3NpdG9yIHRo
cmVhZC4gVGhpcyBpcworICAgIC8vIGJlY2F1c2UgdGhlIGNvbXBvc2l0b3IgdGhyZWFkIGNhbiBk
cmF3IHdpdGhvdXQgdGVsbGluZyB0aGUgbWFpbgorICAgIC8vIHRocmVhZC4gVGhpcyBzaG91bGQg
bm90IGJlIG11Y2ggb2YgYSBwcm9ibGVtIGJlY2F1c2UgY2FsbHMgdG8KKyAgICAvLyBzZXROZWVk
c1JlZHJhdyBtZXNzYWdlcyBhcmUgdW5jb21tb24gKG9ubHkgdHJpZ2dlcmVkIGJ5IFdNX1BBSU5U
L2V0YyksCisgICAgLy8gY29tcGFyZWQgdG8gc2V0TmVlZHNDb21taXRBbmRSZWRyYXcgbWVzc2Fn
ZXMuCisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OnNldE5lZWRzUmVkcmF3IiwgdGhp
cywgMCk7CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAm
Q0NUaHJlYWRQcm94eTo6dXBkYXRlU2NoZWR1bGVyU3RhdGVPbkNDVGhyZWFkLCBmYWxzZSwgdHJ1
ZSkpOwogfQogCiB2b2lkIENDVGhyZWFkUHJveHk6OnN0YXJ0KCkKIHsKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwogICAgIC8vIENyZWF0ZSBMYXllclRyZWVIb3N0SW1wbC4KICAgICBDQ0Nv
bXBsZXRpb25FdmVudCBjb21wbGV0aW9uOwogICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVD
Q1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OmluaXRpYWxpemVJbXBsT25DQ1RocmVh
ZCwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29tcGxldGlvbikpKTsKICAgICBjb21wbGV0aW9u
LndhaXQoKTsKKworICAgIG1fc3RhcnRlZCA9IHRydWU7CiB9CiAKIHZvaWQgQ0NUaHJlYWRQcm94
eTo6c3RvcCgpCiB7CiAgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OnN0b3AiLCB0aGlz
LCAwKTsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChtX3N0YXJ0ZWQp
OworCiAgICAgLy8gU3luY2hyb25vdXNseSBkZWxldGVzIHRoZSBpbXBsLgogICAgIENDQ29tcGxl
dGlvbkV2ZW50IGNvbXBsZXRpb247CiAgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhy
ZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6bGF5ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJl
YWQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pKSk7CkBAIC0xNzksODIgKzI0
NCwxNjcgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpzdG9wKCkKIAogICAgIEFTU0VSVCghbV9sYXll
clRyZWVIb3N0SW1wbCk7IC8vIHZlcmlmeSB0aGF0IHRoZSBpbXBsIGRlbGV0ZWQuCiAgICAgbV9s
YXllclRyZWVIb3N0ID0gMDsKKyAgICBtX3N0YXJ0ZWQgPSBmYWxzZTsKIH0KIAotdm9pZCBDQ1Ro
cmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZCgpCit2b2lkIENDVGhyZWFk
UHJveHk6OmZpbmlzaEFsbFJlbmRlcmluZ09uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNv
bXBsZXRpb24pCiB7Ci0gICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVB
bmRDb21taXRPbkNDVGhyZWFkIiwgdGhpcywgMCk7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFk
UHJveHk6OmZpbmlzaEFsbFJlbmRlcmluZ09uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICBBU1NF
UlQoaXNJbXBsVGhyZWFkKCkpOworICAgIEFTU0VSVCghbV9iZWdpbkZyYW1lQW5kQ29tbWl0UGVu
ZGluZ09uQ0NUaHJlYWQpOworICAgIGlmIChtX3JlZHJhd1JlcXVlc3RlZE9uQ0NUaHJlYWQpIHsK
KyAgICAgICAgZHJhd0xheWVyc09uQ0NUaHJlYWQoKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0
SW1wbC0+cHJlc2VudCgpOworICAgICAgICBtX3JlZHJhd1JlcXVlc3RlZE9uQ0NUaHJlYWQgPSBm
YWxzZTsKKyAgICB9CisgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+ZmluaXNoQWxsUmVuZGVyaW5n
KCk7CisgICAgY29tcGxldGlvbi0+c2lnbmFsKCk7Cit9CisKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6
b2J0YWluQmVnaW5GcmFtZUFuZENvbW1pdFRhc2tGcm9tQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZl
bnQqIGNvbXBsZXRpb24sIENDTWFpblRocmVhZDo6VGFzayoqIHRhc2tQdHIpCit7CisgICAgT3du
UHRyPENDTWFpblRocmVhZDo6VGFzaz4gdGFzayA9IGNyZWF0ZUJlZ2luRnJhbWVBbmRDb21taXRU
YXNrT25DQ1RocmVhZCgpOworICAgICp0YXNrUHRyID0gdGFzay5sZWFrUHRyKCk7CisgICAgY29t
cGxldGlvbi0+c2lnbmFsKCk7Cit9CisKK1Bhc3NPd25QdHI8Q0NNYWluVGhyZWFkOjpUYXNrPiBD
Q1RocmVhZFByb3h5OjpjcmVhdGVCZWdpbkZyYW1lQW5kQ29tbWl0VGFza09uQ0NUaHJlYWQoKQor
eworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpjcmVhdGVCZWdpbkZyYW1lQW5kQ29t
bWl0VGFza09uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKICAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkp
OwotICAgIC8vIFRFTVAgSEFDSyBzbyB3ZSBjYW4gZXhlcmNpc2UgdGhpcyBjb2RlIGluIHVuaXQg
dGVzdHMuCi0gICAgQ0NNYWluVGhyZWFkOjpwb3N0VGFzayhjcmVhdGVNYWluVGhyZWFkVGFzayh0
aGlzLCAmQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUFuZENvbW1pdCwgMC4wKSk7CisgICAgZG91
YmxlIGZyYW1lQmVnaW5UaW1lID0gY3VycmVudFRpbWUoKTsKKyAgICBtX2JlZ2luRnJhbWVBbmRD
b21taXRQZW5kaW5nT25DQ1RocmVhZCA9IHRydWU7CisKKyAgICAvLyBOT1RFLCBpdCBpcyBwb3Nz
aWJsZSB0byByZWNlaWV2ZSBhIHJlcXVlc3QgZm9yIGEKKyAgICAvLyBiZWdpbkZyYW1lQW5kQ29t
bWl0T25DQ1RocmVhZCBmcm9tIGZpbmlzaEFsbFJlbmRlcmluZyB3aGlsZSBhCisgICAgLy8gYmVn
aW5GcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQgaXMgZW5xdWV1ZWQuIFNpbmNlIENDTWFpblRocmVh
ZCBkb2Vzbid0CisgICAgLy8gcHJvdmlkZSBhIHRocmVhZHNhZmUgd2F5IHRvIGNhbmNlbCB0YXNr
cywgaXQgaXMgaW1wb3J0YW50IHRoYXQKKyAgICAvLyBiZWdpbkZyYW1lQW5kQ29tbWl0IGJlIHN0
cnVjdHVyZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGl0IG1heSBnZXQgY2FsbGVkIGF0CisgICAgLy8g
YSBwb2ludCB0aGF0IGl0IHNob3VsZG4ndC4gV2UgZG8gdGhpcyBieSBhc3NpZ25pbmcgYSBzZXF1
ZW5jZSBudW1iZXIgdG8KKyAgICAvLyBldmVyeSBuZXcgYmVnaW5GcmFtZUFuZENvbW1pdCB0YXNr
LiBUaGVuLCBiZWdpbkZyYW1lQW5kQ29tbWl0IHRyYWNrcyB0aGUKKyAgICAvLyBsYXN0IGV4ZWN1
dGVkIHNlcXVlbmNlIG51bWJlciwgZHJvcHBpbmcgYmVnaW5GcmFtZUFuZENvbW1pdCB3aXRoIHNl
cXVlbmNlCisgICAgLy8gbnVtYmVycyBiZWxvdyB0aGUgbGFzdCBleGVjdXRlZCBvbmUuCisgICAg
aW50IHRoaXNUYXNrU2VxdWVuY2VOdW1iZXIgPSBtX251bUJlZ2luRnJhbWVBbmRDb21taXRzSXNz
dWVkT25DQ1RocmVhZDsKKyAgICBtX251bUJlZ2luRnJhbWVBbmRDb21taXRzSXNzdWVkT25DQ1Ro
cmVhZCsrOworICAgIHJldHVybiBjcmVhdGVNYWluVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQ
cm94eTo6YmVnaW5GcmFtZUFuZENvbW1pdCwgdGhpc1Rhc2tTZXF1ZW5jZU51bWJlciwgZnJhbWVC
ZWdpblRpbWUpOwogfQogCi12b2lkIENDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVBbmRDb21taXQo
ZG91YmxlIGZyYW1lQmVnaW5UaW1lKQordm9pZCBDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQW5k
Q29tbWl0KGludCBzZXF1ZW5jZU51bWJlciwgZG91YmxlIGZyYW1lQmVnaW5UaW1lKQogeworICAg
IFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0IiwgdGhpcywg
MCk7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBpZiAoIW1fbGF5ZXJUcmVlSG9z
dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OnJl
cXVlc3RGcmFtZUFuZENvbW1pdCIsIHRoaXMsIDApOworICAgIC8vIERyb3AgYmVnaW5GcmFtZUFu
ZENvbW1pdCBjYWxscyB0aGF0IG9jY3VyIG91dCBvZiBzZXF1ZW5jZS4gU2VlIGNyZWF0ZUJlZ2lu
RnJhbWVBbmRDb21taXRUYXNrT25DQ1RocmVhZCBmb3IKKyAgICAvLyBhbiBleHBsYW5hdGlvbiBv
ZiBob3cgb3V0LW9mLXNlcXVlbmNlIGJlZ2luRnJhbWVBbmRDb21taXQgdGFza3MgY2FuIG9jY3Vy
LgorICAgIGlmIChzZXF1ZW5jZU51bWJlciA8IG1fbGFzdEV4ZWN1dGVkQmVnaW5GcmFtZUFuZENv
bW1pdFNlcXVlbmNlTnVtYmVyKSB7CisgICAgICAgIFRSQUNFX0VWRU5UKCJFYXJseU91dF9TdGFs
ZUJlZ2luRnJhbWVBbmRDb21taXQiLCB0aGlzLCAwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBtX2xhc3RFeGVjdXRlZEJlZ2luRnJhbWVBbmRDb21taXRTZXF1ZW5jZU51bWJlciA9IHNl
cXVlbmNlTnVtYmVyOworCisgICAgQVNTRVJUKG1fY29tbWl0UmVxdWVzdGVkKTsKKworICAgIC8v
IEZJWE1FOiByZWNyZWF0ZSB0aGUgY29udGV4dCBpZiBpdCB3YXMgcmVxdWVzdGVkIGJ5IHRoZSBp
bXBsIHRocmVhZAogICAgIHsKICAgICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6
YW5pbWF0ZUFuZExheW91dCIsIHRoaXMsIDApOwogICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmFu
aW1hdGVBbmRMYXlvdXQoZnJhbWVCZWdpblRpbWUpOwogICAgIH0KIAotICAgIG1fY29tbWl0UGVu
ZGluZyA9IGZhbHNlOworICAgIEFTU0VSVChtX2xhc3RFeGVjdXRlZEJlZ2luRnJhbWVBbmRDb21t
aXRTZXF1ZW5jZU51bWJlciA9PSBzZXF1ZW5jZU51bWJlcik7CiAKLSAgICAvLyBCbG9ja2luZyBj
YWxsIHRvIENDVGhyZWFkUHJveHk6OnBlcmZvcm1Db21taXQKLSAgICBDQ0NvbXBsZXRpb25FdmVu
dCBjb21wbGV0aW9uOwotICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2so
dGhpcywgJkNDVGhyZWFkUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQsIEFsbG93Q3Jvc3NUaHJlYWRB
Y2Nlc3MoJmNvbXBsZXRpb24pKSk7Ci0gICAgY29tcGxldGlvbi53YWl0KCk7CisgICAgLy8gQ2xl
YXIgdGhlIGNvbW1pdCBmbGFnIGFmdGVyIGFuaW1hdGVBbmRMYXlvdXQgaGVyZSAtLS0gb2JqZWN0
cyB0aGF0IG9ubHkKKyAgICAvLyBsYXlvdXQgd2hlbiBwYWludGVkIHdpbGwgdHJpZ2dlciBhbm90
aGVyIHNldE5lZWRzQ29tbWl0IGluc2lkZQorICAgIC8vIHVwZGF0ZUxheWVycy4KKyAgICBtX2Nv
bW1pdFJlcXVlc3RlZCA9IGZhbHNlOworCisgICAgbV9sYXllclRyZWVIb3N0LT51cGRhdGVMYXll
cnMoKTsKKworICAgIHsKKyAgICAgICAgLy8gQmxvY2tpbmcgY2FsbCB0byBDQ1RocmVhZFByb3h5
Ojpjb21taXRPbkNDVGhyZWFkCisgICAgICAgIFRSQUNFX0VWRU5UKCJjb21taXQiLCB0aGlzLCAw
KTsKKyAgICAgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKKyAgICAgICAgY2NUaHJl
YWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6Y29t
bWl0T25DQ1RocmVhZCwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29tcGxldGlvbikpKTsKKyAg
ICAgICAgY29tcGxldGlvbi53YWl0KCk7CisgICAgfQorCisgICAgbV9sYXllclRyZWVIb3N0LT5j
b21taXRDb21wbGV0ZSgpOworCisgICAgQVNTRVJUKG1fbGFzdEV4ZWN1dGVkQmVnaW5GcmFtZUFu
ZENvbW1pdFNlcXVlbmNlTnVtYmVyID09IHNlcXVlbmNlTnVtYmVyKTsKIH0KIAogdm9pZCBDQ1Ro
cmVhZFByb3h5Ojpjb21taXRPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9u
KQogeworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0
T25DQ1RocmVhZCIsIHRoaXMsIDApOwogICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7Ci0gICAg
VFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsK
LSAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5iZWdpbkNvbW1pdCgpOwotICAgIHsKLSAgICAgICAg
VFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0IiwgdGhpcywgMCk7Ci0gICAgICAg
IG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0VG8obV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSk7Cisg
ICAgQVNTRVJUKG1fYmVnaW5GcmFtZUFuZENvbW1pdFBlbmRpbmdPbkNDVGhyZWFkKTsKKyAgICBt
X2JlZ2luRnJhbWVBbmRDb21taXRQZW5kaW5nT25DQ1RocmVhZCA9IGZhbHNlOworICAgIGlmICgh
bV9sYXllclRyZWVIb3N0SW1wbCkgeworICAgICAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKKyAg
ICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5iZWdpbkNvbW1p
dCgpOworICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0VG8obV9sYXllclRyZWVIb3N0SW1wbC5n
ZXQoKSk7CisgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+Y29tbWl0Q29tcGxldGUoKTsKKwogICAg
IGNvbXBsZXRpb24tPnNpZ25hbCgpOwogCi0gICAgbV9sYXllclRyZWVIb3N0SW1wbC0+Y29tbWl0
Q29tcGxldGUoKTsKLSAgICBzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQoKTsKKyAgICBpZiAobV9y
ZWRyYXdSZXF1ZXN0ZWRPbkNDVGhyZWFkKQorICAgICAgICBzY2hlZHVsZURyYXdUYXNrT25DQ1Ro
cmVhZCgpOwogfQogCi12b2lkIENDVGhyZWFkUHJveHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkKCkK
K3ZvaWQgQ0NUaHJlYWRQcm94eTo6c2NoZWR1bGVEcmF3VGFza09uQ0NUaHJlYWQoKQogewotICAg
IFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpkcmF3TGF5ZXJzT25DQ1RocmVhZCIsIHRoaXMs
IDApOwogICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7Ci0gICAgaWYgKG1fbGF5ZXJUcmVlSG9z
dEltcGwpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmRyYXdMYXllcnMoKTsKKyAgICBp
ZiAobV9kcmF3VGFza1Bvc3RlZE9uQ0NUaHJlYWQpCisgICAgICAgIHJldHVybjsKKyAgICBUUkFD
RV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6c2NoZWR1bGVEcmF3VGFza09uQ0NUaHJlYWQiLCB0aGlz
LCAwKTsKKyAgICBBU1NFUlQobV9sYXllclRyZWVIb3N0SW1wbCk7CisgICAgbV9kcmF3VGFza1Bv
c3RlZE9uQ0NUaHJlYWQgPSB0cnVlOworICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1Ro
cmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OmRyYXdMYXllcnNBbmRQcmVzZW50T25DQ1Ro
cmVhZCkpOwogfQogCi12b2lkIENDVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0T25DQ1RocmVh
ZCgpCit2b2lkIENDVGhyZWFkUHJveHk6OmRyYXdMYXllcnNBbmRQcmVzZW50T25DQ1RocmVhZCgp
CiB7Ci0gICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0T25DQ1Ro
cmVhZCIsIHRoaXMsIDApOworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpkcmF3TGF5
ZXJzT25DQ1RocmVhZCIsIHRoaXMsIDApOwogICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7Ci0g
ICAgQVNTRVJUKG1fbGF5ZXJUcmVlSG9zdEltcGwpOwotICAgIC8vIEZJWE1FOiBOb3QgeWV0IGlt
cGxlbWVudGVkLCBzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3
NDE3Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgaWYgKCFtX2xheWVyVHJlZUhvc3RJ
bXBsKQorICAgICAgICByZXR1cm47CisKKyAgICBkcmF3TGF5ZXJzT25DQ1RocmVhZCgpOworICAg
IG1fbGF5ZXJUcmVlSG9zdEltcGwtPnByZXNlbnQoKTsKKyAgICBtX3JlZHJhd1JlcXVlc3RlZE9u
Q0NUaHJlYWQgPSBmYWxzZTsKKyAgICBtX2RyYXdUYXNrUG9zdGVkT25DQ1RocmVhZCA9IGZhbHNl
OwogfQogCi12b2lkIENDVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1Ro
cmVhZCgpCit2b2lkIENDVGhyZWFkUHJveHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkKCkKIHsKLSAg
ICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXdPbkND
VGhyZWFkIiwgdGhpcywgMCk7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OmRyYXdM
YXllcnNPbkNDVGhyZWFkIiwgdGhpcywgMCk7CiAgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsK
ICAgICBBU1NFUlQobV9sYXllclRyZWVIb3N0SW1wbCk7Ci0gICAgLy8gVEVNUCBIQUNLIHNvIHdl
IGNhbiBleGVyY2lzZSB0aGlzIGNvZGUgaW4gdW5pdCB0ZXN0cy4KLSAgICBDQ01haW5UaHJlYWQ6
OnBvc3RUYXNrKGNyZWF0ZU1haW5UaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5OjpiZWdp
bkZyYW1lQW5kQ29tbWl0LCAwLjApKTsKKworICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmRyYXdM
YXllcnMoKTsKKyAgICBBU1NFUlQoIW1fbGF5ZXJUcmVlSG9zdEltcGwtPmlzQ29udGV4dExvc3Qo
KSk7CiB9CiAKLXZvaWQgQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKCkK
K3ZvaWQgQ0NUaHJlYWRQcm94eTo6dXBkYXRlU2NoZWR1bGVyU3RhdGVPbkNDVGhyZWFkKGJvb2wg
Y29tbWl0UmVxdWVzdGVkLCBib29sIHJlZHJhd1JlcXVlc3RlZCkKIHsKLSAgICBUUkFDRV9FVkVO
VCgiQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkIiwgdGhpcywgMCk7Ci0g
ICAgLy8gVEVNUCBIQUNLIHNvIHdlIGNhbiBleGVyY2lzZSB0aGlzIGNvZGUgaW4gdW5pdCB0ZXN0
cy4KLSAgICBkcmF3TGF5ZXJzT25DQ1RocmVhZCgpOworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVh
ZFByb3h5Ojp1cGRhdGVTY2hlZHVsZXJTdGF0ZU9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICBB
U1NFUlQoaXNJbXBsVGhyZWFkKCkpOworICAgIEFTU0VSVChtX2xheWVyVHJlZUhvc3RJbXBsKTsK
KworICAgIC8vIEZJWE1FOiB1c2UgQ0NTY2hlZHVsZXIgdG8gZGVjaWRlIHdoZW4gdG8gbWFuYWdl
IHRoZSBjb252ZXJzaW9uIG9mIHRoaXMKKyAgICAvLyBjb21taXQgcmVxdWVzdCBpbnRvIGFuIGFj
dHVhbCBjcmVhdGVCZWdpbkZyYW1lQW5kQ29tbWl0VGFza09uQ0NUaHJlYWQgY2FsbC4KKyAgICBt
X3JlZHJhd1JlcXVlc3RlZE9uQ0NUaHJlYWQgfD0gcmVkcmF3UmVxdWVzdGVkOworICAgIGlmICgh
bV9iZWdpbkZyYW1lQW5kQ29tbWl0UGVuZGluZ09uQ0NUaHJlYWQpIHsKKyAgICAgICAgQ0NNYWlu
VGhyZWFkOjpwb3N0VGFzayhjcmVhdGVCZWdpbkZyYW1lQW5kQ29tbWl0VGFza09uQ0NUaHJlYWQo
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBJZiBubyBjb21taXQgaXMgcGVu
ZGluZywgYnV0IGEgcmVkcmF3IGlzIHJlcXVlc3RlZCwgdGhlbiBwb3N0IGEgcmVkcmF3IHJpZ2h0
IGF3YXkKKyAgICBpZiAobV9yZWRyYXdSZXF1ZXN0ZWRPbkNDVGhyZWFkKQorICAgICAgICBzY2hl
ZHVsZURyYXdUYXNrT25DQ1RocmVhZCgpOwogfQogCiB2b2lkIENDVGhyZWFkUHJveHk6OmluaXRp
YWxpemVJbXBsT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhy
ZWFkUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGhyZWFkUHJveHkuaAppbmRleCAyNDY3NzI0MGNhYWE2OTEyNjc2ZDdlZGZlMGZhYjJjYzIx
MjYyZWMyLi5kM2I0ODdmZWM0MGQ0MDE1OTA3YTlmODA5NmNkOWRiY2UyZDFiMTkyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVh
ZFByb3h5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaHJlYWRQcm94eS5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJjYy9DQ0Nv
bXBsZXRpb25FdmVudC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKKyNp
bmNsdWRlICJjYy9DQ01haW5UaHJlYWQuaCIKICNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCiAjaW5j
bHVkZSA8d3RmL093blB0ci5oPgogCkBAIC01OCwyOCArNTksMzYgQEAgcHJpdmF0ZToKICAgICBl
eHBsaWNpdCBDQ1RocmVhZFByb3h5KENDTGF5ZXJUcmVlSG9zdCopOwogCiAgICAgLy8gQ2FsbGVk
IG9uIENDTWFpblRocmVhZAotICAgIHZvaWQgYmVnaW5GcmFtZUFuZENvbW1pdChkb3VibGUgZnJh
bWVCZWdpblRpbWUpOworICAgIHZvaWQgYmVnaW5GcmFtZUFuZENvbW1pdChpbnQgc2VxdWVuY2VO
dW1iZXIsIGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CiAKICAgICAvLyBDYWxsZWQgb24gQ0NUaHJl
YWQKLSAgICB2b2lkIGJlZ2luRnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKCk7CisgICAgUGFzc093
blB0cjxDQ01haW5UaHJlYWQ6OlRhc2s+IGNyZWF0ZUJlZ2luRnJhbWVBbmRDb21taXRUYXNrT25D
Q1RocmVhZCgpOworICAgIHZvaWQgb2J0YWluQmVnaW5GcmFtZUFuZENvbW1pdFRhc2tGcm9tQ0NU
aHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqLCBDQ01haW5UaHJlYWQ6OlRhc2sqKik7CiAgICAgdm9p
ZCBjb21taXRPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50Kik7CisgICAgdm9pZCBkcmF3TGF5
ZXJzQW5kUHJlc2VudE9uQ0NUaHJlYWQoKTsKICAgICB2b2lkIGRyYXdMYXllcnNPbkNDVGhyZWFk
KCk7CisgICAgdm9pZCBkcmF3TGF5ZXJzQW5kUmVhZGJhY2tPbkNDVGhyZWFkKENDQ29tcGxldGlv
bkV2ZW50KiwgYm9vbCogc3VjY2Vzcywgdm9pZCogcGl4ZWxzLCBjb25zdCBJbnRSZWN0Jik7Cisg
ICAgdm9pZCBmaW5pc2hBbGxSZW5kZXJpbmdPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50Kik7
CiAgICAgdm9pZCBpbml0aWFsaXplSW1wbE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsK
ICAgICB2b2lkIGluaXRpYWxpemVMYXllclJlbmRlcmVyT25DQ1RocmVhZChHcmFwaGljc0NvbnRl
eHQzRCosIENDQ29tcGxldGlvbkV2ZW50KiwgYm9vbCogaW5pdGlhbGl6ZVN1Y2NlZWRlZCwgTGF5
ZXJSZW5kZXJlckNhcGFiaWxpdGllcyopOwogICAgIHZvaWQgc2V0TmVlZHNDb21taXRPbkNDVGhy
ZWFkKCk7Ci0gICAgdm9pZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQoKTsKLSAg
ICB2b2lkIHNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCgpOworICAgIHZvaWQgdXBkYXRlU2NoZWR1
bGVyU3RhdGVPbkNDVGhyZWFkKGJvb2wgY29tbWl0UmVxdWVzdGVkLCBib29sIHJlZHJhd1JlcXVl
c3RlZCk7CiAgICAgdm9pZCBsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZChDQ0NvbXBsZXRp
b25FdmVudCopOwotCi0gICAgLy8gVXNlZCBvbiBtYWluLXRocmVhZCBvbmx5LgotICAgIGJvb2wg
bV9jb21taXRQZW5kaW5nOworICAgIHZvaWQgc2NoZWR1bGVEcmF3VGFza09uQ0NUaHJlYWQoKTsK
IAogICAgIC8vIEFjY2Vzc2VkIG9uIG1haW4gdGhyZWFkIG9ubHkuCisgICAgYm9vbCBtX2NvbW1p
dFJlcXVlc3RlZDsKICAgICBDQ0xheWVyVHJlZUhvc3QqIG1fbGF5ZXJUcmVlSG9zdDsKICAgICBM
YXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzIG1fbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllc01haW5U
aHJlYWRDb3B5OworICAgIGJvb2wgbV9zdGFydGVkOworICAgIGludCBtX2xhc3RFeGVjdXRlZEJl
Z2luRnJhbWVBbmRDb21taXRTZXF1ZW5jZU51bWJlcjsKIAotICAgIC8vIFVzZWQgb24gdGhlIEND
VGhyZWFkLCBidXQgY2hlY2tlZCBvbiBtYWluIHRocmVhZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24v
c2h1dGRvd24uCisgICAgLy8gVXNlZCBvbiB0aGUgQ0NUaHJlYWQgb25seQogICAgIE93blB0cjxD
Q0xheWVyVHJlZUhvc3RJbXBsPiBtX2xheWVyVHJlZUhvc3RJbXBsOworICAgIGludCBtX251bUJl
Z2luRnJhbWVBbmRDb21taXRzSXNzdWVkT25DQ1RocmVhZDsKKyAgICBib29sIG1fYmVnaW5GcmFt
ZUFuZENvbW1pdFBlbmRpbmdPbkNDVGhyZWFkOworICAgIGJvb2wgbV9kcmF3VGFza1Bvc3RlZE9u
Q0NUaHJlYWQ7CisgICAgYm9vbCBtX3JlZHJhd1JlcXVlc3RlZE9uQ0NUaHJlYWQ7CiB9OwogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGY5Y2RjYTk3YWFmMjcxYWEwNjczNmEzNWFl
MjJiOGM3YjJhZmUxZDkuLjAxNjc3YTU0ZmVkYmNkYzdhNmIzMDg0YmVlZDRmOTAxMmMyNWExYjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDktMTUg
IE5hdCBEdWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTWFr
ZSBDQ1RocmVhZFByb3h5IGRyYXcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTY3NDE3CisKKyAgICAgICAgRGlzYWJsZSBDQ0xheWVyVHJlZUhvc3RUZXN0
IHRlbXBvcmFyaWx5LiBXaWxsIHJlLWVuYWJsZQorICAgICAgICB3aXRoIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzQxOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHA6
CisKIDIwMTEtMDktMTYgIE5hdCBEdWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFtjaHJvbWl1bV0gQ3JlYXRlIFdlYkdMIGxheWVyIGZvciBncmFwaGljcyBjb250ZXh0cyBvbiBk
ZW1hbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRy
ZWVIb3N0VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVl
SG9zdFRlc3QuY3BwCmluZGV4IGZmNGZmYmU2NTE4NDRmNWNhNWYyOTcxODE0ZmFjNjU5Mjc4YTMw
MWQuLjMzNDA1MGRiNWQ5NmNmN2YyM2Q1MmUyYmU4ODZlNDE2MzM2YjI3MjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcApA
QCAtMTcwLDYgKzE3MCwxMCBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAorI2lmICFVU0UoVEhS
RUFERURfQ09NUE9TSVRJTkcpCisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRlKCkg
eyB9CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBleHBsaWNpdCBNb2NrTGF5ZXJUcmVlSG9zdENs
aWVudChUZXN0SG9va3MqIHRlc3RIb29rcykgOiBtX3Rlc3RIb29rcyh0ZXN0SG9va3MpIHsgfQog
CkBAIC0yMDgsNyArMjEyLDE0IEBAIHByb3RlY3RlZDoKICAgICAgICAgOiBtX2JlZ2lubmluZyhm
YWxzZSkKICAgICAgICAgLCBtX2VuZFdoZW5CZWdpblJldHVybnMoZmFsc2UpCiAgICAgICAgICwg
bV9ydW5uaW5nKGZhbHNlKQotICAgICAgICAsIG1fdGltZWRPdXQoZmFsc2UpIHsgfQorICAgICAg
ICAsIG1fdGltZWRPdXQoZmFsc2UpCisgICAgeworI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElO
RykKKyAgICAgICAgbV9zZXR0aW5ncy5lbmFibGVDb21wb3NpdG9yVGhyZWFkID0gdHJ1ZTsKKyNl
bHNlCisgICAgICAgIG1fc2V0dGluZ3MuZW5hYmxlQ29tcG9zaXRvclRocmVhZCA9IGZhbHNlOwor
I2VuZGlmCisgICAgfQogCiAgICAgdm9pZCBkb0JlZ2luVGVzdCgpOwogCkBAIC0yNzAsNiArMjgx
LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICB0ZXN0LT5lbmRUZXN0KCk7CiAgICAgfQogCisgICAg
Q0NTZXR0aW5ncyBtX3NldHRpbmdzOwogICAgIE93blB0cjxNb2NrTGF5ZXJUcmVlSG9zdENsaWVu
dD4gbV9jbGllbnQ7CiAgICAgUmVmUHRyPENDTGF5ZXJUcmVlSG9zdD4gbV9sYXllclRyZWVIb3N0
OwogCkBAIC0yODcsMTAgKzI5OSw4IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0VGVzdDo6ZG9CZWdp
blRlc3QoKQogICAgIG1fcnVubmluZyA9IHRydWU7CiAgICAgbV9jbGllbnQgPSBNb2NrTGF5ZXJU
cmVlSG9zdENsaWVudDo6Y3JlYXRlKHRoaXMpOwogCi0gICAgQ0NTZXR0aW5ncyBzZXR0aW5nczsK
LSAgICBzZXR0aW5ncy5lbmFibGVDb21wb3NpdG9yVGhyZWFkID0gdHJ1ZTsKICAgICBSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gcm9vdExheWVyOwotICAgIG1fbGF5ZXJUcmVlSG9zdCA9IE1vY2tMYXll
clRyZWVIb3N0OjpjcmVhdGUodGhpcywgbV9jbGllbnQuZ2V0KCksIHJvb3RMYXllciwgc2V0dGlu
Z3MpOworICAgIG1fbGF5ZXJUcmVlSG9zdCA9IE1vY2tMYXllclRyZWVIb3N0OjpjcmVhdGUodGhp
cywgbV9jbGllbnQuZ2V0KCksIHJvb3RMYXllciwgbV9zZXR0aW5ncyk7CiAgICAgQVNTRVJUKG1f
bGF5ZXJUcmVlSG9zdCk7CiAKICAgICBtX2JlZ2lubmluZyA9IHRydWU7CkBAIC01NDUsOSArNTU1
LDEwIEBAIHByaXZhdGU6CiB9OwogVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc1Jl
ZHJhdywgcnVuKQogeworICAgIENDU2V0dGluZ3Mgc2V0aW5nczsKICAgICBydW5UZXN0KCk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlCiAKLSNlbmRpZiAvLyBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcp
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJlZVN5
bmNocm9uaXplclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlU3lu
Y2hyb25pemVyVGVzdC5jcHAKaW5kZXggOGFkZjQ3Njk5ZDQ4NzBkZDU0OTdhODE1MmEzZDRlYjBj
Y2ViM2Q1Yi4uYzM3ZGU3MzYyNzY2OWY5MGU2ZmM3MWNlY2Q2NjIyOTY5YmVjNTMyYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlU3luY2hyb25pemVyVGVzdC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlU3luY2hyb25pemVyVGVz
dC5jcHAKQEAgLTI4LDEyICsyOCwyOSBAQAogCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgog
I2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgogI2lu
Y2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1l
c3BhY2UgewogCitjbGFzcyBTY29wZWRTZXRJbXBsVGhyZWFkIHsKK3B1YmxpYzoKKyAgICBTY29w
ZWRTZXRJbXBsVGhyZWFkKCkKKyAgICB7CisjaWZuZGVmIE5ERUJVRworICAgICAgICBDQ1Byb3h5
OjpzZXRJbXBsVGhyZWFkKHRydWUpOworI2VuZGlmCisgICAgfQorICAgIH5TY29wZWRTZXRJbXBs
VGhyZWFkKCkKKyAgICB7CisjaWZuZGVmIE5ERUJVRworICAgICAgICBDQ1Byb3h5OjpzZXRJbXBs
VGhyZWFkKGZhbHNlKTsKKyNlbmRpZgorICAgIH0KK307CisKIGNsYXNzIE1vY2tDQ0xheWVySW1w
bCA6IHB1YmxpYyBDQ0xheWVySW1wbCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
TW9ja0NDTGF5ZXJJbXBsPiBjcmVhdGUoaW50IGxheWVySWQpCkBAIC0xMTYsNiArMTMzLDcgQEAg
dm9pZCBleHBlY3RUcmVlc0FyZUlkZW50aWNhbChMYXllckNocm9taXVtKiBsYXllciwgQ0NMYXll
ckltcGwqIGNjTGF5ZXIpCiAvLyBDb25zdHJ1Y3RzIGEgdmVyeSBzaW1wbGUgdHJlZSBhbmQgc3lu
Y2hyb25pemVzIGl0IHdpdGhvdXQgdHJ5aW5nIHRvIHJldXNlIGFueSBwcmVleGlzdGluZyBsYXll
cnMuCiBURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jU2ltcGxlVHJlZUZyb21FbXB0eSkK
IHsKKyAgICBTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CiAgICAgUmVmUHRyPExheWVyQ2hyb21p
dW0+IGxheWVyVHJlZVJvb3QgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CiAgICAgbGF5ZXJU
cmVlUm9vdC0+YWRkQ2hpbGQoTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApKTsKICAgICBsYXllclRy
ZWVSb290LT5hZGRDaGlsZChMYXllckNocm9taXVtOjpjcmVhdGUoMCkpOwpAQCAtMTI4LDYgKzE0
Niw3IEBAIFRFU1QoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNTaW1wbGVUcmVlRnJvbUVtcHR5
KQogLy8gQ29uc3RydWN0cyBhIHZlcnkgc2ltcGxlIHRyZWUgYW5kIHN5bmNocm9uaXplcyBpdCBh
dHRlbXB0aW5nIHRvIHJldXNlIHNvbWUgbGF5ZXJzCiBURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0
LCBzeW5jU2ltcGxlVHJlZVJldXNpbmdMYXllcnMpCiB7CisgICAgU2NvcGVkU2V0SW1wbFRocmVh
ZCBpbXBsOwogICAgIFZlY3RvcjxpbnQ+IGNjTGF5ZXJEZXN0cnVjdGlvbkxpc3Q7CiAKICAgICBS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXJUcmVlUm9vdCA9IE1vY2tMYXllckNocm9taXVtOjpj
cmVhdGUoJmNjTGF5ZXJEZXN0cnVjdGlvbkxpc3QpOwpAQCAtMTUzLDYgKzE3Miw3IEBAIFRFU1Qo
VHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNTaW1wbGVUcmVlUmV1c2luZ0xheWVycykKIAogVEVT
VChUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVBbmRQcm9wZXJ0aWVzKQogewor
ICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
bGF5ZXJUcmVlUm9vdCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKICAgICBsYXllclRyZWVS
b290LT5hZGRDaGlsZChMYXllckNocm9taXVtOjpjcmVhdGUoMCkpOwogICAgIGxheWVyVHJlZVJv
b3QtPmFkZENoaWxkKExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKSk7CkBAIC0xODQsNiArMjA0LDcg
QEAgVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVBbmRQcm9wZXJ0aWVz
KQogCiBURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCByZXVzZUNDTGF5ZXJzQWZ0ZXJTdHJ1Y3R1
cmFsQ2hhbmdlKQogeworICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKICAgICBWZWN0b3I8
aW50PiBjY0xheWVyRGVzdHJ1Y3Rpb25MaXN0OwogCiAgICAgLy8gU2V0IHVwIGEgdHJlZSB3aXRo
IHRoaXMgc29ydCBvZiBzdHJ1Y3R1cmU6CkBAIC0yMzAsNiArMjUxLDcgQEAgVEVTVChUcmVlU3lu
Y2hyb25pemVyVGVzdCwgcmV1c2VDQ0xheWVyc0FmdGVyU3RydWN0dXJhbENoYW5nZSkKIC8vIENv
bnN0cnVjdHMgYSB2ZXJ5IHNpbXBsZSB0cmVlLCBzeW5jaHJvbml6ZXMgaXQsIHRoZW4gc3luY2hy
b25pemVzIHRvIGEgdG90YWxseSBuZXcgdHJlZS4gQWxsIGxheWVycyBmcm9tIHRoZSBvbGQgdHJl
ZSBzaG91bGQgYmUgZGVsZXRlZC4KIFRFU1QoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNTaW1w
bGVUcmVlVGhlbkRlc3Ryb3kpCiB7CisgICAgU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOwogICAg
IFZlY3RvcjxpbnQ+IGNjTGF5ZXJEZXN0cnVjdGlvbkxpc3Q7CiAKICAgICBSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gb2xkTGF5ZXJUcmVlUm9vdCA9IE1vY2tMYXllckNocm9taXVtOjpjcmVhdGUoJmNj
TGF5ZXJEZXN0cnVjdGlvbkxpc3QpOwpAQCAtMjYwLDYgKzI4Miw3IEBAIFRFU1QoVHJlZVN5bmNo
cm9uaXplclRlc3QsIHN5bmNTaW1wbGVUcmVlVGhlbkRlc3Ryb3kpCiAvLyBDb25zdHJ1Y3RzK3N5
bmNzIGEgdHJlZSB3aXRoIG1hc2ssIHJlcGxpY2EsIGFuZCByZXBsaWNhIG1hc2sgbGF5ZXJzLgog
VEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY01hc2tSZXBsaWNhQW5kUmVwbGljYU1hc2tM
YXllcnMpCiB7CisgICAgU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOwogICAgIFJlZlB0cjxMYXll
ckNocm9taXVtPiBsYXllclRyZWVSb290ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOwogICAg
IGxheWVyVHJlZVJvb3QtPmFkZENoaWxkKExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKSk7CiAgICAg
bGF5ZXJUcmVlUm9vdC0+YWRkQ2hpbGQoTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108559</attachid>
            <date>2011-09-23 16:45:15 -0700</date>
            <delta_ts>2011-09-26 19:03:20 -0700</delta_ts>
            <desc>Set Impl thread when setting layer renderer</desc>
            <filename>bug-67417-20110923164514.patch</filename>
            <type>text/plain</type>
            <size>43229</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTUzMzQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2ODRkMDYyZmEyZDMyODdi
MThkNWNlOTk5YTcyYWNlMzY2YTYyN2E3Li5jMmRiNmVhNzljNTZjN2NiZDg0ODc0NTY4MzkxOTg4
YzE3NTdjODYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTEtMDktMTUgIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTWFrZSBDQ1Ro
cmVhZFByb3h5IGRyYXcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTY3NDE3CisKKyAgICAgICAgVXBkYXRlIHRoZSBDQ1RocmVhZFByb3h5IHRvIGNvcnJl
Y3RseSBpbXBsZW1lbnQgdGhlIENDUHJveHkKKyAgICAgICAgaW50ZXJmYWNlLCBkbyBhbGwgdGhl
IHJpZ2h0IGNvbW1pdHRpbmcgYW5kIHVwZGF0aW5nIHN0ZXBzLCBhbmQKKyAgICAgICAgZHJhdyBh
IHBpY3R1cmUgb24gdGhlIHNjcmVlbi4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp+TGF5ZXJSZW5kZXJlckNo
cm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRz
VXBEaXNwbGF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDSGVhZHNVcERpc3BsYXk6OmVuYWJs
ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpDQ0xheWVySW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6fkNDTGF5ZXJJbXBsKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpDQ0xheWVyVHJlZUhvc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0Ojpjb21taXRUbyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3Q6OmNvbW1pdENvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdDo6c2V0TmVlZHNSZWRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjp+Q0NMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5OjpmaW5pc2hBbGxSZW5kZXJp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21t
aXQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tbWl0SWZOZWVk
ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJv
eHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6Q0NUaHJlYWRQcm94eSk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5Ojp+Q0NUaHJlYWRQcm94eSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5Ojpjb21wb3NpdGVBbmRSZWFkYmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpkcmF3TGF5ZXJzQW5kUmVhZGJhY2tPbkNDVGhy
ZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmZpbmlzaEFsbFJlbmRlcmlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5Ojppc1N0YXJ0ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNSZWRyYXcpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NUaHJlYWRQcm94eTo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94
eTo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpmaW5pc2hBbGxSZW5k
ZXJpbmdPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmNyZWF0
ZUJlZ2luRnJhbWVBbmRDb21taXRUYXNrT25DQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkND
VGhyZWFkUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJl
YWRQcm94eTo6c2NoZWR1bGVEcmF3VGFza09uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NUaHJlYWRQcm94eTo6ZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhyZWFkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OnVwZGF0ZVNjaGVkdWxlclN0YXRlT25DQ1RocmVhZCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5o
OgorCiAyMDExLTA5LTE2ICBNYXggUGVyZXBlbGl0c3luICA8cHBoMzRyQGdtYWlsLmNvbT4KIAog
ICAgICAgICBTZXQgYnV0IG5vdCB1c2VkIHZhcmlhYmxlcyBjbGVhbnVwIChnY2MgNC42KQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmgKaW5kZXggN2NlN2Y5OGQx
ZjEwNDIxNjk4ZDkwZDBkOTc4NzczM2JhNWRlNmY5OS4uMzlkMTFiNTAxMGYzNDJiNjBkNzJkYjNk
YjUwZjBmNDE0Y2MxMDhhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3Jv
c3NUaHJlYWRDb3BpZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVh
ZENvcGllci5oCkBAIC00MSw2ICs0MSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorICAg
IGNsYXNzIEludFJlY3Q7CiAgICAgY2xhc3MgS1VSTDsKICAgICBjbGFzcyBSZXNvdXJjZUVycm9y
OwogICAgIGNsYXNzIFJlc291cmNlUmVxdWVzdDsKQEAgLTYzLDkgKzY0LDE0IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ3Jvc3NUaHJlYWRD
b3BpZXJCYXNlPHRydWUsIGZhbHNlLCBUPiA6IHB1YmxpYyBDcm9zc1RocmVhZENvcGllclBhc3NU
aHJvdWdoPFQ+IHsKICAgICB9OwogCisgICAgLy8gVG8gYWxsb3cgYSB0eXBlIHRvIGJlIHBhc3Nl
ZCBhY3Jvc3MgdGhyZWFkcyB1c2luZyBpdHMgY29weSBjb25zdHJ1Y3RvciwgYWRkIGEgZm9yd2Fy
ZCBkZWNsYXJhdGlvbiBvZiB0aGUgdHlwZSBhbmQKKyAgICAvLyBhIENvcHlUaHJlYWRDb3BpZXJC
YXNlPGZhbHNlLCBmYWxzZSwgVHlwZU5hbWU+IDogcHVibGljIENyb3NzVGhyZWFkQ29waWVyUGFz
c1Rocm91Z2g8VHlwZU5hbWU+IHsgfTsgdG8gdGhpcyBmaWxlLgogICAgIHRlbXBsYXRlPD4gc3Ry
dWN0IENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIFRocmVhZGFibGVMb2FkZXJP
cHRpb25zPiA6IHB1YmxpYyBDcm9zc1RocmVhZENvcGllclBhc3NUaHJvdWdoPFRocmVhZGFibGVM
b2FkZXJPcHRpb25zPiB7CiAgICAgfTsKIAorICAgIHRlbXBsYXRlPD4gc3RydWN0IENyb3NzVGhy
ZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIEludFJlY3Q+IDogcHVibGljIENyb3NzVGhyZWFk
Q29waWVyUGFzc1Rocm91Z2g8SW50UmVjdD4geworICAgIH07CisKICAgICAvLyBDdXN0b20gY29w
eSBtZXRob2RzLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDcm9zc1RocmVhZENv
cGllckJhc2U8ZmFsc2UsIHRydWUsIFQ+IHsKICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBXVEY6
OlJlbW92ZVRlbXBsYXRlPFQsIFJlZlB0cj46OlR5cGUgVHlwZVdpdGhvdXRSZWZQdHI7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRleCA3YWZjYjczNWE4ZDEwMzU4MzJm
MmYxMzkyNGM0M2U1M2FhMjM0YTI1Li43NDQwZjg2MDQ0OWJkMTRjMWY3YmJhMGU3MWVhZjA4NDA0
YzQ0YTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTE4Miw2
ICsxODIsOCBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZSgpCiAKIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6fkxheWVyUmVuZGVyZXJDaHJvbWl1bSgpCiB7CisgICAgQVNT
RVJUKENDUHJveHk6OmlzSW1wbFRocmVhZAorKCkpOwogICAgIG1faGVhZHNVcERpc3BsYXkuY2xl
YXIoKTsgLy8gRXhwbGljaXRseSBkZXN0cm95IHRoZSBIVUQgYmVmb3JlIHRoZSBUZXh0dXJlTWFu
YWdlciBkaWVzLgogICAgIGNsZWFudXBTaGFyZWRPYmplY3RzKCk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNw
bGF5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
SGVhZHNVcERpc3BsYXkuY3BwCmluZGV4IDhjMDg2MzAxMGMyNTE4YmRlOTcxMjc4MmNjYTllYzYz
Y2JhZjFmZDAuLjI3ZjBjYjljM2MxMDQ5MWNlYzE1MDRmNjM5MTRhMDU3MDdhNDE0NzIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVh
ZHNVcERpc3BsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwCkBAIC04OSw2ICs4OSw5IEBAIHZvaWQgQ0NI
ZWFkc1VwRGlzcGxheTo6b25QcmVzZW50KCkKIAogYm9vbCBDQ0hlYWRzVXBEaXNwbGF5OjplbmFi
bGVkKCkgY29uc3QKIHsKKyAgICAvLyBGSVhNRTogSFVEIGRvZXMgbm90IHdvcmsgaW4gY29tcG9z
aXRvciB0aHJlYWQgbW9kZS4KKyAgICBpZiAoc2V0dGluZ3MoKS5lbmFibGVDb21wb3NpdG9yVGhy
ZWFkKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHNldHRpbmdzKCkuc2hvd1Bs
YXRmb3JtTGF5ZXJUcmVlIHx8IHNldHRpbmdzKCkuc2hvd0ZQU0NvdW50ZXI7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJJbXBsLmNwcAppbmRleCA4NDU0MDY0MzViODdmMjAzZDE3NzA4ZGM0NzU0OWM2YmE2
ZTlhMmY3Li40YmNjYTA3MzA3NmJhMjRjMjllZmE0MGRmZTNiM2IzOTYwOWVkN2EzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckltcGwuY3BwCkBAIC03OCwxMCArNzgsMTIgQEAgQ0NMYXllckltcGw6OkNDTGF5
ZXJJbXBsKGludCBpZCkKICAgICAsIG1fZGVidWdCb3JkZXJDb2xvcigwLCAwLCAwLCAwKQogICAg
ICwgbV9kZWJ1Z0JvcmRlcldpZHRoKDApCiB7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRo
cmVhZCgpKTsKIH0KIAogQ0NMYXllckltcGw6On5DQ0xheWVySW1wbCgpCiB7CisgICAgQVNTRVJU
KENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKIH0KIAogdm9pZCBDQ0xheWVySW1wbDo6YWRkQ2hp
bGQoUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0LmNwcAppbmRleCBhMjU3YjQxMWFiOWY0YzRkNmFjZWJmZTdhNzUzYmYxOWRhYjgzMmM4Li5h
ZWIwZTk2YjhkZjI2MmU1NjVkOWI5OTI2N2ZmMjFjYWVlYWU4OGJhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTU2LDYgKzU2LDcgQEAgQ0NMYXllclRyZWVIb3N0OjpDQ0xh
eWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0Q2xpZW50KiBjbGllbnQsIFBhc3NSZWZQdHI8TGF5
ZXIKICAgICAsIG1fem9vbUFuaW1hdG9yU2NhbGUoMSkKICAgICAsIG1fdmlzaWJsZSh0cnVlKQog
eworICAgIEFTU0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQoKSk7CiB9CiAKIGJvb2wgQ0NMYXll
clRyZWVIb3N0Ojppbml0aWFsaXplKCkKQEAgLTYzLDYgKzY0LDEwIEBAIGJvb2wgQ0NMYXllclRy
ZWVIb3N0Ojppbml0aWFsaXplKCkKICAgICBpZiAobV9zZXR0aW5ncy5lbmFibGVDb21wb3NpdG9y
VGhyZWFkKSB7CiAgICAgICAgIC8vIEFjY2VsZXJhdGVkIFBhaW50aW5nIGlzIG5vdCBzdXBwb3J0
ZWQgaW4gdGhyZWFkZWQgbW9kZS4gVHVybiBpdCBvZmYuCiAgICAgICAgIG1fc2V0dGluZ3MuYWNj
ZWxlcmF0ZVBhaW50aW5nID0gZmFsc2U7CisgICAgICAgIC8vIFRoZSBIVUQgZG9lcyBub3Qgd29y
ayBpbiB0aHJlYWRlZCBtb2RlLiBUdXJuIGl0IG9mZi4KKyAgICAgICAgbV9zZXR0aW5ncy5zaG93
RlBTQ291bnRlciA9IGZhbHNlOworICAgICAgICBtX3NldHRpbmdzLnNob3dQbGF0Zm9ybUxheWVy
VHJlZSA9IGZhbHNlOworCiAgICAgICAgIG1fcHJveHkgPSBDQ1RocmVhZFByb3h5OjpjcmVhdGUo
dGhpcyk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fcHJveHkgPSBDQ1NpbmdsZVRocmVhZFByb3h5
OjpjcmVhdGUodGhpcyk7CkBAIC0xMDYsNiArMTExLDExIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0
OjphbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKICAgICBtX2FuaW1hdGlu
ZyA9IGZhbHNlOwogfQogCisvLyBUaGlzIGZ1bmN0aW9uIGNvbW1pdHMgdGhlIENDTGF5ZXJUcmVl
SG9zdCB0byBhbiBpbXBsIHRyZWUuIFdoZW4gbW9kaWZ5aW5nCisvLyB0aGlzIGZ1bmN0aW9uLCBr
ZWVwIGluIG1pbmQgdGhhdCB0aGUgZnVuY3Rpb24gKnJ1bnMqIG9uIHRoZSBpbXBsIHRocmVhZCEg
QW55CisvLyBjb2RlIHRoYXQgaXMgbG9naWNhbGx5IGEgbWFpbiB0aHJlYWQgb3BlcmF0aW9uLCBl
LmcuIGRlbGV0aW9uIG9mIGEgTGF5ZXJDaHJvbWl1bSwKKy8vIHNob3VsZCBiZSBkZWxheWVkIHVu
dGlsIHRoZSBDQ0xheWVyVHJlZUhvc3Q6OmNvbW1pdENvbXBsZXRlLCB3aGljaCB3aWxsIHJ1bgor
Ly8gYWZ0ZXIgdGhlIGNvbW1pdCwgYnV0IG9uIHRoZSBtYWluIHRocmVhZC4KIHZvaWQgQ0NMYXll
clRyZWVIb3N0Ojpjb21taXRUbyhDQ0xheWVyVHJlZUhvc3RJbXBsKiBob3N0SW1wbCkKIHsKICAg
ICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwpAQCAtMTIwLDE0ICsxMzAsMTIgQEAg
dm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmNvbW1pdFRvKENDTGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJ
bXBsKQogICAgIGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+ZGVsZXRlRXZpY3RlZFRleHR1cmVz
KGhvc3RJbXBsLT5jb250ZXh0KCkpOwogCiAgICAgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyht
X3VwZGF0ZUxpc3QsIGhvc3RJbXBsLT5jb250ZXh0KCkpOwotICAgIGNsZWFyUGVuZGluZ1VwZGF0
ZSgpOwogCiAgICAgaG9zdEltcGwtPnNldFZpc2libGUobV92aXNpYmxlKTsKICAgICBob3N0SW1w
bC0+c2V0Wm9vbUFuaW1hdG9yU2NhbGUobV96b29tQW5pbWF0b3JTY2FsZSk7CiAgICAgaG9zdElt
cGwtPnNldFZpZXdwb3J0KHZpZXdwb3J0U2l6ZSgpKTsKIAogICAgIGhvc3RJbXBsLT5sYXllclJl
bmRlcmVyKCktPnNldENvbnRlbnRzVGV4dHVyZU1lbW9yeVVzZUJ5dGVzKG1fY29udGVudHNUZXh0
dXJlTWFuYWdlci0+Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCkpOwotICAgIG1fY29udGVudHNUZXh0
dXJlTWFuYWdlci0+dW5wcm90ZWN0QWxsVGV4dHVyZXMoKTsKIAogICAgIC8vIFN5bmNocm9uaXpl
IHRyZWVzLCBpZiBvbmUgZXhpc3RzIGF0IGFsbC4uLgogICAgIGlmIChyb290TGF5ZXIoKSkKQEAg
LTEzOCw2ICsxNDYsMTIgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmNvbW1pdFRvKENDTGF5ZXJU
cmVlSG9zdEltcGwqIGhvc3RJbXBsKQogICAgIG1fZnJhbWVOdW1iZXIrKzsKIH0KIAordm9pZCBD
Q0xheWVyVHJlZUhvc3Q6OmNvbW1pdENvbXBsZXRlKCkKK3sKKyAgICBjbGVhclBlbmRpbmdVcGRh
dGUoKTsKKyAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnVucHJvdGVjdEFsbFRleHR1cmVz
KCk7Cit9CisKIFBhc3NPd25QdHI8Q0NUaHJlYWQ+IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlQ29t
cG9zaXRvclRocmVhZCgpCiB7CiAgICAgcmV0dXJuIG1fY2xpZW50LT5jcmVhdGVDb21wb3NpdG9y
VGhyZWFkKCk7CkBAIC0yMTQsNyArMjI4LDYgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldE5l
ZWRzQ29tbWl0QW5kUmVkcmF3KCkKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXROZWVkc1JlZHJh
dygpCiB7CiAjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQotICAgIFRSQUNFX0VWRU5UKCJD
Q0xheWVyVHJlZUhvc3Q6OnNldE5lZWRzUmVkcmF3IiwgdGhpcywgMCk7CiAgICAgbV9wcm94eS0+
c2V0TmVlZHNSZWRyYXcoKTsKICNlbHNlCiAgICAgbV9jbGllbnQtPnNjaGVkdWxlQ29tcG9zaXRl
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCmluZGV4IGZlZTI5NTYxMmI5MjEyNzkwZDBi
ZWMxMDY4N2QwNWJkMTE3OGJmMTcuLjAwYjdlYzIxMmQ2ZTk3M2U2YTVhM2NhODcxOGRkZDQ3NzY3
YTAxYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCkBAIC05Niw2ICs5Niw3IEBAIHB1
YmxpYzoKIAogICAgIC8vIENDTGF5ZXJUcmVlSG9zdCBpbnRlcmZhY2UgdG8gQ0NQcm94eS4KICAg
ICB2b2lkIGFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKKyAgICB2b2lk
IGNvbW1pdENvbXBsZXRlKCk7CiAgICAgdm9pZCBjb21taXRUbyhDQ0xheWVyVHJlZUhvc3RJbXBs
Kik7CiAgICAgUGFzc093blB0cjxDQ1RocmVhZD4gY3JlYXRlQ29tcG9zaXRvclRocmVhZCgpOwog
ICAgIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUxheWVyVHJlZUhvc3RDb250
ZXh0M0QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXggYjMw
NDgzNjhkYWEyMDc2ZmE0OWRiYTE0YmI5YzkzNjk4YjY3NmUxZC4uNGExYzM5ZDRkMDkxMGJiZWJl
YmY2ODY1N2ExMjEzNzQ0ZDU1Mjk1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5jcHAKQEAgLTQ4LDEwICs0OCwxMiBAQCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVy
VHJlZUhvc3RJbXBsKGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzKQogICAgICwgbV9mcmFtZU51
bWJlcigwKQogICAgICwgbV9zZXR0aW5ncyhzZXR0aW5ncykKIHsKKyAgICBBU1NFUlQoQ0NQcm94
eTo6aXNJbXBsVGhyZWFkKCkpOwogfQogCiBDQ0xheWVyVHJlZUhvc3RJbXBsOjp+Q0NMYXllclRy
ZWVIb3N0SW1wbCgpCiB7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAg
ICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6fkNDTGF5ZXJUcmVlSG9zdEltcGwo
KSIsIHRoaXMsIDApOwogICAgIGlmIChtX2xheWVyUmVuZGVyZXIpCiAgICAgICAgIG1fbGF5ZXJS
ZW5kZXJlci0+Y2xvc2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5jcHAKaW5kZXggZDYxYTJlNTNlZDIzMGY5Njdl
ZTFkODVkZDA4M2NiYWNmOWMyNjcxOC4uYjdlY2NlY2QxMGEwOGI4ZWJhODc2NWYwODk4ZmViMmQz
MTExYjI4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NQcm94eS5jcHAKQEAgLTM3LDE2ICszNywxNyBAQCB1c2luZyBuYW1l
c3BhY2UgV1RGOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWZuZGVmIE5ERUJVRwotYm9vbCBD
Q1Byb3h5Ojppc01haW5UaHJlYWQoKQotewotICAgIHJldHVybiA6OmlzTWFpblRocmVhZCgpOwot
fQogCiBuYW1lc3BhY2UgewogYm9vbCBmYWtlSW1wbFRocmVhZCA9IGZhbHNlOwogc3RhdGljIFdU
Rjo6VGhyZWFkSWRlbnRpZmllciBpbXBsVGhyZWFkSUQ7CiB9CiAKK2Jvb2wgQ0NQcm94eTo6aXNN
YWluVGhyZWFkKCkKK3sKKyAgICByZXR1cm4gOjppc01haW5UaHJlYWQoKSAmJiAhZmFrZUltcGxU
aHJlYWQ7Cit9CisKIGJvb2wgQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkKIHsKICAgICByZXR1cm4g
ZmFrZUltcGxUaHJlYWQgfHwgY3VycmVudFRocmVhZCgpID09IGltcGxUaHJlYWRJRDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJv
eHkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJv
eHkuaAppbmRleCBmNWU0MThiMGU4M2RjNjdhYzJjMzZlNmZhNWFiYTlhNjlkZmFjNmMyLi5iMjIy
Yjk5ODhkODE3ZjQ5NWMyYTNhMGYwNWM0Y2ExY2VkYWRkMTYzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Byb3h5LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5oCkBAIC03
NSwxOSArNzUsMjAgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGlzSW1wbFRocmVhZCgpOwog
I2VuZGlmCiAKLSAgICAvLyBUZXN0aW5nIGhvb2tzCi0gICAgdmlydHVhbCB2b2lkIGxvc2VDb21w
b3NpdG9yQ29udGV4dChpbnQgbnVtVGltZXMpID0gMDsKLQogICAgIC8vIFRlbXBvcmFyeSBoYWNr
IHdoaWxlIHJlbmRlcl93aWRnZXQgc3RpbGwgZG9lcyBzY2hlZHVsaW5nIGZvciBDQ0xheWVyVHJl
ZUhvc3RNYWluVGhyZWFkSQogICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQo
KSA9IDA7CiAKLXByb3RlY3RlZDoKLSAgICBDQ1Byb3h5KCkgeyB9Ci0gICAgZnJpZW5kIGNsYXNz
IFNjb3BlZFNldEltcGxUaHJlYWQ7CisgICAgLy8gVGVzdGluZyBob29rcworICAgIHZpcnR1YWwg
dm9pZCBsb3NlQ29tcG9zaXRvckNvbnRleHQoaW50IG51bVRpbWVzKSA9IDA7CisKICNpZm5kZWYg
TkRFQlVHCiAgICAgc3RhdGljIHZvaWQgc2V0SW1wbFRocmVhZChib29sKTsKICAgICBzdGF0aWMg
dm9pZCBzZXRJbXBsVGhyZWFkKFdURjo6VGhyZWFkSWRlbnRpZmllcik7CiAjZW5kaWYKKworcHJv
dGVjdGVkOgorICAgIENDUHJveHkoKSB7IH0KKyAgICBmcmllbmQgY2xhc3MgU2NvcGVkU2V0SW1w
bFRocmVhZDsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAK
aW5kZXggMmQyN2Q3MjliMzgyMTEzOWYwODE3Y2VkYjQ3ZWFlZWZhZjM4NTg4Ny4uOWFjZGM2NGE1
Y2IxODJkNWIzNDYwOTU1ZGMwZDIwOTE5MGIzMjE2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5n
bGVUaHJlYWRQcm94eS5jcHAKQEAgLTQyLDYgKzQyLDcgQEAgcHVibGljOgogICAgIFNjb3BlZFNl
dEltcGxUaHJlYWQoKQogICAgIHsKICNpZm5kZWYgTkRFQlVHCisgICAgICAgIEFTU0VSVChDQ1By
b3h5Ojppc01haW5UaHJlYWQoKSk7CiAgICAgICAgIENDUHJveHk6OnNldEltcGxUaHJlYWQodHJ1
ZSk7CiAjZW5kaWYKICAgICB9CkBAIC02NSw3ICs2Niw3IEBAIENDU2luZ2xlVGhyZWFkUHJveHk6
OkNDU2luZ2xlVGhyZWFkUHJveHkoQ0NMYXllclRyZWVIb3N0KiBsYXllclRyZWVIb3N0KQogICAg
ICwgbV90aW1lc1JlY3JlYXRlU2hvdWxkRmFpbCgwKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ1Np
bmdsZVRocmVhZFByb3h5OjpDQ1NpbmdsZVRocmVhZFByb3h5IiwgdGhpcywgMCk7Ci0gICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNNYWluVGhyZWFkKCkp
OwogfQogCiB2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OnN0YXJ0KCkKQEAgLTc3LDEzICs3OCwx
MyBAQCB2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OnN0YXJ0KCkKIENDU2luZ2xlVGhyZWFkUHJv
eHk6On5DQ1NpbmdsZVRocmVhZFByb3h5KCkKIHsKICAgICBUUkFDRV9FVkVOVCgiQ0NTaW5nbGVU
aHJlYWRQcm94eTo6fkNDU2luZ2xlVGhyZWFkUHJveHkiLCB0aGlzLCAwKTsKLSAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQoKSk7CiAg
ICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3RJbXBsICYmICFtX2xheWVyVHJlZUhvc3QpOyAvLyBt
YWtlIHN1cmUgc3RvcCgpIGdvdCBjYWxsZWQuCiB9CiAKIGJvb2wgQ0NTaW5nbGVUaHJlYWRQcm94
eTo6Y29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0
KQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKENDUHJveHk6Omlz
TWFpblRocmVhZCgpKTsKIAogICAgIGlmICghcmVjcmVhdGVDb250ZXh0SWZOZWVkZWQoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTAzLDI3ICsxMDQsMjkgQEAgYm9vbCBDQ1NpbmdsZVRo
cmVhZFByb3h5Ojpjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJl
Y3QmIHJlY3QKIAogR3JhcGhpY3NDb250ZXh0M0QqIENDU2luZ2xlVGhyZWFkUHJveHk6OmNvbnRl
eHQoKQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKENDUHJveHk6
OmlzTWFpblRocmVhZCgpKTsKICAgICBTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CiAgICAgcmV0
dXJuIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRleHQoKTsKIH0KIAogdm9pZCBDQ1NpbmdsZVRo
cmVhZFByb3h5OjpmaW5pc2hBbGxSZW5kZXJpbmcoKQogewotICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7Ci0gICAgU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOwotICAgIG1fbGF5ZXJUcmVlSG9z
dEltcGwtPmZpbmlzaEFsbFJlbmRlcmluZygpOworICAgIEFTU0VSVChDQ1Byb3h5Ojppc01haW5U
aHJlYWQoKSk7CisgICAgeworICAgICAgICBTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmZpbmlzaEFsbFJlbmRlcmluZygpOworICAgIH0KIH0K
IAogYm9vbCBDQ1NpbmdsZVRocmVhZFByb3h5Ojppc1N0YXJ0ZWQoKSBjb25zdAogewotICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgp
KTsKICAgICByZXR1cm4gbV9sYXllclRyZWVIb3N0SW1wbDsKIH0KIAogYm9vbCBDQ1NpbmdsZVRo
cmVhZFByb3h5Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlcigpCiB7Ci0gICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNNYWluVGhyZWFkKCkpOwogICAgIFJl
ZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IG1fbGF5ZXJUcmVlSG9zdC0+Y3JlYXRl
TGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpOwogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtMTMxLDE0ICsxMzQsMTcgQEAgYm9vbCBDQ1NpbmdsZVRocmVhZFByb3h5
Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlcigpCiAKICAgICB7CiAgICAgICAgIFNjb3BlZFNldElt
cGxUaHJlYWQgaW1wbDsKLSAgICAgICAgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmluaXRp
YWxpemVMYXllclJlbmRlcmVyKGNvbnRleHQpOworICAgICAgICBib29sIG9rID0gbV9sYXllclRy
ZWVIb3N0SW1wbC0+aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoY29udGV4dCk7CisgICAgICAgIGlm
IChvaykKKyAgICAgICAgICAgIG1fbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllc0Zvck1haW5UaHJl
YWQgPSBtX2xheWVyVHJlZUhvc3RJbXBsLT5sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCk7Cisg
ICAgICAgIHJldHVybiBvazsKICAgICB9CiB9CiAKIGNvbnN0IExheWVyUmVuZGVyZXJDYXBhYmls
aXRpZXMmIENDU2luZ2xlVGhyZWFkUHJveHk6OmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKSBj
b25zdAogewotICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKLSAgICByZXR1cm4gbV9sYXll
clRyZWVIb3N0SW1wbC0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpOworICAgIC8vIE5vdGU6
IHRoaXMgZ2V0cyBjYWxsZWQgZHVyaW5nIHRoZSBjb21taXQgYnkgdGhlICJpbXBsIiB0aHJlYWQK
KyAgICByZXR1cm4gbV9sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzRm9yTWFpblRocmVhZDsKIH0K
IAogdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpsb3NlQ29tcG9zaXRvckNvbnRleHQoaW50IG51
bVRpbWVzKQpAQCAtMTQ5LDcgKzE1NSw3IEBAIHZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6bG9z
ZUNvbXBvc2l0b3JDb250ZXh0KGludCBudW1UaW1lcykKIAogdm9pZCBDQ1NpbmdsZVRocmVhZFBy
b3h5OjpzZXROZWVkc0NvbW1pdCgpCiB7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAg
ICBBU1NFUlQoQ0NQcm94eTo6aXNNYWluVGhyZWFkKCkpOwogICAgIC8vIENvbW1pdCBpbW1lZGlh
dGVseQogICAgIHsKICAgICAgICAgU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOwpAQCAtMTU3LDEx
ICsxNjMsMTIgQEAgdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdCgpCiAg
ICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0VG8obV9sYXllclRyZWVIb3N0SW1wbC5nZXQo
KSk7CiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbW1pdENvbXBsZXRlKCk7CiAgICAg
fQorICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0Q29tcGxldGUoKTsKIH0KIAogdm9pZCBDQ1Np
bmdsZVRocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpCiB7Ci0gICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNNYWluVGhyZWFkKCkpOwog
I2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCiAgICAgbV9sYXllclRyZWVIb3N0LT5zY2hl
ZHVsZUNvbXBvc2l0ZSgpOwogI2Vsc2UKQEAgLTE4MCw3ICsxODcsNyBAQCB2b2lkIENDU2luZ2xl
VGhyZWFkUHJveHk6OnNldE5lZWRzUmVkcmF3KCkKIHZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6
c3RvcCgpCiB7CiAgICAgVFJBQ0VfRVZFTlQoIkNDU2luZ2xlVGhyZWFkUHJveHk6OnN0b3AiLCB0
aGlzLCAwKTsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChDQ1Byb3h5
Ojppc01haW5UaHJlYWQoKSk7CiAgICAgewogICAgICAgICBTY29wZWRTZXRJbXBsVGhyZWFkIGlt
cGw7CiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGVsZXRlQ29udGVudHNUZXh0dXJlcyhtX2xh
eWVyVHJlZUhvc3RJbXBsLT5jb250ZXh0KCkpOwpAQCAtMjA2LDcgKzIxMyw3IEBAIHZvaWQgQ0NT
aW5nbGVUaHJlYWRQcm94eTo6Y29tcG9zaXRlSW1tZWRpYXRlbHkoKQogCiBib29sIENDU2luZ2xl
VGhyZWFkUHJveHk6OnJlY3JlYXRlQ29udGV4dElmTmVlZGVkKCkKIHsKLSAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworICAgIEFTU0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQoKSk7CiAgICAg
aWYgKCFtX2dyYXBoaWNzQ29udGV4dExvc3QpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIFJl
ZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dDsKQEAgLTIxNyw3ICsyMjQsMTQgQEAgYm9v
bCBDQ1NpbmdsZVRocmVhZFByb3h5OjpyZWNyZWF0ZUNvbnRleHRJZk5lZWRlZCgpCiAKICAgICBp
ZiAoY29udGV4dCkgewogICAgICAgICBBU1NFUlQoY29udGV4dC0+aGFzT25lUmVmKCkpOwotICAg
ICAgICBpZiAobV9sYXllclRyZWVIb3N0SW1wbC0+aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoY29u
dGV4dCkpIHsKKyAgICAgICAgYm9vbCBvazsKKyAgICAgICAgeworICAgICAgICAgICAgU2NvcGVk
U2V0SW1wbFRocmVhZCBpbXBsOworICAgICAgICAgICAgb2sgPSBtX2xheWVyVHJlZUhvc3RJbXBs
LT5pbml0aWFsaXplTGF5ZXJSZW5kZXJlcihjb250ZXh0KTsKKyAgICAgICAgICAgIGlmIChvaykK
KyAgICAgICAgICAgICAgICBtX2xheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXNGb3JNYWluVGhyZWFk
ID0gbV9sYXllclRyZWVIb3N0SW1wbC0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpOworICAg
ICAgICB9CisgICAgICAgIGlmIChvaykgewogICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5k
aWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dCh0cnVlKTsKICAgICAgICAgICAgIG1fZ3JhcGhpY3ND
b250ZXh0TG9zdCA9IGZhbHNlOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNDAsNiAr
MjU0LDggQEAgYm9vbCBDQ1NpbmdsZVRocmVhZFByb3h5OjpyZWNyZWF0ZUNvbnRleHRJZk5lZWRl
ZCgpCiAKIHZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tbWl0SWZOZWVkZWQoKQogeworICAg
IEFTU0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQoKSk7CisKICAgICAvLyBVcGRhdGUKICAgICBt
X2xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVycygpOwogCkBAIC0yNTAsNiArMjY2LDcgQEAgdm9p
ZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21taXRJZk5lZWRlZCgpCiAgICAgICAgIG1fbGF5ZXJU
cmVlSG9zdC0+Y29tbWl0VG8obV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSk7CiAgICAgICAgIG1f
bGF5ZXJUcmVlSG9zdEltcGwtPmNvbW1pdENvbXBsZXRlKCk7CiAgICAgfQorICAgIG1fbGF5ZXJU
cmVlSG9zdC0+Y29tbWl0Q29tcGxldGUoKTsKIH0KIAogYm9vbCBDQ1NpbmdsZVRocmVhZFByb3h5
Ojpkb0NvbXBvc2l0ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgKaW5kZXgg
YmJiZTVmNTkwNzYyYmUxOGEyODc0YTU4OGVjNDM3MGE2NTk3ZjkwMC4uYzE4ZTdmMzY0OTM4ZDE5
MzY0YzMxMTBmNjZlNGJkM2Y5MzE3MmM1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFk
UHJveHkuaApAQCAtNjksNiArNjksNyBAQCBwcml2YXRlOgogCiAgICAgLy8gVXNlZCBvbiB0aGUg
Q0NUaHJlYWQsIGJ1dCBjaGVja2VkIG9uIG1haW4gdGhyZWFkIGR1cmluZyBpbml0aWFsaXphdGlv
bi9zaHV0ZG93bi4KICAgICBPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gbV9sYXllclRyZWVI
b3N0SW1wbDsKKyAgICBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzIG1fbGF5ZXJSZW5kZXJlckNh
cGFiaWxpdGllc0Zvck1haW5UaHJlYWQ7CiAKICAgICBpbnQgbV9udW1GYWlsZWRSZWNyZWF0ZUF0
dGVtcHRzOwogICAgIGJvb2wgbV9ncmFwaGljc0NvbnRleHRMb3N0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVh
ZFByb3h5LmNwcAppbmRleCA5YTg0ZGE2YzA1M2EzNDAyOWUzZGFkMzdiNzZiYjgyNDM1MDA3Zjcx
Li5hMWU3MWRhZGViNGQxODlhN2ZkNjdmZThjZTkzZjBkMjlmNDQ3MGUwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RocmVhZFByb3h5LmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgImNjL0NDTGF5ZXJU
cmVlSG9zdC5oIgogI2luY2x1ZGUgImNjL0NDTWFpblRocmVhZFRhc2suaCIKICNpbmNsdWRlICJj
Yy9DQ1RocmVhZFRhc2suaCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRl
IDx3dGYvTWFpblRocmVhZC5oPgogCiB1c2luZyBuYW1lc3BhY2UgV1RGOwpAQCAtNDgsOCArNDks
MTQgQEAgUGFzc093blB0cjxDQ1Byb3h5PiBDQ1RocmVhZFByb3h5OjpjcmVhdGUoQ0NMYXllclRy
ZWVIb3N0KiBsYXllclRyZWVIb3N0KQogfQogCiBDQ1RocmVhZFByb3h5OjpDQ1RocmVhZFByb3h5
KENDTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCkKLSAgICA6IG1fY29tbWl0UGVuZGluZyhm
YWxzZSkKKyAgICA6IG1fY29tbWl0UmVxdWVzdGVkKGZhbHNlKQogICAgICwgbV9sYXllclRyZWVI
b3N0KGxheWVyVHJlZUhvc3QpCisgICAgLCBtX3N0YXJ0ZWQoZmFsc2UpCisgICAgLCBtX2xhc3RF
eGVjdXRlZEJlZ2luRnJhbWVBbmRDb21taXRTZXF1ZW5jZU51bWJlcigtMSkKKyAgICAsIG1fbnVt
QmVnaW5GcmFtZUFuZENvbW1pdHNJc3N1ZWRPbkNDVGhyZWFkKDApCisgICAgLCBtX2JlZ2luRnJh
bWVBbmRDb21taXRQZW5kaW5nT25DQ1RocmVhZChmYWxzZSkKKyAgICAsIG1fZHJhd1Rhc2tQb3N0
ZWRPbkNDVGhyZWFkKGZhbHNlKQorICAgICwgbV9yZWRyYXdSZXF1ZXN0ZWRPbkNDVGhyZWFkKGZh
bHNlKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpDQ1RocmVhZFByb3h5Iiwg
dGhpcywgMCk7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKQEAgLTY2LDggKzczLDcgQEAg
Q0NUaHJlYWRQcm94eTo6fkNDVGhyZWFkUHJveHkoKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ1Ro
cmVhZFByb3h5Ojp+Q0NUaHJlYWRQcm94eSIsIHRoaXMsIDApOwogICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7Ci0gICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3RJbXBsKTsgLy8gTWFrZSBzdXJl
IHN0b3AoKSBnb3QgY2FsbGVkLgotICAgIEFTU0VSVCghbV9sYXllclRyZWVIb3N0KTsgLy8gTWFr
ZSBzdXJlIHN0b3AoKSBnb3QgY2FsbGVkLgorICAgIEFTU0VSVCghbV9zdGFydGVkKTsKIAogICAg
IG51bVByb3hpZXMtLTsKICAgICBpZiAoIW51bVByb3hpZXMpIHsKQEAgLTc4LDggKzg0LDQ3IEBA
IENDVGhyZWFkUHJveHk6On5DQ1RocmVhZFByb3h5KCkKIAogYm9vbCBDQ1RocmVhZFByb3h5Ojpj
b21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fbGF5ZXJUcmVlSG9zdCk7CisKKyAgICAv
LyBJZiBhIGNvbW1pdCBpcyBwZW5kaW5nLCBwZXJmb3JtIHRoZSBjb21taXQgZmlyc3QuCisgICAg
aWYgKG1fY29tbWl0UmVxdWVzdGVkKSAgeworICAgICAgICAvLyBUaGlzIGJpdCBvZiBjb2RlIGlz
IHVnbGllciB0aGFuIGl0IHNob3VsZCBiZSBiZWNhdXNlIHJldHVybmluZworICAgICAgICAvLyBw
b2ludGVycyB2aWEgdGhlIENDVGhyZWFkIHRhc2sgbW9kZWwgaXMgcmVhbGx5IG1lc3N5LiBFZmZl
Y3RpdmVseSwgd2UKKyAgICAgICAgLy8gYXJlIG1ha2luZyBhIGJsb2NraW5nIGNhbGwgdG8gY3Jl
YXRlQmVnaW5GcmFtZUFuZENvbW1pdFRhc2tPbkNDVGhyZWFkLAorICAgICAgICAvLyBhbmQgdHJ5
aW5nIHRvIGdldCB0aGUgQ0NNYWluVGhyZWFkOjpUYXNrIGl0IHJldHVybnMgc28gd2UgY2FuIHJ1
biBpdC4KKyAgICAgICAgT3duUHRyPENDTWFpblRocmVhZDo6VGFzaz4gYmVnaW5GcmFtZUFuZENv
bW1pdFRhc2s7CisgICAgICAgIHsKKyAgICAgICAgICAgIENDTWFpblRocmVhZDo6VGFzayogdGFz
a1B0ciA9IDA7CisgICAgICAgICAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOworICAg
ICAgICAgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NU
aHJlYWRQcm94eTo6b2J0YWluQmVnaW5GcmFtZUFuZENvbW1pdFRhc2tGcm9tQ0NUaHJlYWQsIEFs
bG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNz
KCZ0YXNrUHRyKSkpOworICAgICAgICAgICAgY29tcGxldGlvbi53YWl0KCk7CisgICAgICAgICAg
ICBiZWdpbkZyYW1lQW5kQ29tbWl0VGFzayA9IGFkb3B0UHRyKHRhc2tQdHIpOworICAgICAgICB9
CisKKyAgICAgICAgYmVnaW5GcmFtZUFuZENvbW1pdFRhc2stPnBlcmZvcm1UYXNrKCk7CisgICAg
fQorCisgICAgLy8gRHJhdyB1c2luZyB0aGUgbmV3IHRyZWUgYW5kIHJlYWQgYmFjayB0aGUgcmVz
dWx0cy4KKyAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICBDQ0NvbXBsZXRpb25FdmVudCBj
b21wbGV0aW9uOworICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhp
cywgJkNDVGhyZWFkUHJveHk6OmRyYXdMYXllcnNBbmRSZWFkYmFja09uQ0NUaHJlYWQsIEFsbG93
Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZz
dWNjZXNzKSwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcyhwaXhlbHMpLCByZWN0KSk7CisgICAgY29t
cGxldGlvbi53YWl0KCk7CisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK3ZvaWQgQ0NUaHJlYWRQ
cm94eTo6ZHJhd0xheWVyc0FuZFJlYWRiYWNrT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCog
Y29tcGxldGlvbiwgYm9vbCogc3VjY2Vzcywgdm9pZCogcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQoreworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgaWYgKCFt
X2xheWVyVHJlZUhvc3RJbXBsKSB7CisgICAgICAgICpzdWNjZXNzID0gZmFsc2U7CisgICAgICAg
IGNvbXBsZXRpb24tPnNpZ25hbCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGRyYXdM
YXllcnNPbkNDVGhyZWFkKCk7CisgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+cmVhZGJhY2socGl4
ZWxzLCByZWN0KTsKKyAgICAqc3VjY2VzcyA9IG1fbGF5ZXJUcmVlSG9zdEltcGwtPmlzQ29udGV4
dExvc3QoKTsKKyAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKIH0KIAogR3JhcGhpY3NDb250ZXh0
M0QqIENDVGhyZWFkUHJveHk6OmNvbnRleHQoKQpAQCAtODksMTIgKzEzNCwxOCBAQCBHcmFwaGlj
c0NvbnRleHQzRCogQ0NUaHJlYWRQcm94eTo6Y29udGV4dCgpCiAKIHZvaWQgQ0NUaHJlYWRQcm94
eTo6ZmluaXNoQWxsUmVuZGVyaW5nKCkKIHsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICBBU1NFUlQoQ0NQcm94eTo6aXNNYWluVGhyZWFkKCkpOworCisgICAgLy8gTWFrZSBzdXJlIGFs
bCBHTCBkcmF3aW5nIGlzIGZpbmlzaGVkIG9uIHRoZSBpbXBsIHRocmVhZC4KKyAgICBDQ0NvbXBs
ZXRpb25FdmVudCBjb21wbGV0aW9uOworICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1Ro
cmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OmZpbmlzaEFsbFJlbmRlcmluZ09uQ0NUaHJl
YWQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pKSk7CisgICAgY29tcGxldGlv
bi53YWl0KCk7CiB9CiAKIGJvb2wgQ0NUaHJlYWRQcm94eTo6aXNTdGFydGVkKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbV9sYXllclRyZWVIb3N0SW1wbDsKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNN
YWluVGhyZWFkKCkpOworICAgIHJldHVybiBtX3N0YXJ0ZWQ7CiB9CiAKIGJvb2wgQ0NUaHJlYWRQ
cm94eTo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoKQpAQCAtMTExLDcgKzE2Miw3IEBAIGJvb2wg
Q0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoKQogICAgIC8vIE1ha2UgYSBi
bG9ja2luZyBjYWxsIHRvIGluaXRpYWxpemVMYXllclJlbmRlcmVyT25DQ1RocmVhZC4gVGhlIHJl
c3VsdHMgb2YgdGhhdCBjYWxsCiAgICAgLy8gYXJlIHB1c2hlZCBpbnRvIHRoZSBpbml0aWFsaXpl
U3VjY2VlZGVkIGFuZCBjYXBhYmlsaXRpZXMgbG9jYWwgdmFyaWFibGVzLgogICAgIENDQ29tcGxl
dGlvbkV2ZW50IGNvbXBsZXRpb247Ci0gICAgYm9vbCBpbml0aWFsaXplU3VjY2VlZGVkOworICAg
IGJvb2wgaW5pdGlhbGl6ZVN1Y2NlZWRlZCA9IGZhbHNlOwogICAgIExheWVyUmVuZGVyZXJDYXBh
YmlsaXRpZXMgY2FwYWJpbGl0aWVzOwogICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1Ro
cmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVyT25D
Q1RocmVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93
Q3Jvc3NUaHJlYWRBY2Nlc3MoY29udGV4dFB0ciksIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNv
bXBsZXRpb24pLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZpbml0aWFsaXplU3VjY2VlZGVkKSwg
QWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY2FwYWJpbGl0aWVzKSkpOwpAQCAtMTM1LDQzICsxODYs
NTcgQEAgdm9pZCBDQ1RocmVhZFByb3h5Ojpsb3NlQ29tcG9zaXRvckNvbnRleHQoaW50IG51bVRp
bWVzKQogdm9pZCBDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdCgpCiB7CiAgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAobV9jb21taXRQZW5kaW5nKQorICAgIGlmIChtX2Nv
bW1pdFJlcXVlc3RlZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgVFJBQ0VfRVZFTlQoIkNDVGhy
ZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0IiwgdGhpcywgMCk7Ci0gICAgbV9jb21taXRQZW5kaW5n
ID0gdHJ1ZTsKLSAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMs
ICZDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdE9uQ0NUaHJlYWQpKTsKKyAgICBtX2NvbW1p
dFJlcXVlc3RlZCA9IHRydWU7CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFk
VGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6dXBkYXRlU2NoZWR1bGVyU3RhdGVPbkNDVGhyZWFk
LCBtX2NvbW1pdFJlcXVlc3RlZCwgdHJ1ZSkpOwogfQogCiB2b2lkIENDVGhyZWFkUHJveHk6OnNl
dE5lZWRzQ29tbWl0QW5kUmVkcmF3KCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwot
ICAgIGlmIChtX2NvbW1pdFBlbmRpbmcpCisgICAgaWYgKG1fY29tbWl0UmVxdWVzdGVkKQogICAg
ICAgICByZXR1cm47CisgICAgbV9jb21taXRSZXF1ZXN0ZWQgPSB0cnVlOwogCiAgICAgVFJBQ0Vf
RVZFTlQoIkNDVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3IiwgdGhpcywgMCk7
Ci0gICAgbV9jb21taXRQZW5kaW5nID0gdHJ1ZTsKLSAgICBjY1RocmVhZC0+cG9zdFRhc2soY3Jl
YXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJl
ZHJhd09uQ0NUaHJlYWQpKTsKKyAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRU
YXNrKHRoaXMsICZDQ1RocmVhZFByb3h5Ojp1cGRhdGVTY2hlZHVsZXJTdGF0ZU9uQ0NUaHJlYWQs
IG1fY29tbWl0UmVxdWVzdGVkLCB0cnVlKSk7CiB9CiAKIHZvaWQgQ0NUaHJlYWRQcm94eTo6c2V0
TmVlZHNSZWRyYXcoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgY2NUaHJl
YWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6c2V0
TmVlZHNSZWRyYXdPbkNDVGhyZWFkKSk7CisgICAgaWYgKG1fY29tbWl0UmVxdWVzdGVkKSAvLyBJ
bXBsaWVzIHRoYXQgYSBjb21taXQgaXMgaW4gZmxpZ2h0LgorICAgICAgICByZXR1cm47CisgICAg
Ly8gVW5saWtlIHNldE5lZWRzQ29tbWl0IHRoYXQgdHJhY2tzIHdoZXRoZXIgYSBjb21taXQgbWVz
c2FnZSBoYXMgYmVlbiBzZW50LAorICAgIC8vIHNldE5lZWRzUmVkcmF3IGFsd2F5cyBzZW5kcyBh
IG1lc3NhZ2UgdG8gdGhlIGNvbXBvc2l0b3IgdGhyZWFkLiBUaGlzIGlzCisgICAgLy8gYmVjYXVz
ZSB0aGUgY29tcG9zaXRvciB0aHJlYWQgY2FuIGRyYXcgd2l0aG91dCB0ZWxsaW5nIHRoZSBtYWlu
CisgICAgLy8gdGhyZWFkLiBUaGlzIHNob3VsZCBub3QgYmUgbXVjaCBvZiBhIHByb2JsZW0gYmVj
YXVzZSBjYWxscyB0bworICAgIC8vIHNldE5lZWRzUmVkcmF3IG1lc3NhZ2VzIGFyZSB1bmNvbW1v
biAob25seSB0cmlnZ2VyZWQgYnkgV01fUEFJTlQvZXRjKSwKKyAgICAvLyBjb21wYXJlZCB0byBz
ZXROZWVkc0NvbW1pdEFuZFJlZHJhdyBtZXNzYWdlcy4KKyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJl
YWRQcm94eTo6c2V0TmVlZHNSZWRyYXciLCB0aGlzLCAwKTsKKyAgICBjY1RocmVhZC0+cG9zdFRh
c2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5Ojp1cGRhdGVTY2hlZHVs
ZXJTdGF0ZU9uQ0NUaHJlYWQsIGZhbHNlLCB0cnVlKSk7CiB9CiAKIHZvaWQgQ0NUaHJlYWRQcm94
eTo6c3RhcnQoKQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgLy8gQ3JlYXRl
IExheWVyVHJlZUhvc3RJbXBsLgogICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CiAg
ICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQ
cm94eTo6aW5pdGlhbGl6ZUltcGxPbkNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZj
b21wbGV0aW9uKSkpOwogICAgIGNvbXBsZXRpb24ud2FpdCgpOworCisgICAgbV9zdGFydGVkID0g
dHJ1ZTsKIH0KIAogdm9pZCBDQ1RocmVhZFByb3h5OjpzdG9wKCkKIHsKICAgICBUUkFDRV9FVkVO
VCgiQ0NUaHJlYWRQcm94eTo6c3RvcCIsIHRoaXMsIDApOwogICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CisgICAgQVNTRVJUKG1fc3RhcnRlZCk7CisKICAgICAvLyBTeW5jaHJvbm91c2x5IGRl
bGV0ZXMgdGhlIGltcGwuCiAgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKICAgICBj
Y1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5
OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZCwgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcygm
Y29tcGxldGlvbikpKTsKQEAgLTE3OSw4MiArMjQ0LDE2NyBAQCB2b2lkIENDVGhyZWFkUHJveHk6
OnN0b3AoKQogCiAgICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3RJbXBsKTsgLy8gdmVyaWZ5IHRo
YXQgdGhlIGltcGwgZGVsZXRlZC4KICAgICBtX2xheWVyVHJlZUhvc3QgPSAwOworICAgIG1fc3Rh
cnRlZCA9IGZhbHNlOwogfQogCi12b2lkIENDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVBbmRDb21t
aXRPbkNDVGhyZWFkKCkKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6ZmluaXNoQWxsUmVuZGVyaW5nT25D
Q1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbikKIHsKLSAgICBUUkFDRV9FVkVO
VCgiQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQiLCB0aGlzLCAw
KTsKKyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6ZmluaXNoQWxsUmVuZGVyaW5nT25D
Q1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7CisgICAgQVNT
RVJUKCFtX2JlZ2luRnJhbWVBbmRDb21taXRQZW5kaW5nT25DQ1RocmVhZCk7CisgICAgaWYgKG1f
cmVkcmF3UmVxdWVzdGVkT25DQ1RocmVhZCkgeworICAgICAgICBkcmF3TGF5ZXJzT25DQ1RocmVh
ZCgpOworICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5wcmVzZW50KCk7CisgICAgICAgIG1f
cmVkcmF3UmVxdWVzdGVkT25DQ1RocmVhZCA9IGZhbHNlOworICAgIH0KKyAgICBtX2xheWVyVHJl
ZUhvc3RJbXBsLT5maW5pc2hBbGxSZW5kZXJpbmcoKTsKKyAgICBjb21wbGV0aW9uLT5zaWduYWwo
KTsKK30KKwordm9pZCBDQ1RocmVhZFByb3h5OjpvYnRhaW5CZWdpbkZyYW1lQW5kQ29tbWl0VGFz
a0Zyb21DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbiwgQ0NNYWluVGhyZWFk
OjpUYXNrKiogdGFza1B0cikKK3sKKyAgICBPd25QdHI8Q0NNYWluVGhyZWFkOjpUYXNrPiB0YXNr
ID0gY3JlYXRlQmVnaW5GcmFtZUFuZENvbW1pdFRhc2tPbkNDVGhyZWFkKCk7CisgICAgKnRhc2tQ
dHIgPSB0YXNrLmxlYWtQdHIoKTsKKyAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKK30KKworUGFz
c093blB0cjxDQ01haW5UaHJlYWQ6OlRhc2s+IENDVGhyZWFkUHJveHk6OmNyZWF0ZUJlZ2luRnJh
bWVBbmRDb21taXRUYXNrT25DQ1RocmVhZCgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFk
UHJveHk6OmNyZWF0ZUJlZ2luRnJhbWVBbmRDb21taXRUYXNrT25DQ1RocmVhZCIsIHRoaXMsIDAp
OwogICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7Ci0gICAgLy8gVEVNUCBIQUNLIHNvIHdlIGNh
biBleGVyY2lzZSB0aGlzIGNvZGUgaW4gdW5pdCB0ZXN0cy4KLSAgICBDQ01haW5UaHJlYWQ6OnBv
c3RUYXNrKGNyZWF0ZU1haW5UaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5OjpiZWdpbkZy
YW1lQW5kQ29tbWl0LCAwLjApKTsKKyAgICBkb3VibGUgZnJhbWVCZWdpblRpbWUgPSBjdXJyZW50
VGltZSgpOworICAgIG1fYmVnaW5GcmFtZUFuZENvbW1pdFBlbmRpbmdPbkNDVGhyZWFkID0gdHJ1
ZTsKKworICAgIC8vIE5PVEUsIGl0IGlzIHBvc3NpYmxlIHRvIHJlY2VpZXZlIGEgcmVxdWVzdCBm
b3IgYQorICAgIC8vIGJlZ2luRnJhbWVBbmRDb21taXRPbkNDVGhyZWFkIGZyb20gZmluaXNoQWxs
UmVuZGVyaW5nIHdoaWxlIGEKKyAgICAvLyBiZWdpbkZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZCBp
cyBlbnF1ZXVlZC4gU2luY2UgQ0NNYWluVGhyZWFkIGRvZXNuJ3QKKyAgICAvLyBwcm92aWRlIGEg
dGhyZWFkc2FmZSB3YXkgdG8gY2FuY2VsIHRhc2tzLCBpdCBpcyBpbXBvcnRhbnQgdGhhdAorICAg
IC8vIGJlZ2luRnJhbWVBbmRDb21taXQgYmUgc3RydWN0dXJlZCB0byB1bmRlcnN0YW5kIHRoYXQg
aXQgbWF5IGdldCBjYWxsZWQgYXQKKyAgICAvLyBhIHBvaW50IHRoYXQgaXQgc2hvdWxkbid0LiBX
ZSBkbyB0aGlzIGJ5IGFzc2lnbmluZyBhIHNlcXVlbmNlIG51bWJlciB0bworICAgIC8vIGV2ZXJ5
IG5ldyBiZWdpbkZyYW1lQW5kQ29tbWl0IHRhc2suIFRoZW4sIGJlZ2luRnJhbWVBbmRDb21taXQg
dHJhY2tzIHRoZQorICAgIC8vIGxhc3QgZXhlY3V0ZWQgc2VxdWVuY2UgbnVtYmVyLCBkcm9wcGlu
ZyBiZWdpbkZyYW1lQW5kQ29tbWl0IHdpdGggc2VxdWVuY2UKKyAgICAvLyBudW1iZXJzIGJlbG93
IHRoZSBsYXN0IGV4ZWN1dGVkIG9uZS4KKyAgICBpbnQgdGhpc1Rhc2tTZXF1ZW5jZU51bWJlciA9
IG1fbnVtQmVnaW5GcmFtZUFuZENvbW1pdHNJc3N1ZWRPbkNDVGhyZWFkOworICAgIG1fbnVtQmVn
aW5GcmFtZUFuZENvbW1pdHNJc3N1ZWRPbkNDVGhyZWFkKys7CisgICAgcmV0dXJuIGNyZWF0ZU1h
aW5UaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0LCB0
aGlzVGFza1NlcXVlbmNlTnVtYmVyLCBmcmFtZUJlZ2luVGltZSk7CiB9CiAKLXZvaWQgQ0NUaHJl
YWRQcm94eTo6YmVnaW5GcmFtZUFuZENvbW1pdChkb3VibGUgZnJhbWVCZWdpblRpbWUpCit2b2lk
IENDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVBbmRDb21taXQoaW50IHNlcXVlbmNlTnVtYmVyLCBk
b3VibGUgZnJhbWVCZWdpblRpbWUpCiB7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6
OmJlZ2luRnJhbWVBbmRDb21taXQiLCB0aGlzLCAwKTsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwogICAgIGlmICghbV9sYXllclRyZWVIb3N0KQogICAgICAgICByZXR1cm47CiAKLSAgICBU
UkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0IiwgdGhpcywg
MCk7CisgICAgLy8gRHJvcCBiZWdpbkZyYW1lQW5kQ29tbWl0IGNhbGxzIHRoYXQgb2NjdXIgb3V0
IG9mIHNlcXVlbmNlLiBTZWUgY3JlYXRlQmVnaW5GcmFtZUFuZENvbW1pdFRhc2tPbkNDVGhyZWFk
IGZvcgorICAgIC8vIGFuIGV4cGxhbmF0aW9uIG9mIGhvdyBvdXQtb2Ytc2VxdWVuY2UgYmVnaW5G
cmFtZUFuZENvbW1pdCB0YXNrcyBjYW4gb2NjdXIuCisgICAgaWYgKHNlcXVlbmNlTnVtYmVyIDwg
bV9sYXN0RXhlY3V0ZWRCZWdpbkZyYW1lQW5kQ29tbWl0U2VxdWVuY2VOdW1iZXIpIHsKKyAgICAg
ICAgVFJBQ0VfRVZFTlQoIkVhcmx5T3V0X1N0YWxlQmVnaW5GcmFtZUFuZENvbW1pdCIsIHRoaXMs
IDApOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fbGFzdEV4ZWN1dGVkQmVnaW5GcmFt
ZUFuZENvbW1pdFNlcXVlbmNlTnVtYmVyID0gc2VxdWVuY2VOdW1iZXI7CisKKyAgICBBU1NFUlQo
bV9jb21taXRSZXF1ZXN0ZWQpOworCisgICAgLy8gRklYTUU6IHJlY3JlYXRlIHRoZSBjb250ZXh0
IGlmIGl0IHdhcyByZXF1ZXN0ZWQgYnkgdGhlIGltcGwgdGhyZWFkCiAgICAgewogICAgICAgICBU
UkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0OjphbmltYXRlQW5kTGF5b3V0IiwgdGhpcywgMCk7
CiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+YW5pbWF0ZUFuZExheW91dChmcmFtZUJlZ2luVGlt
ZSk7CiAgICAgfQogCi0gICAgbV9jb21taXRQZW5kaW5nID0gZmFsc2U7CisgICAgQVNTRVJUKG1f
bGFzdEV4ZWN1dGVkQmVnaW5GcmFtZUFuZENvbW1pdFNlcXVlbmNlTnVtYmVyID09IHNlcXVlbmNl
TnVtYmVyKTsKIAotICAgIC8vIEJsb2NraW5nIGNhbGwgdG8gQ0NUaHJlYWRQcm94eTo6cGVyZm9y
bUNvbW1pdAotICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247Ci0gICAgY2NUaHJlYWQt
PnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6Y29tbWl0
T25DQ1RocmVhZCwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29tcGxldGlvbikpKTsKLSAgICBj
b21wbGV0aW9uLndhaXQoKTsKKyAgICAvLyBDbGVhciB0aGUgY29tbWl0IGZsYWcgYWZ0ZXIgYW5p
bWF0ZUFuZExheW91dCBoZXJlIC0tLSBvYmplY3RzIHRoYXQgb25seQorICAgIC8vIGxheW91dCB3
aGVuIHBhaW50ZWQgd2lsbCB0cmlnZ2VyIGFub3RoZXIgc2V0TmVlZHNDb21taXQgaW5zaWRlCisg
ICAgLy8gdXBkYXRlTGF5ZXJzLgorICAgIG1fY29tbWl0UmVxdWVzdGVkID0gZmFsc2U7CisKKyAg
ICBtX2xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVycygpOworCisgICAgeworICAgICAgICAvLyBC
bG9ja2luZyBjYWxsIHRvIENDVGhyZWFkUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQKKyAgICAgICAg
VFJBQ0VfRVZFTlQoImNvbW1pdCIsIHRoaXMsIDApOworICAgICAgICBDQ0NvbXBsZXRpb25FdmVu
dCBjb21wbGV0aW9uOworICAgICAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRU
YXNrKHRoaXMsICZDQ1RocmVhZFByb3h5Ojpjb21taXRPbkNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhy
ZWFkQWNjZXNzKCZjb21wbGV0aW9uKSkpOworICAgICAgICBjb21wbGV0aW9uLndhaXQoKTsKKyAg
ICB9CisKKyAgICBtX2xheWVyVHJlZUhvc3QtPmNvbW1pdENvbXBsZXRlKCk7CisKKyAgICBBU1NF
UlQobV9sYXN0RXhlY3V0ZWRCZWdpbkZyYW1lQW5kQ29tbWl0U2VxdWVuY2VOdW1iZXIgPT0gc2Vx
dWVuY2VOdW1iZXIpOwogfQogCiB2b2lkIENDVGhyZWFkUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQo
Q0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24pCiB7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhy
ZWFkUHJveHk6OmJlZ2luRnJhbWVBbmRDb21taXRPbkNDVGhyZWFkIiwgdGhpcywgMCk7CiAgICAg
QVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKLSAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6
Y29tbWl0T25DQ1RocmVhZCIsIHRoaXMsIDApOwotICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmJl
Z2luQ29tbWl0KCk7Ci0gICAgewotICAgICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0
Ojpjb21taXQiLCB0aGlzLCAwKTsKLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5jb21taXRUbyht
X2xheWVyVHJlZUhvc3RJbXBsLmdldCgpKTsKKyAgICBBU1NFUlQobV9iZWdpbkZyYW1lQW5kQ29t
bWl0UGVuZGluZ09uQ0NUaHJlYWQpOworICAgIG1fYmVnaW5GcmFtZUFuZENvbW1pdFBlbmRpbmdP
bkNDVGhyZWFkID0gZmFsc2U7CisgICAgaWYgKCFtX2xheWVyVHJlZUhvc3RJbXBsKSB7CisgICAg
ICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOworICAgICAgICByZXR1cm47CiAgICAgfQorICAgIG1f
bGF5ZXJUcmVlSG9zdEltcGwtPmJlZ2luQ29tbWl0KCk7CisgICAgbV9sYXllclRyZWVIb3N0LT5j
b21taXRUbyhtX2xheWVyVHJlZUhvc3RJbXBsLmdldCgpKTsKKyAgICBtX2xheWVyVHJlZUhvc3RJ
bXBsLT5jb21taXRDb21wbGV0ZSgpOworCiAgICAgY29tcGxldGlvbi0+c2lnbmFsKCk7CiAKLSAg
ICBtX2xheWVyVHJlZUhvc3RJbXBsLT5jb21taXRDb21wbGV0ZSgpOwotICAgIHNldE5lZWRzUmVk
cmF3T25DQ1RocmVhZCgpOworICAgIGlmIChtX3JlZHJhd1JlcXVlc3RlZE9uQ0NUaHJlYWQpCisg
ICAgICAgIHNjaGVkdWxlRHJhd1Rhc2tPbkNDVGhyZWFkKCk7CiB9CiAKLXZvaWQgQ0NUaHJlYWRQ
cm94eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQoKQordm9pZCBDQ1RocmVhZFByb3h5OjpzY2hlZHVs
ZURyYXdUYXNrT25DQ1RocmVhZCgpCiB7Ci0gICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6
OmRyYXdMYXllcnNPbkNDVGhyZWFkIiwgdGhpcywgMCk7CiAgICAgQVNTRVJUKGlzSW1wbFRocmVh
ZCgpKTsKLSAgICBpZiAobV9sYXllclRyZWVIb3N0SW1wbCkKLSAgICAgICAgbV9sYXllclRyZWVI
b3N0SW1wbC0+ZHJhd0xheWVycygpOworICAgIGlmIChtX2RyYXdUYXNrUG9zdGVkT25DQ1RocmVh
ZCkKKyAgICAgICAgcmV0dXJuOworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpzY2hl
ZHVsZURyYXdUYXNrT25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChtX2xheWVyVHJl
ZUhvc3RJbXBsKTsKKyAgICBtX2RyYXdUYXNrUG9zdGVkT25DQ1RocmVhZCA9IHRydWU7CisgICAg
Y2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94
eTo6ZHJhd0xheWVyc0FuZFByZXNlbnRPbkNDVGhyZWFkKSk7CiB9CiAKLXZvaWQgQ0NUaHJlYWRQ
cm94eTo6c2V0TmVlZHNDb21taXRPbkNDVGhyZWFkKCkKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6ZHJh
d0xheWVyc0FuZFByZXNlbnRPbkNDVGhyZWFkKCkKIHsKLSAgICBUUkFDRV9FVkVOVCgiQ0NUaHJl
YWRQcm94eTo6c2V0TmVlZHNDb21taXRPbkNDVGhyZWFkIiwgdGhpcywgMCk7CisgICAgVFJBQ0Vf
RVZFTlQoIkNDVGhyZWFkUHJveHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkIiwgdGhpcywgMCk7CiAg
ICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKLSAgICBBU1NFUlQobV9sYXllclRyZWVIb3N0SW1w
bCk7Ci0gICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQsIHNlZSBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc0MTcKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdEltcGwpCisgICAgICAgIHJldHVybjsKKworICAg
IGRyYXdMYXllcnNPbkNDVGhyZWFkKCk7CisgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+cHJlc2Vu
dCgpOworICAgIG1fcmVkcmF3UmVxdWVzdGVkT25DQ1RocmVhZCA9IGZhbHNlOworICAgIG1fZHJh
d1Rhc2tQb3N0ZWRPbkNDVGhyZWFkID0gZmFsc2U7CiB9CiAKLXZvaWQgQ0NUaHJlYWRQcm94eTo6
c2V0TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhyZWFkKCkKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6
ZHJhd0xheWVyc09uQ0NUaHJlYWQoKQogewotICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5
OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICBUUkFD
RV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQiLCB0aGlzLCAwKTsK
ICAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOwogICAgIEFTU0VSVChtX2xheWVyVHJlZUhvc3RJ
bXBsKTsKLSAgICAvLyBURU1QIEhBQ0sgc28gd2UgY2FuIGV4ZXJjaXNlIHRoaXMgY29kZSBpbiB1
bml0IHRlc3RzLgotICAgIENDTWFpblRocmVhZDo6cG9zdFRhc2soY3JlYXRlTWFpblRocmVhZFRh
c2sodGhpcywgJkNDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVBbmRDb21taXQsIDAuMCkpOworCisg
ICAgbV9sYXllclRyZWVIb3N0SW1wbC0+ZHJhd0xheWVycygpOworICAgIEFTU0VSVCghbV9sYXll
clRyZWVIb3N0SW1wbC0+aXNDb250ZXh0TG9zdCgpKTsKIH0KIAotdm9pZCBDQ1RocmVhZFByb3h5
OjpzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQoKQordm9pZCBDQ1RocmVhZFByb3h5Ojp1cGRhdGVT
Y2hlZHVsZXJTdGF0ZU9uQ0NUaHJlYWQoYm9vbCBjb21taXRSZXF1ZXN0ZWQsIGJvb2wgcmVkcmF3
UmVxdWVzdGVkKQogewotICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpzZXROZWVkc1Jl
ZHJhd09uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKLSAgICAvLyBURU1QIEhBQ0sgc28gd2UgY2FuIGV4
ZXJjaXNlIHRoaXMgY29kZSBpbiB1bml0IHRlc3RzLgotICAgIGRyYXdMYXllcnNPbkNDVGhyZWFk
KCk7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OnVwZGF0ZVNjaGVkdWxlclN0YXRl
T25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7CisgICAg
QVNTRVJUKG1fbGF5ZXJUcmVlSG9zdEltcGwpOworCisgICAgLy8gRklYTUU6IHVzZSBDQ1NjaGVk
dWxlciB0byBkZWNpZGUgd2hlbiB0byBtYW5hZ2UgdGhlIGNvbnZlcnNpb24gb2YgdGhpcworICAg
IC8vIGNvbW1pdCByZXF1ZXN0IGludG8gYW4gYWN0dWFsIGNyZWF0ZUJlZ2luRnJhbWVBbmRDb21t
aXRUYXNrT25DQ1RocmVhZCBjYWxsLgorICAgIG1fcmVkcmF3UmVxdWVzdGVkT25DQ1RocmVhZCB8
PSByZWRyYXdSZXF1ZXN0ZWQ7CisgICAgaWYgKCFtX2JlZ2luRnJhbWVBbmRDb21taXRQZW5kaW5n
T25DQ1RocmVhZCkgeworICAgICAgICBDQ01haW5UaHJlYWQ6OnBvc3RUYXNrKGNyZWF0ZUJlZ2lu
RnJhbWVBbmRDb21taXRUYXNrT25DQ1RocmVhZCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIC8vIElmIG5vIGNvbW1pdCBpcyBwZW5kaW5nLCBidXQgYSByZWRyYXcgaXMgcmVxdWVz
dGVkLCB0aGVuIHBvc3QgYSByZWRyYXcgcmlnaHQgYXdheQorICAgIGlmIChtX3JlZHJhd1JlcXVl
c3RlZE9uQ0NUaHJlYWQpCisgICAgICAgIHNjaGVkdWxlRHJhd1Rhc2tPbkNDVGhyZWFkKCk7CiB9
CiAKIHZvaWQgQ0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUltcGxPbkNDVGhyZWFkKENDQ29tcGxl
dGlvbkV2ZW50KiBjb21wbGV0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oCmluZGV4IDI0Njc3
MjQwY2FhYTY5MTI2NzZkN2VkZmUwZmFiMmNjMjEyNjJlYzIuLmQzYjQ4N2ZlYzQwZDQwMTU5MDdh
OWY4MDk2Y2Q5ZGJjZTJkMWIxOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmgKQEAgLTI3LDYg
KzI3LDcgQEAKIAogI2luY2x1ZGUgImNjL0NDQ29tcGxldGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAi
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgorI2luY2x1ZGUgImNjL0NDTWFpblRocmVhZC5oIgog
I2luY2x1ZGUgImNjL0NDUHJveHkuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKQEAgLTU4
LDI4ICs1OSwzNiBAQCBwcml2YXRlOgogICAgIGV4cGxpY2l0IENDVGhyZWFkUHJveHkoQ0NMYXll
clRyZWVIb3N0Kik7CiAKICAgICAvLyBDYWxsZWQgb24gQ0NNYWluVGhyZWFkCi0gICAgdm9pZCBi
ZWdpbkZyYW1lQW5kQ29tbWl0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CisgICAgdm9pZCBiZWdp
bkZyYW1lQW5kQ29tbWl0KGludCBzZXF1ZW5jZU51bWJlciwgZG91YmxlIGZyYW1lQmVnaW5UaW1l
KTsKIAogICAgIC8vIENhbGxlZCBvbiBDQ1RocmVhZAotICAgIHZvaWQgYmVnaW5GcmFtZUFuZENv
bW1pdE9uQ0NUaHJlYWQoKTsKKyAgICBQYXNzT3duUHRyPENDTWFpblRocmVhZDo6VGFzaz4gY3Jl
YXRlQmVnaW5GcmFtZUFuZENvbW1pdFRhc2tPbkNDVGhyZWFkKCk7CisgICAgdm9pZCBvYnRhaW5C
ZWdpbkZyYW1lQW5kQ29tbWl0VGFza0Zyb21DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCosIEND
TWFpblRocmVhZDo6VGFzayoqKTsKICAgICB2b2lkIGNvbW1pdE9uQ0NUaHJlYWQoQ0NDb21wbGV0
aW9uRXZlbnQqKTsKKyAgICB2b2lkIGRyYXdMYXllcnNBbmRQcmVzZW50T25DQ1RocmVhZCgpOwog
ICAgIHZvaWQgZHJhd0xheWVyc09uQ0NUaHJlYWQoKTsKKyAgICB2b2lkIGRyYXdMYXllcnNBbmRS
ZWFkYmFja09uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqLCBib29sKiBzdWNjZXNzLCB2b2lk
KiBwaXhlbHMsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2b2lkIGZpbmlzaEFsbFJlbmRlcmluZ09u
Q0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsKICAgICB2b2lkIGluaXRpYWxpemVJbXBsT25D
Q1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCopOwogICAgIHZvaWQgaW5pdGlhbGl6ZUxheWVyUmVu
ZGVyZXJPbkNDVGhyZWFkKEdyYXBoaWNzQ29udGV4dDNEKiwgQ0NDb21wbGV0aW9uRXZlbnQqLCBi
b29sKiBpbml0aWFsaXplU3VjY2VlZGVkLCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKik7CiAg
ICAgdm9pZCBzZXROZWVkc0NvbW1pdE9uQ0NUaHJlYWQoKTsKLSAgICB2b2lkIHNldE5lZWRzQ29t
bWl0QW5kUmVkcmF3T25DQ1RocmVhZCgpOwotICAgIHZvaWQgc2V0TmVlZHNSZWRyYXdPbkNDVGhy
ZWFkKCk7CisgICAgdm9pZCB1cGRhdGVTY2hlZHVsZXJTdGF0ZU9uQ0NUaHJlYWQoYm9vbCBjb21t
aXRSZXF1ZXN0ZWQsIGJvb2wgcmVkcmF3UmVxdWVzdGVkKTsKICAgICB2b2lkIGxheWVyVHJlZUhv
c3RDbG9zZWRPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50Kik7Ci0KLSAgICAvLyBVc2VkIG9u
IG1haW4tdGhyZWFkIG9ubHkuCi0gICAgYm9vbCBtX2NvbW1pdFBlbmRpbmc7CisgICAgdm9pZCBz
Y2hlZHVsZURyYXdUYXNrT25DQ1RocmVhZCgpOwogCiAgICAgLy8gQWNjZXNzZWQgb24gbWFpbiB0
aHJlYWQgb25seS4KKyAgICBib29sIG1fY29tbWl0UmVxdWVzdGVkOwogICAgIENDTGF5ZXJUcmVl
SG9zdCogbV9sYXllclRyZWVIb3N0OwogICAgIExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMgbV9s
YXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzTWFpblRocmVhZENvcHk7CisgICAgYm9vbCBtX3N0YXJ0
ZWQ7CisgICAgaW50IG1fbGFzdEV4ZWN1dGVkQmVnaW5GcmFtZUFuZENvbW1pdFNlcXVlbmNlTnVt
YmVyOwogCi0gICAgLy8gVXNlZCBvbiB0aGUgQ0NUaHJlYWQsIGJ1dCBjaGVja2VkIG9uIG1haW4g
dGhyZWFkIGR1cmluZyBpbml0aWFsaXphdGlvbi9zaHV0ZG93bi4KKyAgICAvLyBVc2VkIG9uIHRo
ZSBDQ1RocmVhZCBvbmx5CiAgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IG1fbGF5ZXJU
cmVlSG9zdEltcGw7CisgICAgaW50IG1fbnVtQmVnaW5GcmFtZUFuZENvbW1pdHNJc3N1ZWRPbkND
VGhyZWFkOworICAgIGJvb2wgbV9iZWdpbkZyYW1lQW5kQ29tbWl0UGVuZGluZ09uQ0NUaHJlYWQ7
CisgICAgYm9vbCBtX2RyYXdUYXNrUG9zdGVkT25DQ1RocmVhZDsKKyAgICBib29sIG1fcmVkcmF3
UmVxdWVzdGVkT25DQ1RocmVhZDsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5k
ZXggZjljZGNhOTdhYWYyNzFhYTA2NzM2YTM1YWUyMmI4YzdiMmFmZTFkOS4uMDE2NzdhNTRmZWRi
Y2RjN2E2YjMwODRiZWVkNGY5MDEyYzI1YTFiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNSBAQAorMjAxMS0wOS0xNSAgTmF0IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBNYWtlIENDVGhyZWFkUHJveHkgZHJhdworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc0MTcKKworICAgICAg
ICBEaXNhYmxlIENDTGF5ZXJUcmVlSG9zdFRlc3QgdGVtcG9yYXJpbHkuIFdpbGwgcmUtZW5hYmxl
CisgICAgICAgIHdpdGggaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3
NDE4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB0
ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcDoKKwogMjAxMS0wOS0xNiAgTmF0IER1Y2EgIDxu
ZHVjYUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBDcmVhdGUgV2ViR0wgbGF5
ZXIgZm9yIGdyYXBoaWNzIGNvbnRleHRzIG9uIGRlbWFuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKaW5kZXggZmY0ZmZiZTY1
MTg0NGY1Y2E1ZjI5NzE4MTRmYWM2NTkyNzhhMzAxZC4uMzM0MDUwZGI1ZDk2Y2Y3ZjIzZDUyZTJi
ZTg4NmU0MTYzMzZiMjcyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCkBAIC0xNzAsNiArMTcwLDEwIEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgfQogCisjaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICB2aXJ0
dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGUoKSB7IH0KKyNlbmRpZgorCiBwcml2YXRlOgogICAg
IGV4cGxpY2l0IE1vY2tMYXllclRyZWVIb3N0Q2xpZW50KFRlc3RIb29rcyogdGVzdEhvb2tzKSA6
IG1fdGVzdEhvb2tzKHRlc3RIb29rcykgeyB9CiAKQEAgLTIwOCw3ICsyMTIsMTQgQEAgcHJvdGVj
dGVkOgogICAgICAgICA6IG1fYmVnaW5uaW5nKGZhbHNlKQogICAgICAgICAsIG1fZW5kV2hlbkJl
Z2luUmV0dXJucyhmYWxzZSkKICAgICAgICAgLCBtX3J1bm5pbmcoZmFsc2UpCi0gICAgICAgICwg
bV90aW1lZE91dChmYWxzZSkgeyB9CisgICAgICAgICwgbV90aW1lZE91dChmYWxzZSkKKyAgICB7
CisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgICAgICBtX3NldHRpbmdzLmVuYWJs
ZUNvbXBvc2l0b3JUaHJlYWQgPSB0cnVlOworI2Vsc2UKKyAgICAgICAgbV9zZXR0aW5ncy5lbmFi
bGVDb21wb3NpdG9yVGhyZWFkID0gZmFsc2U7CisjZW5kaWYKKyAgICB9CiAKICAgICB2b2lkIGRv
QmVnaW5UZXN0KCk7CiAKQEAgLTI3MCw2ICsyODEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIHRl
c3QtPmVuZFRlc3QoKTsKICAgICB9CiAKKyAgICBDQ1NldHRpbmdzIG1fc2V0dGluZ3M7CiAgICAg
T3duUHRyPE1vY2tMYXllclRyZWVIb3N0Q2xpZW50PiBtX2NsaWVudDsKICAgICBSZWZQdHI8Q0NM
YXllclRyZWVIb3N0PiBtX2xheWVyVHJlZUhvc3Q7CiAKQEAgLTI4NywxMCArMjk5LDggQEAgdm9p
ZCBDQ0xheWVyVHJlZUhvc3RUZXN0Ojpkb0JlZ2luVGVzdCgpCiAgICAgbV9ydW5uaW5nID0gdHJ1
ZTsKICAgICBtX2NsaWVudCA9IE1vY2tMYXllclRyZWVIb3N0Q2xpZW50OjpjcmVhdGUodGhpcyk7
CiAKLSAgICBDQ1NldHRpbmdzIHNldHRpbmdzOwotICAgIHNldHRpbmdzLmVuYWJsZUNvbXBvc2l0
b3JUaHJlYWQgPSB0cnVlOwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiByb290TGF5ZXI7Ci0g
ICAgbV9sYXllclRyZWVIb3N0ID0gTW9ja0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSh0aGlzLCBtX2Ns
aWVudC5nZXQoKSwgcm9vdExheWVyLCBzZXR0aW5ncyk7CisgICAgbV9sYXllclRyZWVIb3N0ID0g
TW9ja0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSh0aGlzLCBtX2NsaWVudC5nZXQoKSwgcm9vdExheWVy
LCBtX3NldHRpbmdzKTsKICAgICBBU1NFUlQobV9sYXllclRyZWVIb3N0KTsKIAogICAgIG1fYmVn
aW5uaW5nID0gdHJ1ZTsKQEAgLTU0NSw5ICs1NTUsMTAgQEAgcHJpdmF0ZToKIH07CiBURVNUX0Yo
Q0NMYXllclRyZWVIb3N0VGVzdFNldE5lZWRzUmVkcmF3LCBydW4pCiB7CisgICAgQ0NTZXR0aW5n
cyBzZXRpbmdzOwogICAgIHJ1blRlc3QoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UKIAotI2VuZGlm
IC8vIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlU3luY2hyb25pemVyVGVzdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcAppbmRleCA4YWRm
NDc2OTlkNDg3MGRkNTQ5N2E4MTUyYTNkNGViMGNjZWIzZDViLi5jMzdkZTczNjI3NjY5ZjkwZTZm
YzcxY2VjZDY2MjI5NjliZWM1MzJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcApAQCAtMjgsMTIgKzI4LDI5IEBACiAK
ICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIK
KyNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KIAogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSB7CiAKK2NsYXNzIFNjb3BlZFNldElt
cGxUaHJlYWQgeworcHVibGljOgorICAgIFNjb3BlZFNldEltcGxUaHJlYWQoKQorICAgIHsKKyNp
Zm5kZWYgTkRFQlVHCisgICAgICAgIENDUHJveHk6OnNldEltcGxUaHJlYWQodHJ1ZSk7CisjZW5k
aWYKKyAgICB9CisgICAgflNjb3BlZFNldEltcGxUaHJlYWQoKQorICAgIHsKKyNpZm5kZWYgTkRF
QlVHCisgICAgICAgIENDUHJveHk6OnNldEltcGxUaHJlYWQoZmFsc2UpOworI2VuZGlmCisgICAg
fQorfTsKKwogY2xhc3MgTW9ja0NDTGF5ZXJJbXBsIDogcHVibGljIENDTGF5ZXJJbXBsIHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNb2NrQ0NMYXllckltcGw+IGNyZWF0ZShpbnQg
bGF5ZXJJZCkKQEAgLTExNiw2ICsxMzMsNyBAQCB2b2lkIGV4cGVjdFRyZWVzQXJlSWRlbnRpY2Fs
KExheWVyQ2hyb21pdW0qIGxheWVyLCBDQ0xheWVySW1wbCogY2NMYXllcikKIC8vIENvbnN0cnVj
dHMgYSB2ZXJ5IHNpbXBsZSB0cmVlIGFuZCBzeW5jaHJvbml6ZXMgaXQgd2l0aG91dCB0cnlpbmcg
dG8gcmV1c2UgYW55IHByZWV4aXN0aW5nIGxheWVycy4KIFRFU1QoVHJlZVN5bmNocm9uaXplclRl
c3QsIHN5bmNTaW1wbGVUcmVlRnJvbUVtcHR5KQogeworICAgIFNjb3BlZFNldEltcGxUaHJlYWQg
aW1wbDsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXJUcmVlUm9vdCA9IExheWVyQ2hy
b21pdW06OmNyZWF0ZSgwKTsKICAgICBsYXllclRyZWVSb290LT5hZGRDaGlsZChMYXllckNocm9t
aXVtOjpjcmVhdGUoMCkpOwogICAgIGxheWVyVHJlZVJvb3QtPmFkZENoaWxkKExheWVyQ2hyb21p
dW06OmNyZWF0ZSgwKSk7CkBAIC0xMjgsNiArMTQ2LDcgQEAgVEVTVChUcmVlU3luY2hyb25pemVy
VGVzdCwgc3luY1NpbXBsZVRyZWVGcm9tRW1wdHkpCiAvLyBDb25zdHJ1Y3RzIGEgdmVyeSBzaW1w
bGUgdHJlZSBhbmQgc3luY2hyb25pemVzIGl0IGF0dGVtcHRpbmcgdG8gcmV1c2Ugc29tZSBsYXll
cnMKIFRFU1QoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNTaW1wbGVUcmVlUmV1c2luZ0xheWVy
cykKIHsKKyAgICBTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CiAgICAgVmVjdG9yPGludD4gY2NM
YXllckRlc3RydWN0aW9uTGlzdDsKIAogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBsYXllclRy
ZWVSb290ID0gTW9ja0xheWVyQ2hyb21pdW06OmNyZWF0ZSgmY2NMYXllckRlc3RydWN0aW9uTGlz
dCk7CkBAIC0xNTMsNiArMTcyLDcgQEAgVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY1Np
bXBsZVRyZWVSZXVzaW5nTGF5ZXJzKQogCiBURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5j
U2ltcGxlVHJlZUFuZFByb3BlcnRpZXMpCiB7CisgICAgU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBs
OwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBsYXllclRyZWVSb290ID0gTGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKDApOwogICAgIGxheWVyVHJlZVJvb3QtPmFkZENoaWxkKExheWVyQ2hyb21pdW06
OmNyZWF0ZSgwKSk7CiAgICAgbGF5ZXJUcmVlUm9vdC0+YWRkQ2hpbGQoTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKDApKTsKQEAgLTE4NCw2ICsyMDQsNyBAQCBURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0
LCBzeW5jU2ltcGxlVHJlZUFuZFByb3BlcnRpZXMpCiAKIFRFU1QoVHJlZVN5bmNocm9uaXplclRl
c3QsIHJldXNlQ0NMYXllcnNBZnRlclN0cnVjdHVyYWxDaGFuZ2UpCiB7CisgICAgU2NvcGVkU2V0
SW1wbFRocmVhZCBpbXBsOwogICAgIFZlY3RvcjxpbnQ+IGNjTGF5ZXJEZXN0cnVjdGlvbkxpc3Q7
CiAKICAgICAvLyBTZXQgdXAgYSB0cmVlIHdpdGggdGhpcyBzb3J0IG9mIHN0cnVjdHVyZToKQEAg
LTIzMCw2ICsyNTEsNyBAQCBURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCByZXVzZUNDTGF5ZXJz
QWZ0ZXJTdHJ1Y3R1cmFsQ2hhbmdlKQogLy8gQ29uc3RydWN0cyBhIHZlcnkgc2ltcGxlIHRyZWUs
IHN5bmNocm9uaXplcyBpdCwgdGhlbiBzeW5jaHJvbml6ZXMgdG8gYSB0b3RhbGx5IG5ldyB0cmVl
LiBBbGwgbGF5ZXJzIGZyb20gdGhlIG9sZCB0cmVlIHNob3VsZCBiZSBkZWxldGVkLgogVEVTVChU
cmVlU3luY2hyb25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVUaGVuRGVzdHJveSkKIHsKKyAgICBT
Y29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CiAgICAgVmVjdG9yPGludD4gY2NMYXllckRlc3RydWN0
aW9uTGlzdDsKIAogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBvbGRMYXllclRyZWVSb290ID0g
TW9ja0xheWVyQ2hyb21pdW06OmNyZWF0ZSgmY2NMYXllckRlc3RydWN0aW9uTGlzdCk7CkBAIC0y
NjAsNiArMjgyLDcgQEAgVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVU
aGVuRGVzdHJveSkKIC8vIENvbnN0cnVjdHMrc3luY3MgYSB0cmVlIHdpdGggbWFzaywgcmVwbGlj
YSwgYW5kIHJlcGxpY2EgbWFzayBsYXllcnMuCiBURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBz
eW5jTWFza1JlcGxpY2FBbmRSZXBsaWNhTWFza0xheWVycykKIHsKKyAgICBTY29wZWRTZXRJbXBs
VGhyZWFkIGltcGw7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVyVHJlZVJvb3QgPSBM
YXllckNocm9taXVtOjpjcmVhdGUoMCk7CiAgICAgbGF5ZXJUcmVlUm9vdC0+YWRkQ2hpbGQoTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKDApKTsKICAgICBsYXllclRyZWVSb290LT5hZGRDaGlsZChMYXll
ckNocm9taXVtOjpjcmVhdGUoMCkpOwo=
</data>
<flag name="review"
          id="105550"
          type_id="1"
          status="+"
          setter="jamesr"
    />
          </attachment>
      

    </bug>

</bugzilla>