<?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>93146</bug_id>
          
          <creation_ts>2012-08-03 11:42:28 -0700</creation_ts>
          <short_desc>Coordinated Graphics: Enable threaded/IPC animations</short_desc>
          <delta_ts>2012-10-26 10:18:01 -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>Layout and Rendering</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>93147</dependson>
    
    <dependson>93284</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Noam Rosenthal">noam</reporter>
          <assigned_to name="Noam Rosenthal">noam</assigned_to>
          <cc>d.nomiyama</cc>
    
    <cc>dongseong.hwang</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jturcotte</cc>
    
    <cc>kenneth</cc>
    
    <cc>kim.1.gronholm</cc>
    
    <cc>ossy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zeno</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>687000</commentid>
    <comment_count>0</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-08-03 11:42:28 -0700</bug_when>
    <thetext>Currently animations work nicely for requestAnimationFrame, however, CSS transitions/animations are blocked when there is a lengthy rendering, layout or JavaScript execution.
By allowing animation frames to be rendered in parallel to normal rendering, we can achieve smoother transitions in some cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691010</commentid>
    <comment_count>1</comment_count>
      <attachid>157349</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-08-08 17:40:23 -0700</bug_when>
    <thetext>Created attachment 157349
WIP patch (not for review)

This is turning out pretty tricky, but possible.
The idea is to allow animations to continue flowing while the main thread in the web process is busy with javascript or software rendering, and to continue to vsync-based message passing, by signaling to the animation thread directly from the CoreIPC::Connection&apos;s work queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743797</commentid>
    <comment_count>2</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-10-16 19:25:26 -0700</bug_when>
    <thetext>Looks good! This patch makes CSS animation smoother.

However, I have few questions.

1. Why did you decide Web process makes progress animations instead of UI process. If we pass a GraphicsLayer::addAnimation message to UI process, LayerTreeRenderer can make progress animations like PageClientQWidget::syncLayers() or AcceleratedCompositingContext::renderLayersToWindow(). I think the later approach can reuse existing code and reduce animation IPC messages and may make css animations slightly faster than threaded animations.

2. I think you may decide threaded animations in Web process because of accurate callback for requestAnimationFrame. Can&apos;t Messages::LayerTreeCoordinator::RenderNextFrame() satisfy the requirements for requestAnimationFrame?

I&apos;m looking forward Coordinated Graphics running animations smoothly regardless of Web process&apos;s main thread :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743828</commentid>
    <comment_count>3</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-10-16 21:06:17 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Looks good! This patch makes CSS animation smoother.
&gt; 
&gt; However, I have few questions.
&gt; 
&gt; 1. Why did you decide Web process makes progress animations instead of UI process. If we pass a GraphicsLayer::addAnimation message to UI process, LayerTreeRenderer can make progress animations like PageClientQWidget::syncLayers() or AcceleratedCompositingContext::renderLayersToWindow(). I think the later approach can reuse existing code and reduce animation IPC messages and may make css animations slightly faster than threaded animations.

Yes, that&apos;s they way it was before. The problem (which is solvable, but tricky) is in synchronization.
We&apos;ve had cases where, for example, an animated layer stops being composited, and then it gets repainted with the rest of the &quot;non-composited&quot; content.
The issue is that if painting the non-composited contents takes too much time, there might be a few extra animation frames in the UI process, which would go beyond the end point of the animation. If we can fix that, we can bring back UI-side animations...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744021</commentid>
    <comment_count>4</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-10-17 01:49:58 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Yes, that&apos;s they way it was before. The problem (which is solvable, but tricky) is in synchronization.

Thanks for explanation! I understand.

&gt; We&apos;ve had cases where, for example, an animated layer stops being composited, and then it gets repainted with the rest of the &quot;non-composited&quot; content.
&gt; The issue is that if painting the non-composited contents takes too much time, there might be a few extra animation frames in the UI process, which would go beyond the end point of the animation. If we can fix that, we can bring back UI-side animations...

I agree that we can get succinct code and relatively fast css animations by threaded animations.

I also understand why chromium compositor has duplicated code to make progress animations in both main thread and impl thread after reading your explanation.
Chromium Compositor(a.k.a CC) delegates impl thread to make progress animations in default (like UI-side animations). The code is in CCLayerTreeHostImpl::animateLayers()
However, When CC must synchronize animations between both thread, main thread makes progress animaitions (like threaded animations). The code is in CCLayerTreeHost::animateLayers()

I prefer threaded animations in now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744545</commentid>
    <comment_count>5</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-10-17 13:16:30 -0700</bug_when>
    <thetext>&gt; I prefer threaded animations in now.

btw I change my mind often on this, and am not 100% certain myself. I&apos;m working on those two tracks in parallel right now - I might have a solution to the sync problem but I&apos;m not sure it&apos;s completely great yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746693</commentid>
    <comment_count>6</comment_count>
      <attachid>169706</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-10-19 15:21:05 -0700</bug_when>
    <thetext>Created attachment 169706
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746723</commentid>
    <comment_count>7</comment_count>
      <attachid>169706</attachid>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2012-10-19 15:57:17 -0700</bug_when>
    <thetext>Comment on attachment 169706
Patch

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

Just giving a quick look and informal review. But I&apos;ve liked what I&apos;ve seen so far.

&gt; Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:396
&gt; +    m_animations.add(GraphicsLayerAnimation(keyframesName, valueList, boxSize, anim, WTF::currentTime() - timeOffset, listsMatch));

I think you should rename &quot;timeOffset&quot; to &quot;startTime&quot; to make it clear (like the other change).

&gt; Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:519
&gt; +    switch (type)    {

Style: extra spaces between ) and {.

&gt; Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:522
&gt; +    case TimingFunction::CubicBezierFunction: {

Style: I don&apos;t think we should use brackets for each case. The same for the other places.

&gt; Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:601
&gt; +    for (size_t i = 0 ; i &lt; keyframes.size(); ++i) {

Style: extra space between 0 and ;.

&gt; Source/WebKit2/UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp:147
&gt; +void LayerTreeCoordinatorProxy::setLayerAnimations(uint32_t id, const GraphicsLayerAnimations&amp; animations)

Instead of uint32_t, you should use WebLayerID (to match its header).

&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:417
&gt; +    // in a layer with opacity 0.

Sounds great, but I was wondering if this optimization is a real win (or how bad we get if we just skip it).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746726</commentid>
    <comment_count>8</comment_count>
      <attachid>169706</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-10-19 16:01:05 -0700</bug_when>
    <thetext>Comment on attachment 169706
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:396
&gt;&gt; +    m_animations.add(GraphicsLayerAnimation(keyframesName, valueList, boxSize, anim, WTF::currentTime() - timeOffset, listsMatch));
&gt; 
&gt; I think you should rename &quot;timeOffset&quot; to &quot;startTime&quot; to make it clear (like the other change).

In this case, though, it is the timeOffset :)

&gt;&gt; Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:522
&gt;&gt; +    case TimingFunction::CubicBezierFunction: {
&gt; 
&gt; Style: I don&apos;t think we should use brackets for each case. The same for the other places.

We have to, because we declare new variables.

&gt;&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:417
&gt;&gt; +    // in a layer with opacity 0.
&gt; 
&gt; Sounds great, but I was wondering if this optimization is a real win (or how bad we get if we just skip it).

It&apos;s a real win. Issue is the flush itself is where most of the time goes - software rendering. So if we lock animations during software rendering, we don&apos;t achieve much...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746730</commentid>
    <comment_count>9</comment_count>
      <attachid>169716</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-10-19 16:09:58 -0700</bug_when>
    <thetext>Created attachment 169716
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746846</commentid>
    <comment_count>10</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-10-19 19:14:37 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 169706 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=169706&amp;action=review
&gt; &gt;&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:417
&gt; &gt;&gt; +    // in a layer with opacity 0.
&gt; &gt; 
&gt; &gt; Sounds great, but I was wondering if this optimization is a real win (or how bad we get if we just skip it).
&gt; 
&gt; It&apos;s a real win. Issue is the flush itself is where most of the time goes - software rendering. So if we lock animations during software rendering, we don&apos;t achieve much...

I like this approach! I could not imagine this synchronization idea. I have few questions :)

canUnlockBeforeFlush seems to be true for only opacity animation. Can canUnlockBeforeFlush be true for transform and filter animations? I think both animations is regardless of layout.
IMHO we can unlock if layout did not occur.


If we do not unlock here, LayerTreeRenderer::flushLayerChanges() will unlock by itself. There is very small time interval between unlock in LayerTreeRenderer::flushLayerChanges() and lock in next LayerTreeCoordinator::performScheduledLayerFlush().
This means if canUnlockBeforeFlush discourages unlocking for transform animations, this patch can not make transform animations be smoother than previous implementation. Is my understanding right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746974</commentid>
    <comment_count>11</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-10-20 08:09:34 -0700</bug_when>
    <thetext>&gt; canUnlockBeforeFlush seems to be true for only opacity animation. Can canUnlockBeforeFlush be true for transform and filter animations? I think both animations is regardless of layout.

canUnlockBeforeFlush has nothing to do with the type of animation. It has to do with the current pending changes in the frame - if all the current pending changes in the frame are invisible (are inside a 0-opacity layer, are in a layer that&apos;s outside the screen, etc.), it&apos;s ok to continue animation while rendering.

&gt; IMHO we can unlock if layout did not occur.
&gt; 
&gt; 
&gt; If we do not unlock here, LayerTreeRenderer::flushLayerChanges() will unlock by itself. There is very small time interval between unlock in LayerTreeRenderer::flushLayerChanges() and lock in next LayerTreeCoordinator::performScheduledLayerFlush().
&gt; This means if canUnlockBeforeFlush discourages unlocking for transform animations, this patch can not make transform animations be smoother than previous implementation. Is my understanding right?

See above :)
This will lock only when there are actual frame changes, not during every transform animation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747036</commentid>
    <comment_count>12</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-10-20 20:26:27 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; canUnlockBeforeFlush has nothing to do with the type of animation. It has to do with the current pending changes in the frame - if all the current pending changes in the frame are invisible (are inside a 0-opacity layer, are in a layer that&apos;s outside the screen, etc.), it&apos;s ok to continue animation while rendering.

Oops, I misunderstood. Thanks for answering my foolish question :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747038</commentid>
    <comment_count>13</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-10-20 20:34:22 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; canUnlockBeforeFlush has nothing to do with the type of animation. It has to do with the current pending changes in the frame - if all the current pending changes in the frame are invisible (are inside a 0-opacity layer, are in a layer that&apos;s outside the screen, etc.), it&apos;s ok to continue animation while rendering.
&gt; 
&gt; Oops, I misunderstood. Thanks for answering my foolish question :)
Always feel free to ask! Your feedback is highly valued and very far from foolish :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747574</commentid>
    <comment_count>14</comment_count>
      <attachid>169716</attachid>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2012-10-22 08:35:27 -0700</bug_when>
    <thetext>Comment on attachment 169716
Patch

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

&gt; Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:396
&gt; +    m_animations.add(GraphicsLayerAnimation(keyframesName, valueList, boxSize, anim, WTF::currentTime() - timeOffset, listsMatch));

Also asked on IRC: is it intentional the calc of currentTime() - offset only on addAnimation? What about pauseAnimation and others that use offset? Should them remain unchanged? I&apos;m still a bit confused with the meaning of this &quot;offset&quot; we&apos;re passing on each of those functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747593</commentid>
    <comment_count>15</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-10-22 09:10:16 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 169716 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=169716&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:396
&gt; &gt; +    m_animations.add(GraphicsLayerAnimation(keyframesName, valueList, boxSize, anim, WTF::currentTime() - timeOffset, listsMatch));
&gt; 
&gt; Also asked on IRC: is it intentional the calc of currentTime() - offset only on addAnimation? What about pauseAnimation and others that use offset? Should them remain unchanged? I&apos;m still a bit confused with the meaning of this &quot;offset&quot; we&apos;re passing on each of those functions.

In this patch it&apos;s just a copy of what was happening before wrt offsets. I think we should fix the readability issues around offsets and pause in another patch :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749011</commentid>
    <comment_count>16</comment_count>
      <attachid>169716</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-10-23 14:47:04 -0700</bug_when>
    <thetext>Comment on attachment 169716
Patch

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

&gt; Source/WebCore/platform/graphics/GraphicsLayerAnimation.h:48
&gt; +    void setState(AnimationState s, double pauseTime = 0)

pauseTime? when to pause?

&gt; Source/WebCore/platform/graphics/GraphicsLayerAnimation.h:61
&gt; +    bool listsMatch() const { return m_listsMatch; }

I dont understand what this represents</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749020</commentid>
    <comment_count>17</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-10-23 14:51:03 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 169716 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=169716&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/GraphicsLayerAnimation.h:48
&gt; &gt; +    void setState(AnimationState s, double pauseTime = 0)
&gt; 
&gt; pauseTime? when to pause?
Time when the animation was paused.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/GraphicsLayerAnimation.h:61
&gt; &gt; +    bool listsMatch() const { return m_listsMatch; }
&gt; 
&gt; I dont understand what this represents

This was there before... it&apos;s about whether the transform-operation lists for the keyframes match. I can rename in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749026</commentid>
    <comment_count>18</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-10-23 14:58:52 -0700</bug_when>
    <thetext>Should I rename those two things before commiting? I can&apos;t think of better names right now...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749040</commentid>
    <comment_count>19</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-10-23 15:07:51 -0700</bug_when>
    <thetext>Rename later then</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749051</commentid>
    <comment_count>20</comment_count>
      <attachid>169716</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-23 15:19:49 -0700</bug_when>
    <thetext>Comment on attachment 169716
Patch

Clearing flags on attachment: 169716

Committed r132275: &lt;http://trac.webkit.org/changeset/132275&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749052</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-23 15:19:54 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749079</commentid>
    <comment_count>22</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-10-23 15:55:20 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #16)
&gt; &gt; (From update of attachment 169716 [details] [details])
&gt; &gt; &gt; Source/WebCore/platform/graphics/GraphicsLayerAnimation.h:61
&gt; &gt; &gt; +    bool listsMatch() const { return m_listsMatch; }
&gt; &gt; 
&gt; &gt; I dont understand what this represents
&gt; 
&gt; This was there before... it&apos;s about whether the transform-operation lists for the keyframes match. I can rename in a separate patch.

I think listsMatch is better than listIndex :)

bool GraphicsLayerCA::createTransformAnimationsFromKeyframes(const KeyframeValueList&amp; valueList, const Animation* animation, const String&amp; animationName, double timeOffset, const IntSize&amp; boxSize)
{
    ...
    int listIndex = validateTransformOperations(valueList, hasBigRotation);
    ...
}

How about validationFailed?

Anyway, it is landed! very good :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749146</commentid>
    <comment_count>23</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-10-23 17:21:00 -0700</bug_when>
    <thetext>I think this made the bots cry... trying to fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749162</commentid>
    <comment_count>24</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-10-23 17:39:48 -0700</bug_when>
    <thetext>Reopening, build breakage from mid-air collision</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749164</commentid>
    <comment_count>25</comment_count>
      <attachid>170279</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-10-23 17:42:03 -0700</bug_when>
    <thetext>Created attachment 170279
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749195</commentid>
    <comment_count>26</comment_count>
      <attachid>170283</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-10-23 18:26:30 -0700</bug_when>
    <thetext>Created attachment 170283
Followup patch: animations stay locked when they&apos;re not supposed to</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749292</commentid>
    <comment_count>27</comment_count>
      <attachid>170279</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-23 21:03:19 -0700</bug_when>
    <thetext>Comment on attachment 170279
Patch for landing

Clearing flags on attachment: 170279

Committed r132296: &lt;http://trac.webkit.org/changeset/132296&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749325</commentid>
    <comment_count>28</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-10-23 21:39:47 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; (From update of attachment 170279 [details])
&gt; Clearing flags on attachment: 170279
&gt; 
&gt; Committed r132296: &lt;http://trac.webkit.org/changeset/132296&gt;

Could you check the tree after landing please next time to avoid
similar breakages? The build was broken for 6 hours, 20 commits and
40 patch stucked in the EWS queue. To find newer and newer regressions
during build breakage isn&apos;t a good joke. Fortunately there isn&apos;t a new
regression now, but it could have been.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749332</commentid>
    <comment_count>29</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-10-23 21:48:46 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; (In reply to comment #27)
&gt; &gt; (From update of attachment 170279 [details] [details])
&gt; &gt; Clearing flags on attachment: 170279
&gt; &gt; 
&gt; &gt; Committed r132296: &lt;http://trac.webkit.org/changeset/132296&gt;
&gt; 
&gt; Could you check the tree after landing please next time to avoid
&gt; similar breakages? The build was broken for 6 hours, 20 commits and
&gt; 40 patch stucked in the EWS queue. To find newer and newer regressions
&gt; during build breakage isn&apos;t a good joke. Fortunately there isn&apos;t a new
&gt; regression now, but it could have been.

I checked the tree right away, took an hour to fix it, and it took the cq 4 hours to process the fix. Usually cq is a bit faster but I had an issue with manual landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749981</commentid>
    <comment_count>30</comment_count>
      <attachid>170283</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-24 13:33:26 -0700</bug_when>
    <thetext>Comment on attachment 170283
Followup patch: animations stay locked when they&apos;re not supposed to

Clearing flags on attachment: 170283

Committed r132392: &lt;http://trac.webkit.org/changeset/132392&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749982</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-24 13:33:33 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752123</commentid>
    <comment_count>32</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2012-10-26 09:17:02 -0700</bug_when>
    <thetext>The leaves demo is jerky as hell since this patch.
There seem to be a loop where serviceScriptedAnimations ultimately causes a scheduleLayerFlush and this locks/unlocks the animations on every frame.

There could be a way to break the loop if no requestAnimationFrame callback was registered, but that would leave pages using both RAF and CSS animations with jerkiness, which goes against the principle of RAF.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752156</commentid>
    <comment_count>33</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-10-26 10:18:01 -0700</bug_when>
    <thetext>(In reply to comment #32)
&gt; The leaves demo is jerky as hell since this patch.
Hmm.., I definitely tested that one and it looks far from jerky.

&gt; There seem to be a loop where serviceScriptedAnimations ultimately causes a scheduleLayerFlush and this locks/unlocks the animations on every frame.
&gt; 
&gt; There could be a way to break the loop if no requestAnimationFrame callback was registered, but that would leave pages using both RAF and CSS animations with jerkiness, which goes against the principle of RAF.

Thank you, created bug https://bugs.webkit.org/show_bug.cgi?id=100536 for the jerkiness issue.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157349</attachid>
            <date>2012-08-08 17:40:23 -0700</date>
            <delta_ts>2012-10-19 15:20:58 -0700</delta_ts>
            <desc>WIP patch (not for review)</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>55256</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">Y29tbWl0IDA4ODAzNmEyNWRkNDU0OWEzZjUyY2IwMDJlYzNlOGJmYTNhNWY2OTMKQXV0aG9yOiBO
bydhbSBSb3NlbnRoYWwgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KRGF0ZTogICBXZWQgQXVn
IDggMTA6MzA6NDcgMjAxMiAtMDcwMAoKICAgIFRocmVhZGVkIGFuaW1hdGlvbnMgV0lQCgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9uLmNwcAppbmRleCBk
Mzk3YWUyLi4yOWE0NDA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmlt
YXRpb24vQW5pbWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRp
b24vQW5pbWF0aW9uLmNwcApAQCAtMTAwLDYgKzEwMCwxNSBAQCBBbmltYXRpb24mIEFuaW1hdGlv
bjo6b3BlcmF0b3I9KGNvbnN0IEFuaW1hdGlvbiYgbykKICAgICByZXR1cm4gKnRoaXM7CiB9CiAK
K1Bhc3NSZWZQdHI8QW5pbWF0aW9uPiBBbmltYXRpb246Omlzb2xhdGVkQ29weSgpIGNvbnN0Cit7
CisgICAgUmVmUHRyPEFuaW1hdGlvbj4gYW5pbWF0aW9uID0gQW5pbWF0aW9uOjpjcmVhdGUodGhp
cyk7CisgICAgYW5pbWF0aW9uLT5zZXROYW1lKG5hbWUoKS5pc29sYXRlZENvcHkoKSk7CisgICAg
aWYgKGlzVGltaW5nRnVuY3Rpb25TZXQoKSkKKyAgICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdG
dW5jdGlvbih0aW1pbmdGdW5jdGlvbigpLT5pc29sYXRlZENvcHkoKSk7CisgICAgcmV0dXJuIGFu
aW1hdGlvbjsKK30KKwogQW5pbWF0aW9uOjp+QW5pbWF0aW9uKCkKIHsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuaW1hdGlvbi9BbmltYXRpb24uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2FuaW1hdGlvbi9BbmltYXRpb24uaAppbmRleCBiNWRhOTkwLi4zMDAy
ZTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0
aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvbi5o
CkBAIC00MSw2ICs0MSw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxBbmltYXRp
b24+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBBbmltYXRpb24pOyB9CiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8QW5pbWF0aW9uPiBjcmVhdGUoY29uc3QgQW5pbWF0aW9uKiBvKSB7IHJl
dHVybiBhZG9wdFJlZihuZXcgQW5pbWF0aW9uKCpvKSk7IH0KIAorICAgIFBhc3NSZWZQdHI8QW5p
bWF0aW9uPiBpc29sYXRlZENvcHkoKSBjb25zdDsKKwogICAgIGJvb2wgaXNEZWxheVNldCgpIGNv
bnN0IHsgcmV0dXJuIG1fZGVsYXlTZXQ7IH0KICAgICBib29sIGlzRGlyZWN0aW9uU2V0KCkgY29u
c3QgeyByZXR1cm4gbV9kaXJlY3Rpb25TZXQ7IH0KICAgICBib29sIGlzRHVyYXRpb25TZXQoKSBj
b25zdCB7IHJldHVybiBtX2R1cmF0aW9uU2V0OyB9CkBAIC0xMTksNiArMTIxLDcgQEAgcHVibGlj
OgogICAgIEVBbmltUGxheVN0YXRlIHBsYXlTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19j
YXN0PEVBbmltUGxheVN0YXRlPihtX3BsYXlTdGF0ZSk7IH0KICAgICBDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eTsgfQogICAgIGNvbnN0IFBhc3NSZWZQ
dHI8VGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90aW1p
bmdGdW5jdGlvbjsgfQorICAgIGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiBnZXRUaW1pbmdGdW5jdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fdGltaW5nRnVuY3Rpb24uZ2V0KCk7IH0KICAgICBBbmltYXRp
b25Nb2RlIGFuaW1hdGlvbk1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KIAogICAgIHZv
aWQgc2V0RGVsYXkoZG91YmxlIGMpIHsgbV9kZWxheSA9IGM7IG1fZGVsYXlTZXQgPSB0cnVlOyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRpb24vVGltaW5nRnVu
Y3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuaW1hdGlvbi9UaW1pbmdGdW5jdGlv
bi5oCmluZGV4IGQ2YzgzMzYuLmNhODYxZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2FuaW1hdGlvbi9UaW1pbmdGdW5jdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2FuaW1hdGlvbi9UaW1pbmdGdW5jdGlvbi5oCkBAIC00Niw2ICs0Niw4IEBAIHB1Ymxp
YzoKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUaW1pbmdGdW5jdGlv
biYgb3RoZXIpID0gMDsKIAorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxUaW1pbmdGdW5jdGlvbj4g
aXNvbGF0ZWRDb3B5KCkgY29uc3QgPSAwOworCiBwcm90ZWN0ZWQ6CiAgICAgVGltaW5nRnVuY3Rp
b24oVGltaW5nRnVuY3Rpb25UeXBlIHR5cGUpCiAgICAgICAgIDogbV90eXBlKHR5cGUpCkBAIC02
OCw3ICs3MCwxMiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gb3RoZXIuaXNMaW5l
YXJUaW1pbmdGdW5jdGlvbigpOwogICAgIH0KLSAgICAKKworICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxUaW1pbmdGdW5jdGlvbj4gaXNvbGF0ZWRDb3B5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBjcmVhdGUoKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgTGluZWFyVGltaW5nRnVuY3Rp
b24oKQogICAgICAgICA6IFRpbWluZ0Z1bmN0aW9uKExpbmVhckZ1bmN0aW9uKQpAQCAtMTA5LDcg
KzExNiwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBjb25zdCBDdWJpY0JlemllclRpbWlu
Z0Z1bmN0aW9uKiBkdGYgPSBjcmVhdGUoKS5sZWFrUmVmKCk7CiAgICAgICAgIHJldHVybiBkdGY7
CiAgICAgfQotICAgIAorCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFRpbWluZ0Z1bmN0aW9uPiBp
c29sYXRlZENvcHkoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZSh4MSgpLCB5
MSgpLCB4MigpLCB5MigpKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgQ3ViaWNCZXppZXJUaW1p
bmdGdW5jdGlvbihkb3VibGUgeDEgPSAwLjI1LCBkb3VibGUgeTEgPSAwLjEsIGRvdWJsZSB4MiA9
IDAuMjUsIGRvdWJsZSB5MiA9IDEuMCkKICAgICAgICAgOiBUaW1pbmdGdW5jdGlvbihDdWJpY0Jl
emllckZ1bmN0aW9uKQpAQCAtMTQ2LDcgKzE1OCwxMiBAQCBwdWJsaWM6CiAgICAgCiAgICAgaW50
IG51bWJlck9mU3RlcHMoKSBjb25zdCB7IHJldHVybiBtX3N0ZXBzOyB9CiAgICAgYm9vbCBzdGVw
QXRTdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RlcEF0U3RhcnQ7IH0KLSAgICAKKworICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxUaW1pbmdGdW5jdGlvbj4gaXNvbGF0ZWRDb3B5KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBjcmVhdGUobnVtYmVyT2ZTdGVwcygpLCBzdGVwQXRTdGFydCgp
KTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgU3RlcHNUaW1pbmdGdW5jdGlvbihpbnQgc3RlcHMs
IGJvb2wgc3RlcEF0U3RhcnQpCiAgICAgICAgIDogVGltaW5nRnVuY3Rpb24oU3RlcHNGdW5jdGlv
bikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
TGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIu
aAppbmRleCAxNTU2Y2U4Li5kYzY3YmJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCkBAIC03NSw3ICs3NSw3IEBAIHB1YmxpYzoKIAog
ICAgIGZsb2F0IGtleVRpbWUoKSBjb25zdCB7IHJldHVybiBtX2tleVRpbWU7IH0KICAgICBjb25z
dCBUaW1pbmdGdW5jdGlvbiogdGltaW5nRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3RpbWlu
Z0Z1bmN0aW9uLmdldCgpOyB9Ci0gICAgdmlydHVhbCBBbmltYXRpb25WYWx1ZSogY2xvbmUoKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCBBbmltYXRpb25WYWx1ZSogaXNvbGF0ZWRDb3B5KCkgY29u
c3QgPSAwOwogCiBwcml2YXRlOgogICAgIGZsb2F0IG1fa2V5VGltZTsKQEAgLTkwLDcgKzkwLDcg
QEAgcHVibGljOgogICAgICAgICAsIG1fdmFsdWUodmFsdWUpCiAgICAgewogICAgIH0KLSAgICB2
aXJ0dWFsIEFuaW1hdGlvblZhbHVlKiBjbG9uZSgpIGNvbnN0IHsgcmV0dXJuIG5ldyBGbG9hdEFu
aW1hdGlvblZhbHVlKCp0aGlzKTsgfQorICAgIHZpcnR1YWwgQW5pbWF0aW9uVmFsdWUqIGlzb2xh
dGVkQ29weSgpIGNvbnN0IHsgcmV0dXJuIG5ldyBGbG9hdEFuaW1hdGlvblZhbHVlKGtleVRpbWUo
KSwgdmFsdWUoKSwgdGltaW5nRnVuY3Rpb24oKSA/IHRpbWluZ0Z1bmN0aW9uKCktPmlzb2xhdGVk
Q29weSgpIDogMCk7IH0KIAogICAgIGZsb2F0IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1
ZTsgfQogCkBAIC0xMDcsNyArMTA3LDExIEBAIHB1YmxpYzoKICAgICAgICAgaWYgKHZhbHVlKQog
ICAgICAgICAgICAgbV92YWx1ZSA9ICp2YWx1ZTsKICAgICB9Ci0gICAgdmlydHVhbCBBbmltYXRp
b25WYWx1ZSogY2xvbmUoKSBjb25zdCB7IHJldHVybiBuZXcgVHJhbnNmb3JtQW5pbWF0aW9uVmFs
dWUoKnRoaXMpOyB9CisgICAgdmlydHVhbCBBbmltYXRpb25WYWx1ZSogaXNvbGF0ZWRDb3B5KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgY29weSA9IG1fdmFsdWUu
aXNvbGF0ZWRDb3B5KCk7CisgICAgICAgIHJldHVybiBuZXcgVHJhbnNmb3JtQW5pbWF0aW9uVmFs
dWUoa2V5VGltZSgpLCAmY29weSwgdGltaW5nRnVuY3Rpb24oKSA/IHRpbWluZ0Z1bmN0aW9uKCkt
Pmlzb2xhdGVkQ29weSgpIDogMCk7CisgICAgfQogCiAgICAgY29uc3QgVHJhbnNmb3JtT3BlcmF0
aW9ucyogdmFsdWUoKSBjb25zdCB7IHJldHVybiAmbV92YWx1ZTsgfQogCkBAIC0xMjUsNyArMTI5
LDcgQEAgcHVibGljOgogICAgICAgICBpZiAodmFsdWUpCiAgICAgICAgICAgICBtX3ZhbHVlID0g
KnZhbHVlOwogICAgIH0KLSAgICB2aXJ0dWFsIEFuaW1hdGlvblZhbHVlKiBjbG9uZSgpIGNvbnN0
IHsgcmV0dXJuIG5ldyBGaWx0ZXJBbmltYXRpb25WYWx1ZSgqdGhpcyk7IH0KKyAgICB2aXJ0dWFs
IEFuaW1hdGlvblZhbHVlKiBpc29sYXRlZENvcHkoKSBjb25zdCB7IHJldHVybiBuZXcgRmlsdGVy
QW5pbWF0aW9uVmFsdWUoa2V5VGltZSgpLCB2YWx1ZSgpLCB0aW1pbmdGdW5jdGlvbigpID8gdGlt
aW5nRnVuY3Rpb24oKS0+aXNvbGF0ZWRDb3B5KCkgOiAwKTsgfQogCiAgICAgY29uc3QgRmlsdGVy
T3BlcmF0aW9ucyogdmFsdWUoKSBjb25zdCB7IHJldHVybiAmbV92YWx1ZTsgfQogCkBAIC0xNDgs
NyArMTUyLDcgQEAgcHVibGljOgogICAgICAgICA6IG1fcHJvcGVydHkob3RoZXIucHJvcGVydHko
KSkKICAgICB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3RoZXIubV92YWx1ZXMu
c2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBtX3ZhbHVlcy5hcHBlbmQob3RoZXIubV92YWx1ZXNb
aV0tPmNsb25lKCkpOworICAgICAgICAgICAgbV92YWx1ZXMuYXBwZW5kKG90aGVyLm1fdmFsdWVz
W2ldLT5pc29sYXRlZENvcHkoKSk7CiAgICAgfQogCiAgICAgfktleWZyYW1lVmFsdWVMaXN0KCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5
ZXJBbmltYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NMYXllckFuaW1hdGlvbi5jcHAKaW5kZXggZTA4MTNkZi4uZTliYzIwYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckFuaW1hdGlvbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckFu
aW1hdGlvbi5jcHAKQEAgLTE1NSwxMyArMTU1LDEzIEBAIHN0YXRpYyBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBhcHBseVRyYW5zZm9ybUFuaW1hdGlvbihjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiBm
CiB9CiAKIAotR3JhcGhpY3NMYXllckFuaW1hdGlvbjo6R3JhcGhpY3NMYXllckFuaW1hdGlvbihj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiBrZXlmcmFtZXMsIGNv
bnN0IEludFNpemUmIGJveFNpemUsIGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBkb3VibGUg
dGltZU9mZnNldCwgYm9vbCBsaXN0c01hdGNoKQorR3JhcGhpY3NMYXllckFuaW1hdGlvbjo6R3Jh
cGhpY3NMYXllckFuaW1hdGlvbihjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEtleWZyYW1lVmFs
dWVMaXN0JiBrZXlmcmFtZXMsIGNvbnN0IEludFNpemUmIGJveFNpemUsIGNvbnN0IEFuaW1hdGlv
biogYW5pbWF0aW9uLCBkb3VibGUgc3RhcnRUaW1lLCBib29sIGxpc3RzTWF0Y2gpCiAgICAgOiBt
X2tleWZyYW1lcyhrZXlmcmFtZXMpCiAgICAgLCBtX2JveFNpemUoYm94U2l6ZSkKLSAgICAsIG1f
YW5pbWF0aW9uKEFuaW1hdGlvbjo6Y3JlYXRlKGFuaW1hdGlvbikpCisgICAgLCBtX2FuaW1hdGlv
bihhbmltYXRpb24tPmlzb2xhdGVkQ29weSgpKQogICAgICwgbV9uYW1lKG5hbWUpCiAgICAgLCBt
X2xpc3RzTWF0Y2gobGlzdHNNYXRjaCkKLSAgICAsIG1fc3RhcnRUaW1lKFdURjo6Y3VycmVudFRp
bWUoKSAtIHRpbWVPZmZzZXQpCisgICAgLCBtX3N0YXJ0VGltZShzdGFydFRpbWUpCiAgICAgLCBt
X3BhdXNlVGltZSgwKQogICAgICwgbV9zdGF0ZShQbGF5aW5nU3RhdGUpCiB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQW5pbWF0aW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQW5pbWF0
aW9uLmgKaW5kZXggZTU4Mjc5Yy4uZjcyYmQ3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckFuaW1hdGlvbi5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJBbmltYXRpb24uaApAQCAtNDEs
NiArNDEsMTcgQEAgcHVibGljOgogICAgIEdyYXBoaWNzTGF5ZXJBbmltYXRpb24oKQogICAgICAg
ICA6IG1fa2V5ZnJhbWVzKEFuaW1hdGVkUHJvcGVydHlJbnZhbGlkKQogICAgIHsgfQorICAgIEdy
YXBoaWNzTGF5ZXJBbmltYXRpb24oY29uc3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbiYgb3RoZXIp
CisgICAgICAgIDogbV9rZXlmcmFtZXMob3RoZXIubV9rZXlmcmFtZXMpCisgICAgICAgICwgbV9i
b3hTaXplKG90aGVyLm1fYm94U2l6ZSkKKyAgICAgICAgLCBtX2FuaW1hdGlvbihvdGhlci5tX2Fu
aW1hdGlvbi0+aXNvbGF0ZWRDb3B5KCkpCisgICAgICAgICwgbV9uYW1lKG90aGVyLm1fbmFtZSkK
KyAgICAgICAgLCBtX2xpc3RzTWF0Y2gob3RoZXIubV9saXN0c01hdGNoKQorICAgICAgICAsIG1f
c3RhcnRUaW1lKG90aGVyLm1fc3RhcnRUaW1lKQorICAgICAgICAsIG1fcGF1c2VUaW1lKG90aGVy
Lm1fcGF1c2VUaW1lKQorICAgICAgICAsIG1fc3RhdGUob3RoZXIubV9zdGF0ZSkKKyAgICB7IH0K
KwogICAgIEdyYXBoaWNzTGF5ZXJBbmltYXRpb24oY29uc3QgU3RyaW5nJiwgY29uc3QgS2V5ZnJh
bWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRTaXplJiwgY29uc3QgQW5pbWF0aW9uKiwgZG91YmxlLCBi
b29sKTsKICAgICB2b2lkIGFwcGx5KENsaWVudCopOwogICAgIHZvaWQgcGF1c2UoZG91YmxlKTsK
QEAgLTU3LDcgKzY4LDYgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8QW5pbWF0aW9uPiBtX2FuaW1h
dGlvbjsKICAgICBTdHJpbmcgbV9uYW1lOwogICAgIGJvb2wgbV9saXN0c01hdGNoOwotICAgIGJv
b2wgbV9oYXNCaWdSb3RhdGlvbjsKICAgICBkb3VibGUgbV9zdGFydFRpbWU7CiAgICAgZG91Ymxl
IG1fcGF1c2VUaW1lOwogICAgIEFuaW1hdGlvblN0YXRlIG1fc3RhdGU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcAppbmRleCBmMjA1MWVjLi4yOThlOThjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKQEAgLTM3OCw3ICszNzgs
NyBAQCBib29sIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjphZGRBbmltYXRpb24oY29uc3Qg
S2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdAogICAgIGlmICh2YWx1ZUxpc3QucHJvcGVydHko
KSA9PSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKQogICAgICAgICBsaXN0c01hdGNo
ID0gdmFsaWRhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKHZhbHVlTGlzdCwgaGFzQmlnUm90YXRpb24p
ID49IDA7CiAKLSAgICBtX2FuaW1hdGlvbnMuYWRkKEdyYXBoaWNzTGF5ZXJBbmltYXRpb24oa2V5
ZnJhbWVzTmFtZSwgdmFsdWVMaXN0LCBib3hTaXplLCBhbmltLCB0aW1lT2Zmc2V0LCBsaXN0c01h
dGNoKSk7CisgICAgbV9hbmltYXRpb25zLmFkZChHcmFwaGljc0xheWVyQW5pbWF0aW9uKGtleWZy
YW1lc05hbWUsIHZhbHVlTGlzdCwgYm94U2l6ZSwgYW5pbSwgV1RGOjpjdXJyZW50VGltZSgpIC0g
dGltZU9mZnNldCwgbGlzdHNNYXRjaCkpOwogICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVy
TGF5ZXI6OkFuaW1hdGlvbkNoYW5nZSk7CiAgICAgbV9hbmltYXRpb25TdGFydGVkVGltZXIuc3Rh
cnRPbmVTaG90KDApOwogICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9JZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlv
bi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9JZGVudGl0
eVRyYW5zZm9ybU9wZXJhdGlvbi5oCmluZGV4IGUzZWNjYzEuLmQzNmE3ZTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvSWRlbnRpdHlUcmFu
c2Zvcm1PcGVyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
cmFuc2Zvcm1zL0lkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uLmgKQEAgLTM1LDcgKzM1LDEyIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSWRlbnRpdHlUcmFu
c2Zvcm1PcGVyYXRpb24oKSk7CiAgICAgfQotICAgICAgICAKKworICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IGlzb2xhdGVkQ29weSgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gY3JlYXRlKCk7CisgICAgfQorCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9v
bCBpc0lkZW50aXR5KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgT3BlcmF0
aW9uVHlwZSBnZXRPcGVyYXRpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gSURFTlRJVFk7IH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvTWF0
cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RyYW5zZm9ybXMvTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24uaAppbmRleCBiMDU3N2E2
Li43MGY5NWQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
cmFuc2Zvcm1zL01hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlv
bi5oCkBAIC0zOSw2ICszOSwxMSBAQCBwdWJsaWM6CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBtYXRyaXgoKSBjb25zdCB7cmV0dXJuIG1fbWF0cml4OyB9CiAKKyAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiBpc29sYXRlZENvcHkoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGNyZWF0ZShtYXRyaXgoKSk7CisgICAgfQorCiBwcml2YXRlOiAgICAKICAg
ICB2aXJ0dWFsIGJvb2wgaXNJZGVudGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF0cml4LmlzSWRl
bnRpdHkoKTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90cmFuc2Zvcm1zL01hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uaApp
bmRleCA0NWY5ZWE3Li4wNTRjMzlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90cmFuc2Zvcm1zL01hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvTWF0cml4VHJhbnNmb3Jt
T3BlcmF0aW9uLmgKQEAgLTQ0LDYgKzQ0LDExIEBAIHB1YmxpYzoKIAogICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IG1hdHJpeCgpIGNvbnN0IHsgcmV0dXJuIFRyYW5zZm9ybWF0aW9uTWF0cml4KG1f
YSwgbV9iLCBtX2MsIG1fZCwgbV9lLCBtX2YpOyB9CiAKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
VHJhbnNmb3JtT3BlcmF0aW9uPiBpc29sYXRlZENvcHkoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGNyZWF0ZShtYXRyaXgoKSk7CisgICAgfQorCiBwcml2YXRlOgogICAgIHZpcnR1YWwg
Ym9vbCBpc0lkZW50aXR5KCkgY29uc3QgeyByZXR1cm4gbV9hID09IDEgJiYgbV9iID09IDAgJiYg
bV9jID09IDAgJiYgbV9kID09IDEgJiYgbV9lID09IDAgJiYgbV9mID09IDA7IH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9QZXJzcGVj
dGl2ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdHJhbnNmb3Jtcy9QZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbi5oCmluZGV4IDM3MzBk
NDIuLjUzYWM1YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RyYW5zZm9ybXMvUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1BlcnNwZWN0aXZlVHJhbnNmb3Jt
T3BlcmF0aW9uLmgKQEAgLTQxLDYgKzQxLDExIEBAIHB1YmxpYzoKIAogICAgIExlbmd0aCBwZXJz
cGVjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcDsgfQogICAgIAorICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IGlzb2xhdGVkQ29weSgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gY3JlYXRlKHBlcnNwZWN0aXZlKCkpOworICAgIH0KKwogcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIGJvb2wgaXNJZGVudGl0eSgpIGNvbnN0IHsgcmV0dXJuICFmbG9hdFZhbHVlRm9y
TGVuZ3RoKG1fcCwgMSk7IH0KICAgICB2aXJ0dWFsIE9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9u
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIFBFUlNQRUNUSVZFOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1JvdGF0ZVRyYW5zZm9ybU9wZXJh
dGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9Sb3Rh
dGVUcmFuc2Zvcm1PcGVyYXRpb24uaAppbmRleCAwZDQ5NWM1Li4yNWRmZGZjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1JvdGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Ry
YW5zZm9ybXMvUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgKQEAgLTQ2LDYgKzQ2LDExIEBAIHB1
YmxpYzoKICAgICBkb3VibGUgeigpIGNvbnN0IHsgcmV0dXJuIG1fejsgfQogICAgIGRvdWJsZSBh
bmdsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5nbGU7IH0KIAorICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxUcmFuc2Zvcm1PcGVyYXRpb24+IGlzb2xhdGVkQ29weSgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gY3JlYXRlKHgoKSwgeSgpLCB6KCksIGFuZ2xlKCksIGdldE9wZXJhdGlvblR5cGUo
KSk7CisgICAgfQorCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc0lkZW50aXR5KCkgY29u
c3QgeyByZXR1cm4gbV9hbmdsZSA9PSAwOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvU2NhbGVUcmFuc2Zv
cm1PcGVyYXRpb24uaAppbmRleCA3MzQzZDA5Li40ZjYzYjc5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1NjYWxlVHJhbnNmb3JtT3BlcmF0
aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9T
Y2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5oCkBAIC00NSw2ICs0NSwxMSBAQCBwdWJsaWM6CiAgICAg
ZG91YmxlIHkoKSBjb25zdCB7IHJldHVybiBtX3k7IH0KICAgICBkb3VibGUgeigpIGNvbnN0IHsg
cmV0dXJuIG1fejsgfQogCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlv
bj4gaXNvbGF0ZWRDb3B5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBjcmVhdGUoeCgp
LCB5KCksIHooKSwgZ2V0T3BlcmF0aW9uVHlwZSgpKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAg
dmlydHVhbCBib29sIGlzSWRlbnRpdHkoKSBjb25zdCB7IHJldHVybiBtX3ggPT0gMSAmJiAgbV95
ID09IDEgJiYgIG1feiA9PSAxOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9Ta2V3VHJhbnNmb3JtT3BlcmF0
aW9uLmgKaW5kZXggZGRkZTk4Ni4uOGRkNTY2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9Ta2V3VHJhbnNmb3JtT3BlcmF0aW9uLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9Ta2V3VHJhbnNm
b3JtT3BlcmF0aW9uLmgKQEAgLTM5LDYgKzM5LDExIEBAIHB1YmxpYzoKICAgICBkb3VibGUgYW5n
bGVYKCkgY29uc3QgeyByZXR1cm4gbV9hbmdsZVg7IH0KICAgICBkb3VibGUgYW5nbGVZKCkgY29u
c3QgeyByZXR1cm4gbV9hbmdsZVk7IH0KIAorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxUcmFuc2Zv
cm1PcGVyYXRpb24+IGlzb2xhdGVkQ29weSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
Y3JlYXRlKGFuZ2xlWCgpLCBhbmdsZVkoKSwgZ2V0T3BlcmF0aW9uVHlwZSgpKTsKKyAgICB9CisK
IHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzSWRlbnRpdHkoKSBjb25zdCB7IHJldHVybiBt
X2FuZ2xlWCA9PSAwICYmIG1fYW5nbGVZID09IDA7IH0KICAgICB2aXJ0dWFsIE9wZXJhdGlvblR5
cGUgZ2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1P
cGVyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMv
VHJhbnNmb3JtT3BlcmF0aW9uLmgKaW5kZXggMWU3ZWJiMC4uZjRkZmFkMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1PcGVy
YXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1z
L1RyYW5zZm9ybU9wZXJhdGlvbi5oCkBAIC0yOCwxMyArMjgsMTMgQEAKICNpbmNsdWRlICJGbG9h
dFNpemUuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBD
U1MgVHJhbnNmb3JtcyAobWF5IGJlY29tZSBwYXJ0IG9mIENTUzMpCiAKLWNsYXNzIFRyYW5zZm9y
bU9wZXJhdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPFRyYW5zZm9ybU9wZXJhdGlvbj4geworY2xh
c3MgVHJhbnNmb3JtT3BlcmF0aW9uIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFRyYW5z
Zm9ybU9wZXJhdGlvbj4gewogcHVibGljOgogICAgIGVudW0gT3BlcmF0aW9uVHlwZSB7CiAgICAg
ICAgIFNDQUxFX1gsIFNDQUxFX1ksIFNDQUxFLCAKQEAgLTYyLDYgKzYyLDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgYm9vbCBhcHBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEZsb2F0
U2l6ZSYgYm9yZGVyQm94U2l6ZSkgY29uc3QgPSAwOwogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRy
PFRyYW5zZm9ybU9wZXJhdGlvbj4gYmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9t
LCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5ID0gZmFsc2UpID0gMDsKKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiBpc29sYXRlZENvcHkoKSBj
b25zdCA9IDA7CiAKICAgICB2aXJ0dWFsIE9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgp
IGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgaXNTYW1lVHlwZShjb25zdCBUcmFuc2Zvcm1P
cGVyYXRpb24mKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb25zLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybU9w
ZXJhdGlvbnMuaAppbmRleCBlMjM2ZTEyLi43YzNjNDY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybU9wZXJhdGlvbnMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9y
bU9wZXJhdGlvbnMuaApAQCAtNzEsNiArNzEsMTMgQEAgcHVibGljOgogICAgIHNpemVfdCBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRpb25zLnNpemUoKTsgfQogICAgIGNvbnN0IFRyYW5z
Zm9ybU9wZXJhdGlvbiogYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBpbmRleCA8IG1f
b3BlcmF0aW9ucy5zaXplKCkgPyBtX29wZXJhdGlvbnMuYXQoaW5kZXgpLmdldCgpIDogMDsgfQog
CisgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBpc29sYXRlZENvcHkoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9vcGVyYXRpb25zLnNpemUoKTsgKytpKQorICAgICAgICAgICAgb3Bl
cmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKG1fb3BlcmF0aW9uc1tpXS0+aXNvbGF0ZWRDb3B5
KCkpOworICAgICAgICByZXR1cm4gb3BlcmF0aW9uczsKKyAgICB9CiBwcml2YXRlOgogICAgIFZl
Y3RvcjxSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiA+IG1fb3BlcmF0aW9uczsKIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5z
bGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdHJhbnNmb3Jtcy9UcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaAppbmRleCBmYzJiYzFm
Li5lM2Q0ODI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
cmFuc2Zvcm1zL1RyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0
aW9uLmgKQEAgLTUxLDYgKzUxLDExIEBAIHB1YmxpYzoKICAgICBMZW5ndGggeSgpIGNvbnN0IHsg
cmV0dXJuIG1feTsgfQogICAgIExlbmd0aCB6KCkgY29uc3QgeyByZXR1cm4gbV96OyB9CiAKKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiBpc29sYXRlZENvcHkoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZSh4KCksIHkoKSwgeigpLCBnZXRPcGVy
YXRpb25UeXBlKCkpOworICAgIH0KKwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNJZGVu
dGl0eSgpIGNvbnN0IHsgcmV0dXJuICFmbG9hdFZhbHVlRm9yTGVuZ3RoKG1feCwgMSkgJiYgIWZs
b2F0VmFsdWVGb3JMZW5ndGgobV95LCAxKSAmJiAhZmxvYXRWYWx1ZUZvckxlbmd0aChtX3osIDEp
OyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2Vi
S2l0Mi9UYXJnZXQucHJpCmluZGV4IGFlMDE4OTQuLjQ2YmIzOWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQpAQCAt
MzUwLDYgKzM1MCw3IEBAIEhFQURFUlMgKz0gXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oIFwKICAgICBXZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRpbGUuaCBcCiAgICAg
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0
b3IuaCBcCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFk
ZWRBbmltYXRpb25Db29yZGluYXRvci5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvVGFwSGln
aGxpZ2h0Q29udHJvbGxlci5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXku
aCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmggXApAQCAtNzE0LDYgKzcx
NSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkVGlsZS5jcHAgXAogICAgIFdlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNw
cCBcCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRB
bmltYXRpb25Db29yZGluYXRvci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9UYXBIaWdo
bGlnaHRDb250cm9sbGVyLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhv
c3QuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXkuY3BwIFwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHAKaW5kZXggZWY5NzJm
My4uZTZmZGZiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eS5jcHAKQEAgLTE0OCw2ICsxNDgsMTIgQEAgdm9pZCBMYXllclRyZWVDb29yZGluYXRvclBy
b3h5OjpzZXRMYXllckFuaW1hdGVkVHJhbnNmb3JtKHVpbnQzMl90IGlkLCBjb25zdCBXZWIKICAg
ICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6c2V0QW5pbWF0ZWRUcmFu
c2Zvcm0sIG1fcmVuZGVyZXIuZ2V0KCksIGlkLCB0cmFuc2Zvcm0pKTsKIH0KIAordm9pZCBMYXll
clRyZWVDb29yZGluYXRvclByb3h5OjpmbHVzaEFuaW1hdGlvbnMoKQoreworICAgIGRpc3BhdGNo
VXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpmbHVzaEFuaW1hdGlvbnMsIG1fcmVuZGVy
ZXIuZ2V0KCkpKTsKKyAgICB1cGRhdGVWaWV3cG9ydCgpOworfQorCiB2b2lkIExheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHk6OnNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBmbG9hdCBzY2FsZSwgY29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKIHsK
ICAgICAvLyBJbmZvcm0gdGhlIHJlbmRlcmVyIHRvIGFkanVzdCB2aWV3cG9ydC1maXhlZCBsYXll
cnMuCkBAIC0xNjksNiArMTc1LDExIEBAIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6
cmVuZGVyTmV4dEZyYW1lKCkKICAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2Vz
cygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvcjo6UmVuZGVyTmV4dEZyYW1l
KCksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7CiB9CiAKK3ZvaWQgTGF5
ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6ZGlkRmx1c2hBbmltYXRpb25zKCkKK3sKKyAgICBtX2Ry
YXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRy
ZWVDb29yZGluYXRvcjo6RGlkRmx1c2hBbmltYXRpb25zKCksIG1fZHJhd2luZ0FyZWFQcm94eS0+
cGFnZSgpLT5wYWdlSUQoKSk7Cit9CisKIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6
ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uKQogewogICAg
IGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpkaWRDaGFuZ2VTY3JvbGxQ
b3NpdGlvbiwgbV9yZW5kZXJlci5nZXQoKSwgcG9zaXRpb24pKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNz
L0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaAppbmRleCA2YjA2ZmI0Li4wNmM1YTdhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXll
clRyZWVDb29yZGluYXRvclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oCkBAIC03Niw2ICs3
Niw4IEBAIHB1YmxpYzoKICAgICBMYXllclRyZWVSZW5kZXJlciogbGF5ZXJUcmVlUmVuZGVyZXIo
KSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmVyLmdldCgpOyB9CiAgICAgdm9pZCBzZXRMYXllckFu
aW1hdGVkT3BhY2l0eSh1aW50MzJfdCwgZmxvYXQpOwogICAgIHZvaWQgc2V0TGF5ZXJBbmltYXRl
ZFRyYW5zZm9ybSh1aW50MzJfdCwgY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgm
KTsKKyAgICB2b2lkIGZsdXNoQW5pbWF0aW9ucygpOworICAgIHZvaWQgZGlkRmx1c2hBbmltYXRp
b25zKCk7CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGRpc3BhdGNoVXBkYXRlKGNvbnN0IEZ1bmN0
aW9uPHZvaWQoKT4mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkubWVzc2FnZXMuaW4gYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29y
ZGluYXRvclByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IGQyNDM4ZjEuLmIwMmNjZmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5tZXNzYWdl
cy5pbgpAQCAtMzYsNSArMzYsNiBAQCBtZXNzYWdlcyAtPiBMYXllclRyZWVDb29yZGluYXRvclBy
b3h5IHsKICAgICBTeW5jQ2FudmFzKHVpbnQzMl90IGlkLCBXZWJDb3JlOjpJbnRTaXplIGNhbnZh
c1NpemUsIHVpbnQzMl90IGdyYXBoaWNzU3VyZmFjZVRva2VuKQogICAgIFNldExheWVyQW5pbWF0
ZWRPcGFjaXR5KHVpbnQzMl90IGlkLCBmbG9hdCBvcGFjaXR5KQogICAgIFNldExheWVyQW5pbWF0
ZWRUcmFuc2Zvcm0odWludDMyX3QgaWQsIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IHRy
YW5zZm9ybSkKKyAgICBGbHVzaEFuaW1hdGlvbnMoKQogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5k
ZXJlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9M
YXllclRyZWVSZW5kZXJlci5jcHAKaW5kZXggZWQwYmUzYy4uOWNiYWJkYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVu
ZGVyZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBo
aWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcApAQCAtMTMyLDYgKzEzMiwxOCBAQCB2b2lkIExheWVy
VHJlZVJlbmRlcmVyOjpwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgbWF0cgogICAgIGxheWVyLT5wYWludCgpOwogICAgIG1fdGV4dHVyZU1hcHBlci0+
ZW5kQ2xpcCgpOwogICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5kUGFpbnRpbmcoKTsKKworICAgIHN0
YXRpYyBjaGFyKiBsb2dGcHNUb1N0YW5kYXJkT3V0cHV0U3RyID0gZ2V0ZW52KCJXRUJLSVRfTE9H
X0ZQU19UT19TVERPVVQiKTsKKyAgICBzdGF0aWMgYm9vbCBsb2dGcHNUb1N0YW5kYXJkT3V0cHV0
ID0gbG9nRnBzVG9TdGFuZGFyZE91dHB1dFN0ciAmJiAqbG9nRnBzVG9TdGFuZGFyZE91dHB1dFN0
ciA9PSAnMSc7CisgICAgaWYgKCFsb2dGcHNUb1N0YW5kYXJkT3V0cHV0KQorICAgICAgICByZXR1
cm47CisKKyAgICBzdGF0aWMgZG91YmxlIHByZXZUaW1lID0gV1RGOjpjdXJyZW50VGltZSgpOwor
ICAgIGRvdWJsZSBjdXJyZW50VGltZSA9IFdURjo6Y3VycmVudFRpbWUoKTsKKyAgICBkb3VibGUg
ZGVsYXkgPSBjdXJyZW50VGltZSAtIHByZXZUaW1lOworICAgIGludCBmcHMgPSAocHJldlRpbWUg
PT0gY3VycmVudFRpbWUpID8gMCA6IGludCgxLiAvIGRlbGF5KTsKKyAgICBwcmV2VGltZSA9IGN1
cnJlbnRUaW1lOworICAgIHByaW50ZigiJWQgZnBzXG4iLCBmcHMpOwogfQogCiB2b2lkIExheWVy
VHJlZVJlbmRlcmVyOjpwYWludFRvR3JhcGhpY3NDb250ZXh0KEJhY2tpbmdTdG9yZTo6UGxhdGZv
cm1HcmFwaGljc0NvbnRleHQgcGFpbnRlcikKQEAgLTMyNyw2ICszMzksNyBAQCB2b2lkIExheWVy
VHJlZVJlbmRlcmVyOjpzZXRSb290TGF5ZXJJRChXZWJMYXllcklEIGxheWVySUQpCiAKIFBhc3NS
ZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IExheWVyVHJlZVJlbmRlcmVyOjpnZXRCYWNr
aW5nU3RvcmUoV2ViTGF5ZXJJRCBpZCkKIHsKKyAgICBlbnN1cmVMYXllcihpZCk7CiAgICAgVGV4
dHVyZU1hcHBlckxheWVyKiBsYXllciA9IHRvVGV4dHVyZU1hcHBlckxheWVyKGxheWVyQnlJRChp
ZCkpOwogICAgIEFTU0VSVChsYXllcik7CiAgICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0
b3JlPiBiYWNraW5nU3RvcmUgPSBzdGF0aWNfY2FzdDxDb29yZGluYXRlZEJhY2tpbmdTdG9yZSo+
KGxheWVyLT5iYWNraW5nU3RvcmUoKS5nZXQoKSk7CkBAIC00MDAsMTIgKzQxMywzMSBAQCB2b2lk
IExheWVyVHJlZVJlbmRlcmVyOjpmbHVzaExheWVyQ2hhbmdlcygpCiAgICAgY2FsbE9uTWFpblRo
cmVhZChiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6cmVuZGVyTmV4dEZyYW1lLCB0aGlzKSk7CiB9
CiAKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmZsdXNoQW5pbWF0aW9ucygpCit7CisgICAgSGFz
aFNldDxXZWJMYXllcklEPjo6aXRlcmF0b3IgZW5kID0gbV9MYXllcnNSZXF1aXJpbmdBbmltYXRp
b25GbHVzaC5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8V2ViTGF5ZXJJRD46Oml0ZXJhdG9yIGl0
ID0gbV9MYXllcnNSZXF1aXJpbmdBbmltYXRpb25GbHVzaC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKKyAgICAgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQoKml0KTsKKyAg
ICAgICAgaWYgKGxheWVyKQorICAgICAgICAgICAgbGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRl
Rm9yVGhpc0xheWVyT25seSgpOworICAgIH0KKyAgICBtX0xheWVyc1JlcXVpcmluZ0FuaW1hdGlv
bkZsdXNoLmNsZWFyKCk7CisKKyAgICBjYWxsT25NYWluVGhyZWFkKGJpbmQoJkxheWVyVHJlZVJl
bmRlcmVyOjpkaWRGbHVzaEFuaW1hdGlvbnMsIHRoaXMpKTsKK30KKwogdm9pZCBMYXllclRyZWVS
ZW5kZXJlcjo6cmVuZGVyTmV4dEZyYW1lKCkKIHsKICAgICBpZiAobV9sYXllclRyZWVDb29yZGlu
YXRvclByb3h5KQogICAgICAgICBtX2xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHktPnJlbmRlck5l
eHRGcmFtZSgpOwogfQogCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpkaWRGbHVzaEFuaW1hdGlv
bnMoKQoreworICAgIGlmIChtX2xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkpCisgICAgICAgIG1f
bGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS0+ZGlkRmx1c2hBbmltYXRpb25zKCk7Cit9CisKIHZv
aWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmVuc3VyZVJvb3RMYXllcigpCiB7CiAgICAgaWYgKG1fcm9v
dExheWVyKQpAQCAtNDY3LDYgKzQ5OSw3IEBAIHZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnNldEFu
aW1hdGVkT3BhY2l0eSh1aW50MzJfdCBpZCwgZmxvYXQgb3BhY2l0eSkKICAgICBBU1NFUlQobGF5
ZXIpOwogCiAgICAgbGF5ZXItPnNldE9wYWNpdHkob3BhY2l0eSk7CisgICAgbV9MYXllcnNSZXF1
aXJpbmdBbmltYXRpb25GbHVzaC5hZGQoaWQpOwogfQogCiB2b2lkIExheWVyVHJlZVJlbmRlcmVy
OjpzZXRBbmltYXRlZFRyYW5zZm9ybSh1aW50MzJfdCBpZCwgY29uc3QgV2ViQ29yZTo6VHJhbnNm
b3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKQEAgLTQ3NSw2ICs1MDgsNyBAQCB2b2lkIExheWVy
VHJlZVJlbmRlcmVyOjpzZXRBbmltYXRlZFRyYW5zZm9ybSh1aW50MzJfdCBpZCwgY29uc3QgV2Vi
Q29yZTo6VHJhbnNmbwogICAgIEFTU0VSVChsYXllcik7CiAKICAgICBsYXllci0+c2V0VHJhbnNm
b3JtKHRyYW5zZm9ybSk7CisgICAgbV9MYXllcnNSZXF1aXJpbmdBbmltYXRpb25GbHVzaC5hZGQo
aWQpOwogfQogCiB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpwdXJnZUJhY2tpbmdTdG9yZXMoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
TGF5ZXJUcmVlUmVuZGVyZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRl
ZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmgKaW5kZXggNjQwM2I1ZC4uYzlkYjgyZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5
ZXJUcmVlUmVuZGVyZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0
ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5oCkBAIC05MSw2ICs5MSw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGRlc3Ryb3lJbWFnZShpbnQ2NF90KTsKICAgICB2b2lkIHNldEFuaW1hdGVkT3Bh
Y2l0eSh1aW50MzJfdCwgZmxvYXQpOwogICAgIHZvaWQgc2V0QW5pbWF0ZWRUcmFuc2Zvcm0odWlu
dDMyX3QsIGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgdm9pZCBm
bHVzaEFuaW1hdGlvbnMoKTsKIAogcHJpdmF0ZToKICAgICBQYXNzT3duUHRyPFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXI+IGNyZWF0ZUxheWVyKFdlYkxheWVySUQpOwpAQCAtMTM0LDEwICsxMzUsMTMg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHN5bmNBbmltYXRpb25zKCk7CiAgICAgdm9pZCByZW5kZXJO
ZXh0RnJhbWUoKTsKICAgICB2b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpOworICAgIHZvaWQgZGlk
Rmx1c2hBbmltYXRpb25zKCk7CiAKICAgICBMYXllclRyZWVDb29yZGluYXRvclByb3h5KiBtX2xh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHk7CiAgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXI+IG1fcm9vdExheWVyOwogICAgIFZlY3RvcjxXZWJMYXllcklEPiBtX2xheWVyc1RvRGVsZXRl
OworICAgIEhhc2hTZXQ8V2ViTGF5ZXJJRD4gbV9MYXllcnNSZXF1aXJpbmdBbmltYXRpb25GbHVz
aDsKKwogCiAgICAgTGF5ZXJNYXAgbV9sYXllcnM7CiAgICAgTGF5ZXJNYXAgbV9maXhlZExheWVy
czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIuY3BwCmluZGV4IGQ1MGNlMWMuLjI1MGEyNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3NMYXllci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcApAQCAtNjgs
MTMgKzY4LDYgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmRpZENoYW5nZUxheWVy
U3RhdGUoKQogICAgICAgICBjbGllbnQoKS0+bm90aWZ5U3luY1JlcXVpcmVkKHRoaXMpOwogfQog
Ci12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGlkQ2hhbmdlQW5pbWF0ZWRQcm9wZXJ0
aWVzKCkKLXsKLSAgICBtX3Nob3VsZFN5bmNBbmltYXRlZFByb3BlcnRpZXMgPSB0cnVlOwotICAg
IGlmIChjbGllbnQoKSkKLSAgICAgICAgY2xpZW50KCktPm5vdGlmeVN5bmNSZXF1aXJlZCh0aGlz
KTsKLX0KLQogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmRpZENoYW5nZUNoaWxkcmVu
KCkKIHsKICAgICBtX3Nob3VsZFN5bmNDaGlsZHJlbiA9IHRydWU7CkBAIC05MSw2ICs4NCwxMyBA
QCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGlkQ2hhbmdlRmlsdGVycygpCiB9CiAj
ZW5kaWYKIAordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmRpZENoYW5nZUFuaW1hdGlv
bnMoKQoreworICAgIG1fc2hvdWxkU3luY0FuaW1hdGlvbnMgPSB0cnVlOworICAgIGlmIChjbGll
bnQoKSkKKyAgICAgICAgY2xpZW50KCktPm5vdGlmeVN5bmNSZXF1aXJlZCh0aGlzKTsKK30KKwog
dm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFNob3VsZFVwZGF0ZVZpc2libGVSZWN0
KCkKIHsKICAgICBpZiAoIXRyYW5zZm9ybSgpLmlzQWZmaW5lKCkpCkBAIC0xMTYsNiArMTE2LDgg
QEAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoR3Jh
cGhpY3NMYXllckNsaWVudCogY2xpZW50KQogICAgICwgbV9zaG91bGRVcGRhdGVWaXNpYmxlUmVj
dCh0cnVlKQogICAgICwgbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSh0cnVlKQogICAgICwgbV9zaG91
bGRTeW5jQ2hpbGRyZW4odHJ1ZSkKKyAgICAsIG1fc2hvdWxkU3luY0ZpbHRlcnMoZmFsc2UpCisg
ICAgLCBtX3Nob3VsZFN5bmNBbmltYXRpb25zKGZhbHNlKQogICAgICwgbV9maXhlZFRvVmlld3Bv
cnQoZmFsc2UpCiAgICAgLCBtX2NhbnZhc05lZWRzRGlzcGxheShmYWxzZSkKICAgICAsIG1fQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KDApCkBAIC00NjQsNiArNDY2LDE0IEBAIHZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQ2hpbGRyZW4oKQogICAgIG1fQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyQ2xpZW50LT5zeW5jTGF5ZXJDaGlsZHJlbihtX2lkLCBjaGlsZElEcyk7
CiB9CiAKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQW5pbWF0aW9ucygpCit7
CisgICAgaWYgKCFtX3Nob3VsZFN5bmNBbmltYXRpb25zKQorICAgICAgICByZXR1cm47CisgICAg
bV9zaG91bGRTeW5jQW5pbWF0aW9ucyA9IGZhbHNlOworICAgIG1fYW5pbWF0aW9ucyA9IG1fcGVu
ZGluZ0FuaW1hdGlvbnM7Cit9CisKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiB2b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0ZpbHRlcnMoKQogewpAQCAtNDk3LDI3ICs1MDcsOSBA
QCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0xheWVyU3RhdGUoKQogICAgIG1f
bGF5ZXJJbmZvLnJlcGxpY2EgPSB0b1dlYkxheWVySUQocmVwbGljYUxheWVyKCkpOwogICAgIG1f
bGF5ZXJJbmZvLnNpemUgPSBzaXplKCk7CiAgICAgbV9sYXllckluZm8udHJhbnNmb3JtID0gdHJh
bnNmb3JtKCk7Ci0gICAgaWYgKCFtX2FuaW1hdGlvbnMuaGFzQWN0aXZlQW5pbWF0aW9uc09mVHlw
ZShBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKSkKLSAgICAgICAgbV9lZmZlY3RpdmVU
cmFuc2Zvcm0gPSB0cmFuc2Zvcm0oKTsKLSAgICBpZiAoIW1fYW5pbWF0aW9ucy5oYXNBY3RpdmVB
bmltYXRpb25zT2ZUeXBlKEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KSkKLSAgICAgICAgbV9lZmZl
Y3RpdmVPcGFjaXR5ID0gb3BhY2l0eSgpOwogICAgIG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
Q2xpZW50LT5zeW5jTGF5ZXJTdGF0ZShtX2lkLCBtX2xheWVySW5mbyk7CiB9CiAKLXZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQW5pbWF0ZWRQcm9wZXJ0aWVzKCkKLXsKLSAgICBt
X2FuaW1hdGlvbnMuYXBwbHkodGhpcyk7Ci0gICAgaWYgKCFtX3Nob3VsZFN5bmNBbmltYXRlZFBy
b3BlcnRpZXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2hvdWxkU3luY0FuaW1hdGVkUHJv
cGVydGllcyA9IHRydWU7Ci0gICAgaWYgKG1fZWZmZWN0aXZlT3BhY2l0eSAhPSBvcGFjaXR5KCkp
Ci0gICAgICAgIG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50LT5zZXRMYXllckFuaW1h
dGVkT3BhY2l0eShpZCgpLCBtX2VmZmVjdGl2ZU9wYWNpdHkpOwotICAgIGlmIChtX2VmZmVjdGl2
ZVRyYW5zZm9ybSAhPSB0cmFuc2Zvcm0oKSkKLSAgICAgICAgbV9Db29yZGluYXRlZEdyYXBoaWNz
TGF5ZXJDbGllbnQtPnNldExheWVyQW5pbWF0ZWRUcmFuc2Zvcm0oaWQoKSwgbV9lZmZlY3RpdmVU
cmFuc2Zvcm0pOwotfQotCi0KIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQ2Fu
dmFzKCkKIHsKICAgICBpZiAoIW1fY2FudmFzTmVlZHNEaXNwbGF5KQpAQCAtNTQ2LDcgKzUzOCw3
IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZUZv
clRoaXNMYXllck9ubHkoKQogICAgIC8vIFRoZSByZW1vdGUgaW1hZ2UgbWlnaHQgaGF2ZSBiZWVu
IHJlbGVhc2VkIGJ5IHB1cmdlQmFja2luZ1N0b3Jlcy4KICAgICBlbnN1cmVJbWFnZUJhY2tpbmdT
dG9yZSgpOwogICAgIHN5bmNMYXllclN0YXRlKCk7Ci0gICAgc3luY0FuaW1hdGVkUHJvcGVydGll
cygpOworICAgIHN5bmNBbmltYXRpb25zKCk7CiAgICAgY29tcHV0ZVRyYW5zZm9ybWVkVmlzaWJs
ZVJlY3QoKTsKICAgICBzeW5jQ2hpbGRyZW4oKTsKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCkBA
IC03NTAsNyArNzQyLDcgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmNvbXB1dGVU
cmFuc2Zvcm1lZFZpc2libGVSZWN0KCkKICAgICBpZiAoIW1fc2hvdWxkVXBkYXRlVmlzaWJsZVJl
Y3QpCiAgICAgICAgIHJldHVybjsKICAgICBtX3Nob3VsZFVwZGF0ZVZpc2libGVSZWN0ID0gZmFs
c2U7Ci0gICAgbV9sYXllclRyYW5zZm9ybS5zZXRMb2NhbFRyYW5zZm9ybShtX2VmZmVjdGl2ZVRy
YW5zZm9ybSk7CisgICAgbV9sYXllclRyYW5zZm9ybS5zZXRMb2NhbFRyYW5zZm9ybSh0cmFuc2Zv
cm0oKSk7CiAgICAgbV9sYXllclRyYW5zZm9ybS5zZXRQb3NpdGlvbihwb3NpdGlvbigpKTsKICAg
ICBtX2xheWVyVHJhbnNmb3JtLnNldEFuY2hvclBvaW50KGFuY2hvclBvaW50KCkpOwogICAgIG1f
bGF5ZXJUcmFuc2Zvcm0uc2V0U2l6ZShzaXplKCkpOwpAQCAtNzc1LDYgKzc2Nyw5IEBAIHZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjppbml0RmFjdG9yeSgpCiAKIGJvb2wgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjpzZWxmT3JBbmNlc3RvckhhdmVOb25BZmZpbmVUcmFuc2Zvcm1zKCkK
IHsKKyAgICBpZiAobV9hbmltYXRpb25zLmhhc0FjdGl2ZUFuaW1hdGlvbnNPZlR5cGUoQW5pbWF0
ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSkpCisgICAgICAgIHJldHVybiB0cnVlOworCiAgICAg
aWYgKCFtX2xheWVyVHJhbnNmb3JtLmNvbWJpbmVkKCkuaXNBZmZpbmUoKSkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAKQEAgLTc5NCwzOCArNzg5LDQ2IEBAIGJvb2wgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjphZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwK
ICAgICBpZiAodmFsdWVMaXN0LnByb3BlcnR5KCkgPT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRy
YW5zZm9ybSkKICAgICAgICAgbGlzdHNNYXRjaCA9IHZhbGlkYXRlVHJhbnNmb3JtT3BlcmF0aW9u
cyh2YWx1ZUxpc3QsIGlnbm9yZWRIYXNCaWdSb3RhdGlvbikgPj0gMDsKIAotICAgIG1fYW5pbWF0
aW9ucy5hZGQoR3JhcGhpY3NMYXllckFuaW1hdGlvbihrZXlmcmFtZXNOYW1lLCB2YWx1ZUxpc3Qs
IGJveFNpemUsIGFuaW0sIHRpbWVPZmZzZXQsIGxpc3RzTWF0Y2gpKTsKKyAgICBtX3BlbmRpbmdB
bmltYXRpb25zLmFkZChHcmFwaGljc0xheWVyQW5pbWF0aW9uKGtleWZyYW1lc05hbWUsIHZhbHVl
TGlzdCwgYm94U2l6ZSwgYW5pbSwgV1RGOjpjdXJyZW50VGltZSgpIC0gdGltZU9mZnNldCwgbGlz
dHNNYXRjaCkpOwogICAgIG1fYW5pbWF0aW9uU3RhcnRlZFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsK
LSAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CisgICAgZGlkQ2hhbmdlQW5pbWF0aW9ucygpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6cGF1
c2VBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNl
dCkKK2Jvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpoYXNQZW5kaW5nQ2hhbmdlcygpIGNv
bnN0CiB7Ci0gICAgbV9hbmltYXRpb25zLnBhdXNlKGFuaW1hdGlvbk5hbWUsIHRpbWVPZmZzZXQp
OworICAgIHJldHVybiBtX3Nob3VsZFN5bmNMYXllclN0YXRlIHx8IG1fc2hvdWxkU3luY0NoaWxk
cmVuIHx8IG1fc2hvdWxkU3luY0ZpbHRlcnMgfHwgbV9jYW52YXNOZWVkc0Rpc3BsYXkgfHwgbV9z
aG91bGRTeW5jQW5pbWF0aW9uczsKIH0KIAotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OnJlbW92ZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUpCit2b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6Y29sbGVjdEFuaW1hdGlvbnMoQW5pbWF0aW9uQ29sbGVjdG9y
KiBjb2xsZWN0b3IsIEFuaW1hdGlvbkNvbGxlY3Rpb25PcHRpb25zIG9wdGlvbnMpCiB7Ci0gICAg
bV9hbmltYXRpb25zLnJlbW92ZShhbmltYXRpb25OYW1lKTsKKyAgICBpZiAoKG9wdGlvbnMgPT0g
Q29sbGVjdE9ubHlBbmltYXRpb25zV2l0aG91dFBlbmRpbmdDaGFuZ2VzKSAmJiBoYXNQZW5kaW5n
Q2hhbmdlcygpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9hbmltYXRpb25zLmhhc1J1
bm5pbmdBbmltYXRpb25zKCkpCisgICAgICAgIGNvbGxlY3Rvci0+YWRkQW5pbWF0aW9ucyhpZCgp
LCBtX2FuaW1hdGlvbnMpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigp
LnNpemUoKTsgKytpKSB7CisgICAgICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogbGF5ZXIg
PSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcih0aGlzLT5jaGlsZHJlbigpW2ldKTsKKyAgICAg
ICAgbGF5ZXItPmNvbGxlY3RBbmltYXRpb25zKGNvbGxlY3Rvciwgb3B0aW9ucyk7CisgICAgfQog
fQogCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YW5pbWF0aW9uU3RhcnRlZFRpbWVy
RmlyZWQoVGltZXI8Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyPiopCit2b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6cGF1c2VBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1l
LCBkb3VibGUgdGltZU9mZnNldCkKIHsKLSAgICBjbGllbnQoKS0+bm90aWZ5QW5pbWF0aW9uU3Rh
cnRlZCh0aGlzLCAvKiBET00gdGltZSAqLyBXVEY6OmN1cnJlbnRUaW1lKCkpOworICAgIG1fcGVu
ZGluZ0FuaW1hdGlvbnMucGF1c2UoYW5pbWF0aW9uTmFtZSwgdGltZU9mZnNldCk7CisgICAgZGlk
Q2hhbmdlQW5pbWF0aW9ucygpOwogfQogCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
c2V0QW5pbWF0ZWRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9y
bSkKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZW1vdmVBbmltYXRpb24oY29uc3Qg
U3RyaW5nJiBhbmltYXRpb25OYW1lKQogewotICAgIG1fZWZmZWN0aXZlVHJhbnNmb3JtID0gdHJh
bnNmb3JtOwotICAgIGRpZENoYW5nZUFuaW1hdGVkUHJvcGVydGllcygpOwotICAgIG1fc2hvdWxk
VXBkYXRlVmlzaWJsZVJlY3QgPSB0cnVlOworICAgIG1fcGVuZGluZ0FuaW1hdGlvbnMucmVtb3Zl
KGFuaW1hdGlvbk5hbWUpOworICAgIGRpZENoYW5nZUFuaW1hdGlvbnMoKTsKIH0KIAotdm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldEFuaW1hdGVkT3BhY2l0eShmbG9hdCBvcGFjaXR5
KQordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmFuaW1hdGlvblN0YXJ0ZWRUaW1lckZp
cmVkKFRpbWVyPENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcj4qKQogewotICAgIG1fZWZmZWN0aXZl
T3BhY2l0eSA9IG9wYWNpdHk7Ci0gICAgZGlkQ2hhbmdlQW5pbWF0ZWRQcm9wZXJ0aWVzKCk7Cisg
ICAgY2xpZW50KCktPm5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQodGhpcywgLyogRE9NIHRpbWUgKi8g
V1RGOjpjdXJyZW50VGltZSgpKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaAppbmRleCAyNWNjZDk0Li41YmVjNDMy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIuaApAQCAtNjUsOSArNjUsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHN5
bmNDYW52YXMoV2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY2FudmFzU2l6ZSwg
dWludDMyX3QgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pID0gMDsKICNlbmRpZgogCi0gICAgdmlydHVh
bCB2b2lkIHNldExheWVyQW5pbWF0ZWRPcGFjaXR5KFdlYkxheWVySUQsIGZsb2F0KSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldExheWVyQW5pbWF0ZWRUcmFuc2Zvcm0oV2ViTGF5ZXJJRCwgY29u
c3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmKSA9IDA7Ci0KICAgICB2aXJ0dWFsIHZv
aWQgYXR0YWNoTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKikgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hMYXllcihXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIqKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNGaXhlZExheWVycygpID0gMDsKQEAg
LTc3LDExICs3NCwyMCBAQCBwdWJsaWM6CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3Mg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyIDogcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIK
K2NsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciA6IHB1YmxpYyBHcmFwaGljc0xheWVyCiAg
ICAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIFRpbGVkQmFja2luZ1N0b3JlQ2xpZW50Ci0g
ICAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIFdlYktpdDo6Q29vcmRpbmF0ZWRUaWxlQ2xp
ZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIEdyYXBoaWNzTGF5ZXJBbmltYXRp
b246OkNsaWVudCB7CisgICAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIFdlYktpdDo6Q29v
cmRpbmF0ZWRUaWxlQ2xpZW50IHsKIHB1YmxpYzoKKyAgICBlbnVtIEFuaW1hdGlvbkNvbGxlY3Rp
b25PcHRpb25zIHsKKyAgICAgICAgQ29sbGVjdEFsbEFuaW1hdGlvbnMgPSAwLAorICAgICAgICBD
b2xsZWN0T25seUFuaW1hdGlvbnNXaXRob3V0UGVuZGluZ0NoYW5nZXMgPSAxCisgICAgfTsKKwor
ICAgIGNsYXNzIEFuaW1hdGlvbkNvbGxlY3RvciB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0
dWFsIHZvaWQgYWRkQW5pbWF0aW9ucyhXZWJLaXQ6OldlYkxheWVySUQsIGNvbnN0IEdyYXBoaWNz
TGF5ZXJBbmltYXRpb25zJikgPSAwOworICAgIH07CisKICAgICBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCopOwogICAgIHZpcnR1YWwgfkNvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcigpOwogCkBAIC0xNjUsMTQgKzE3MSwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCB1
cGRhdGVDb250ZW50QnVmZmVycygpOwogICAgIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CiAK
LSAgICAvLyBHcmFwaGljc0xheWVyQW5pbWF0aW9uOjpDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0QW5pbWF0ZWRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0QW5pbWF0ZWRPcGFjaXR5KGZsb2F0KTsKLQogICAgIHZpcnR1YWwgYm9v
bCBhZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRTaXplJiwg
Y29uc3QgQW5pbWF0aW9uKiwgY29uc3QgU3RyaW5nJiwgZG91YmxlKTsKICAgICB2aXJ0dWFsIHZv
aWQgcGF1c2VBbmltYXRpb24oY29uc3QgU3RyaW5nJiwgZG91YmxlKTsKICAgICB2aXJ0dWFsIHZv
aWQgcmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYpOwogCisgICAgdm9pZCBjb2xsZWN0QW5p
bWF0aW9ucyhBbmltYXRpb25Db2xsZWN0b3IqLCBBbmltYXRpb25Db2xsZWN0aW9uT3B0aW9ucyk7
CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHdpbGxCZURlc3Ryb3llZCgpOwogICAgIFdl
YktpdDo6V2ViTGF5ZXJJRCBtX2lkOwpAQCAtMTg2LDEyICsxOTAsMTIgQEAgcHJpdmF0ZToKICAg
ICBib29sIG1fc2hvdWxkU3luY0xheWVyU3RhdGU6IDE7CiAgICAgYm9vbCBtX3Nob3VsZFN5bmND
aGlsZHJlbjogMTsKICAgICBib29sIG1fc2hvdWxkU3luY0ZpbHRlcnM6IDE7Ci0gICAgYm9vbCBt
X3Nob3VsZFN5bmNBbmltYXRlZFByb3BlcnRpZXM6IDE7CisgICAgYm9vbCBtX3Nob3VsZFN5bmNB
bmltYXRpb25zOiAxOwogICAgIGJvb2wgbV9maXhlZFRvVmlld3BvcnQgOiAxOwogICAgIGJvb2wg
bV9jYW52YXNOZWVkc0Rpc3BsYXkgOiAxOwogCiAgICAgdm9pZCBub3RpZnlDaGFuZ2UoKTsKLSAg
ICB2b2lkIGRpZENoYW5nZUFuaW1hdGVkUHJvcGVydGllcygpOworICAgIHZvaWQgZGlkQ2hhbmdl
QW5pbWF0aW9ucygpOwogICAgIHZvaWQgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKICAgICB2b2lkIGRp
ZENoYW5nZUxheWVyU3RhdGUoKTsKICAgICB2b2lkIGRpZENoYW5nZUNoaWxkcmVuKCk7CkBAIC0x
OTksNiArMjAzLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpZENoYW5nZUZpbHRlcnMoKTsKICNl
bmRpZgogCisgICAgYm9vbCBoYXNQZW5kaW5nQ2hhbmdlcygpIGNvbnN0OworCiAgICAgZmxvYXQg
bV9lZmZlY3RpdmVPcGFjaXR5OwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fZWZmZWN0aXZl
VHJhbnNmb3JtOwogCkBAIC0yMDksOSArMjE1LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFkanVz
dENvbnRlbnRzU2NhbGUoKTsKICAgICB2b2lkIGNvbXB1dGVUcmFuc2Zvcm1lZFZpc2libGVSZWN0
KCk7CiAgICAgdm9pZCBzeW5jTGF5ZXJQYXJhbWV0ZXJzKCk7Ci0gICAgdm9pZCBzeW5jQW5pbWF0
ZWRQcm9wZXJ0aWVzKCk7CiAgICAgdm9pZCBzZXRTaG91bGRVcGRhdGVWaXNpYmxlUmVjdCgpOwog
ICAgIGZsb2F0IGVmZmVjdGl2ZUNvbnRlbnRzU2NhbGUoKTsKKyAgICB2b2lkIHN5bmNBbmltYXRp
b25zKCk7CiAKICAgICB2b2lkIGFuaW1hdGlvblN0YXJ0ZWRUaW1lckZpcmVkKFdlYkNvcmU6OlRp
bWVyPENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcj4qKTsKIApAQCAtMjIxLDcgKzIyNywxMiBAQCBw
cml2YXRlOgogICAgIGZsb2F0IG1fY29udGVudHNTY2FsZTsKICAgICBQbGF0Zm9ybUxheWVyKiBt
X2NhbnZhc1BsYXRmb3JtTGF5ZXI7CiAgICAgVGltZXI8Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
PiBtX2FuaW1hdGlvblN0YXJ0ZWRUaW1lcjsKKyAgICBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyBt
X3BlbmRpbmdBbmltYXRpb25zOwogICAgIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zIG1fYW5pbWF0
aW9uczsKKworICAgIGNsYXNzIExheWVyQW5pbWF0aW9uQ29udHJvbGxlciA6IHB1YmxpYyBUaHJl
YWRTYWZlUmVmQ291bnRlZDxMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IHsKKworICAgIH07CiB9
OwogCiBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
KEdyYXBoaWNzTGF5ZXIqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVy
VHJlZUNvb3JkaW5hdG9yLmNwcAppbmRleCBjMDZjNThkLi4zYmEyMTU5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXll
clRyZWVDb29yZGluYXRvci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCkBAIC00NCw2
ICs0NCw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllckNvbXBvc2l0b3IuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdz
Lmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogCkBAIC0xMDIsNiArMTAzLDggQEAgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OkxheWVyVHJl
ZUNvb3JkaW5hdG9yKFdlYlBhZ2UqIHdlYlBhZ2UpCiAgICAgaWYgKG1fd2ViUGFnZS0+aGFzUGFn
ZU92ZXJsYXkoKSkKICAgICAgICAgY3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOwogCisgICAgbV9h
bmltYXRpb25Db29yZGluYXRvciA9IFRocmVhZGVkQW5pbWF0aW9uQ29vcmRpbmF0b3I6OmNyZWF0
ZShtX3dlYlBhZ2UtPmNvbm5lY3Rpb24oKSwgbV93ZWJQYWdlLT5kZXN0aW5hdGlvbklEKCkpOwor
CiAgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CiB9CiAKQEAgLTIzOSw3ICsyNDIsMjEgQEAgdm9p
ZCBMYXllclRyZWVDb29yZGluYXRvcjo6c2V0UGFnZU92ZXJsYXlPcGFjaXR5KGZsb2F0IHZhbHVl
KQogYm9vbCBMYXllclRyZWVDb29yZGluYXRvcjo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkK
IHsKICAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IGZhbHNlOworCisgICAgbV9hbmltYXRpb25Db29y
ZGluYXRvci0+cmVtb3ZlQWxsQW5pbWF0aW9ucygpOworCisgICAgLy8gQmVmb3JlIHN5bmNocm9u
aXppbmcgdGhlIGxheWVyIHRyZWUsIHdlIGNvbGxlY3QgYW5pbWF0aW9ucyBmb3IgbGF5ZXJzIHdl
IGNhbiBzYWZlbHkgc3luY2hyb25pemUgaW4gdGhlIGJhY2tncm91bmQuCisgICAgdG9Db29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5jb2xsZWN0QW5pbWF0aW9ucyht
X2FuaW1hdGlvbkNvb3JkaW5hdG9yLmdldCgpLCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OkNv
bGxlY3RPbmx5QW5pbWF0aW9uc1dpdGhvdXRQZW5kaW5nQ2hhbmdlcyk7CisgICAgbV9hbmltYXRp
b25Db29yZGluYXRvci0+c2NoZWR1bGVBbmltYXRpb25zKCk7CiAgICAgYm9vbCBkaWRTeW5jID0g
bV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT5zeW5jQ29tcG9zaXRp
bmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOworICAgIG1fYW5pbWF0aW9uQ29vcmRpbmF0b3It
PnJlbW92ZUFsbEFuaW1hdGlvbnMoKTsKKworICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgc3luY2hy
b25pemVkIGFsbCB0aGUgbGF5ZXJzLCB3ZSBjYW4gZW5hYmxlIGFuaW1hdGlvbnMgZm9yIGFsbCB0
aGUgbGF5ZXJzLgorICAgIHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdl
dCgpKS0+Y29sbGVjdEFuaW1hdGlvbnMobV9hbmltYXRpb25Db29yZGluYXRvci5nZXQoKSwgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpDb2xsZWN0QWxsQW5pbWF0aW9ucyk7CisKKyAgICAvLyBJ
dCdzIGltcG9ydGFudCB0byBzeW5jaHJvbml6ZSB0aGUgYW5pbWF0aW9ucyBhZ2FpbiBpbiB0aGlz
IHRocmVhZCBiZWZvcmUgc2VuZGluZyBEaWRSZW5kZXJGcmFtZSAtIG90aGVyd2lzZSBpbnRlcm1l
ZGlhdGUgdmFsdWVzIG1pZ2h0IGJlIG92ZXJ3cml0dGVuLgorICAgIG1fc2hvdWxkU3luY0ZyYW1l
ID0gbV9hbmltYXRpb25Db29yZGluYXRvci0+cHJvY2Vzc0FuaW1hdGlvbnMoKSB8fCBtX3Nob3Vs
ZFN5bmNGcmFtZTsKKwogICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c3luY0NvbXBv
c2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CiAgICAgaWYgKG1fcGFnZU92ZXJsYXlMYXll
cikKICAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRo
aXNMYXllck9ubHkoKTsKQEAgLTMwNSw2ICszMjIsNyBAQCB2b2lkIExheWVyVHJlZUNvb3JkaW5h
dG9yOjpkZXRhY2hMYXllcihDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogewogICAg
IG1fcmVnaXN0ZXJlZExheWVycy5yZW1vdmUobGF5ZXIpOwogICAgIG1fc2hvdWxkU3luY0ZyYW1l
ID0gdHJ1ZTsKKyAgICBtX2FuaW1hdGlvbkNvb3JkaW5hdG9yLT5kZXRhY2hMYXllcihsYXllci0+
aWQoKSk7CiAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRv
clByb3h5OjpEZWxldGVDb21wb3NpdGluZ0xheWVyKGxheWVyLT5pZCgpKSk7CiB9CiAKQEAgLTUz
MCwxOSArNTQ4LDYgQEAgV2ViQ29yZTo6SW50UmVjdCBMYXllclRyZWVDb29yZGluYXRvcjo6dmlz
aWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fdmlzaWJsZUNvbnRlbnRzUmVj
dDsKIH0KIAotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzZXRMYXllckFuaW1hdGVkT3Bh
Y2l0eShXZWJMYXllcklEIGlkLCBmbG9hdCBvcGFjaXR5KQotewotICAgIG1fc2hvdWxkU3luY0Zy
YW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHk6OlNldExheWVyQW5pbWF0ZWRPcGFjaXR5KGlkLCBvcGFjaXR5KSk7Ci19Ci0K
LXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNldExheWVyQW5pbWF0ZWRUcmFuc2Zvcm0oV2Vi
TGF5ZXJJRCBpZCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKLXsKLSAg
ICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpTZXRMYXllckFuaW1hdGVkVHJhbnNmb3JtKGlk
LCB0cmFuc2Zvcm0pKTsKLX0KLQogdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c2V0VmlzaWJs
ZUNvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiByZWN0LCBmbG9hdCBzY2FsZSwgY29uc3QgRmxv
YXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKIHsKICAgICBib29sIGNvbnRlbnRzUmVjdERpZENo
YW5nZSA9IHJlY3QgIT0gbV92aXNpYmxlQ29udGVudHNSZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVl
Q29vcmRpbmF0b3IuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmgKaW5kZXggMThhZDk0My4uYzllNjRm
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRv
ci5oCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
LmgiCiAjaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUhv
c3QuaCIKKyNpbmNsdWRlICJUaHJlYWRlZEFuaW1hdGlvbkNvb3JkaW5hdG9yLmgiCiAjaW5jbHVk
ZSAiVGltZXIuaCIKICNpbmNsdWRlICJVcGRhdGVBdGxhcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUv
R3JhcGhpY3NMYXllckNsaWVudC5oPgpAQCAtNzcsOCArNzgsNiBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIHZvaWQgc3luY0xheWVyU3RhdGUoV2ViTGF5ZXJJRCwgY29uc3QgV2ViTGF5ZXJJbmZv
Jik7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckNoaWxkcmVuKFdlYkxheWVySUQsIGNvbnN0
IFZlY3RvcjxXZWJMYXllcklEPiYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllckFuaW1hdGVk
T3BhY2l0eShXZWJMYXllcklELCBmbG9hdCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldExheWVyQW5p
bWF0ZWRUcmFuc2Zvcm0oV2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25N
YXRyaXgmKTsKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiAgICAgdmlydHVhbCB2b2lkIHN5bmNM
YXllckZpbHRlcnMoV2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYp
OwogI2VuZGlmCkBAIC0xMTEsNiArMTEwLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBlcmZvcm1T
Y2hlZHVsZWRMYXllckZsdXNoKCk7CiAgICAgdm9pZCBkaWRQZXJmb3JtU2NoZWR1bGVkTGF5ZXJG
bHVzaCgpOwogICAgIHZvaWQgc3luY0Rpc3BsYXlTdGF0ZSgpOworICAgIHZvaWQgZGlkRmx1c2hB
bmltYXRpb25zKCkgeyB9CiAKICAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9y
b290TGF5ZXI7CiAKQEAgLTEyMCw2ICsxMjAsOCBAQCBwcml2YXRlOgogICAgIC8vIFRoZSBwYWdl
IG92ZXJsYXkgbGF5ZXIuIFdpbGwgYmUgbnVsbCBpZiB0aGVyZSdzIG5vIHBhZ2Ugb3ZlcmxheS4K
ICAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9wYWdlT3ZlcmxheUxheWVyOwog
CisgICAgT3duUHRyPFRocmVhZGVkQW5pbWF0aW9uQ29vcmRpbmF0b3I+IG1fYW5pbWF0aW9uQ29v
cmRpbmF0b3I7CisKICAgICBIYXNoU2V0PFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cio+IG1fcmVnaXN0ZXJlZExheWVyczsKICAgICBIYXNoTWFwPGludDY0X3QsIGludD4gbV9kaXJl
Y3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50czsKICAgICBWZWN0b3I8VXBkYXRlQXRsYXM+IG1f
dXBkYXRlQXRsYXNlczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLm1lc3NhZ2VzLmlu
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
TGF5ZXJUcmVlQ29vcmRpbmF0b3IubWVzc2FnZXMuaW4KaW5kZXggN2I5YzJhYy4uMDE4NDI4ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29v
cmRpbmF0b3IubWVzc2FnZXMuaW4KQEAgLTIzLDUgKzIzLDYgQEAgbWVzc2FnZXMgLT4gTGF5ZXJU
cmVlQ29vcmRpbmF0b3IgewogICAgIFNldFZpc2libGVDb250ZW50c1JlY3QoV2ViQ29yZTo6SW50
UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0LCBmbG9hdCBzY2FsZSwgV2ViQ29yZTo6RmxvYXRQb2lu
dCB0cmFqZWN0b3J5VmVjdG9yeSkKICAgICBSZW5kZXJOZXh0RnJhbWUoKQogICAgIFB1cmdlQmFj
a2luZ1N0b3JlcygpCisgICAgRGlkRmx1c2hBbmltYXRpb25zKCkKIH0KICNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvVGhyZWFkZWRBbmltYXRpb25Db29yZGluYXRvci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZEFuaW1hdGlvbkNvb3Jk
aW5hdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzhmMWZjCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRBbmltYXRpb25Db29yZGluYXRvci5jcHAKQEAgLTAsMCAr
MSwxNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGhy
ZWFkZWRBbmltYXRpb25Db29yZGluYXRvci5oIgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTKQorCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllckFuaW1hdGlvbi5oIgorI2luY2x1ZGUgIkxh
eWVyVHJlZUNvb3JkaW5hdG9yTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJMYXllclRyZWVDb29yZGlu
YXRvclByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJNZXNzYWdlSUQuaCIKKyNpbmNsdWRlICJX
ZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlIDxDb3JlSVBDL0Nvbm5lY3Rpb24uaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL1J1bkxvb3AuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5o
PgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgQ29yZUlQQzo6Q29ubmVjdGlvbjsKK3Vz
aW5nIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zOwordXNpbmcgV2ViQ29yZTo6UnVu
TG9vcDsKK3VzaW5nIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4OworCitUaHJlYWRlZEFu
aW1hdGlvbkNvb3JkaW5hdG9yOjpUaHJlYWRlZEFuaW1hdGlvbkNvb3JkaW5hdG9yKENvbm5lY3Rp
b24qIGNvbm5lY3Rpb24sIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQpCisgICAgOiBtX3RocmVhZElk
ZW50aWZpZXIoMCkKKyAgICAsIG1fcnVuTG9vcCgwKQorICAgICwgbV9jb25uZWN0aW9uKGNvbm5l
Y3Rpb24pCisgICAgLCBtX2Rlc3RpbmF0aW9uSUQoZGVzdGluYXRpb25JRCkKKyAgICAsIG1fc2hv
dWxkUHJvY2Vzc0FuaW1hdGlvbnMoZmFsc2UpCit7CisgICAgbV90aHJlYWRJZGVudGlmaWVyID0g
Y3JlYXRlVGhyZWFkKHRocmVhZENhbGxiYWNrLCB0aGlzLCAiV2ViS2l0OiBDb29yZGluYXRlZEdy
YXBoaWNzOiBBbmltYXRpb24iKTsKKyAgICBtX3J1bkxvb3BDb25kaXRpb24ud2FpdChtX3J1bkxv
b3BNdXRleCk7CisgICAgY29ubmVjdGlvbi0+YWRkUXVldWVDbGllbnQodGhpcyk7Cit9CisKK3Zv
aWQgVGhyZWFkZWRBbmltYXRpb25Db29yZGluYXRvcjo6ZGlkUmVjZWl2ZU1lc3NhZ2VPbkNvbm5l
Y3Rpb25Xb3JrUXVldWUoQ29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCBtZXNzYWdlSUQs
IENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciosIGJvb2wmIGRpZEhhbmRsZU1lc3NhZ2UpCit7Cisg
ICAgLy8gQnkgbGlzdGVuaW5nIGRpcmVjdGx5IHRvIHRoZSB3b3JrIHF1ZXVlLCBvdXIgYW5pbWF0
aW9ucyBjYW4gYmUgdnN5bmNlZCBldmVuIGlmIHRoZSB3ZWIgcHJvY2VzcyBpcyBidXN5LgorICAg
IGlmICghbWVzc2FnZUlELmlzPENvcmVJUEM6Ok1lc3NhZ2VDbGFzc0xheWVyVHJlZUNvb3JkaW5h
dG9yPigpIHx8IG1lc3NhZ2VJRC5nZXQ8TWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpL
aW5kPigpICE9IE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvcjo6RGlkRmx1c2hBbmltYXRp
b25zSUQpIHsKKyAgICAgICAgZGlkSGFuZGxlTWVzc2FnZSA9IGZhbHNlOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgc2NoZWR1bGVBbmltYXRpb25zKCk7CisgICAgZGlkSGFuZGxlTWVz
c2FnZSA9IHRydWU7Cit9CisKK3ZvaWQgVGhyZWFkZWRBbmltYXRpb25Db29yZGluYXRvcjo6YWRk
QW5pbWF0aW9ucyhXZWJMYXllcklEIGxheWVyLCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9u
cyYgYW5pbWF0aW9ucykKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9wZW5kaW5nQW5pbWF0
aW9uc011dGV4KTsKKyAgICBtX3BlbmRpbmdBbmltYXRpb25zLmFwcGVuZChMYXllckFuaW1hdGlv
bihsYXllciwgYW5pbWF0aW9ucywgbV9jb25uZWN0aW9uLmdldCgpLCBtX2Rlc3RpbmF0aW9uSUQp
KTsKK30KKwordm9pZCBUaHJlYWRlZEFuaW1hdGlvbkNvb3JkaW5hdG9yOjpkZXRhY2hMYXllcihX
ZWJMYXllcklEIGlkKQoreworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fcGVu
ZGluZ0FuaW1hdGlvbnNNdXRleCk7CisgICAgICAgIGZvciAoaW50IGkgPSBtX3BlbmRpbmdBbmlt
YXRpb25zLnNpemUoKSAtIDE7IGkgPj0gMDsgIC0taSkgeworICAgICAgICAgICAgaWYgKG1fcGVu
ZGluZ0FuaW1hdGlvbnNbaV0ubGF5ZXJJRCgpID09IGlkKQorICAgICAgICAgICAgICAgIG1fcGVu
ZGluZ0FuaW1hdGlvbnMucmVtb3ZlKGkpOworICAgICAgICB9CisgICAgfQorCisgICAgeworICAg
ICAgICBNdXRleExvY2tlciBsb2NrZXIobV9hbmltYXRpb25zTXV0ZXgpOworICAgICAgICBmb3Ig
KGludCBpID0gbV9hbmltYXRpb25zLnNpemUoKSAtIDE7IGkgPj0gMDsgIC0taSkgeworICAgICAg
ICAgICAgaWYgKG1fYW5pbWF0aW9uc1tpXS5sYXllcklEKCkgPT0gaWQpCisgICAgICAgICAgICAg
ICAgbV9hbmltYXRpb25zLnJlbW92ZShpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBU
aHJlYWRlZEFuaW1hdGlvbkNvb3JkaW5hdG9yOjpyZW1vdmVBbGxBbmltYXRpb25zKCkKK3sKKyAg
ICBNdXRleExvY2tlciBsb2NrZXIobV9hbmltYXRpb25zTXV0ZXgpOworICAgIG1fYW5pbWF0aW9u
cy5jbGVhcigpOworfQorCitib29sIFRocmVhZGVkQW5pbWF0aW9uQ29vcmRpbmF0b3I6OkxheWVy
QW5pbWF0aW9uOjpwcm9jZXNzKCkKK3sKKyAgICBpZiAoIW1fYW5pbWF0aW9ucy5oYXNSdW5uaW5n
QW5pbWF0aW9ucygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2FuaW1hdGlvbnMu
YXBwbHkodGhpcyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgVGhyZWFkZWRBbmltYXRp
b25Db29yZGluYXRvcjo6TGF5ZXJBbmltYXRpb246OnNldEFuaW1hdGVkVHJhbnNmb3JtKGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCit7CisgICAgbV9jb25uZWN0aW9uLT5z
ZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpTZXRMYXllckFuaW1hdGVk
VHJhbnNmb3JtKG1fbGF5ZXJJRCwgdHJhbnNmb3JtKSwgbV9kZXN0aW5hdGlvbklEKTsKK30KKwor
dm9pZCBUaHJlYWRlZEFuaW1hdGlvbkNvb3JkaW5hdG9yOjpMYXllckFuaW1hdGlvbjo6c2V0QW5p
bWF0ZWRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpCit7CisgICAgbV9jb25uZWN0aW9uLT5zZW5kKE1l
c3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpTZXRMYXllckFuaW1hdGVkT3BhY2l0
eShtX2xheWVySUQsIG9wYWNpdHkpLCBtX2Rlc3RpbmF0aW9uSUQpOworfQorCitib29sIFRocmVh
ZGVkQW5pbWF0aW9uQ29vcmRpbmF0b3I6OnByb2Nlc3NBbmltYXRpb25zKCkKK3sKKyAgICBNdXRl
eExvY2tlciBsb2NrZXIobV9hbmltYXRpb25zTXV0ZXgpOworICAgIHsKKyAgICAgICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKG1fcGVuZGluZ0FuaW1hdGlvbnNNdXRleCk7CisgICAgICAgIG1fYW5pbWF0
aW9ucy5hcHBlbmQobV9wZW5kaW5nQW5pbWF0aW9ucyk7CisgICAgICAgIG1fcGVuZGluZ0FuaW1h
dGlvbnMuY2xlYXIoKTsKKyAgICB9CisKKyAgICBib29sIGhhc0FjdGl2ZUFuaW1hdGlvbnMgPSBm
YWxzZTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fYW5pbWF0aW9ucy5zaXplKCk7ICsraSkK
KyAgICAgICAgaGFzQWN0aXZlQW5pbWF0aW9ucyA9IG1fYW5pbWF0aW9uc1tpXS5wcm9jZXNzKCkg
fHwgaGFzQWN0aXZlQW5pbWF0aW9uczsKKworICAgIHNldFNob3VsZFByb2Nlc3NBbmltYXRpb25z
KGZhbHNlKTsKKyAgICByZXR1cm4gaGFzQWN0aXZlQW5pbWF0aW9uczsKK30KKworYm9vbCBUaHJl
YWRlZEFuaW1hdGlvbkNvb3JkaW5hdG9yOjpzaG91bGRQcm9jZXNzQW5pbWF0aW9ucygpCit7Cisg
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fc2hvdWxkUHJvY2Vzc011dGV4KTsKKyAgICByZXR1cm4g
bV9zaG91bGRQcm9jZXNzQW5pbWF0aW9uczsKK30KKwordm9pZCBUaHJlYWRlZEFuaW1hdGlvbkNv
b3JkaW5hdG9yOjpzZXRTaG91bGRQcm9jZXNzQW5pbWF0aW9ucyhib29sIGIpCit7CisgICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKG1fc2hvdWxkUHJvY2Vzc011dGV4KTsKKyAgICBtX3Nob3VsZFByb2Nl
c3NBbmltYXRpb25zID0gYjsKK30KKwordm9pZCBUaHJlYWRlZEFuaW1hdGlvbkNvb3JkaW5hdG9y
Ojpwcm9jZXNzQW5pbWF0aW9uc0FuZEZsdXNoKCkKK3sKKyAgICBpZiAoIXNob3VsZFByb2Nlc3NB
bmltYXRpb25zKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChwcm9jZXNzQW5pbWF0aW9u
cygpKQorICAgICAgICBtX2Nvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHk6OkZsdXNoQW5pbWF0aW9ucygpLCBtX2Rlc3RpbmF0aW9uSUQpOworfQorCit2
b2lkIFRocmVhZGVkQW5pbWF0aW9uQ29vcmRpbmF0b3I6OnNjaGVkdWxlQW5pbWF0aW9ucygpCit7
CisgICAgaWYgKHNob3VsZFByb2Nlc3NBbmltYXRpb25zKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBzZXRTaG91bGRQcm9jZXNzQW5pbWF0aW9ucyh0cnVlKTsKKyAgICBtX3J1bkxvb3AtPmRpc3Bh
dGNoKGJpbmQoJlRocmVhZGVkQW5pbWF0aW9uQ29vcmRpbmF0b3I6OnByb2Nlc3NBbmltYXRpb25z
QW5kRmx1c2gsIHRoaXMpKTsKK30KKwordm9pZCBUaHJlYWRlZEFuaW1hdGlvbkNvb3JkaW5hdG9y
Ojp0aHJlYWRCb2R5KCkKK3sKKyAgICBtX3J1bkxvb3AgPSBSdW5Mb29wOjpjdXJyZW50KCk7Cisg
ICAgbV9ydW5Mb29wQ29uZGl0aW9uLnNpZ25hbCgpOworICAgIC8vIFdlIHNob3VsZCBwcm9jZXNz
IGFuaW1hdGlvbnMgb25jZSBoZXJlLCBpbiBjYXNlIGEgc2NoZWR1bGVBbmltYXRpb25zKCkgY2Fs
bCBoYXMgYmVlbiBkaXNjYXJkZWQgZHVlIHRvIHJ1bkxvb3Agbm90IGJlaW5nIGNyZWF0ZWQuCisg
ICAgcHJvY2Vzc0FuaW1hdGlvbnMoKTsKKyAgICBSdW5Mb29wOjpydW4oKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9UaHJlYWRlZEFuaW1hdGlvbkNvb3JkaW5hdG9yLmggYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZEFuaW1hdGlv
bkNvb3JkaW5hdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY0Mjcz
OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL1RocmVhZGVkQW5pbWF0aW9uQ29vcmRpbmF0b3IuaApAQCAtMCww
ICsxLDExNSBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisK
KyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5k
ZWYgVGhyZWFkZWRBbmltYXRpb25Db29yZGluYXRvcl9oCisjZGVmaW5lIFRocmVhZGVkQW5pbWF0
aW9uQ29vcmRpbmF0b3JfaAorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjaW5j
bHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXll
ckFuaW1hdGlvbi5oIgorI2luY2x1ZGUgPENvcmVJUEMvQ29ubmVjdGlvbi5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvUnVuTG9vcC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1
ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKK2NsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4OworfQorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgVGhyZWFkZWRBbmltYXRpb25Db29yZGluYXRvcgorICAgICAgICA6
IENvcmVJUEM6OkNvbm5lY3Rpb246OlF1ZXVlQ2xpZW50CisgICAgICAgICwgcHVibGljIFdlYkNv
cmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6QW5pbWF0aW9uQ29sbGVjdG9yIHsKKworcHVi
bGljOgorICAgIHZvaWQgYWRkQW5pbWF0aW9ucyhXZWJMYXllcklELCBjb25zdCBXZWJDb3JlOjpH
cmFwaGljc0xheWVyQW5pbWF0aW9ucyYpOworICAgIHZvaWQgcmVtb3ZlQWxsQW5pbWF0aW9ucygp
OworICAgIGJvb2wgcHJvY2Vzc0FuaW1hdGlvbnMoKTsKKyAgICB2b2lkIHNjaGVkdWxlQW5pbWF0
aW9ucygpOworICAgIHZvaWQgZGV0YWNoTGF5ZXIoV2ViTGF5ZXJJRCk7CisgICAgc3RhdGljIFBh
c3NPd25QdHI8VGhyZWFkZWRBbmltYXRpb25Db29yZGluYXRvcj4gY3JlYXRlKENvcmVJUEM6OkNv
bm5lY3Rpb24qIGNvbm5lY3Rpb24sIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRocmVhZGVkQW5pbWF0aW9uQ29vcmRpbmF0b3IoY29u
bmVjdGlvbiwgZGVzdGluYXRpb25JRCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBUaHJlYWRl
ZEFuaW1hdGlvbkNvb3JkaW5hdG9yKENvcmVJUEM6OkNvbm5lY3Rpb24qLCB1aW50NjRfdCk7CisK
KyAgICBjbGFzcyBMYXllckFuaW1hdGlvbiA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVy
QW5pbWF0aW9uOjpDbGllbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgYm9vbCBwcm9jZXNzKCk7
CisKKyAgICAgICAgTGF5ZXJBbmltYXRpb24oV2ViTGF5ZXJJRCBsYXllcklELCBjb25zdCBXZWJD
b3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYgYW5pbWF0aW9ucywgQ29yZUlQQzo6Q29ubmVj
dGlvbiogY29ubmVjdGlvbiwgdWludDY0X3QgZGVzdGluYXRpb25JRCkKKyAgICAgICAgICAgIDog
bV9sYXllcklEKGxheWVySUQpCisgICAgICAgICAgICAsIG1fYW5pbWF0aW9ucyhhbmltYXRpb25z
KQorICAgICAgICAgICAgLCBtX2Nvbm5lY3Rpb24oY29ubmVjdGlvbikKKyAgICAgICAgICAgICwg
bV9kZXN0aW5hdGlvbklEKGRlc3RpbmF0aW9uSUQpCisgICAgICAgIHsKKyAgICAgICAgfQorCisg
ICAgICAgIFdlYkxheWVySUQgbGF5ZXJJRCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJJRDsgfQor
CisgICAgcHJpdmF0ZToKKyAgICAgICAgV2ViTGF5ZXJJRCBtX2xheWVySUQ7CisgICAgICAgIFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zIG1fYW5pbWF0aW9uczsKKyAgICAgICAgUmVm
UHRyPENvcmVJUEM6OkNvbm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKKyAgICAgICAgdWludDY0X3Qg
bV9kZXN0aW5hdGlvbklEOworCisgICAgICAgIC8vIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmlt
YXRpb246OkNsaWVudAorICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0QW5pbWF0ZWRUcmFuc2Zvcm0o
Y29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAgICAgICAgdmlydHVhbCB2
b2lkIHNldEFuaW1hdGVkT3BhY2l0eShmbG9hdCk7CisgICAgfTsKKworICAgIHN0YXRpYyB2b2lk
IHRocmVhZENhbGxiYWNrKHZvaWQqIG9iamVjdCkKKyAgICB7CisgICAgICAgIHN0YXRpY19jYXN0
PFRocmVhZGVkQW5pbWF0aW9uQ29vcmRpbmF0b3IqPihvYmplY3QpLT50aHJlYWRCb2R5KCk7Cisg
ICAgfQorCisgICAgdm9pZCB0aHJlYWRCb2R5KCk7CisgICAgdm9pZCBwcm9jZXNzQW5pbWF0aW9u
c0FuZEZsdXNoKCk7CisgICAgYm9vbCBzaG91bGRQcm9jZXNzQW5pbWF0aW9ucygpOworICAgIHZv
aWQgc2V0U2hvdWxkUHJvY2Vzc0FuaW1hdGlvbnMoYm9vbCk7CisKKyAgICB2aXJ0dWFsIHZvaWQg
ZGlkUmVjZWl2ZU1lc3NhZ2VPbkNvbm5lY3Rpb25Xb3JrUXVldWUoQ29yZUlQQzo6Q29ubmVjdGlv
biosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiwgYm9vbCYg
ZGlkSGFuZGxlTWVzc2FnZSk7CisKKyAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSWRlbnRp
ZmllcjsKKyAgICBNdXRleCBtX2FuaW1hdGlvbnNNdXRleDsKKyAgICBWZWN0b3I8TGF5ZXJBbmlt
YXRpb24+IG1fYW5pbWF0aW9uczsKKworICAgIE11dGV4IG1fcGVuZGluZ0FuaW1hdGlvbnNNdXRl
eDsKKyAgICBWZWN0b3I8TGF5ZXJBbmltYXRpb24+IG1fcGVuZGluZ0FuaW1hdGlvbnM7CisKKyAg
ICBNdXRleCBtX3J1bkxvb3BNdXRleDsKKyAgICBXZWJDb3JlOjpSdW5Mb29wKiBtX3J1bkxvb3A7
CisgICAgVGhyZWFkQ29uZGl0aW9uIG1fcnVuTG9vcENvbmRpdGlvbjsKKyAgICBSZWZQdHI8Q29y
ZUlQQzo6Q29ubmVjdGlvbj4gbV9jb25uZWN0aW9uOworICAgIHVpbnQ2NF90IG1fZGVzdGluYXRp
b25JRDsKKworICAgIE11dGV4IG1fc2hvdWxkUHJvY2Vzc011dGV4OworICAgIGJvb2wgbV9zaG91
bGRQcm9jZXNzQW5pbWF0aW9uczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjZW5kaWYgLy8gVGhyZWFkZWRBbmlt
YXRpb25Db29yZGluYXRvcl9oCmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9yYXcv
Vmlldy5jcHAgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9yYXcvVmlldy5jcHAKaW5kZXggYTdiMGFh
OC4uZjA0YTRkMSAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvcmF3L1ZpZXcuY3Bw
CisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L3Jhdy9WaWV3LmNwcApAQCAtNTksNiArNTksNyBA
QCBWaWV3Ojp+VmlldygpCiBWaWV3OjpWaWV3KGNvbnN0IFFTdHJpbmcmIHVybCkKICAgICA6IG1f
dXJsKHVybCkKICAgICAsIG1fYWN0aXZlKGZhbHNlKQorICAgICwgbV9uZWVkc0Rpc3BsYXkoZmFs
c2UpCiB7CiAgICAgc2V0U3VyZmFjZVR5cGUoT3BlbkdMU3VyZmFjZSk7CiAgICAgc2V0R2VvbWV0
cnkoNTAsIDUwLCA5ODAsIDYwMCk7CkBAIC03NiwxNCArNzcsMTUgQEAgVmlldzo6Vmlldyhjb25z
dCBRU3RyaW5nJiB1cmwpCiAKIHZvaWQgVmlldzo6ZXhwb3NlRXZlbnQoUUV4cG9zZUV2ZW50KiBl
dmVudCkKIHsKLSAgICBpZiAoIW1fYWN0aXZlKSB7Ci0gICAgICAgIG1fYWN0aXZlID0gdHJ1ZTsK
LSAgICAgICAgV0tQYWdlTG9hZFVSTChtX3dlYlZpZXctPnBhZ2VSZWYoKSwgV0tVUkxDcmVhdGVX
aXRoVVRGOENTdHJpbmcobV91cmwudG9Bc2NpaSgpLmRhdGEoKSkpOworICAgIGlmIChtX2FjdGl2
ZSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIG1fd2ViVmlldy0+c2V0Rm9jdXNlZCh0cnVl
KTsKLSAgICAgICAgbV93ZWJWaWV3LT5zZXRWaXNpYmxlKHRydWUpOwotICAgICAgICBtX3dlYlZp
ZXctPnNldEFjdGl2ZSh0cnVlKTsKLSAgICB9CisgICAgbV9hY3RpdmUgPSB0cnVlOworICAgIFdL
UGFnZUxvYWRVUkwobV93ZWJWaWV3LT5wYWdlUmVmKCksIFdLVVJMQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKG1fdXJsLnRvQXNjaWkoKS5kYXRhKCkpKTsKKworICAgIG1fd2ViVmlldy0+c2V0Rm9jdXNl
ZCh0cnVlKTsKKyAgICBtX3dlYlZpZXctPnNldFZpc2libGUodHJ1ZSk7CisgICAgbV93ZWJWaWV3
LT5zZXRBY3RpdmUodHJ1ZSk7CiB9CiAKIHZvaWQgVmlldzo6cmVzaXplRXZlbnQoUVJlc2l6ZUV2
ZW50KiBldmVudCkKQEAgLTkxLDIwICs5MywzMCBAQCB2b2lkIFZpZXc6OnJlc2l6ZUV2ZW50KFFS
ZXNpemVFdmVudCogZXZlbnQpCiAgICAgbV93ZWJWaWV3LT5zZXRTaXplKGV2ZW50LT5zaXplKCkp
OwogfQogCi12b2lkIFZpZXc6OnRpbWVyRXZlbnQoUVRpbWVyRXZlbnQqIGV2ZW50KQordm9pZCBW
aWV3OjpkaXNwbGF5KCkKK3sKKyAgICBtX2NvbnRleHQtPm1ha2VDdXJyZW50KHRoaXMpOworICAg
IG1fd2ViVmlldy0+cGFpbnQoUU1hdHJpeDR4NCgpLCAxLCAwKTsKKyAgICBtX2NvbnRleHQtPnN3
YXBCdWZmZXJzKHRoaXMpOworICAgIG1fbmVlZHNEaXNwbGF5ID0gZmFsc2UKK30KKworYm9vbCBW
aWV3OjpldmVudChRRXZlbnQqIGV2ZW50KQogewotICAgIGlmIChldmVudC0+dGltZXJJZCgpID09
IG1fcGFpbnRUaW1lci50aW1lcklkKCkpIHsKLSAgICAgICAgbV9wYWludFRpbWVyLnN0b3AoKTsK
LSAgICAgICAgbV9jb250ZXh0LT5tYWtlQ3VycmVudCh0aGlzKTsKLSAgICAgICAgbV93ZWJWaWV3
LT5wYWludChRTWF0cml4NHg0KCksIDEsIDApOwotICAgICAgICBtX2NvbnRleHQtPnN3YXBCdWZm
ZXJzKHRoaXMpOworICAgIGlmIChldmVudC0+dHlwZSgpID09IFFFdmVudDo6UGFpbnQpIHsKKyAg
ICAgICAgZGlzcGxheSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CisKKyAgICByZXR1
cm4gUVdpbmRvdzo6ZXZlbnQoZXZlbnQpOwogfQogCi12b2lkIFZpZXc6OnZpZXdOZWVkc0Rpc3Bs
YXkoY29uc3QgUVJlY3QmKQordm9pZCBWaWV3Ojp2aWV3TmVlZHNEaXNwbGF5KGNvbnN0IFFSZWN0
JiByZWN0KQogewotICAgIGlmICghbV9wYWludFRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1f
cGFpbnRUaW1lci5zdGFydCgwLCB0aGlzKTsKKyAgICBpZiAobV9uZWVkc0Rpc3BsYXkpCisgICAg
ICAgIHJldHVybjsKKyAgICBtX25lZWRzRGlzcGxheSA9IHRydWU7CisgICAgUUd1aUFwcGxpY2F0
aW9uOjpwb3N0RXZlbnQodGhpcywgbmV3IFFQYWludEV2ZW50KHJlY3QpKTsKIH0KIAogdm9pZCBW
aWV3Ojp2aWV3UmVxdWVzdGVkQ3Vyc29yT3ZlcnJpZGUoY29uc3QgUUN1cnNvciYgY3Vyc29yKQpk
aWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvcmF3L1ZpZXcuaCBiL1Rvb2xzL01pbmlC
cm93c2VyL3F0L3Jhdy9WaWV3LmgKaW5kZXggZTUzMjIzZi4uZjJkZDMxNiAxMDA2NDQKLS0tIGEv
VG9vbHMvTWluaUJyb3dzZXIvcXQvcmF3L1ZpZXcuaAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9x
dC9yYXcvVmlldy5oCkBAIC0yMiw2ICsyMiw3IEBACiAKICNpbmNsdWRlIDxRQmFzaWNUaW1lcj4K
ICNpbmNsdWRlIDxRT3BlbkdMQ29udGV4dD4KKyNpbmNsdWRlIDxRUGFpbnRFdmVudD4KICNpbmNs
dWRlIDxRV2luZG93PgogI2luY2x1ZGUgPFdlYktpdDIvcXJhd3dlYnZpZXdfcC5oPgogCkBAIC00
NCw2ICs0NSw3IEBAIHB1YmxpYzogLy8gUVJhd1dlYlZpZXdDbGllbnQKIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIHZvaWQgZXhwb3NlRXZlbnQoUUV4cG9zZUV2ZW50Kik7CiAgICAgdmlydHVhbCB2
b2lkIHJlc2l6ZUV2ZW50KFFSZXNpemVFdmVudCopOworICAgIHZpcnR1YWwgYm9vbCBldmVudChR
RXZlbnQqKTsKIAogICAgIHZpcnR1YWwgdm9pZCBrZXlQcmVzc0V2ZW50KFFLZXlFdmVudCogZXZl
bnQpIHsgbV93ZWJWaWV3LT5zZW5kS2V5RXZlbnQoZXZlbnQpOyB9CiAgICAgdmlydHVhbCB2b2lk
IGtleVJlbGVhc2VFdmVudChRS2V5RXZlbnQqIGV2ZW50KSB7IG1fd2ViVmlldy0+c2VuZEtleUV2
ZW50KGV2ZW50KTsgfQpAQCAtNTYsMTIgKzU4LDEyIEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAg
ICAgUVJhd1dlYlZpZXcqIG1fd2ViVmlldzsKICAgICBRT3BlbkdMQ29udGV4dCAqbV9jb250ZXh0
OwotICAgIFFCYXNpY1RpbWVyIG1fcGFpbnRUaW1lcjsKKworICAgIHZvaWQgZGlzcGxheSgpOwog
CiAgICAgUVN0cmluZyBtX3VybDsKICAgICBib29sIG1fYWN0aXZlOwotCi0gICAgdmlydHVhbCB2
b2lkIHRpbWVyRXZlbnQoUVRpbWVyRXZlbnQqKTsKKyAgICBib29sIG1fbmVlZHNEaXNwbGF5Owog
fTsKIAogI2VuZGlmIC8vIFZpZXdfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169706</attachid>
            <date>2012-10-19 15:21:05 -0700</date>
            <delta_ts>2012-10-19 16:09:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93146-20121019151930.patch</filename>
            <type>text/plain</type>
            <size>48511</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxOTQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGYxOGM4YWNmZGRjNDE0
YmNkM2U3NjQzYTI1M2RjMmRjMGY3YjdiNi4uNDcwYTJhYjE1NjUyYTllOWEyMzkyM2Q2NmEwM2Vh
ODNlOGIwZjI2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDEyLTEwLTE5ICBObydh
bSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgQ29vcmRp
bmF0ZWQgR3JhcGhpY3M6IEVuYWJsZSB0aHJlYWRlZC9JUEMgYW5pbWF0aW9ucworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTMxNDYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgZW5hYmxlcnMgdG8gVGV4
dHVyZU1hcHBlciBhbmQgR3JhcGhpY3NMYXllckFuaW1hdGlvbiBzbyB0aGF0IHRoZXkgY291bGQg
YmUgdXNlZAorICAgICAgICBhY3Jvc3MgcHJvY2Vzc2VzIHdpdGggSVBDLiBBZGRlZCBzb21lIHB1
YmxpYyBhY2Nlc3NvcnMgdG8gR3JhcGhpY3NMYXllckFuaW1hdGlvbiwKKyAgICAgICAgYW5kIGFs
bG93ZWQgYSBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciB0byByZWNlaXZlIGEgZnVsbCBsaXN0
IG9mIGFuaW1hdGlvbnMuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyBhbmltYXRpb24g
YW5kIGNvbXBvc2l0aW5nIHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NMYXllckFuaW1hdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
QW5pbWF0aW9uOjpHcmFwaGljc0xheWVyQW5pbWF0aW9uKToKKyAgICAgICAgICAgIEluaXRpYWxp
emUgdGhlIGFuaW1hdGlvbiB3aXRoIHRoZSBzdGFydFRpbWUgaW5zdGVhZCBvZiB0aGUgb2Zmc2V0
LgorCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9uczo6Z2V0QWN0aXZl
QW5pbWF0aW9ucyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckFu
aW1hdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbjo6c2V0
U3RhdGUpOgorICAgICAgICAgICAgQWxsb3cgc2V0dGluZyB0aGUgcGF1c2UgdGltZSBhcyB3ZWxs
LgorCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9uOjpib3hTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb246OnN0YXJ0VGltZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9uOjpwYXVzZVRpbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbjo6YW5pbWF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb246OmtleWZyYW1lcyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9uOjpsaXN0c01hdGNoKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zOjpzaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zOjphbmltYXRpb25zKToKKyAgICAgICAgICAgIEFk
ZCBwdWJsaWMgYWNjZXNzb3JzIHRvIEdyYXBoaWNzTGF5ZXJBbmltYXRpb24gcHJvcGVydGllcy4K
KworICAgICAgICAoR3JhcGhpY3NMYXllckFuaW1hdGlvbik6CisgICAgICAgIChHcmFwaGljc0xh
eWVyQW5pbWF0aW9ucyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyOjphZGRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXI6OnNldEFuaW1hdGlvbnMpOgorICAgICAgICAgICAgQWxsb3cg
cmVwbGFjaW5nIHRoZSBlbnRpcmUgbGlzdCBvZiBhbmltYXRpb25zLgorCisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXIuaDoKKyAgICAgICAgKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllcjo6YXBwbHlBbmltYXRpb25zUmVj
dXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5oOgorICAgICAgICAoVGV4dHVyZU1hcHBlckxh
eWVyKToKKwogMjAxMi0xMC0xOSAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzE5MTUuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5k
ZXggZjZkN2Q2ZGQ1MjE0ZGMxMTIwZDRhYTg3NDU1MGFjNTY1ZWYyZDNkNy4uYzdjOTFjNTMzODM0
YzRkZTRlMTJkMzM4YzI2MzIzNjQ3MjJlMDFhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg4IEBA
CisyMDEyLTEwLTE5ICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+
CisKKyAgICAgICAgQ29vcmRpbmF0ZWQgR3JhcGhpY3M6IEVuYWJsZSB0aHJlYWRlZC9JUEMgYW5p
bWF0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTMxNDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBS
ZS1lbmFibGUgVUktcHJvY2VzcyBhbmltYXRpb25zIGZvciBDb29yZGluYXRlZC1HcmFwaGljcy9U
ZXh0dXJlTWFwcGVyLgorICAgICAgICAtIEFkZGVkIGFuIGFyZ3VtZW50IGNvZGVyIGZvciBHcmFw
aGljc0xheWVyQW5pbWF0aW9ucy4KKyAgICAgICAgLSBBbGxvdyBMYXllclRyZWVDb29yZGluYXRv
ciB0byBtYW5hZ2UgdGhlIGFuaW1hdGlvbnMgcGVyIGxheWVyIHdpdGggdGhlIHByb3h5LAorICAg
ICAgICAgIGFzIG9wcG9zZWQgdG8gYXBwbHlpbmcgdGhlIGFuaW1hdGlvbiB2YWx1ZXMgaW4gdGhl
IHdlYiBwcm9jZXNzIGFzIGJlZm9yZS4KKyAgICAgICAgLSBMYXllclRyZWVSZW5kZXJlciBub3cg
Y2FsbHMgdXBkYXRlVmlld3BvcnQoKSBhZnRlciBwYWludGluZyB3aGVuIGFuIGFuaW1hdGlvbiBp
cyBhY3RpdmUuCisKKyAgICAgICAgVG8gb3ZlcmNvbWUgdGhlIHByb2JsZW0gd2UndmUgaGFkIGlu
IHRoZSBwYXN0IHdpdGggc3luY2hyb25pemluZyBVSS1zaWRlIGFuZCB3ZWItc2lkZQorICAgICAg
ICBhbmltYXRpb25zLCB3ZSBub3cgbG9jayB0aGUgYW5pbWF0aW9ucyBpbiB0aGUgVUkgcHJvY2Vz
cyB3aGVuIGEgZnJhbWUgc3RhcnRzIHJlbmRlcmluZywKKyAgICAgICAgYW5kIHVubG9jayBpdCB3
aGVuIHRoZSBmcmFtZSBmaW5pc2hlcyByZW5kZXJpbmcsIG9yIGlmIGFmdGVyIHRoZSBsYXlvdXQg
dGhlcmUgaXMgbm8gdmlzaWJsZQorICAgICAgICBjaGFuZ2VzIHBlbmRpbmcgb24gdGhlIHNjcmVl
bi4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weToKKyAgICAgICAgKGhl
YWRlcnNfZm9yX3R5cGUpOgorICAgICAgICAqIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHA6CisgICAgICAgIChDb3JlSVBDKToK
KyAgICAgICAgKENvcmVJUEM6OmVuY29kZVRpbWluZ0Z1bmN0aW9uKToKKyAgICAgICAgKENvcmVJ
UEM6OmRlY29kZVRpbWluZ0Z1bmN0aW9uKToKKyAgICAgICAgKENvcmVJUEM6Ojo6ZW5jb2RlKToK
KyAgICAgICAgKENvcmVJUEM6Ojo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAgICAgQWRkZWQgYXJndW1lbnQgY29kZXJzIGZvciBHcmFwaGlj
c0xheWVyQW5pbWF0aW9ucy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBo
aWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVDb29yZGluYXRvclByb3h5OjpzZXRMYXllckFuaW1hdGlvbnMpOgorICAgICAgICAoV2Vi
S2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpzZXRBbmltYXRpb25zTG9ja2VkKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRv
clByb3h5Lmg6CisgICAgICAgIChMYXllclRyZWVDb29yZGluYXRvclByb3h5KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5
Lm1lc3NhZ2VzLmluOgorICAgICAgICAgICAgQWRkZWQgYW4gb3B0aW9uIHRvIHN5bmMgdGhlIGxh
eWVyJ3MgYW5pbWF0aW9ucywgYW5kIGFsc28gdG8gbG9jay91bmxvY2sgYW5pbWF0aW9ucy4KKwor
ICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVy
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXI6OkxheWVyVHJlZVJlbmRl
cmVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXI6OnBhaW50VG9DdXJyZW50
R0xDb250ZXh0KToKKyAgICAgICAgICAgIFN5bmMgYW5pbWF0aW9ucyBpZiB0aGV5J3JlIG5vdCBs
b2NrZWQsIGFuZCBjYWxsIHVwZGF0ZVZpZXdwb3J0KCkgaWYgd2UgaGF2ZSBhbmltYXRpb25zLgor
CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjpmbHVzaExheWVyQ2hhbmdlcyk6
CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllckFuaW1hdGlvbnMp
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6c2V0QW5pbWF0aW9uc0xvY2tl
ZCk6CisKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVS
ZW5kZXJlci5oOgorICAgICAgICAoTGF5ZXJUcmVlUmVuZGVyZXIpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmRpZENo
YW5nZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjpzZXRTaG91bGRVcGRhdGVWaXNpYmxlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNMYXllclN0YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0FuaW1hdGlvbnMp
OgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpmbHVzaENvbXBv
c2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6YWRkQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6cGF1c2VBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZW1vdmVBbmltYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjphbmltYXRpb25TdGFydGVkVGltZXJGaXJl
ZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgICAgIFBhc3MgdGhlIGFuaW1hdGlvbiBp
bmZvIHRvIHRoZSBVSSBwcm9jZXNzIGluc3RlYWQgb2YgYXBwbHlpbmcgaXQgaW4gdGhlIHdlYiBw
cm9jZXNzLgorCisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6Omhh
c1BlbmRpbmdWaXNpYmxlQ2hhbmdlcyk6CisgICAgICAgICAgICBDb21wdXRlIHdoZXRoZXIgYSBs
YXllciB0cmVlIG1pZ2h0IGhhdmUgc3luYyBpc3N1ZXMgb3IgZmxpY2tlcnMgaWYgcmVuZGVyZWQg
d2hpbGUKKyAgICAgICAgICAgIGJhY2tncm91bmQgYW5pbWF0aW9ucyBhcmUgb25nb2luZy4KKwor
ICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpjb21wdXRlVHJhbnNm
b3JtZWRWaXNpYmxlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OnNlbGZPckFuY2VzdG9ySGF2ZU5vbkFmZmluZVRyYW5zZm9ybXMpOgorICAgICAgICAg
ICAgRG9uJ3QgYWxsb3cgcHJvZ3Jlc3NpdmUgdGlsaW5nIGZvciBsYXllcnMgd2l0aCBhbmltYXRp
b25zLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCk6CisgICAgICAgIChDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJU
cmVlQ29vcmRpbmF0b3I6OkxheWVyVHJlZUNvb3JkaW5hdG9yKToKKyAgICAgICAgKFdlYktpdDo6
TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmxvY2tBbmltYXRpb25zKToKKyAgICAgICAgKFdlYktpdCk6
CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjp1bmxvY2tBbmltYXRpb25z
KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnBlcmZvcm1TY2hlZHVs
ZWRMYXllckZsdXNoKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNl
dExheWVyQW5pbWF0aW9ucyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaDoKKyAgICAgICAgKExheWVyVHJlZUNv
b3JkaW5hdG9yKToKKwogMjAxMi0xMC0xOSAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzE5MzYuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQW5pbWF0aW9u
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJBbmlt
YXRpb24uY3BwCmluZGV4IDNhYTI1YWM0MGE0YzkxZjI4Njc4YTAxNzJjY2JiMzgzOWJjNjMyMmEu
LmQ4YTM2YmQyZGZhYTRlNTQ3OGVmNTk3MmQ2ZDc5NWExNGFkYmY5OTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJBbmltYXRpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJBbmlt
YXRpb24uY3BwCkBAIC0xNTYsMTMgKzE1NiwxMyBAQCBzdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRy
aXggYXBwbHlUcmFuc2Zvcm1BbmltYXRpb24oY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyogZgog
fQogCiAKLUdyYXBoaWNzTGF5ZXJBbmltYXRpb246OkdyYXBoaWNzTGF5ZXJBbmltYXRpb24oY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYga2V5ZnJhbWVzLCBjb25z
dCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgZG91YmxlIHRp
bWVPZmZzZXQsIGJvb2wgbGlzdHNNYXRjaCkKK0dyYXBoaWNzTGF5ZXJBbmltYXRpb246OkdyYXBo
aWNzTGF5ZXJBbmltYXRpb24oY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBLZXlmcmFtZVZhbHVl
TGlzdCYga2V5ZnJhbWVzLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24q
IGFuaW1hdGlvbiwgZG91YmxlIHN0YXJ0VGltZSwgYm9vbCBsaXN0c01hdGNoKQogICAgIDogbV9r
ZXlmcmFtZXMoa2V5ZnJhbWVzKQogICAgICwgbV9ib3hTaXplKGJveFNpemUpCiAgICAgLCBtX2Fu
aW1hdGlvbihBbmltYXRpb246OmNyZWF0ZShhbmltYXRpb24pKQogICAgICwgbV9uYW1lKG5hbWUp
CiAgICAgLCBtX2xpc3RzTWF0Y2gobGlzdHNNYXRjaCkKLSAgICAsIG1fc3RhcnRUaW1lKFdURjo6
Y3VycmVudFRpbWUoKSAtIHRpbWVPZmZzZXQpCisgICAgLCBtX3N0YXJ0VGltZShzdGFydFRpbWUp
CiAgICAgLCBtX3BhdXNlVGltZSgwKQogICAgICwgbV9zdGF0ZShQbGF5aW5nU3RhdGUpCiB7CkBA
IC0yODUsNiArMjg1LDE1IEBAIHZvaWQgR3JhcGhpY3NMYXllckFuaW1hdGlvbnM6OmFwcGx5KEdy
YXBoaWNzTGF5ZXJBbmltYXRpb246OkNsaWVudCogY2xpZW50KQogICAgICAgICBtX2FuaW1hdGlv
bnNbaV0uYXBwbHkoY2xpZW50KTsKIH0KIAorR3JhcGhpY3NMYXllckFuaW1hdGlvbnMgR3JhcGhp
Y3NMYXllckFuaW1hdGlvbnM6OmdldEFjdGl2ZUFuaW1hdGlvbnMoKSBjb25zdAoreworICAgIEdy
YXBoaWNzTGF5ZXJBbmltYXRpb25zIGFjdGl2ZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fYW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9hbmltYXRpb25zW2ld
LmlzQWN0aXZlKCkpCisgICAgICAgICAgICBhY3RpdmUuYWRkKG1fYW5pbWF0aW9uc1tpXSk7Cisg
ICAgfQorICAgIHJldHVybiBhY3RpdmU7Cit9CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckFuaW1hdGlvbi5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckFuaW1hdGlvbi5o
CmluZGV4IGU1ODI3OWM2YWM4MGQ3YTY1OTlhYzc0OGI2NmVmMmE3MjM0MTMxOWQuLjYzOGEyZDE4
OTEzMmJkYTU0OTFhNDhiZWNhNjNiMGFjMjA0YjUwMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJBbmltYXRpb24uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQW5pbWF0aW9uLmgKQEAg
LTQ1LDEwICs0NSwyMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhcHBseShDbGllbnQqKTsKICAgICB2
b2lkIHBhdXNlKGRvdWJsZSk7CiAgICAgQW5pbWF0aW9uU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlOyB9Ci0gICAgdm9pZCBzZXRTdGF0ZShBbmltYXRpb25TdGF0ZSBzKSB7IG1f
c3RhdGUgPSBzOyB9CisgICAgdm9pZCBzZXRTdGF0ZShBbmltYXRpb25TdGF0ZSBzLCBkb3VibGUg
cGF1c2VUaW1lID0gMCkKKyAgICB7CisgICAgICAgIG1fc3RhdGUgPSBzOworICAgICAgICBtX3Bh
dXNlVGltZSA9IHBhdXNlVGltZTsKKyAgICB9CiAgICAgQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3Bl
cnR5KCkgY29uc3QgeyByZXR1cm4gbV9rZXlmcmFtZXMucHJvcGVydHkoKTsgfQogICAgIGJvb2wg
aXNBY3RpdmUoKSBjb25zdDsKICAgICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFt
ZTsgfQorICAgIEludFNpemUgYm94U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYm94U2l6ZTsgfQor
ICAgIGRvdWJsZSBzdGFydFRpbWUoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0VGltZTsgfQorICAg
IGRvdWJsZSBwYXVzZVRpbWUoKSBjb25zdCB7IHJldHVybiBtX3BhdXNlVGltZTsgfQorICAgIFBh
c3NSZWZQdHI8QW5pbWF0aW9uPiBhbmltYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlv
bi5nZXQoKTsgfQorICAgIGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiBrZXlmcmFtZXMoKSBjb25z
dCB7IHJldHVybiBtX2tleWZyYW1lczsgfQorICAgIGJvb2wgbGlzdHNNYXRjaCgpIGNvbnN0IHsg
cmV0dXJuIG1fbGlzdHNNYXRjaDsgfQogCiBwcml2YXRlOgogICAgIHZvaWQgYXBwbHlJbnRlcm5h
bChDbGllbnQqLCBjb25zdCBBbmltYXRpb25WYWx1ZSogZnJvbSwgY29uc3QgQW5pbWF0aW9uVmFs
dWUqIHRvLCBmbG9hdCBwcm9ncmVzcyk7CkBAIC01Nyw3ICs2Nyw2IEBAIHByaXZhdGU6CiAgICAg
UmVmUHRyPEFuaW1hdGlvbj4gbV9hbmltYXRpb247CiAgICAgU3RyaW5nIG1fbmFtZTsKICAgICBi
b29sIG1fbGlzdHNNYXRjaDsKLSAgICBib29sIG1faGFzQmlnUm90YXRpb247CiAgICAgZG91Ymxl
IG1fc3RhcnRUaW1lOwogICAgIGRvdWJsZSBtX3BhdXNlVGltZTsKICAgICBBbmltYXRpb25TdGF0
ZSBtX3N0YXRlOwpAQCAtNzIsMTAgKzgxLDE1IEBAIHB1YmxpYzoKICAgICB2b2lkIHBhdXNlKGNv
bnN0IFN0cmluZyYsIGRvdWJsZSk7CiAgICAgdm9pZCBhcHBseShHcmFwaGljc0xheWVyQW5pbWF0
aW9uOjpDbGllbnQqKTsKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2FuaW1h
dGlvbnMuaXNFbXB0eSgpOyB9CisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2Fu
aW1hdGlvbnMuc2l6ZSgpOyB9CisgICAgY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXJBbmltYXRp
b24+JiBhbmltYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb25zOyB9CisgICAgVmVj
dG9yPEdyYXBoaWNzTGF5ZXJBbmltYXRpb24+JiBhbmltYXRpb25zKCkgeyByZXR1cm4gbV9hbmlt
YXRpb25zOyB9CiAKICAgICBib29sIGhhc1J1bm5pbmdBbmltYXRpb25zKCkgY29uc3Q7CiAgICAg
Ym9vbCBoYXNBY3RpdmVBbmltYXRpb25zT2ZUeXBlKEFuaW1hdGVkUHJvcGVydHlJRCB0eXBlKSBj
b25zdDsKIAorICAgIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zIGdldEFjdGl2ZUFuaW1hdGlvbnMo
KSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBWZWN0b3I8R3JhcGhpY3NMYXllckFuaW1hdGlvbj4g
bV9hbmltYXRpb25zOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIu
Y3BwCmluZGV4IDQyOTU0YTQ5OTYxY2EzY2ZmZGU2ZDNmZWFkMzg4MGRkYzA0ZDk2Y2MuLmYwNGNm
NDlkZWQ3Nzg5MzkyZWNhZGMwMTVmODVhOGQzZDYxMmI5NjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcApAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgiCiAKKyNpbmNs
dWRlICJHcmFwaGljc0xheWVyQW5pbWF0aW9uLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllckZh
Y3RvcnkuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyTGF5ZXIuaCIKIApAQCAtMzkyLDEyICsz
OTMsMTkgQEAgYm9vbCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQW5pbWF0aW9uKGNv
bnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3QKICAgICBpZiAodmFsdWVMaXN0LnByb3Bl
cnR5KCkgPT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSkKICAgICAgICAgbGlzdHNN
YXRjaCA9IHZhbGlkYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyh2YWx1ZUxpc3QsIGhhc0JpZ1JvdGF0
aW9uKSA+PSAwOwogCi0gICAgbV9hbmltYXRpb25zLmFkZChHcmFwaGljc0xheWVyQW5pbWF0aW9u
KGtleWZyYW1lc05hbWUsIHZhbHVlTGlzdCwgYm94U2l6ZSwgYW5pbSwgdGltZU9mZnNldCwgbGlz
dHNNYXRjaCkpOworICAgIG1fYW5pbWF0aW9ucy5hZGQoR3JhcGhpY3NMYXllckFuaW1hdGlvbihr
ZXlmcmFtZXNOYW1lLCB2YWx1ZUxpc3QsIGJveFNpemUsIGFuaW0sIFdURjo6Y3VycmVudFRpbWUo
KSAtIHRpbWVPZmZzZXQsIGxpc3RzTWF0Y2gpKTsKICAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1h
cHBlckxheWVyOjpBbmltYXRpb25DaGFuZ2UpOwogICAgIG1fYW5pbWF0aW9uU3RhcnRlZFRpbWVy
LnN0YXJ0T25lU2hvdCgwKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBHcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlcjo6c2V0QW5pbWF0aW9ucyhjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0
aW9ucyYgYW5pbWF0aW9ucykKK3sKKyAgICBtX2FuaW1hdGlvbnMgPSBhbmltYXRpb25zOworICAg
IG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTGF5ZXI6OkFuaW1hdGlvbkNoYW5nZSk7Cit9CisK
Kwogdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6cGF1c2VBbmltYXRpb24oY29uc3Qg
U3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKIHsKICAgICBtX2FuaW1h
dGlvbnMucGF1c2UoYW5pbWF0aW9uTmFtZSwgdGltZU9mZnNldCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlci5oCmluZGV4IDYzN2FiZDlkNDQwMzAzYjNmYWU5MTg4ODI4Y2Iw
ZWQzY2ZlNmFmM2IuLjUxMGIyM2Y1YzAyNDVkZTRjZjJiMDNkMDJiNDNiZWFmMzkyOGI4ZDIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCkBAIC04MSw2ICs4MSw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgYWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFs
dWVMaXN0JiwgY29uc3QgSW50U2l6ZSYsIGNvbnN0IEFuaW1hdGlvbiosIGNvbnN0IFN0cmluZyYs
IGRvdWJsZSk7CiAgICAgdmlydHVhbCB2b2lkIHBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYs
IGRvdWJsZSk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFuaW1hdGlvbihjb25zdCBTdHJpbmcm
KTsKKyAgICB2b2lkIHNldEFuaW1hdGlvbnMoY29uc3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMm
KTsKIAogICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2xh
eWVyLmdldCgpOyB9CiAgICAgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIqIGNvbnRlbnRzTGF5
ZXIoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzTGF5ZXI7IH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJM
YXllci5jcHAKaW5kZXggYjk1NDQ2MDllN2JmMTU3YzhkYTJiZTcwNWM2ZjM2NThhZWEwMjhiYy4u
NDZjZWVkYzA1ODIwZDVhYTQ5YWZlZmQwZjBiYzRjNjRhMDQ1Y2Q1YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJMYXllci5jcHAKQEAgLTUxMCw2ICs1MTAsMTMgQEAgYm9vbCBUZXh0dXJlTWFwcGVyTGF5
ZXI6OmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkgY29uc3QKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgVGV4dHVyZU1hcHBlckxheWVyOjphcHBseUFuaW1hdGlv
bnNSZWN1cnNpdmVseSgpCit7CisgICAgc3luY0FuaW1hdGlvbnMoKTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpCisgICAgICAgIG1fY2hpbGRyZW5b
aV0tPmFwcGx5QW5pbWF0aW9uc1JlY3Vyc2l2ZWx5KCk7Cit9CisKIHZvaWQgVGV4dHVyZU1hcHBl
ckxheWVyOjpzeW5jQW5pbWF0aW9ucygpCiB7CiAgICAgbV9hbmltYXRpb25zLmFwcGx5KHRoaXMp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJMYXllci5oCmluZGV4IDU3NDBhY2Y1MjNlMmRmM2M2NDVhZTViMjNi
NTU2NzE4YzFjNzg1OTYuLmJjODYwM2E4ZmE0MjQyMmY5Y2E3YTAzYjAyNmI0NWZlMWViNzlkMmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmgKQEAgLTEzMiw2ICsxMzIsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbkRlbHRhSWZOZWVkZWQoY29uc3QgRmxvYXRTaXplJik7
CiAKICAgICB2b2lkIHNldERlYnVnQm9yZGVyKGNvbnN0IENvbG9yJiwgZmxvYXQgd2lkdGgpOwor
ICAgIHZvaWQgYXBwbHlBbmltYXRpb25zUmVjdXJzaXZlbHkoKTsKIAogcHJpdmF0ZToKICAgICBU
ZXh0dXJlTWFwcGVyTGF5ZXIqIHJvb3RMYXllcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5IGIvU291cmNlL1dlYktpdDIvU2NyaXB0cy93
ZWJraXQyL21lc3NhZ2VzLnB5CmluZGV4IDQ1ODRhODUzMWM3NGFkZjZlMDQzNmEwZDBjMDRiODk2
MGM4OWIwMTYuLjFmZmY1MjE4OTYwNjkyM2YxYjE2MmU4MGM0ZDgyMGNkNjkyNzg4ZDUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weQorKysgYi9T
b3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMucHkKQEAgLTM4Niw2ICszODYs
NyBAQCBkZWYgaGVhZGVyc19mb3JfdHlwZSh0eXBlKToKICAgICAgICAgJ1dURjo6U3RyaW5nJzog
Wyc8d3RmL3RleHQvV1RGU3RyaW5nLmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpDb21wb3NpdGlv
blVuZGVybGluZSc6IFsnPFdlYkNvcmUvRWRpdG9yLmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpH
cmFtbWFyRGV0YWlsJzogWyc8V2ViQ29yZS9UZXh0Q2hlY2tlckNsaWVudC5oPiddLAorICAgICAg
ICAnV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnMnOiBbJzxXZWJDb3JlL0dyYXBoaWNz
TGF5ZXJBbmltYXRpb24uaD4nXSwKICAgICAgICAgJ1dlYkNvcmU6OktleWZyYW1lVmFsdWVMaXN0
JzogWyc8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpLZXlw
cmVzc0NvbW1hbmQnOiBbJzxXZWJDb3JlL0tleWJvYXJkRXZlbnQuaD4nXSwKICAgICAgICAgJ1dl
YkNvcmU6OkZpbGVDaG9vc2VyU2V0dGluZ3MnOiBbJzxXZWJDb3JlL0ZpbGVDaG9vc2VyLmg+J10s
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuY3BwIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJz
LmNwcAppbmRleCBjZDhiODNjMmMzYTEyYzQzNWM4MzZlNWQ0YTViNTMwYjZhZjUxZGJjLi43ODMw
OTdkYTRmYzAwZmE2MDJlNDE1ZmU0MDc2ZDYzNDMwNDM2OWMzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJn
dW1lbnRDb2RlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHAKQEAgLTMzLDkgKzMz
LDE5IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9BbmltYXRpb24uaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0NvbG9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFBvaW50M0QuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0dyYXBoaWNzTGF5ZXJBbmltYXRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0lkZW50
aXR5VHJhbnNmb3JtT3BlcmF0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRQb2ludC5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvTGVuZ3RoLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9NYXRyaXgzRFRy
YW5zZm9ybU9wZXJhdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTWF0cml4VHJhbnNmb3JtT3Bl
cmF0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlv
bi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9TY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGltaW5nRnVu
Y3Rpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RyYW5zZm9ybWF0aW9uTWF0cml4Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9UcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaD4KIAogI2lmIEVOQUJM
RShDU1NfRklMVEVSUykKICNpbmNsdWRlIDxXZWJDb3JlL0ZpbHRlck9wZXJhdGlvbnMuaD4KQEAg
LTQ4LDE2ICs1OCw5IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9DdXN0b21GaWx0ZXJPcGVyYXRpb24u
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0N1c3RvbUZpbHRlclByb2dyYW0uaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0N1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlci5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL01hdHJp
eDNEVHJhbnNmb3JtT3BlcmF0aW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9NYXRyaXhUcmFuc2Zv
cm1PcGVyYXRpb24uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BlcnNwZWN0aXZlVHJhbnNmb3JtT3Bl
cmF0aW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Sb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL1NjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9Ta2V3VHJhbnNmb3JtT3BlcmF0aW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9UcmFu
c2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaD4KICNlbmRpZgogCisKICNpZiBVU0UoR1JBUEhJQ1Nf
U1VSRkFDRSkKICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzU3VyZmFjZS5oPgogI2VuZGlmCkBA
IC0zNDQsNyArMzQ3LDYgQEAgYm9vbCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkZpbHRlck9wZXJh
dGlvbnM+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLAogfQogI2VuZGlmCiAKLSNp
ZiBFTkFCTEUoQ1NTX1NIQURFUlMpCiB2b2lkIEFyZ3VtZW50Q29kZXI8VHJhbnNmb3JtT3BlcmF0
aW9ucz46OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IFRyYW5zZm9ybU9w
ZXJhdGlvbnMmIHRyYW5zZm9ybU9wZXJhdGlvbnMpCiB7CiAgICAgZW5jb2Rlci0+ZW5jb2RlVUlu
dDMyKHRyYW5zZm9ybU9wZXJhdGlvbnMuc2l6ZSgpKTsKQEAgLTUwNCw3ICs1MDYsMjEyIEBAIGJv
b2wgQXJndW1lbnRDb2RlcjxUcmFuc2Zvcm1PcGVyYXRpb25zPjo6ZGVjb2RlKEFyZ3VtZW50RGVj
b2RlciogZGVjb2RlciwgVHJhbnNmCiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQotI2VuZGlm
CisKK3N0YXRpYyB2b2lkIGVuY29kZVRpbWluZ0Z1bmN0aW9uKEFyZ3VtZW50RW5jb2RlciogZW5j
b2RlciwgY29uc3QgVGltaW5nRnVuY3Rpb24qIHRpbWluZ0Z1bmN0aW9uKQoreworICAgIGlmICgh
dGltaW5nRnVuY3Rpb24pIHsKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlRW51bShUaW1pbmdGdW5j
dGlvbjo6VGltaW5nRnVuY3Rpb25UeXBlKC0xKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBUaW1pbmdGdW5jdGlvbjo6VGltaW5nRnVuY3Rpb25UeXBlIHR5cGUgPSB0aW1pbmdGdW5j
dGlvbiA/IHRpbWluZ0Z1bmN0aW9uLT50eXBlKCkgOiBUaW1pbmdGdW5jdGlvbjo6TGluZWFyRnVu
Y3Rpb247CisgICAgZW5jb2Rlci0+ZW5jb2RlRW51bSh0eXBlKTsKKyAgICBzd2l0Y2ggKHR5cGUp
ICAgIHsKKyAgICBjYXNlIFRpbWluZ0Z1bmN0aW9uOjpMaW5lYXJGdW5jdGlvbjoKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBUaW1pbmdGdW5jdGlvbjo6Q3ViaWNCZXppZXJGdW5jdGlvbjogewor
ICAgICAgICBjb25zdCBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKiBjdWJpYyA9IHN0YXRpY19j
YXN0PGNvbnN0IEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24qPih0aW1pbmdGdW5jdGlvbik7Cisg
ICAgICAgIGVuY29kZXItPmVuY29kZURvdWJsZShjdWJpYy0+eDEoKSk7CisgICAgICAgIGVuY29k
ZXItPmVuY29kZURvdWJsZShjdWJpYy0+eTEoKSk7CisgICAgICAgIGVuY29kZXItPmVuY29kZURv
dWJsZShjdWJpYy0+eDIoKSk7CisgICAgICAgIGVuY29kZXItPmVuY29kZURvdWJsZShjdWJpYy0+
eTIoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFRpbWluZ0Z1bmN0aW9uOjpT
dGVwc0Z1bmN0aW9uOiB7CisgICAgICAgIGNvbnN0IFN0ZXBzVGltaW5nRnVuY3Rpb24qIHN0ZXBz
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgU3RlcHNUaW1pbmdGdW5jdGlvbio+KHRpbWluZ0Z1bmN0aW9u
KTsKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlSW50MzIoc3RlcHMtPm51bWJlck9mU3RlcHMoKSk7
CisgICAgICAgIGVuY29kZXItPmVuY29kZUJvb2woc3RlcHMtPnN0ZXBBdFN0YXJ0KCkpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgfQorfQorCitib29sIGRlY29kZVRpbWluZ0Z1bmN0aW9u
KEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgUmVmUHRyPFRpbWluZ0Z1bmN0aW9uPiYgdGltaW5n
RnVuY3Rpb24pCit7CisgICAgVGltaW5nRnVuY3Rpb246OlRpbWluZ0Z1bmN0aW9uVHlwZSB0eXBl
OworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlRW51bSh0eXBlKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaWYgKHR5cGUgPT0gVGltaW5nRnVuY3Rpb246OlRpbWluZ0Z1bmN0aW9uVHlw
ZSgtMSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
Y2FzZSBUaW1pbmdGdW5jdGlvbjo6TGluZWFyRnVuY3Rpb246CisgICAgICAgIHRpbWluZ0Z1bmN0
aW9uID0gTGluZWFyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBjYXNlIFRpbWluZ0Z1bmN0aW9uOjpDdWJpY0JlemllckZ1bmN0aW9uOiB7CisgICAg
ICAgIGRvdWJsZSB4MSwgeTEsIHgyLCB5MjsKKyAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVE
b3VibGUoeDEpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWRlY29k
ZXItPmRlY29kZURvdWJsZSh5MSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGlmICghZGVjb2Rlci0+ZGVjb2RlRG91YmxlKHgyKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVEb3VibGUoeTIpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIHRpbWluZ0Z1bmN0aW9uID0gQ3ViaWNCZXppZXJUaW1p
bmdGdW5jdGlvbjo6Y3JlYXRlKHgxLCB5MSwgeDIsIHkyKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIGNhc2UgVGltaW5nRnVuY3Rpb246OlN0ZXBzRnVuY3Rpb246IHsKKyAgICAg
ICAgaW50IG51bWJlck9mU3RlcHM7CisgICAgICAgIGJvb2wgc3RlcEF0U3RhcnQ7CisgICAgICAg
IGlmICghZGVjb2Rlci0+ZGVjb2RlSW50MzIobnVtYmVyT2ZTdGVwcykpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlQm9vbChzdGVwQXRTdGFy
dCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgdGltaW5nRnVuY3Rpb24g
PSBTdGVwc1RpbWluZ0Z1bmN0aW9uOjpjcmVhdGUobnVtYmVyT2ZTdGVwcywgc3RlcEF0U3RhcnQp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNl
OworfQorCit2b2lkIEFyZ3VtZW50Q29kZXI8R3JhcGhpY3NMYXllckFuaW1hdGlvbj46OmVuY29k
ZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IEdyYXBoaWNzTGF5ZXJBbmltYXRpb24m
IGFuaW1hdGlvbikKK3sKKyAgICBlbmNvZGVyLT5lbmNvZGUoYW5pbWF0aW9uLm5hbWUoKSk7Cisg
ICAgZW5jb2Rlci0+ZW5jb2RlKGFuaW1hdGlvbi5ib3hTaXplKCkpOworICAgIGVuY29kZXItPmVu
Y29kZUVudW0oYW5pbWF0aW9uLnN0YXRlKCkpOworICAgIGVuY29kZXItPmVuY29kZURvdWJsZShh
bmltYXRpb24uc3RhcnRUaW1lKCkpOworICAgIGVuY29kZXItPmVuY29kZURvdWJsZShhbmltYXRp
b24ucGF1c2VUaW1lKCkpOworICAgIGVuY29kZXItPmVuY29kZUJvb2woYW5pbWF0aW9uLmxpc3Rz
TWF0Y2goKSk7CisKKyAgICBSZWZQdHI8QW5pbWF0aW9uPiBhbmltYXRpb25PYmplY3QgPSBhbmlt
YXRpb24uYW5pbWF0aW9uKCk7CisgICAgZW5jb2Rlci0+ZW5jb2RlRW51bShhbmltYXRpb25PYmpl
Y3QtPmRpcmVjdGlvbigpKTsKKyAgICBlbmNvZGVyLT5lbmNvZGVVSW50MzIoYW5pbWF0aW9uT2Jq
ZWN0LT5maWxsTW9kZSgpKTsKKyAgICBlbmNvZGVyLT5lbmNvZGVEb3VibGUoYW5pbWF0aW9uT2Jq
ZWN0LT5kdXJhdGlvbigpKTsKKyAgICBlbmNvZGVyLT5lbmNvZGVEb3VibGUoYW5pbWF0aW9uT2Jq
ZWN0LT5pdGVyYXRpb25Db3VudCgpKTsKKyAgICBlbmNvZGVUaW1pbmdGdW5jdGlvbihlbmNvZGVy
LCBhbmltYXRpb25PYmplY3QtPnRpbWluZ0Z1bmN0aW9uKCkuZ2V0KCkpOworCisgICAgY29uc3Qg
S2V5ZnJhbWVWYWx1ZUxpc3QmIGtleWZyYW1lcyA9IGFuaW1hdGlvbi5rZXlmcmFtZXMoKTsKKyAg
ICBlbmNvZGVyLT5lbmNvZGVFbnVtKGtleWZyYW1lcy5wcm9wZXJ0eSgpKTsKKyAgICBlbmNvZGVy
LT5lbmNvZGVVSW50MzIoa2V5ZnJhbWVzLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDAg
OyBpIDwga2V5ZnJhbWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IEFuaW1hdGlvblZh
bHVlKiB2YWx1ZSA9IGtleWZyYW1lcy5hdChpKTsKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlRmxv
YXQodmFsdWUtPmtleVRpbWUoKSk7CisgICAgICAgIGVuY29kZVRpbWluZ0Z1bmN0aW9uKGVuY29k
ZXIsIHZhbHVlLT50aW1pbmdGdW5jdGlvbigpKTsKKyAgICAgICAgc3dpdGNoIChrZXlmcmFtZXMu
cHJvcGVydHkoKSkgeworICAgICAgICBjYXNlIEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5OgorICAg
ICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlRmxvYXQoc3RhdGljX2Nhc3Q8Y29uc3QgRmxvYXRBbmlt
YXRpb25WYWx1ZSo+KHZhbHVlKS0+dmFsdWUoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtOgorICAgICAgICAgICAgZW5j
b2Rlci0+ZW5jb2RlKCpzdGF0aWNfY2FzdDxjb25zdCBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSo+
KHZhbHVlKS0+dmFsdWUoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCitib29sIEFyZ3VtZW50
Q29kZXI8R3JhcGhpY3NMYXllckFuaW1hdGlvbj46OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRl
Y29kZXIsIEdyYXBoaWNzTGF5ZXJBbmltYXRpb24mIGFuaW1hdGlvbikKK3sKKyAgICBTdHJpbmcg
bmFtZTsKKyAgICBJbnRTaXplIGJveFNpemU7CisgICAgR3JhcGhpY3NMYXllckFuaW1hdGlvbjo6
QW5pbWF0aW9uU3RhdGUgc3RhdGU7CisgICAgZG91YmxlIHN0YXJ0VGltZTsKKyAgICBkb3VibGUg
cGF1c2VUaW1lOworICAgIGJvb2wgbGlzdHNNYXRjaDsKKworICAgIEFuaW1hdGlvbjo6QW5pbWF0
aW9uRGlyZWN0aW9uIGRpcmVjdGlvbjsKKyAgICB1bnNpZ25lZCBmaWxsTW9kZTsKKyAgICBkb3Vi
bGUgZHVyYXRpb247CisgICAgZG91YmxlIGl0ZXJhdGlvbkNvdW50OworICAgIFJlZlB0cjxUaW1p
bmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb247CisgICAgUmVmUHRyPEFuaW1hdGlvbj4gYW5pbWF0
aW9uT2JqZWN0OworCisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUobmFtZSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZShib3hTaXplKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlRW51bShzdGF0ZSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZURvdWJsZShzdGFydFRp
bWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVEb3Vi
bGUocGF1c2VUaW1lKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci0+
ZGVjb2RlQm9vbChsaXN0c01hdGNoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgh
ZGVjb2Rlci0+ZGVjb2RlRW51bShkaXJlY3Rpb24pKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVVSW50MzIoZmlsbE1vZGUpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVEb3VibGUoZHVyYXRpb24pKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVEb3VibGUoaXRlcmF0aW9u
Q291bnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVUaW1pbmdGdW5j
dGlvbihkZWNvZGVyLCB0aW1pbmdGdW5jdGlvbikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGFuaW1hdGlvbk9iamVjdCA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7CisgICAgYW5pbWF0aW9u
T2JqZWN0LT5zZXREaXJlY3Rpb24oZGlyZWN0aW9uKTsKKyAgICBhbmltYXRpb25PYmplY3QtPnNl
dEZpbGxNb2RlKGZpbGxNb2RlKTsKKyAgICBhbmltYXRpb25PYmplY3QtPnNldER1cmF0aW9uKGR1
cmF0aW9uKTsKKyAgICBhbmltYXRpb25PYmplY3QtPnNldEl0ZXJhdGlvbkNvdW50KGl0ZXJhdGlv
bkNvdW50KTsKKyAgICBpZiAodGltaW5nRnVuY3Rpb24pCisgICAgICAgIGFuaW1hdGlvbk9iamVj
dC0+c2V0VGltaW5nRnVuY3Rpb24odGltaW5nRnVuY3Rpb24pOworCisgICAgQW5pbWF0ZWRQcm9w
ZXJ0eUlEIHByb3BlcnR5OworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlRW51bShwcm9wZXJ0eSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBLZXlmcmFtZVZhbHVlTGlzdCBrZXlmcmFtZXMo
cHJvcGVydHkpOworICAgIHVuc2lnbmVkIGtleWZyYW1lc1NpemU7CisgICAgaWYgKCFkZWNvZGVy
LT5kZWNvZGVVSW50MzIoa2V5ZnJhbWVzU2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5ZnJhbWVzU2l6ZTsgKytpKSB7CisgICAgICAg
IGZsb2F0IGtleVRpbWU7CisgICAgICAgIFJlZlB0cjxUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVu
Y3Rpb247CisgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGtleVRpbWUpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWRlY29kZVRpbWluZ0Z1bmN0aW9uKGRlY29k
ZXIsIHRpbWluZ0Z1bmN0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICBzd2l0Y2ggKHByb3BlcnR5KSB7CisgICAgICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eU9wYWNp
dHk6IHsKKyAgICAgICAgICAgIGZsb2F0IHZhbHVlOworICAgICAgICAgICAgaWYgKCFkZWNvZGVy
LT5kZWNvZGVGbG9hdCh2YWx1ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAga2V5ZnJhbWVzLmluc2VydChuZXcgRmxvYXRBbmltYXRpb25WYWx1ZShrZXlUaW1l
LCB2YWx1ZSwgdGltaW5nRnVuY3Rpb24pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybTogeworICAgICAg
ICAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyB0cmFuc2Zvcm07CisgICAgICAgICAgICBpZiAoIWRl
Y29kZXItPmRlY29kZSh0cmFuc2Zvcm0pKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIGtleWZyYW1lcy5pbnNlcnQobmV3IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVl
KGtleVRpbWUsICZ0cmFuc2Zvcm0sIHRpbWluZ0Z1bmN0aW9uKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBhbmltYXRpb24gPSBHcmFwaGljc0xheWVyQW5pbWF0aW9uKG5h
bWUsIGtleWZyYW1lcywgYm94U2l6ZSwgYW5pbWF0aW9uT2JqZWN0LmdldCgpLCBzdGFydFRpbWUs
IGxpc3RzTWF0Y2gpOworICAgIGFuaW1hdGlvbi5zZXRTdGF0ZShzdGF0ZSwgcGF1c2VUaW1lKTsK
KworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEFyZ3VtZW50Q29kZXI8R3JhcGhpY3NMYXll
ckFuaW1hdGlvbnM+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBHcmFw
aGljc0xheWVyQW5pbWF0aW9ucyYgYW5pbWF0aW9ucykKK3sKKyAgICBlbmNvZGVyLT5lbmNvZGUo
YW5pbWF0aW9ucy5hbmltYXRpb25zKCkpOworfQorCitib29sIEFyZ3VtZW50Q29kZXI8R3JhcGhp
Y3NMYXllckFuaW1hdGlvbnM+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBHcmFw
aGljc0xheWVyQW5pbWF0aW9ucyYgYW5pbWF0aW9ucykKK3sKKyAgICByZXR1cm4gZGVjb2Rlci0+
ZGVjb2RlKGFuaW1hdGlvbnMuYW5pbWF0aW9ucygpKTsKK30KIAogI2lmIFVTRShHUkFQSElDU19T
VVJGQUNFKQogdm9pZCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVRva2Vu
Pjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6R3JhcGhp
Y3NTdXJmYWNlVG9rZW4mIHRva2VuKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVk
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdy
YXBoaWNzQXJndW1lbnRDb2RlcnMuaAppbmRleCA4N2I0YzVmZTc1MjljNTdiZWNlZmE2MjFkOGI5
MTFhMTYxZTIxNDgyLi44MTdkMmYzYTMwNjY1OTA4NTYxY2YwOTY2ZDMwMzAxZGQyOTZkZDExIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMu
aApAQCAtMzMsNiArMzMsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBGbG9hdFBv
aW50M0Q7CitjbGFzcyBHcmFwaGljc0xheWVyQW5pbWF0aW9uOworY2xhc3MgR3JhcGhpY3NMYXll
ckFuaW1hdGlvbnM7CiBjbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKIHN0cnVjdCBMZW5ndGg7
CiAKQEAgLTczLDEyICs3NSwyMCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdl
YkNvcmU6OkZpbHRlck9wZXJhdGlvbnM+IHsKIH07CiAjZW5kaWYKIAotI2lmIEVOQUJMRShDU1Nf
U0hBREVSUykKIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6VHJhbnNm
b3JtT3BlcmF0aW9ucz4gewogICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIq
LCBjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1PcGVyYXRpb25zJik7CiAgICAgc3RhdGljIGJvb2wg
ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6OlRyYW5zZm9ybU9wZXJhdGlvbnMmKTsK
IH07Ci0jZW5kaWYKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpH
cmFwaGljc0xheWVyQW5pbWF0aW9ucz4geworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVu
dEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYpOworICAg
IHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpHcmFwaGljc0xh
eWVyQW5pbWF0aW9ucyYpOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxX
ZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9uPiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2Rl
KEFyZ3VtZW50RW5jb2RlciosIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb24m
KTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckFuaW1hdGlvbiYpOworfTsKIAogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQog
dGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VU
b2tlbj4gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmNw
cAppbmRleCAxOTUzYWZiNjEzYzljOWRjY2YyNTY0NzFhNzhlOTRmYmU4NmYwMDYzLi44MThmN2Ey
OGE4ZGUzMzNjODJmMzkzMjAwNDYyN2UwZWMzOTJlYjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclBy
b3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmNwcApAQCAtMTQ0LDE0ICsxNDQsMTQgQEAgdm9p
ZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpzZXRDb250ZW50c1NpemUoY29uc3QgRmxvYXRT
aXplJiBjb250ZW50c1NpemUpCiAgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVu
ZGVyZXI6OnNldENvbnRlbnRzU2l6ZSwgbV9yZW5kZXJlci5nZXQoKSwgY29udGVudHNTaXplKSk7
CiB9CiAKLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6c2V0TGF5ZXJBbmltYXRlZE9w
YWNpdHkodWludDMyX3QgaWQsIGZsb2F0IG9wYWNpdHkpCit2b2lkIExheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHk6OnNldExheWVyQW5pbWF0aW9ucyh1aW50MzJfdCBpZCwgY29uc3QgR3JhcGhpY3NM
YXllckFuaW1hdGlvbnMmIGFuaW1hdGlvbnMpCiB7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgm
TGF5ZXJUcmVlUmVuZGVyZXI6OnNldEFuaW1hdGVkT3BhY2l0eSwgbV9yZW5kZXJlci5nZXQoKSwg
aWQsIG9wYWNpdHkpKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJl
cjo6c2V0TGF5ZXJBbmltYXRpb25zLCBtX3JlbmRlcmVyLmdldCgpLCBpZCwgYW5pbWF0aW9ucykp
OwogfQogCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnNldExheWVyQW5pbWF0ZWRU
cmFuc2Zvcm0odWludDMyX3QgaWQsIGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4
JiB0cmFuc2Zvcm0pCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnNldEFuaW1hdGlv
bnNMb2NrZWQoYm9vbCBsb2NrZWQpCiB7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJU
cmVlUmVuZGVyZXI6OnNldEFuaW1hdGVkVHJhbnNmb3JtLCBtX3JlbmRlcmVyLmdldCgpLCBpZCwg
dHJhbnNmb3JtKSk7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6
OnNldEFuaW1hdGlvbnNMb2NrZWQsIG1fcmVuZGVyZXIuZ2V0KCksIGxvY2tlZCkpOwogfQogCiB2
b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnNldFZpc2libGVDb250ZW50c1JlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBzY2FsZSwgY29uc3QgRmxvYXRQb2ludCYgdHJhamVj
dG9yeVZlY3RvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGlu
YXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHku
aAppbmRleCAzNzM4ZWE0YzMwMjhiMzg1NmVlOGQ5ZWNiN2FkOWRhNjY3MGRkYTA0Li41NmIzNzM0
MDJkOTM2YmRlNGY3NjJmMjEyNDM3MDljYTk5ZDk0Y2RiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclBy
b3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAi
V2ViTGF5ZXJUcmVlSW5mby5oIgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9H
cmFwaGljc0xheWVyQW5pbWF0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc1N1cmZh
Y2VUb2tlbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvSW50U2l6ZS5oPgpAQCAtODAsOCArODEsOCBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB2b2lk
IHB1cmdlQmFja2luZ1N0b3JlcygpOwogICAgIExheWVyVHJlZVJlbmRlcmVyKiBsYXllclRyZWVS
ZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZXIuZ2V0KCk7IH0KLSAgICB2b2lkIHNl
dExheWVyQW5pbWF0ZWRPcGFjaXR5KHVpbnQzMl90LCBmbG9hdCk7Ci0gICAgdm9pZCBzZXRMYXll
ckFuaW1hdGVkVHJhbnNmb3JtKHVpbnQzMl90LCBjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYpOworICAgIHZvaWQgc2V0TGF5ZXJBbmltYXRpb25zKFdlYkxheWVySUQsIGNvbnN0
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJik7CisgICAgdm9pZCBzZXRBbmltYXRp
b25zTG9ja2VkKGJvb2wpOwogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBkaXNwYXRjaFVwZGF0ZShj
b25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5Lm1lc3Nh
Z2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5
ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5tZXNzYWdlcy5pbgppbmRleCBiNzM5NjAwMjFjNGI0Nzhm
MTMzMTVmYjFkN2RmNWE5ZDY1Zjk1N2ZhLi5lNDBmNTQzYTRjOWQ0YjFkMDkwNzU5MDAzYWU0MGMx
ODExY2RhNGQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0
ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHkubWVzc2FnZXMuaW4KQEAgLTMzLDEwICszMywxMSBAQCBtZXNzYWdlcyAtPiBM
YXllclRyZWVDb29yZGluYXRvclByb3h5IHsKICAgICBEZXN0cm95RGlyZWN0bHlDb21wb3NpdGVk
SW1hZ2UoaW50NjRfdCBrZXkpCiAgICAgRGlkUmVuZGVyRnJhbWUoV2ViQ29yZTo6SW50U2l6ZSBj
b250ZW50c1NpemUsIFdlYkNvcmU6OkludFJlY3QgY292ZXJlZFJlY3QpCiAgICAgRGlkQ2hhbmdl
U2Nyb2xsUG9zaXRpb24oV2ViQ29yZTo6SW50UG9pbnQgcG9zaXRpb24pCisgICAgU2V0TGF5ZXJB
bmltYXRpb25zKHVpbnQzMl90IGlkLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyBh
bmltYXRpb25zKQorICAgIFNldEFuaW1hdGlvbnNMb2NrZWQoYm9vbCBsb2NrZWQpCisKICNpZiBV
U0UoR1JBUEhJQ1NfU1VSRkFDRSkKICAgICBTeW5jQ2FudmFzKHVpbnQzMl90IGlkLCBXZWJDb3Jl
OjpJbnRTaXplIGNhbnZhc1NpemUsIFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVRva2VuIHRva2Vu
LCB1aW50MzJfdCBmcm9udEJ1ZmZlcikKICNlbmRpZgotICAgIFNldExheWVyQW5pbWF0ZWRPcGFj
aXR5KHVpbnQzMl90IGlkLCBmbG9hdCBvcGFjaXR5KQotICAgIFNldExheWVyQW5pbWF0ZWRUcmFu
c2Zvcm0odWludDMyX3QgaWQsIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9y
bSkKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCmluZGV4IGU4
NGYzMjM2ZTUyOWY5NzVmMGU4YmZjZDM5ZTE3MmVhN2I1YjRiODEuLmIxYTM1NGY2MjdjMTgwMDIy
MWM5MDM2ZWJmMzljMzc5MGVhNDdlZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJl
ci5jcHAKQEAgLTg4LDYgKzg4LDcgQEAgTGF5ZXJUcmVlUmVuZGVyZXI6OkxheWVyVHJlZVJlbmRl
cmVyKExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkqIGxheWVyVHJlZUNvb3JkaW4KICAgICA6IG1f
bGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eShsYXllclRyZWVDb29yZGluYXRvclByb3h5KQogICAg
ICwgbV9yb290TGF5ZXJJRChJbnZhbGlkV2ViTGF5ZXJJRCkKICAgICAsIG1faXNBY3RpdmUoZmFs
c2UpCisgICAgLCBtX2FuaW1hdGlvbnNMb2NrZWQoZmFsc2UpCiB7CiB9CiAKQEAgLTEyMCw2ICsx
MjEsOCBAQCB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpwYWludFRvQ3VycmVudEdMQ29udGV4dChj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cgogICAgICAgICByZXR1cm47CiAKICAgICBs
YXllci0+c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOworICAgIGlmICgh
bV9hbmltYXRpb25zTG9ja2VkKQorICAgICAgICBsYXllci0+YXBwbHlBbmltYXRpb25zUmVjdXJz
aXZlbHkoKTsKICAgICBtX3RleHR1cmVNYXBwZXItPmJlZ2luUGFpbnRpbmcoUGFpbnRGbGFncyk7
CiAgICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdpbkNsaXAoVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwg
Y2xpcFJlY3QpOwogCkBAIC0xMzIsNiArMTM1LDkgQEAgdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6
cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHIK
ICAgICBsYXllci0+cGFpbnQoKTsKICAgICBtX3RleHR1cmVNYXBwZXItPmVuZENsaXAoKTsKICAg
ICBtX3RleHR1cmVNYXBwZXItPmVuZFBhaW50aW5nKCk7CisKKyAgICBpZiAobGF5ZXItPmRlc2Nl
bmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkpCisgICAgICAgIGRpc3BhdGNoT25N
YWluVGhyZWFkKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVWaWV3cG9ydCwgdGhpcykp
OwogfQogCiB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpwYWludFRvR3JhcGhpY3NDb250ZXh0KEJh
Y2tpbmdTdG9yZTo6UGxhdGZvcm1HcmFwaGljc0NvbnRleHQgcGFpbnRlcikKQEAgLTM5Myw2ICsz
OTksOSBAQCB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpmbHVzaExheWVyQ2hhbmdlcygpCiB7CiAg
ICAgbV9yZW5kZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb24gPSBtX3BlbmRpbmdSZW5kZXJlZENv
bnRlbnRzU2Nyb2xsUG9zaXRpb247CiAKKyAgICAvLyBTaW5jZSB0aGUgZnJhbWUgaGFzIG5vdyBi
ZWVuIHJlbmRlcmVkLCB3ZSBjYW4gc2FmZWx5IHVubG9jayB0aGUgYW5pbWF0aW9ucyB1bnRpbCB0
aGUgbmV4dCBsYXlvdXQuCisgICAgc2V0QW5pbWF0aW9uc0xvY2tlZChmYWxzZSk7CisKICAgICBt
X3Jvb3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlKEZsb2F0UmVjdCgpKTsKICAgICBjb21t
aXRUaWxlT3BlcmF0aW9ucygpOwogCkBAIC00NjEsMjAgKzQ3MCwxNyBAQCB2b2lkIExheWVyVHJl
ZVJlbmRlcmVyOjpwdXJnZUdMUmVzb3VyY2VzKCkKICAgICBkaXNwYXRjaE9uTWFpblRocmVhZChi
aW5kKCZMYXllclRyZWVSZW5kZXJlcjo6cHVyZ2VCYWNraW5nU3RvcmVzLCB0aGlzKSk7CiB9CiAK
LXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnNldEFuaW1hdGVkT3BhY2l0eSh1aW50MzJfdCBpZCwg
ZmxvYXQgb3BhY2l0eSkKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyQW5pbWF0aW9u
cyhXZWJMYXllcklEIGlkLCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYgYW5pbWF0aW9u
cykKIHsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJRChpZCk7Ci0gICAgQVNT
RVJUKGxheWVyKTsKLQotICAgIGxheWVyLT5zZXRPcGFjaXR5KG9wYWNpdHkpOworICAgIEdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBsYXllciA9IHRvR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXIobGF5ZXJCeUlEKGlkKSk7CisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJuOworICAg
IGxheWVyLT5zZXRBbmltYXRpb25zKGFuaW1hdGlvbnMpOwogfQogCi12b2lkIExheWVyVHJlZVJl
bmRlcmVyOjpzZXRBbmltYXRlZFRyYW5zZm9ybSh1aW50MzJfdCBpZCwgY29uc3QgV2ViQ29yZTo6
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6
OnNldEFuaW1hdGlvbnNMb2NrZWQoYm9vbCBsb2NrZWQpCiB7Ci0gICAgR3JhcGhpY3NMYXllciog
bGF5ZXIgPSBsYXllckJ5SUQoaWQpOwotICAgIEFTU0VSVChsYXllcik7Ci0KLSAgICBsYXllci0+
c2V0VHJhbnNmb3JtKHRyYW5zZm9ybSk7CisgICAgbV9hbmltYXRpb25zTG9ja2VkID0gbG9ja2Vk
OwogfQogCiB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpwdXJnZUJhY2tpbmdTdG9yZXMoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5
ZXJUcmVlUmVuZGVyZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdy
YXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmgKaW5kZXggMGE2YWUzYjg4YTRlYTMwNjcxN2Q3ZTM4
NjUyNmU4MDVmOTVkNDVmNC4uNzU4NGFmMTZmZWFhNDdiYzE4MGIyNmJjNzFiNjNiYzBkYzAzMzUx
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvTGF5ZXJUcmVlUmVuZGVyZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29v
cmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5oCkBAIC0yOCw2ICsyOCw3IEBACiAj
aW5jbHVkZSAiV2ViTGF5ZXJUcmVlSW5mby5oIgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3ND
b250ZXh0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9HcmFwaGljc0xheWVyQW5pbWF0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFw
aGljc1N1cmZhY2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0ludFNpemUuaD4KQEAgLTkxLDggKzkyLDggQEAgcHVibGljOgogICAgIHZvaWQgZmx1
c2hMYXllckNoYW5nZXMoKTsKICAgICB2b2lkIGNyZWF0ZUltYWdlKGludDY0X3QsIFBhc3NSZWZQ
dHI8U2hhcmVhYmxlQml0bWFwPik7CiAgICAgdm9pZCBkZXN0cm95SW1hZ2UoaW50NjRfdCk7Ci0g
ICAgdm9pZCBzZXRBbmltYXRlZE9wYWNpdHkodWludDMyX3QsIGZsb2F0KTsKLSAgICB2b2lkIHNl
dEFuaW1hdGVkVHJhbnNmb3JtKHVpbnQzMl90LCBjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYpOworICAgIHZvaWQgc2V0TGF5ZXJBbmltYXRpb25zKFdlYkxheWVySUQsIGNvbnN0
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJik7CisgICAgdm9pZCBzZXRBbmltYXRp
b25zTG9ja2VkKGJvb2wpOwogCiBwcml2YXRlOgogICAgIFBhc3NPd25QdHI8V2ViQ29yZTo6R3Jh
cGhpY3NMYXllcj4gY3JlYXRlTGF5ZXIoV2ViTGF5ZXJJRCk7CkBAIC0xNDcsNiArMTQ4LDcgQEAg
cHJpdmF0ZToKICAgICBXZWJDb3JlOjpJbnRQb2ludCBtX3JlbmRlcmVkQ29udGVudHNTY3JvbGxQ
b3NpdGlvbjsKICAgICBXZWJDb3JlOjpJbnRQb2ludCBtX3BlbmRpbmdSZW5kZXJlZENvbnRlbnRz
U2Nyb2xsUG9zaXRpb247CiAgICAgYm9vbCBtX2lzQWN0aXZlOworICAgIGJvb2wgbV9hbmltYXRp
b25zTG9ja2VkOwogfTsKIAogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCmluZGV4IDc5YzhlZWM1Y2U2YmM3YzU2NDM0
YTllODYyNGNiNmEwNTEyOTM4M2EuLmU5ODA4MDhkNWUyZjJhZjYzYmJlMjZmNWU3MzQ5ODk4NmU0
OTE3MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyLmNwcApAQCAtNjgsOSArNjgsOSBAQCB2b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6ZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpCiAgICAgICAgIGNsaWVudCgpLT5ub3Rp
ZnlGbHVzaFJlcXVpcmVkKHRoaXMpOwogfQogCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6ZGlkQ2hhbmdlQW5pbWF0ZWRQcm9wZXJ0aWVzKCkKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpkaWRDaGFuZ2VBbmltYXRpb25zKCkKIHsKLSAgICBtX3Nob3VsZFN5bmNBbmltYXRl
ZFByb3BlcnRpZXMgPSB0cnVlOworICAgIG1fc2hvdWxkU3luY0FuaW1hdGlvbnMgPSB0cnVlOwog
ICAgIGlmIChjbGllbnQoKSkKICAgICAgICAgY2xpZW50KCktPm5vdGlmeUZsdXNoUmVxdWlyZWQo
dGhpcyk7CiB9CkBAIC05Myw5ICs5Myw2IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpkaWRDaGFuZ2VGaWx0ZXJzKCkKIAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNl
dFNob3VsZFVwZGF0ZVZpc2libGVSZWN0KCkKIHsKLSAgICBpZiAoIXRyYW5zZm9ybSgpLmlzQWZm
aW5lKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIG1fc2hvdWxkVXBkYXRlVmlzaWJsZVJlY3Qg
PSB0cnVlOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4oKS5zaXplKCk7ICsr
aSkKICAgICAgICAgdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoY2hpbGRyZW4oKVtpXSktPnNl
dFNob3VsZFVwZGF0ZVZpc2libGVSZWN0KCk7CkBAIC0xMTcsNyArMTE0LDcgQEAgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNs
aWVudCogY2xpZW50KQogICAgICwgbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSh0cnVlKQogICAgICwg
bV9zaG91bGRTeW5jQ2hpbGRyZW4odHJ1ZSkKICAgICAsIG1fc2hvdWxkU3luY0ZpbHRlcnModHJ1
ZSkKLSAgICAsIG1fc2hvdWxkU3luY0FuaW1hdGVkUHJvcGVydGllcyh0cnVlKQorICAgICwgbV9z
aG91bGRTeW5jQW5pbWF0aW9ucyh0cnVlKQogICAgICwgbV9maXhlZFRvVmlld3BvcnQoZmFsc2Up
CiAgICAgLCBtX2NhbnZhc05lZWRzRGlzcGxheShmYWxzZSkKICAgICAsIG1fQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyQ2xpZW50KDApCkBAIC00OTksMjYgKzQ5NiwxOCBAQCB2b2lkIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6c3luY0xheWVyU3RhdGUoKQogICAgIG1fbGF5ZXJJbmZvLnJlcGxp
Y2EgPSB0b1dlYkxheWVySUQocmVwbGljYUxheWVyKCkpOwogICAgIG1fbGF5ZXJJbmZvLnNpemUg
PSBzaXplKCk7CiAgICAgbV9sYXllckluZm8udHJhbnNmb3JtID0gdHJhbnNmb3JtKCk7Ci0gICAg
aWYgKCFtX2FuaW1hdGlvbnMuaGFzQWN0aXZlQW5pbWF0aW9uc09mVHlwZShBbmltYXRlZFByb3Bl
cnR5V2Via2l0VHJhbnNmb3JtKSkKLSAgICAgICAgbV9lZmZlY3RpdmVUcmFuc2Zvcm0gPSB0cmFu
c2Zvcm0oKTsKLSAgICBpZiAoIW1fYW5pbWF0aW9ucy5oYXNBY3RpdmVBbmltYXRpb25zT2ZUeXBl
KEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KSkKLSAgICAgICAgbV9lZmZlY3RpdmVPcGFjaXR5ID0g
b3BhY2l0eSgpOwogICAgIG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50LT5zeW5jTGF5
ZXJTdGF0ZShtX2lkLCBtX2xheWVySW5mbyk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpzeW5jQW5pbWF0ZWRQcm9wZXJ0aWVzKCkKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpzeW5jQW5pbWF0aW9ucygpCiB7Ci0gICAgbV9hbmltYXRpb25zLmFwcGx5KHRoaXMp
OwotICAgIGlmICghbV9zaG91bGRTeW5jQW5pbWF0ZWRQcm9wZXJ0aWVzKQorICAgIGlmICghbV9z
aG91bGRTeW5jQW5pbWF0aW9ucykKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9zaG91bGRTeW5j
QW5pbWF0ZWRQcm9wZXJ0aWVzID0gZmFsc2U7Ci0gICAgaWYgKG1fZWZmZWN0aXZlT3BhY2l0eSAh
PSBvcGFjaXR5KCkpCi0gICAgICAgIG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50LT5z
ZXRMYXllckFuaW1hdGVkT3BhY2l0eShpZCgpLCBtX2VmZmVjdGl2ZU9wYWNpdHkpOwotICAgIGlm
IChtX2VmZmVjdGl2ZVRyYW5zZm9ybSAhPSB0cmFuc2Zvcm0oKSkKLSAgICAgICAgbV9Db29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQtPnNldExheWVyQW5pbWF0ZWRUcmFuc2Zvcm0oaWQoKSwg
bV9lZmZlY3RpdmVUcmFuc2Zvcm0pOwotfQorICAgIG1fc2hvdWxkU3luY0FuaW1hdGlvbnMgPSBm
YWxzZTsKIAorICAgIG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50LT5zZXRMYXllckFu
aW1hdGlvbnMobV9pZCwgbV9hbmltYXRpb25zKTsKK30KIAogdm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OnN5bmNDYW52YXMoKQogewpAQCAtNTUwLDcgKzUzOSw3IEBAIHZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5
KCkKICAgICAvLyBUaGUgcmVtb3RlIGltYWdlIG1pZ2h0IGhhdmUgYmVlbiByZWxlYXNlZCBieSBw
dXJnZUJhY2tpbmdTdG9yZXMuCiAgICAgZW5zdXJlSW1hZ2VCYWNraW5nU3RvcmUoKTsKICAgICBz
eW5jTGF5ZXJTdGF0ZSgpOwotICAgIHN5bmNBbmltYXRlZFByb3BlcnRpZXMoKTsKKyAgICBzeW5j
QW5pbWF0aW9ucygpOwogICAgIGNvbXB1dGVUcmFuc2Zvcm1lZFZpc2libGVSZWN0KCk7CiAgICAg
c3luY0NoaWxkcmVuKCk7CiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQpAQCAtNzQ5LDEyICs3Mzgs
MzAgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmFkanVzdFZpc2libGVSZWN0KCkK
ICAgICAgICAgbV9tYWluQmFja2luZ1N0b3JlLT5jb3ZlcldpdGhUaWxlc0lmTmVlZGVkKCk7CiB9
CiAKK2Jvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpoYXNQZW5kaW5nVmlzaWJsZUNoYW5n
ZXMoKQoreworICAgIGlmIChvcGFjaXR5KCkgPCAwLjAxICYmICFtX2FuaW1hdGlvbnMuaGFzQWN0
aXZlQW5pbWF0aW9uc09mVHlwZShBbmltYXRlZFByb3BlcnR5T3BhY2l0eSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4oKS5zaXpl
KCk7ICsraSkgeworICAgICAgICBpZiAodG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoY2hpbGRy
ZW4oKVtpXSktPmhhc1BlbmRpbmdWaXNpYmxlQ2hhbmdlcygpKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgaWYgKCFtX3Nob3VsZFN5bmNMYXllclN0YXRlICYmICFtX3No
b3VsZFN5bmNDaGlsZHJlbiAmJiAhbV9zaG91bGRTeW5jRmlsdGVycyAmJiAhbV9zaG91bGRTeW5j
QW5pbWF0aW9ucyAmJiAhbV9jYW52YXNOZWVkc0Rpc3BsYXkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHJldHVybiBzZWxmT3JBbmNlc3RvckhhdmVOb25BZmZpbmVUcmFuc2Zvcm1zKCkg
fHwgIXRpbGVkQmFja2luZ1N0b3JlVmlzaWJsZVJlY3QoKS5pc0VtcHR5KCk7CisKK30KKwogdm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmNvbXB1dGVUcmFuc2Zvcm1lZFZpc2libGVSZWN0
KCkKIHsKICAgICBpZiAoIW1fc2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QpCiAgICAgICAgIHJldHVy
bjsKKwogICAgIG1fc2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QgPSBmYWxzZTsKLSAgICBtX2xheWVy
VHJhbnNmb3JtLnNldExvY2FsVHJhbnNmb3JtKG1fZWZmZWN0aXZlVHJhbnNmb3JtKTsKKyAgICBt
X2xheWVyVHJhbnNmb3JtLnNldExvY2FsVHJhbnNmb3JtKHRyYW5zZm9ybSgpKTsKICAgICBtX2xh
eWVyVHJhbnNmb3JtLnNldFBvc2l0aW9uKHBvc2l0aW9uKCkpOwogICAgIG1fbGF5ZXJUcmFuc2Zv
cm0uc2V0QW5jaG9yUG9pbnQoYW5jaG9yUG9pbnQoKSk7CiAgICAgbV9sYXllclRyYW5zZm9ybS5z
ZXRTaXplKHNpemUoKSk7CkBAIC03NzksNiArNzg2LDkgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OmluaXRGYWN0b3J5KCkKIAogYm9vbCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OnNlbGZPckFuY2VzdG9ySGF2ZU5vbkFmZmluZVRyYW5zZm9ybXMoKQogeworICAgIGlmIChtX2Fu
aW1hdGlvbnMuaGFzQWN0aXZlQW5pbWF0aW9uc09mVHlwZShBbmltYXRlZFByb3BlcnR5V2Via2l0
VHJhbnNmb3JtKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKICAgICBpZiAoIW1fbGF5ZXJUcmFu
c2Zvcm0uY29tYmluZWQoKS5pc0FmZmluZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIApAQCAt
Nzk4LDM5ICs4MDgsMjcgQEAgYm9vbCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmFkZEFuaW1h
dGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0LAogICAgIGlmICh2YWx1ZUxp
c3QucHJvcGVydHkoKSA9PSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKQogICAgICAg
ICBsaXN0c01hdGNoID0gdmFsaWRhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKHZhbHVlTGlzdCwgaWdu
b3JlZEhhc0JpZ1JvdGF0aW9uKSA+PSAwOwogCi0gICAgbV9hbmltYXRpb25zLmFkZChHcmFwaGlj
c0xheWVyQW5pbWF0aW9uKGtleWZyYW1lc05hbWUsIHZhbHVlTGlzdCwgYm94U2l6ZSwgYW5pbSwg
dGltZU9mZnNldCwgbGlzdHNNYXRjaCkpOworICAgIG1fYW5pbWF0aW9ucy5hZGQoR3JhcGhpY3NM
YXllckFuaW1hdGlvbihrZXlmcmFtZXNOYW1lLCB2YWx1ZUxpc3QsIGJveFNpemUsIGFuaW0sIFdU
Rjo6Y3VycmVudFRpbWUoKSAtIHRpbWVPZmZzZXQsIGxpc3RzTWF0Y2gpKTsKICAgICBtX2FuaW1h
dGlvblN0YXJ0ZWRUaW1lci5zdGFydE9uZVNob3QoMCk7Ci0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0
ZSgpOworICAgIGRpZENoYW5nZUFuaW1hdGlvbnMoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAog
dm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmlu
ZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpCiB7CiAgICAgbV9hbmltYXRpb25z
LnBhdXNlKGFuaW1hdGlvbk5hbWUsIHRpbWVPZmZzZXQpOworICAgIGRpZENoYW5nZUFuaW1hdGlv
bnMoKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnJlbW92ZUFuaW1hdGlv
bihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUpCiB7CiAgICAgbV9hbmltYXRpb25zLnJlbW92
ZShhbmltYXRpb25OYW1lKTsKKyAgICBkaWRDaGFuZ2VBbmltYXRpb25zKCk7CiB9CiAKIHZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjphbmltYXRpb25TdGFydGVkVGltZXJGaXJlZChUaW1l
cjxDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI+KikKIHsKICAgICBjbGllbnQoKS0+bm90aWZ5QW5p
bWF0aW9uU3RhcnRlZCh0aGlzLCAvKiBET00gdGltZSAqLyBXVEY6OmN1cnJlbnRUaW1lKCkpOwog
fQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0QW5pbWF0ZWRUcmFuc2Zvcm0o
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKLXsKLSAgICBtX2VmZmVjdGl2
ZVRyYW5zZm9ybSA9IHRyYW5zZm9ybTsKLSAgICBkaWRDaGFuZ2VBbmltYXRlZFByb3BlcnRpZXMo
KTsKLSAgICBtX3Nob3VsZFVwZGF0ZVZpc2libGVSZWN0ID0gdHJ1ZTsKLX0KLQotdm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldEFuaW1hdGVkT3BhY2l0eShmbG9hdCBvcGFjaXR5KQot
ewotICAgIG1fZWZmZWN0aXZlT3BhY2l0eSA9IG9wYWNpdHk7Ci0gICAgZGlkQ2hhbmdlQW5pbWF0
ZWRQcm9wZXJ0aWVzKCk7Ci19Ci0KIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaAppbmRleCAwNDk5OTEwNzBjODc4
NTM0MjJlM2I3MDNhMWQ0NjI2YmI4OWY4NzViLi5kNmMyYzM5MWY0MzVjNzcwMWM2Y2FiNWRlM2Fj
N2Y1MmY3ZDZkYWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIuaApAQCAtNDIsNiArNDIsNyBAQAogI2lmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjsKK2NsYXNzIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zOwogfQogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKQEAgLTY2LDggKzY3LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBz
eW5jQ2FudmFzKFdlYkxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNhbnZhc1NpemUs
IGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVRva2VuJiwgdWludDMyX3QgZnJvbnRCdWZm
ZXIpID0gMDsKICNlbmRpZgogCi0gICAgdmlydHVhbCB2b2lkIHNldExheWVyQW5pbWF0ZWRPcGFj
aXR5KFdlYkxheWVySUQsIGZsb2F0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldExheWVyQW5p
bWF0ZWRUcmFuc2Zvcm0oV2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25N
YXRyaXgmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldExheWVyQW5pbWF0aW9ucyhXZWJMYXll
cklELCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYpID0gMDsKIAogICAg
IHZpcnR1YWwgdm9pZCBhdHRhY2hMYXllcihXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIqKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRldGFjaExheWVyKFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NMYXllciopID0gMDsKQEAgLTc5LDkgKzc5LDggQEAgcHVibGljOgogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgOiBwdWJsaWMg
V2ViQ29yZTo6R3JhcGhpY3NMYXllcgotICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBU
aWxlZEJhY2tpbmdTdG9yZUNsaWVudAotICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBX
ZWJLaXQ6OkNvb3JkaW5hdGVkVGlsZUNsaWVudAotICAgICAgICAgICAgICAgICAgICAgICAsIHB1
YmxpYyBHcmFwaGljc0xheWVyQW5pbWF0aW9uOjpDbGllbnQgeworICAgICwgcHVibGljIFRpbGVk
QmFja2luZ1N0b3JlQ2xpZW50CisgICAgLCBwdWJsaWMgV2ViS2l0OjpDb29yZGluYXRlZFRpbGVD
bGllbnQgewogcHVibGljOgogICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihHcmFwaGljc0xh
eWVyQ2xpZW50Kik7CiAgICAgdmlydHVhbCB+Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKCk7CkBA
IC0xNjYsMTAgKzE2NSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzUmVhZHlGb3JUaWxlQnVmZmVy
U3dhcCgpIGNvbnN0OwogICAgIHZvaWQgdXBkYXRlQ29udGVudEJ1ZmZlcnMoKTsKICAgICB2b2lk
IHB1cmdlQmFja2luZ1N0b3JlcygpOwotCi0gICAgLy8gR3JhcGhpY3NMYXllckFuaW1hdGlvbjo6
Q2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIHNldEFuaW1hdGVkVHJhbnNmb3JtKGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4Jik7Ci0gICAgdmlydHVhbCB2b2lkIHNldEFuaW1hdGVkT3BhY2l0eShm
bG9hdCk7CisgICAgYm9vbCBoYXNQZW5kaW5nVmlzaWJsZUNoYW5nZXMoKTsKIAogICAgIHZpcnR1
YWwgYm9vbCBhZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRT
aXplJiwgY29uc3QgQW5pbWF0aW9uKiwgY29uc3QgU3RyaW5nJiwgZG91YmxlKTsKICAgICB2aXJ0
dWFsIHZvaWQgcGF1c2VBbmltYXRpb24oY29uc3QgU3RyaW5nJiwgZG91YmxlKTsKQEAgLTE4OCwx
MiArMTg0LDEyIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Nob3VsZFN5bmNMYXllclN0YXRlOiAx
OwogICAgIGJvb2wgbV9zaG91bGRTeW5jQ2hpbGRyZW46IDE7CiAgICAgYm9vbCBtX3Nob3VsZFN5
bmNGaWx0ZXJzOiAxOwotICAgIGJvb2wgbV9zaG91bGRTeW5jQW5pbWF0ZWRQcm9wZXJ0aWVzOiAx
OworICAgIGJvb2wgbV9zaG91bGRTeW5jQW5pbWF0aW9uczogMTsKICAgICBib29sIG1fZml4ZWRU
b1ZpZXdwb3J0IDogMTsKICAgICBib29sIG1fY2FudmFzTmVlZHNEaXNwbGF5IDogMTsKIAogICAg
IHZvaWQgbm90aWZ5Q2hhbmdlKCk7Ci0gICAgdm9pZCBkaWRDaGFuZ2VBbmltYXRlZFByb3BlcnRp
ZXMoKTsKKyAgICB2b2lkIGRpZENoYW5nZUFuaW1hdGlvbnMoKTsKICAgICB2b2lkIGRpZENoYW5n
ZUdlb21ldHJ5KCk7CiAgICAgdm9pZCBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CiAgICAgdm9pZCBk
aWRDaGFuZ2VDaGlsZHJlbigpOwpAQCAtMjExLDcgKzIwNyw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBhZGp1c3RDb250ZW50c1NjYWxlKCk7CiAgICAgdm9pZCBjb21wdXRlVHJhbnNmb3JtZWRWaXNp
YmxlUmVjdCgpOwogICAgIHZvaWQgc3luY0xheWVyUGFyYW1ldGVycygpOwotICAgIHZvaWQgc3lu
Y0FuaW1hdGVkUHJvcGVydGllcygpOworICAgIHZvaWQgc3luY0FuaW1hdGlvbnMoKTsKICAgICB2
b2lkIHNldFNob3VsZFVwZGF0ZVZpc2libGVSZWN0KCk7CiAgICAgZmxvYXQgZWZmZWN0aXZlQ29u
dGVudHNTY2FsZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRy
ZWVDb29yZGluYXRvci5jcHAKaW5kZXggYWFhMWMzOGQ1Nzc2YTUxYWQwZjMzOTQ3MGYxMmY2MTYy
MjQyOGMyNC4uMmFiODI1YWFlN2MyN2Y3ZWVhNGI5MjE3ZTQ4MzM3ODc0ZDQyNDdlZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcApA
QCAtODIsNiArODIsNyBAQCBMYXllclRyZWVDb29yZGluYXRvcjo6TGF5ZXJUcmVlQ29vcmRpbmF0
b3IoV2ViUGFnZSogd2ViUGFnZSkKICAgICAsIG1fcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVy
KHRoaXMsICZMYXllclRyZWVDb29yZGluYXRvcjo6cmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVy
RmlyZWQpCiAgICAgLCBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCh0cnVlKQogICAgICwg
bV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQoMCkKKyAgICAsIG1fYW5pbWF0aW9uc0xvY2tl
ZChmYWxzZSkKIHsKICAgICAvLyBDcmVhdGUgYSByb290IGxheWVyLgogICAgIG1fcm9vdExheWVy
ID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMsIHRoaXMpOwpAQCAtMzg3LDEzICszODgsMzcg
QEAgdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c3luY0ZpeGVkTGF5ZXJzKCkKICAgICAgICAg
dXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yTGF5ZXIocm9vdFJlbmRlckxheWVyLT5maXJzdENo
aWxkKCkpOwogfQogCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpsb2NrQW5pbWF0aW9ucygp
Cit7CisgICAgbV9hbmltYXRpb25zTG9ja2VkID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQo
TWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlNldEFuaW1hdGlvbnNMb2NrZWQo
dHJ1ZSkpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjp1bmxvY2tBbmltYXRpb25z
KCkKK3sKKyAgICBpZiAoIW1fYW5pbWF0aW9uc0xvY2tlZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9hbmltYXRpb25zTG9ja2VkID0gZmFsc2U7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpTZXRBbmltYXRpb25zTG9ja2VkKGZhbHNl
KSk7Cit9CisKIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnBlcmZvcm1TY2hlZHVsZWRMYXll
ckZsdXNoKCkKIHsKICAgICBpZiAobV9pc1N1c3BlbmRlZCB8fCBtX3dhaXRpbmdGb3JVSVByb2Nl
c3MpCiAgICAgICAgIHJldHVybjsKIAorICAgIC8vIFdlIGxvY2sgdGhlIGFuaW1hdGlvbnMgd2hp
bGUgcGVyZm9ybWluZyBsYXlvdXQsIHRvIGF2b2lkIGZsaWNrZXJzIGNhdXNlZCBieSBhbmltYXRp
b25zIGNvbnRpbnVpbmcgaW4gdGhlIFVJIHByb2Nlc3Mgd2hpbGUKKyAgICAvLyB0aGUgd2ViIHBy
b2Nlc3MgbGF5b3V0IHdhbnRzIHRvIGNhbmNlbCB0aGVtLgorICAgIGxvY2tBbmltYXRpb25zKCk7
CiAgICAgc3luY0Rpc3BsYXlTdGF0ZSgpOwogCisgICAgLy8gV2UgY2FuIHVubG9jayB0aGUgYW5p
bWF0aW9ucyBiZWZvcmUgZmx1c2hpbmcgaWYgdGhlcmUgYXJlIG5vIHZpc2libGUgY2hhbmdlcywg
Zm9yIGV4YW1wbGUgaWYgdGhlcmUgYXJlIGNvbnRlbnQgdXBkYXRlcworICAgIC8vIGluIGEgbGF5
ZXIgd2l0aCBvcGFjaXR5IDAuCisgICAgYm9vbCBjYW5VbmxvY2tCZWZvcmVGbHVzaCA9ICFtX2lz
VmFsaWQgfHwgIXRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+
aGFzUGVuZGluZ1Zpc2libGVDaGFuZ2VzKCk7CisgICAgaWYgKGNhblVubG9ja0JlZm9yZUZsdXNo
KQorICAgICAgICB1bmxvY2tBbmltYXRpb25zKCk7CisKICAgICBpZiAoIW1faXNWYWxpZCkKICAg
ICAgICAgcmV0dXJuOwogCkBAIC01ODAsMTYgKzYwNSwxMCBAQCBXZWJDb3JlOjpJbnRSZWN0IExh
eWVyVHJlZUNvb3JkaW5hdG9yOjp2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QKIH0KIAogCi12
b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzZXRMYXllckFuaW1hdGVkT3BhY2l0eShXZWJMYXll
cklEIGlkLCBmbG9hdCBvcGFjaXR5KQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsK
LSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6
OlNldExheWVyQW5pbWF0ZWRPcGFjaXR5KGlkLCBvcGFjaXR5KSk7Ci19Ci0KLXZvaWQgTGF5ZXJU
cmVlQ29vcmRpbmF0b3I6OnNldExheWVyQW5pbWF0ZWRUcmFuc2Zvcm0oV2ViTGF5ZXJJRCBpZCwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK3ZvaWQgTGF5ZXJUcmVlQ29v
cmRpbmF0b3I6OnNldExheWVyQW5pbWF0aW9ucyhXZWJMYXllcklEIGxheWVySUQsIGNvbnN0IEdy
YXBoaWNzTGF5ZXJBbmltYXRpb25zJiBhbmltYXRpb25zKQogewogICAgIG1fc2hvdWxkU3luY0Zy
YW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHk6OlNldExheWVyQW5pbWF0ZWRUcmFuc2Zvcm0oaWQsIHRyYW5zZm9ybSkpOwor
ICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6
U2V0TGF5ZXJBbmltYXRpb25zKGxheWVySUQsIGFuaW1hdGlvbnMuZ2V0QWN0aXZlQW5pbWF0aW9u
cygpKSk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNldFZpc2libGVDb250ZW50
c1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwgZmxvYXQgc2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQm
IHRyYWplY3RvcnlWZWN0b3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5oIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJU
cmVlQ29vcmRpbmF0b3IuaAppbmRleCA3NzZhOGQ5N2UxMzE3M2ZjNWVmZmI5NTAwMzVhYzliMGM3
MGY4OGNiLi4yMDExM2UwYjc4NTY2MGI2NTNiMjExMTJmNTljY2IzZTBhYzdiYjQwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9MYXllclRyZWVDb29yZGluYXRvci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmgKQEAgLTg0
LDggKzg0LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHN5bmNMYXllclN0YXRlKFdl
YkxheWVySUQsIGNvbnN0IFdlYkxheWVySW5mbyYpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5
ZXJDaGlsZHJlbihXZWJMYXllcklELCBjb25zdCBWZWN0b3I8V2ViTGF5ZXJJRD4mKTsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0TGF5ZXJBbmltYXRlZE9wYWNpdHkoV2ViTGF5ZXJJRCwgZmxvYXQpOwot
ICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllckFuaW1hdGVkVHJhbnNmb3JtKFdlYkxheWVySUQsIGNv
bnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgdmlydHVhbCB2b2lkIHNl
dExheWVyQW5pbWF0aW9ucyhXZWJMYXllcklELCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVy
QW5pbWF0aW9ucyYpOwogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKICAgICB2aXJ0dWFsIHZvaWQg
c3luY0xheWVyRmlsdGVycyhXZWJMYXllcklELCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRp
b25zJik7CiAjZW5kaWYKQEAgLTEyMSw2ICsxMjAsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgcGVy
Zm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKICAgICB2b2lkIGRpZFBlcmZvcm1TY2hlZHVsZWRM
YXllckZsdXNoKCk7CiAgICAgdm9pZCBzeW5jRGlzcGxheVN0YXRlKCk7CisgICAgdm9pZCBsb2Nr
QW5pbWF0aW9ucygpOworICAgIHZvaWQgdW5sb2NrQW5pbWF0aW9ucygpOwogCiAgICAgdm9pZCBs
YXllckZsdXNoVGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxMYXllclRyZWVDb29yZGluYXRvcj4q
KTsKIApAQCAtMTU2LDYgKzE1Nyw3IEBAIHByaXZhdGU6CiAgICAgV2ViQ29yZTo6VGltZXI8TGF5
ZXJUcmVlQ29vcmRpbmF0b3I+IG1fcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyOwogICAgIGJv
b2wgbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQ7CiAgICAgdWludDY0X3QgbV9mb3JjZVJl
cGFpbnRBc3luY0NhbGxiYWNrSUQ7CisgICAgYm9vbCBtX2FuaW1hdGlvbnNMb2NrZWQ7CiB9Owog
CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169716</attachid>
            <date>2012-10-19 16:09:58 -0700</date>
            <delta_ts>2012-10-23 17:41:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93146-20121019160823.patch</filename>
            <type>text/plain</type>
            <size>48509</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxOTQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGYxOGM4YWNmZGRjNDE0
YmNkM2U3NjQzYTI1M2RjMmRjMGY3YjdiNi4uNDcwYTJhYjE1NjUyYTllOWEyMzkyM2Q2NmEwM2Vh
ODNlOGIwZjI2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDEyLTEwLTE5ICBObydh
bSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgQ29vcmRp
bmF0ZWQgR3JhcGhpY3M6IEVuYWJsZSB0aHJlYWRlZC9JUEMgYW5pbWF0aW9ucworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTMxNDYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgZW5hYmxlcnMgdG8gVGV4
dHVyZU1hcHBlciBhbmQgR3JhcGhpY3NMYXllckFuaW1hdGlvbiBzbyB0aGF0IHRoZXkgY291bGQg
YmUgdXNlZAorICAgICAgICBhY3Jvc3MgcHJvY2Vzc2VzIHdpdGggSVBDLiBBZGRlZCBzb21lIHB1
YmxpYyBhY2Nlc3NvcnMgdG8gR3JhcGhpY3NMYXllckFuaW1hdGlvbiwKKyAgICAgICAgYW5kIGFs
bG93ZWQgYSBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciB0byByZWNlaXZlIGEgZnVsbCBsaXN0
IG9mIGFuaW1hdGlvbnMuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyBhbmltYXRpb24g
YW5kIGNvbXBvc2l0aW5nIHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NMYXllckFuaW1hdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
QW5pbWF0aW9uOjpHcmFwaGljc0xheWVyQW5pbWF0aW9uKToKKyAgICAgICAgICAgIEluaXRpYWxp
emUgdGhlIGFuaW1hdGlvbiB3aXRoIHRoZSBzdGFydFRpbWUgaW5zdGVhZCBvZiB0aGUgb2Zmc2V0
LgorCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9uczo6Z2V0QWN0aXZl
QW5pbWF0aW9ucyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckFu
aW1hdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbjo6c2V0
U3RhdGUpOgorICAgICAgICAgICAgQWxsb3cgc2V0dGluZyB0aGUgcGF1c2UgdGltZSBhcyB3ZWxs
LgorCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9uOjpib3hTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb246OnN0YXJ0VGltZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9uOjpwYXVzZVRpbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbjo6YW5pbWF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb246OmtleWZyYW1lcyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9uOjpsaXN0c01hdGNoKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zOjpzaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zOjphbmltYXRpb25zKToKKyAgICAgICAgICAgIEFk
ZCBwdWJsaWMgYWNjZXNzb3JzIHRvIEdyYXBoaWNzTGF5ZXJBbmltYXRpb24gcHJvcGVydGllcy4K
KworICAgICAgICAoR3JhcGhpY3NMYXllckFuaW1hdGlvbik6CisgICAgICAgIChHcmFwaGljc0xh
eWVyQW5pbWF0aW9ucyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyOjphZGRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXI6OnNldEFuaW1hdGlvbnMpOgorICAgICAgICAgICAgQWxsb3cg
cmVwbGFjaW5nIHRoZSBlbnRpcmUgbGlzdCBvZiBhbmltYXRpb25zLgorCisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXIuaDoKKyAgICAgICAgKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllcjo6YXBwbHlBbmltYXRpb25zUmVj
dXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5oOgorICAgICAgICAoVGV4dHVyZU1hcHBlckxh
eWVyKToKKwogMjAxMi0xMC0xOSAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzE5MTUuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5k
ZXggZjZkN2Q2ZGQ1MjE0ZGMxMTIwZDRhYTg3NDU1MGFjNTY1ZWYyZDNkNy4uYzdjOTFjNTMzODM0
YzRkZTRlMTJkMzM4YzI2MzIzNjQ3MjJlMDFhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg4IEBA
CisyMDEyLTEwLTE5ICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+
CisKKyAgICAgICAgQ29vcmRpbmF0ZWQgR3JhcGhpY3M6IEVuYWJsZSB0aHJlYWRlZC9JUEMgYW5p
bWF0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTMxNDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBS
ZS1lbmFibGUgVUktcHJvY2VzcyBhbmltYXRpb25zIGZvciBDb29yZGluYXRlZC1HcmFwaGljcy9U
ZXh0dXJlTWFwcGVyLgorICAgICAgICAtIEFkZGVkIGFuIGFyZ3VtZW50IGNvZGVyIGZvciBHcmFw
aGljc0xheWVyQW5pbWF0aW9ucy4KKyAgICAgICAgLSBBbGxvdyBMYXllclRyZWVDb29yZGluYXRv
ciB0byBtYW5hZ2UgdGhlIGFuaW1hdGlvbnMgcGVyIGxheWVyIHdpdGggdGhlIHByb3h5LAorICAg
ICAgICAgIGFzIG9wcG9zZWQgdG8gYXBwbHlpbmcgdGhlIGFuaW1hdGlvbiB2YWx1ZXMgaW4gdGhl
IHdlYiBwcm9jZXNzIGFzIGJlZm9yZS4KKyAgICAgICAgLSBMYXllclRyZWVSZW5kZXJlciBub3cg
Y2FsbHMgdXBkYXRlVmlld3BvcnQoKSBhZnRlciBwYWludGluZyB3aGVuIGFuIGFuaW1hdGlvbiBp
cyBhY3RpdmUuCisKKyAgICAgICAgVG8gb3ZlcmNvbWUgdGhlIHByb2JsZW0gd2UndmUgaGFkIGlu
IHRoZSBwYXN0IHdpdGggc3luY2hyb25pemluZyBVSS1zaWRlIGFuZCB3ZWItc2lkZQorICAgICAg
ICBhbmltYXRpb25zLCB3ZSBub3cgbG9jayB0aGUgYW5pbWF0aW9ucyBpbiB0aGUgVUkgcHJvY2Vz
cyB3aGVuIGEgZnJhbWUgc3RhcnRzIHJlbmRlcmluZywKKyAgICAgICAgYW5kIHVubG9jayBpdCB3
aGVuIHRoZSBmcmFtZSBmaW5pc2hlcyByZW5kZXJpbmcsIG9yIGlmIGFmdGVyIHRoZSBsYXlvdXQg
dGhlcmUgaXMgbm8gdmlzaWJsZQorICAgICAgICBjaGFuZ2VzIHBlbmRpbmcgb24gdGhlIHNjcmVl
bi4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weToKKyAgICAgICAgKGhl
YWRlcnNfZm9yX3R5cGUpOgorICAgICAgICAqIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHA6CisgICAgICAgIChDb3JlSVBDKToK
KyAgICAgICAgKENvcmVJUEM6OmVuY29kZVRpbWluZ0Z1bmN0aW9uKToKKyAgICAgICAgKENvcmVJ
UEM6OmRlY29kZVRpbWluZ0Z1bmN0aW9uKToKKyAgICAgICAgKENvcmVJUEM6Ojo6ZW5jb2RlKToK
KyAgICAgICAgKENvcmVJUEM6Ojo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAgICAgQWRkZWQgYXJndW1lbnQgY29kZXJzIGZvciBHcmFwaGlj
c0xheWVyQW5pbWF0aW9ucy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBo
aWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVDb29yZGluYXRvclByb3h5OjpzZXRMYXllckFuaW1hdGlvbnMpOgorICAgICAgICAoV2Vi
S2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpzZXRBbmltYXRpb25zTG9ja2VkKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRv
clByb3h5Lmg6CisgICAgICAgIChMYXllclRyZWVDb29yZGluYXRvclByb3h5KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5
Lm1lc3NhZ2VzLmluOgorICAgICAgICAgICAgQWRkZWQgYW4gb3B0aW9uIHRvIHN5bmMgdGhlIGxh
eWVyJ3MgYW5pbWF0aW9ucywgYW5kIGFsc28gdG8gbG9jay91bmxvY2sgYW5pbWF0aW9ucy4KKwor
ICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVy
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXI6OkxheWVyVHJlZVJlbmRl
cmVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXI6OnBhaW50VG9DdXJyZW50
R0xDb250ZXh0KToKKyAgICAgICAgICAgIFN5bmMgYW5pbWF0aW9ucyBpZiB0aGV5J3JlIG5vdCBs
b2NrZWQsIGFuZCBjYWxsIHVwZGF0ZVZpZXdwb3J0KCkgaWYgd2UgaGF2ZSBhbmltYXRpb25zLgor
CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjpmbHVzaExheWVyQ2hhbmdlcyk6
CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllckFuaW1hdGlvbnMp
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6c2V0QW5pbWF0aW9uc0xvY2tl
ZCk6CisKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVS
ZW5kZXJlci5oOgorICAgICAgICAoTGF5ZXJUcmVlUmVuZGVyZXIpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmRpZENo
YW5nZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjpzZXRTaG91bGRVcGRhdGVWaXNpYmxlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNMYXllclN0YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0FuaW1hdGlvbnMp
OgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpmbHVzaENvbXBv
c2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6YWRkQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6cGF1c2VBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZW1vdmVBbmltYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjphbmltYXRpb25TdGFydGVkVGltZXJGaXJl
ZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgICAgIFBhc3MgdGhlIGFuaW1hdGlvbiBp
bmZvIHRvIHRoZSBVSSBwcm9jZXNzIGluc3RlYWQgb2YgYXBwbHlpbmcgaXQgaW4gdGhlIHdlYiBw
cm9jZXNzLgorCisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6Omhh
c1BlbmRpbmdWaXNpYmxlQ2hhbmdlcyk6CisgICAgICAgICAgICBDb21wdXRlIHdoZXRoZXIgYSBs
YXllciB0cmVlIG1pZ2h0IGhhdmUgc3luYyBpc3N1ZXMgb3IgZmxpY2tlcnMgaWYgcmVuZGVyZWQg
d2hpbGUKKyAgICAgICAgICAgIGJhY2tncm91bmQgYW5pbWF0aW9ucyBhcmUgb25nb2luZy4KKwor
ICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpjb21wdXRlVHJhbnNm
b3JtZWRWaXNpYmxlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OnNlbGZPckFuY2VzdG9ySGF2ZU5vbkFmZmluZVRyYW5zZm9ybXMpOgorICAgICAgICAg
ICAgRG9uJ3QgYWxsb3cgcHJvZ3Jlc3NpdmUgdGlsaW5nIGZvciBsYXllcnMgd2l0aCBhbmltYXRp
b25zLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCk6CisgICAgICAgIChDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJU
cmVlQ29vcmRpbmF0b3I6OkxheWVyVHJlZUNvb3JkaW5hdG9yKToKKyAgICAgICAgKFdlYktpdDo6
TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmxvY2tBbmltYXRpb25zKToKKyAgICAgICAgKFdlYktpdCk6
CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjp1bmxvY2tBbmltYXRpb25z
KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnBlcmZvcm1TY2hlZHVs
ZWRMYXllckZsdXNoKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNl
dExheWVyQW5pbWF0aW9ucyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaDoKKyAgICAgICAgKExheWVyVHJlZUNv
b3JkaW5hdG9yKToKKwogMjAxMi0xMC0xOSAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzE5MzYuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQW5pbWF0aW9u
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJBbmlt
YXRpb24uY3BwCmluZGV4IDNhYTI1YWM0MGE0YzkxZjI4Njc4YTAxNzJjY2JiMzgzOWJjNjMyMmEu
LmQ4YTM2YmQyZGZhYTRlNTQ3OGVmNTk3MmQ2ZDc5NWExNGFkYmY5OTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJBbmltYXRpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJBbmlt
YXRpb24uY3BwCkBAIC0xNTYsMTMgKzE1NiwxMyBAQCBzdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRy
aXggYXBwbHlUcmFuc2Zvcm1BbmltYXRpb24oY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyogZgog
fQogCiAKLUdyYXBoaWNzTGF5ZXJBbmltYXRpb246OkdyYXBoaWNzTGF5ZXJBbmltYXRpb24oY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYga2V5ZnJhbWVzLCBjb25z
dCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgZG91YmxlIHRp
bWVPZmZzZXQsIGJvb2wgbGlzdHNNYXRjaCkKK0dyYXBoaWNzTGF5ZXJBbmltYXRpb246OkdyYXBo
aWNzTGF5ZXJBbmltYXRpb24oY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBLZXlmcmFtZVZhbHVl
TGlzdCYga2V5ZnJhbWVzLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24q
IGFuaW1hdGlvbiwgZG91YmxlIHN0YXJ0VGltZSwgYm9vbCBsaXN0c01hdGNoKQogICAgIDogbV9r
ZXlmcmFtZXMoa2V5ZnJhbWVzKQogICAgICwgbV9ib3hTaXplKGJveFNpemUpCiAgICAgLCBtX2Fu
aW1hdGlvbihBbmltYXRpb246OmNyZWF0ZShhbmltYXRpb24pKQogICAgICwgbV9uYW1lKG5hbWUp
CiAgICAgLCBtX2xpc3RzTWF0Y2gobGlzdHNNYXRjaCkKLSAgICAsIG1fc3RhcnRUaW1lKFdURjo6
Y3VycmVudFRpbWUoKSAtIHRpbWVPZmZzZXQpCisgICAgLCBtX3N0YXJ0VGltZShzdGFydFRpbWUp
CiAgICAgLCBtX3BhdXNlVGltZSgwKQogICAgICwgbV9zdGF0ZShQbGF5aW5nU3RhdGUpCiB7CkBA
IC0yODUsNiArMjg1LDE1IEBAIHZvaWQgR3JhcGhpY3NMYXllckFuaW1hdGlvbnM6OmFwcGx5KEdy
YXBoaWNzTGF5ZXJBbmltYXRpb246OkNsaWVudCogY2xpZW50KQogICAgICAgICBtX2FuaW1hdGlv
bnNbaV0uYXBwbHkoY2xpZW50KTsKIH0KIAorR3JhcGhpY3NMYXllckFuaW1hdGlvbnMgR3JhcGhp
Y3NMYXllckFuaW1hdGlvbnM6OmdldEFjdGl2ZUFuaW1hdGlvbnMoKSBjb25zdAoreworICAgIEdy
YXBoaWNzTGF5ZXJBbmltYXRpb25zIGFjdGl2ZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fYW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9hbmltYXRpb25zW2ld
LmlzQWN0aXZlKCkpCisgICAgICAgICAgICBhY3RpdmUuYWRkKG1fYW5pbWF0aW9uc1tpXSk7Cisg
ICAgfQorICAgIHJldHVybiBhY3RpdmU7Cit9CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckFuaW1hdGlvbi5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckFuaW1hdGlvbi5o
CmluZGV4IGU1ODI3OWM2YWM4MGQ3YTY1OTlhYzc0OGI2NmVmMmE3MjM0MTMxOWQuLjYzOGEyZDE4
OTEzMmJkYTU0OTFhNDhiZWNhNjNiMGFjMjA0YjUwMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJBbmltYXRpb24uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQW5pbWF0aW9uLmgKQEAg
LTQ1LDEwICs0NSwyMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhcHBseShDbGllbnQqKTsKICAgICB2
b2lkIHBhdXNlKGRvdWJsZSk7CiAgICAgQW5pbWF0aW9uU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlOyB9Ci0gICAgdm9pZCBzZXRTdGF0ZShBbmltYXRpb25TdGF0ZSBzKSB7IG1f
c3RhdGUgPSBzOyB9CisgICAgdm9pZCBzZXRTdGF0ZShBbmltYXRpb25TdGF0ZSBzLCBkb3VibGUg
cGF1c2VUaW1lID0gMCkKKyAgICB7CisgICAgICAgIG1fc3RhdGUgPSBzOworICAgICAgICBtX3Bh
dXNlVGltZSA9IHBhdXNlVGltZTsKKyAgICB9CiAgICAgQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3Bl
cnR5KCkgY29uc3QgeyByZXR1cm4gbV9rZXlmcmFtZXMucHJvcGVydHkoKTsgfQogICAgIGJvb2wg
aXNBY3RpdmUoKSBjb25zdDsKICAgICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFt
ZTsgfQorICAgIEludFNpemUgYm94U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYm94U2l6ZTsgfQor
ICAgIGRvdWJsZSBzdGFydFRpbWUoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0VGltZTsgfQorICAg
IGRvdWJsZSBwYXVzZVRpbWUoKSBjb25zdCB7IHJldHVybiBtX3BhdXNlVGltZTsgfQorICAgIFBh
c3NSZWZQdHI8QW5pbWF0aW9uPiBhbmltYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlv
bi5nZXQoKTsgfQorICAgIGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiBrZXlmcmFtZXMoKSBjb25z
dCB7IHJldHVybiBtX2tleWZyYW1lczsgfQorICAgIGJvb2wgbGlzdHNNYXRjaCgpIGNvbnN0IHsg
cmV0dXJuIG1fbGlzdHNNYXRjaDsgfQogCiBwcml2YXRlOgogICAgIHZvaWQgYXBwbHlJbnRlcm5h
bChDbGllbnQqLCBjb25zdCBBbmltYXRpb25WYWx1ZSogZnJvbSwgY29uc3QgQW5pbWF0aW9uVmFs
dWUqIHRvLCBmbG9hdCBwcm9ncmVzcyk7CkBAIC01Nyw3ICs2Nyw2IEBAIHByaXZhdGU6CiAgICAg
UmVmUHRyPEFuaW1hdGlvbj4gbV9hbmltYXRpb247CiAgICAgU3RyaW5nIG1fbmFtZTsKICAgICBi
b29sIG1fbGlzdHNNYXRjaDsKLSAgICBib29sIG1faGFzQmlnUm90YXRpb247CiAgICAgZG91Ymxl
IG1fc3RhcnRUaW1lOwogICAgIGRvdWJsZSBtX3BhdXNlVGltZTsKICAgICBBbmltYXRpb25TdGF0
ZSBtX3N0YXRlOwpAQCAtNzIsMTAgKzgxLDE1IEBAIHB1YmxpYzoKICAgICB2b2lkIHBhdXNlKGNv
bnN0IFN0cmluZyYsIGRvdWJsZSk7CiAgICAgdm9pZCBhcHBseShHcmFwaGljc0xheWVyQW5pbWF0
aW9uOjpDbGllbnQqKTsKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2FuaW1h
dGlvbnMuaXNFbXB0eSgpOyB9CisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2Fu
aW1hdGlvbnMuc2l6ZSgpOyB9CisgICAgY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXJBbmltYXRp
b24+JiBhbmltYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb25zOyB9CisgICAgVmVj
dG9yPEdyYXBoaWNzTGF5ZXJBbmltYXRpb24+JiBhbmltYXRpb25zKCkgeyByZXR1cm4gbV9hbmlt
YXRpb25zOyB9CiAKICAgICBib29sIGhhc1J1bm5pbmdBbmltYXRpb25zKCkgY29uc3Q7CiAgICAg
Ym9vbCBoYXNBY3RpdmVBbmltYXRpb25zT2ZUeXBlKEFuaW1hdGVkUHJvcGVydHlJRCB0eXBlKSBj
b25zdDsKIAorICAgIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zIGdldEFjdGl2ZUFuaW1hdGlvbnMo
KSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBWZWN0b3I8R3JhcGhpY3NMYXllckFuaW1hdGlvbj4g
bV9hbmltYXRpb25zOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIu
Y3BwCmluZGV4IDQyOTU0YTQ5OTYxY2EzY2ZmZGU2ZDNmZWFkMzg4MGRkYzA0ZDk2Y2MuLmYwNGNm
NDlkZWQ3Nzg5MzkyZWNhZGMwMTVmODVhOGQzZDYxMmI5NjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcApAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgiCiAKKyNpbmNs
dWRlICJHcmFwaGljc0xheWVyQW5pbWF0aW9uLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllckZh
Y3RvcnkuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyTGF5ZXIuaCIKIApAQCAtMzkyLDEyICsz
OTMsMTkgQEAgYm9vbCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQW5pbWF0aW9uKGNv
bnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3QKICAgICBpZiAodmFsdWVMaXN0LnByb3Bl
cnR5KCkgPT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSkKICAgICAgICAgbGlzdHNN
YXRjaCA9IHZhbGlkYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyh2YWx1ZUxpc3QsIGhhc0JpZ1JvdGF0
aW9uKSA+PSAwOwogCi0gICAgbV9hbmltYXRpb25zLmFkZChHcmFwaGljc0xheWVyQW5pbWF0aW9u
KGtleWZyYW1lc05hbWUsIHZhbHVlTGlzdCwgYm94U2l6ZSwgYW5pbSwgdGltZU9mZnNldCwgbGlz
dHNNYXRjaCkpOworICAgIG1fYW5pbWF0aW9ucy5hZGQoR3JhcGhpY3NMYXllckFuaW1hdGlvbihr
ZXlmcmFtZXNOYW1lLCB2YWx1ZUxpc3QsIGJveFNpemUsIGFuaW0sIFdURjo6Y3VycmVudFRpbWUo
KSAtIHRpbWVPZmZzZXQsIGxpc3RzTWF0Y2gpKTsKICAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1h
cHBlckxheWVyOjpBbmltYXRpb25DaGFuZ2UpOwogICAgIG1fYW5pbWF0aW9uU3RhcnRlZFRpbWVy
LnN0YXJ0T25lU2hvdCgwKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBHcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlcjo6c2V0QW5pbWF0aW9ucyhjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0
aW9ucyYgYW5pbWF0aW9ucykKK3sKKyAgICBtX2FuaW1hdGlvbnMgPSBhbmltYXRpb25zOworICAg
IG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTGF5ZXI6OkFuaW1hdGlvbkNoYW5nZSk7Cit9CisK
Kwogdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6cGF1c2VBbmltYXRpb24oY29uc3Qg
U3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKIHsKICAgICBtX2FuaW1h
dGlvbnMucGF1c2UoYW5pbWF0aW9uTmFtZSwgdGltZU9mZnNldCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlci5oCmluZGV4IDYzN2FiZDlkNDQwMzAzYjNmYWU5MTg4ODI4Y2Iw
ZWQzY2ZlNmFmM2IuLjUxMGIyM2Y1YzAyNDVkZTRjZjJiMDNkMDJiNDNiZWFmMzkyOGI4ZDIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCkBAIC04MSw2ICs4MSw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgYWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFs
dWVMaXN0JiwgY29uc3QgSW50U2l6ZSYsIGNvbnN0IEFuaW1hdGlvbiosIGNvbnN0IFN0cmluZyYs
IGRvdWJsZSk7CiAgICAgdmlydHVhbCB2b2lkIHBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYs
IGRvdWJsZSk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFuaW1hdGlvbihjb25zdCBTdHJpbmcm
KTsKKyAgICB2b2lkIHNldEFuaW1hdGlvbnMoY29uc3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMm
KTsKIAogICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2xh
eWVyLmdldCgpOyB9CiAgICAgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIqIGNvbnRlbnRzTGF5
ZXIoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzTGF5ZXI7IH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJM
YXllci5jcHAKaW5kZXggYjk1NDQ2MDllN2JmMTU3YzhkYTJiZTcwNWM2ZjM2NThhZWEwMjhiYy4u
NDZjZWVkYzA1ODIwZDVhYTQ5YWZlZmQwZjBiYzRjNjRhMDQ1Y2Q1YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJMYXllci5jcHAKQEAgLTUxMCw2ICs1MTAsMTMgQEAgYm9vbCBUZXh0dXJlTWFwcGVyTGF5
ZXI6OmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkgY29uc3QKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgVGV4dHVyZU1hcHBlckxheWVyOjphcHBseUFuaW1hdGlv
bnNSZWN1cnNpdmVseSgpCit7CisgICAgc3luY0FuaW1hdGlvbnMoKTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpCisgICAgICAgIG1fY2hpbGRyZW5b
aV0tPmFwcGx5QW5pbWF0aW9uc1JlY3Vyc2l2ZWx5KCk7Cit9CisKIHZvaWQgVGV4dHVyZU1hcHBl
ckxheWVyOjpzeW5jQW5pbWF0aW9ucygpCiB7CiAgICAgbV9hbmltYXRpb25zLmFwcGx5KHRoaXMp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJMYXllci5oCmluZGV4IDU3NDBhY2Y1MjNlMmRmM2M2NDVhZTViMjNi
NTU2NzE4YzFjNzg1OTYuLmJjODYwM2E4ZmE0MjQyMmY5Y2E3YTAzYjAyNmI0NWZlMWViNzlkMmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmgKQEAgLTEzMiw2ICsxMzIsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbkRlbHRhSWZOZWVkZWQoY29uc3QgRmxvYXRTaXplJik7
CiAKICAgICB2b2lkIHNldERlYnVnQm9yZGVyKGNvbnN0IENvbG9yJiwgZmxvYXQgd2lkdGgpOwor
ICAgIHZvaWQgYXBwbHlBbmltYXRpb25zUmVjdXJzaXZlbHkoKTsKIAogcHJpdmF0ZToKICAgICBU
ZXh0dXJlTWFwcGVyTGF5ZXIqIHJvb3RMYXllcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5IGIvU291cmNlL1dlYktpdDIvU2NyaXB0cy93
ZWJraXQyL21lc3NhZ2VzLnB5CmluZGV4IDQ1ODRhODUzMWM3NGFkZjZlMDQzNmEwZDBjMDRiODk2
MGM4OWIwMTYuLjFmZmY1MjE4OTYwNjkyM2YxYjE2MmU4MGM0ZDgyMGNkNjkyNzg4ZDUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weQorKysgYi9T
b3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMucHkKQEAgLTM4Niw2ICszODYs
NyBAQCBkZWYgaGVhZGVyc19mb3JfdHlwZSh0eXBlKToKICAgICAgICAgJ1dURjo6U3RyaW5nJzog
Wyc8d3RmL3RleHQvV1RGU3RyaW5nLmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpDb21wb3NpdGlv
blVuZGVybGluZSc6IFsnPFdlYkNvcmUvRWRpdG9yLmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpH
cmFtbWFyRGV0YWlsJzogWyc8V2ViQ29yZS9UZXh0Q2hlY2tlckNsaWVudC5oPiddLAorICAgICAg
ICAnV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnMnOiBbJzxXZWJDb3JlL0dyYXBoaWNz
TGF5ZXJBbmltYXRpb24uaD4nXSwKICAgICAgICAgJ1dlYkNvcmU6OktleWZyYW1lVmFsdWVMaXN0
JzogWyc8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpLZXlw
cmVzc0NvbW1hbmQnOiBbJzxXZWJDb3JlL0tleWJvYXJkRXZlbnQuaD4nXSwKICAgICAgICAgJ1dl
YkNvcmU6OkZpbGVDaG9vc2VyU2V0dGluZ3MnOiBbJzxXZWJDb3JlL0ZpbGVDaG9vc2VyLmg+J10s
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuY3BwIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJz
LmNwcAppbmRleCBjZDhiODNjMmMzYTEyYzQzNWM4MzZlNWQ0YTViNTMwYjZhZjUxZGJjLi42MmI3
ZWVkZWViZDMzODkwNTE3YTNhNTZlMTYxMGQ4NDIxYjQxYTlmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJn
dW1lbnRDb2RlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHAKQEAgLTMzLDkgKzMz
LDE5IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9BbmltYXRpb24uaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0NvbG9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFBvaW50M0QuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0dyYXBoaWNzTGF5ZXJBbmltYXRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0lkZW50
aXR5VHJhbnNmb3JtT3BlcmF0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRQb2ludC5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvTGVuZ3RoLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9NYXRyaXgzRFRy
YW5zZm9ybU9wZXJhdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTWF0cml4VHJhbnNmb3JtT3Bl
cmF0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlv
bi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9TY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGltaW5nRnVu
Y3Rpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RyYW5zZm9ybWF0aW9uTWF0cml4Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9UcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaD4KIAogI2lmIEVOQUJM
RShDU1NfRklMVEVSUykKICNpbmNsdWRlIDxXZWJDb3JlL0ZpbHRlck9wZXJhdGlvbnMuaD4KQEAg
LTQ4LDE2ICs1OCw5IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9DdXN0b21GaWx0ZXJPcGVyYXRpb24u
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0N1c3RvbUZpbHRlclByb2dyYW0uaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0N1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlci5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL01hdHJp
eDNEVHJhbnNmb3JtT3BlcmF0aW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9NYXRyaXhUcmFuc2Zv
cm1PcGVyYXRpb24uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BlcnNwZWN0aXZlVHJhbnNmb3JtT3Bl
cmF0aW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Sb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL1NjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9Ta2V3VHJhbnNmb3JtT3BlcmF0aW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9UcmFu
c2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaD4KICNlbmRpZgogCisKICNpZiBVU0UoR1JBUEhJQ1Nf
U1VSRkFDRSkKICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzU3VyZmFjZS5oPgogI2VuZGlmCkBA
IC0zNDQsNyArMzQ3LDYgQEAgYm9vbCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkZpbHRlck9wZXJh
dGlvbnM+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLAogfQogI2VuZGlmCiAKLSNp
ZiBFTkFCTEUoQ1NTX1NIQURFUlMpCiB2b2lkIEFyZ3VtZW50Q29kZXI8VHJhbnNmb3JtT3BlcmF0
aW9ucz46OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IFRyYW5zZm9ybU9w
ZXJhdGlvbnMmIHRyYW5zZm9ybU9wZXJhdGlvbnMpCiB7CiAgICAgZW5jb2Rlci0+ZW5jb2RlVUlu
dDMyKHRyYW5zZm9ybU9wZXJhdGlvbnMuc2l6ZSgpKTsKQEAgLTUwNCw3ICs1MDYsMjEyIEBAIGJv
b2wgQXJndW1lbnRDb2RlcjxUcmFuc2Zvcm1PcGVyYXRpb25zPjo6ZGVjb2RlKEFyZ3VtZW50RGVj
b2RlciogZGVjb2RlciwgVHJhbnNmCiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQotI2VuZGlm
CisKK3N0YXRpYyB2b2lkIGVuY29kZVRpbWluZ0Z1bmN0aW9uKEFyZ3VtZW50RW5jb2RlciogZW5j
b2RlciwgY29uc3QgVGltaW5nRnVuY3Rpb24qIHRpbWluZ0Z1bmN0aW9uKQoreworICAgIGlmICgh
dGltaW5nRnVuY3Rpb24pIHsKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlRW51bShUaW1pbmdGdW5j
dGlvbjo6VGltaW5nRnVuY3Rpb25UeXBlKC0xKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBUaW1pbmdGdW5jdGlvbjo6VGltaW5nRnVuY3Rpb25UeXBlIHR5cGUgPSB0aW1pbmdGdW5j
dGlvbiA/IHRpbWluZ0Z1bmN0aW9uLT50eXBlKCkgOiBUaW1pbmdGdW5jdGlvbjo6TGluZWFyRnVu
Y3Rpb247CisgICAgZW5jb2Rlci0+ZW5jb2RlRW51bSh0eXBlKTsKKyAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICBjYXNlIFRpbWluZ0Z1bmN0aW9uOjpMaW5lYXJGdW5jdGlvbjoKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBUaW1pbmdGdW5jdGlvbjo6Q3ViaWNCZXppZXJGdW5jdGlvbjogeworICAg
ICAgICBjb25zdCBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKiBjdWJpYyA9IHN0YXRpY19jYXN0
PGNvbnN0IEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24qPih0aW1pbmdGdW5jdGlvbik7CisgICAg
ICAgIGVuY29kZXItPmVuY29kZURvdWJsZShjdWJpYy0+eDEoKSk7CisgICAgICAgIGVuY29kZXIt
PmVuY29kZURvdWJsZShjdWJpYy0+eTEoKSk7CisgICAgICAgIGVuY29kZXItPmVuY29kZURvdWJs
ZShjdWJpYy0+eDIoKSk7CisgICAgICAgIGVuY29kZXItPmVuY29kZURvdWJsZShjdWJpYy0+eTIo
KSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFRpbWluZ0Z1bmN0aW9uOjpTdGVw
c0Z1bmN0aW9uOiB7CisgICAgICAgIGNvbnN0IFN0ZXBzVGltaW5nRnVuY3Rpb24qIHN0ZXBzID0g
c3RhdGljX2Nhc3Q8Y29uc3QgU3RlcHNUaW1pbmdGdW5jdGlvbio+KHRpbWluZ0Z1bmN0aW9uKTsK
KyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlSW50MzIoc3RlcHMtPm51bWJlck9mU3RlcHMoKSk7Cisg
ICAgICAgIGVuY29kZXItPmVuY29kZUJvb2woc3RlcHMtPnN0ZXBBdFN0YXJ0KCkpOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgfQorfQorCitib29sIGRlY29kZVRpbWluZ0Z1bmN0aW9uKEFy
Z3VtZW50RGVjb2RlciogZGVjb2RlciwgUmVmUHRyPFRpbWluZ0Z1bmN0aW9uPiYgdGltaW5nRnVu
Y3Rpb24pCit7CisgICAgVGltaW5nRnVuY3Rpb246OlRpbWluZ0Z1bmN0aW9uVHlwZSB0eXBlOwor
ICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlRW51bSh0eXBlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKHR5cGUgPT0gVGltaW5nRnVuY3Rpb246OlRpbWluZ0Z1bmN0aW9uVHlwZSgt
MSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2Fz
ZSBUaW1pbmdGdW5jdGlvbjo6TGluZWFyRnVuY3Rpb246CisgICAgICAgIHRpbWluZ0Z1bmN0aW9u
ID0gTGluZWFyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBjYXNlIFRpbWluZ0Z1bmN0aW9uOjpDdWJpY0JlemllckZ1bmN0aW9uOiB7CisgICAgICAg
IGRvdWJsZSB4MSwgeTEsIHgyLCB5MjsKKyAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVEb3Vi
bGUoeDEpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWRlY29kZXIt
PmRlY29kZURvdWJsZSh5MSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlm
ICghZGVjb2Rlci0+ZGVjb2RlRG91YmxlKHgyKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVEb3VibGUoeTIpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgIHRpbWluZ0Z1bmN0aW9uID0gQ3ViaWNCZXppZXJUaW1pbmdG
dW5jdGlvbjo6Y3JlYXRlKHgxLCB5MSwgeDIsIHkyKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIGNhc2UgVGltaW5nRnVuY3Rpb246OlN0ZXBzRnVuY3Rpb246IHsKKyAgICAgICAg
aW50IG51bWJlck9mU3RlcHM7CisgICAgICAgIGJvb2wgc3RlcEF0U3RhcnQ7CisgICAgICAgIGlm
ICghZGVjb2Rlci0+ZGVjb2RlSW50MzIobnVtYmVyT2ZTdGVwcykpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlQm9vbChzdGVwQXRTdGFydCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgdGltaW5nRnVuY3Rpb24gPSBT
dGVwc1RpbWluZ0Z1bmN0aW9uOjpjcmVhdGUobnVtYmVyT2ZTdGVwcywgc3RlcEF0U3RhcnQpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit2b2lkIEFyZ3VtZW50Q29kZXI8R3JhcGhpY3NMYXllckFuaW1hdGlvbj46OmVuY29kZShB
cmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IEdyYXBoaWNzTGF5ZXJBbmltYXRpb24mIGFu
aW1hdGlvbikKK3sKKyAgICBlbmNvZGVyLT5lbmNvZGUoYW5pbWF0aW9uLm5hbWUoKSk7CisgICAg
ZW5jb2Rlci0+ZW5jb2RlKGFuaW1hdGlvbi5ib3hTaXplKCkpOworICAgIGVuY29kZXItPmVuY29k
ZUVudW0oYW5pbWF0aW9uLnN0YXRlKCkpOworICAgIGVuY29kZXItPmVuY29kZURvdWJsZShhbmlt
YXRpb24uc3RhcnRUaW1lKCkpOworICAgIGVuY29kZXItPmVuY29kZURvdWJsZShhbmltYXRpb24u
cGF1c2VUaW1lKCkpOworICAgIGVuY29kZXItPmVuY29kZUJvb2woYW5pbWF0aW9uLmxpc3RzTWF0
Y2goKSk7CisKKyAgICBSZWZQdHI8QW5pbWF0aW9uPiBhbmltYXRpb25PYmplY3QgPSBhbmltYXRp
b24uYW5pbWF0aW9uKCk7CisgICAgZW5jb2Rlci0+ZW5jb2RlRW51bShhbmltYXRpb25PYmplY3Qt
PmRpcmVjdGlvbigpKTsKKyAgICBlbmNvZGVyLT5lbmNvZGVVSW50MzIoYW5pbWF0aW9uT2JqZWN0
LT5maWxsTW9kZSgpKTsKKyAgICBlbmNvZGVyLT5lbmNvZGVEb3VibGUoYW5pbWF0aW9uT2JqZWN0
LT5kdXJhdGlvbigpKTsKKyAgICBlbmNvZGVyLT5lbmNvZGVEb3VibGUoYW5pbWF0aW9uT2JqZWN0
LT5pdGVyYXRpb25Db3VudCgpKTsKKyAgICBlbmNvZGVUaW1pbmdGdW5jdGlvbihlbmNvZGVyLCBh
bmltYXRpb25PYmplY3QtPnRpbWluZ0Z1bmN0aW9uKCkuZ2V0KCkpOworCisgICAgY29uc3QgS2V5
ZnJhbWVWYWx1ZUxpc3QmIGtleWZyYW1lcyA9IGFuaW1hdGlvbi5rZXlmcmFtZXMoKTsKKyAgICBl
bmNvZGVyLT5lbmNvZGVFbnVtKGtleWZyYW1lcy5wcm9wZXJ0eSgpKTsKKyAgICBlbmNvZGVyLT5l
bmNvZGVVSW50MzIoa2V5ZnJhbWVzLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBrZXlmcmFtZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgQW5pbWF0aW9uVmFsdWUq
IHZhbHVlID0ga2V5ZnJhbWVzLmF0KGkpOworICAgICAgICBlbmNvZGVyLT5lbmNvZGVGbG9hdCh2
YWx1ZS0+a2V5VGltZSgpKTsKKyAgICAgICAgZW5jb2RlVGltaW5nRnVuY3Rpb24oZW5jb2Rlciwg
dmFsdWUtPnRpbWluZ0Z1bmN0aW9uKCkpOworICAgICAgICBzd2l0Y2ggKGtleWZyYW1lcy5wcm9w
ZXJ0eSgpKSB7CisgICAgICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHk6CisgICAgICAg
ICAgICBlbmNvZGVyLT5lbmNvZGVGbG9hdChzdGF0aWNfY2FzdDxjb25zdCBGbG9hdEFuaW1hdGlv
blZhbHVlKj4odmFsdWUpLT52YWx1ZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm06CisgICAgICAgICAgICBlbmNvZGVy
LT5lbmNvZGUoKnN0YXRpY19jYXN0PGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKj4odmFs
dWUpLT52YWx1ZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgQXJndW1lbnRDb2Rl
cjxHcmFwaGljc0xheWVyQW5pbWF0aW9uPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2Rl
ciwgR3JhcGhpY3NMYXllckFuaW1hdGlvbiYgYW5pbWF0aW9uKQoreworICAgIFN0cmluZyBuYW1l
OworICAgIEludFNpemUgYm94U2l6ZTsKKyAgICBHcmFwaGljc0xheWVyQW5pbWF0aW9uOjpBbmlt
YXRpb25TdGF0ZSBzdGF0ZTsKKyAgICBkb3VibGUgc3RhcnRUaW1lOworICAgIGRvdWJsZSBwYXVz
ZVRpbWU7CisgICAgYm9vbCBsaXN0c01hdGNoOworCisgICAgQW5pbWF0aW9uOjpBbmltYXRpb25E
aXJlY3Rpb24gZGlyZWN0aW9uOworICAgIHVuc2lnbmVkIGZpbGxNb2RlOworICAgIGRvdWJsZSBk
dXJhdGlvbjsKKyAgICBkb3VibGUgaXRlcmF0aW9uQ291bnQ7CisgICAgUmVmUHRyPFRpbWluZ0Z1
bmN0aW9uPiB0aW1pbmdGdW5jdGlvbjsKKyAgICBSZWZQdHI8QW5pbWF0aW9uPiBhbmltYXRpb25P
YmplY3Q7CisKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZShuYW1lKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGJveFNpemUpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVFbnVtKHN0YXRlKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlRG91YmxlKHN0YXJ0VGltZSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZURvdWJsZShw
YXVzZVRpbWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNv
ZGVCb29sKGxpc3RzTWF0Y2gpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNv
ZGVyLT5kZWNvZGVFbnVtKGRpcmVjdGlvbikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoIWRlY29kZXItPmRlY29kZVVJbnQzMihmaWxsTW9kZSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZURvdWJsZShkdXJhdGlvbikpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZURvdWJsZShpdGVyYXRpb25Db3Vu
dCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZVRpbWluZ0Z1bmN0aW9u
KGRlY29kZXIsIHRpbWluZ0Z1bmN0aW9uKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
YW5pbWF0aW9uT2JqZWN0ID0gQW5pbWF0aW9uOjpjcmVhdGUoKTsKKyAgICBhbmltYXRpb25PYmpl
Y3QtPnNldERpcmVjdGlvbihkaXJlY3Rpb24pOworICAgIGFuaW1hdGlvbk9iamVjdC0+c2V0Rmls
bE1vZGUoZmlsbE1vZGUpOworICAgIGFuaW1hdGlvbk9iamVjdC0+c2V0RHVyYXRpb24oZHVyYXRp
b24pOworICAgIGFuaW1hdGlvbk9iamVjdC0+c2V0SXRlcmF0aW9uQ291bnQoaXRlcmF0aW9uQ291
bnQpOworICAgIGlmICh0aW1pbmdGdW5jdGlvbikKKyAgICAgICAgYW5pbWF0aW9uT2JqZWN0LT5z
ZXRUaW1pbmdGdW5jdGlvbih0aW1pbmdGdW5jdGlvbik7CisKKyAgICBBbmltYXRlZFByb3BlcnR5
SUQgcHJvcGVydHk7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVFbnVtKHByb3BlcnR5KSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIEtleWZyYW1lVmFsdWVMaXN0IGtleWZyYW1lcyhwcm9w
ZXJ0eSk7CisgICAgdW5zaWduZWQga2V5ZnJhbWVzU2l6ZTsKKyAgICBpZiAoIWRlY29kZXItPmRl
Y29kZVVJbnQzMihrZXlmcmFtZXNTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBrZXlmcmFtZXNTaXplOyArK2kpIHsKKyAgICAgICAgZmxv
YXQga2V5VGltZTsKKyAgICAgICAgUmVmUHRyPFRpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlv
bjsKKyAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoa2V5VGltZSkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghZGVjb2RlVGltaW5nRnVuY3Rpb24oZGVjb2Rlciwg
dGltaW5nRnVuY3Rpb24pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHN3
aXRjaCAocHJvcGVydHkpIHsKKyAgICAgICAgY2FzZSBBbmltYXRlZFByb3BlcnR5T3BhY2l0eTog
eworICAgICAgICAgICAgZmxvYXQgdmFsdWU7CisgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRl
Y29kZUZsb2F0KHZhbHVlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBrZXlmcmFtZXMuaW5zZXJ0KG5ldyBGbG9hdEFuaW1hdGlvblZhbHVlKGtleVRpbWUsIHZh
bHVlLCB0aW1pbmdGdW5jdGlvbikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtOiB7CisgICAgICAgICAg
ICBUcmFuc2Zvcm1PcGVyYXRpb25zIHRyYW5zZm9ybTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rl
ci0+ZGVjb2RlKHRyYW5zZm9ybSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAga2V5ZnJhbWVzLmluc2VydChuZXcgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUoa2V5
VGltZSwgJnRyYW5zZm9ybSwgdGltaW5nRnVuY3Rpb24pKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGFuaW1hdGlvbiA9IEdyYXBoaWNzTGF5ZXJBbmltYXRpb24obmFtZSwg
a2V5ZnJhbWVzLCBib3hTaXplLCBhbmltYXRpb25PYmplY3QuZ2V0KCksIHN0YXJ0VGltZSwgbGlz
dHNNYXRjaCk7CisgICAgYW5pbWF0aW9uLnNldFN0YXRlKHN0YXRlLCBwYXVzZVRpbWUpOworCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQXJndW1lbnRDb2RlcjxHcmFwaGljc0xheWVyQW5p
bWF0aW9ucz46OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IEdyYXBoaWNz
TGF5ZXJBbmltYXRpb25zJiBhbmltYXRpb25zKQoreworICAgIGVuY29kZXItPmVuY29kZShhbmlt
YXRpb25zLmFuaW1hdGlvbnMoKSk7Cit9CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxHcmFwaGljc0xh
eWVyQW5pbWF0aW9ucz46OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIEdyYXBoaWNz
TGF5ZXJBbmltYXRpb25zJiBhbmltYXRpb25zKQoreworICAgIHJldHVybiBkZWNvZGVyLT5kZWNv
ZGUoYW5pbWF0aW9ucy5hbmltYXRpb25zKCkpOworfQogCiAjaWYgVVNFKEdSQVBISUNTX1NVUkZB
Q0UpCiB2b2lkIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlVG9rZW4+Ojpl
bmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1N1
cmZhY2VUb2tlbiYgdG9rZW4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaCBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3NBcmd1bWVudENvZGVycy5oCmluZGV4IDg3YjRjNWZlNzUyOWM1N2JlY2VmYTYyMWQ4YjkxMWEx
NjFlMjE0ODIuLjgxN2QyZjNhMzA2NjU5MDg1NjFjZjA5NjZkMzAzMDFkZDI5NmRkMTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oCkBA
IC0zMyw2ICszMyw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEZsb2F0UG9pbnQz
RDsKK2NsYXNzIEdyYXBoaWNzTGF5ZXJBbmltYXRpb247CitjbGFzcyBHcmFwaGljc0xheWVyQW5p
bWF0aW9uczsKIGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4Owogc3RydWN0IExlbmd0aDsKIApA
QCAtNzMsMTIgKzc1LDIwIEBAIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29y
ZTo6RmlsdGVyT3BlcmF0aW9ucz4gewogfTsKICNlbmRpZgogCi0jaWYgRU5BQkxFKENTU19TSEFE
RVJTKQogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpUcmFuc2Zvcm1P
cGVyYXRpb25zPiB7CiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciosIGNv
bnN0IFdlYkNvcmU6OlRyYW5zZm9ybU9wZXJhdGlvbnMmKTsKICAgICBzdGF0aWMgYm9vbCBkZWNv
ZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6VHJhbnNmb3JtT3BlcmF0aW9ucyYpOwogfTsK
LSNlbmRpZgorCit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJBbmltYXRpb25zPiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5j
b2RlciosIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJik7CisgICAgc3Rh
dGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJB
bmltYXRpb25zJik7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb24+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJn
dW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbiYpOwor
ICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQW5pbWF0aW9uJik7Cit9OwogCiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCiB0ZW1w
bGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVRva2Vu
PiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFw
aGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwCmlu
ZGV4IDE5NTNhZmI2MTNjOWM5ZGNjZjI1NjQ3MWE3OGU5NGZiZTg2ZjAwNjMuLjc0ZGQzNTk4Y2Yy
YWJmMDgyZmYyYjE4NDYxNTI5ODI2MjkxNGFlYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHku
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwCkBAIC0xNDQsMTQgKzE0NCwxNCBAQCB2b2lkIExh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnNldENvbnRlbnRzU2l6ZShjb25zdCBGbG9hdFNpemUm
IGNvbnRlbnRzU2l6ZSkKICAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJl
cjo6c2V0Q29udGVudHNTaXplLCBtX3JlbmRlcmVyLmdldCgpLCBjb250ZW50c1NpemUpKTsKIH0K
IAotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpzZXRMYXllckFuaW1hdGVkT3BhY2l0
eSh1aW50MzJfdCBpZCwgZmxvYXQgb3BhY2l0eSkKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eTo6c2V0TGF5ZXJBbmltYXRpb25zKFdlYkxheWVySUQgaWQsIGNvbnN0IEdyYXBoaWNzTGF5
ZXJBbmltYXRpb25zJiBhbmltYXRpb25zKQogewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxh
eWVyVHJlZVJlbmRlcmVyOjpzZXRBbmltYXRlZE9wYWNpdHksIG1fcmVuZGVyZXIuZ2V0KCksIGlk
LCBvcGFjaXR5KSk7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6
OnNldExheWVyQW5pbWF0aW9ucywgbV9yZW5kZXJlci5nZXQoKSwgaWQsIGFuaW1hdGlvbnMpKTsK
IH0KIAotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpzZXRMYXllckFuaW1hdGVkVHJh
bnNmb3JtKHVpbnQzMl90IGlkLCBjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
dHJhbnNmb3JtKQordm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpzZXRBbmltYXRpb25z
TG9ja2VkKGJvb2wgbG9ja2VkKQogewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJl
ZVJlbmRlcmVyOjpzZXRBbmltYXRlZFRyYW5zZm9ybSwgbV9yZW5kZXJlci5nZXQoKSwgaWQsIHRy
YW5zZm9ybSkpOworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpz
ZXRBbmltYXRpb25zTG9ja2VkLCBtX3JlbmRlcmVyLmdldCgpLCBsb2NrZWQpKTsKIH0KIAogdm9p
ZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgc2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3Rv
cnlWZWN0b3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0
ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmgK
aW5kZXggMzczOGVhNGMzMDI4YjM4NTZlZThkOWVjYjdhZDlkYTY2NzBkZGEwNC4uNTZiMzczNDAy
ZDkzNmJkZTRmNzYyZjIxMjQzNzA5Y2E5OWQ5NGNkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIldl
YkxheWVyVHJlZUluZm8uaCIKICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3Jh
cGhpY3NMYXllckFuaW1hdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NTdXJmYWNl
VG9rZW4uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0ludFNpemUuaD4KQEAgLTgwLDggKzgxLDggQEAgcHVibGljOgogI2VuZGlmCiAgICAgdm9pZCBw
dXJnZUJhY2tpbmdTdG9yZXMoKTsKICAgICBMYXllclRyZWVSZW5kZXJlciogbGF5ZXJUcmVlUmVu
ZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmVyLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRM
YXllckFuaW1hdGVkT3BhY2l0eSh1aW50MzJfdCwgZmxvYXQpOwotICAgIHZvaWQgc2V0TGF5ZXJB
bmltYXRlZFRyYW5zZm9ybSh1aW50MzJfdCwgY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25N
YXRyaXgmKTsKKyAgICB2b2lkIHNldExheWVyQW5pbWF0aW9ucyhXZWJMYXllcklELCBjb25zdCBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYpOworICAgIHZvaWQgc2V0QW5pbWF0aW9u
c0xvY2tlZChib29sKTsKIAogcHJvdGVjdGVkOgogICAgIHZvaWQgZGlzcGF0Y2hVcGRhdGUoY29u
c3QgRnVuY3Rpb248dm9pZCgpPiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5tZXNzYWdl
cy5pbiBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHkubWVzc2FnZXMuaW4KaW5kZXggYjczOTYwMDIxYzRiNDc4ZjEz
MzE1ZmIxZDdkZjVhOWQ2NWY5NTdmYS4uZTQwZjU0M2E0YzlkNGIxZDA5MDc1OTAwM2FlNDBjMTgx
MWNkYTRkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGlu
YXRvclByb3h5Lm1lc3NhZ2VzLmluCkBAIC0zMywxMCArMzMsMTEgQEAgbWVzc2FnZXMgLT4gTGF5
ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSB7CiAgICAgRGVzdHJveURpcmVjdGx5Q29tcG9zaXRlZElt
YWdlKGludDY0X3Qga2V5KQogICAgIERpZFJlbmRlckZyYW1lKFdlYkNvcmU6OkludFNpemUgY29u
dGVudHNTaXplLCBXZWJDb3JlOjpJbnRSZWN0IGNvdmVyZWRSZWN0KQogICAgIERpZENoYW5nZVNj
cm9sbFBvc2l0aW9uKFdlYkNvcmU6OkludFBvaW50IHBvc2l0aW9uKQorICAgIFNldExheWVyQW5p
bWF0aW9ucyh1aW50MzJfdCBpZCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnMgYW5p
bWF0aW9ucykKKyAgICBTZXRBbmltYXRpb25zTG9ja2VkKGJvb2wgbG9ja2VkKQorCiAjaWYgVVNF
KEdSQVBISUNTX1NVUkZBQ0UpCiAgICAgU3luY0NhbnZhcyh1aW50MzJfdCBpZCwgV2ViQ29yZTo6
SW50U2l6ZSBjYW52YXNTaXplLCBXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VUb2tlbiB0b2tlbiwg
dWludDMyX3QgZnJvbnRCdWZmZXIpCiAjZW5kaWYKLSAgICBTZXRMYXllckFuaW1hdGVkT3BhY2l0
eSh1aW50MzJfdCBpZCwgZmxvYXQgb3BhY2l0eSkKLSAgICBTZXRMYXllckFuaW1hdGVkVHJhbnNm
b3JtKHVpbnQzMl90IGlkLCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0p
CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGlu
YXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcAppbmRleCBlODRm
MzIzNmU1MjlmOTc1ZjBlOGJmY2QzOWUxNzJlYTdiNWI0YjgxLi5iMWEzNTRmNjI3YzE4MDAyMjFj
OTAzNmViZjM5YzM3OTBlYTQ3ZWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIu
Y3BwCkBAIC04OCw2ICs4OCw3IEBAIExheWVyVHJlZVJlbmRlcmVyOjpMYXllclRyZWVSZW5kZXJl
cihMYXllclRyZWVDb29yZGluYXRvclByb3h5KiBsYXllclRyZWVDb29yZGluCiAgICAgOiBtX2xh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHkobGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSkKICAgICAs
IG1fcm9vdExheWVySUQoSW52YWxpZFdlYkxheWVySUQpCiAgICAgLCBtX2lzQWN0aXZlKGZhbHNl
KQorICAgICwgbV9hbmltYXRpb25zTG9ja2VkKGZhbHNlKQogewogfQogCkBAIC0xMjAsNiArMTIx
LDggQEAgdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHIKICAgICAgICAgcmV0dXJuOwogCiAgICAgbGF5
ZXItPnNldFRleHR1cmVNYXBwZXIobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKKyAgICBpZiAoIW1f
YW5pbWF0aW9uc0xvY2tlZCkKKyAgICAgICAgbGF5ZXItPmFwcGx5QW5pbWF0aW9uc1JlY3Vyc2l2
ZWx5KCk7CiAgICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdpblBhaW50aW5nKFBhaW50RmxhZ3MpOwog
ICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5DbGlwKFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIGNs
aXBSZWN0KTsKIApAQCAtMTMyLDYgKzEzNSw5IEBAIHZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnBh
aW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyCiAg
ICAgbGF5ZXItPnBhaW50KCk7CiAgICAgbV90ZXh0dXJlTWFwcGVyLT5lbmRDbGlwKCk7CiAgICAg
bV90ZXh0dXJlTWFwcGVyLT5lbmRQYWludGluZygpOworCisgICAgaWYgKGxheWVyLT5kZXNjZW5k
YW50c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygpKQorICAgICAgICBkaXNwYXRjaE9uTWFp
blRocmVhZChiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVmlld3BvcnQsIHRoaXMpKTsK
IH0KIAogdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cGFpbnRUb0dyYXBoaWNzQ29udGV4dChCYWNr
aW5nU3RvcmU6OlBsYXRmb3JtR3JhcGhpY3NDb250ZXh0IHBhaW50ZXIpCkBAIC0zOTMsNiArMzk5
LDkgQEAgdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6Zmx1c2hMYXllckNoYW5nZXMoKQogewogICAg
IG1fcmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uID0gbV9wZW5kaW5nUmVuZGVyZWRDb250
ZW50c1Njcm9sbFBvc2l0aW9uOwogCisgICAgLy8gU2luY2UgdGhlIGZyYW1lIGhhcyBub3cgYmVl
biByZW5kZXJlZCwgd2UgY2FuIHNhZmVseSB1bmxvY2sgdGhlIGFuaW1hdGlvbnMgdW50aWwgdGhl
IG5leHQgbGF5b3V0LgorICAgIHNldEFuaW1hdGlvbnNMb2NrZWQoZmFsc2UpOworCiAgICAgbV9y
b290TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZShGbG9hdFJlY3QoKSk7CiAgICAgY29tbWl0
VGlsZU9wZXJhdGlvbnMoKTsKIApAQCAtNDYxLDIwICs0NzAsMTcgQEAgdm9pZCBMYXllclRyZWVS
ZW5kZXJlcjo6cHVyZ2VHTFJlc291cmNlcygpCiAgICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQoYmlu
ZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnB1cmdlQmFja2luZ1N0b3JlcywgdGhpcykpOwogfQogCi12
b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzZXRBbmltYXRlZE9wYWNpdHkodWludDMyX3QgaWQsIGZs
b2F0IG9wYWNpdHkpCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllckFuaW1hdGlvbnMo
V2ViTGF5ZXJJRCBpZCwgY29uc3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmIGFuaW1hdGlvbnMp
CiB7Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQoaWQpOwotICAgIEFTU0VS
VChsYXllcik7Ci0KLSAgICBsYXllci0+c2V0T3BhY2l0eShvcGFjaXR5KTsKKyAgICBHcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlciogbGF5ZXIgPSB0b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
KGxheWVyQnlJRChpZCkpOworICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBs
YXllci0+c2V0QW5pbWF0aW9ucyhhbmltYXRpb25zKTsKIH0KIAotdm9pZCBMYXllclRyZWVSZW5k
ZXJlcjo6c2V0QW5pbWF0ZWRUcmFuc2Zvcm0odWludDMyX3QgaWQsIGNvbnN0IFdlYkNvcmU6OlRy
YW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpz
ZXRBbmltYXRpb25zTG9ja2VkKGJvb2wgbG9ja2VkKQogewotICAgIEdyYXBoaWNzTGF5ZXIqIGxh
eWVyID0gbGF5ZXJCeUlEKGlkKTsKLSAgICBBU1NFUlQobGF5ZXIpOwotCi0gICAgbGF5ZXItPnNl
dFRyYW5zZm9ybSh0cmFuc2Zvcm0pOworICAgIG1fYW5pbWF0aW9uc0xvY2tlZCA9IGxvY2tlZDsK
IH0KIAogdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVy
VHJlZVJlbmRlcmVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFw
aGljcy9MYXllclRyZWVSZW5kZXJlci5oCmluZGV4IDBhNmFlM2I4OGE0ZWEzMDY3MTdkN2UzODY1
MjZlODA1Zjk1ZDQ1ZjQuLjc1ODRhZjE2ZmVhYTQ3YmMxODBiMjZiYzcxYjYzYmMwZGMwMzM1MTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNz
L0xheWVyVHJlZVJlbmRlcmVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuaApAQCAtMjgsNiArMjgsNyBAQAogI2lu
Y2x1ZGUgIldlYkxheWVyVHJlZUluZm8uaCIKICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29u
dGV4dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllci5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvR3JhcGhpY3NMYXllckFuaW1hdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhp
Y3NTdXJmYWNlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9JbnRTaXplLmg+CkBAIC05MSw4ICs5Miw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGZsdXNo
TGF5ZXJDaGFuZ2VzKCk7CiAgICAgdm9pZCBjcmVhdGVJbWFnZShpbnQ2NF90LCBQYXNzUmVmUHRy
PFNoYXJlYWJsZUJpdG1hcD4pOwogICAgIHZvaWQgZGVzdHJveUltYWdlKGludDY0X3QpOwotICAg
IHZvaWQgc2V0QW5pbWF0ZWRPcGFjaXR5KHVpbnQzMl90LCBmbG9hdCk7Ci0gICAgdm9pZCBzZXRB
bmltYXRlZFRyYW5zZm9ybSh1aW50MzJfdCwgY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25N
YXRyaXgmKTsKKyAgICB2b2lkIHNldExheWVyQW5pbWF0aW9ucyhXZWJMYXllcklELCBjb25zdCBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYpOworICAgIHZvaWQgc2V0QW5pbWF0aW9u
c0xvY2tlZChib29sKTsKIAogcHJpdmF0ZToKICAgICBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXI+IGNyZWF0ZUxheWVyKFdlYkxheWVySUQpOwpAQCAtMTQ3LDYgKzE0OCw3IEBAIHBy
aXZhdGU6CiAgICAgV2ViQ29yZTo6SW50UG9pbnQgbV9yZW5kZXJlZENvbnRlbnRzU2Nyb2xsUG9z
aXRpb247CiAgICAgV2ViQ29yZTo6SW50UG9pbnQgbV9wZW5kaW5nUmVuZGVyZWRDb250ZW50c1Nj
cm9sbFBvc2l0aW9uOwogICAgIGJvb2wgbV9pc0FjdGl2ZTsKKyAgICBib29sIG1fYW5pbWF0aW9u
c0xvY2tlZDsKIH07CiAKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAppbmRleCA3OWM4ZWVjNWNlNmJjN2M1NjQzNGE5
ZTg2MjRjYjZhMDUxMjkzODNhLi5lOTgwODA4ZDVlMmYyYWY2M2JiZTI2ZjVlNzM0OTg5ODZlNDkx
NzFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3NMYXllci5jcHAKQEAgLTY4LDkgKzY4LDkgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OmRpZENoYW5nZUxheWVyU3RhdGUoKQogICAgICAgICBjbGllbnQoKS0+bm90aWZ5
Rmx1c2hSZXF1aXJlZCh0aGlzKTsKIH0KIAotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OmRpZENoYW5nZUFuaW1hdGVkUHJvcGVydGllcygpCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6ZGlkQ2hhbmdlQW5pbWF0aW9ucygpCiB7Ci0gICAgbV9zaG91bGRTeW5jQW5pbWF0ZWRQ
cm9wZXJ0aWVzID0gdHJ1ZTsKKyAgICBtX3Nob3VsZFN5bmNBbmltYXRpb25zID0gdHJ1ZTsKICAg
ICBpZiAoY2xpZW50KCkpCiAgICAgICAgIGNsaWVudCgpLT5ub3RpZnlGbHVzaFJlcXVpcmVkKHRo
aXMpOwogfQpAQCAtOTMsOSArOTMsNiBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
ZGlkQ2hhbmdlRmlsdGVycygpCiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRT
aG91bGRVcGRhdGVWaXNpYmxlUmVjdCgpCiB7Ci0gICAgaWYgKCF0cmFuc2Zvcm0oKS5pc0FmZmlu
ZSgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBtX3Nob3VsZFVwZGF0ZVZpc2libGVSZWN0ID0g
dHJ1ZTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kp
CiAgICAgICAgIHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKGNoaWxkcmVuKClbaV0pLT5zZXRT
aG91bGRVcGRhdGVWaXNpYmxlUmVjdCgpOwpAQCAtMTE3LDcgKzExNCw3IEBAIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXJDbGll
bnQqIGNsaWVudCkKICAgICAsIG1fc2hvdWxkU3luY0xheWVyU3RhdGUodHJ1ZSkKICAgICAsIG1f
c2hvdWxkU3luY0NoaWxkcmVuKHRydWUpCiAgICAgLCBtX3Nob3VsZFN5bmNGaWx0ZXJzKHRydWUp
Ci0gICAgLCBtX3Nob3VsZFN5bmNBbmltYXRlZFByb3BlcnRpZXModHJ1ZSkKKyAgICAsIG1fc2hv
dWxkU3luY0FuaW1hdGlvbnModHJ1ZSkKICAgICAsIG1fZml4ZWRUb1ZpZXdwb3J0KGZhbHNlKQog
ICAgICwgbV9jYW52YXNOZWVkc0Rpc3BsYXkoZmFsc2UpCiAgICAgLCBtX0Nvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllckNsaWVudCgwKQpAQCAtNDk5LDI2ICs0OTYsMTggQEAgdm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OnN5bmNMYXllclN0YXRlKCkKICAgICBtX2xheWVySW5mby5yZXBsaWNh
ID0gdG9XZWJMYXllcklEKHJlcGxpY2FMYXllcigpKTsKICAgICBtX2xheWVySW5mby5zaXplID0g
c2l6ZSgpOwogICAgIG1fbGF5ZXJJbmZvLnRyYW5zZm9ybSA9IHRyYW5zZm9ybSgpOwotICAgIGlm
ICghbV9hbmltYXRpb25zLmhhc0FjdGl2ZUFuaW1hdGlvbnNPZlR5cGUoQW5pbWF0ZWRQcm9wZXJ0
eVdlYmtpdFRyYW5zZm9ybSkpCi0gICAgICAgIG1fZWZmZWN0aXZlVHJhbnNmb3JtID0gdHJhbnNm
b3JtKCk7Ci0gICAgaWYgKCFtX2FuaW1hdGlvbnMuaGFzQWN0aXZlQW5pbWF0aW9uc09mVHlwZShB
bmltYXRlZFByb3BlcnR5T3BhY2l0eSkpCi0gICAgICAgIG1fZWZmZWN0aXZlT3BhY2l0eSA9IG9w
YWNpdHkoKTsKICAgICBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudC0+c3luY0xheWVy
U3RhdGUobV9pZCwgbV9sYXllckluZm8pOwogfQogCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6c3luY0FuaW1hdGVkUHJvcGVydGllcygpCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6c3luY0FuaW1hdGlvbnMoKQogewotICAgIG1fYW5pbWF0aW9ucy5hcHBseSh0aGlzKTsK
LSAgICBpZiAoIW1fc2hvdWxkU3luY0FuaW1hdGVkUHJvcGVydGllcykKKyAgICBpZiAoIW1fc2hv
dWxkU3luY0FuaW1hdGlvbnMpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fc2hvdWxkU3luY0Fu
aW1hdGVkUHJvcGVydGllcyA9IGZhbHNlOwotICAgIGlmIChtX2VmZmVjdGl2ZU9wYWNpdHkgIT0g
b3BhY2l0eSgpKQotICAgICAgICBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudC0+c2V0
TGF5ZXJBbmltYXRlZE9wYWNpdHkoaWQoKSwgbV9lZmZlY3RpdmVPcGFjaXR5KTsKLSAgICBpZiAo
bV9lZmZlY3RpdmVUcmFuc2Zvcm0gIT0gdHJhbnNmb3JtKCkpCi0gICAgICAgIG1fQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyQ2xpZW50LT5zZXRMYXllckFuaW1hdGVkVHJhbnNmb3JtKGlkKCksIG1f
ZWZmZWN0aXZlVHJhbnNmb3JtKTsKLX0KKyAgICBtX3Nob3VsZFN5bmNBbmltYXRpb25zID0gZmFs
c2U7CiAKKyAgICBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudC0+c2V0TGF5ZXJBbmlt
YXRpb25zKG1faWQsIG1fYW5pbWF0aW9ucyk7Cit9CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpzeW5jQ2FudmFzKCkKIHsKQEAgLTU1MCw3ICs1MzksNyBAQCB2b2lkIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgp
CiAgICAgLy8gVGhlIHJlbW90ZSBpbWFnZSBtaWdodCBoYXZlIGJlZW4gcmVsZWFzZWQgYnkgcHVy
Z2VCYWNraW5nU3RvcmVzLgogICAgIGVuc3VyZUltYWdlQmFja2luZ1N0b3JlKCk7CiAgICAgc3lu
Y0xheWVyU3RhdGUoKTsKLSAgICBzeW5jQW5pbWF0ZWRQcm9wZXJ0aWVzKCk7CisgICAgc3luY0Fu
aW1hdGlvbnMoKTsKICAgICBjb21wdXRlVHJhbnNmb3JtZWRWaXNpYmxlUmVjdCgpOwogICAgIHN5
bmNDaGlsZHJlbigpOwogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKQEAgLTc0OSwxMiArNzM4LDMw
IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjphZGp1c3RWaXNpYmxlUmVjdCgpCiAg
ICAgICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+Y292ZXJXaXRoVGlsZXNJZk5lZWRlZCgpOwogfQog
Citib29sIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6aGFzUGVuZGluZ1Zpc2libGVDaGFuZ2Vz
KCkKK3sKKyAgICBpZiAob3BhY2l0eSgpIDwgMC4wMSAmJiAhbV9hbmltYXRpb25zLmhhc0FjdGl2
ZUFuaW1hdGlvbnNPZlR5cGUoQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgaWYgKHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKGNoaWxkcmVu
KClbaV0pLT5oYXNQZW5kaW5nVmlzaWJsZUNoYW5nZXMoKSkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIGlmICghbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSAmJiAhbV9zaG91
bGRTeW5jQ2hpbGRyZW4gJiYgIW1fc2hvdWxkU3luY0ZpbHRlcnMgJiYgIW1fc2hvdWxkU3luY0Fu
aW1hdGlvbnMgJiYgIW1fY2FudmFzTmVlZHNEaXNwbGF5KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICByZXR1cm4gc2VsZk9yQW5jZXN0b3JIYXZlTm9uQWZmaW5lVHJhbnNmb3JtcygpIHx8
ICF0aWxlZEJhY2tpbmdTdG9yZVZpc2libGVSZWN0KCkuaXNFbXB0eSgpOworCit9CisKIHZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpjb21wdXRlVHJhbnNmb3JtZWRWaXNpYmxlUmVjdCgp
CiB7CiAgICAgaWYgKCFtX3Nob3VsZFVwZGF0ZVZpc2libGVSZWN0KQogICAgICAgICByZXR1cm47
CisKICAgICBtX3Nob3VsZFVwZGF0ZVZpc2libGVSZWN0ID0gZmFsc2U7Ci0gICAgbV9sYXllclRy
YW5zZm9ybS5zZXRMb2NhbFRyYW5zZm9ybShtX2VmZmVjdGl2ZVRyYW5zZm9ybSk7CisgICAgbV9s
YXllclRyYW5zZm9ybS5zZXRMb2NhbFRyYW5zZm9ybSh0cmFuc2Zvcm0oKSk7CiAgICAgbV9sYXll
clRyYW5zZm9ybS5zZXRQb3NpdGlvbihwb3NpdGlvbigpKTsKICAgICBtX2xheWVyVHJhbnNmb3Jt
LnNldEFuY2hvclBvaW50KGFuY2hvclBvaW50KCkpOwogICAgIG1fbGF5ZXJUcmFuc2Zvcm0uc2V0
U2l6ZShzaXplKCkpOwpAQCAtNzc5LDYgKzc4Niw5IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjppbml0RmFjdG9yeSgpCiAKIGJvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpz
ZWxmT3JBbmNlc3RvckhhdmVOb25BZmZpbmVUcmFuc2Zvcm1zKCkKIHsKKyAgICBpZiAobV9hbmlt
YXRpb25zLmhhc0FjdGl2ZUFuaW1hdGlvbnNPZlR5cGUoQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRy
YW5zZm9ybSkpCisgICAgICAgIHJldHVybiB0cnVlOworCiAgICAgaWYgKCFtX2xheWVyVHJhbnNm
b3JtLmNvbWJpbmVkKCkuaXNBZmZpbmUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTc5
OCwzOSArODA4LDI3IEBAIGJvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjphZGRBbmltYXRp
b24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwKICAgICBpZiAodmFsdWVMaXN0
LnByb3BlcnR5KCkgPT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSkKICAgICAgICAg
bGlzdHNNYXRjaCA9IHZhbGlkYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyh2YWx1ZUxpc3QsIGlnbm9y
ZWRIYXNCaWdSb3RhdGlvbikgPj0gMDsKIAotICAgIG1fYW5pbWF0aW9ucy5hZGQoR3JhcGhpY3NM
YXllckFuaW1hdGlvbihrZXlmcmFtZXNOYW1lLCB2YWx1ZUxpc3QsIGJveFNpemUsIGFuaW0sIHRp
bWVPZmZzZXQsIGxpc3RzTWF0Y2gpKTsKKyAgICBtX2FuaW1hdGlvbnMuYWRkKEdyYXBoaWNzTGF5
ZXJBbmltYXRpb24oa2V5ZnJhbWVzTmFtZSwgdmFsdWVMaXN0LCBib3hTaXplLCBhbmltLCBXVEY6
OmN1cnJlbnRUaW1lKCkgLSB0aW1lT2Zmc2V0LCBsaXN0c01hdGNoKSk7CiAgICAgbV9hbmltYXRp
b25TdGFydGVkVGltZXIuc3RhcnRPbmVTaG90KDApOwotICAgIGRpZENoYW5nZUxheWVyU3RhdGUo
KTsKKyAgICBkaWRDaGFuZ2VBbmltYXRpb25zKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZv
aWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpwYXVzZUFuaW1hdGlvbihjb25zdCBTdHJpbmcm
IGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KQogewogICAgIG1fYW5pbWF0aW9ucy5w
YXVzZShhbmltYXRpb25OYW1lLCB0aW1lT2Zmc2V0KTsKKyAgICBkaWRDaGFuZ2VBbmltYXRpb25z
KCk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZW1vdmVBbmltYXRpb24o
Y29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lKQogewogICAgIG1fYW5pbWF0aW9ucy5yZW1vdmUo
YW5pbWF0aW9uTmFtZSk7CisgICAgZGlkQ2hhbmdlQW5pbWF0aW9ucygpOwogfQogCiB2b2lkIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YW5pbWF0aW9uU3RhcnRlZFRpbWVyRmlyZWQoVGltZXI8
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyPiopCiB7CiAgICAgY2xpZW50KCktPm5vdGlmeUFuaW1h
dGlvblN0YXJ0ZWQodGhpcywgLyogRE9NIHRpbWUgKi8gV1RGOjpjdXJyZW50VGltZSgpKTsKIH0K
LQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldEFuaW1hdGVkVHJhbnNmb3JtKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCi17Ci0gICAgbV9lZmZlY3RpdmVU
cmFuc2Zvcm0gPSB0cmFuc2Zvcm07Ci0gICAgZGlkQ2hhbmdlQW5pbWF0ZWRQcm9wZXJ0aWVzKCk7
Ci0gICAgbV9zaG91bGRVcGRhdGVWaXNpYmxlUmVjdCA9IHRydWU7Ci19Ci0KLXZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpzZXRBbmltYXRlZE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkKLXsK
LSAgICBtX2VmZmVjdGl2ZU9wYWNpdHkgPSBvcGFjaXR5OwotICAgIGRpZENoYW5nZUFuaW1hdGVk
UHJvcGVydGllcygpOwotfQotCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgKaW5kZXggMDQ5OTkxMDcwYzg3ODUz
NDIyZTNiNzAzYTFkNDYyNmJiODlmODc1Yi4uZDZjMmMzOTFmNDM1Yzc3MDFjNmNhYjVkZTNhYzdm
NTJmN2Q2ZGFiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyLmgKQEAgLTQyLDYgKzQyLDcgQEAKICNpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI7CitjbGFzcyBHcmFwaGljc0xheWVyQW5pbWF0aW9uczsKIH0KIAogbmFtZXNwYWNl
IFdlYktpdCB7CkBAIC02Niw4ICs2Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc3lu
Y0NhbnZhcyhXZWJMYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjYW52YXNTaXplLCBj
b25zdCBXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VUb2tlbiYsIHVpbnQzMl90IGZyb250QnVmZmVy
KSA9IDA7CiAjZW5kaWYKIAotICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllckFuaW1hdGVkT3BhY2l0
eShXZWJMYXllcklELCBmbG9hdCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllckFuaW1h
dGVkVHJhbnNmb3JtKFdlYkxheWVySUQsIGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0
cml4JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllckFuaW1hdGlvbnMoV2ViTGF5ZXJJ
RCwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnMmKSA9IDA7CiAKICAgICB2
aXJ0dWFsIHZvaWQgYXR0YWNoTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
KikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hMYXllcihXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIqKSA9IDA7CkBAIC03OSw5ICs3OSw4IEBAIHB1YmxpYzoKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyIDogcHVibGljIFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgVGls
ZWRCYWNraW5nU3RvcmVDbGllbnQKLSAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgV2Vi
S2l0OjpDb29yZGluYXRlZFRpbGVDbGllbnQKLSAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJs
aWMgR3JhcGhpY3NMYXllckFuaW1hdGlvbjo6Q2xpZW50IHsKKyAgICAsIHB1YmxpYyBUaWxlZEJh
Y2tpbmdTdG9yZUNsaWVudAorICAgICwgcHVibGljIFdlYktpdDo6Q29vcmRpbmF0ZWRUaWxlQ2xp
ZW50IHsKIHB1YmxpYzoKICAgICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXll
ckNsaWVudCopOwogICAgIHZpcnR1YWwgfkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcigpOwpAQCAt
MTY2LDEwICsxNjUsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1JlYWR5Rm9yVGlsZUJ1ZmZlclN3
YXAoKSBjb25zdDsKICAgICB2b2lkIHVwZGF0ZUNvbnRlbnRCdWZmZXJzKCk7CiAgICAgdm9pZCBw
dXJnZUJhY2tpbmdTdG9yZXMoKTsKLQotICAgIC8vIEdyYXBoaWNzTGF5ZXJBbmltYXRpb246OkNs
aWVudAotICAgIHZpcnR1YWwgdm9pZCBzZXRBbmltYXRlZFRyYW5zZm9ybShjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRBbmltYXRlZE9wYWNpdHkoZmxv
YXQpOworICAgIGJvb2wgaGFzUGVuZGluZ1Zpc2libGVDaGFuZ2VzKCk7CiAKICAgICB2aXJ0dWFs
IGJvb2wgYWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgSW50U2l6
ZSYsIGNvbnN0IEFuaW1hdGlvbiosIGNvbnN0IFN0cmluZyYsIGRvdWJsZSk7CiAgICAgdmlydHVh
bCB2b2lkIHBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYsIGRvdWJsZSk7CkBAIC0xODgsMTIg
KzE4NCwxMiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZTogMTsK
ICAgICBib29sIG1fc2hvdWxkU3luY0NoaWxkcmVuOiAxOwogICAgIGJvb2wgbV9zaG91bGRTeW5j
RmlsdGVyczogMTsKLSAgICBib29sIG1fc2hvdWxkU3luY0FuaW1hdGVkUHJvcGVydGllczogMTsK
KyAgICBib29sIG1fc2hvdWxkU3luY0FuaW1hdGlvbnM6IDE7CiAgICAgYm9vbCBtX2ZpeGVkVG9W
aWV3cG9ydCA6IDE7CiAgICAgYm9vbCBtX2NhbnZhc05lZWRzRGlzcGxheSA6IDE7CiAKICAgICB2
b2lkIG5vdGlmeUNoYW5nZSgpOwotICAgIHZvaWQgZGlkQ2hhbmdlQW5pbWF0ZWRQcm9wZXJ0aWVz
KCk7CisgICAgdm9pZCBkaWRDaGFuZ2VBbmltYXRpb25zKCk7CiAgICAgdm9pZCBkaWRDaGFuZ2VH
ZW9tZXRyeSgpOwogICAgIHZvaWQgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwogICAgIHZvaWQgZGlk
Q2hhbmdlQ2hpbGRyZW4oKTsKQEAgLTIxMSw3ICsyMDcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
YWRqdXN0Q29udGVudHNTY2FsZSgpOwogICAgIHZvaWQgY29tcHV0ZVRyYW5zZm9ybWVkVmlzaWJs
ZVJlY3QoKTsKICAgICB2b2lkIHN5bmNMYXllclBhcmFtZXRlcnMoKTsKLSAgICB2b2lkIHN5bmNB
bmltYXRlZFByb3BlcnRpZXMoKTsKKyAgICB2b2lkIHN5bmNBbmltYXRpb25zKCk7CiAgICAgdm9p
ZCBzZXRTaG91bGRVcGRhdGVWaXNpYmxlUmVjdCgpOwogICAgIGZsb2F0IGVmZmVjdGl2ZUNvbnRl
bnRzU2NhbGUoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVl
Q29vcmRpbmF0b3IuY3BwCmluZGV4IGFhYTFjMzhkNTc3NmE1MWFkMGYzMzk0NzBmMTJmNjE2MjI0
MjhjMjQuLjJhYjgyNWFhZTdjMjdmN2VlYTRiOTIxN2U0ODMzNzg3NGQ0MjQ3ZWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5jcHAKQEAg
LTgyLDYgKzgyLDcgQEAgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OkxheWVyVHJlZUNvb3JkaW5hdG9y
KFdlYlBhZ2UqIHdlYlBhZ2UpCiAgICAgLCBtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lcih0
aGlzLCAmTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckZp
cmVkKQogICAgICwgbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQodHJ1ZSkKICAgICAsIG1f
Zm9yY2VSZXBhaW50QXN5bmNDYWxsYmFja0lEKDApCisgICAgLCBtX2FuaW1hdGlvbnNMb2NrZWQo
ZmFsc2UpCiB7CiAgICAgLy8gQ3JlYXRlIGEgcm9vdCBsYXllci4KICAgICBtX3Jvb3RMYXllciA9
IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzLCB0aGlzKTsKQEAgLTM4NywxMyArMzg4LDM3IEBA
IHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnN5bmNGaXhlZExheWVycygpCiAgICAgICAgIHVw
ZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKHJvb3RSZW5kZXJMYXllci0+Zmlyc3RDaGls
ZCgpKTsKIH0KIAordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6bG9ja0FuaW1hdGlvbnMoKQor
eworICAgIG1fYW5pbWF0aW9uc0xvY2tlZCA9IHRydWU7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpTZXRBbmltYXRpb25zTG9ja2VkKHRy
dWUpKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6dW5sb2NrQW5pbWF0aW9ucygp
Cit7CisgICAgaWYgKCFtX2FuaW1hdGlvbnNMb2NrZWQpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fYW5pbWF0aW9uc0xvY2tlZCA9IGZhbHNlOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdl
czo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6U2V0QW5pbWF0aW9uc0xvY2tlZChmYWxzZSkp
OworfQorCiB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpwZXJmb3JtU2NoZWR1bGVkTGF5ZXJG
bHVzaCgpCiB7CiAgICAgaWYgKG1faXNTdXNwZW5kZWQgfHwgbV93YWl0aW5nRm9yVUlQcm9jZXNz
KQogICAgICAgICByZXR1cm47CiAKKyAgICAvLyBXZSBsb2NrIHRoZSBhbmltYXRpb25zIHdoaWxl
IHBlcmZvcm1pbmcgbGF5b3V0LCB0byBhdm9pZCBmbGlja2VycyBjYXVzZWQgYnkgYW5pbWF0aW9u
cyBjb250aW51aW5nIGluIHRoZSBVSSBwcm9jZXNzIHdoaWxlCisgICAgLy8gdGhlIHdlYiBwcm9j
ZXNzIGxheW91dCB3YW50cyB0byBjYW5jZWwgdGhlbS4KKyAgICBsb2NrQW5pbWF0aW9ucygpOwog
ICAgIHN5bmNEaXNwbGF5U3RhdGUoKTsKIAorICAgIC8vIFdlIGNhbiB1bmxvY2sgdGhlIGFuaW1h
dGlvbnMgYmVmb3JlIGZsdXNoaW5nIGlmIHRoZXJlIGFyZSBubyB2aXNpYmxlIGNoYW5nZXMsIGZv
ciBleGFtcGxlIGlmIHRoZXJlIGFyZSBjb250ZW50IHVwZGF0ZXMKKyAgICAvLyBpbiBhIGxheWVy
IHdpdGggb3BhY2l0eSAwLgorICAgIGJvb2wgY2FuVW5sb2NrQmVmb3JlRmx1c2ggPSAhbV9pc1Zh
bGlkIHx8ICF0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPmhh
c1BlbmRpbmdWaXNpYmxlQ2hhbmdlcygpOworICAgIGlmIChjYW5VbmxvY2tCZWZvcmVGbHVzaCkK
KyAgICAgICAgdW5sb2NrQW5pbWF0aW9ucygpOworCiAgICAgaWYgKCFtX2lzVmFsaWQpCiAgICAg
ICAgIHJldHVybjsKIApAQCAtNTgwLDE2ICs2MDUsMTAgQEAgV2ViQ29yZTo6SW50UmVjdCBMYXll
clRyZWVDb29yZGluYXRvcjo6dmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0CiB9CiAKIAotdm9p
ZCBMYXllclRyZWVDb29yZGluYXRvcjo6c2V0TGF5ZXJBbmltYXRlZE9wYWNpdHkoV2ViTGF5ZXJJ
RCBpZCwgZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0g
ICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpT
ZXRMYXllckFuaW1hdGVkT3BhY2l0eShpZCwgb3BhY2l0eSkpOwotfQotCi12b2lkIExheWVyVHJl
ZUNvb3JkaW5hdG9yOjpzZXRMYXllckFuaW1hdGVkVHJhbnNmb3JtKFdlYkxheWVySUQgaWQsIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCit2b2lkIExheWVyVHJlZUNvb3Jk
aW5hdG9yOjpzZXRMYXllckFuaW1hdGlvbnMoV2ViTGF5ZXJJRCBsYXllcklELCBjb25zdCBHcmFw
aGljc0xheWVyQW5pbWF0aW9ucyYgYW5pbWF0aW9ucykKIHsKICAgICBtX3Nob3VsZFN5bmNGcmFt
ZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGlu
YXRvclByb3h5OjpTZXRMYXllckFuaW1hdGVkVHJhbnNmb3JtKGlkLCB0cmFuc2Zvcm0pKTsKKyAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlNl
dExheWVyQW5pbWF0aW9ucyhsYXllcklELCBhbmltYXRpb25zLmdldEFjdGl2ZUFuaW1hdGlvbnMo
KSkpOwogfQogCiB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzZXRWaXNpYmxlQ29udGVudHNS
ZWN0KGNvbnN0IEludFJlY3QmIHJlY3QsIGZsb2F0IHNjYWxlLCBjb25zdCBGbG9hdFBvaW50JiB0
cmFqZWN0b3J5VmVjdG9yKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJl
ZUNvb3JkaW5hdG9yLmgKaW5kZXggNzc2YThkOTdlMTMxNzNmYzVlZmZiOTUwMDM1YWM5YjBjNzBm
ODhjYi4uMjAxMTNlMGI3ODU2NjBiNjUzYjIxMTEyZjU5Y2NiM2UwYWM3YmI0MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
TGF5ZXJUcmVlQ29vcmRpbmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5oCkBAIC04NCw4
ICs4NCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJTdGF0ZShXZWJM
YXllcklELCBjb25zdCBXZWJMYXllckluZm8mKTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVy
Q2hpbGRyZW4oV2ViTGF5ZXJJRCwgY29uc3QgVmVjdG9yPFdlYkxheWVySUQ+Jik7Ci0gICAgdmly
dHVhbCB2b2lkIHNldExheWVyQW5pbWF0ZWRPcGFjaXR5KFdlYkxheWVySUQsIGZsb2F0KTsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJBbmltYXRlZFRyYW5zZm9ybShXZWJMYXllcklELCBjb25z
dCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRM
YXllckFuaW1hdGlvbnMoV2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllckFu
aW1hdGlvbnMmKTsKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiAgICAgdmlydHVhbCB2b2lkIHN5
bmNMYXllckZpbHRlcnMoV2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9u
cyYpOwogI2VuZGlmCkBAIC0xMjEsNiArMTIwLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHBlcmZv
cm1TY2hlZHVsZWRMYXllckZsdXNoKCk7CiAgICAgdm9pZCBkaWRQZXJmb3JtU2NoZWR1bGVkTGF5
ZXJGbHVzaCgpOwogICAgIHZvaWQgc3luY0Rpc3BsYXlTdGF0ZSgpOworICAgIHZvaWQgbG9ja0Fu
aW1hdGlvbnMoKTsKKyAgICB2b2lkIHVubG9ja0FuaW1hdGlvbnMoKTsKIAogICAgIHZvaWQgbGF5
ZXJGbHVzaFRpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8TGF5ZXJUcmVlQ29vcmRpbmF0b3I+Kik7
CiAKQEAgLTE1Niw2ICsxNTcsNyBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6OlRpbWVyPExheWVy
VHJlZUNvb3JkaW5hdG9yPiBtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lcjsKICAgICBib29s
IG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkOwogICAgIHVpbnQ2NF90IG1fZm9yY2VSZXBh
aW50QXN5bmNDYWxsYmFja0lEOworICAgIGJvb2wgbV9hbmltYXRpb25zTG9ja2VkOwogfTsKIAog
fQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170279</attachid>
            <date>2012-10-23 17:42:03 -0700</date>
            <delta_ts>2012-10-23 21:03:19 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-93146-20121023174002.patch</filename>
            <type>text/plain</type>
            <size>5693</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyMjgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNGRkOWIzMTE1MGMzYjIw
Y2QyMDM0YjQ5MjJmYjk4ZTViMzU0NjdkOS4uNDAxYmYzN2JkZWM5NGU1MmY3YTgyZTU0NzE4NzRi
M2E1Y2QxN2I5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEyLTEwLTIzICBObydh
bSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgQ29vcmRp
bmF0ZWQgR3JhcGhpY3M6IEVuYWJsZSB0aHJlYWRlZC9JUEMgYW5pbWF0aW9ucworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTMxNDYKKworICAgICAgICBV
bnJldmlld2VkIGJ1aWxkIGZpeCwgc29tZSBmdW5jdGlvbiBuYW1lcyBjaGFuZ2VkIGJldHdlZW4g
cmV2aWV3IGFuZCBsYW5kaW5nLgorCisgICAgICAgICogU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKENvcmVJ
UEM6OmVuY29kZVRpbWluZ0Z1bmN0aW9uKToKKyAgICAgICAgKENvcmVJUEM6OmRlY29kZVRpbWlu
Z0Z1bmN0aW9uKToKKyAgICAgICAgKENvcmVJUEM6Ojo6ZW5jb2RlKToKKyAgICAgICAgKiBTaGFy
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMu
aDoKKyAgICAgICAgKFdlYkNvcmUpOgorCiAyMDEyLTEwLTIzICBBbmR5IEVzdGVzICA8YWVzdGVz
QGFwcGxlLmNvbT4KIAogICAgICAgICBbV2ViS2l0MiBBUEldIEFkZCBwcm9wZXJ0aWVzIHRvIGdl
dCB0ZXh0UmVjdHMgZnJvbSBhIFdLRE9NUmFuZ2Ugb3IgV0tET01Ob2RlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBo
aWNzQXJndW1lbnRDb2RlcnMuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNwcAppbmRleCA3NDUz
ZjZkNzM3MjFlZjBmMTE1ZDllNjRhOTc2MGY4NDMwODNhYTU0Li4zYTk0ODlmMDZhOTQ1YTU0MDUw
NDdhYmVjMmI1NWZjOTEwOTA2NWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHAKQEAgLTUyMSwxNiArNTIxLDE2IEBAIHN0YXRp
YyB2b2lkIGVuY29kZVRpbWluZ0Z1bmN0aW9uKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29u
c3QgVGltaW5nRnVuY3Rpb24qCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgVGltaW5nRnVuY3Rp
b246OkN1YmljQmV6aWVyRnVuY3Rpb246IHsKICAgICAgICAgY29uc3QgQ3ViaWNCZXppZXJUaW1p
bmdGdW5jdGlvbiogY3ViaWMgPSBzdGF0aWNfY2FzdDxjb25zdCBDdWJpY0JlemllclRpbWluZ0Z1
bmN0aW9uKj4odGltaW5nRnVuY3Rpb24pOwotICAgICAgICBlbmNvZGVyLT5lbmNvZGVEb3VibGUo
Y3ViaWMtPngxKCkpOwotICAgICAgICBlbmNvZGVyLT5lbmNvZGVEb3VibGUoY3ViaWMtPnkxKCkp
OwotICAgICAgICBlbmNvZGVyLT5lbmNvZGVEb3VibGUoY3ViaWMtPngyKCkpOwotICAgICAgICBl
bmNvZGVyLT5lbmNvZGVEb3VibGUoY3ViaWMtPnkyKCkpOworICAgICAgICBlbmNvZGVyLT5lbmNv
ZGUoY3ViaWMtPngxKCkpOworICAgICAgICBlbmNvZGVyLT5lbmNvZGUoY3ViaWMtPnkxKCkpOwor
ICAgICAgICBlbmNvZGVyLT5lbmNvZGUoY3ViaWMtPngyKCkpOworICAgICAgICBlbmNvZGVyLT5l
bmNvZGUoY3ViaWMtPnkyKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBUaW1p
bmdGdW5jdGlvbjo6U3RlcHNGdW5jdGlvbjogewogICAgICAgICBjb25zdCBTdGVwc1RpbWluZ0Z1
bmN0aW9uKiBzdGVwcyA9IHN0YXRpY19jYXN0PGNvbnN0IFN0ZXBzVGltaW5nRnVuY3Rpb24qPih0
aW1pbmdGdW5jdGlvbik7Ci0gICAgICAgIGVuY29kZXItPmVuY29kZUludDMyKHN0ZXBzLT5udW1i
ZXJPZlN0ZXBzKCkpOwotICAgICAgICBlbmNvZGVyLT5lbmNvZGVCb29sKHN0ZXBzLT5zdGVwQXRT
dGFydCgpKTsKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKHN0YXRpY19jYXN0PHVpbnQzMl90Pihz
dGVwcy0+bnVtYmVyT2ZTdGVwcygpKSk7CisgICAgICAgIGVuY29kZXItPmVuY29kZShzdGVwcy0+
c3RlcEF0U3RhcnQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICB9CkBAIC01NjQsOSAr
NTY0LDkgQEAgYm9vbCBkZWNvZGVUaW1pbmdGdW5jdGlvbihBcmd1bWVudERlY29kZXIqIGRlY29k
ZXIsIFJlZlB0cjxUaW1pbmdGdW5jdGlvbj4mIHRpbWkKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgIGNhc2UgVGltaW5nRnVuY3Rpb246OlN0ZXBzRnVuY3Rpb246IHsKLSAgICAgICAg
aW50IG51bWJlck9mU3RlcHM7CisgICAgICAgIHVpbnQzMl90IG51bWJlck9mU3RlcHM7CiAgICAg
ICAgIGJvb2wgc3RlcEF0U3RhcnQ7Ci0gICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlSW50MzIo
bnVtYmVyT2ZTdGVwcykpCisgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlVUludDMyKG51bWJl
ck9mU3RlcHMpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoIWRlY29k
ZXItPmRlY29kZUJvb2woc3RlcEF0U3RhcnQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtNTg0LDI3ICs1ODQsMjcgQEAgdm9pZCBBcmd1bWVudENvZGVyPEdyYXBoaWNzTGF5ZXJBbmlt
YXRpb24+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb24KICAgICBlbmNvZGVy
LT5lbmNvZGUoYW5pbWF0aW9uLm5hbWUoKSk7CiAgICAgZW5jb2Rlci0+ZW5jb2RlKGFuaW1hdGlv
bi5ib3hTaXplKCkpOwogICAgIGVuY29kZXItPmVuY29kZUVudW0oYW5pbWF0aW9uLnN0YXRlKCkp
OwotICAgIGVuY29kZXItPmVuY29kZURvdWJsZShhbmltYXRpb24uc3RhcnRUaW1lKCkpOwotICAg
IGVuY29kZXItPmVuY29kZURvdWJsZShhbmltYXRpb24ucGF1c2VUaW1lKCkpOwotICAgIGVuY29k
ZXItPmVuY29kZUJvb2woYW5pbWF0aW9uLmxpc3RzTWF0Y2goKSk7CisgICAgZW5jb2Rlci0+ZW5j
b2RlKGFuaW1hdGlvbi5zdGFydFRpbWUoKSk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKGFuaW1hdGlv
bi5wYXVzZVRpbWUoKSk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKGFuaW1hdGlvbi5saXN0c01hdGNo
KCkpOwogCiAgICAgUmVmUHRyPEFuaW1hdGlvbj4gYW5pbWF0aW9uT2JqZWN0ID0gYW5pbWF0aW9u
LmFuaW1hdGlvbigpOwogICAgIGVuY29kZXItPmVuY29kZUVudW0oYW5pbWF0aW9uT2JqZWN0LT5k
aXJlY3Rpb24oKSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlVUludDMyKGFuaW1hdGlvbk9iamVjdC0+
ZmlsbE1vZGUoKSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlRG91YmxlKGFuaW1hdGlvbk9iamVjdC0+
ZHVyYXRpb24oKSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlRG91YmxlKGFuaW1hdGlvbk9iamVjdC0+
aXRlcmF0aW9uQ291bnQoKSk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKHN0YXRpY19jYXN0PHVpbnQz
Ml90PihhbmltYXRpb25PYmplY3QtPmZpbGxNb2RlKCkpKTsKKyAgICBlbmNvZGVyLT5lbmNvZGUo
YW5pbWF0aW9uT2JqZWN0LT5kdXJhdGlvbigpKTsKKyAgICBlbmNvZGVyLT5lbmNvZGUoYW5pbWF0
aW9uT2JqZWN0LT5pdGVyYXRpb25Db3VudCgpKTsKICAgICBlbmNvZGVUaW1pbmdGdW5jdGlvbihl
bmNvZGVyLCBhbmltYXRpb25PYmplY3QtPnRpbWluZ0Z1bmN0aW9uKCkuZ2V0KCkpOwogCiAgICAg
Y29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIGtleWZyYW1lcyA9IGFuaW1hdGlvbi5rZXlmcmFtZXMo
KTsKICAgICBlbmNvZGVyLT5lbmNvZGVFbnVtKGtleWZyYW1lcy5wcm9wZXJ0eSgpKTsKLSAgICBl
bmNvZGVyLT5lbmNvZGVVSW50MzIoa2V5ZnJhbWVzLnNpemUoKSk7CisgICAgZW5jb2Rlci0+ZW5j
b2RlKHN0YXRpY19jYXN0PHVpbnQzMl90PihrZXlmcmFtZXMuc2l6ZSgpKSk7CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBrZXlmcmFtZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgY29uc3Qg
QW5pbWF0aW9uVmFsdWUqIHZhbHVlID0ga2V5ZnJhbWVzLmF0KGkpOwotICAgICAgICBlbmNvZGVy
LT5lbmNvZGVGbG9hdCh2YWx1ZS0+a2V5VGltZSgpKTsKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2Rl
KHZhbHVlLT5rZXlUaW1lKCkpOwogICAgICAgICBlbmNvZGVUaW1pbmdGdW5jdGlvbihlbmNvZGVy
LCB2YWx1ZS0+dGltaW5nRnVuY3Rpb24oKSk7CiAgICAgICAgIHN3aXRjaCAoa2V5ZnJhbWVzLnBy
b3BlcnR5KCkpIHsKICAgICAgICAgY2FzZSBBbmltYXRlZFByb3BlcnR5T3BhY2l0eToKLSAgICAg
ICAgICAgIGVuY29kZXItPmVuY29kZUZsb2F0KHN0YXRpY19jYXN0PGNvbnN0IEZsb2F0QW5pbWF0
aW9uVmFsdWUqPih2YWx1ZSktPnZhbHVlKCkpOworICAgICAgICAgICAgZW5jb2Rlci0+ZW5jb2Rl
KHN0YXRpY19jYXN0PGNvbnN0IEZsb2F0QW5pbWF0aW9uVmFsdWUqPih2YWx1ZSktPnZhbHVlKCkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eVdlYmtp
dFRyYW5zZm9ybToKICAgICAgICAgICAgIGVuY29kZXItPmVuY29kZSgqc3RhdGljX2Nhc3Q8Y29u
c3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUqPih2YWx1ZSktPnZhbHVlKCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRH
cmFwaGljc0FyZ3VtZW50Q29kZXJzLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaAppbmRleCA4MTdk
MmYzYTMwNjY1OTA4NTYxY2YwOTY2ZDMwMzAxZGQyOTZkZDExLi5jOTJjNjEzMGYzMmQ3YzNkNWEz
ODg2NDU5YzViOWY5MzBiMjJjODM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaApAQCAtMzYsMTYgKzM2LDEzIEBAIGNsYXNzIEZsb2F0
UG9pbnQzRDsKIGNsYXNzIEdyYXBoaWNzTGF5ZXJBbmltYXRpb247CiBjbGFzcyBHcmFwaGljc0xh
eWVyQW5pbWF0aW9uczsKIGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4OworY2xhc3MgVHJhbnNm
b3JtT3BlcmF0aW9uczsKIHN0cnVjdCBMZW5ndGg7CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMp
CiBjbGFzcyBGaWx0ZXJPcGVyYXRpb25zOwogI2VuZGlmCiAKLSNpZiBFTkFCTEUoQ1NTX1NIQURF
UlMpCi1jbGFzcyBUcmFuc2Zvcm1PcGVyYXRpb25zOwotI2VuZGlmCi0KICNpZiBVU0UoR1JBUEhJ
Q1NfU1VSRkFDRSkKIHN0cnVjdCBHcmFwaGljc1N1cmZhY2VUb2tlbjsKICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170283</attachid>
            <date>2012-10-23 18:26:30 -0700</date>
            <delta_ts>2012-10-24 13:33:26 -0700</delta_ts>
            <desc>Followup patch: animations stay locked when they&apos;re not supposed to</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>1635</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBhYWY5NDUxLi5iYWM3NTQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYg
QEAKKzIwMTItMTAtMjMgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNv
bT4KKworICAgICAgICBDb29yZGluYXRlZCBHcmFwaGljczogRW5hYmxlIHRocmVhZGVkL0lQQyBh
bmltYXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05MzE0NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEluIHNvbWUgY2FzZXMgdGhlcmUgYXJlIHBlbmRpbmcgY2hhbmdlcyBpbiB0aGUgbGF5ZXJzLCBi
dXQgbm8gYWN0dWFsIGNoYW5nZXMgdG8gdGhlIGZyYW1lLgorICAgICAgICBJbiB0aGF0IGNhc2Ug
d2Ugc2hvdWxkIHVubG9jayB0aGUgYW5pbWF0aW9ucy4KKworICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmZsdXNoUGVuZGluZ0xheWVyQ2hh
bmdlcyk6CisKIDIwMTItMTAtMjMgIEFsbGFuIFNhbmRmZWxkIEplbnNlbiAgPGFsbGFuLmplbnNl
bkBkaWdpYS5jb20+CiAKICAgICAgICAgW1F0XVtXSzJdIEFkZCBwcmVmZXJlbmNlIGZvciBlbmFi
bGluZyBzY3JvbGwgYW5pbWF0b3JzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9M
YXllclRyZWVDb29yZGluYXRvci5jcHAKaW5kZXggMmFiODI1YS4uZWVhNTk2NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
TGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcApAQCAt
MjgwLDcgKzI4MCw4IEBAIGJvb2wgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmZsdXNoUGVuZGluZ0xh
eWVyQ2hhbmdlcygpCiAgICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eTo6RGlkUmVuZGVyRnJhbWUoY29udGVudHNTaXplLCBjb3ZlcmVkUmVj
dCkpOwogICAgICAgICBtX3dhaXRpbmdGb3JVSVByb2Nlc3MgPSB0cnVlOwogICAgICAgICBtX3No
b3VsZFN5bmNGcmFtZSA9IGZhbHNlOwotICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgdW5sb2Nr
QW5pbWF0aW9ucygpOwogCiAgICAgaWYgKG1fZm9yY2VSZXBhaW50QXN5bmNDYWxsYmFja0lEKSB7
CiAgICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpWb2lkQ2Fs
bGJhY2sobV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQpKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>