<?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>228009</bug_id>
          
          <creation_ts>2021-07-15 16:27:34 -0700</creation_ts>
          <short_desc>Add key-driven smooth scrolling to macOS</short_desc>
          <delta_ts>2021-08-30 23:17:48 -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>Scrolling</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>macOS 11</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=228690</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=229697</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>228155</blocked>
    
    <blocked>228901</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dana Estra">dana.estra</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>akeerthi</cc>
    
    <cc>bdakin</cc>
    
    <cc>cdumez</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fujii</cc>
    
    <cc>kangil.han</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1777372</commentid>
    <comment_count>0</comment_count>
    <who name="Dana Estra">dana.estra</who>
    <bug_when>2021-07-15 16:27:34 -0700</bug_when>
    <thetext>Add Smooth Scrolling to macOS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1777622</commentid>
    <comment_count>1</comment_count>
      <attachid>433709</attachid>
    <who name="Dana Estra">dana.estra</who>
    <bug_when>2021-07-16 15:19:13 -0700</bug_when>
    <thetext>Created attachment 433709
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1777638</commentid>
    <comment_count>2</comment_count>
      <attachid>433709</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-07-16 16:06:19 -0700</bug_when>
    <thetext>Comment on attachment 433709
Patch

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

&gt; Source/WebCore/page/EventHandler.cpp:93
&gt; +#include &quot;ScrollAnimatorMac.h&quot;

Can&apos;t do this, because this is cross-platform code.

&gt; Source/WebCore/page/EventHandler.cpp:4314
&gt; +    KeyboardScroll* scroll = new KeyboardScroll;

A manually-managed heap-allocated object is an odd choice for this; I would go with something more like the iOS implementation, which maintains a `std::optional&lt;KeyboardScroll&gt;` instead (unique_ptr&lt;KeyboardScroll&gt; would also be fine, but a raw pointer is bad news and easy to get wrong/cause leaks/etc.)

&gt; Source/WebCore/platform/ScrollController.cpp:71
&gt; +    setIsAnimatingSmoothScrolling(true);

Probably want to say &quot;keyboard&quot; most of the places you say &quot;smooth&quot;

&gt; Source/WebCore/platform/mac/ScrollAnimatorMac.h:70
&gt; +    bool beginKeyboardScrollAnimation(KeyboardScroll*, KeyboardEvent&amp;) override;
&gt; +    void handleKeyUpEventWhileScrolling() override;
&gt; +    void stopAnimatedScroll();

Possible we can just put our implementation on ScrollAnimator proper, instead of the mac specific subclass? I&apos;m not sure, should see what smfr thinks. Generally cross-platform-first-unless-there&apos;s-a-reason-not-to is the WebKit approach, though.

&gt; Source/WebCore/platform/mac/ScrollAnimatorMac.h:173
&gt; +    KeyboardScroll *m_currentScroll;

star&apos;s on the wrong side.

&gt; Source/WebCore/platform/mac/ScrollAnimatorMac.mm:96
&gt; +    if (m_currentScroll) {

It would be fantastic to think about how to implement some of the physics in terms of free functions that can be shared between the two implementations (maybe a structure to represent the velocity/acceleration/current+ideal positions/etc., and some functions that are like &quot;please move this state forward one tick (of this duration) given this KeyboardScroll&quot;, that only operate on inputs and return the new state, etc. (We can talk about the details, but we should get to the place where there&apos;s very little interesting code in WKKeyboardScrollingAnimator for example).

&gt; Source/WebCore/platform/mac/ScrollAnimatorMac.mm:186
&gt; +void ScrollAnimatorMac::stopAnimatedScroll()

Probably needs to have a name that is somehow about the keyboard

&gt; Source/WebCore/platform/mac/ScrollAnimatorMac.mm:902
&gt; +    delete m_currentScroll;

See above</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1777981</commentid>
    <comment_count>3</comment_count>
      <attachid>433709</attachid>
    <who name="Aditya Keerthi">akeerthi</who>
    <bug_when>2021-07-19 13:41:53 -0700</bug_when>
    <thetext>Comment on attachment 433709
Patch

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

&gt; Source/WebCore/platform/mac/ScrollAnimatorMac.h:34
&gt; +#include &quot;FrameView.h&quot;

I don&apos;t think this import is necessary?

&gt; Source/WebCore/platform/mac/ScrollAnimatorMac.mm:158
&gt; +        IntPoint newPosition = IntPoint((currentPosition() + m_currentScroll-&gt;offset).x(), (currentPosition() + m_currentScroll-&gt;offset).y());

This can be `auto newPosition = IntPoint(currentPosition() + m_currentScroll-&gt;offset);`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1778439</commentid>
    <comment_count>4</comment_count>
      <attachid>433938</attachid>
    <who name="Dana Estra">dana.estra</who>
    <bug_when>2021-07-21 09:21:10 -0700</bug_when>
    <thetext>Created attachment 433938
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1778502</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-07-21 12:39:29 -0700</bug_when>
    <thetext>&lt;rdar://problem/80911857&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1778595</commentid>
    <comment_count>6</comment_count>
      <attachid>433969</attachid>
    <who name="Dana Estra">dana.estra</who>
    <bug_when>2021-07-21 16:26:41 -0700</bug_when>
    <thetext>Created attachment 433969
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1778599</commentid>
    <comment_count>7</comment_count>
      <attachid>433969</attachid>
    <who name="Aditya Keerthi">akeerthi</who>
    <bug_when>2021-07-21 16:45:34 -0700</bug_when>
    <thetext>Comment on attachment 433969
Patch

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

&gt; Source/WebCore/ChangeLog:4
&gt; +                https://bugs.webkit.org/show_bug.cgi?id=228009

Fix indentation.

&gt; Source/WebCore/page/EventHandler.cpp:-70
&gt; -#include &quot;KeyboardEvent.h&quot;

I would keep the `KeyboardEvent` include, since it&apos;s still used in this file.

&gt; Source/WebCore/platform/ScrollAnimator.cpp:35
&gt; +#import &quot;EventNames.h&quot;

#include.

&gt; Source/WebCore/platform/ScrollAnimator.cpp:333
&gt; +    ScrollPosition idealPosition = m_scrollableArea.constrainScrollPosition(m_currentScroll ? IntPoint(currentPosition().x(), currentPosition().y()) :  IntPoint(m_idealPosition.x(), m_idealPosition.y()));

This can be written as: `ScrollPosition idealPosition = m_scrollableArea.constrainScrollPosition(IntPoint(m_currentScroll ? currentPosition() : m_idealPosition));`

&gt; Source/WebCore/platform/ScrollController.cpp:-57
&gt; -

Nit: Preserve this whitespace for readability.

&gt; Source/WebCore/platform/ScrollController.h:171
&gt; +    void updateKeyboardScrollingAnimatingState(MonotonicTime);

Nit: Add a newline after this line to preserve the existing organization.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1778631</commentid>
    <comment_count>8</comment_count>
      <attachid>433969</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-07-21 19:41:24 -0700</bug_when>
    <thetext>Comment on attachment 433969
Patch

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

&gt; Source/WebCore/page/EventHandler.cpp:4320
&gt; +    scroll.maximumVelocity = scroll.offset.scaled(KeyboardScrollParameters::parameters().maximumVelocityMultiplier);
&gt; +    scroll.force = scroll.maximumVelocity.scaled(KeyboardScrollParameters::parameters().springMass / KeyboardScrollParameters::parameters().timeToMaximumVelocity);

I feel like KeyboardScrollParameters should be consulted inside the ScrollAnimator code, not here in event handling code.

&gt; Source/WebCore/page/EventHandler.cpp:4323
&gt; +    return view-&gt;scrollAnimator().beginKeyboardScrollAnimation(scroll, event);

Are we always beginning here, or might the animation already be running from a previous event?

&gt; Source/WebCore/platform/ScrollAnimator.cpp:272
&gt; +static BoxSide boxSide(ScrollDirection direction)

Needs a more descriptive name. boxSideInDirection ?boxSideForDirection?

&gt; Source/WebCore/platform/ScrollAnimator.cpp:302
&gt; +void ScrollAnimator::updateKeyboardScrollPosition(MonotonicTime currentTime)

Rather than this collection of functions on ScrollAnimator with &quot;keyboard&quot; in the name, maybe these functions should be in a separate class stored as a member variable (like ScrollController). You have KeyboardScroll but I&apos;m not sure what that is.

&gt; Source/WebCore/platform/ScrollAnimator.cpp:305
&gt; +    FloatSize force = { 0, 0 };
&gt; +    FloatSize axesToApplySpring = {1, 1};

Inconsistent spacing (the first one is right).
We also like to write this as
auto force = FloatSize { };

&gt; Source/WebCore/platform/ScrollAnimator.cpp:310
&gt; +        ScrollDirection direction = m_currentScroll-&gt;direction;

auto

&gt; Source/WebCore/platform/ScrollAnimator.cpp:316
&gt; +            // Apply the scrolling force. Only apply the spring in the perpendicular axis,
&gt; +            // otherwise it drags against the direction of motion.
&gt; +            axesToApplySpring = perpendicularAbsoluteUnitVector(direction);

Why is anything happening on the perpendicular axis? Wouldn&apos;t a keyboard scroll just be on one axis?

&gt; Source/WebCore/platform/ScrollAnimator.cpp:406
&gt; +    KeyboardScrollParameters params = KeyboardScrollParameters::parameters();

auto

&gt; Source/WebCore/platform/ScrollAnimator.h:180
&gt; +    RectEdges&lt;bool&gt; scrollableDirectionsFromOffset(FloatPoint);

const function

&gt; Source/WebCore/platform/ScrollAnimator.h:191
&gt; +    std::optional&lt;WebCore::KeyboardScroll&gt; m_currentScroll;

m_currentKeyboardScroll</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1778652</commentid>
    <comment_count>9</comment_count>
      <attachid>433969</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-07-21 23:06:12 -0700</bug_when>
    <thetext>Comment on attachment 433969
Patch

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

&gt;&gt; Source/WebCore/page/EventHandler.cpp:4323
&gt;&gt; +    return view-&gt;scrollAnimator().beginKeyboardScrollAnimation(scroll, event);
&gt; 
&gt; Are we always beginning here, or might the animation already be running from a previous event?

It&apos;s the beginning /of a scroll/ (or a scroll gesture, or whatever you want to call it), but you&apos;re right, the animation might already be running.

&gt;&gt; Source/WebCore/platform/ScrollAnimator.cpp:316
&gt;&gt; +            axesToApplySpring = perpendicularAbsoluteUnitVector(direction);
&gt; 
&gt; Why is anything happening on the perpendicular axis? Wouldn&apos;t a keyboard scroll just be on one axis?

(It took me a while to re-figure this out: while the key is down, the spring is not engaged in the axis of scrolling motion (instead, the force comes from the key), but we still want to let previous animations that might have stretched the string perpendicular to the current animation keep running to completion.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779230</commentid>
    <comment_count>10</comment_count>
      <attachid>434141</attachid>
    <who name="Dana Estra">dana.estra</who>
    <bug_when>2021-07-23 16:17:51 -0700</bug_when>
    <thetext>Created attachment 434141
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779241</commentid>
    <comment_count>11</comment_count>
      <attachid>434144</attachid>
    <who name="Dana Estra">dana.estra</who>
    <bug_when>2021-07-23 16:40:42 -0700</bug_when>
    <thetext>Created attachment 434144
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779528</commentid>
    <comment_count>12</comment_count>
      <attachid>434144</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-07-26 13:02:20 -0700</bug_when>
    <thetext>Comment on attachment 434144
Patch

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

&gt; Source/WebCore/page/EventHandler.cpp:4263
&gt; +    return view-&gt;scrollAnimator().keyboardScrollingAnimator()-&gt;beginKeyboardScrollGesture(event);

If keyboardScrollingAnimator is guaranteed to be non-null, this getter should return a reference, and if not, you probably need to null-check it?

&gt; Source/WebCore/platform/KeyboardScrollingAnimator.h:36
&gt; +    WTF_MAKE_FAST_ALLOCATED;

probably also non-copyable

&gt; Source/WebCore/platform/KeyboardScrollingAnimator.h:47
&gt; +    std::optional&lt;KeyboardScroll&gt; keyboardScrollForKeyboardEvent(KeyboardEvent&amp;);

const?

&gt; Source/WebCore/platform/KeyboardScrollingAnimator.h:48
&gt; +    float scrollDistance(ScrollDirection, ScrollGranularity);

const?

&gt; Source/WebCore/platform/ScrollAnimator.cpp:71
&gt; +    , m_keyboardScrollingAnimator(makeUnique&lt;KeyboardScrollingAnimator&gt;(*this, m_scrollController))

Any reason KeyboardScrollingAnimator isn&apos;t just a member (instead of a unique_ptr)? (either way, you can make the getter return a reference)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779548</commentid>
    <comment_count>13</comment_count>
      <attachid>434144</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-07-26 13:48:25 -0700</bug_when>
    <thetext>Comment on attachment 434144
Patch

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

&gt; Source/WebCore/page/EventHandler.cpp:3809
&gt; +    if (event.type() == eventNames().keyupEvent) {
&gt; +        FrameView* view = m_frame.view();
&gt; +        return view-&gt;scrollAnimator().keyboardScrollingAnimator()-&gt;handleKeyUpEventWhileScrolling();
&gt; +    }

It&apos;s a bit weird that the call to beginKeyboardScrollGesture() is hidden down in handleKeyboardScrolling but handleKeyUpEventWhileScrolling() is handled here. Would be nice to make them more symmetrical.

&gt; Source/WebCore/platform/KeyboardScrollingAnimator.cpp:98
&gt; +

Remove this blank line.

&gt; Source/WebCore/platform/KeyboardScrollingAnimator.cpp:104
&gt; +

Same

&gt; Source/WebCore/platform/KeyboardScrollingAnimator.cpp:121
&gt; +    auto springForce = - displacement.scaled(params.springStiffness) - m_velocity.scaled(params.springDamping);

No space after the leading &apos;-&apos;

&gt; Source/WebCore/platform/KeyboardScrollingAnimator.cpp:158
&gt; +    RELEASE_ASSERT_NOT_REACHED();

No need for this to be a RELEASE assert. Just return 0.

&gt; Source/WebCore/platform/KeyboardScrollingAnimator.cpp:196
&gt; +        RELEASE_ASSERT_NOT_REACHED();

don&apos;t release assert.

&gt; Source/WebCore/platform/KeyboardScrollingAnimator.cpp:212
&gt; +        RELEASE_ASSERT_NOT_REACHED();

don&apos;t release assert.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779600</commentid>
    <comment_count>14</comment_count>
      <attachid>434249</attachid>
    <who name="Dana Estra">dana.estra</who>
    <bug_when>2021-07-26 15:21:46 -0700</bug_when>
    <thetext>Created attachment 434249
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779851</commentid>
    <comment_count>15</comment_count>
      <attachid>434249</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-07-27 15:15:33 -0700</bug_when>
    <thetext>Comment on attachment 434249
Patch

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

&gt; Source/WebCore/page/EventHandler.cpp:3807
&gt; +    if (event.type() == eventNames().keyupEvent)
&gt; +        stopKeyboardScrolling();

It is odd that this one doesn&apos;t follow the pattern of the others (passing it to editor first, bailing if it ate the event). On the other hand, we know that we never got here with keyup before, so I assume editor&apos;s handleKeyboardEvent doesn&apos;t do anything with keyup? (please check) But in that case, maybe it&apos;s best to follow the pattern anyway to minimize surprise later. Would be interested to hear other people&apos;s opinions.

&gt; Source/WebCore/platform/KeyboardScrollingAnimator.h:42
&gt; +    void handleKeyUpEventWhileScrolling();

The caller doesn&apos;t actually know that this is &quot;while scrolling&quot;, right, they&apos;re just plumbing us every keyup? So maybe drop to just &quot;handleKeyUpEvent&quot;. The class name indicates who&apos;s handling it and why sufficiently.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780177</commentid>
    <comment_count>16</comment_count>
      <attachid>434452</attachid>
    <who name="Dana Estra">dana.estra</who>
    <bug_when>2021-07-28 13:18:59 -0700</bug_when>
    <thetext>Created attachment 434452
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780900</commentid>
    <comment_count>17</comment_count>
      <attachid>434649</attachid>
    <who name="Dana Estra">dana.estra</who>
    <bug_when>2021-07-30 12:03:35 -0700</bug_when>
    <thetext>Created attachment 434649
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780931</commentid>
    <comment_count>18</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-07-30 13:26:59 -0700</bug_when>
    <thetext>Committed r280492 (240124@main): &lt;https://commits.webkit.org/240124@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 434649.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1781158</commentid>
    <comment_count>19</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-08-01 13:44:16 -0700</bug_when>
    <thetext>This change introduce a new assertion failure for Windows ports.
Filed: Bug 228690 – [Win] ASSERTION FAILED: evt-&gt;type() == eventNames().keydownEvent || evt-&gt;type() == eventNames().keypressEvent in WebView::interpretKeyEvent since r280492</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1782066</commentid>
    <comment_count>20</comment_count>
    <who name="Dana Estra">dana.estra</who>
    <bug_when>2021-08-04 15:09:52 -0700</bug_when>
    <thetext>Reopening to attach new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1782067</commentid>
    <comment_count>21</comment_count>
      <attachid>434941</attachid>
    <who name="Dana Estra">dana.estra</who>
    <bug_when>2021-08-04 15:09:54 -0700</bug_when>
    <thetext>Created attachment 434941
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1788789</commentid>
    <comment_count>22</comment_count>
      <attachid>434649</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-08-30 23:17:48 -0700</bug_when>
    <thetext>Comment on attachment 434649
Patch

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

&gt; Source/WebCore/platform/KeyboardScrollingAnimator.cpp:126
&gt; +    m_velocity += acceleration.scaled(frameDuration);

I have a problem for this code. Bug 229697 – keyboard scrolling spring damping animation doesn&apos;t finish in WinCairo Debug with debug logging</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>433709</attachid>
            <date>2021-07-16 15:19:13 -0700</date>
            <delta_ts>2021-07-21 09:21:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228009-20210716181912.patch</filename>
            <type>text/plain</type>
            <size>21519</size>
            <attacher name="Dana Estra">dana.estra</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5OTU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTg2OTY2YzRlMjRjN2M1
MDIwZWJmNTMyZWUyZjRhODgzNDBjYjgyYi4uYWVjNTJjZmY3ZWI3ZmQ2M2I1YzlmNDFlMGUxMDcw
OGVhNGQ4OTcxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDIxLTA3LTE2ICBEYW5h
IEVzdHJhICA8ZGVzdHJhQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgc21vb3RoIHNjcm9sbGlu
ZyB0byBtYWNPUworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjI4MDA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQ2F1c2Uga2V5Ym9hcmQgc2Nyb2xsIGV2ZW50IHRvIHRyaWdnZXIgc3RhcnQgb2Ygc21vb3Ro
IHNjcm9sbCBhbmltYXRpb24sIHVzaW5nIHNhbWUgcGh5c2ljcyBpbXBsZW1lbnRhdGlvbiBhcyBp
T1Mgc21vb3RoIHNjcm9sbGluZy4KKyAgICAgICAgCisgICAgICAgIE5vIHRlc3RzIHlldC4KKwor
ICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmRlZmF1bHRF
dmVudEhhbmRsZXIpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6ZGVmYXVsdEtleWJvYXJkRXZlbnRIYW5kbGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2Nyb2xsRGlzdGFuY2UpOgorICAgICAgICAo
V2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVLZXlib2FyZFNjcm9sbGluZyk6CisgICAgICAg
ICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
QW5pbWF0b3I6OnN0YXJ0QW5pbWF0aW9uQ2FsbGJhY2spOgorICAgICAgICAqIHBsYXRmb3JtL1Nj
cm9sbEFuaW1hdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6YmVnaW5L
ZXlib2FyZFNjcm9sbEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
cjo6aGFuZGxlS2V5VXBFdmVudFdoaWxlU2Nyb2xsaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9T
Y3JvbGxDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6
OmFuaW1hdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6
OnN0YXJ0T3JTdG9wQW5pbWF0aW9uQ2FsbGJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bENvbnRyb2xsZXI6OmJlZ2luS2V5Ym9hcmRTY3JvbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsQ29udHJvbGxlcjo6c3RvcEtleWJvYXJkU2Nyb2xsaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbENvbnRyb2xsZXI6OnNldElzQW5pbWF0aW5nU21vb3RoU2Nyb2xsaW5nKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxDb250cm9sbGVyQ2xpZW50Ojp1cGRhdGVLZXlib2FyZFNjcm9sbFBvc2l0aW9uKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvck1hYzo6c2Nyb2xsYWJsZURpcmVjdGlvbnNGcm9tT2Zmc2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OmJveFNpZGUpOgorICAgICAgICAoV2ViQ29yZTo6cGVycGVuZGljdWxhckFic29sdXRl
VW5pdFZlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6dXBkYXRl
S2V5Ym9hcmRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
ck1hYzo6YmVnaW5LZXlib2FyZFNjcm9sbEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpm
YXJ0aGVzdFBvaW50SW5EaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0
b3JNYWM6OnN0b3BBbmltYXRlZFNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvck1hYzo6aGFuZGxlS2V5VXBFdmVudFdoaWxlU2Nyb2xsaW5nKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvU2Nyb2xsQ29udHJvbGxlci5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENv
bnRyb2xsZXI6OnVwZGF0ZVNtb290aFNjcm9sbGluZ0FuaW1hdGluZ1N0YXRlKToKKwogMjAyMS0w
Ny0xNSAgVGltIE5ndXllbiAgPG50aW1AYXBwbGUuY29tPgogCiAgICAgICAgIDxkaWFsb2c+IGVs
ZW1lbnQ6IGRvIG5vdCBwZXJmb3JtIGNsb3NlKCkgbWV0aG9kIHN0ZXBzIHdoZW4gcmVtb3Zpbmcg
b3BlbiBhdHRyaWJ1dGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggZTI0NTc3ZGYzZDc2MTdiZTRiMjU2
MjcwOGFiNzZkOGZjNTgyNDVlZC4uZDU2YjJiOTRmYjhmM2JkYTA5ZTdkZjFkZWQ0NmQ5OGZkNDNk
YzQ1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtMjQzMiw3ICsyNDMyLDcgQEAgdm9pZCBOb2RlOjpk
ZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50JiBldmVudCkKICAgICBpZiAoZXZlbnQudGFyZ2V0KCkg
IT0gdGhpcykKICAgICAgICAgcmV0dXJuOwogICAgIGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlw
ZSA9IGV2ZW50LnR5cGUoKTsKLSAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5rZXlk
b3duRXZlbnQgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KSB7Cisg
ICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50IHx8IGV2ZW50VHlw
ZSA9PSBldmVudE5hbWVzKCkua2V5cHJlc3NFdmVudCB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1l
cygpLmtleXVwRXZlbnQpIHsKICAgICAgICAgaWYgKGlzPEtleWJvYXJkRXZlbnQ+KGV2ZW50KSkg
ewogICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCkuZnJhbWUoKSkKICAg
ICAgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCkuZGVmYXVsdEtleWJvYXJkRXZlbnRI
YW5kbGVyKGRvd25jYXN0PEtleWJvYXJkRXZlbnQ+KGV2ZW50KSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5jcHAKaW5kZXggMDVjZGE2NTgxOTI0YTI2Y2Y3MDVjOTgyOTVmZDQyOGU0MzY0
ZjczYi4uM2MwZWM2YWQ4ZGFkMTM1ZDVmY2YzMGI3YjZjOTkyNDY5MGIxN2VjYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtNjcsOCArNjcsNiBAQAogI2luY2x1ZGUgIklt
YWdlLmgiCiAjaW5jbHVkZSAiSW1hZ2VPdmVybGF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIklu
c3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgotI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKLSNp
bmNsdWRlICJLZXlib2FyZFNjcm9sbC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRl
ICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5o
IgpAQCAtOTIsNyArOTAsNyBAQAogI2luY2x1ZGUgIlJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5o
IgogI2luY2x1ZGUgIlNWR0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKLSNpbmNs
dWRlICJTY3JvbGxBbmltYXRvci5oIgorI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yTWFjLmgiCiAj
aW5jbHVkZSAiU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFy
LmgiCiAjaW5jbHVkZSAiU2VsZWN0aW9uUmVzdG9yYXRpb25Nb2RlLmgiCkBAIC0zODAzLDYgKzM4
MDEsMTAgQEAgdm9pZCBFdmVudEhhbmRsZXI6OmRlZmF1bHRLZXlib2FyZEV2ZW50SGFuZGxlcihL
ZXlib2FyZEV2ZW50JiBldmVudCkKICAgICAgICAgaWYgKGV2ZW50LmNoYXJDb2RlKCkgPT0gJyAn
KQogICAgICAgICAgICAgZGVmYXVsdFNwYWNlRXZlbnRIYW5kbGVyKGV2ZW50KTsKICAgICB9Cisg
ICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5dXBFdmVudCkgeworICAgICAg
ICBGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLnZpZXcoKTsKKyAgICAgICAgcmV0dXJuIHZpZXct
PnNjcm9sbEFuaW1hdG9yKCkuaGFuZGxlS2V5VXBFdmVudFdoaWxlU2Nyb2xsaW5nKCk7CisgICAg
fQogfQogCiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKQEAgLTQyMzcsNyArNDIzOSw3IEBAIGZs
b2F0IEV2ZW50SGFuZGxlcjo6c2Nyb2xsRGlzdGFuY2UoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlv
biwgU2Nyb2xsR3JhbnVsYXJpdHkKICAgICAgICAgICAgIHJldHVybiBtX2ZyYW1lLnZpZXcoKS0+
dmVydGljYWxTY3JvbGxiYXIoKTsKICAgICAgICAgcmV0dXJuIG1fZnJhbWUudmlldygpLT5ob3Jp
em9udGFsU2Nyb2xsYmFyKCk7CiAgICAgfSgpOwotICAgIAorCiAgICAgc3dpdGNoIChncmFudWxh
cml0eSkgewogICAgIGNhc2UgU2Nyb2xsR3JhbnVsYXJpdHk6OlNjcm9sbEJ5TGluZToKICAgICAg
ICAgcmV0dXJuIHNjcm9sbGJhci0+bGluZVN0ZXAoKTsKQEAgLTQzMDcsNyArNDMwOSwxOCBAQCBi
b29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlS2V5Ym9hcmRTY3JvbGxpbmcoS2V5Ym9hcmRFdmVudCYg
ZXZlbnQpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfSgpOwog
Ci0gICAgcmV0dXJuIEV2ZW50SGFuZGxlcjo6c2Nyb2xsUmVjdXJzaXZlbHkoZGlyZWN0aW9uLCBn
cmFudWxhcml0eSwgbnVsbHB0cik7CisgICAgZmxvYXQgZGlzdGFuY2UgPSBzY3JvbGxEaXN0YW5j
ZShkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKKworICAgIEtleWJvYXJkU2Nyb2xsKiBzY3JvbGwg
PSBuZXcgS2V5Ym9hcmRTY3JvbGw7CisKKyAgICBzY3JvbGwtPm9mZnNldCA9IHVuaXRWZWN0b3JG
b3JTY3JvbGxEaXJlY3Rpb24oZGlyZWN0aW9uKS5zY2FsZWQoZGlzdGFuY2UpOworICAgIHNjcm9s
bC0+Z3JhbnVsYXJpdHkgPSBncmFudWxhcml0eTsKKyAgICBzY3JvbGwtPmRpcmVjdGlvbiA9IGRp
cmVjdGlvbjsKKyAgICBzY3JvbGwtPm1heGltdW1WZWxvY2l0eSA9IHNjcm9sbC0+b2Zmc2V0LnNj
YWxlZChLZXlib2FyZFNjcm9sbFBhcmFtZXRlcnM6OnBhcmFtZXRlcnMoKS5tYXhpbXVtVmVsb2Np
dHlNdWx0aXBsaWVyKTsKKyAgICBzY3JvbGwtPmZvcmNlID0gc2Nyb2xsLT5tYXhpbXVtVmVsb2Np
dHkuc2NhbGVkKEtleWJvYXJkU2Nyb2xsUGFyYW1ldGVyczo6cGFyYW1ldGVycygpLnNwcmluZ01h
c3MgLyBLZXlib2FyZFNjcm9sbFBhcmFtZXRlcnM6OnBhcmFtZXRlcnMoKS50aW1lVG9NYXhpbXVt
VmVsb2NpdHkpOworCisgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS52aWV3KCk7CisgICAg
cmV0dXJuIGhhbmRsZWQgPSB2aWV3LT5zY3JvbGxBbmltYXRvcigpLmJlZ2luS2V5Ym9hcmRTY3Jv
bGxBbmltYXRpb24oc2Nyb2xsLCBldmVudCk7CiB9CiAKIHZvaWQgRXZlbnRIYW5kbGVyOjpkZWZh
dWx0QXJyb3dFdmVudEhhbmRsZXIoRm9jdXNEaXJlY3Rpb24gZm9jdXNEaXJlY3Rpb24sIEtleWJv
YXJkRXZlbnQmIGV2ZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsQW5pbWF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3Iu
Y3BwCmluZGV4IDVlODNmZGJhZTI3ZmI4OTg3ZjgwOWE4NTQ5NzU3YWMwNTg2MjM4MGMuLjc0NDY3
ZTkwMDA0MDEzM2Q3NDI0ZGY1ODE2YTUzODFiZDFlYzQyZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKQEAgLTMzMiw3ICszMzIsNyBAQCB2b2lkIFNjcm9s
bEFuaW1hdG9yOjpzdGFydEFuaW1hdGlvbkNhbGxiYWNrKFNjcm9sbENvbnRyb2xsZXImKQogewog
ICAgIGlmIChtX3Njcm9sbENvbnRyb2xsZXJBbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpKQogICAg
ICAgICByZXR1cm47Ci0gICAgICAgIAorCiAgICAgbV9zY3JvbGxDb250cm9sbGVyQW5pbWF0aW9u
VGltZXIuc3RhcnRSZXBlYXRpbmcoMV9zIC8gNjAuKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbEFuaW1hdG9yLmgKaW5kZXggZDkyY2ZkYmRmYmIwNWYxZmE5MTM0ZWM2NTg3NWFm
Y2I4Y2UxZDc4Yy4uZWNhM2YyODc2Yjc1NmI1ZGIxNTM1NWNiMDBmZDM1NWY3YmVmNTE1ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCkBAIC0zMiw2ICszMiw4IEBA
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJLZXli
b2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRTY3JvbGwuaCIKICNpbmNsdWRlICJQbGF0
Zm9ybVdoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJTY3JvbGxDb250cm9sbGVyLmgiCiAjaW5jbHVk
ZSAiU2Nyb2xsVHlwZXMuaCIKQEAgLTgxLDYgKzgzLDkgQEAgcHVibGljOgogCiAgICAgdmlydHVh
bCBib29sIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7CiAKKyAg
ICB2aXJ0dWFsIGJvb2wgYmVnaW5LZXlib2FyZFNjcm9sbEFuaW1hdGlvbihLZXlib2FyZFNjcm9s
bCosIEtleWJvYXJkRXZlbnQmKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBo
YW5kbGVLZXlVcEV2ZW50V2hpbGVTY3JvbGxpbmcoKSB7IH0KKwogI2lmIEVOQUJMRShUT1VDSF9F
VkVOVFMpCiAgICAgdmlydHVhbCBib29sIGhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1U
b3VjaEV2ZW50Jik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQ29u
dHJvbGxlci5jcHAKaW5kZXggZTkzNzViYTc0NzY4YmRiNDczYmQ4YmYxZmZhNDliODFjZjk5NDNh
OS4uOGZjNzQ4YjliMGM5NGU4ZDc2MDdkMTg4OTUxZTM3MGU4MTIxZjM5NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5jcHAKQEAgLTQzLDE1ICs0MywxNiBA
QCBTY3JvbGxDb250cm9sbGVyOjpTY3JvbGxDb250cm9sbGVyKFNjcm9sbENvbnRyb2xsZXJDbGll
bnQmIGNsaWVudCkKIAogdm9pZCBTY3JvbGxDb250cm9sbGVyOjphbmltYXRpb25DYWxsYmFjayhN
b25vdG9uaWNUaW1lIGN1cnJlbnRUaW1lKQogewotICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxp
bmcsIHN0cmVhbSA8PCAiU2Nyb2xsQ29udHJvbGxlciAiIDw8IHRoaXMgPDwgIiBhbmltYXRpb25D
YWxsYmFjazogaXNBbmltYXRpbmdSdWJiZXJCYW5kICIgPDwgbV9pc0FuaW1hdGluZ1J1YmJlckJh
bmQgPDwgIiBpc0FuaW1hdGluZ1Njcm9sbFNuYXAgIiA8PCBtX2lzQW5pbWF0aW5nU2Nyb2xsU25h
cCk7CisgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGluZywgc3RyZWFtIDw8ICJTY3JvbGxDb250
cm9sbGVyICIgPDwgdGhpcyA8PCAiIGFuaW1hdGlvbkNhbGxiYWNrOiBpc0FuaW1hdGluZ1J1YmJl
ckJhbmQgIiA8PCBtX2lzQW5pbWF0aW5nUnViYmVyQmFuZCA8PCAiIGlzQW5pbWF0aW5nU2Nyb2xs
U25hcCAiIDw8IG1faXNBbmltYXRpbmdTY3JvbGxTbmFwIDw8ICJpc0FuaW1hdGluZ1Ntb290aFNj
cm9sbGluZyIgPDwgbV9pc0FuaW1hdGluZ1Ntb290aFNjcm9sbGluZyk7CiAKICAgICB1cGRhdGVT
Y3JvbGxTbmFwQW5pbWF0aW5nU3RhdGUoY3VycmVudFRpbWUpOwogICAgIHVwZGF0ZVJ1YmJlckJh
bmRBbmltYXRpbmdTdGF0ZShjdXJyZW50VGltZSk7CisgICAgdXBkYXRlU21vb3RoU2Nyb2xsaW5n
QW5pbWF0aW5nU3RhdGUoY3VycmVudFRpbWUpOwogfQogCiB2b2lkIFNjcm9sbENvbnRyb2xsZXI6
OnN0YXJ0T3JTdG9wQW5pbWF0aW9uQ2FsbGJhY2tzKCkKIHsKLSAgICBib29sIG5lZWRzQ2FsbGJh
Y2tzID0gbV9pc0FuaW1hdGluZ1J1YmJlckJhbmQgfHwgbV9pc0FuaW1hdGluZ1Njcm9sbFNuYXA7
CisgICAgYm9vbCBuZWVkc0NhbGxiYWNrcyA9IG1faXNBbmltYXRpbmdSdWJiZXJCYW5kIHx8IG1f
aXNBbmltYXRpbmdTY3JvbGxTbmFwIHx8IG1faXNBbmltYXRpbmdTbW9vdGhTY3JvbGxpbmc7CiAg
ICAgaWYgKG5lZWRzQ2FsbGJhY2tzID09IG1faXNSdW5uaW5nQW5pbWF0aW5nQ2FsbGJhY2spCiAg
ICAgICAgIHJldHVybjsKIApAQCAtNjUsNiArNjYsMTYgQEAgdm9pZCBTY3JvbGxDb250cm9sbGVy
OjpzdGFydE9yU3RvcEFuaW1hdGlvbkNhbGxiYWNrcygpCiAgICAgbV9pc1J1bm5pbmdBbmltYXRp
bmdDYWxsYmFjayA9IGZhbHNlOwogfQogCit2b2lkIFNjcm9sbENvbnRyb2xsZXI6OmJlZ2luS2V5
Ym9hcmRTY3JvbGxpbmcoKQoreworICAgIHNldElzQW5pbWF0aW5nU21vb3RoU2Nyb2xsaW5nKHRy
dWUpOworfQorCit2b2lkIFNjcm9sbENvbnRyb2xsZXI6OnN0b3BLZXlib2FyZFNjcm9sbGluZygp
Cit7CisgICAgc2V0SXNBbmltYXRpbmdTbW9vdGhTY3JvbGxpbmcoZmFsc2UpOworfQorCiB2b2lk
IFNjcm9sbENvbnRyb2xsZXI6OnNldElzQW5pbWF0aW5nUnViYmVyQmFuZChib29sIGlzQW5pbWF0
aW5nUnViYmVyQmFuZCkKIHsKICAgICBpZiAoaXNBbmltYXRpbmdSdWJiZXJCYW5kID09IG1faXNB
bmltYXRpbmdSdWJiZXJCYW5kKQpAQCAtODMsNiArOTQsMTUgQEAgdm9pZCBTY3JvbGxDb250cm9s
bGVyOjpzZXRJc0FuaW1hdGluZ1Njcm9sbFNuYXAoYm9vbCBpc0FuaW1hdGluZ1Njcm9sbFNuYXAp
CiAgICAgc3RhcnRPclN0b3BBbmltYXRpb25DYWxsYmFja3MoKTsKIH0KIAordm9pZCBTY3JvbGxD
b250cm9sbGVyOjpzZXRJc0FuaW1hdGluZ1Ntb290aFNjcm9sbGluZyhib29sIGlzQW5pbWF0aW5n
U21vb3RoU2Nyb2xsaW5nKQoreworICAgIGlmIChpc0FuaW1hdGluZ1Ntb290aFNjcm9sbGluZyA9
PSBtX2lzQW5pbWF0aW5nU21vb3RoU2Nyb2xsaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X2lzQW5pbWF0aW5nU21vb3RoU2Nyb2xsaW5nID0gaXNBbmltYXRpbmdTbW9vdGhTY3JvbGxpbmc7
CisgICAgc3RhcnRPclN0b3BBbmltYXRpb25DYWxsYmFja3MoKTsKK30KKwogYm9vbCBTY3JvbGxD
b250cm9sbGVyOjp1c2VzU2Nyb2xsU25hcCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuICEhbV9zY3Jv
bGxTbmFwU3RhdGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxD
b250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmgK
aW5kZXggMmI0NzUxZWVhOGU0M2U1ZDVkNWIyOWY5MzM0MTE3ZWRmY2I3Y2Q4ZS4uODIyZWI5ZTc0
OGZhNzRkOTI3YzA1NzY0NDhiOGZlZWVmMTM0MzEwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbENvbnRyb2xsZXIuaApAQCAtNzIsNiArNzIsOCBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIHN0YXJ0QW5pbWF0aW9uQ2FsbGJhY2soU2Nyb2xsQ29udHJvbGxlciYpID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgc3RvcEFuaW1hdGlvbkNhbGxiYWNrKFNjcm9sbENvbnRyb2xsZXIm
KSA9IDA7CiAKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlS2V5Ym9hcmRTY3JvbGxQb3NpdGlvbihN
b25vdG9uaWNUaW1lKSB7IH0KKwogI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKICAgICB2aXJ0
dWFsIGJvb2wgYWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2
ZW50JikgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NWZXJ0aWNhbFN0cmV0Y2hp
bmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgY29uc3QgPSAwOwpAQCAtMTIxLDYgKzEyMyw5
IEBAIHB1YmxpYzoKICAgICBib29sIHVzZXNTY3JvbGxTbmFwKCkgY29uc3Q7CiAgICAgdm9pZCBz
dG9wQWxsVGltZXJzKCk7CiAgICAgdm9pZCBzY3JvbGxQb3NpdGlvbkNoYW5nZWQoKTsKKworICAg
IHZvaWQgYmVnaW5LZXlib2FyZFNjcm9sbGluZygpOworICAgIHZvaWQgc3RvcEtleWJvYXJkU2Ny
b2xsaW5nKCk7CiAgICAgCiAgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCBwZXJpb2RpY2FsbHkgYnkg
dGhlIGNsaWVudC4gU3RhcnRlZCBieSBzdGFydEFuaW1hdGlvbkNhbGxiYWNrKCksIHN0b3BwZWQg
Ynkgc3RvcEFuaW1hdGlvbkNhbGxiYWNrKCkuCiAgICAgdm9pZCBhbmltYXRpb25DYWxsYmFjayhN
b25vdG9uaWNUaW1lKTsKQEAgLTE2Myw5ICsxNjgsMTAgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQg
dXBkYXRlU2Nyb2xsU25hcEFuaW1hdGluZ1N0YXRlKE1vbm90b25pY1RpbWUpOwogICAgIHZvaWQg
dXBkYXRlUnViYmVyQmFuZEFuaW1hdGluZ1N0YXRlKE1vbm90b25pY1RpbWUpOwotICAgIAorICAg
IHZvaWQgdXBkYXRlU21vb3RoU2Nyb2xsaW5nQW5pbWF0aW5nU3RhdGUoTW9ub3RvbmljVGltZSk7
CiAgICAgdm9pZCBzZXRJc0FuaW1hdGluZ1J1YmJlckJhbmQoYm9vbCk7CiAgICAgdm9pZCBzZXRJ
c0FuaW1hdGluZ1Njcm9sbFNuYXAoYm9vbCk7CisgICAgdm9pZCBzZXRJc0FuaW1hdGluZ1Ntb290
aFNjcm9sbGluZyhib29sKTsKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICB2b2lkIHN0YXJ0U2Ny
b2xsU25hcEFuaW1hdGlvbigpOwpAQCAtMTk5LDYgKzIwNSw3IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBtX2lzUnVubmluZ0FuaW1hdGluZ0NhbGxiYWNrIHsgZmFsc2UgfTsKICAgICBib29sIG1faXNB
bmltYXRpbmdSdWJiZXJCYW5kIHsgZmFsc2UgfTsKICAgICBib29sIG1faXNBbmltYXRpbmdTY3Jv
bGxTbmFwIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNBbmltYXRpbmdTbW9vdGhTY3JvbGxpbmcg
eyBmYWxzZSB9OwogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIFdhbGxUaW1lIG1fbGFzdE1vbWVu
dHVtU2Nyb2xsVGltZXN0YW1wOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1Njcm9sbEFuaW1hdG9yTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Ny
b2xsQW5pbWF0b3JNYWMuaAppbmRleCA0YTVlM2YyZTJmOTZkNmU1NThjZmEzZmRiMWE3MjllY2Vj
YjViNDRjLi45MDBjZTg5M2ZlYzlmYjdhYmM5NDkwMmQ2NzcxMDJkY2FhNjhhMDRlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaApAQCAtMzEs
NiArMzEsOCBAQAogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJGbG9hdFBvaW50Lmgi
CiAjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVk
ZSAiUmVjdEVkZ2VzLmgiCiAjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIKICNpbmNsdWRlICJU
aW1lci5oIgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTYzLDYgKzY1LDEwIEBAIHB1
YmxpYzoKIAogICAgIGJvb2wgc2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCkgY29uc3QgZmluYWw7CiAK
KyAgICBib29sIGJlZ2luS2V5Ym9hcmRTY3JvbGxBbmltYXRpb24oS2V5Ym9hcmRTY3JvbGwqLCBL
ZXlib2FyZEV2ZW50Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBoYW5kbGVLZXlVcEV2ZW50V2hpbGVT
Y3JvbGxpbmcoKSBvdmVycmlkZTsKKyAgICB2b2lkIHN0b3BBbmltYXRlZFNjcm9sbCgpOworCiBw
cml2YXRlOgogICAgIFJldGFpblB0cjxpZD4gbV9zY3JvbGxBbmltYXRpb25IZWxwZXI7CiAgICAg
UmV0YWluUHRyPFdlYlNjcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlPiBtX3Njcm9sbEFuaW1h
dGlvbkhlbHBlckRlbGVnYXRlOwpAQCAtODMsNiArODksOSBAQCBwcml2YXRlOgogICAgIGJvb2wg
c2Nyb2xsVG9Qb3NpdGlvbldpdGhBbmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYpIG92ZXJyaWRl
OwogICAgIGJvb2wgc2Nyb2xsVG9Qb3NpdGlvbldpdGhvdXRBbmltYXRpb24oY29uc3QgRmxvYXRQ
b2ludCYgcG9zaXRpb24sIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQp
IG92ZXJyaWRlOwogCisgICAgdm9pZCB1cGRhdGVLZXlib2FyZFNjcm9sbFBvc2l0aW9uKE1vbm90
b25pY1RpbWUpIG92ZXJyaWRlOworICAgIFJlY3RFZGdlczxib29sPiBzY3JvbGxhYmxlRGlyZWN0
aW9uc0Zyb21PZmZzZXQoRmxvYXRQb2ludCk7CisKICNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcp
CiAgICAgYm9vbCBzaG91bGRGb3J3YXJkV2hlZWxFdmVudHNUb1BhcmVudChjb25zdCBQbGF0Zm9y
bVdoZWVsRXZlbnQmKSBjb25zdDsKICAgICBib29sIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxh
dGZvcm1XaGVlbEV2ZW50Jikgb3ZlcnJpZGU7CkBAIC0xNjAsNiArMTY5LDEzIEBAIHByaXZhdGU6
CiAgICAgYm9vbCBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQ7CiAgICAgYm9vbCBtX25lZWRz
U2Nyb2xsZXJTdHlsZVVwZGF0ZTsKICAgICBJbnRSZWN0IG1fdmlzaWJsZVNjcm9sbGVyVGh1bWJS
ZWN0OworCisgICAgS2V5Ym9hcmRTY3JvbGwgKm1fY3VycmVudFNjcm9sbDsKKyAgICBGbG9hdFNp
emUgbV92ZWxvY2l0eTsKKyAgICBGbG9hdFBvaW50IG1faWRlYWxQb3NpdGlvbjsKKyAgICBib29s
IG1fc2Nyb2xsVHJpZ2dlcmluZ0tleUlzUHJlc3NlZDsKKyAgICBNb25vdG9uaWNUaW1lIG1fdGlt
ZUF0TGFzdEZyYW1lOworICAgIEZsb2F0UG9pbnQgbV9pZGVhbFBvc2l0aW9uRm9yTWluaW11bVRy
YXZlbDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQppbmRleCAxN2E5MWI1M2Y5NTYzMWFl
MDE4YWMxYmFhNjExZjdkNjcyYmYyMmNiLi5kZTk4NmZkZTkyNDVhMDViNmI4ZWM3MzBmZjUyZTll
NThjZThhNWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xs
QW5pbWF0b3JNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFu
aW1hdG9yTWFjLm1tCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoU01PT1RIX1NDUk9M
TElORykKIAorI2ltcG9ydCAiRXZlbnROYW1lcy5oIgogI2ltcG9ydCAiR3JhZGllbnQuaCIKICNp
bXBvcnQgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKQEAgLTM5LDExICs0
MCwxODQgQEAKICNpbXBvcnQgIlNjcm9sbGJhclRoZW1lTWFjLmgiCiAjaW1wb3J0IDxwYWwvc3Bp
L21hYy9OU1Njcm9sbGVySW1wU1BJLmg+CiAjaW1wb3J0IDx3dGYvQmxvY2tPYmpDRXhjZXB0aW9u
cy5oPgorI2ltcG9ydCA8d3RmL01vbm90b25pY1RpbWUuaD4KICNpbXBvcnQgPHd0Zi9OYWtlZFB0
ci5oPgogI2ltcG9ydCA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKK1JlY3RFZGdlczxib29sPiBTY3JvbGxBbmltYXRvck1hYzo6c2Nyb2xsYWJsZURpcmVj
dGlvbnNGcm9tT2Zmc2V0KEZsb2F0UG9pbnQgb2Zmc2V0KQoreworICAgIGF1dG8gbWluaW11bVNj
cm9sbFBvc2l0aW9uID0gbV9zY3JvbGxhYmxlQXJlYS5taW5pbXVtU2Nyb2xsUG9zaXRpb24oKTsK
KyAgICBhdXRvIG1heGltdW1TY3JvbGxQb3NpdGlvbiA9IG1fc2Nyb2xsYWJsZUFyZWEubWF4aW11
bVNjcm9sbFBvc2l0aW9uKCk7CisKKyAgICBSZWN0RWRnZXM8Ym9vbD4gZWRnZXM7CisKKyAgICBl
ZGdlcy5zZXRUb3Aob2Zmc2V0LnkoKSA+IG1pbmltdW1TY3JvbGxQb3NpdGlvbi55KCkpOworICAg
IGVkZ2VzLnNldEJvdHRvbShvZmZzZXQueSgpIDwgbWF4aW11bVNjcm9sbFBvc2l0aW9uLnkoKSk7
CisgICAgZWRnZXMuc2V0TGVmdChvZmZzZXQueCgpID4gbWluaW11bVNjcm9sbFBvc2l0aW9uLngo
KSk7CisgICAgZWRnZXMuc2V0UmlnaHQob2Zmc2V0LngoKSA8IG1heGltdW1TY3JvbGxQb3NpdGlv
bi54KCkpOworCisgICAgcmV0dXJuIGVkZ2VzOworfQorCitzdGF0aWMgQm94U2lkZSBib3hTaWRl
KFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsK
KyAgICBjYXNlIFNjcm9sbERpcmVjdGlvbjo6U2Nyb2xsVXA6CisgICAgICAgIHJldHVybiBCb3hT
aWRlOjpUb3A7CisgICAgY2FzZSBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbERvd246CisgICAgICAg
IHJldHVybiBCb3hTaWRlOjpCb3R0b207CisgICAgY2FzZSBTY3JvbGxEaXJlY3Rpb246OlNjcm9s
bExlZnQ6CisgICAgICAgIHJldHVybiBCb3hTaWRlOjpMZWZ0OworICAgIGNhc2UgU2Nyb2xsRGly
ZWN0aW9uOjpTY3JvbGxSaWdodDoKKyAgICAgICAgcmV0dXJuIEJveFNpZGU6OlJpZ2h0OworICAg
IH0KK30KKworc3RhdGljIEZsb2F0U2l6ZSBwZXJwZW5kaWN1bGFyQWJzb2x1dGVVbml0VmVjdG9y
KFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsK
KyAgICBjYXNlIFNjcm9sbERpcmVjdGlvbjo6U2Nyb2xsVXA6CisgICAgY2FzZSBTY3JvbGxEaXJl
Y3Rpb246OlNjcm9sbERvd246CisgICAgICAgIHJldHVybiB7MSwgMH07CisgICAgY2FzZSBTY3Jv
bGxEaXJlY3Rpb246OlNjcm9sbExlZnQ6CisgICAgY2FzZSBTY3JvbGxEaXJlY3Rpb246OlNjcm9s
bFJpZ2h0OgorICAgICAgICByZXR1cm4gezAsIDF9OworICAgIH0KK30KKwordm9pZCBTY3JvbGxB
bmltYXRvck1hYzo6dXBkYXRlS2V5Ym9hcmRTY3JvbGxQb3NpdGlvbihNb25vdG9uaWNUaW1lIGN1
cnJlbnRUaW1lKQoreworICAgIEZsb2F0U2l6ZSBmb3JjZSA9IHsgMCwgMCB9OworICAgIEZsb2F0
U2l6ZSBheGVzVG9BcHBseVNwcmluZyA9IHsxLCAxfTsKKyAgICBLZXlib2FyZFNjcm9sbFBhcmFt
ZXRlcnMgcGFyYW1zID0gS2V5Ym9hcmRTY3JvbGxQYXJhbWV0ZXJzOjpwYXJhbWV0ZXJzKCk7CisK
KyAgICBpZiAobV9jdXJyZW50U2Nyb2xsKSB7CisgICAgICAgIGF1dG8gc2Nyb2xsYWJsZURpcmVj
dGlvbnMgPSBzY3JvbGxhYmxlRGlyZWN0aW9uc0Zyb21PZmZzZXQoY3VycmVudFBvc2l0aW9uKCkp
OworICAgICAgICBTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uID0gbV9jdXJyZW50U2Nyb2xsLT5k
aXJlY3Rpb247CisKKyAgICAgICAgaWYgKHNjcm9sbGFibGVEaXJlY3Rpb25zLmF0KGJveFNpZGUo
ZGlyZWN0aW9uKSkpIHsKKworICAgICAgICAgICAgLy8gQXBwbHkgdGhlIHNjcm9sbGluZyBmb3Jj
ZS4gT25seSBhcHBseSB0aGUgc3ByaW5nIGluIHRoZSBwZXJwZW5kaWN1bGFyIGF4aXMsCisgICAg
ICAgICAgICAvLyBvdGhlcndpc2UgaXQgZHJhZ3MgYWdhaW5zdCB0aGUgZGlyZWN0aW9uIG9mIG1v
dGlvbi4KKyAgICAgICAgICAgIGF4ZXNUb0FwcGx5U3ByaW5nID0gcGVycGVuZGljdWxhckFic29s
dXRlVW5pdFZlY3RvcihkaXJlY3Rpb24pOworICAgICAgICAgICAgZm9yY2UgPSBtX2N1cnJlbnRT
Y3JvbGwtPmZvcmNlOworICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAvLyBUaGUgc2Ny
b2xsIHZpZXcgY2Fubm90IHNjcm9sbCBpbiB0aGlzIGRpcmVjdGlvbiwgYW5kIGlzIHJ1YmJlci1i
YW5kaW5nLgorICAgICAgICAgICAgLy8gQXBwbHkgYSBjb25zdGFudCBhbmQgc2lnbmlmaWNhbnQg
Zm9yY2U7IG90aGVyd2lzZSwgdGhlIGZvcmNlIGZvciBhCisgICAgICAgICAgICAvLyBzaW5nbGUt
bGluZSBpbmNyZW1lbnQgaXMgbm90IHN0cm9uZyBlbm91Z2ggdG8gcnViYmVyLWJhbmQgcGVyY2Vw
dGlibHkuCisgICAgICAgICAgICBmb3JjZSA9IHVuaXRWZWN0b3JGb3JTY3JvbGxEaXJlY3Rpb24o
ZGlyZWN0aW9uKS5zY2FsZWQocGFyYW1zLnJ1YmJlckJhbmRGb3JjZSk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoZmFicyhtX3ZlbG9jaXR5LndpZHRoKCkpID49IGZhYnMobV9jdXJyZW50U2Ny
b2xsLT5tYXhpbXVtVmVsb2NpdHkud2lkdGgoKSkpCisgICAgICAgICAgICBmb3JjZS5zZXRXaWR0
aCgwKTsKKworICAgICAgICBpZiAoZmFicyhtX3ZlbG9jaXR5LmhlaWdodCgpKSA+PSBmYWJzKG1f
Y3VycmVudFNjcm9sbC0+bWF4aW11bVZlbG9jaXR5LmhlaWdodCgpKSkKKyAgICAgICAgICAgIGZv
cmNlLnNldEhlaWdodCgwKTsKKyAgICB9CisKKyAgICBTY3JvbGxQb3NpdGlvbiBpZGVhbFBvc2l0
aW9uID0gbV9zY3JvbGxhYmxlQXJlYS5jb25zdHJhaW5TY3JvbGxQb3NpdGlvbihtX2N1cnJlbnRT
Y3JvbGwgPyBJbnRQb2ludChjdXJyZW50UG9zaXRpb24oKS54KCksIGN1cnJlbnRQb3NpdGlvbigp
LnkoKSkgOiAgSW50UG9pbnQobV9pZGVhbFBvc2l0aW9uLngoKSwgbV9pZGVhbFBvc2l0aW9uLnko
KSkpOworICAgIEZsb2F0U2l6ZSBkaXNwbGFjZW1lbnQgPSBjdXJyZW50UG9zaXRpb24oKSAtIGlk
ZWFsUG9zaXRpb247CisKKyAgICBhdXRvIHNwcmluZ0ZvcmNlID0gLSBkaXNwbGFjZW1lbnQuc2Nh
bGVkKHBhcmFtcy5zcHJpbmdTdGlmZm5lc3MpIC0gbV92ZWxvY2l0eS5zY2FsZWQocGFyYW1zLnNw
cmluZ0RhbXBpbmcpOworICAgIGZvcmNlICs9IHNwcmluZ0ZvcmNlICogYXhlc1RvQXBwbHlTcHJp
bmc7CisKKyAgICBmbG9hdCBmcmFtZUR1cmF0aW9uID0gKGN1cnJlbnRUaW1lIC0gbV90aW1lQXRM
YXN0RnJhbWUpLnZhbHVlKCk7CisgICAgbV90aW1lQXRMYXN0RnJhbWUgPSBjdXJyZW50VGltZTsK
KworICAgIEZsb2F0U2l6ZSBhY2NlbGVyYXRpb24gPSBmb3JjZS5zY2FsZWQoMS4gLyBwYXJhbXMu
c3ByaW5nTWFzcyk7CisgICAgbV92ZWxvY2l0eSArPSBhY2NlbGVyYXRpb24uc2NhbGVkKGZyYW1l
RHVyYXRpb24pOworICAgIEZsb2F0UG9pbnQgbmV3UG9zaXRpb24gPSBjdXJyZW50UG9zaXRpb24o
KSArIG1fdmVsb2NpdHkuc2NhbGVkKGZyYW1lRHVyYXRpb24pOworCisgICAgc2Nyb2xsVG9Qb3Np
dGlvbldpdGhvdXRBbmltYXRpb24obmV3UG9zaXRpb24pOworCisgICAgaWYgKCFtX3Njcm9sbFRy
aWdnZXJpbmdLZXlJc1ByZXNzZWQgJiYgbV92ZWxvY2l0eS5kaWFnb25hbExlbmd0aFNxdWFyZWQo
KSA8IDEpIHsKKyAgICAgICAgbV9zY3JvbGxDb250cm9sbGVyLnN0b3BLZXlib2FyZFNjcm9sbGlu
ZygpOworICAgICAgICBtX3ZlbG9jaXR5ID0geyB9OworICAgIH0KK30KKworYm9vbCBTY3JvbGxB
bmltYXRvck1hYzo6YmVnaW5LZXlib2FyZFNjcm9sbEFuaW1hdGlvbihLZXlib2FyZFNjcm9sbCog
c2Nyb2xsLCBLZXlib2FyZEV2ZW50JiBldmVudCkKK3sKKyAgICBpZiAoIXNjcm9sbCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9jdXJyZW50U2Nyb2xsID0gc2Nyb2xsOworCisgICAg
aWYgKGV2ZW50LnR5cGUoKSAhPSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50KQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9zY3JvbGxUcmlnZ2VyaW5nS2V5SXNQcmVzc2VkKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9jdXJyZW50U2Nyb2xsLT5ncmFudWxh
cml0eSA9PSBTY3JvbGxHcmFudWxhcml0eTo6U2Nyb2xsQnlEb2N1bWVudCkgeworICAgICAgICBt
X3ZlbG9jaXR5ID0geyB9OworICAgICAgICBzdG9wQW5pbWF0ZWRTY3JvbGwoKTsKKyAgICAgICAg
SW50UG9pbnQgbmV3UG9zaXRpb24gPSBJbnRQb2ludCgoY3VycmVudFBvc2l0aW9uKCkgKyBtX2N1
cnJlbnRTY3JvbGwtPm9mZnNldCkueCgpLCAoY3VycmVudFBvc2l0aW9uKCkgKyBtX2N1cnJlbnRT
Y3JvbGwtPm9mZnNldCkueSgpKTsKKyAgICAgICAgc2Nyb2xsVG9Qb3NpdGlvbldpdGhBbmltYXRp
b24obmV3UG9zaXRpb24pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBtX3Rp
bWVBdExhc3RGcmFtZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOworICAgIG1fc2Nyb2xsVHJpZ2dl
cmluZ0tleUlzUHJlc3NlZCA9IHRydWU7CisgICAgbV9pZGVhbFBvc2l0aW9uRm9yTWluaW11bVRy
YXZlbCA9IGN1cnJlbnRQb3NpdGlvbigpICsgbV9jdXJyZW50U2Nyb2xsLT5vZmZzZXQ7CisKKyAg
ICBtX3Njcm9sbENvbnRyb2xsZXIuYmVnaW5LZXlib2FyZFNjcm9sbGluZygpOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3N0YXRpYyBTY3JvbGxQb3NpdGlvbiBmYXJ0aGVzdFBvaW50SW5EaXJl
Y3Rpb24oRmxvYXRQb2ludCBhLCBGbG9hdFBvaW50IGIsIFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rp
b24pCit7CisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBjYXNlIFNjcm9sbERpcmVjdGlv
bjo6U2Nyb2xsVXA6CisgICAgICAgIHJldHVybiBTY3JvbGxQb3NpdGlvbihhLngoKSwgc3RkOjpt
aW4oYS55KCksIGIueSgpKSk7CisgICAgY2FzZSBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbERvd246
CisgICAgICAgIHJldHVybiBTY3JvbGxQb3NpdGlvbihhLngoKSwgc3RkOjptYXgoYS55KCksIGIu
eSgpKSk7CisgICAgY2FzZSBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbExlZnQ6CisgICAgICAgIHJl
dHVybiBTY3JvbGxQb3NpdGlvbihzdGQ6Om1pbihhLngoKSwgYi54KCkpLCBhLnkoKSk7CisgICAg
Y2FzZSBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbFJpZ2h0OgorICAgICAgICByZXR1cm4gU2Nyb2xs
UG9zaXRpb24oc3RkOjptYXgoYS54KCksIGIueCgpKSwgYS55KCkpOworICAgIH0KK30KKwordm9p
ZCBTY3JvbGxBbmltYXRvck1hYzo6c3RvcEFuaW1hdGVkU2Nyb2xsKCkKK3sKKyAgICBpZiAoIW1f
Y3VycmVudFNjcm9sbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgS2V5Ym9hcmRTY3JvbGxQYXJh
bWV0ZXJzIHBhcmFtcyA9IEtleWJvYXJkU2Nyb2xsUGFyYW1ldGVyczo6cGFyYW1ldGVycygpOwor
CisgICAgLy8gRGV0ZXJtaW5lIHRoZSBzZXR0bGluZyBwb3NpdGlvbiBvZiB0aGUgc3ByaW5nLCBj
b25zZXJ2aW5nIHRoZSBzeXN0ZW0ncyBjdXJyZW50IGVuZXJneS4KKyAgICAvLyBLaW5ldGljID0g
ZWxhc3RpYyBwb3RlbnRpYWwKKyAgICAvLyAxLzIgKiBtICogdl4yID0gMS8yICogayAqIHheMgor
ICAgIC8vIHggPSBzcXJ0KHZeMiAqIG0gLyBrKQorICAgIGF1dG8gZGlzcGxhY2VtZW50TWFnbml0
dWRlU3F1YXJlZCA9IChtX3ZlbG9jaXR5ICogbV92ZWxvY2l0eSkuc2NhbGVkKHBhcmFtcy5zcHJp
bmdNYXNzIC8gcGFyYW1zLnNwcmluZ1N0aWZmbmVzcyk7CisgICAgRmxvYXRTaXplIGRpc3BsYWNl
bWVudCA9IHsKKyAgICAgICAgc3RkOjpjb3B5c2lnbihzcXJ0KGRpc3BsYWNlbWVudE1hZ25pdHVk
ZVNxdWFyZWQud2lkdGgoKSksIG1fdmVsb2NpdHkud2lkdGgoKSksCisgICAgICAgIHN0ZDo6Y29w
eXNpZ24oc3FydChkaXNwbGFjZW1lbnRNYWduaXR1ZGVTcXVhcmVkLmhlaWdodCgpKSwgbV92ZWxv
Y2l0eS5oZWlnaHQoKSkKKyAgICB9OworCisgICAgLy8gSWYgdGhlIHNwcmluZyB3b3VsZCBzZXR0
bGUgYmVmb3JlIHRoZSBtaW5pbXVtIHRyYXZlbCBkaXN0YW5jZQorICAgIC8vIGZvciBhbiBpbnN0
YW50YW5lb3VzIHRhcCwgbW92ZSB0aGUgc2V0dGxpbmcgcG9zaXRpb24gb2YgdGhlIHNwcmluZwor
ICAgIC8vIG91dCB0byB0aGF0IHBvaW50LgorICAgIFNjcm9sbFBvc2l0aW9uIGZhcnRoZXN0UG9p
bnQgPSBmYXJ0aGVzdFBvaW50SW5EaXJlY3Rpb24oY3VycmVudFBvc2l0aW9uKCkgKyBkaXNwbGFj
ZW1lbnQsIG1faWRlYWxQb3NpdGlvbkZvck1pbmltdW1UcmF2ZWwsIG1fY3VycmVudFNjcm9sbC0+
ZGlyZWN0aW9uKTsKKyAgICBtX2lkZWFsUG9zaXRpb24gPSBtX3Njcm9sbGFibGVBcmVhLmNvbnN0
cmFpblNjcm9sbFBvc2l0aW9uKGZhcnRoZXN0UG9pbnQpOworCisgICAgbV9jdXJyZW50U2Nyb2xs
ID0gbnVsbHB0cjsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvck1hYzo6aGFuZGxlS2V5VXBFdmVu
dFdoaWxlU2Nyb2xsaW5nKCkKK3sKKyAgICBpZiAoIW1fc2Nyb2xsVHJpZ2dlcmluZ0tleUlzUHJl
c3NlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RvcEFuaW1hdGVkU2Nyb2xsKCk7CisgICAg
bV9zY3JvbGxUcmlnZ2VyaW5nS2V5SXNQcmVzc2VkID0gZmFsc2U7Cit9CisKIHN0YXRpYyBTY3Jv
bGxiYXJUaGVtZU1hYyogbWFjU2Nyb2xsYmFyVGhlbWUoKQogewogICAgIFNjcm9sbGJhclRoZW1l
JiBzY3JvbGxiYXJUaGVtZSA9IFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpOwpAQCAtNzI0LDYgKzg5
OCw4IEBAIFNjcm9sbEFuaW1hdG9yTWFjOjp+U2Nyb2xsQW5pbWF0b3JNYWMoKQogICAgIFttX3Zl
cnRpY2FsU2Nyb2xsZXJJbXBEZWxlZ2F0ZSBpbnZhbGlkYXRlXTsKICAgICBbbV9zY3JvbGxBbmlt
YXRpb25IZWxwZXJEZWxlZ2F0ZSBpbnZhbGlkYXRlXTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENF
UFRJT05TCisKKyAgICBkZWxldGUgbV9jdXJyZW50U2Nyb2xsOwogfQogCiBzdGF0aWMgYm9vbCBz
Y3JvbGxBbmltYXRpb25FbmFibGVkRm9yU3lzdGVtKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9TY3JvbGxDb250cm9sbGVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1Njcm9sbENvbnRyb2xsZXIubW0KaW5kZXggY2FjOWIyYjE0OWMzOWVjMGNlZjAw
NTFiZDIxN2FmZDg0NmQ2Mzg5YS4uZGZlZmQwOGI3OGI5MTQ5Y2I3MWZlZDI0MzgxOGEwOTc2YmM3
M2E1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbENvbnRy
b2xsZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbENvbnRyb2xs
ZXIubW0KQEAgLTM2Miw2ICszNjIsMTQgQEAgc3RkOjpvcHRpb25hbDxTY3JvbGxEaXJlY3Rpb24+
IFNjcm9sbENvbnRyb2xsZXI6OmRpcmVjdGlvbkZyb21FdmVudChjb25zdCBQbGF0Zm8KICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwogfQogCit2b2lkIFNjcm9sbENvbnRyb2xsZXI6OnVwZGF0ZVNt
b290aFNjcm9sbGluZ0FuaW1hdGluZ1N0YXRlKE1vbm90b25pY1RpbWUgY3VycmVudFRpbWUpCit7
CisgICAgaWYgKCFtX2lzQW5pbWF0aW5nU21vb3RoU2Nyb2xsaW5nKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX2NsaWVudC51cGRhdGVLZXlib2FyZFNjcm9sbFBvc2l0aW9uKGN1cnJlbnRUaW1l
KTsKK30KKwogI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKIHN0YXRpYyBpbmxpbmUgZmxvYXQg
cm91bmRUb3dhcmRaZXJvKGZsb2F0IG51bSkKIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>433938</attachid>
            <date>2021-07-21 09:21:10 -0700</date>
            <delta_ts>2021-07-21 16:26:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228009-20210721122109.patch</filename>
            <type>text/plain</type>
            <size>19455</size>
            <attacher name="Dana Estra">dana.estra</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5OTU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTg2OTY2YzRlMjRjN2M1
MDIwZWJmNTMyZWUyZjRhODgzNDBjYjgyYi4uOTU5NmQ5NzhkYWJlYTlkN2Y0OGI3ZGI1ZTQyMDVm
ZGQ0YzE4MjYwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDIxLTA3LTIxICBEYW5h
IEVzdHJhICA8ZGVzdHJhQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQga2V5LWRyaXZlbiBzbW9v
dGggc2Nyb2xsaW5nIHRvIG1hY09TCisgICAgICAgICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyODAwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgQ2F1c2Uga2V5Ym9hcmQgc2Nyb2xsIGV2ZW50
IHRvIHRyaWdnZXIgc3RhcnQgb2Ygc21vb3RoIHNjcm9sbCBhbmltYXRpb24sIHVzaW5nIHNhbWUg
cGh5c2ljcyBpbXBsZW1lbnRhdGlvbiBhcyBpT1Mgc21vb3RoIHNjcm9sbGluZy4KKworICAgICAg
ICBObyB0ZXN0cyB5ZXQuCisKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpOb2RlOjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFu
ZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmRlZmF1bHRLZXlib2Fy
ZEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNjcm9sbERp
c3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlS2V5Ym9hcmRT
Y3JvbGxpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpzY3JvbGxhYmxlRGlyZWN0aW9uc0Zyb21PZmZz
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6Ym94U2lkZSk6CisgICAgICAgIChXZWJDb3JlOjpwZXJw
ZW5kaWN1bGFyQWJzb2x1dGVVbml0VmVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yOjp1cGRhdGVLZXlib2FyZFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbEFuaW1hdG9yOjpiZWdpbktleWJvYXJkU2Nyb2xsQW5pbWF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OmZhcnRoZXN0UG9pbnRJbkRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxBbmltYXRvcjo6c3RvcEtleWJvYXJkU2Nyb2xsQW5pbWF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpoYW5kbGVLZXlVcEV2ZW50V2hpbGVTY3JvbGxpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnN0YXJ0QW5pbWF0aW9uQ2FsbGJhY2sp
OgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmg6CisgICAgICAgICogcGxhdGZv
cm0vU2Nyb2xsQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9s
bGVyOjphbmltYXRpb25DYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9s
bGVyOjpzdGFydE9yU3RvcEFuaW1hdGlvbkNhbGxiYWNrcyk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxDb250cm9sbGVyOjpiZWdpbktleWJvYXJkU2Nyb2xsaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbENvbnRyb2xsZXI6OnN0b3BLZXlib2FyZFNjcm9sbGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjpzZXRJc0FuaW1hdGluZ0tleWJvYXJkU2Nyb2xsaW5n
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmg6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxDb250cm9sbGVyQ2xpZW50Ojp1cGRhdGVLZXlib2FyZFNjcm9sbFBvc2l0aW9u
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xsQ29udHJvbGxlci5tbToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OnVwZGF0ZUtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0
aW5nU3RhdGUpOgorCiAyMDIxLTA3LTE1ICBUaW0gTmd1eWVuICA8bnRpbUBhcHBsZS5jb20+CiAK
ICAgICAgICAgPGRpYWxvZz4gZWxlbWVudDogZG8gbm90IHBlcmZvcm0gY2xvc2UoKSBtZXRob2Qg
c3RlcHMgd2hlbiByZW1vdmluZyBvcGVuIGF0dHJpYnV0ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCBl
MjQ1NzdkZjNkNzYxN2JlNGIyNTYyNzA4YWI3NmQ4ZmM1ODI0NWVkLi5kNTZiMmI5NGZiOGYzYmRh
MDllN2RmMWRlZDQ2ZDk4ZmQ0M2RjNDU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC0yNDMyLDcgKzI0
MzIsNyBAQCB2b2lkIE5vZGU6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmIGV2ZW50KQogICAg
IGlmIChldmVudC50YXJnZXQoKSAhPSB0aGlzKQogICAgICAgICByZXR1cm47CiAgICAgY29uc3Qg
QXRvbVN0cmluZyYgZXZlbnRUeXBlID0gZXZlbnQudHlwZSgpOwotICAgIGlmIChldmVudFR5cGUg
PT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygp
LmtleXByZXNzRXZlbnQpIHsKKyAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5rZXlk
b3duRXZlbnQgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50IHx8IGV2
ZW50VHlwZSA9PSBldmVudE5hbWVzKCkua2V5dXBFdmVudCkgewogICAgICAgICBpZiAoaXM8S2V5
Ym9hcmRFdmVudD4oZXZlbnQpKSB7CiAgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9j
dW1lbnQoKS5mcmFtZSgpKQogICAgICAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS5k
ZWZhdWx0S2V5Ym9hcmRFdmVudEhhbmRsZXIoZG93bmNhc3Q8S2V5Ym9hcmRFdmVudD4oZXZlbnQp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCAwNWNkYTY1ODE5MjRhMjZj
ZjcwNWM5ODI5NWZkNDI4ZTQzNjRmNzNiLi40OGNhODc1MzNhOTk3Y2Q5MjNjMGMyYmQzODVkZDc3
YWQ3MGZlYTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC02Nyw4ICs2
Nyw2IEBACiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJbWFnZU92ZXJsYXlDb250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCi0jaW5jbHVkZSAi
S2V5Ym9hcmRFdmVudC5oIgotI2luY2x1ZGUgIktleWJvYXJkU2Nyb2xsLmgiCiAjaW5jbHVkZSAi
TG9nZ2luZy5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50
V2l0aEhpdFRlc3RSZXN1bHRzLmgiCkBAIC0zODAzLDYgKzM4MDEsMTAgQEAgdm9pZCBFdmVudEhh
bmRsZXI6OmRlZmF1bHRLZXlib2FyZEV2ZW50SGFuZGxlcihLZXlib2FyZEV2ZW50JiBldmVudCkK
ICAgICAgICAgaWYgKGV2ZW50LmNoYXJDb2RlKCkgPT0gJyAnKQogICAgICAgICAgICAgZGVmYXVs
dFNwYWNlRXZlbnRIYW5kbGVyKGV2ZW50KTsKICAgICB9CisgICAgaWYgKGV2ZW50LnR5cGUoKSA9
PSBldmVudE5hbWVzKCkua2V5dXBFdmVudCkgeworICAgICAgICBGcmFtZVZpZXcqIHZpZXcgPSBt
X2ZyYW1lLnZpZXcoKTsKKyAgICAgICAgcmV0dXJuIHZpZXctPnNjcm9sbEFuaW1hdG9yKCkuaGFu
ZGxlS2V5VXBFdmVudFdoaWxlU2Nyb2xsaW5nKCk7CisgICAgfQogfQogCiAjaWYgRU5BQkxFKERS
QUdfU1VQUE9SVCkKQEAgLTQyMzcsNyArNDIzOSw3IEBAIGZsb2F0IEV2ZW50SGFuZGxlcjo6c2Ny
b2xsRGlzdGFuY2UoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkK
ICAgICAgICAgICAgIHJldHVybiBtX2ZyYW1lLnZpZXcoKS0+dmVydGljYWxTY3JvbGxiYXIoKTsK
ICAgICAgICAgcmV0dXJuIG1fZnJhbWUudmlldygpLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CiAg
ICAgfSgpOwotICAgIAorCiAgICAgc3dpdGNoIChncmFudWxhcml0eSkgewogICAgIGNhc2UgU2Ny
b2xsR3JhbnVsYXJpdHk6OlNjcm9sbEJ5TGluZToKICAgICAgICAgcmV0dXJuIHNjcm9sbGJhci0+
bGluZVN0ZXAoKTsKQEAgLTQzMDcsNyArNDMwOSwxOCBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFu
ZGxlS2V5Ym9hcmRTY3JvbGxpbmcoS2V5Ym9hcmRFdmVudCYgZXZlbnQpCiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfSgpOwogCi0gICAgcmV0dXJuIEV2ZW50SGFu
ZGxlcjo6c2Nyb2xsUmVjdXJzaXZlbHkoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbnVsbHB0cik7
CisgICAgZmxvYXQgZGlzdGFuY2UgPSBzY3JvbGxEaXN0YW5jZShkaXJlY3Rpb24sIGdyYW51bGFy
aXR5KTsKKworICAgIEtleWJvYXJkU2Nyb2xsIHNjcm9sbDsKKworICAgIHNjcm9sbC5vZmZzZXQg
PSB1bml0VmVjdG9yRm9yU2Nyb2xsRGlyZWN0aW9uKGRpcmVjdGlvbikuc2NhbGVkKGRpc3RhbmNl
KTsKKyAgICBzY3JvbGwuZ3JhbnVsYXJpdHkgPSBncmFudWxhcml0eTsKKyAgICBzY3JvbGwuZGly
ZWN0aW9uID0gZGlyZWN0aW9uOworICAgIHNjcm9sbC5tYXhpbXVtVmVsb2NpdHkgPSBzY3JvbGwu
b2Zmc2V0LnNjYWxlZChLZXlib2FyZFNjcm9sbFBhcmFtZXRlcnM6OnBhcmFtZXRlcnMoKS5tYXhp
bXVtVmVsb2NpdHlNdWx0aXBsaWVyKTsKKyAgICBzY3JvbGwuZm9yY2UgPSBzY3JvbGwubWF4aW11
bVZlbG9jaXR5LnNjYWxlZChLZXlib2FyZFNjcm9sbFBhcmFtZXRlcnM6OnBhcmFtZXRlcnMoKS5z
cHJpbmdNYXNzIC8gS2V5Ym9hcmRTY3JvbGxQYXJhbWV0ZXJzOjpwYXJhbWV0ZXJzKCkudGltZVRv
TWF4aW11bVZlbG9jaXR5KTsKKworICAgIEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUudmlldygp
OworICAgIHJldHVybiB2aWV3LT5zY3JvbGxBbmltYXRvcigpLmJlZ2luS2V5Ym9hcmRTY3JvbGxB
bmltYXRpb24oc2Nyb2xsLCBldmVudCk7CiB9CiAKIHZvaWQgRXZlbnRIYW5kbGVyOjpkZWZhdWx0
QXJyb3dFdmVudEhhbmRsZXIoRm9jdXNEaXJlY3Rpb24gZm9jdXNEaXJlY3Rpb24sIEtleWJvYXJk
RXZlbnQmIGV2ZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
QW5pbWF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3Bw
CmluZGV4IDVlODNmZGJhZTI3ZmI4OTg3ZjgwOWE4NTQ5NzU3YWMwNTg2MjM4MGMuLmUzNThlY2I4
YTJmYWEzOTQxOWY4MmUwN2NlYzI3YjlkZmRhNjc1MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgogCisjaW1wb3J0ICJFdmVudE5hbWVz
LmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkxheW91dFNpemUuaCIKICNp
bmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKQEAgLTI1Myw2ICsyNTQsMTc4IEBAIGJvb2wg
U2Nyb2xsQW5pbWF0b3I6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50
JiBlKQogICAgIHJldHVybiBoYW5kbGVkOwogfQogCitSZWN0RWRnZXM8Ym9vbD4gU2Nyb2xsQW5p
bWF0b3I6OnNjcm9sbGFibGVEaXJlY3Rpb25zRnJvbU9mZnNldChGbG9hdFBvaW50IG9mZnNldCkK
K3sKKyAgICBhdXRvIG1pbmltdW1TY3JvbGxQb3NpdGlvbiA9IG1fc2Nyb2xsYWJsZUFyZWEubWlu
aW11bVNjcm9sbFBvc2l0aW9uKCk7CisgICAgYXV0byBtYXhpbXVtU2Nyb2xsUG9zaXRpb24gPSBt
X3Njcm9sbGFibGVBcmVhLm1heGltdW1TY3JvbGxQb3NpdGlvbigpOworCisgICAgUmVjdEVkZ2Vz
PGJvb2w+IGVkZ2VzOworCisgICAgZWRnZXMuc2V0VG9wKG9mZnNldC55KCkgPiBtaW5pbXVtU2Ny
b2xsUG9zaXRpb24ueSgpKTsKKyAgICBlZGdlcy5zZXRCb3R0b20ob2Zmc2V0LnkoKSA8IG1heGlt
dW1TY3JvbGxQb3NpdGlvbi55KCkpOworICAgIGVkZ2VzLnNldExlZnQob2Zmc2V0LngoKSA+IG1p
bmltdW1TY3JvbGxQb3NpdGlvbi54KCkpOworICAgIGVkZ2VzLnNldFJpZ2h0KG9mZnNldC54KCkg
PCBtYXhpbXVtU2Nyb2xsUG9zaXRpb24ueCgpKTsKKworICAgIHJldHVybiBlZGdlczsKK30KKwor
c3RhdGljIEJveFNpZGUgYm94U2lkZShTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAg
IHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbFVw
OgorICAgICAgICByZXR1cm4gQm94U2lkZTo6VG9wOworICAgIGNhc2UgU2Nyb2xsRGlyZWN0aW9u
OjpTY3JvbGxEb3duOgorICAgICAgICByZXR1cm4gQm94U2lkZTo6Qm90dG9tOworICAgIGNhc2Ug
U2Nyb2xsRGlyZWN0aW9uOjpTY3JvbGxMZWZ0OgorICAgICAgICByZXR1cm4gQm94U2lkZTo6TGVm
dDsKKyAgICBjYXNlIFNjcm9sbERpcmVjdGlvbjo6U2Nyb2xsUmlnaHQ6CisgICAgICAgIHJldHVy
biBCb3hTaWRlOjpSaWdodDsKKyAgICB9Cit9CisKK3N0YXRpYyBGbG9hdFNpemUgcGVycGVuZGlj
dWxhckFic29sdXRlVW5pdFZlY3RvcihTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAg
IHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbFVw
OgorICAgIGNhc2UgU2Nyb2xsRGlyZWN0aW9uOjpTY3JvbGxEb3duOgorICAgICAgICByZXR1cm4g
ezEsIDB9OworICAgIGNhc2UgU2Nyb2xsRGlyZWN0aW9uOjpTY3JvbGxMZWZ0OgorICAgIGNhc2Ug
U2Nyb2xsRGlyZWN0aW9uOjpTY3JvbGxSaWdodDoKKyAgICAgICAgcmV0dXJuIHswLCAxfTsKKyAg
ICB9Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3I6OnVwZGF0ZUtleWJvYXJkU2Nyb2xsUG9zaXRp
b24oTW9ub3RvbmljVGltZSBjdXJyZW50VGltZSkKK3sKKyAgICBGbG9hdFNpemUgZm9yY2UgPSB7
IDAsIDAgfTsKKyAgICBGbG9hdFNpemUgYXhlc1RvQXBwbHlTcHJpbmcgPSB7MSwgMX07CisgICAg
S2V5Ym9hcmRTY3JvbGxQYXJhbWV0ZXJzIHBhcmFtcyA9IEtleWJvYXJkU2Nyb2xsUGFyYW1ldGVy
czo6cGFyYW1ldGVycygpOworCisgICAgaWYgKG1fY3VycmVudFNjcm9sbCkgeworICAgICAgICBh
dXRvIHNjcm9sbGFibGVEaXJlY3Rpb25zID0gc2Nyb2xsYWJsZURpcmVjdGlvbnNGcm9tT2Zmc2V0
KGN1cnJlbnRQb3NpdGlvbigpKTsKKyAgICAgICAgU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiA9
IG1fY3VycmVudFNjcm9sbC0+ZGlyZWN0aW9uOworCisgICAgICAgIGlmIChzY3JvbGxhYmxlRGly
ZWN0aW9ucy5hdChib3hTaWRlKGRpcmVjdGlvbikpKSB7CisKKyAgICAgICAgICAgIC8vIEFwcGx5
IHRoZSBzY3JvbGxpbmcgZm9yY2UuIE9ubHkgYXBwbHkgdGhlIHNwcmluZyBpbiB0aGUgcGVycGVu
ZGljdWxhciBheGlzLAorICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0IGRyYWdzIGFnYWluc3Qg
dGhlIGRpcmVjdGlvbiBvZiBtb3Rpb24uCisgICAgICAgICAgICBheGVzVG9BcHBseVNwcmluZyA9
IHBlcnBlbmRpY3VsYXJBYnNvbHV0ZVVuaXRWZWN0b3IoZGlyZWN0aW9uKTsKKyAgICAgICAgICAg
IGZvcmNlID0gbV9jdXJyZW50U2Nyb2xsLT5mb3JjZTsKKyAgICAgICAgfSBlbHNlIHsKKworICAg
ICAgICAgICAgLy8gVGhlIHNjcm9sbCB2aWV3IGNhbm5vdCBzY3JvbGwgaW4gdGhpcyBkaXJlY3Rp
b24sIGFuZCBpcyBydWJiZXItYmFuZGluZy4KKyAgICAgICAgICAgIC8vIEFwcGx5IGEgY29uc3Rh
bnQgYW5kIHNpZ25pZmljYW50IGZvcmNlOyBvdGhlcndpc2UsIHRoZSBmb3JjZSBmb3IgYQorICAg
ICAgICAgICAgLy8gc2luZ2xlLWxpbmUgaW5jcmVtZW50IGlzIG5vdCBzdHJvbmcgZW5vdWdoIHRv
IHJ1YmJlci1iYW5kIHBlcmNlcHRpYmx5LgorICAgICAgICAgICAgZm9yY2UgPSB1bml0VmVjdG9y
Rm9yU2Nyb2xsRGlyZWN0aW9uKGRpcmVjdGlvbikuc2NhbGVkKHBhcmFtcy5ydWJiZXJCYW5kRm9y
Y2UpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZhYnMobV92ZWxvY2l0eS53aWR0aCgpKSA+
PSBmYWJzKG1fY3VycmVudFNjcm9sbC0+bWF4aW11bVZlbG9jaXR5LndpZHRoKCkpKQorICAgICAg
ICAgICAgZm9yY2Uuc2V0V2lkdGgoMCk7CisKKyAgICAgICAgaWYgKGZhYnMobV92ZWxvY2l0eS5o
ZWlnaHQoKSkgPj0gZmFicyhtX2N1cnJlbnRTY3JvbGwtPm1heGltdW1WZWxvY2l0eS5oZWlnaHQo
KSkpCisgICAgICAgICAgICBmb3JjZS5zZXRIZWlnaHQoMCk7CisgICAgfQorCisgICAgU2Nyb2xs
UG9zaXRpb24gaWRlYWxQb3NpdGlvbiA9IG1fc2Nyb2xsYWJsZUFyZWEuY29uc3RyYWluU2Nyb2xs
UG9zaXRpb24obV9jdXJyZW50U2Nyb2xsID8gSW50UG9pbnQoY3VycmVudFBvc2l0aW9uKCkueCgp
LCBjdXJyZW50UG9zaXRpb24oKS55KCkpIDogIEludFBvaW50KG1faWRlYWxQb3NpdGlvbi54KCks
IG1faWRlYWxQb3NpdGlvbi55KCkpKTsKKyAgICBGbG9hdFNpemUgZGlzcGxhY2VtZW50ID0gY3Vy
cmVudFBvc2l0aW9uKCkgLSBpZGVhbFBvc2l0aW9uOworCisgICAgYXV0byBzcHJpbmdGb3JjZSA9
IC0gZGlzcGxhY2VtZW50LnNjYWxlZChwYXJhbXMuc3ByaW5nU3RpZmZuZXNzKSAtIG1fdmVsb2Np
dHkuc2NhbGVkKHBhcmFtcy5zcHJpbmdEYW1waW5nKTsKKyAgICBmb3JjZSArPSBzcHJpbmdGb3Jj
ZSAqIGF4ZXNUb0FwcGx5U3ByaW5nOworCisgICAgZmxvYXQgZnJhbWVEdXJhdGlvbiA9IChjdXJy
ZW50VGltZSAtIG1fdGltZUF0TGFzdEZyYW1lKS52YWx1ZSgpOworICAgIG1fdGltZUF0TGFzdEZy
YW1lID0gY3VycmVudFRpbWU7CisKKyAgICBGbG9hdFNpemUgYWNjZWxlcmF0aW9uID0gZm9yY2Uu
c2NhbGVkKDEuIC8gcGFyYW1zLnNwcmluZ01hc3MpOworICAgIG1fdmVsb2NpdHkgKz0gYWNjZWxl
cmF0aW9uLnNjYWxlZChmcmFtZUR1cmF0aW9uKTsKKyAgICBGbG9hdFBvaW50IG5ld1Bvc2l0aW9u
ID0gY3VycmVudFBvc2l0aW9uKCkgKyBtX3ZlbG9jaXR5LnNjYWxlZChmcmFtZUR1cmF0aW9uKTsK
KworICAgIHNjcm9sbFRvUG9zaXRpb25XaXRob3V0QW5pbWF0aW9uKG5ld1Bvc2l0aW9uKTsKKwor
ICAgIGlmICghbV9zY3JvbGxUcmlnZ2VyaW5nS2V5SXNQcmVzc2VkICYmIG1fdmVsb2NpdHkuZGlh
Z29uYWxMZW5ndGhTcXVhcmVkKCkgPCAxKSB7CisgICAgICAgIG1fc2Nyb2xsQ29udHJvbGxlci5z
dG9wS2V5Ym9hcmRTY3JvbGxpbmcoKTsKKyAgICAgICAgbV92ZWxvY2l0eSA9IHsgfTsKKyAgICB9
Cit9CisKK2Jvb2wgU2Nyb2xsQW5pbWF0b3I6OmJlZ2luS2V5Ym9hcmRTY3JvbGxBbmltYXRpb24o
c3RkOjpvcHRpb25hbDxLZXlib2FyZFNjcm9sbD4gc2Nyb2xsLCBLZXlib2FyZEV2ZW50JiBldmVu
dCkKK3sKKyAgICBpZiAoIXNjcm9sbCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9j
dXJyZW50U2Nyb2xsID0gc2Nyb2xsOworCisgICAgaWYgKGV2ZW50LnR5cGUoKSAhPSBldmVudE5h
bWVzKCkua2V5ZG93bkV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9z
Y3JvbGxUcmlnZ2VyaW5nS2V5SXNQcmVzc2VkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAobV9jdXJyZW50U2Nyb2xsLT5ncmFudWxhcml0eSA9PSBTY3JvbGxHcmFudWxhcml0eTo6
U2Nyb2xsQnlEb2N1bWVudCkgeworICAgICAgICBtX3ZlbG9jaXR5ID0geyB9OworICAgICAgICBz
dG9wS2V5Ym9hcmRTY3JvbGxBbmltYXRpb24oKTsKKyAgICAgICAgYXV0byBuZXdQb3NpdGlvbiA9
IEludFBvaW50KGN1cnJlbnRQb3NpdGlvbigpICsgbV9jdXJyZW50U2Nyb2xsLT5vZmZzZXQpOwor
ICAgICAgICBzY3JvbGxUb1Bvc2l0aW9uV2l0aEFuaW1hdGlvbihuZXdQb3NpdGlvbik7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIG1fdGltZUF0TGFzdEZyYW1lID0gTW9ub3Rv
bmljVGltZTo6bm93KCk7CisgICAgbV9zY3JvbGxUcmlnZ2VyaW5nS2V5SXNQcmVzc2VkID0gdHJ1
ZTsKKyAgICBtX2lkZWFsUG9zaXRpb25Gb3JNaW5pbXVtVHJhdmVsID0gY3VycmVudFBvc2l0aW9u
KCkgKyBtX2N1cnJlbnRTY3JvbGwtPm9mZnNldDsKKworICAgIG1fc2Nyb2xsQ29udHJvbGxlci5i
ZWdpbktleWJvYXJkU2Nyb2xsaW5nKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGlj
IFNjcm9sbFBvc2l0aW9uIGZhcnRoZXN0UG9pbnRJbkRpcmVjdGlvbihGbG9hdFBvaW50IGEsIEZs
b2F0UG9pbnQgYiwgU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAgICBzd2l0Y2ggKGRp
cmVjdGlvbikgeworICAgIGNhc2UgU2Nyb2xsRGlyZWN0aW9uOjpTY3JvbGxVcDoKKyAgICAgICAg
cmV0dXJuIFNjcm9sbFBvc2l0aW9uKGEueCgpLCBzdGQ6Om1pbihhLnkoKSwgYi55KCkpKTsKKyAg
ICBjYXNlIFNjcm9sbERpcmVjdGlvbjo6U2Nyb2xsRG93bjoKKyAgICAgICAgcmV0dXJuIFNjcm9s
bFBvc2l0aW9uKGEueCgpLCBzdGQ6Om1heChhLnkoKSwgYi55KCkpKTsKKyAgICBjYXNlIFNjcm9s
bERpcmVjdGlvbjo6U2Nyb2xsTGVmdDoKKyAgICAgICAgcmV0dXJuIFNjcm9sbFBvc2l0aW9uKHN0
ZDo6bWluKGEueCgpLCBiLngoKSksIGEueSgpKTsKKyAgICBjYXNlIFNjcm9sbERpcmVjdGlvbjo6
U2Nyb2xsUmlnaHQ6CisgICAgICAgIHJldHVybiBTY3JvbGxQb3NpdGlvbihzdGQ6Om1heChhLngo
KSwgYi54KCkpLCBhLnkoKSk7CisgICAgfQorfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yOjpzdG9w
S2V5Ym9hcmRTY3JvbGxBbmltYXRpb24oKQoreworICAgIGlmICghbV9jdXJyZW50U2Nyb2xsKQor
ICAgICAgICByZXR1cm47CisKKyAgICBLZXlib2FyZFNjcm9sbFBhcmFtZXRlcnMgcGFyYW1zID0g
S2V5Ym9hcmRTY3JvbGxQYXJhbWV0ZXJzOjpwYXJhbWV0ZXJzKCk7CisKKyAgICAvLyBEZXRlcm1p
bmUgdGhlIHNldHRsaW5nIHBvc2l0aW9uIG9mIHRoZSBzcHJpbmcsIGNvbnNlcnZpbmcgdGhlIHN5
c3RlbSdzIGN1cnJlbnQgZW5lcmd5LgorICAgIC8vIEtpbmV0aWMgPSBlbGFzdGljIHBvdGVudGlh
bAorICAgIC8vIDEvMiAqIG0gKiB2XjIgPSAxLzIgKiBrICogeF4yCisgICAgLy8geCA9IHNxcnQo
dl4yICogbSAvIGspCisgICAgYXV0byBkaXNwbGFjZW1lbnRNYWduaXR1ZGVTcXVhcmVkID0gKG1f
dmVsb2NpdHkgKiBtX3ZlbG9jaXR5KS5zY2FsZWQocGFyYW1zLnNwcmluZ01hc3MgLyBwYXJhbXMu
c3ByaW5nU3RpZmZuZXNzKTsKKyAgICBGbG9hdFNpemUgZGlzcGxhY2VtZW50ID0geworICAgICAg
ICBzdGQ6OmNvcHlzaWduKHNxcnQoZGlzcGxhY2VtZW50TWFnbml0dWRlU3F1YXJlZC53aWR0aCgp
KSwgbV92ZWxvY2l0eS53aWR0aCgpKSwKKyAgICAgICAgc3RkOjpjb3B5c2lnbihzcXJ0KGRpc3Bs
YWNlbWVudE1hZ25pdHVkZVNxdWFyZWQuaGVpZ2h0KCkpLCBtX3ZlbG9jaXR5LmhlaWdodCgpKQor
ICAgIH07CisKKyAgICAvLyBJZiB0aGUgc3ByaW5nIHdvdWxkIHNldHRsZSBiZWZvcmUgdGhlIG1p
bmltdW0gdHJhdmVsIGRpc3RhbmNlCisgICAgLy8gZm9yIGFuIGluc3RhbnRhbmVvdXMgdGFwLCBt
b3ZlIHRoZSBzZXR0bGluZyBwb3NpdGlvbiBvZiB0aGUgc3ByaW5nCisgICAgLy8gb3V0IHRvIHRo
YXQgcG9pbnQuCisgICAgU2Nyb2xsUG9zaXRpb24gZmFydGhlc3RQb2ludCA9IGZhcnRoZXN0UG9p
bnRJbkRpcmVjdGlvbihjdXJyZW50UG9zaXRpb24oKSArIGRpc3BsYWNlbWVudCwgbV9pZGVhbFBv
c2l0aW9uRm9yTWluaW11bVRyYXZlbCwgbV9jdXJyZW50U2Nyb2xsLT5kaXJlY3Rpb24pOworICAg
IG1faWRlYWxQb3NpdGlvbiA9IG1fc2Nyb2xsYWJsZUFyZWEuY29uc3RyYWluU2Nyb2xsUG9zaXRp
b24oZmFydGhlc3RQb2ludCk7CisKKyAgICBtX2N1cnJlbnRTY3JvbGwgPSBzdGQ6Om51bGxvcHQ7
Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3I6OmhhbmRsZUtleVVwRXZlbnRXaGlsZVNjcm9sbGlu
ZygpCit7CisgICAgaWYgKCFtX3Njcm9sbFRyaWdnZXJpbmdLZXlJc1ByZXNzZWQpCisgICAgICAg
IHJldHVybjsKKworICAgIHN0b3BLZXlib2FyZFNjcm9sbEFuaW1hdGlvbigpOworICAgIG1fc2Ny
b2xsVHJpZ2dlcmluZ0tleUlzUHJlc3NlZCA9IGZhbHNlOworfQorCiAjaWYgRU5BQkxFKFRPVUNI
X0VWRU5UUykKIGJvb2wgU2Nyb2xsQW5pbWF0b3I6OmhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxh
dGZvcm1Ub3VjaEV2ZW50JikKIHsKQEAgLTMzMiw3ICs1MDUsNyBAQCB2b2lkIFNjcm9sbEFuaW1h
dG9yOjpzdGFydEFuaW1hdGlvbkNhbGxiYWNrKFNjcm9sbENvbnRyb2xsZXImKQogewogICAgIGlm
IChtX3Njcm9sbENvbnRyb2xsZXJBbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIAorCiAgICAgbV9zY3JvbGxDb250cm9sbGVyQW5pbWF0aW9uVGltZXIu
c3RhcnRSZXBlYXRpbmcoMV9zIC8gNjAuKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbEFuaW1hdG9yLmgKaW5kZXggZDkyY2ZkYmRmYmIwNWYxZmE5MTM0ZWM2NTg3NWFmY2I4Y2Ux
ZDc4Yy4uMGVkZDkyNjNjZmU2YmRlNTM1OGZlNTI5NmU5N2M1M2YxOTcxODk5YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCkBAIC0zMiw2ICszMiw4IEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJLZXlib2FyZEV2
ZW50LmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRTY3JvbGwuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdo
ZWVsRXZlbnQuaCIKICNpbmNsdWRlICJTY3JvbGxDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2Ny
b2xsVHlwZXMuaCIKQEAgLTgxLDYgKzgzLDkgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29s
IGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7CiAKKyAgICBib29s
IGJlZ2luS2V5Ym9hcmRTY3JvbGxBbmltYXRpb24oc3RkOjpvcHRpb25hbDxLZXlib2FyZFNjcm9s
bD4sIEtleWJvYXJkRXZlbnQmKTsKKyAgICB2b2lkIGhhbmRsZUtleVVwRXZlbnRXaGlsZVNjcm9s
bGluZygpOworCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICB2aXJ0dWFsIGJvb2wgaGFu
ZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmKTsKICNlbmRpZgpAQCAtMTcx
LDYgKzE3NiwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgRmxvYXRQb2ludCBwb3NpdGlvbkZyb21PZmZz
ZXQoY29uc3QgRmxvYXRQb2ludCYgb2Zmc2V0KTsKICAgICBGbG9hdFNpemUgZGVsdGFGcm9tU3Rl
cChTY3JvbGxiYXJPcmllbnRhdGlvbiwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcik7CiAK
KyAgICB2b2lkIHVwZGF0ZUtleWJvYXJkU2Nyb2xsUG9zaXRpb24oTW9ub3RvbmljVGltZSkgb3Zl
cnJpZGU7CisgICAgUmVjdEVkZ2VzPGJvb2w+IHNjcm9sbGFibGVEaXJlY3Rpb25zRnJvbU9mZnNl
dChGbG9hdFBvaW50KTsKKyAgICB2b2lkIHN0b3BLZXlib2FyZFNjcm9sbEFuaW1hdGlvbigpOwor
CiAgICAgU2Nyb2xsYWJsZUFyZWEmIG1fc2Nyb2xsYWJsZUFyZWE7CiAgICAgUmVmUHRyPFdoZWVs
RXZlbnRUZXN0TW9uaXRvcj4gbV93aGVlbEV2ZW50VGVzdE1vbml0b3I7CiAgICAgU2Nyb2xsQ29u
dHJvbGxlciBtX3Njcm9sbENvbnRyb2xsZXI7CkBAIC0xNzgsNiArMTg3LDEzIEBAIHByb3RlY3Rl
ZDoKICAgICBGbG9hdFBvaW50IG1fY3VycmVudFBvc2l0aW9uOwogCiAgICAgc3RkOjp1bmlxdWVf
cHRyPFNjcm9sbEFuaW1hdGlvbj4gbV9zY3JvbGxBbmltYXRpb247CisKKyAgICBzdGQ6Om9wdGlv
bmFsPFdlYkNvcmU6OktleWJvYXJkU2Nyb2xsPiBtX2N1cnJlbnRTY3JvbGw7CisgICAgRmxvYXRT
aXplIG1fdmVsb2NpdHk7CisgICAgRmxvYXRQb2ludCBtX2lkZWFsUG9zaXRpb247CisgICAgYm9v
bCBtX3Njcm9sbFRyaWdnZXJpbmdLZXlJc1ByZXNzZWQ7CisgICAgTW9ub3RvbmljVGltZSBtX3Rp
bWVBdExhc3RGcmFtZTsKKyAgICBGbG9hdFBvaW50IG1faWRlYWxQb3NpdGlvbkZvck1pbmltdW1U
cmF2ZWw7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbENvbnRyb2xsZXIuY3BwCmluZGV4IGU5Mzc1YmE3NDc2OGJkYjQ3M2JkOGJm
MWZmYTQ5YjgxY2Y5OTQzYTkuLjZkOGVjZTRjN2ZlMmYyNTA3MGQ4ZDg4Y2JmMDQyMGZhYWYyZDBl
MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbENvbnRyb2xsZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbENvbnRyb2xsZXIuY3BwCkBA
IC00MywxOCArNDMsMTggQEAgU2Nyb2xsQ29udHJvbGxlcjo6U2Nyb2xsQ29udHJvbGxlcihTY3Jv
bGxDb250cm9sbGVyQ2xpZW50JiBjbGllbnQpCiAKIHZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6YW5p
bWF0aW9uQ2FsbGJhY2soTW9ub3RvbmljVGltZSBjdXJyZW50VGltZSkKIHsKLSAgICBMT0dfV0lU
SF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgIlNjcm9sbENvbnRyb2xsZXIgIiA8PCB0aGlz
IDw8ICIgYW5pbWF0aW9uQ2FsbGJhY2s6IGlzQW5pbWF0aW5nUnViYmVyQmFuZCAiIDw8IG1faXNB
bmltYXRpbmdSdWJiZXJCYW5kIDw8ICIgaXNBbmltYXRpbmdTY3JvbGxTbmFwICIgPDwgbV9pc0Fu
aW1hdGluZ1Njcm9sbFNuYXApOworICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVh
bSA8PCAiU2Nyb2xsQ29udHJvbGxlciAiIDw8IHRoaXMgPDwgIiBhbmltYXRpb25DYWxsYmFjazog
aXNBbmltYXRpbmdSdWJiZXJCYW5kICIgPDwgbV9pc0FuaW1hdGluZ1J1YmJlckJhbmQgPDwgIiBp
c0FuaW1hdGluZ1Njcm9sbFNuYXAgIiA8PCBtX2lzQW5pbWF0aW5nU2Nyb2xsU25hcCA8PCAiaXNB
bmltYXRpbmdLZXlib2FyZFNjcm9sbGluZyIgPDwgbV9pc0FuaW1hdGluZ0tleWJvYXJkU2Nyb2xs
aW5nKTsKIAogICAgIHVwZGF0ZVNjcm9sbFNuYXBBbmltYXRpbmdTdGF0ZShjdXJyZW50VGltZSk7
CiAgICAgdXBkYXRlUnViYmVyQmFuZEFuaW1hdGluZ1N0YXRlKGN1cnJlbnRUaW1lKTsKKyAgICB1
cGRhdGVLZXlib2FyZFNjcm9sbGluZ0FuaW1hdGluZ1N0YXRlKGN1cnJlbnRUaW1lKTsKIH0KIAog
dm9pZCBTY3JvbGxDb250cm9sbGVyOjpzdGFydE9yU3RvcEFuaW1hdGlvbkNhbGxiYWNrcygpCiB7
Ci0gICAgYm9vbCBuZWVkc0NhbGxiYWNrcyA9IG1faXNBbmltYXRpbmdSdWJiZXJCYW5kIHx8IG1f
aXNBbmltYXRpbmdTY3JvbGxTbmFwOworICAgIGJvb2wgbmVlZHNDYWxsYmFja3MgPSBtX2lzQW5p
bWF0aW5nUnViYmVyQmFuZCB8fCBtX2lzQW5pbWF0aW5nU2Nyb2xsU25hcCB8fCBtX2lzQW5pbWF0
aW5nS2V5Ym9hcmRTY3JvbGxpbmc7CiAgICAgaWYgKG5lZWRzQ2FsbGJhY2tzID09IG1faXNSdW5u
aW5nQW5pbWF0aW5nQ2FsbGJhY2spCiAgICAgICAgIHJldHVybjsKLQogICAgIGlmIChuZWVkc0Nh
bGxiYWNrcykgewogICAgICAgICBtX2NsaWVudC5zdGFydEFuaW1hdGlvbkNhbGxiYWNrKCp0aGlz
KTsKICAgICAgICAgbV9pc1J1bm5pbmdBbmltYXRpbmdDYWxsYmFjayA9IHRydWU7CkBAIC02NSw2
ICs2NSwxNiBAQCB2b2lkIFNjcm9sbENvbnRyb2xsZXI6OnN0YXJ0T3JTdG9wQW5pbWF0aW9uQ2Fs
bGJhY2tzKCkKICAgICBtX2lzUnVubmluZ0FuaW1hdGluZ0NhbGxiYWNrID0gZmFsc2U7CiB9CiAK
K3ZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6YmVnaW5LZXlib2FyZFNjcm9sbGluZygpCit7CisgICAg
c2V0SXNBbmltYXRpbmdLZXlib2FyZFNjcm9sbGluZyh0cnVlKTsKK30KKwordm9pZCBTY3JvbGxD
b250cm9sbGVyOjpzdG9wS2V5Ym9hcmRTY3JvbGxpbmcoKQoreworICAgIHNldElzQW5pbWF0aW5n
S2V5Ym9hcmRTY3JvbGxpbmcoZmFsc2UpOworfQorCiB2b2lkIFNjcm9sbENvbnRyb2xsZXI6OnNl
dElzQW5pbWF0aW5nUnViYmVyQmFuZChib29sIGlzQW5pbWF0aW5nUnViYmVyQmFuZCkKIHsKICAg
ICBpZiAoaXNBbmltYXRpbmdSdWJiZXJCYW5kID09IG1faXNBbmltYXRpbmdSdWJiZXJCYW5kKQpA
QCAtODMsNiArOTMsMTUgQEAgdm9pZCBTY3JvbGxDb250cm9sbGVyOjpzZXRJc0FuaW1hdGluZ1Nj
cm9sbFNuYXAoYm9vbCBpc0FuaW1hdGluZ1Njcm9sbFNuYXApCiAgICAgc3RhcnRPclN0b3BBbmlt
YXRpb25DYWxsYmFja3MoKTsKIH0KIAordm9pZCBTY3JvbGxDb250cm9sbGVyOjpzZXRJc0FuaW1h
dGluZ0tleWJvYXJkU2Nyb2xsaW5nKGJvb2wgaXNBbmltYXRpbmdLZXlib2FyZFNjcm9sbGluZykK
K3sKKyAgICBpZiAoaXNBbmltYXRpbmdLZXlib2FyZFNjcm9sbGluZyA9PSBtX2lzQW5pbWF0aW5n
S2V5Ym9hcmRTY3JvbGxpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIG1faXNBbmltYXRpbmdL
ZXlib2FyZFNjcm9sbGluZyA9IGlzQW5pbWF0aW5nS2V5Ym9hcmRTY3JvbGxpbmc7CisgICAgc3Rh
cnRPclN0b3BBbmltYXRpb25DYWxsYmFja3MoKTsKK30KKwogYm9vbCBTY3JvbGxDb250cm9sbGVy
Ojp1c2VzU2Nyb2xsU25hcCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuICEhbV9zY3JvbGxTbmFwU3Rh
dGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmgKaW5kZXggMmI0
NzUxZWVhOGU0M2U1ZDVkNWIyOWY5MzM0MTE3ZWRmY2I3Y2Q4ZS4uYWRhNjZjMDg2MTZiNzhhYjk3
YmZlN2I0ZGRlMzYzOWIwZmY2MDdmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bENvbnRyb2xsZXIuaApAQCAtNzIsNiArNzIsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHN0YXJ0QW5pbWF0aW9uQ2FsbGJhY2soU2Nyb2xsQ29udHJvbGxlciYpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgc3RvcEFuaW1hdGlvbkNhbGxiYWNrKFNjcm9sbENvbnRyb2xsZXImKSA9IDA7CiAK
KyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlS2V5Ym9hcmRTY3JvbGxQb3NpdGlvbihNb25vdG9uaWNU
aW1lKSB7IH0KKwogI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKICAgICB2aXJ0dWFsIGJvb2wg
YWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgY29u
c3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoY29uc3Qg
UGxhdGZvcm1XaGVlbEV2ZW50JikgY29uc3QgPSAwOwpAQCAtMTIxLDYgKzEyMyw5IEBAIHB1Ymxp
YzoKICAgICBib29sIHVzZXNTY3JvbGxTbmFwKCkgY29uc3Q7CiAgICAgdm9pZCBzdG9wQWxsVGlt
ZXJzKCk7CiAgICAgdm9pZCBzY3JvbGxQb3NpdGlvbkNoYW5nZWQoKTsKKworICAgIHZvaWQgYmVn
aW5LZXlib2FyZFNjcm9sbGluZygpOworICAgIHZvaWQgc3RvcEtleWJvYXJkU2Nyb2xsaW5nKCk7
CiAgICAgCiAgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCBwZXJpb2RpY2FsbHkgYnkgdGhlIGNsaWVu
dC4gU3RhcnRlZCBieSBzdGFydEFuaW1hdGlvbkNhbGxiYWNrKCksIHN0b3BwZWQgYnkgc3RvcEFu
aW1hdGlvbkNhbGxiYWNrKCkuCiAgICAgdm9pZCBhbmltYXRpb25DYWxsYmFjayhNb25vdG9uaWNU
aW1lKTsKQEAgLTE2Myw5ICsxNjgsMTAgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdXBkYXRlU2Ny
b2xsU25hcEFuaW1hdGluZ1N0YXRlKE1vbm90b25pY1RpbWUpOwogICAgIHZvaWQgdXBkYXRlUnVi
YmVyQmFuZEFuaW1hdGluZ1N0YXRlKE1vbm90b25pY1RpbWUpOwotICAgIAorICAgIHZvaWQgdXBk
YXRlS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRpbmdTdGF0ZShNb25vdG9uaWNUaW1lKTsKICAgICB2
b2lkIHNldElzQW5pbWF0aW5nUnViYmVyQmFuZChib29sKTsKICAgICB2b2lkIHNldElzQW5pbWF0
aW5nU2Nyb2xsU25hcChib29sKTsKKyAgICB2b2lkIHNldElzQW5pbWF0aW5nS2V5Ym9hcmRTY3Jv
bGxpbmcoYm9vbCk7CiAKICNpZiBQTEFURk9STShNQUMpCiAgICAgdm9pZCBzdGFydFNjcm9sbFNu
YXBBbmltYXRpb24oKTsKQEAgLTE5OSw2ICsyMDUsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9p
c1J1bm5pbmdBbmltYXRpbmdDYWxsYmFjayB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzQW5pbWF0
aW5nUnViYmVyQmFuZCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzQW5pbWF0aW5nU2Nyb2xsU25h
cCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzQW5pbWF0aW5nS2V5Ym9hcmRTY3JvbGxpbmcgeyBm
YWxzZSB9OwogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIFdhbGxUaW1lIG1fbGFzdE1vbWVudHVt
U2Nyb2xsVGltZXN0YW1wOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1Njcm9sbENvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xs
Q29udHJvbGxlci5tbQppbmRleCBjYWM5YjJiMTQ5YzM5ZWMwY2VmMDA1MWJkMjE3YWZkODQ2ZDYz
ODlhLi5lMDAyMWE0MDViMjI0Yjg0YzM5NTZkNzA1YmNlM2NiZjQ2MzAwNDg0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQ29udHJvbGxlci5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQ29udHJvbGxlci5tbQpAQCAtMzYyLDYg
KzM2MiwxNCBAQCBzdGQ6Om9wdGlvbmFsPFNjcm9sbERpcmVjdGlvbj4gU2Nyb2xsQ29udHJvbGxl
cjo6ZGlyZWN0aW9uRnJvbUV2ZW50KGNvbnN0IFBsYXRmbwogICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CiB9CiAKK3ZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6dXBkYXRlS2V5Ym9hcmRTY3JvbGxpbmdB
bmltYXRpbmdTdGF0ZShNb25vdG9uaWNUaW1lIGN1cnJlbnRUaW1lKQoreworICAgIGlmICghbV9p
c0FuaW1hdGluZ0tleWJvYXJkU2Nyb2xsaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2Ns
aWVudC51cGRhdGVLZXlib2FyZFNjcm9sbFBvc2l0aW9uKGN1cnJlbnRUaW1lKTsKK30KKwogI2lm
IEVOQUJMRShSVUJCRVJfQkFORElORykKIHN0YXRpYyBpbmxpbmUgZmxvYXQgcm91bmRUb3dhcmRa
ZXJvKGZsb2F0IG51bSkKIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>433969</attachid>
            <date>2021-07-21 16:26:41 -0700</date>
            <delta_ts>2021-07-23 16:17:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228009-20210721192639.patch</filename>
            <type>text/plain</type>
            <size>19368</size>
            <attacher name="Dana Estra">dana.estra</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5OTU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTg2OTY2YzRlMjRjN2M1
MDIwZWJmNTMyZWUyZjRhODgzNDBjYjgyYi4uNmEzOTZkNWRlNWFjNzU3MjA0OTA2YmNmMTczMTYx
NDVkYjBiMWQ5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDIxLTA3LTIxICBEYW5h
IEVzdHJhICA8ZGVzdHJhQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQga2V5LWRyaXZlbiBzbW9v
dGggc2Nyb2xsaW5nIHRvIG1hY09TCisgICAgICAgICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyODAwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgQ2F1c2Uga2V5Ym9hcmQgc2Nyb2xsIGV2ZW50
IHRvIHRyaWdnZXIgc3RhcnQgb2Ygc21vb3RoIHNjcm9sbCBhbmltYXRpb24sIHVzaW5nIHNhbWUg
cGh5c2ljcyBpbXBsZW1lbnRhdGlvbiBhcyBpT1Mgc21vb3RoIHNjcm9sbGluZy4KKworICAgICAg
ICBObyB0ZXN0cyB5ZXQuCisKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpOb2RlOjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFu
ZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmRlZmF1bHRLZXlib2Fy
ZEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNjcm9sbERp
c3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlS2V5Ym9hcmRT
Y3JvbGxpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpzY3JvbGxhYmxlRGlyZWN0aW9uc0Zyb21PZmZz
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6Ym94U2lkZSk6CisgICAgICAgIChXZWJDb3JlOjpwZXJw
ZW5kaWN1bGFyQWJzb2x1dGVVbml0VmVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yOjp1cGRhdGVLZXlib2FyZFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbEFuaW1hdG9yOjpiZWdpbktleWJvYXJkU2Nyb2xsQW5pbWF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OmZhcnRoZXN0UG9pbnRJbkRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxBbmltYXRvcjo6c3RvcEtleWJvYXJkU2Nyb2xsQW5pbWF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpoYW5kbGVLZXlVcEV2ZW50V2hpbGVTY3JvbGxpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnN0YXJ0QW5pbWF0aW9uQ2FsbGJhY2sp
OgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmg6CisgICAgICAgICogcGxhdGZv
cm0vU2Nyb2xsQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9s
bGVyOjphbmltYXRpb25DYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9s
bGVyOjpzdGFydE9yU3RvcEFuaW1hdGlvbkNhbGxiYWNrcyk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxDb250cm9sbGVyOjpiZWdpbktleWJvYXJkU2Nyb2xsaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbENvbnRyb2xsZXI6OnN0b3BLZXlib2FyZFNjcm9sbGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjpzZXRJc0FuaW1hdGluZ0tleWJvYXJkU2Nyb2xsaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OnVwZGF0ZUtleWJvYXJkU2Ny
b2xsaW5nQW5pbWF0aW5nU3RhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbENvbnRyb2xs
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXJDbGllbnQ6OnVwZGF0ZUtl
eWJvYXJkU2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAKIDIwMjEtMDctMTUgIFRpbSBOZ3V5ZW4g
IDxudGltQGFwcGxlLmNvbT4KIAogICAgICAgICA8ZGlhbG9nPiBlbGVtZW50OiBkbyBub3QgcGVy
Zm9ybSBjbG9zZSgpIG1ldGhvZCBzdGVwcyB3aGVuIHJlbW92aW5nIG9wZW4gYXR0cmlidXRlLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZG9tL05vZGUuY3BwCmluZGV4IGUyNDU3N2RmM2Q3NjE3YmU0YjI1NjI3MDhhYjc2ZDhmYzU4MjQ1
ZWQuLmQ1NmIyYjk0ZmI4ZjNiZGEwOWU3ZGYxZGVkNDZkOThmZDQzZGM0NTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5jcHAKQEAgLTI0MzIsNyArMjQzMiw3IEBAIHZvaWQgTm9kZTo6ZGVmYXVsdEV2ZW50SGFuZGxl
cihFdmVudCYgZXZlbnQpCiAgICAgaWYgKGV2ZW50LnRhcmdldCgpICE9IHRoaXMpCiAgICAgICAg
IHJldHVybjsKICAgICBjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUgPSBldmVudC50eXBlKCk7
Ci0gICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50IHx8IGV2ZW50
VHlwZSA9PSBldmVudE5hbWVzKCkua2V5cHJlc3NFdmVudCkgeworICAgIGlmIChldmVudFR5cGUg
PT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygp
LmtleXByZXNzRXZlbnQgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5rZXl1cEV2ZW50KSB7
CiAgICAgICAgIGlmIChpczxLZXlib2FyZEV2ZW50PihldmVudCkpIHsKICAgICAgICAgICAgIGlm
IChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLmZyYW1lKCkpCiAgICAgICAgICAgICAgICAgZnJh
bWUtPmV2ZW50SGFuZGxlcigpLmRlZmF1bHRLZXlib2FyZEV2ZW50SGFuZGxlcihkb3duY2FzdDxL
ZXlib2FyZEV2ZW50PihldmVudCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9F
dmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmlu
ZGV4IDA1Y2RhNjU4MTkyNGEyNmNmNzA1Yzk4Mjk1ZmQ0MjhlNDM2NGY3M2IuLjQ4Y2E4NzUzM2E5
OTdjZDkyM2MwYzJiZDM4NWRkNzdhZDcwZmVhMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFu
ZGxlci5jcHAKQEAgLTY3LDggKzY3LDYgQEAKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUg
IkltYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb24uaCIKLSNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCi0jaW5jbHVkZSAiS2V5Ym9hcmRT
Y3JvbGwuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgog
I2luY2x1ZGUgIk1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaCIKQEAgLTM4MDMsNiArMzgw
MSwxMCBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6ZGVmYXVsdEtleWJvYXJkRXZlbnRIYW5kbGVyKEtl
eWJvYXJkRXZlbnQmIGV2ZW50KQogICAgICAgICBpZiAoZXZlbnQuY2hhckNvZGUoKSA9PSAnICcp
CiAgICAgICAgICAgICBkZWZhdWx0U3BhY2VFdmVudEhhbmRsZXIoZXZlbnQpOwogICAgIH0KKyAg
ICBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXl1cEV2ZW50KSB7CisgICAgICAg
IEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUudmlldygpOworICAgICAgICByZXR1cm4gdmlldy0+
c2Nyb2xsQW5pbWF0b3IoKS5oYW5kbGVLZXlVcEV2ZW50V2hpbGVTY3JvbGxpbmcoKTsKKyAgICB9
CiB9CiAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQpAQCAtNDIzNyw3ICs0MjM5LDcgQEAgZmxv
YXQgRXZlbnRIYW5kbGVyOjpzY3JvbGxEaXN0YW5jZShTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9u
LCBTY3JvbGxHcmFudWxhcml0eQogICAgICAgICAgICAgcmV0dXJuIG1fZnJhbWUudmlldygpLT52
ZXJ0aWNhbFNjcm9sbGJhcigpOwogICAgICAgICByZXR1cm4gbV9mcmFtZS52aWV3KCktPmhvcml6
b250YWxTY3JvbGxiYXIoKTsKICAgICB9KCk7Ci0gICAgCisKICAgICBzd2l0Y2ggKGdyYW51bGFy
aXR5KSB7CiAgICAgY2FzZSBTY3JvbGxHcmFudWxhcml0eTo6U2Nyb2xsQnlMaW5lOgogICAgICAg
ICByZXR1cm4gc2Nyb2xsYmFyLT5saW5lU3RlcCgpOwpAQCAtNDMwNyw3ICs0MzA5LDE4IEBAIGJv
b2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVLZXlib2FyZFNjcm9sbGluZyhLZXlib2FyZEV2ZW50JiBl
dmVudCkKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9KCk7CiAK
LSAgICByZXR1cm4gRXZlbnRIYW5kbGVyOjpzY3JvbGxSZWN1cnNpdmVseShkaXJlY3Rpb24sIGdy
YW51bGFyaXR5LCBudWxscHRyKTsKKyAgICBmbG9hdCBkaXN0YW5jZSA9IHNjcm9sbERpc3RhbmNl
KGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOworCisgICAgS2V5Ym9hcmRTY3JvbGwgc2Nyb2xsOwor
CisgICAgc2Nyb2xsLm9mZnNldCA9IHVuaXRWZWN0b3JGb3JTY3JvbGxEaXJlY3Rpb24oZGlyZWN0
aW9uKS5zY2FsZWQoZGlzdGFuY2UpOworICAgIHNjcm9sbC5ncmFudWxhcml0eSA9IGdyYW51bGFy
aXR5OworICAgIHNjcm9sbC5kaXJlY3Rpb24gPSBkaXJlY3Rpb247CisgICAgc2Nyb2xsLm1heGlt
dW1WZWxvY2l0eSA9IHNjcm9sbC5vZmZzZXQuc2NhbGVkKEtleWJvYXJkU2Nyb2xsUGFyYW1ldGVy
czo6cGFyYW1ldGVycygpLm1heGltdW1WZWxvY2l0eU11bHRpcGxpZXIpOworICAgIHNjcm9sbC5m
b3JjZSA9IHNjcm9sbC5tYXhpbXVtVmVsb2NpdHkuc2NhbGVkKEtleWJvYXJkU2Nyb2xsUGFyYW1l
dGVyczo6cGFyYW1ldGVycygpLnNwcmluZ01hc3MgLyBLZXlib2FyZFNjcm9sbFBhcmFtZXRlcnM6
OnBhcmFtZXRlcnMoKS50aW1lVG9NYXhpbXVtVmVsb2NpdHkpOworCisgICAgRnJhbWVWaWV3KiB2
aWV3ID0gbV9mcmFtZS52aWV3KCk7CisgICAgcmV0dXJuIHZpZXctPnNjcm9sbEFuaW1hdG9yKCku
YmVnaW5LZXlib2FyZFNjcm9sbEFuaW1hdGlvbihzY3JvbGwsIGV2ZW50KTsKIH0KIAogdm9pZCBF
dmVudEhhbmRsZXI6OmRlZmF1bHRBcnJvd0V2ZW50SGFuZGxlcihGb2N1c0RpcmVjdGlvbiBmb2N1
c0RpcmVjdGlvbiwgS2V5Ym9hcmRFdmVudCYgZXZlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxBbmltYXRvci5jcHAKaW5kZXggNWU4M2ZkYmFlMjdmYjg5ODdmODA5YTg1NDk3NTdh
YzA1ODYyMzgwYy4uZDc0YmQ0MDE0NDZjM2RhMzA2Yjk2NjRkZDQ0YzlkNjM4YzY1YjViNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcApAQCAtMzIsNiArMzIs
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCiAK
KyNpbXBvcnQgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVk
ZSAiTGF5b3V0U2l6ZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgpAQCAtMjUz
LDYgKzI1NCwxODUgQEAgYm9vbCBTY3JvbGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudChjb25z
dCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGUpCiAgICAgcmV0dXJuIGhhbmRsZWQ7CiB9CiAKK1JlY3RF
ZGdlczxib29sPiBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsYWJsZURpcmVjdGlvbnNGcm9tT2Zmc2V0
KEZsb2F0UG9pbnQgb2Zmc2V0KQoreworICAgIGF1dG8gbWluaW11bVNjcm9sbFBvc2l0aW9uID0g
bV9zY3JvbGxhYmxlQXJlYS5taW5pbXVtU2Nyb2xsUG9zaXRpb24oKTsKKyAgICBhdXRvIG1heGlt
dW1TY3JvbGxQb3NpdGlvbiA9IG1fc2Nyb2xsYWJsZUFyZWEubWF4aW11bVNjcm9sbFBvc2l0aW9u
KCk7CisKKyAgICBSZWN0RWRnZXM8Ym9vbD4gZWRnZXM7CisKKyAgICBlZGdlcy5zZXRUb3Aob2Zm
c2V0LnkoKSA+IG1pbmltdW1TY3JvbGxQb3NpdGlvbi55KCkpOworICAgIGVkZ2VzLnNldEJvdHRv
bShvZmZzZXQueSgpIDwgbWF4aW11bVNjcm9sbFBvc2l0aW9uLnkoKSk7CisgICAgZWRnZXMuc2V0
TGVmdChvZmZzZXQueCgpID4gbWluaW11bVNjcm9sbFBvc2l0aW9uLngoKSk7CisgICAgZWRnZXMu
c2V0UmlnaHQob2Zmc2V0LngoKSA8IG1heGltdW1TY3JvbGxQb3NpdGlvbi54KCkpOworCisgICAg
cmV0dXJuIGVkZ2VzOworfQorCitzdGF0aWMgQm94U2lkZSBib3hTaWRlKFNjcm9sbERpcmVjdGlv
biBkaXJlY3Rpb24pCit7CisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBjYXNlIFNjcm9s
bERpcmVjdGlvbjo6U2Nyb2xsVXA6CisgICAgICAgIHJldHVybiBCb3hTaWRlOjpUb3A7CisgICAg
Y2FzZSBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbERvd246CisgICAgICAgIHJldHVybiBCb3hTaWRl
OjpCb3R0b207CisgICAgY2FzZSBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbExlZnQ6CisgICAgICAg
IHJldHVybiBCb3hTaWRlOjpMZWZ0OworICAgIGNhc2UgU2Nyb2xsRGlyZWN0aW9uOjpTY3JvbGxS
aWdodDoKKyAgICAgICAgcmV0dXJuIEJveFNpZGU6OlJpZ2h0OworICAgIH0KKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gQm94U2lkZTo6VG9wOworfQorCitzdGF0aWMgRmxv
YXRTaXplIHBlcnBlbmRpY3VsYXJBYnNvbHV0ZVVuaXRWZWN0b3IoU2Nyb2xsRGlyZWN0aW9uIGRp
cmVjdGlvbikKK3sKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNhc2UgU2Nyb2xsRGly
ZWN0aW9uOjpTY3JvbGxVcDoKKyAgICBjYXNlIFNjcm9sbERpcmVjdGlvbjo6U2Nyb2xsRG93bjoK
KyAgICAgICAgcmV0dXJuIHsxLCAwfTsKKyAgICBjYXNlIFNjcm9sbERpcmVjdGlvbjo6U2Nyb2xs
TGVmdDoKKyAgICBjYXNlIFNjcm9sbERpcmVjdGlvbjo6U2Nyb2xsUmlnaHQ6CisgICAgICAgIHJl
dHVybiB7MCwgMX07CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biB7IH07Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3I6OnVwZGF0ZUtleWJvYXJkU2Nyb2xsUG9z
aXRpb24oTW9ub3RvbmljVGltZSBjdXJyZW50VGltZSkKK3sKKyAgICBGbG9hdFNpemUgZm9yY2Ug
PSB7IDAsIDAgfTsKKyAgICBGbG9hdFNpemUgYXhlc1RvQXBwbHlTcHJpbmcgPSB7MSwgMX07Cisg
ICAgS2V5Ym9hcmRTY3JvbGxQYXJhbWV0ZXJzIHBhcmFtcyA9IEtleWJvYXJkU2Nyb2xsUGFyYW1l
dGVyczo6cGFyYW1ldGVycygpOworCisgICAgaWYgKG1fY3VycmVudFNjcm9sbCkgeworICAgICAg
ICBhdXRvIHNjcm9sbGFibGVEaXJlY3Rpb25zID0gc2Nyb2xsYWJsZURpcmVjdGlvbnNGcm9tT2Zm
c2V0KGN1cnJlbnRQb3NpdGlvbigpKTsKKyAgICAgICAgU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlv
biA9IG1fY3VycmVudFNjcm9sbC0+ZGlyZWN0aW9uOworCisgICAgICAgIGlmIChzY3JvbGxhYmxl
RGlyZWN0aW9ucy5hdChib3hTaWRlKGRpcmVjdGlvbikpKSB7CisKKyAgICAgICAgICAgIC8vIEFw
cGx5IHRoZSBzY3JvbGxpbmcgZm9yY2UuIE9ubHkgYXBwbHkgdGhlIHNwcmluZyBpbiB0aGUgcGVy
cGVuZGljdWxhciBheGlzLAorICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0IGRyYWdzIGFnYWlu
c3QgdGhlIGRpcmVjdGlvbiBvZiBtb3Rpb24uCisgICAgICAgICAgICBheGVzVG9BcHBseVNwcmlu
ZyA9IHBlcnBlbmRpY3VsYXJBYnNvbHV0ZVVuaXRWZWN0b3IoZGlyZWN0aW9uKTsKKyAgICAgICAg
ICAgIGZvcmNlID0gbV9jdXJyZW50U2Nyb2xsLT5mb3JjZTsKKyAgICAgICAgfSBlbHNlIHsKKwor
ICAgICAgICAgICAgLy8gVGhlIHNjcm9sbCB2aWV3IGNhbm5vdCBzY3JvbGwgaW4gdGhpcyBkaXJl
Y3Rpb24sIGFuZCBpcyBydWJiZXItYmFuZGluZy4KKyAgICAgICAgICAgIC8vIEFwcGx5IGEgY29u
c3RhbnQgYW5kIHNpZ25pZmljYW50IGZvcmNlOyBvdGhlcndpc2UsIHRoZSBmb3JjZSBmb3IgYQor
ICAgICAgICAgICAgLy8gc2luZ2xlLWxpbmUgaW5jcmVtZW50IGlzIG5vdCBzdHJvbmcgZW5vdWdo
IHRvIHJ1YmJlci1iYW5kIHBlcmNlcHRpYmx5LgorICAgICAgICAgICAgZm9yY2UgPSB1bml0VmVj
dG9yRm9yU2Nyb2xsRGlyZWN0aW9uKGRpcmVjdGlvbikuc2NhbGVkKHBhcmFtcy5ydWJiZXJCYW5k
Rm9yY2UpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZhYnMobV92ZWxvY2l0eS53aWR0aCgp
KSA+PSBmYWJzKG1fY3VycmVudFNjcm9sbC0+bWF4aW11bVZlbG9jaXR5LndpZHRoKCkpKQorICAg
ICAgICAgICAgZm9yY2Uuc2V0V2lkdGgoMCk7CisKKyAgICAgICAgaWYgKGZhYnMobV92ZWxvY2l0
eS5oZWlnaHQoKSkgPj0gZmFicyhtX2N1cnJlbnRTY3JvbGwtPm1heGltdW1WZWxvY2l0eS5oZWln
aHQoKSkpCisgICAgICAgICAgICBmb3JjZS5zZXRIZWlnaHQoMCk7CisgICAgfQorCisgICAgU2Ny
b2xsUG9zaXRpb24gaWRlYWxQb3NpdGlvbiA9IG1fc2Nyb2xsYWJsZUFyZWEuY29uc3RyYWluU2Ny
b2xsUG9zaXRpb24obV9jdXJyZW50U2Nyb2xsID8gSW50UG9pbnQoY3VycmVudFBvc2l0aW9uKCku
eCgpLCBjdXJyZW50UG9zaXRpb24oKS55KCkpIDogIEludFBvaW50KG1faWRlYWxQb3NpdGlvbi54
KCksIG1faWRlYWxQb3NpdGlvbi55KCkpKTsKKyAgICBGbG9hdFNpemUgZGlzcGxhY2VtZW50ID0g
Y3VycmVudFBvc2l0aW9uKCkgLSBpZGVhbFBvc2l0aW9uOworCisgICAgYXV0byBzcHJpbmdGb3Jj
ZSA9IC0gZGlzcGxhY2VtZW50LnNjYWxlZChwYXJhbXMuc3ByaW5nU3RpZmZuZXNzKSAtIG1fdmVs
b2NpdHkuc2NhbGVkKHBhcmFtcy5zcHJpbmdEYW1waW5nKTsKKyAgICBmb3JjZSArPSBzcHJpbmdG
b3JjZSAqIGF4ZXNUb0FwcGx5U3ByaW5nOworCisgICAgZmxvYXQgZnJhbWVEdXJhdGlvbiA9IChj
dXJyZW50VGltZSAtIG1fdGltZUF0TGFzdEZyYW1lKS52YWx1ZSgpOworICAgIG1fdGltZUF0TGFz
dEZyYW1lID0gY3VycmVudFRpbWU7CisKKyAgICBGbG9hdFNpemUgYWNjZWxlcmF0aW9uID0gZm9y
Y2Uuc2NhbGVkKDEuIC8gcGFyYW1zLnNwcmluZ01hc3MpOworICAgIG1fdmVsb2NpdHkgKz0gYWNj
ZWxlcmF0aW9uLnNjYWxlZChmcmFtZUR1cmF0aW9uKTsKKyAgICBGbG9hdFBvaW50IG5ld1Bvc2l0
aW9uID0gY3VycmVudFBvc2l0aW9uKCkgKyBtX3ZlbG9jaXR5LnNjYWxlZChmcmFtZUR1cmF0aW9u
KTsKKworICAgIHNjcm9sbFRvUG9zaXRpb25XaXRob3V0QW5pbWF0aW9uKG5ld1Bvc2l0aW9uKTsK
KworICAgIGlmICghbV9zY3JvbGxUcmlnZ2VyaW5nS2V5SXNQcmVzc2VkICYmIG1fdmVsb2NpdHku
ZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCkgPCAxKSB7CisgICAgICAgIG1fc2Nyb2xsQ29udHJvbGxl
ci5zdG9wS2V5Ym9hcmRTY3JvbGxpbmcoKTsKKyAgICAgICAgbV92ZWxvY2l0eSA9IHsgfTsKKyAg
ICB9Cit9CisKK2Jvb2wgU2Nyb2xsQW5pbWF0b3I6OmJlZ2luS2V5Ym9hcmRTY3JvbGxBbmltYXRp
b24oc3RkOjpvcHRpb25hbDxLZXlib2FyZFNjcm9sbD4gc2Nyb2xsLCBLZXlib2FyZEV2ZW50JiBl
dmVudCkKK3sKKyAgICBpZiAoIXNjcm9sbCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
bV9jdXJyZW50U2Nyb2xsID0gc2Nyb2xsOworCisgICAgaWYgKGV2ZW50LnR5cGUoKSAhPSBldmVu
dE5hbWVzKCkua2V5ZG93bkV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
bV9zY3JvbGxUcmlnZ2VyaW5nS2V5SXNQcmVzc2VkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBpZiAobV9jdXJyZW50U2Nyb2xsLT5ncmFudWxhcml0eSA9PSBTY3JvbGxHcmFudWxhcml0
eTo6U2Nyb2xsQnlEb2N1bWVudCkgeworICAgICAgICBtX3ZlbG9jaXR5ID0geyB9OworICAgICAg
ICBzdG9wS2V5Ym9hcmRTY3JvbGxBbmltYXRpb24oKTsKKyAgICAgICAgYXV0byBuZXdQb3NpdGlv
biA9IEludFBvaW50KGN1cnJlbnRQb3NpdGlvbigpICsgbV9jdXJyZW50U2Nyb2xsLT5vZmZzZXQp
OworICAgICAgICBzY3JvbGxUb1Bvc2l0aW9uV2l0aEFuaW1hdGlvbihuZXdQb3NpdGlvbik7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIG1fdGltZUF0TGFzdEZyYW1lID0gTW9u
b3RvbmljVGltZTo6bm93KCk7CisgICAgbV9zY3JvbGxUcmlnZ2VyaW5nS2V5SXNQcmVzc2VkID0g
dHJ1ZTsKKyAgICBtX2lkZWFsUG9zaXRpb25Gb3JNaW5pbXVtVHJhdmVsID0gY3VycmVudFBvc2l0
aW9uKCkgKyBtX2N1cnJlbnRTY3JvbGwtPm9mZnNldDsKKworICAgIG1fc2Nyb2xsQ29udHJvbGxl
ci5iZWdpbktleWJvYXJkU2Nyb2xsaW5nKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3Rh
dGljIFNjcm9sbFBvc2l0aW9uIGZhcnRoZXN0UG9pbnRJbkRpcmVjdGlvbihGbG9hdFBvaW50IGEs
IEZsb2F0UG9pbnQgYiwgU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAgICBzd2l0Y2gg
KGRpcmVjdGlvbikgeworICAgIGNhc2UgU2Nyb2xsRGlyZWN0aW9uOjpTY3JvbGxVcDoKKyAgICAg
ICAgcmV0dXJuIFNjcm9sbFBvc2l0aW9uKGEueCgpLCBzdGQ6Om1pbihhLnkoKSwgYi55KCkpKTsK
KyAgICBjYXNlIFNjcm9sbERpcmVjdGlvbjo6U2Nyb2xsRG93bjoKKyAgICAgICAgcmV0dXJuIFNj
cm9sbFBvc2l0aW9uKGEueCgpLCBzdGQ6Om1heChhLnkoKSwgYi55KCkpKTsKKyAgICBjYXNlIFNj
cm9sbERpcmVjdGlvbjo6U2Nyb2xsTGVmdDoKKyAgICAgICAgcmV0dXJuIFNjcm9sbFBvc2l0aW9u
KHN0ZDo6bWluKGEueCgpLCBiLngoKSksIGEueSgpKTsKKyAgICBjYXNlIFNjcm9sbERpcmVjdGlv
bjo6U2Nyb2xsUmlnaHQ6CisgICAgICAgIHJldHVybiBTY3JvbGxQb3NpdGlvbihzdGQ6Om1heChh
LngoKSwgYi54KCkpLCBhLnkoKSk7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIHsgfTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvcjo6c3RvcEtleWJvYXJk
U2Nyb2xsQW5pbWF0aW9uKCkKK3sKKyAgICBpZiAoIW1fY3VycmVudFNjcm9sbCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgS2V5Ym9hcmRTY3JvbGxQYXJhbWV0ZXJzIHBhcmFtcyA9IEtleWJvYXJk
U2Nyb2xsUGFyYW1ldGVyczo6cGFyYW1ldGVycygpOworCisgICAgLy8gRGV0ZXJtaW5lIHRoZSBz
ZXR0bGluZyBwb3NpdGlvbiBvZiB0aGUgc3ByaW5nLCBjb25zZXJ2aW5nIHRoZSBzeXN0ZW0ncyBj
dXJyZW50IGVuZXJneS4KKyAgICAvLyBLaW5ldGljID0gZWxhc3RpYyBwb3RlbnRpYWwKKyAgICAv
LyAxLzIgKiBtICogdl4yID0gMS8yICogayAqIHheMgorICAgIC8vIHggPSBzcXJ0KHZeMiAqIG0g
LyBrKQorICAgIGF1dG8gZGlzcGxhY2VtZW50TWFnbml0dWRlU3F1YXJlZCA9IChtX3ZlbG9jaXR5
ICogbV92ZWxvY2l0eSkuc2NhbGVkKHBhcmFtcy5zcHJpbmdNYXNzIC8gcGFyYW1zLnNwcmluZ1N0
aWZmbmVzcyk7CisgICAgRmxvYXRTaXplIGRpc3BsYWNlbWVudCA9IHsKKyAgICAgICAgc3RkOjpj
b3B5c2lnbihzcXJ0KGRpc3BsYWNlbWVudE1hZ25pdHVkZVNxdWFyZWQud2lkdGgoKSksIG1fdmVs
b2NpdHkud2lkdGgoKSksCisgICAgICAgIHN0ZDo6Y29weXNpZ24oc3FydChkaXNwbGFjZW1lbnRN
YWduaXR1ZGVTcXVhcmVkLmhlaWdodCgpKSwgbV92ZWxvY2l0eS5oZWlnaHQoKSkKKyAgICB9Owor
CisgICAgLy8gSWYgdGhlIHNwcmluZyB3b3VsZCBzZXR0bGUgYmVmb3JlIHRoZSBtaW5pbXVtIHRy
YXZlbCBkaXN0YW5jZQorICAgIC8vIGZvciBhbiBpbnN0YW50YW5lb3VzIHRhcCwgbW92ZSB0aGUg
c2V0dGxpbmcgcG9zaXRpb24gb2YgdGhlIHNwcmluZworICAgIC8vIG91dCB0byB0aGF0IHBvaW50
LgorICAgIFNjcm9sbFBvc2l0aW9uIGZhcnRoZXN0UG9pbnQgPSBmYXJ0aGVzdFBvaW50SW5EaXJl
Y3Rpb24oY3VycmVudFBvc2l0aW9uKCkgKyBkaXNwbGFjZW1lbnQsIG1faWRlYWxQb3NpdGlvbkZv
ck1pbmltdW1UcmF2ZWwsIG1fY3VycmVudFNjcm9sbC0+ZGlyZWN0aW9uKTsKKyAgICBtX2lkZWFs
UG9zaXRpb24gPSBtX3Njcm9sbGFibGVBcmVhLmNvbnN0cmFpblNjcm9sbFBvc2l0aW9uKGZhcnRo
ZXN0UG9pbnQpOworCisgICAgbV9jdXJyZW50U2Nyb2xsID0gc3RkOjpudWxsb3B0OworfQorCit2
b2lkIFNjcm9sbEFuaW1hdG9yOjpoYW5kbGVLZXlVcEV2ZW50V2hpbGVTY3JvbGxpbmcoKQorewor
ICAgIGlmICghbV9zY3JvbGxUcmlnZ2VyaW5nS2V5SXNQcmVzc2VkKQorICAgICAgICByZXR1cm47
CisKKyAgICBzdG9wS2V5Ym9hcmRTY3JvbGxBbmltYXRpb24oKTsKKyAgICBtX3Njcm9sbFRyaWdn
ZXJpbmdLZXlJc1ByZXNzZWQgPSBmYWxzZTsKK30KKwogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMp
CiBib29sIFNjcm9sbEFuaW1hdG9yOjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91
Y2hFdmVudCYpCiB7CkBAIC0zMzIsNyArNTEyLDcgQEAgdm9pZCBTY3JvbGxBbmltYXRvcjo6c3Rh
cnRBbmltYXRpb25DYWxsYmFjayhTY3JvbGxDb250cm9sbGVyJikKIHsKICAgICBpZiAobV9zY3Jv
bGxDb250cm9sbGVyQW5pbWF0aW9uVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAKKwogICAgIG1fc2Nyb2xsQ29udHJvbGxlckFuaW1hdGlvblRpbWVyLnN0YXJ0UmVw
ZWF0aW5nKDFfcyAvIDYwLik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbEFuaW1hdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmlt
YXRvci5oCmluZGV4IGQ5MmNmZGJkZmJiMDVmMWZhOTEzNGVjNjU4NzVhZmNiOGNlMWQ3OGMuLjBl
ZGQ5MjYzY2ZlNmJkZTUzNThmZTUyOTZlOTdjNTNmMTk3MTg5OWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaApAQCAtMzIsNiArMzIsOCBAQAogI3ByYWdtYSBvbmNl
CiAKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgor
I2luY2x1ZGUgIktleWJvYXJkU2Nyb2xsLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50
LmgiCiAjaW5jbHVkZSAiU2Nyb2xsQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVz
LmgiCkBAIC04MSw2ICs4Myw5IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVX
aGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOwogCisgICAgYm9vbCBiZWdpbktl
eWJvYXJkU2Nyb2xsQW5pbWF0aW9uKHN0ZDo6b3B0aW9uYWw8S2V5Ym9hcmRTY3JvbGw+LCBLZXli
b2FyZEV2ZW50Jik7CisgICAgdm9pZCBoYW5kbGVLZXlVcEV2ZW50V2hpbGVTY3JvbGxpbmcoKTsK
KwogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgdmlydHVhbCBib29sIGhhbmRsZVRvdWNo
RXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50Jik7CiAjZW5kaWYKQEAgLTE3MSw2ICsxNzYs
MTAgQEAgcHJvdGVjdGVkOgogICAgIEZsb2F0UG9pbnQgcG9zaXRpb25Gcm9tT2Zmc2V0KGNvbnN0
IEZsb2F0UG9pbnQmIG9mZnNldCk7CiAgICAgRmxvYXRTaXplIGRlbHRhRnJvbVN0ZXAoU2Nyb2xs
YmFyT3JpZW50YXRpb24sIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpOwogCisgICAgdm9p
ZCB1cGRhdGVLZXlib2FyZFNjcm9sbFBvc2l0aW9uKE1vbm90b25pY1RpbWUpIG92ZXJyaWRlOwor
ICAgIFJlY3RFZGdlczxib29sPiBzY3JvbGxhYmxlRGlyZWN0aW9uc0Zyb21PZmZzZXQoRmxvYXRQ
b2ludCk7CisgICAgdm9pZCBzdG9wS2V5Ym9hcmRTY3JvbGxBbmltYXRpb24oKTsKKwogICAgIFNj
cm9sbGFibGVBcmVhJiBtX3Njcm9sbGFibGVBcmVhOwogICAgIFJlZlB0cjxXaGVlbEV2ZW50VGVz
dE1vbml0b3I+IG1fd2hlZWxFdmVudFRlc3RNb25pdG9yOwogICAgIFNjcm9sbENvbnRyb2xsZXIg
bV9zY3JvbGxDb250cm9sbGVyOwpAQCAtMTc4LDYgKzE4NywxMyBAQCBwcm90ZWN0ZWQ6CiAgICAg
RmxvYXRQb2ludCBtX2N1cnJlbnRQb3NpdGlvbjsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3Jv
bGxBbmltYXRpb24+IG1fc2Nyb2xsQW5pbWF0aW9uOworCisgICAgc3RkOjpvcHRpb25hbDxXZWJD
b3JlOjpLZXlib2FyZFNjcm9sbD4gbV9jdXJyZW50U2Nyb2xsOworICAgIEZsb2F0U2l6ZSBtX3Zl
bG9jaXR5OworICAgIEZsb2F0UG9pbnQgbV9pZGVhbFBvc2l0aW9uOworICAgIGJvb2wgbV9zY3Jv
bGxUcmlnZ2VyaW5nS2V5SXNQcmVzc2VkOworICAgIE1vbm90b25pY1RpbWUgbV90aW1lQXRMYXN0
RnJhbWU7CisgICAgRmxvYXRQb2ludCBtX2lkZWFsUG9zaXRpb25Gb3JNaW5pbXVtVHJhdmVsOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxDb250cm9sbGVyLmNwcAppbmRleCBlOTM3NWJhNzQ3NjhiZGI0NzNiZDhiZjFmZmE0OWI4
MWNmOTk0M2E5Li5mNWNjMWIzNGI4OTU0ZTMzMGI5ZjQxYTYzMTk4NWY4ZWVkYmI3ZjA0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmNwcApAQCAtNDMsMTgg
KzQzLDE4IEBAIFNjcm9sbENvbnRyb2xsZXI6OlNjcm9sbENvbnRyb2xsZXIoU2Nyb2xsQ29udHJv
bGxlckNsaWVudCYgY2xpZW50KQogCiB2b2lkIFNjcm9sbENvbnRyb2xsZXI6OmFuaW1hdGlvbkNh
bGxiYWNrKE1vbm90b25pY1RpbWUgY3VycmVudFRpbWUpCiB7Ci0gICAgTE9HX1dJVEhfU1RSRUFN
KFNjcm9sbGluZywgc3RyZWFtIDw8ICJTY3JvbGxDb250cm9sbGVyICIgPDwgdGhpcyA8PCAiIGFu
aW1hdGlvbkNhbGxiYWNrOiBpc0FuaW1hdGluZ1J1YmJlckJhbmQgIiA8PCBtX2lzQW5pbWF0aW5n
UnViYmVyQmFuZCA8PCAiIGlzQW5pbWF0aW5nU2Nyb2xsU25hcCAiIDw8IG1faXNBbmltYXRpbmdT
Y3JvbGxTbmFwKTsKKyAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgIlNj
cm9sbENvbnRyb2xsZXIgIiA8PCB0aGlzIDw8ICIgYW5pbWF0aW9uQ2FsbGJhY2s6IGlzQW5pbWF0
aW5nUnViYmVyQmFuZCAiIDw8IG1faXNBbmltYXRpbmdSdWJiZXJCYW5kIDw8ICIgaXNBbmltYXRp
bmdTY3JvbGxTbmFwICIgPDwgbV9pc0FuaW1hdGluZ1Njcm9sbFNuYXAgPDwgImlzQW5pbWF0aW5n
S2V5Ym9hcmRTY3JvbGxpbmciIDw8IG1faXNBbmltYXRpbmdLZXlib2FyZFNjcm9sbGluZyk7CiAK
ICAgICB1cGRhdGVTY3JvbGxTbmFwQW5pbWF0aW5nU3RhdGUoY3VycmVudFRpbWUpOwogICAgIHVw
ZGF0ZVJ1YmJlckJhbmRBbmltYXRpbmdTdGF0ZShjdXJyZW50VGltZSk7CisgICAgdXBkYXRlS2V5
Ym9hcmRTY3JvbGxpbmdBbmltYXRpbmdTdGF0ZShjdXJyZW50VGltZSk7CiB9CiAKIHZvaWQgU2Ny
b2xsQ29udHJvbGxlcjo6c3RhcnRPclN0b3BBbmltYXRpb25DYWxsYmFja3MoKQogewotICAgIGJv
b2wgbmVlZHNDYWxsYmFja3MgPSBtX2lzQW5pbWF0aW5nUnViYmVyQmFuZCB8fCBtX2lzQW5pbWF0
aW5nU2Nyb2xsU25hcDsKKyAgICBib29sIG5lZWRzQ2FsbGJhY2tzID0gbV9pc0FuaW1hdGluZ1J1
YmJlckJhbmQgfHwgbV9pc0FuaW1hdGluZ1Njcm9sbFNuYXAgfHwgbV9pc0FuaW1hdGluZ0tleWJv
YXJkU2Nyb2xsaW5nOwogICAgIGlmIChuZWVkc0NhbGxiYWNrcyA9PSBtX2lzUnVubmluZ0FuaW1h
dGluZ0NhbGxiYWNrKQogICAgICAgICByZXR1cm47Ci0KICAgICBpZiAobmVlZHNDYWxsYmFja3Mp
IHsKICAgICAgICAgbV9jbGllbnQuc3RhcnRBbmltYXRpb25DYWxsYmFjaygqdGhpcyk7CiAgICAg
ICAgIG1faXNSdW5uaW5nQW5pbWF0aW5nQ2FsbGJhY2sgPSB0cnVlOwpAQCAtNjUsNiArNjUsMTYg
QEAgdm9pZCBTY3JvbGxDb250cm9sbGVyOjpzdGFydE9yU3RvcEFuaW1hdGlvbkNhbGxiYWNrcygp
CiAgICAgbV9pc1J1bm5pbmdBbmltYXRpbmdDYWxsYmFjayA9IGZhbHNlOwogfQogCit2b2lkIFNj
cm9sbENvbnRyb2xsZXI6OmJlZ2luS2V5Ym9hcmRTY3JvbGxpbmcoKQoreworICAgIHNldElzQW5p
bWF0aW5nS2V5Ym9hcmRTY3JvbGxpbmcodHJ1ZSk7Cit9CisKK3ZvaWQgU2Nyb2xsQ29udHJvbGxl
cjo6c3RvcEtleWJvYXJkU2Nyb2xsaW5nKCkKK3sKKyAgICBzZXRJc0FuaW1hdGluZ0tleWJvYXJk
U2Nyb2xsaW5nKGZhbHNlKTsKK30KKwogdm9pZCBTY3JvbGxDb250cm9sbGVyOjpzZXRJc0FuaW1h
dGluZ1J1YmJlckJhbmQoYm9vbCBpc0FuaW1hdGluZ1J1YmJlckJhbmQpCiB7CiAgICAgaWYgKGlz
QW5pbWF0aW5nUnViYmVyQmFuZCA9PSBtX2lzQW5pbWF0aW5nUnViYmVyQmFuZCkKQEAgLTgzLDYg
KzkzLDE1IEBAIHZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c2V0SXNBbmltYXRpbmdTY3JvbGxTbmFw
KGJvb2wgaXNBbmltYXRpbmdTY3JvbGxTbmFwKQogICAgIHN0YXJ0T3JTdG9wQW5pbWF0aW9uQ2Fs
bGJhY2tzKCk7CiB9CiAKK3ZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c2V0SXNBbmltYXRpbmdLZXli
b2FyZFNjcm9sbGluZyhib29sIGlzQW5pbWF0aW5nS2V5Ym9hcmRTY3JvbGxpbmcpCit7CisgICAg
aWYgKGlzQW5pbWF0aW5nS2V5Ym9hcmRTY3JvbGxpbmcgPT0gbV9pc0FuaW1hdGluZ0tleWJvYXJk
U2Nyb2xsaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2lzQW5pbWF0aW5nS2V5Ym9hcmRT
Y3JvbGxpbmcgPSBpc0FuaW1hdGluZ0tleWJvYXJkU2Nyb2xsaW5nOworICAgIHN0YXJ0T3JTdG9w
QW5pbWF0aW9uQ2FsbGJhY2tzKCk7Cit9CisKIGJvb2wgU2Nyb2xsQ29udHJvbGxlcjo6dXNlc1Nj
cm9sbFNuYXAoKSBjb25zdAogewogICAgIHJldHVybiAhIW1fc2Nyb2xsU25hcFN0YXRlOwpAQCAt
MTk1LDYgKzIxNCwxNSBAQCB2b2lkIFNjcm9sbENvbnRyb2xsZXI6OnJlc25hcEFmdGVyTGF5b3V0
KCkKICAgICAgICAgc2V0TmVhcmVzdFNjcm9sbFNuYXBJbmRleEZvckF4aXNBbmRPZmZzZXQoU2Ny
b2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwgb2Zmc2V0LnkoKSk7CiAKIH0KKwordm9pZCBTY3JvbGxD
b250cm9sbGVyOjp1cGRhdGVLZXlib2FyZFNjcm9sbGluZ0FuaW1hdGluZ1N0YXRlKE1vbm90b25p
Y1RpbWUgY3VycmVudFRpbWUpCit7CisgICAgaWYgKCFtX2lzQW5pbWF0aW5nS2V5Ym9hcmRTY3Jv
bGxpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY2xpZW50LnVwZGF0ZUtleWJvYXJkU2Ny
b2xsUG9zaXRpb24oY3VycmVudFRpbWUpOworfQorCiAvLyBDdXJyZW50bHksIG9ubHkgTWFjIHN1
cHBvcnRzIG1vbWVudHVtIHNyb2xsaW5nLWJhc2VkIHNjcm9sbHNuYXBwaW5nIGFuZCBydWJiZXIg
YmFuZGluZwogLy8gc28gYWxsIG9mIHRoZXNlIG1ldGhvZHMgYXJlIGEgbm9vcCBvbiBub24tTWFj
IHBsYXRmb3Jtcy4KICNpZiAhUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsQ29udHJvbGxlci5oCmluZGV4IDJiNDc1MWVlYThlNDNlNWQ1ZDViMjlmOTMzNDExN2Vk
ZmNiN2NkOGUuLmFkYTY2YzA4NjE2Yjc4YWI5N2JmZTdiNGRkZTM2MzliMGZmNjA3ZjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbENvbnRyb2xsZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmgKQEAgLTcyLDYgKzcyLDgg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzdGFydEFuaW1hdGlvbkNhbGxiYWNrKFNjcm9s
bENvbnRyb2xsZXImKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHN0b3BBbmltYXRpb25DYWxsYmFj
ayhTY3JvbGxDb250cm9sbGVyJikgPSAwOwogCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUtleWJv
YXJkU2Nyb2xsUG9zaXRpb24oTW9ub3RvbmljVGltZSkgeyB9CisKICNpZiBFTkFCTEUoUlVCQkVS
X0JBTkRJTkcpCiAgICAgdmlydHVhbCBib29sIGFsbG93c0hvcml6b250YWxTdHJldGNoaW5nKGNv
bnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgYWxs
b3dzVmVydGljYWxTdHJldGNoaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIGNvbnN0ID0g
MDsKQEAgLTEyMSw2ICsxMjMsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCB1c2VzU2Nyb2xsU25hcCgp
IGNvbnN0OwogICAgIHZvaWQgc3RvcEFsbFRpbWVycygpOwogICAgIHZvaWQgc2Nyb2xsUG9zaXRp
b25DaGFuZ2VkKCk7CisKKyAgICB2b2lkIGJlZ2luS2V5Ym9hcmRTY3JvbGxpbmcoKTsKKyAgICB2
b2lkIHN0b3BLZXlib2FyZFNjcm9sbGluZygpOwogICAgIAogICAgIC8vIFNob3VsZCBiZSBjYWxs
ZWQgcGVyaW9kaWNhbGx5IGJ5IHRoZSBjbGllbnQuIFN0YXJ0ZWQgYnkgc3RhcnRBbmltYXRpb25D
YWxsYmFjaygpLCBzdG9wcGVkIGJ5IHN0b3BBbmltYXRpb25DYWxsYmFjaygpLgogICAgIHZvaWQg
YW5pbWF0aW9uQ2FsbGJhY2soTW9ub3RvbmljVGltZSk7CkBAIC0xNjMsOSArMTY4LDEwIEBAIHBy
aXZhdGU6CiAKICAgICB2b2lkIHVwZGF0ZVNjcm9sbFNuYXBBbmltYXRpbmdTdGF0ZShNb25vdG9u
aWNUaW1lKTsKICAgICB2b2lkIHVwZGF0ZVJ1YmJlckJhbmRBbmltYXRpbmdTdGF0ZShNb25vdG9u
aWNUaW1lKTsKLSAgICAKKyAgICB2b2lkIHVwZGF0ZUtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0aW5n
U3RhdGUoTW9ub3RvbmljVGltZSk7CiAgICAgdm9pZCBzZXRJc0FuaW1hdGluZ1J1YmJlckJhbmQo
Ym9vbCk7CiAgICAgdm9pZCBzZXRJc0FuaW1hdGluZ1Njcm9sbFNuYXAoYm9vbCk7CisgICAgdm9p
ZCBzZXRJc0FuaW1hdGluZ0tleWJvYXJkU2Nyb2xsaW5nKGJvb2wpOwogCiAjaWYgUExBVEZPUk0o
TUFDKQogICAgIHZvaWQgc3RhcnRTY3JvbGxTbmFwQW5pbWF0aW9uKCk7CkBAIC0xOTksNiArMjA1
LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNSdW5uaW5nQW5pbWF0aW5nQ2FsbGJhY2sgeyBm
YWxzZSB9OwogICAgIGJvb2wgbV9pc0FuaW1hdGluZ1J1YmJlckJhbmQgeyBmYWxzZSB9OwogICAg
IGJvb2wgbV9pc0FuaW1hdGluZ1Njcm9sbFNuYXAgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc0Fu
aW1hdGluZ0tleWJvYXJkU2Nyb2xsaW5nIHsgZmFsc2UgfTsKIAogI2lmIFBMQVRGT1JNKE1BQykK
ICAgICBXYWxsVGltZSBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434141</attachid>
            <date>2021-07-23 16:17:51 -0700</date>
            <delta_ts>2021-07-23 16:47:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228009-20210723191750.patch</filename>
            <type>text/plain</type>
            <size>33937</size>
            <attacher name="Dana Estra">dana.estra</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5OTU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTg2OTY2YzRlMjRjN2M1
MDIwZWJmNTMyZWUyZjRhODgzNDBjYjgyYi4uMmE2ZjE2OTAwOGE2ZTdhNzM3ODA1Y2ZmNjY1MDc5
Y2I4ZTVjYjZiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDIxLTA3LTIzICBEYW5h
IEVzdHJhICA8ZGVzdHJhQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQga2V5LWRyaXZlbiBzbW9v
dGggc2Nyb2xsaW5nIHRvIG1hY09TCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjgwMDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBDYXVzZSBrZXlib2FyZCBzY3JvbGwgZXZlbnQgdG8gdHJpZ2dlciBzdGFy
dCBvZiBzbW9vdGggc2Nyb2xsIGFuaW1hdGlvbiwgdXNpbmcgc2FtZSBwaHlzaWNzIGltcGxlbWVu
dGF0aW9uIGFzIGlPUyBzbW9vdGggc2Nyb2xsaW5nLgorCisgICAgICAgIE5vIHRlc3RzIHlldC4K
KworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpkZWZhdWx0RXZlbnRIYW5k
bGVyKToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpFdmVudEhhbmRsZXI6OmRlZmF1bHRLZXlib2FyZEV2ZW50SGFuZGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNjcm9sbERpc3RhbmNlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9LZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9TY3JvbGxBbmltYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6
c3RhcnRBbmltYXRpb25DYWxsYmFjayk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3IuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OmFuaW1hdGlvbkNhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OnN0YXJ0T3JTdG9wQW5pbWF0aW9uQ2FsbGJhY2tz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OmJlZ2luS2V5Ym9hcmRTY3Jv
bGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6c3RvcEtleWJvYXJk
U2Nyb2xsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OnNldElzQW5p
bWF0aW5nS2V5Ym9hcmRTY3JvbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJv
bGxlcjo6dXBkYXRlS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRpbmdTdGF0ZSk6CisgICAgICAgICog
cGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29u
dHJvbGxlckNsaWVudDo6dXBkYXRlS2V5Ym9hcmRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIAog
MjAyMS0wNy0xNSAgVGltIE5ndXllbiAgPG50aW1AYXBwbGUuY29tPgogCiAgICAgICAgIDxkaWFs
b2c+IGVsZW1lbnQ6IGRvIG5vdCBwZXJmb3JtIGNsb3NlKCkgbWV0aG9kIHN0ZXBzIHdoZW4gcmVt
b3Zpbmcgb3BlbiBhdHRyaWJ1dGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
LnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDNjYmZhNWFiNWE0YmY1ODQ0
OTZhYjYxMzNjZTMwOGQ0OTkyM2JhMDIuLmMzZmY0OWQwMTgyODBkMjczN2ZkYTUwMGRhMjRmZmMw
ODZhN2ZkZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xODI3LDYgKzE4MjcsNyBAQCBwbGF0Zm9ybS9G
aWxlSGFuZGxlLmNwcAogcGxhdGZvcm0vRmlsZU1vbml0b3IuY3BwCiBwbGF0Zm9ybS9GaWxlU3Ry
ZWFtLmNwcAogcGxhdGZvcm0vRnJhbWVSYXRlTW9uaXRvci5jcHAKK3BsYXRmb3JtL0tleWJvYXJk
U2Nyb2xsaW5nQW5pbWF0b3IuY3BwCiBwbGF0Zm9ybS9MYXlvdXRVbml0LmNwcAogcGxhdGZvcm0v
TGVnYWN5U2NoZW1lUmVnaXN0cnkuY3BwCiBwbGF0Zm9ybS9MZW5ndGguY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNGExZDc4
NjU0NzY4YmMyODRmZDY3ZDc0NjZkODlhY2JkNjBjY2U5OC4uMWQyNTRkMThhYjQzMzQ3Njk3YTk0
MDk4MTQ3YTg4NmJhMWI3YWVjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjczLDYgKzY3Myw3IEBACiAJCTFGODc1NkIyMUUy
MkMzMzUwMDQyQzQwRCAvKiBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFGODc1NkIxMUUyMkJFRUYw
MDQyQzQwRCAvKiBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxRkFGQkYxOTE1QTVGQTc0MDAw
ODNBMjAgLyogVVRJVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxRkFGQkYxNjE1QTVGQTUyMDAwODNBMjAgLyogVVRJVXRpbGl0aWVzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUZDNDBG
QkExNjU1Q0NCOTAwNDBGMjlFIC8qIFN1YmltYWdlQ2FjaGVXaXRoVGltZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFGQzQwRkI3MTY1NUM1OTEwMDQw
RjI5RSAvKiBTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmggKi87IH07CisJCTFGRDk5MkY4MjZBQTI0
RjkwMDg4RTU5NiAvKiBLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxRkQ5OTJGNjI2QUEyNEY4MDA4OEU1OTYg
LyogS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTIwRDYyOTI3MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDIwRDYyOTI1MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb24uaCAqLzsgfTsKIAkJMjI1QTE2QjUwRDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2ZW50
UmVnaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
MjVBMTZCMzBENUMxMUU5MDAwOTAyOTUgLyogV2ViRXZlbnRSZWdpb24uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyMjhDMjg0NTEwRDgyNTAwMDA5
RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyMjhDMjg0NDEwRDgyNTAwMDA5RDBEMEUgLyogU2NyaXB0V3JhcHBh
YmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTcwNzIsNiArNzA3Myw4IEBACiAJCTFGQUZCRjE3MTVBNUZBNTIwMDA4M0EyMCAvKiBVVElVdGls
aXRpZXMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBVVElVdGls
aXRpZXMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFGQzQwRkI3MTY1NUM1OTEw
MDQwRjI5RSAvKiBTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFN1YmltYWdlQ2FjaGVXaXRoVGltZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMUZDNDBGQjgxNjU1QzU5MTAwNDBGMjlFIC8qIFN1YmltYWdlQ2FjaGVXaXRo
VGltZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3ViaW1hZ2VD
YWNoZVdpdGhUaW1lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFGRDk5MkY2
MjZBQTI0RjgwMDg4RTU5NiAvKiBLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUZEOTkyRjkyNkFBMjU0RDAwODhFNTk2IC8qIEtl
eWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTIwRDYyOTI0MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjBE
NjI5MjUxMjUzNjkwQjAwMDgxNTQzIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjI1QTE2QjMwRDVDMTFFOTAwMDkwMjk1IC8q
IFdlYkV2ZW50UmVnaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkV2
ZW50UmVnaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yODExOCw2ICsyODEy
MSw4IEBACiAJCQkJNDE5MEYzQTMyNDlEMTUyODAwNTMxQzU3IC8qIEZyYW1lUmF0ZU1vbml0b3Iu
aCAqLywKIAkJCQlBODc0OEJERjEyQ0JGMkRDMDAxRkJBNDEgLyogSGFzaFRvb2xzLmggKi8sCiAJ
CQkJQkMzQkMyOUIwRTkxQUIwRjAwODM1NTg4IC8qIEhvc3RXaW5kb3cuaCAqLywKKwkJCQkxRkQ5
OTJGOTI2QUEyNTREMDA4OEU1OTYgLyogS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5jcHAgKi8s
CisJCQkJMUZEOTkyRjYyNkFBMjRGODAwODhFNTk2IC8qIEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0
b3IuaCAqLywKIAkJCQkxQUUwMEQ1NzE4MkRBQzhEMDAwODdERDcgLyogS2V5ZWRDb2RpbmcuaCAq
LywKIAkJCQlFMTVGRjdENDE4Qzk1NTM4MDBGRTRDODcgLyogS2V5cHJlc3NDb21tYW5kLmggKi8s
CiAJCQkJQTNENDJBODQxRjMzQkEzNjAwQTY0QjYyIC8qIExheW91dFVuaXQuY3BwICovLApAQCAt
MzQxNDgsNiArMzQxNTMsNyBAQAogCQkJCTgzQjc0RUY2MUYzRTBCRjIwMDk5NkJDNyAvKiBLZWVw
YWxpdmVSZXF1ZXN0VHJhY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODUwMzFCNDQwQTQ0RUZD
NzAwRjk5MkUwIC8qIEtleWJvYXJkRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFGMDIwQUVG
MjY3ODBGQ0UwMDAwODA5QSAvKiBLZXlib2FyZFNjcm9sbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MUZEOTkyRjgyNkFBMjRGOTAwODhFNTk2IC8qIEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCTFBRTAwRDU5MTgyREFDOEQwMDA4N0RENyAvKiBLZXllZENvZGlu
Zy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE3QTYzQzUxQjc0MzE4RjAwRTdEQ0RDIC8qIEtleWVk
RGVjb2RlckNGLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTdBNjNDNjFCNzQzMTkyMDBFN0RDREMg
LyogS2V5ZWRFbmNvZGVyQ0YuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4IGUy
NDU3N2RmM2Q3NjE3YmU0YjI1NjI3MDhhYjc2ZDhmYzU4MjQ1ZWQuLmQ1NmIyYjk0ZmI4ZjNiZGEw
OWU3ZGYxZGVkNDZkOThmZDQzZGM0NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTI0MzIsNyArMjQz
Miw3IEBAIHZvaWQgTm9kZTo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCYgZXZlbnQpCiAgICAg
aWYgKGV2ZW50LnRhcmdldCgpICE9IHRoaXMpCiAgICAgICAgIHJldHVybjsKICAgICBjb25zdCBB
dG9tU3RyaW5nJiBldmVudFR5cGUgPSBldmVudC50eXBlKCk7Ci0gICAgaWYgKGV2ZW50VHlwZSA9
PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50IHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCku
a2V5cHJlc3NFdmVudCkgeworICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmtleWRv
d25FdmVudCB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQgfHwgZXZl
bnRUeXBlID09IGV2ZW50TmFtZXMoKS5rZXl1cEV2ZW50KSB7CiAgICAgICAgIGlmIChpczxLZXli
b2FyZEV2ZW50PihldmVudCkpIHsKICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1
bWVudCgpLmZyYW1lKCkpCiAgICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLmRl
ZmF1bHRLZXlib2FyZEV2ZW50SGFuZGxlcihkb3duY2FzdDxLZXlib2FyZEV2ZW50PihldmVudCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDA1Y2RhNjU4MTkyNGEyNmNm
NzA1Yzk4Mjk1ZmQ0MjhlNDM2NGY3M2IuLjcxODJjYWU1OWVkOTVmYjc0NjFkNWVlNTRlODcwOTMx
ZDUyYmU0ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTY4LDcgKzY4
LDcgQEAKICNpbmNsdWRlICJJbWFnZU92ZXJsYXlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgotI2lu
Y2x1ZGUgIktleWJvYXJkU2Nyb2xsLmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRTY3JvbGxpbmdBbmlt
YXRvci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAj
aW5jbHVkZSAiTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5oIgpAQCAtMzgwMyw2ICszODAz
LDEwIEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpkZWZhdWx0S2V5Ym9hcmRFdmVudEhhbmRsZXIoS2V5
Ym9hcmRFdmVudCYgZXZlbnQpCiAgICAgICAgIGlmIChldmVudC5jaGFyQ29kZSgpID09ICcgJykK
ICAgICAgICAgICAgIGRlZmF1bHRTcGFjZUV2ZW50SGFuZGxlcihldmVudCk7CiAgICAgfQorICAg
IGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXVwRXZlbnQpIHsKKyAgICAgICAg
RnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS52aWV3KCk7CisgICAgICAgIHJldHVybiB2aWV3LT5z
Y3JvbGxBbmltYXRvcigpLmtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IoKS0+aGFuZGxlS2V5VXBF
dmVudFdoaWxlU2Nyb2xsaW5nKCk7CisgICAgfQogfQogCiAjaWYgRU5BQkxFKERSQUdfU1VQUE9S
VCkKQEAgLTQyMzcsNyArNDI0MSw3IEBAIGZsb2F0IEV2ZW50SGFuZGxlcjo6c2Nyb2xsRGlzdGFu
Y2UoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkKICAgICAgICAg
ICAgIHJldHVybiBtX2ZyYW1lLnZpZXcoKS0+dmVydGljYWxTY3JvbGxiYXIoKTsKICAgICAgICAg
cmV0dXJuIG1fZnJhbWUudmlldygpLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CiAgICAgfSgpOwot
ICAgIAorCiAgICAgc3dpdGNoIChncmFudWxhcml0eSkgewogICAgIGNhc2UgU2Nyb2xsR3JhbnVs
YXJpdHk6OlNjcm9sbEJ5TGluZToKICAgICAgICAgcmV0dXJuIHNjcm9sbGJhci0+bGluZVN0ZXAo
KTsKQEAgLTQyNTUsNTkgKzQyNTksOCBAQCBmbG9hdCBFdmVudEhhbmRsZXI6OnNjcm9sbERpc3Rh
bmNlKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5CiBib29sIEV2
ZW50SGFuZGxlcjo6aGFuZGxlS2V5Ym9hcmRTY3JvbGxpbmcoS2V5Ym9hcmRFdmVudCYgZXZlbnQp
CiB7CiAgICAgUmVmIHByb3RlY3RlZEZyYW1lID0gbV9mcmFtZTsKLSAgICAvLyBGSVhNRSAoYnVn
IDIyNzQ1OSk6IFRoaXMgbG9naWMgZG9lcyBub3QgYWNjb3VudCBmb3Igd3JpdGluZy1tb2RlLgot
Ci0gICAgZW51bSBjbGFzcyBLZXkgOiB1aW50OF90IHsgTGVmdEFycm93LCBSaWdodEFycm93LCBV
cEFycm93LCBEb3duQXJyb3csIFNwYWNlIH07Ci0KLSAgICBLZXkga2V5OwotICAgIGlmIChldmVu
dC5rZXlJZGVudGlmaWVyKCkgPT0gIkxlZnQiKQotICAgICAgICBrZXkgPSBLZXk6OkxlZnRBcnJv
dzsKLSAgICBlbHNlIGlmIChldmVudC5rZXlJZGVudGlmaWVyKCkgPT0gIlJpZ2h0IikKLSAgICAg
ICAga2V5ID0gS2V5OjpSaWdodEFycm93OwotICAgIGVsc2UgaWYgKGV2ZW50LmtleUlkZW50aWZp
ZXIoKSA9PSAiVXAiKQotICAgICAgICBrZXkgPSBLZXk6OlVwQXJyb3c7Ci0gICAgZWxzZSBpZiAo
ZXZlbnQua2V5SWRlbnRpZmllcigpID09ICJEb3duIikKLSAgICAgICAga2V5ID0gS2V5OjpEb3du
QXJyb3c7Ci0gICAgZWxzZSBpZiAoZXZlbnQuY2hhckNvZGUoKSA9PSAnICcpCi0gICAgICAgIGtl
eSA9IEtleTo6U3BhY2U7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBh
dXRvIGdyYW51bGFyaXR5ID0gWyZdIHsKLSAgICAgICAgc3dpdGNoIChrZXkpIHsKLSAgICAgICAg
Y2FzZSBLZXk6OkxlZnRBcnJvdzoKLSAgICAgICAgY2FzZSBLZXk6OlJpZ2h0QXJyb3c6Ci0gICAg
ICAgICAgICByZXR1cm4gZXZlbnQuYWx0S2V5KCkgPyBTY3JvbGxHcmFudWxhcml0eTo6U2Nyb2xs
QnlQYWdlIDogU2Nyb2xsR3JhbnVsYXJpdHk6OlNjcm9sbEJ5TGluZTsKLSAgICAgICAgY2FzZSBL
ZXk6OlVwQXJyb3c6Ci0gICAgICAgIGNhc2UgS2V5OjpEb3duQXJyb3c6Ci0gICAgICAgICAgICBp
ZiAoZXZlbnQubWV0YUtleSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBTY3JvbGxHcmFudWxh
cml0eTo6U2Nyb2xsQnlEb2N1bWVudDsKLSAgICAgICAgICAgIGlmIChldmVudC5hbHRLZXkoKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gU2Nyb2xsR3JhbnVsYXJpdHk6OlNjcm9sbEJ5UGFnZTsK
LSAgICAgICAgICAgIHJldHVybiBTY3JvbGxHcmFudWxhcml0eTo6U2Nyb2xsQnlMaW5lOwotICAg
ICAgICBjYXNlIEtleTo6U3BhY2U6Ci0gICAgICAgICAgICByZXR1cm4gU2Nyb2xsR3JhbnVsYXJp
dHk6OlNjcm9sbEJ5UGFnZTsKLSAgICAgICAgfTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICB9KCk7Ci0KLSAgICBhdXRvIGRpcmVjdGlvbiA9IFsmXSB7Ci0gICAg
ICAgIHN3aXRjaCAoa2V5KSB7Ci0gICAgICAgIGNhc2UgS2V5OjpMZWZ0QXJyb3c6Ci0gICAgICAg
ICAgICByZXR1cm4gU2Nyb2xsRGlyZWN0aW9uOjpTY3JvbGxMZWZ0OwotICAgICAgICBjYXNlIEtl
eTo6UmlnaHRBcnJvdzoKLSAgICAgICAgICAgIHJldHVybiBTY3JvbGxEaXJlY3Rpb246OlNjcm9s
bFJpZ2h0OwotICAgICAgICBjYXNlIEtleTo6VXBBcnJvdzoKLSAgICAgICAgICAgIHJldHVybiBT
Y3JvbGxEaXJlY3Rpb246OlNjcm9sbFVwOwotICAgICAgICBjYXNlIEtleTo6RG93bkFycm93Ogot
ICAgICAgICAgICAgcmV0dXJuIFNjcm9sbERpcmVjdGlvbjo6U2Nyb2xsRG93bjsKLSAgICAgICAg
Y2FzZSBLZXk6OlNwYWNlOgotICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnNoaWZ0S2V5KCkgPyBT
Y3JvbGxEaXJlY3Rpb246OlNjcm9sbFVwIDogU2Nyb2xsRGlyZWN0aW9uOjpTY3JvbGxEb3duOwot
ICAgICAgICB9Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfSgp
OwotCi0gICAgcmV0dXJuIEV2ZW50SGFuZGxlcjo6c2Nyb2xsUmVjdXJzaXZlbHkoZGlyZWN0aW9u
LCBncmFudWxhcml0eSwgbnVsbHB0cik7CisgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS52
aWV3KCk7CisgICAgcmV0dXJuIHZpZXctPnNjcm9sbEFuaW1hdG9yKCkua2V5Ym9hcmRTY3JvbGxp
bmdBbmltYXRvcigpLT5iZWdpbktleWJvYXJkU2Nyb2xsR2VzdHVyZShldmVudCk7CiB9CiAKIHZv
aWQgRXZlbnRIYW5kbGVyOjpkZWZhdWx0QXJyb3dFdmVudEhhbmRsZXIoRm9jdXNEaXJlY3Rpb24g
Zm9jdXNEaXJlY3Rpb24sIEtleWJvYXJkRXZlbnQmIGV2ZW50KQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9LZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lYWRjZjIwNTY2M2Q3NjBmYWY4NTcxYzAwNGQ1OTdjZDQxOTIwMmFkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5j
cHAKQEAgLTAsMCArMSwzMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5oIgorCisjaW5jbHVkZSAiRXZlbnRO
YW1lcy5oIgorI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCisjaW5jbHVkZSAiU2Nyb2xsYWJsZUFy
ZWEuaCIKKyNpbmNsdWRlICJXcml0aW5nTW9kZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3I6OktleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IoU2Ny
b2xsQW5pbWF0b3ImIHNjcm9sbEFuaW1hdG9yLCBTY3JvbGxDb250cm9sbGVyJiBzY3JvbGxDb250
cm9sbGVyKQorICAgIDogbV9zY3JvbGxBbmltYXRvcihzY3JvbGxBbmltYXRvcikKKyAgICAsIG1f
c2Nyb2xsQ29udHJvbGxlcihzY3JvbGxDb250cm9sbGVyKQoreworfQorCitSZWN0RWRnZXM8Ym9v
bD4gS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcjo6c2Nyb2xsYWJsZURpcmVjdGlvbnNGcm9tT2Zm
c2V0KEZsb2F0UG9pbnQgb2Zmc2V0KSBjb25zdAoreworICAgIGF1dG8gbWluaW11bVNjcm9sbFBv
c2l0aW9uID0gbV9zY3JvbGxBbmltYXRvci5zY3JvbGxhYmxlQXJlYSgpLm1pbmltdW1TY3JvbGxQ
b3NpdGlvbigpOworICAgIGF1dG8gbWF4aW11bVNjcm9sbFBvc2l0aW9uID0gbV9zY3JvbGxBbmlt
YXRvci5zY3JvbGxhYmxlQXJlYSgpLm1heGltdW1TY3JvbGxQb3NpdGlvbigpOworCisgICAgUmVj
dEVkZ2VzPGJvb2w+IGVkZ2VzOworCisgICAgZWRnZXMuc2V0VG9wKG9mZnNldC55KCkgPiBtaW5p
bXVtU2Nyb2xsUG9zaXRpb24ueSgpKTsKKyAgICBlZGdlcy5zZXRCb3R0b20ob2Zmc2V0LnkoKSA8
IG1heGltdW1TY3JvbGxQb3NpdGlvbi55KCkpOworICAgIGVkZ2VzLnNldExlZnQob2Zmc2V0Lngo
KSA+IG1pbmltdW1TY3JvbGxQb3NpdGlvbi54KCkpOworICAgIGVkZ2VzLnNldFJpZ2h0KG9mZnNl
dC54KCkgPCBtYXhpbXVtU2Nyb2xsUG9zaXRpb24ueCgpKTsKKworICAgIHJldHVybiBlZGdlczsK
K30KKworc3RhdGljIEJveFNpZGUgYm94U2lkZUZvckRpcmVjdGlvbihTY3JvbGxEaXJlY3Rpb24g
ZGlyZWN0aW9uKQoreworICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBTY3JvbGxE
aXJlY3Rpb246OlNjcm9sbFVwOgorICAgICAgICByZXR1cm4gQm94U2lkZTo6VG9wOworICAgIGNh
c2UgU2Nyb2xsRGlyZWN0aW9uOjpTY3JvbGxEb3duOgorICAgICAgICByZXR1cm4gQm94U2lkZTo6
Qm90dG9tOworICAgIGNhc2UgU2Nyb2xsRGlyZWN0aW9uOjpTY3JvbGxMZWZ0OgorICAgICAgICBy
ZXR1cm4gQm94U2lkZTo6TGVmdDsKKyAgICBjYXNlIFNjcm9sbERpcmVjdGlvbjo6U2Nyb2xsUmln
aHQ6CisgICAgICAgIHJldHVybiBCb3hTaWRlOjpSaWdodDsKKyAgICB9CisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEJveFNpZGU6OlRvcDsKK30KKworc3RhdGljIEZsb2F0
U2l6ZSBwZXJwZW5kaWN1bGFyQWJzb2x1dGVVbml0VmVjdG9yKFNjcm9sbERpcmVjdGlvbiBkaXJl
Y3Rpb24pCit7CisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBjYXNlIFNjcm9sbERpcmVj
dGlvbjo6U2Nyb2xsVXA6CisgICAgY2FzZSBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbERvd246Cisg
ICAgICAgIHJldHVybiB7IDEsIDAgfTsKKyAgICBjYXNlIFNjcm9sbERpcmVjdGlvbjo6U2Nyb2xs
TGVmdDoKKyAgICBjYXNlIFNjcm9sbERpcmVjdGlvbjo6U2Nyb2xsUmlnaHQ6CisgICAgICAgIHJl
dHVybiB7IDAsIDEgfTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIHsgfTsKK30KKwordm9pZCBLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yOjp1cGRhdGVLZXli
b2FyZFNjcm9sbFBvc2l0aW9uKE1vbm90b25pY1RpbWUgY3VycmVudFRpbWUpCit7CisgICAgYXV0
byBmb3JjZSA9IEZsb2F0U2l6ZSB7IH07CisgICAgYXV0byBheGVzVG9BcHBseVNwcmluZyA9IEZs
b2F0U2l6ZSB7IDEsIDEgfTsKKyAgICBLZXlib2FyZFNjcm9sbFBhcmFtZXRlcnMgcGFyYW1zID0g
S2V5Ym9hcmRTY3JvbGxQYXJhbWV0ZXJzOjpwYXJhbWV0ZXJzKCk7CisKKyAgICBpZiAobV9jdXJy
ZW50S2V5Ym9hcmRTY3JvbGwpIHsKKyAgICAgICAgYXV0byBzY3JvbGxhYmxlRGlyZWN0aW9ucyA9
IHNjcm9sbGFibGVEaXJlY3Rpb25zRnJvbU9mZnNldChtX3Njcm9sbEFuaW1hdG9yLmN1cnJlbnRQ
b3NpdGlvbigpKTsKKyAgICAgICAgYXV0byBkaXJlY3Rpb24gPSBtX2N1cnJlbnRLZXlib2FyZFNj
cm9sbC0+ZGlyZWN0aW9uOworCisgICAgICAgIGlmIChzY3JvbGxhYmxlRGlyZWN0aW9ucy5hdChi
b3hTaWRlRm9yRGlyZWN0aW9uKGRpcmVjdGlvbikpKSB7CisKKyAgICAgICAgICAgIC8vIEFwcGx5
IHRoZSBzY3JvbGxpbmcgZm9yY2UuIE9ubHkgYXBwbHkgdGhlIHNwcmluZyBpbiB0aGUgcGVycGVu
ZGljdWxhciBheGlzLAorICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0IGRyYWdzIGFnYWluc3Qg
dGhlIGRpcmVjdGlvbiBvZiBtb3Rpb24uCisgICAgICAgICAgICBheGVzVG9BcHBseVNwcmluZyA9
IHBlcnBlbmRpY3VsYXJBYnNvbHV0ZVVuaXRWZWN0b3IoZGlyZWN0aW9uKTsKKyAgICAgICAgICAg
IGZvcmNlID0gbV9jdXJyZW50S2V5Ym9hcmRTY3JvbGwtPmZvcmNlOworICAgICAgICB9IGVsc2Ug
eworCisgICAgICAgICAgICAvLyBUaGUgc2Nyb2xsIHZpZXcgY2Fubm90IHNjcm9sbCBpbiB0aGlz
IGRpcmVjdGlvbiwgYW5kIGlzIHJ1YmJlci1iYW5kaW5nLgorICAgICAgICAgICAgLy8gQXBwbHkg
YSBjb25zdGFudCBhbmQgc2lnbmlmaWNhbnQgZm9yY2U7IG90aGVyd2lzZSwgdGhlIGZvcmNlIGZv
ciBhCisgICAgICAgICAgICAvLyBzaW5nbGUtbGluZSBpbmNyZW1lbnQgaXMgbm90IHN0cm9uZyBl
bm91Z2ggdG8gcnViYmVyLWJhbmQgcGVyY2VwdGlibHkuCisgICAgICAgICAgICBmb3JjZSA9IHVu
aXRWZWN0b3JGb3JTY3JvbGxEaXJlY3Rpb24oZGlyZWN0aW9uKS5zY2FsZWQocGFyYW1zLnJ1YmJl
ckJhbmRGb3JjZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZmFicyhtX3ZlbG9jaXR5Lndp
ZHRoKCkpID49IGZhYnMobV9jdXJyZW50S2V5Ym9hcmRTY3JvbGwtPm1heGltdW1WZWxvY2l0eS53
aWR0aCgpKSkKKyAgICAgICAgICAgIGZvcmNlLnNldFdpZHRoKDApOworCisgICAgICAgIGlmIChm
YWJzKG1fdmVsb2NpdHkuaGVpZ2h0KCkpID49IGZhYnMobV9jdXJyZW50S2V5Ym9hcmRTY3JvbGwt
Pm1heGltdW1WZWxvY2l0eS5oZWlnaHQoKSkpCisgICAgICAgICAgICBmb3JjZS5zZXRIZWlnaHQo
MCk7CisgICAgfQorCisgICAgU2Nyb2xsUG9zaXRpb24gaWRlYWxQb3NpdGlvbiA9IG1fc2Nyb2xs
QW5pbWF0b3Iuc2Nyb2xsYWJsZUFyZWEoKS5jb25zdHJhaW5TY3JvbGxQb3NpdGlvbihJbnRQb2lu
dChtX2N1cnJlbnRLZXlib2FyZFNjcm9sbCA/IG1fc2Nyb2xsQW5pbWF0b3IuY3VycmVudFBvc2l0
aW9uKCkgOiBtX2lkZWFsUG9zaXRpb24pKTsKKyAgICBGbG9hdFNpemUgZGlzcGxhY2VtZW50ID0g
bV9zY3JvbGxBbmltYXRvci5jdXJyZW50UG9zaXRpb24oKSAtIGlkZWFsUG9zaXRpb247CisKKyAg
ICBhdXRvIHNwcmluZ0ZvcmNlID0gLSBkaXNwbGFjZW1lbnQuc2NhbGVkKHBhcmFtcy5zcHJpbmdT
dGlmZm5lc3MpIC0gbV92ZWxvY2l0eS5zY2FsZWQocGFyYW1zLnNwcmluZ0RhbXBpbmcpOworICAg
IGZvcmNlICs9IHNwcmluZ0ZvcmNlICogYXhlc1RvQXBwbHlTcHJpbmc7CisKKyAgICBmbG9hdCBm
cmFtZUR1cmF0aW9uID0gKGN1cnJlbnRUaW1lIC0gbV90aW1lQXRMYXN0RnJhbWUpLnZhbHVlKCk7
CisgICAgbV90aW1lQXRMYXN0RnJhbWUgPSBjdXJyZW50VGltZTsKKworICAgIEZsb2F0U2l6ZSBh
Y2NlbGVyYXRpb24gPSBmb3JjZS5zY2FsZWQoMS4gLyBwYXJhbXMuc3ByaW5nTWFzcyk7CisgICAg
bV92ZWxvY2l0eSArPSBhY2NlbGVyYXRpb24uc2NhbGVkKGZyYW1lRHVyYXRpb24pOworICAgIEZs
b2F0UG9pbnQgbmV3UG9zaXRpb24gPSBtX3Njcm9sbEFuaW1hdG9yLmN1cnJlbnRQb3NpdGlvbigp
ICsgbV92ZWxvY2l0eS5zY2FsZWQoZnJhbWVEdXJhdGlvbik7CisKKyAgICBtX3Njcm9sbEFuaW1h
dG9yLnNjcm9sbFRvUG9zaXRpb25XaXRob3V0QW5pbWF0aW9uKG5ld1Bvc2l0aW9uKTsKKworICAg
IGlmICghbV9zY3JvbGxUcmlnZ2VyaW5nS2V5SXNQcmVzc2VkICYmIG1fdmVsb2NpdHkuZGlhZ29u
YWxMZW5ndGhTcXVhcmVkKCkgPCAxKSB7CisgICAgICAgIG1fc2Nyb2xsQ29udHJvbGxlci5zdG9w
S2V5Ym9hcmRTY3JvbGxpbmcoKTsKKyAgICAgICAgbV92ZWxvY2l0eSA9IHsgfTsKKyAgICB9Cit9
CisKK2Zsb2F0IEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3I6OnNjcm9sbERpc3RhbmNlKFNjcm9s
bERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQorewor
ICAgIGF1dG8gc2Nyb2xsYmFyID0gWyZdIHsKKyAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBTY3Jv
bGxEaXJlY3Rpb246OlNjcm9sbFVwIHx8IGRpcmVjdGlvbiA9PSBTY3JvbGxEaXJlY3Rpb246OlNj
cm9sbERvd24pCisgICAgICAgICAgICByZXR1cm4gbV9zY3JvbGxBbmltYXRvci5zY3JvbGxhYmxl
QXJlYSgpLnZlcnRpY2FsU2Nyb2xsYmFyKCk7CisgICAgICAgIHJldHVybiBtX3Njcm9sbEFuaW1h
dG9yLnNjcm9sbGFibGVBcmVhKCkuaG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgIH0oKTsKKwor
ICAgIHN3aXRjaCAoZ3JhbnVsYXJpdHkpIHsKKyAgICBjYXNlIFNjcm9sbEdyYW51bGFyaXR5OjpT
Y3JvbGxCeUxpbmU6CisgICAgICAgIHJldHVybiBzY3JvbGxiYXItPmxpbmVTdGVwKCk7CisgICAg
Y2FzZSBTY3JvbGxHcmFudWxhcml0eTo6U2Nyb2xsQnlQYWdlOgorICAgICAgICByZXR1cm4gc2Ny
b2xsYmFyLT5wYWdlU3RlcCgpOworICAgIGNhc2UgU2Nyb2xsR3JhbnVsYXJpdHk6OlNjcm9sbEJ5
RG9jdW1lbnQ6CisgICAgICAgIHJldHVybiBzY3JvbGxiYXItPnRvdGFsU2l6ZSgpOworICAgIGNh
c2UgU2Nyb2xsR3JhbnVsYXJpdHk6OlNjcm9sbEJ5UGl4ZWw6CisgICAgICAgIHJldHVybiBzY3Jv
bGxiYXItPnBpeGVsU3RlcCgpOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8S2V5Ym9hcmRTY3JvbGw+IEtleWJvYXJkU2Nyb2xs
aW5nQW5pbWF0b3I6OmtleWJvYXJkU2Nyb2xsRm9yS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50
JiBldmVudCkKK3sKKyAgICAvLyBGSVhNRSAoYnVnIDIyNzQ1OSk6IFRoaXMgbG9naWMgZG9lcyBu
b3QgYWNjb3VudCBmb3Igd3JpdGluZy1tb2RlLgorCisgICAgZW51bSBjbGFzcyBLZXkgOiB1aW50
OF90IHsgTGVmdEFycm93LCBSaWdodEFycm93LCBVcEFycm93LCBEb3duQXJyb3csIFNwYWNlIH07
CisKKyAgICBLZXkga2V5OworICAgIGlmIChldmVudC5rZXlJZGVudGlmaWVyKCkgPT0gIkxlZnQi
KQorICAgICAgICBrZXkgPSBLZXk6OkxlZnRBcnJvdzsKKyAgICBlbHNlIGlmIChldmVudC5rZXlJ
ZGVudGlmaWVyKCkgPT0gIlJpZ2h0IikKKyAgICAgICAga2V5ID0gS2V5OjpSaWdodEFycm93Owor
ICAgIGVsc2UgaWYgKGV2ZW50LmtleUlkZW50aWZpZXIoKSA9PSAiVXAiKQorICAgICAgICBrZXkg
PSBLZXk6OlVwQXJyb3c7CisgICAgZWxzZSBpZiAoZXZlbnQua2V5SWRlbnRpZmllcigpID09ICJE
b3duIikKKyAgICAgICAga2V5ID0gS2V5OjpEb3duQXJyb3c7CisgICAgZWxzZSBpZiAoZXZlbnQu
Y2hhckNvZGUoKSA9PSAnICcpCisgICAgICAgIGtleSA9IEtleTo6U3BhY2U7CisgICAgZWxzZQor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgYXV0byBncmFudWxhcml0eSA9IFsm
XSB7CisgICAgICAgIHN3aXRjaCAoa2V5KSB7CisgICAgICAgIGNhc2UgS2V5OjpMZWZ0QXJyb3c6
CisgICAgICAgIGNhc2UgS2V5OjpSaWdodEFycm93OgorICAgICAgICAgICAgcmV0dXJuIGV2ZW50
LmFsdEtleSgpID8gU2Nyb2xsR3JhbnVsYXJpdHk6OlNjcm9sbEJ5UGFnZSA6IFNjcm9sbEdyYW51
bGFyaXR5OjpTY3JvbGxCeUxpbmU7CisgICAgICAgIGNhc2UgS2V5OjpVcEFycm93OgorICAgICAg
ICBjYXNlIEtleTo6RG93bkFycm93OgorICAgICAgICAgICAgaWYgKGV2ZW50Lm1ldGFLZXkoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gU2Nyb2xsR3JhbnVsYXJpdHk6OlNjcm9sbEJ5RG9jdW1l
bnQ7CisgICAgICAgICAgICBpZiAoZXZlbnQuYWx0S2V5KCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIFNjcm9sbEdyYW51bGFyaXR5OjpTY3JvbGxCeVBhZ2U7CisgICAgICAgICAgICByZXR1cm4g
U2Nyb2xsR3JhbnVsYXJpdHk6OlNjcm9sbEJ5TGluZTsKKyAgICAgICAgY2FzZSBLZXk6OlNwYWNl
OgorICAgICAgICAgICAgcmV0dXJuIFNjcm9sbEdyYW51bGFyaXR5OjpTY3JvbGxCeVBhZ2U7Cisg
ICAgICAgIH07CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfSgp
OworCisgICAgYXV0byBkaXJlY3Rpb24gPSBbJl0geworICAgICAgICBzd2l0Y2ggKGtleSkgewor
ICAgICAgICBjYXNlIEtleTo6TGVmdEFycm93OgorICAgICAgICAgICAgcmV0dXJuIFNjcm9sbERp
cmVjdGlvbjo6U2Nyb2xsTGVmdDsKKyAgICAgICAgY2FzZSBLZXk6OlJpZ2h0QXJyb3c6CisgICAg
ICAgICAgICByZXR1cm4gU2Nyb2xsRGlyZWN0aW9uOjpTY3JvbGxSaWdodDsKKyAgICAgICAgY2Fz
ZSBLZXk6OlVwQXJyb3c6CisgICAgICAgICAgICByZXR1cm4gU2Nyb2xsRGlyZWN0aW9uOjpTY3Jv
bGxVcDsKKyAgICAgICAgY2FzZSBLZXk6OkRvd25BcnJvdzoKKyAgICAgICAgICAgIHJldHVybiBT
Y3JvbGxEaXJlY3Rpb246OlNjcm9sbERvd247CisgICAgICAgIGNhc2UgS2V5OjpTcGFjZToKKyAg
ICAgICAgICAgIHJldHVybiBldmVudC5zaGlmdEtleSgpID8gU2Nyb2xsRGlyZWN0aW9uOjpTY3Jv
bGxVcCA6IFNjcm9sbERpcmVjdGlvbjo6U2Nyb2xsRG93bjsKKyAgICAgICAgfQorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0oKTsKKworICAgIGZsb2F0IGRpc3Rh
bmNlID0gc2Nyb2xsRGlzdGFuY2UoZGlyZWN0aW9uLCBncmFudWxhcml0eSk7CisKKyAgICBLZXli
b2FyZFNjcm9sbCBzY3JvbGw7CisKKyAgICBzY3JvbGwub2Zmc2V0ID0gdW5pdFZlY3RvckZvclNj
cm9sbERpcmVjdGlvbihkaXJlY3Rpb24pLnNjYWxlZChkaXN0YW5jZSk7CisgICAgc2Nyb2xsLmdy
YW51bGFyaXR5ID0gZ3JhbnVsYXJpdHk7CisgICAgc2Nyb2xsLmRpcmVjdGlvbiA9IGRpcmVjdGlv
bjsKKyAgICBzY3JvbGwubWF4aW11bVZlbG9jaXR5ID0gc2Nyb2xsLm9mZnNldC5zY2FsZWQoS2V5
Ym9hcmRTY3JvbGxQYXJhbWV0ZXJzOjpwYXJhbWV0ZXJzKCkubWF4aW11bVZlbG9jaXR5TXVsdGlw
bGllcik7CisgICAgc2Nyb2xsLmZvcmNlID0gc2Nyb2xsLm1heGltdW1WZWxvY2l0eS5zY2FsZWQo
S2V5Ym9hcmRTY3JvbGxQYXJhbWV0ZXJzOjpwYXJhbWV0ZXJzKCkuc3ByaW5nTWFzcyAvIEtleWJv
YXJkU2Nyb2xsUGFyYW1ldGVyczo6cGFyYW1ldGVycygpLnRpbWVUb01heGltdW1WZWxvY2l0eSk7
CisKKyAgICByZXR1cm4gc2Nyb2xsOworfQorCitib29sIEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0
b3I6OmJlZ2luS2V5Ym9hcmRTY3JvbGxHZXN0dXJlKEtleWJvYXJkRXZlbnQmIGV2ZW50KQorewor
ICAgIGF1dG8gc2Nyb2xsID0ga2V5Ym9hcmRTY3JvbGxGb3JLZXlib2FyZEV2ZW50KGV2ZW50KTsK
KworICAgIGlmICghc2Nyb2xsKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2N1cnJl
bnRLZXlib2FyZFNjcm9sbCA9IHNjcm9sbDsKKworICAgIGlmIChldmVudC50eXBlKCkgIT0gZXZl
bnROYW1lcygpLmtleWRvd25FdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYg
KG1fc2Nyb2xsVHJpZ2dlcmluZ0tleUlzUHJlc3NlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKG1fY3VycmVudEtleWJvYXJkU2Nyb2xsLT5ncmFudWxhcml0eSA9PSBTY3JvbGxH
cmFudWxhcml0eTo6U2Nyb2xsQnlEb2N1bWVudCkgeworICAgICAgICBtX3ZlbG9jaXR5ID0geyB9
OworICAgICAgICBzdG9wS2V5Ym9hcmRTY3JvbGxBbmltYXRpb24oKTsKKyAgICAgICAgYXV0byBu
ZXdQb3NpdGlvbiA9IEludFBvaW50KG1fc2Nyb2xsQW5pbWF0b3IuY3VycmVudFBvc2l0aW9uKCkg
KyBtX2N1cnJlbnRLZXlib2FyZFNjcm9sbC0+b2Zmc2V0KTsKKyAgICAgICAgbV9zY3JvbGxBbmlt
YXRvci5zY3JvbGxUb1Bvc2l0aW9uV2l0aEFuaW1hdGlvbihuZXdQb3NpdGlvbik7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIG1fdGltZUF0TGFzdEZyYW1lID0gTW9ub3Rvbmlj
VGltZTo6bm93KCk7CisgICAgbV9zY3JvbGxUcmlnZ2VyaW5nS2V5SXNQcmVzc2VkID0gdHJ1ZTsK
KworICAgIG1faWRlYWxQb3NpdGlvbkZvck1pbmltdW1UcmF2ZWwgPSBtX3Njcm9sbEFuaW1hdG9y
LmN1cnJlbnRQb3NpdGlvbigpICsgbV9jdXJyZW50S2V5Ym9hcmRTY3JvbGwtPm9mZnNldDsKKyAg
ICBtX3Njcm9sbENvbnRyb2xsZXIuYmVnaW5LZXlib2FyZFNjcm9sbGluZygpOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3N0YXRpYyBTY3JvbGxQb3NpdGlvbiBmYXJ0aGVzdFBvaW50SW5EaXJl
Y3Rpb24oRmxvYXRQb2ludCBhLCBGbG9hdFBvaW50IGIsIFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rp
b24pCit7CisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBjYXNlIFNjcm9sbERpcmVjdGlv
bjo6U2Nyb2xsVXA6CisgICAgICAgIHJldHVybiBTY3JvbGxQb3NpdGlvbihhLngoKSwgc3RkOjpt
aW4oYS55KCksIGIueSgpKSk7CisgICAgY2FzZSBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbERvd246
CisgICAgICAgIHJldHVybiBTY3JvbGxQb3NpdGlvbihhLngoKSwgc3RkOjptYXgoYS55KCksIGIu
eSgpKSk7CisgICAgY2FzZSBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbExlZnQ6CisgICAgICAgIHJl
dHVybiBTY3JvbGxQb3NpdGlvbihzdGQ6Om1pbihhLngoKSwgYi54KCkpLCBhLnkoKSk7CisgICAg
Y2FzZSBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbFJpZ2h0OgorICAgICAgICByZXR1cm4gU2Nyb2xs
UG9zaXRpb24oc3RkOjptYXgoYS54KCksIGIueCgpKSwgYS55KCkpOworICAgIH0KKworICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB7IH07Cit9CisKK3ZvaWQgS2V5Ym9hcmRT
Y3JvbGxpbmdBbmltYXRvcjo6c3RvcEtleWJvYXJkU2Nyb2xsQW5pbWF0aW9uKCkKK3sKKyAgICBp
ZiAoIW1fY3VycmVudEtleWJvYXJkU2Nyb2xsKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRv
IHBhcmFtcyA9IEtleWJvYXJkU2Nyb2xsUGFyYW1ldGVyczo6cGFyYW1ldGVycygpOworCisgICAg
Ly8gRGV0ZXJtaW5lIHRoZSBzZXR0bGluZyBwb3NpdGlvbiBvZiB0aGUgc3ByaW5nLCBjb25zZXJ2
aW5nIHRoZSBzeXN0ZW0ncyBjdXJyZW50IGVuZXJneS4KKyAgICAvLyBLaW5ldGljID0gZWxhc3Rp
YyBwb3RlbnRpYWwKKyAgICAvLyAxLzIgKiBtICogdl4yID0gMS8yICogayAqIHheMgorICAgIC8v
IHggPSBzcXJ0KHZeMiAqIG0gLyBrKQorICAgIGF1dG8gZGlzcGxhY2VtZW50TWFnbml0dWRlU3F1
YXJlZCA9IChtX3ZlbG9jaXR5ICogbV92ZWxvY2l0eSkuc2NhbGVkKHBhcmFtcy5zcHJpbmdNYXNz
IC8gcGFyYW1zLnNwcmluZ1N0aWZmbmVzcyk7CisgICAgRmxvYXRTaXplIGRpc3BsYWNlbWVudCA9
IHsKKyAgICAgICAgc3RkOjpjb3B5c2lnbihzcXJ0KGRpc3BsYWNlbWVudE1hZ25pdHVkZVNxdWFy
ZWQud2lkdGgoKSksIG1fdmVsb2NpdHkud2lkdGgoKSksCisgICAgICAgIHN0ZDo6Y29weXNpZ24o
c3FydChkaXNwbGFjZW1lbnRNYWduaXR1ZGVTcXVhcmVkLmhlaWdodCgpKSwgbV92ZWxvY2l0eS5o
ZWlnaHQoKSkKKyAgICB9OworCisgICAgLy8gSWYgdGhlIHNwcmluZyB3b3VsZCBzZXR0bGUgYmVm
b3JlIHRoZSBtaW5pbXVtIHRyYXZlbCBkaXN0YW5jZQorICAgIC8vIGZvciBhbiBpbnN0YW50YW5l
b3VzIHRhcCwgbW92ZSB0aGUgc2V0dGxpbmcgcG9zaXRpb24gb2YgdGhlIHNwcmluZworICAgIC8v
IG91dCB0byB0aGF0IHBvaW50LgorICAgIFNjcm9sbFBvc2l0aW9uIGZhcnRoZXN0UG9pbnQgPSBm
YXJ0aGVzdFBvaW50SW5EaXJlY3Rpb24obV9zY3JvbGxBbmltYXRvci5jdXJyZW50UG9zaXRpb24o
KSArIGRpc3BsYWNlbWVudCwgbV9pZGVhbFBvc2l0aW9uRm9yTWluaW11bVRyYXZlbCwgbV9jdXJy
ZW50S2V5Ym9hcmRTY3JvbGwtPmRpcmVjdGlvbik7CisgICAgbV9pZGVhbFBvc2l0aW9uID0gbV9z
Y3JvbGxBbmltYXRvci5zY3JvbGxhYmxlQXJlYSgpLmNvbnN0cmFpblNjcm9sbFBvc2l0aW9uKGZh
cnRoZXN0UG9pbnQpOworCisgICAgbV9jdXJyZW50S2V5Ym9hcmRTY3JvbGwgPSBzdGQ6Om51bGxv
cHQ7Cit9CisKK3ZvaWQgS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcjo6aGFuZGxlS2V5VXBFdmVu
dFdoaWxlU2Nyb2xsaW5nKCkKK3sKKyAgICBpZiAoIW1fc2Nyb2xsVHJpZ2dlcmluZ0tleUlzUHJl
c3NlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RvcEtleWJvYXJkU2Nyb2xsQW5pbWF0aW9u
KCk7CisgICAgbV9zY3JvbGxUcmlnZ2VyaW5nS2V5SXNQcmVzc2VkID0gZmFsc2U7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tl
eWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZjhlNWJlMDAwNDc4ODIzYmJl
YjdlNzEwODFiOGM2ZjM3OThjZGRiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5oCkBAIC0wLDAgKzEsNjAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNp
bmNsdWRlICJLZXlib2FyZFNjcm9sbC5oIgorI2luY2x1ZGUgIlJlY3RFZGdlcy5oIgorI2luY2x1
ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgS2V5
Ym9hcmRTY3JvbGxpbmdBbmltYXRvciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisgICAgS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcihTY3JvbGxBbmltYXRvciYsIFNj
cm9sbENvbnRyb2xsZXImKTsKKworICAgIGJvb2wgYmVnaW5LZXlib2FyZFNjcm9sbEdlc3R1cmUo
S2V5Ym9hcmRFdmVudCYpOworICAgIHZvaWQgaGFuZGxlS2V5VXBFdmVudFdoaWxlU2Nyb2xsaW5n
KCk7CisgICAgdm9pZCB1cGRhdGVLZXlib2FyZFNjcm9sbFBvc2l0aW9uKE1vbm90b25pY1RpbWUp
OworCitwcml2YXRlOgorICAgIHZvaWQgc3RvcEtleWJvYXJkU2Nyb2xsQW5pbWF0aW9uKCk7Cisg
ICAgUmVjdEVkZ2VzPGJvb2w+IHNjcm9sbGFibGVEaXJlY3Rpb25zRnJvbU9mZnNldChGbG9hdFBv
aW50KSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPEtleWJvYXJkU2Nyb2xsPiBrZXlib2FyZFNj
cm9sbEZvcktleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCYpOworICAgIGZsb2F0IHNjcm9sbERp
c3RhbmNlKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkpOworCisgICAgU2Nyb2xs
QW5pbWF0b3ImIG1fc2Nyb2xsQW5pbWF0b3I7CisgICAgU2Nyb2xsQ29udHJvbGxlciYgbV9zY3Jv
bGxDb250cm9sbGVyOworICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6S2V5Ym9hcmRTY3JvbGw+
IG1fY3VycmVudEtleWJvYXJkU2Nyb2xsOworICAgIGJvb2wgbV9zY3JvbGxUcmlnZ2VyaW5nS2V5
SXNQcmVzc2VkOworICAgIEZsb2F0U2l6ZSBtX3ZlbG9jaXR5OworICAgIE1vbm90b25pY1RpbWUg
bV90aW1lQXRMYXN0RnJhbWU7CisgICAgRmxvYXRQb2ludCBtX2lkZWFsUG9zaXRpb25Gb3JNaW5p
bXVtVHJhdmVsOworICAgIEZsb2F0UG9pbnQgbV9pZGVhbFBvc2l0aW9uOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsQW5pbWF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3Iu
Y3BwCmluZGV4IDVlODNmZGJhZTI3ZmI4OTg3ZjgwOWE4NTQ5NzU3YWMwNTg2MjM4MGMuLjIwNGJm
MzdmMTA5MTBjNzNkYTM0MzZhYzUxYjQ4M2YwMTA2ZDFmNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJT
Y3JvbGxBbmltYXRvci5oIgogCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIktl
eWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuaCIKICNpbmNsdWRlICJMYXlvdXRTaXplLmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCiAjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0aW9uU21v
b3RoLmgiCkBAIC01Myw2ICs1NCw3IEBAIFNjcm9sbEFuaW1hdG9yOjpTY3JvbGxBbmltYXRvcihT
Y3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEpCiAgICAgOiBtX3Njcm9sbGFibGVBcmVhKHNj
cm9sbGFibGVBcmVhKQogICAgICwgbV9zY3JvbGxDb250cm9sbGVyKCp0aGlzKQogICAgICwgbV9z
Y3JvbGxDb250cm9sbGVyQW5pbWF0aW9uVGltZXIoKnRoaXMsICZTY3JvbGxBbmltYXRvcjo6c2Ny
b2xsQ29udHJvbGxlckFuaW1hdGlvblRpbWVyRmlyZWQpCisgICAgLCBtX2tleWJvYXJkU2Nyb2xs
aW5nQW5pbWF0b3IobWFrZVVuaXF1ZTxLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yPigqdGhpcywg
bV9zY3JvbGxDb250cm9sbGVyKSkKICAgICAsIG1fc2Nyb2xsQW5pbWF0aW9uKG1ha2VVbmlxdWU8
U2Nyb2xsQW5pbWF0aW9uU21vb3RoPigKICAgICAgICAgW3RoaXNdKCkgLT4gU2Nyb2xsRXh0ZW50
cyB7CiAgICAgICAgICAgICByZXR1cm4geyBtX3Njcm9sbGFibGVBcmVhLm1pbmltdW1TY3JvbGxQ
b3NpdGlvbigpLCBtX3Njcm9sbGFibGVBcmVhLm1heGltdW1TY3JvbGxQb3NpdGlvbigpLCBtX3Nj
cm9sbGFibGVBcmVhLnZpc2libGVTaXplKCkgfTsKQEAgLTMzMiw3ICszMzQsNyBAQCB2b2lkIFNj
cm9sbEFuaW1hdG9yOjpzdGFydEFuaW1hdGlvbkNhbGxiYWNrKFNjcm9sbENvbnRyb2xsZXImKQog
ewogICAgIGlmIChtX3Njcm9sbENvbnRyb2xsZXJBbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpKQog
ICAgICAgICByZXR1cm47Ci0gICAgICAgIAorCiAgICAgbV9zY3JvbGxDb250cm9sbGVyQW5pbWF0
aW9uVGltZXIuc3RhcnRSZXBlYXRpbmcoMV9zIC8gNjAuKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgKaW5kZXggZDkyY2ZkYmRmYmIwNWYxZmE5MTM0ZWM2NTg3
NWFmY2I4Y2UxZDc4Yy4uMzMyNzFlMDY4MWZhNTM5Yjk3NzY1OGRhNWE1YzlmYzI2OTEwMDkxOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCkBAIC0zNCw3ICszNCw2
IEBACiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVu
dC5oIgogI2luY2x1ZGUgIlNjcm9sbENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJTY3JvbGxUeXBl
cy5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSAiV2hlZWxFdmVudFRlc3RNb25pdG9y
LmgiCiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KQEAgLTQzLDYgKzQyLDcgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIEtleWJvYXJkU2Nyb2xs
aW5nQW5pbWF0b3I7CiBjbGFzcyBQbGF0Zm9ybVRvdWNoRXZlbnQ7CiBjbGFzcyBTY3JvbGxBbmlt
YXRpb247CiBjbGFzcyBTY3JvbGxhYmxlQXJlYTsKQEAgLTgxLDYgKzgxLDggQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCBib29sIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2
ZW50Jik7CiAKKyAgICBLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yICprZXlib2FyZFNjcm9sbGlu
Z0FuaW1hdG9yKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9rZXlib2FyZFNjcm9sbGluZ0Fu
aW1hdG9yLmdldCgpOyB9CisKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIHZpcnR1YWwg
Ym9vbCBoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYpOwogI2VuZGlm
CkBAIC0xNzgsNiArMTgwLDcgQEAgcHJvdGVjdGVkOgogICAgIEZsb2F0UG9pbnQgbV9jdXJyZW50
UG9zaXRpb247CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0aW9uPiBtX3Njcm9s
bEFuaW1hdGlvbjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8S2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRv
cj4gbV9rZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmNwcAppbmRl
eCBlOTM3NWJhNzQ3NjhiZGI0NzNiZDhiZjFmZmE0OWI4MWNmOTk0M2E5Li4yMWZkOTg1YzI1MjRm
NWEzMTQxMzQ4OWY2NjMxNjkxYTFjNTBhM2M2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxDb250cm9sbGVyLmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIlNjcm9sbENvbnRyb2xsZXIuaCIKIAorI2luY2x1ZGUgIktleWJvYXJk
U2Nyb2xsaW5nQW5pbWF0b3IuaCIKICNpbmNsdWRlICJMYXlvdXRTaXplLmgiCiAjaW5jbHVkZSAi
TG9nZ2luZy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgpAQCAtNDMsMTUgKzQ0
LDE2IEBAIFNjcm9sbENvbnRyb2xsZXI6OlNjcm9sbENvbnRyb2xsZXIoU2Nyb2xsQ29udHJvbGxl
ckNsaWVudCYgY2xpZW50KQogCiB2b2lkIFNjcm9sbENvbnRyb2xsZXI6OmFuaW1hdGlvbkNhbGxi
YWNrKE1vbm90b25pY1RpbWUgY3VycmVudFRpbWUpCiB7Ci0gICAgTE9HX1dJVEhfU1RSRUFNKFNj
cm9sbGluZywgc3RyZWFtIDw8ICJTY3JvbGxDb250cm9sbGVyICIgPDwgdGhpcyA8PCAiIGFuaW1h
dGlvbkNhbGxiYWNrOiBpc0FuaW1hdGluZ1J1YmJlckJhbmQgIiA8PCBtX2lzQW5pbWF0aW5nUnVi
YmVyQmFuZCA8PCAiIGlzQW5pbWF0aW5nU2Nyb2xsU25hcCAiIDw8IG1faXNBbmltYXRpbmdTY3Jv
bGxTbmFwKTsKKyAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgIlNjcm9s
bENvbnRyb2xsZXIgIiA8PCB0aGlzIDw8ICIgYW5pbWF0aW9uQ2FsbGJhY2s6IGlzQW5pbWF0aW5n
UnViYmVyQmFuZCAiIDw8IG1faXNBbmltYXRpbmdSdWJiZXJCYW5kIDw8ICIgaXNBbmltYXRpbmdT
Y3JvbGxTbmFwICIgPDwgbV9pc0FuaW1hdGluZ1Njcm9sbFNuYXAgPDwgImlzQW5pbWF0aW5nS2V5
Ym9hcmRTY3JvbGxpbmciIDw8IG1faXNBbmltYXRpbmdLZXlib2FyZFNjcm9sbGluZyk7CiAKICAg
ICB1cGRhdGVTY3JvbGxTbmFwQW5pbWF0aW5nU3RhdGUoY3VycmVudFRpbWUpOwogICAgIHVwZGF0
ZVJ1YmJlckJhbmRBbmltYXRpbmdTdGF0ZShjdXJyZW50VGltZSk7CisgICAgdXBkYXRlS2V5Ym9h
cmRTY3JvbGxpbmdBbmltYXRpbmdTdGF0ZShjdXJyZW50VGltZSk7CiB9CiAKIHZvaWQgU2Nyb2xs
Q29udHJvbGxlcjo6c3RhcnRPclN0b3BBbmltYXRpb25DYWxsYmFja3MoKQogewotICAgIGJvb2wg
bmVlZHNDYWxsYmFja3MgPSBtX2lzQW5pbWF0aW5nUnViYmVyQmFuZCB8fCBtX2lzQW5pbWF0aW5n
U2Nyb2xsU25hcDsKKyAgICBib29sIG5lZWRzQ2FsbGJhY2tzID0gbV9pc0FuaW1hdGluZ1J1YmJl
ckJhbmQgfHwgbV9pc0FuaW1hdGluZ1Njcm9sbFNuYXAgfHwgbV9pc0FuaW1hdGluZ0tleWJvYXJk
U2Nyb2xsaW5nOwogICAgIGlmIChuZWVkc0NhbGxiYWNrcyA9PSBtX2lzUnVubmluZ0FuaW1hdGlu
Z0NhbGxiYWNrKQogICAgICAgICByZXR1cm47CiAKQEAgLTY1LDYgKzY3LDE2IEBAIHZvaWQgU2Ny
b2xsQ29udHJvbGxlcjo6c3RhcnRPclN0b3BBbmltYXRpb25DYWxsYmFja3MoKQogICAgIG1faXNS
dW5uaW5nQW5pbWF0aW5nQ2FsbGJhY2sgPSBmYWxzZTsKIH0KIAordm9pZCBTY3JvbGxDb250cm9s
bGVyOjpiZWdpbktleWJvYXJkU2Nyb2xsaW5nKCkKK3sKKyAgICBzZXRJc0FuaW1hdGluZ0tleWJv
YXJkU2Nyb2xsaW5nKHRydWUpOworfQorCit2b2lkIFNjcm9sbENvbnRyb2xsZXI6OnN0b3BLZXli
b2FyZFNjcm9sbGluZygpCit7CisgICAgc2V0SXNBbmltYXRpbmdLZXlib2FyZFNjcm9sbGluZyhm
YWxzZSk7Cit9CisKIHZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c2V0SXNBbmltYXRpbmdSdWJiZXJC
YW5kKGJvb2wgaXNBbmltYXRpbmdSdWJiZXJCYW5kKQogewogICAgIGlmIChpc0FuaW1hdGluZ1J1
YmJlckJhbmQgPT0gbV9pc0FuaW1hdGluZ1J1YmJlckJhbmQpCkBAIC04Myw2ICs5NSwxNSBAQCB2
b2lkIFNjcm9sbENvbnRyb2xsZXI6OnNldElzQW5pbWF0aW5nU2Nyb2xsU25hcChib29sIGlzQW5p
bWF0aW5nU2Nyb2xsU25hcCkKICAgICBzdGFydE9yU3RvcEFuaW1hdGlvbkNhbGxiYWNrcygpOwog
fQogCit2b2lkIFNjcm9sbENvbnRyb2xsZXI6OnNldElzQW5pbWF0aW5nS2V5Ym9hcmRTY3JvbGxp
bmcoYm9vbCBpc0FuaW1hdGluZ0tleWJvYXJkU2Nyb2xsaW5nKQoreworICAgIGlmIChpc0FuaW1h
dGluZ0tleWJvYXJkU2Nyb2xsaW5nID09IG1faXNBbmltYXRpbmdLZXlib2FyZFNjcm9sbGluZykK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9pc0FuaW1hdGluZ0tleWJvYXJkU2Nyb2xsaW5nID0g
aXNBbmltYXRpbmdLZXlib2FyZFNjcm9sbGluZzsKKyAgICBzdGFydE9yU3RvcEFuaW1hdGlvbkNh
bGxiYWNrcygpOworfQorCiBib29sIFNjcm9sbENvbnRyb2xsZXI6OnVzZXNTY3JvbGxTbmFwKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gISFtX3Njcm9sbFNuYXBTdGF0ZTsKQEAgLTE5NSw2ICsyMTYs
MTUgQEAgdm9pZCBTY3JvbGxDb250cm9sbGVyOjpyZXNuYXBBZnRlckxheW91dCgpCiAgICAgICAg
IHNldE5lYXJlc3RTY3JvbGxTbmFwSW5kZXhGb3JBeGlzQW5kT2Zmc2V0KFNjcm9sbEV2ZW50QXhp
czo6VmVydGljYWwsIG9mZnNldC55KCkpOwogCiB9CisKK3ZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6
dXBkYXRlS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRpbmdTdGF0ZShNb25vdG9uaWNUaW1lIGN1cnJl
bnRUaW1lKQoreworICAgIGlmICghbV9pc0FuaW1hdGluZ0tleWJvYXJkU2Nyb2xsaW5nKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX2NsaWVudC5rZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yKCkt
PnVwZGF0ZUtleWJvYXJkU2Nyb2xsUG9zaXRpb24oY3VycmVudFRpbWUpOworfQorCiAvLyBDdXJy
ZW50bHksIG9ubHkgTWFjIHN1cHBvcnRzIG1vbWVudHVtIHNyb2xsaW5nLWJhc2VkIHNjcm9sbHNu
YXBwaW5nIGFuZCBydWJiZXIgYmFuZGluZwogLy8gc28gYWxsIG9mIHRoZXNlIG1ldGhvZHMgYXJl
IGEgbm9vcCBvbiBub24tTWFjIHBsYXRmb3Jtcy4KICNpZiAhUExBVEZPUk0oTUFDKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5oCmluZGV4IDJiNDc1MWVlYThlNDNl
NWQ1ZDViMjlmOTMzNDExN2VkZmNiN2NkOGUuLjg4OGE0MTI4NDFlMzgyNWEyMDQ1ZWY3ZGU2MjM0
YjY4ODViYzdlOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbENv
bnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVy
LmgKQEAgLTM4LDYgKzM4LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBLZXli
b2FyZFNjcm9sbGluZ0FuaW1hdG9yOwogY2xhc3MgTGF5b3V0U2l6ZTsKIGNsYXNzIFBsYXRmb3Jt
V2hlZWxFdmVudDsKIGNsYXNzIFNjcm9sbENvbnRyb2xsZXI7CkBAIC03Miw2ICs3Myw5IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc3RhcnRBbmltYXRpb25DYWxsYmFjayhTY3JvbGxDb250
cm9sbGVyJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzdG9wQW5pbWF0aW9uQ2FsbGJhY2soU2Ny
b2xsQ29udHJvbGxlciYpID0gMDsKIAorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVLZXlib2FyZFNj
cm9sbFBvc2l0aW9uKE1vbm90b25pY1RpbWUpIHsgfQorICAgIHZpcnR1YWwgS2V5Ym9hcmRTY3Jv
bGxpbmdBbmltYXRvciAqa2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcigpIGNvbnN0IHsgcmV0dXJu
IG51bGxwdHI7IH0KKwogI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKICAgICB2aXJ0dWFsIGJv
b2wgYWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jikg
Y29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoY29u
c3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgY29uc3QgPSAwOwpAQCAtMTIxLDYgKzEyNSw5IEBAIHB1
YmxpYzoKICAgICBib29sIHVzZXNTY3JvbGxTbmFwKCkgY29uc3Q7CiAgICAgdm9pZCBzdG9wQWxs
VGltZXJzKCk7CiAgICAgdm9pZCBzY3JvbGxQb3NpdGlvbkNoYW5nZWQoKTsKKworICAgIHZvaWQg
YmVnaW5LZXlib2FyZFNjcm9sbGluZygpOworICAgIHZvaWQgc3RvcEtleWJvYXJkU2Nyb2xsaW5n
KCk7CiAgICAgCiAgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCBwZXJpb2RpY2FsbHkgYnkgdGhlIGNs
aWVudC4gU3RhcnRlZCBieSBzdGFydEFuaW1hdGlvbkNhbGxiYWNrKCksIHN0b3BwZWQgYnkgc3Rv
cEFuaW1hdGlvbkNhbGxiYWNrKCkuCiAgICAgdm9pZCBhbmltYXRpb25DYWxsYmFjayhNb25vdG9u
aWNUaW1lKTsKQEAgLTE2Myw5ICsxNzAsMTEgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdXBkYXRl
U2Nyb2xsU25hcEFuaW1hdGluZ1N0YXRlKE1vbm90b25pY1RpbWUpOwogICAgIHZvaWQgdXBkYXRl
UnViYmVyQmFuZEFuaW1hdGluZ1N0YXRlKE1vbm90b25pY1RpbWUpOwotICAgIAorICAgIHZvaWQg
dXBkYXRlS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRpbmdTdGF0ZShNb25vdG9uaWNUaW1lKTsKKwog
ICAgIHZvaWQgc2V0SXNBbmltYXRpbmdSdWJiZXJCYW5kKGJvb2wpOwogICAgIHZvaWQgc2V0SXNB
bmltYXRpbmdTY3JvbGxTbmFwKGJvb2wpOworICAgIHZvaWQgc2V0SXNBbmltYXRpbmdLZXlib2Fy
ZFNjcm9sbGluZyhib29sKTsKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICB2b2lkIHN0YXJ0U2Ny
b2xsU25hcEFuaW1hdGlvbigpOwpAQCAtMTk5LDYgKzIwOCw3IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBtX2lzUnVubmluZ0FuaW1hdGluZ0NhbGxiYWNrIHsgZmFsc2UgfTsKICAgICBib29sIG1faXNB
bmltYXRpbmdSdWJiZXJCYW5kIHsgZmFsc2UgfTsKICAgICBib29sIG1faXNBbmltYXRpbmdTY3Jv
bGxTbmFwIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNBbmltYXRpbmdLZXlib2FyZFNjcm9sbGlu
ZyB7IGZhbHNlIH07CiAKICNpZiBQTEFURk9STShNQUMpCiAgICAgV2FsbFRpbWUgbV9sYXN0TW9t
ZW50dW1TY3JvbGxUaW1lc3RhbXA7Cg==
</data>
<flag name="commit-queue"
          id="456547"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434144</attachid>
            <date>2021-07-23 16:40:42 -0700</date>
            <delta_ts>2021-07-26 15:21:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228009-20210723194041.patch</filename>
            <type>text/plain</type>
            <size>33658</size>
            <attacher name="Dana Estra">dana.estra</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5OTU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTg2OTY2YzRlMjRjN2M1
MDIwZWJmNTMyZWUyZjRhODgzNDBjYjgyYi4uMmE2ZjE2OTAwOGE2ZTdhNzM3ODA1Y2ZmNjY1MDc5
Y2I4ZTVjYjZiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDIxLTA3LTIzICBEYW5h
IEVzdHJhICA8ZGVzdHJhQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQga2V5LWRyaXZlbiBzbW9v
dGggc2Nyb2xsaW5nIHRvIG1hY09TCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjgwMDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBDYXVzZSBrZXlib2FyZCBzY3JvbGwgZXZlbnQgdG8gdHJpZ2dlciBzdGFy
dCBvZiBzbW9vdGggc2Nyb2xsIGFuaW1hdGlvbiwgdXNpbmcgc2FtZSBwaHlzaWNzIGltcGxlbWVu
dGF0aW9uIGFzIGlPUyBzbW9vdGggc2Nyb2xsaW5nLgorCisgICAgICAgIE5vIHRlc3RzIHlldC4K
KworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpkZWZhdWx0RXZlbnRIYW5k
bGVyKToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpFdmVudEhhbmRsZXI6OmRlZmF1bHRLZXlib2FyZEV2ZW50SGFuZGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNjcm9sbERpc3RhbmNlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9LZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9TY3JvbGxBbmltYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6
c3RhcnRBbmltYXRpb25DYWxsYmFjayk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3IuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OmFuaW1hdGlvbkNhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OnN0YXJ0T3JTdG9wQW5pbWF0aW9uQ2FsbGJhY2tz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OmJlZ2luS2V5Ym9hcmRTY3Jv
bGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6c3RvcEtleWJvYXJk
U2Nyb2xsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OnNldElzQW5p
bWF0aW5nS2V5Ym9hcmRTY3JvbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJv
bGxlcjo6dXBkYXRlS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRpbmdTdGF0ZSk6CisgICAgICAgICog
cGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29u
dHJvbGxlckNsaWVudDo6dXBkYXRlS2V5Ym9hcmRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIAog
MjAyMS0wNy0xNSAgVGltIE5ndXllbiAgPG50aW1AYXBwbGUuY29tPgogCiAgICAgICAgIDxkaWFs
b2c+IGVsZW1lbnQ6IGRvIG5vdCBwZXJmb3JtIGNsb3NlKCkgbWV0aG9kIHN0ZXBzIHdoZW4gcmVt
b3Zpbmcgb3BlbiBhdHRyaWJ1dGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
LnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDNjYmZhNWFiNWE0YmY1ODQ0
OTZhYjYxMzNjZTMwOGQ0OTkyM2JhMDIuLmMzZmY0OWQwMTgyODBkMjczN2ZkYTUwMGRhMjRmZmMw
ODZhN2ZkZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xODI3LDYgKzE4MjcsNyBAQCBwbGF0Zm9ybS9G
aWxlSGFuZGxlLmNwcAogcGxhdGZvcm0vRmlsZU1vbml0b3IuY3BwCiBwbGF0Zm9ybS9GaWxlU3Ry
ZWFtLmNwcAogcGxhdGZvcm0vRnJhbWVSYXRlTW9uaXRvci5jcHAKK3BsYXRmb3JtL0tleWJvYXJk
U2Nyb2xsaW5nQW5pbWF0b3IuY3BwCiBwbGF0Zm9ybS9MYXlvdXRVbml0LmNwcAogcGxhdGZvcm0v
TGVnYWN5U2NoZW1lUmVnaXN0cnkuY3BwCiBwbGF0Zm9ybS9MZW5ndGguY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNGExZDc4
NjU0NzY4YmMyODRmZDY3ZDc0NjZkODlhY2JkNjBjY2U5OC4uMWQyNTRkMThhYjQzMzQ3Njk3YTk0
MDk4MTQ3YTg4NmJhMWI3YWVjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjczLDYgKzY3Myw3IEBACiAJCTFGODc1NkIyMUUy
MkMzMzUwMDQyQzQwRCAvKiBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFGODc1NkIxMUUyMkJFRUYw
MDQyQzQwRCAvKiBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxRkFGQkYxOTE1QTVGQTc0MDAw
ODNBMjAgLyogVVRJVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxRkFGQkYxNjE1QTVGQTUyMDAwODNBMjAgLyogVVRJVXRpbGl0aWVzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUZDNDBG
QkExNjU1Q0NCOTAwNDBGMjlFIC8qIFN1YmltYWdlQ2FjaGVXaXRoVGltZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFGQzQwRkI3MTY1NUM1OTEwMDQw
RjI5RSAvKiBTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmggKi87IH07CisJCTFGRDk5MkY4MjZBQTI0
RjkwMDg4RTU5NiAvKiBLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxRkQ5OTJGNjI2QUEyNEY4MDA4OEU1OTYg
LyogS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTIwRDYyOTI3MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDIwRDYyOTI1MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb24uaCAqLzsgfTsKIAkJMjI1QTE2QjUwRDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2ZW50
UmVnaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
MjVBMTZCMzBENUMxMUU5MDAwOTAyOTUgLyogV2ViRXZlbnRSZWdpb24uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyMjhDMjg0NTEwRDgyNTAwMDA5
RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyMjhDMjg0NDEwRDgyNTAwMDA5RDBEMEUgLyogU2NyaXB0V3JhcHBh
YmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTcwNzIsNiArNzA3Myw4IEBACiAJCTFGQUZCRjE3MTVBNUZBNTIwMDA4M0EyMCAvKiBVVElVdGls
aXRpZXMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBVVElVdGls
aXRpZXMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFGQzQwRkI3MTY1NUM1OTEw
MDQwRjI5RSAvKiBTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFN1YmltYWdlQ2FjaGVXaXRoVGltZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMUZDNDBGQjgxNjU1QzU5MTAwNDBGMjlFIC8qIFN1YmltYWdlQ2FjaGVXaXRo
VGltZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3ViaW1hZ2VD
YWNoZVdpdGhUaW1lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFGRDk5MkY2
MjZBQTI0RjgwMDg4RTU5NiAvKiBLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUZEOTkyRjkyNkFBMjU0RDAwODhFNTk2IC8qIEtl
eWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTIwRDYyOTI0MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjBE
NjI5MjUxMjUzNjkwQjAwMDgxNTQzIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjI1QTE2QjMwRDVDMTFFOTAwMDkwMjk1IC8q
IFdlYkV2ZW50UmVnaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkV2
ZW50UmVnaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yODExOCw2ICsyODEy
MSw4IEBACiAJCQkJNDE5MEYzQTMyNDlEMTUyODAwNTMxQzU3IC8qIEZyYW1lUmF0ZU1vbml0b3Iu
aCAqLywKIAkJCQlBODc0OEJERjEyQ0JGMkRDMDAxRkJBNDEgLyogSGFzaFRvb2xzLmggKi8sCiAJ
CQkJQkMzQkMyOUIwRTkxQUIwRjAwODM1NTg4IC8qIEhvc3RXaW5kb3cuaCAqLywKKwkJCQkxRkQ5
OTJGOTI2QUEyNTREMDA4OEU1OTYgLyogS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5jcHAgKi8s
CisJCQkJMUZEOTkyRjYyNkFBMjRGODAwODhFNTk2IC8qIEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0
b3IuaCAqLywKIAkJCQkxQUUwMEQ1NzE4MkRBQzhEMDAwODdERDcgLyogS2V5ZWRDb2RpbmcuaCAq
LywKIAkJCQlFMTVGRjdENDE4Qzk1NTM4MDBGRTRDODcgLyogS2V5cHJlc3NDb21tYW5kLmggKi8s
CiAJCQkJQTNENDJBODQxRjMzQkEzNjAwQTY0QjYyIC8qIExheW91dFVuaXQuY3BwICovLApAQCAt
MzQxNDgsNiArMzQxNTMsNyBAQAogCQkJCTgzQjc0RUY2MUYzRTBCRjIwMDk5NkJDNyAvKiBLZWVw
YWxpdmVSZXF1ZXN0VHJhY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODUwMzFCNDQwQTQ0RUZD
NzAwRjk5MkUwIC8qIEtleWJvYXJkRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFGMDIwQUVG
MjY3ODBGQ0UwMDAwODA5QSAvKiBLZXlib2FyZFNjcm9sbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MUZEOTkyRjgyNkFBMjRGOTAwODhFNTk2IC8qIEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCTFBRTAwRDU5MTgyREFDOEQwMDA4N0RENyAvKiBLZXllZENvZGlu
Zy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE3QTYzQzUxQjc0MzE4RjAwRTdEQ0RDIC8qIEtleWVk
RGVjb2RlckNGLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTdBNjNDNjFCNzQzMTkyMDBFN0RDREMg
LyogS2V5ZWRFbmNvZGVyQ0YuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4IGUy
NDU3N2RmM2Q3NjE3YmU0YjI1NjI3MDhhYjc2ZDhmYzU4MjQ1ZWQuLmQ1NmIyYjk0ZmI4ZjNiZGEw
OWU3ZGYxZGVkNDZkOThmZDQzZGM0NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTI0MzIsNyArMjQz
Miw3IEBAIHZvaWQgTm9kZTo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCYgZXZlbnQpCiAgICAg
aWYgKGV2ZW50LnRhcmdldCgpICE9IHRoaXMpCiAgICAgICAgIHJldHVybjsKICAgICBjb25zdCBB
dG9tU3RyaW5nJiBldmVudFR5cGUgPSBldmVudC50eXBlKCk7Ci0gICAgaWYgKGV2ZW50VHlwZSA9
PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50IHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCku
a2V5cHJlc3NFdmVudCkgeworICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmtleWRv
d25FdmVudCB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQgfHwgZXZl
bnRUeXBlID09IGV2ZW50TmFtZXMoKS5rZXl1cEV2ZW50KSB7CiAgICAgICAgIGlmIChpczxLZXli
b2FyZEV2ZW50PihldmVudCkpIHsKICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1
bWVudCgpLmZyYW1lKCkpCiAgICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLmRl
ZmF1bHRLZXlib2FyZEV2ZW50SGFuZGxlcihkb3duY2FzdDxLZXlib2FyZEV2ZW50PihldmVudCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDA1Y2RhNjU4MTkyNGEyNmNm
NzA1Yzk4Mjk1ZmQ0MjhlNDM2NGY3M2IuLjcxODJjYWU1OWVkOTVmYjc0NjFkNWVlNTRlODcwOTMx
ZDUyYmU0ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTY4LDcgKzY4
LDcgQEAKICNpbmNsdWRlICJJbWFnZU92ZXJsYXlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgotI2lu
Y2x1ZGUgIktleWJvYXJkU2Nyb2xsLmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRTY3JvbGxpbmdBbmlt
YXRvci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAj
aW5jbHVkZSAiTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5oIgpAQCAtMzgwMyw2ICszODAz
LDEwIEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpkZWZhdWx0S2V5Ym9hcmRFdmVudEhhbmRsZXIoS2V5
Ym9hcmRFdmVudCYgZXZlbnQpCiAgICAgICAgIGlmIChldmVudC5jaGFyQ29kZSgpID09ICcgJykK
ICAgICAgICAgICAgIGRlZmF1bHRTcGFjZUV2ZW50SGFuZGxlcihldmVudCk7CiAgICAgfQorICAg
IGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXVwRXZlbnQpIHsKKyAgICAgICAg
RnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS52aWV3KCk7CisgICAgICAgIHJldHVybiB2aWV3LT5z
Y3JvbGxBbmltYXRvcigpLmtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IoKS0+aGFuZGxlS2V5VXBF
dmVudFdoaWxlU2Nyb2xsaW5nKCk7CisgICAgfQogfQogCiAjaWYgRU5BQkxFKERSQUdfU1VQUE9S
VCkKQEAgLTQyMzcsNyArNDI0MSw3IEBAIGZsb2F0IEV2ZW50SGFuZGxlcjo6c2Nyb2xsRGlzdGFu
Y2UoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkKICAgICAgICAg
ICAgIHJldHVybiBtX2ZyYW1lLnZpZXcoKS0+dmVydGljYWxTY3JvbGxiYXIoKTsKICAgICAgICAg
cmV0dXJuIG1fZnJhbWUudmlldygpLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CiAgICAgfSgpOwot
ICAgIAorCiAgICAgc3dpdGNoIChncmFudWxhcml0eSkgewogICAgIGNhc2UgU2Nyb2xsR3JhbnVs
YXJpdHk6OlNjcm9sbEJ5TGluZToKICAgICAgICAgcmV0dXJuIHNjcm9sbGJhci0+bGluZVN0ZXAo
KTsKQEAgLTQyNTUsNTkgKzQyNTksOCBAQCBmbG9hdCBFdmVudEhhbmRsZXI6OnNjcm9sbERpc3Rh
bmNlKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5CiBib29sIEV2
ZW50SGFuZGxlcjo6aGFuZGxlS2V5Ym9hcmRTY3JvbGxpbmcoS2V5Ym9hcmRFdmVudCYgZXZlbnQp
CiB7CiAgICAgUmVmIHByb3RlY3RlZEZyYW1lID0gbV9mcmFtZTsKLSAgICAvLyBGSVhNRSAoYnVn
IDIyNzQ1OSk6IFRoaXMgbG9naWMgZG9lcyBub3QgYWNjb3VudCBmb3Igd3JpdGluZy1tb2RlLgot
Ci0gICAgZW51bSBjbGFzcyBLZXkgOiB1aW50OF90IHsgTGVmdEFycm93LCBSaWdodEFycm93LCBV
cEFycm93LCBEb3duQXJyb3csIFNwYWNlIH07Ci0KLSAgICBLZXkga2V5OwotICAgIGlmIChldmVu
dC5rZXlJZGVudGlmaWVyKCkgPT0gIkxlZnQiKQotICAgICAgICBrZXkgPSBLZXk6OkxlZnRBcnJv
dzsKLSAgICBlbHNlIGlmIChldmVudC5rZXlJZGVudGlmaWVyKCkgPT0gIlJpZ2h0IikKLSAgICAg
ICAga2V5ID0gS2V5OjpSaWdodEFycm93OwotICAgIGVsc2UgaWYgKGV2ZW50LmtleUlkZW50aWZp
ZXIoKSA9PSAiVXAiKQotICAgICAgICBrZXkgPSBLZXk6OlVwQXJyb3c7Ci0gICAgZWxzZSBpZiAo
ZXZlbnQua2V5SWRlbnRpZmllcigpID09ICJEb3duIikKLSAgICAgICAga2V5ID0gS2V5OjpEb3du
QXJyb3c7Ci0gICAgZWxzZSBpZiAoZXZlbnQuY2hhckNvZGUoKSA9PSAnICcpCi0gICAgICAgIGtl
eSA9IEtleTo6U3BhY2U7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBh
dXRvIGdyYW51bGFyaXR5ID0gWyZdIHsKLSAgICAgICAgc3dpdGNoIChrZXkpIHsKLSAgICAgICAg
Y2FzZSBLZXk6OkxlZnRBcnJvdzoKLSAgICAgICAgY2FzZSBLZXk6OlJpZ2h0QXJyb3c6Ci0gICAg
ICAgICAgICByZXR1cm4gZXZlbnQuYWx0S2V5KCkgPyBTY3JvbGxHcmFudWxhcml0eTo6U2Nyb2xs
QnlQYWdlIDogU2Nyb2xsR3JhbnVsYXJpdHk6OlNjcm9sbEJ5TGluZTsKLSAgICAgICAgY2FzZSBL
ZXk6OlVwQXJyb3c6Ci0gICAgICAgIGNhc2UgS2V5OjpEb3duQXJyb3c6Ci0gICAgICAgICAgICBp
ZiAoZXZlbnQubWV0YUtleSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBTY3JvbGxHcmFudWxh
cml0eTo6U2Nyb2xsQnlEb2N1bWVudDsKLSAgICAgICAgICAgIGlmIChldmVudC5hbHRLZXkoKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gU2Nyb2xsR3JhbnVsYXJpdHk6OlNjcm9sbEJ5UGFnZTsK
LSAgICAgICAgICAgIHJldHVybiBTY3JvbGxHcmFudWxhcml0eTo6U2Nyb2xsQnlMaW5lOwotICAg
ICAgICBjYXNlIEtleTo6U3BhY2U6Ci0gICAgICAgICAgICByZXR1cm4gU2Nyb2xsR3JhbnVsYXJp
dHk6OlNjcm9sbEJ5UGFnZTsKLSAgICAgICAgfTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICB9KCk7Ci0KLSAgICBhdXRvIGRpcmVjdGlvbiA9IFsmXSB7Ci0gICAg
ICAgIHN3aXRjaCAoa2V5KSB7Ci0gICAgICAgIGNhc2UgS2V5OjpMZWZ0QXJyb3c6Ci0gICAgICAg
ICAgICByZXR1cm4gU2Nyb2xsRGlyZWN0aW9uOjpTY3JvbGxMZWZ0OwotICAgICAgICBjYXNlIEtl
eTo6UmlnaHRBcnJvdzoKLSAgICAgICAgICAgIHJldHVybiBTY3JvbGxEaXJlY3Rpb246OlNjcm9s
bFJpZ2h0OwotICAgICAgICBjYXNlIEtleTo6VXBBcnJvdzoKLSAgICAgICAgICAgIHJldHVybiBT
Y3JvbGxEaXJlY3Rpb246OlNjcm9sbFVwOwotICAgICAgICBjYXNlIEtleTo6RG93bkFycm93Ogot
ICAgICAgICAgICAgcmV0dXJuIFNjcm9sbERpcmVjdGlvbjo6U2Nyb2xsRG93bjsKLSAgICAgICAg
Y2FzZSBLZXk6OlNwYWNlOgotICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnNoaWZ0S2V5KCkgPyBT
Y3JvbGxEaXJlY3Rpb246OlNjcm9sbFVwIDogU2Nyb2xsRGlyZWN0aW9uOjpTY3JvbGxEb3duOwot
ICAgICAgICB9Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfSgp
OwotCi0gICAgcmV0dXJuIEV2ZW50SGFuZGxlcjo6c2Nyb2xsUmVjdXJzaXZlbHkoZGlyZWN0aW9u
LCBncmFudWxhcml0eSwgbnVsbHB0cik7CisgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS52
aWV3KCk7CisgICAgcmV0dXJuIHZpZXctPnNjcm9sbEFuaW1hdG9yKCkua2V5Ym9hcmRTY3JvbGxp
bmdBbmltYXRvcigpLT5iZWdpbktleWJvYXJkU2Nyb2xsR2VzdHVyZShldmVudCk7CiB9CiAKIHZv
aWQgRXZlbnRIYW5kbGVyOjpkZWZhdWx0QXJyb3dFdmVudEhhbmRsZXIoRm9jdXNEaXJlY3Rpb24g
Zm9jdXNEaXJlY3Rpb24sIEtleWJvYXJkRXZlbnQmIGV2ZW50KQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9LZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lYWRjZjIwNTY2M2Q3NjBmYWY4NTcxYzAwNGQ1OTdjZDQxOTIwMmFkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5j
cHAKQEAgLTAsMCArMSwzMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5oIgorCisjaW5jbHVkZSAiRXZlbnRO
YW1lcy5oIgorI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCisjaW5jbHVkZSAiU2Nyb2xsYWJsZUFy
ZWEuaCIKKyNpbmNsdWRlICJXcml0aW5nTW9kZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3I6OktleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IoU2Ny
b2xsQW5pbWF0b3ImIHNjcm9sbEFuaW1hdG9yLCBTY3JvbGxDb250cm9sbGVyJiBzY3JvbGxDb250
cm9sbGVyKQorICAgIDogbV9zY3JvbGxBbmltYXRvcihzY3JvbGxBbmltYXRvcikKKyAgICAsIG1f
c2Nyb2xsQ29udHJvbGxlcihzY3JvbGxDb250cm9sbGVyKQoreworfQorCitSZWN0RWRnZXM8Ym9v
bD4gS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcjo6c2Nyb2xsYWJsZURpcmVjdGlvbnNGcm9tT2Zm
c2V0KEZsb2F0UG9pbnQgb2Zmc2V0KSBjb25zdAoreworICAgIGF1dG8gbWluaW11bVNjcm9sbFBv
c2l0aW9uID0gbV9zY3JvbGxBbmltYXRvci5zY3JvbGxhYmxlQXJlYSgpLm1pbmltdW1TY3JvbGxQ
b3NpdGlvbigpOworICAgIGF1dG8gbWF4aW11bVNjcm9sbFBvc2l0aW9uID0gbV9zY3JvbGxBbmlt
YXRvci5zY3JvbGxhYmxlQXJlYSgpLm1heGltdW1TY3JvbGxQb3NpdGlvbigpOworCisgICAgUmVj
dEVkZ2VzPGJvb2w+IGVkZ2VzOworCisgICAgZWRnZXMuc2V0VG9wKG9mZnNldC55KCkgPiBtaW5p
bXVtU2Nyb2xsUG9zaXRpb24ueSgpKTsKKyAgICBlZGdlcy5zZXRCb3R0b20ob2Zmc2V0LnkoKSA8
IG1heGltdW1TY3JvbGxQb3NpdGlvbi55KCkpOworICAgIGVkZ2VzLnNldExlZnQob2Zmc2V0Lngo
KSA+IG1pbmltdW1TY3JvbGxQb3NpdGlvbi54KCkpOworICAgIGVkZ2VzLnNldFJpZ2h0KG9mZnNl
dC54KCkgPCBtYXhpbXVtU2Nyb2xsUG9zaXRpb24ueCgpKTsKKworICAgIHJldHVybiBlZGdlczsK
K30KKworc3RhdGljIEJveFNpZGUgYm94U2lkZUZvckRpcmVjdGlvbihTY3JvbGxEaXJlY3Rpb24g
ZGlyZWN0aW9uKQoreworICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBTY3JvbGxE
aXJlY3Rpb246OlNjcm9sbFVwOgorICAgICAgICByZXR1cm4gQm94U2lkZTo6VG9wOworICAgIGNh
c2UgU2Nyb2xsRGlyZWN0aW9uOjpTY3JvbGxEb3duOgorICAgICAgICByZXR1cm4gQm94U2lkZTo6
Qm90dG9tOworICAgIGNhc2UgU2Nyb2xsRGlyZWN0aW9uOjpTY3JvbGxMZWZ0OgorICAgICAgICBy
ZXR1cm4gQm94U2lkZTo6TGVmdDsKKyAgICBjYXNlIFNjcm9sbERpcmVjdGlvbjo6U2Nyb2xsUmln
aHQ6CisgICAgICAgIHJldHVybiBCb3hTaWRlOjpSaWdodDsKKyAgICB9CisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEJveFNpZGU6OlRvcDsKK30KKworc3RhdGljIEZsb2F0
U2l6ZSBwZXJwZW5kaWN1bGFyQWJzb2x1dGVVbml0VmVjdG9yKFNjcm9sbERpcmVjdGlvbiBkaXJl
Y3Rpb24pCit7CisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBjYXNlIFNjcm9sbERpcmVj
dGlvbjo6U2Nyb2xsVXA6CisgICAgY2FzZSBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbERvd246Cisg
ICAgICAgIHJldHVybiB7IDEsIDAgfTsKKyAgICBjYXNlIFNjcm9sbERpcmVjdGlvbjo6U2Nyb2xs
TGVmdDoKKyAgICBjYXNlIFNjcm9sbERpcmVjdGlvbjo6U2Nyb2xsUmlnaHQ6CisgICAgICAgIHJl
dHVybiB7IDAsIDEgfTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIHsgfTsKK30KKwordm9pZCBLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yOjp1cGRhdGVLZXli
b2FyZFNjcm9sbFBvc2l0aW9uKE1vbm90b25pY1RpbWUgY3VycmVudFRpbWUpCit7CisgICAgYXV0
byBmb3JjZSA9IEZsb2F0U2l6ZSB7IH07CisgICAgYXV0byBheGVzVG9BcHBseVNwcmluZyA9IEZs
b2F0U2l6ZSB7IDEsIDEgfTsKKyAgICBLZXlib2FyZFNjcm9sbFBhcmFtZXRlcnMgcGFyYW1zID0g
S2V5Ym9hcmRTY3JvbGxQYXJhbWV0ZXJzOjpwYXJhbWV0ZXJzKCk7CisKKyAgICBpZiAobV9jdXJy
ZW50S2V5Ym9hcmRTY3JvbGwpIHsKKyAgICAgICAgYXV0byBzY3JvbGxhYmxlRGlyZWN0aW9ucyA9
IHNjcm9sbGFibGVEaXJlY3Rpb25zRnJvbU9mZnNldChtX3Njcm9sbEFuaW1hdG9yLmN1cnJlbnRQ
b3NpdGlvbigpKTsKKyAgICAgICAgYXV0byBkaXJlY3Rpb24gPSBtX2N1cnJlbnRLZXlib2FyZFNj
cm9sbC0+ZGlyZWN0aW9uOworCisgICAgICAgIGlmIChzY3JvbGxhYmxlRGlyZWN0aW9ucy5hdChi
b3hTaWRlRm9yRGlyZWN0aW9uKGRpcmVjdGlvbikpKSB7CisKKyAgICAgICAgICAgIC8vIEFwcGx5
IHRoZSBzY3JvbGxpbmcgZm9yY2UuIE9ubHkgYXBwbHkgdGhlIHNwcmluZyBpbiB0aGUgcGVycGVu
ZGljdWxhciBheGlzLAorICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0IGRyYWdzIGFnYWluc3Qg
dGhlIGRpcmVjdGlvbiBvZiBtb3Rpb24uCisgICAgICAgICAgICBheGVzVG9BcHBseVNwcmluZyA9
IHBlcnBlbmRpY3VsYXJBYnNvbHV0ZVVuaXRWZWN0b3IoZGlyZWN0aW9uKTsKKyAgICAgICAgICAg
IGZvcmNlID0gbV9jdXJyZW50S2V5Ym9hcmRTY3JvbGwtPmZvcmNlOworICAgICAgICB9IGVsc2Ug
eworCisgICAgICAgICAgICAvLyBUaGUgc2Nyb2xsIHZpZXcgY2Fubm90IHNjcm9sbCBpbiB0aGlz
IGRpcmVjdGlvbiwgYW5kIGlzIHJ1YmJlci1iYW5kaW5nLgorICAgICAgICAgICAgLy8gQXBwbHkg
YSBjb25zdGFudCBhbmQgc2lnbmlmaWNhbnQgZm9yY2U7IG90aGVyd2lzZSwgdGhlIGZvcmNlIGZv
ciBhCisgICAgICAgICAgICAvLyBzaW5nbGUtbGluZSBpbmNyZW1lbnQgaXMgbm90IHN0cm9uZyBl
bm91Z2ggdG8gcnViYmVyLWJhbmQgcGVyY2VwdGlibHkuCisgICAgICAgICAgICBmb3JjZSA9IHVu
aXRWZWN0b3JGb3JTY3JvbGxEaXJlY3Rpb24oZGlyZWN0aW9uKS5zY2FsZWQocGFyYW1zLnJ1YmJl
ckJhbmRGb3JjZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZmFicyhtX3ZlbG9jaXR5Lndp
ZHRoKCkpID49IGZhYnMobV9jdXJyZW50S2V5Ym9hcmRTY3JvbGwtPm1heGltdW1WZWxvY2l0eS53
aWR0aCgpKSkKKyAgICAgICAgICAgIGZvcmNlLnNldFdpZHRoKDApOworCisgICAgICAgIGlmIChm
YWJzKG1fdmVsb2NpdHkuaGVpZ2h0KCkpID49IGZhYnMobV9jdXJyZW50S2V5Ym9hcmRTY3JvbGwt
Pm1heGltdW1WZWxvY2l0eS5oZWlnaHQoKSkpCisgICAgICAgICAgICBmb3JjZS5zZXRIZWlnaHQo
MCk7CisgICAgfQorCisgICAgU2Nyb2xsUG9zaXRpb24gaWRlYWxQb3NpdGlvbiA9IG1fc2Nyb2xs
QW5pbWF0b3Iuc2Nyb2xsYWJsZUFyZWEoKS5jb25zdHJhaW5TY3JvbGxQb3NpdGlvbihJbnRQb2lu
dChtX2N1cnJlbnRLZXlib2FyZFNjcm9sbCA/IG1fc2Nyb2xsQW5pbWF0b3IuY3VycmVudFBvc2l0
aW9uKCkgOiBtX2lkZWFsUG9zaXRpb24pKTsKKyAgICBGbG9hdFNpemUgZGlzcGxhY2VtZW50ID0g
bV9zY3JvbGxBbmltYXRvci5jdXJyZW50UG9zaXRpb24oKSAtIGlkZWFsUG9zaXRpb247CisKKyAg
ICBhdXRvIHNwcmluZ0ZvcmNlID0gLSBkaXNwbGFjZW1lbnQuc2NhbGVkKHBhcmFtcy5zcHJpbmdT
dGlmZm5lc3MpIC0gbV92ZWxvY2l0eS5zY2FsZWQocGFyYW1zLnNwcmluZ0RhbXBpbmcpOworICAg
IGZvcmNlICs9IHNwcmluZ0ZvcmNlICogYXhlc1RvQXBwbHlTcHJpbmc7CisKKyAgICBmbG9hdCBm
cmFtZUR1cmF0aW9uID0gKGN1cnJlbnRUaW1lIC0gbV90aW1lQXRMYXN0RnJhbWUpLnZhbHVlKCk7
CisgICAgbV90aW1lQXRMYXN0RnJhbWUgPSBjdXJyZW50VGltZTsKKworICAgIEZsb2F0U2l6ZSBh
Y2NlbGVyYXRpb24gPSBmb3JjZS5zY2FsZWQoMS4gLyBwYXJhbXMuc3ByaW5nTWFzcyk7CisgICAg
bV92ZWxvY2l0eSArPSBhY2NlbGVyYXRpb24uc2NhbGVkKGZyYW1lRHVyYXRpb24pOworICAgIEZs
b2F0UG9pbnQgbmV3UG9zaXRpb24gPSBtX3Njcm9sbEFuaW1hdG9yLmN1cnJlbnRQb3NpdGlvbigp
ICsgbV92ZWxvY2l0eS5zY2FsZWQoZnJhbWVEdXJhdGlvbik7CisKKyAgICBtX3Njcm9sbEFuaW1h
dG9yLnNjcm9sbFRvUG9zaXRpb25XaXRob3V0QW5pbWF0aW9uKG5ld1Bvc2l0aW9uKTsKKworICAg
IGlmICghbV9zY3JvbGxUcmlnZ2VyaW5nS2V5SXNQcmVzc2VkICYmIG1fdmVsb2NpdHkuZGlhZ29u
YWxMZW5ndGhTcXVhcmVkKCkgPCAxKSB7CisgICAgICAgIG1fc2Nyb2xsQ29udHJvbGxlci5zdG9w
S2V5Ym9hcmRTY3JvbGxpbmcoKTsKKyAgICAgICAgbV92ZWxvY2l0eSA9IHsgfTsKKyAgICB9Cit9
CisKK2Zsb2F0IEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3I6OnNjcm9sbERpc3RhbmNlKFNjcm9s
bERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQorewor
ICAgIGF1dG8gc2Nyb2xsYmFyID0gWyZdIHsKKyAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBTY3Jv
bGxEaXJlY3Rpb246OlNjcm9sbFVwIHx8IGRpcmVjdGlvbiA9PSBTY3JvbGxEaXJlY3Rpb246OlNj
cm9sbERvd24pCisgICAgICAgICAgICByZXR1cm4gbV9zY3JvbGxBbmltYXRvci5zY3JvbGxhYmxl
QXJlYSgpLnZlcnRpY2FsU2Nyb2xsYmFyKCk7CisgICAgICAgIHJldHVybiBtX3Njcm9sbEFuaW1h
dG9yLnNjcm9sbGFibGVBcmVhKCkuaG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgIH0oKTsKKwor
ICAgIHN3aXRjaCAoZ3JhbnVsYXJpdHkpIHsKKyAgICBjYXNlIFNjcm9sbEdyYW51bGFyaXR5OjpT
Y3JvbGxCeUxpbmU6CisgICAgICAgIHJldHVybiBzY3JvbGxiYXItPmxpbmVTdGVwKCk7CisgICAg
Y2FzZSBTY3JvbGxHcmFudWxhcml0eTo6U2Nyb2xsQnlQYWdlOgorICAgICAgICByZXR1cm4gc2Ny
b2xsYmFyLT5wYWdlU3RlcCgpOworICAgIGNhc2UgU2Nyb2xsR3JhbnVsYXJpdHk6OlNjcm9sbEJ5
RG9jdW1lbnQ6CisgICAgICAgIHJldHVybiBzY3JvbGxiYXItPnRvdGFsU2l6ZSgpOworICAgIGNh
c2UgU2Nyb2xsR3JhbnVsYXJpdHk6OlNjcm9sbEJ5UGl4ZWw6CisgICAgICAgIHJldHVybiBzY3Jv
bGxiYXItPnBpeGVsU3RlcCgpOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8S2V5Ym9hcmRTY3JvbGw+IEtleWJvYXJkU2Nyb2xs
aW5nQW5pbWF0b3I6OmtleWJvYXJkU2Nyb2xsRm9yS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50
JiBldmVudCkKK3sKKyAgICAvLyBGSVhNRSAoYnVnIDIyNzQ1OSk6IFRoaXMgbG9naWMgZG9lcyBu
b3QgYWNjb3VudCBmb3Igd3JpdGluZy1tb2RlLgorCisgICAgZW51bSBjbGFzcyBLZXkgOiB1aW50
OF90IHsgTGVmdEFycm93LCBSaWdodEFycm93LCBVcEFycm93LCBEb3duQXJyb3csIFNwYWNlIH07
CisKKyAgICBLZXkga2V5OworICAgIGlmIChldmVudC5rZXlJZGVudGlmaWVyKCkgPT0gIkxlZnQi
KQorICAgICAgICBrZXkgPSBLZXk6OkxlZnRBcnJvdzsKKyAgICBlbHNlIGlmIChldmVudC5rZXlJ
ZGVudGlmaWVyKCkgPT0gIlJpZ2h0IikKKyAgICAgICAga2V5ID0gS2V5OjpSaWdodEFycm93Owor
ICAgIGVsc2UgaWYgKGV2ZW50LmtleUlkZW50aWZpZXIoKSA9PSAiVXAiKQorICAgICAgICBrZXkg
PSBLZXk6OlVwQXJyb3c7CisgICAgZWxzZSBpZiAoZXZlbnQua2V5SWRlbnRpZmllcigpID09ICJE
b3duIikKKyAgICAgICAga2V5ID0gS2V5OjpEb3duQXJyb3c7CisgICAgZWxzZSBpZiAoZXZlbnQu
Y2hhckNvZGUoKSA9PSAnICcpCisgICAgICAgIGtleSA9IEtleTo6U3BhY2U7CisgICAgZWxzZQor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgYXV0byBncmFudWxhcml0eSA9IFsm
XSB7CisgICAgICAgIHN3aXRjaCAoa2V5KSB7CisgICAgICAgIGNhc2UgS2V5OjpMZWZ0QXJyb3c6
CisgICAgICAgIGNhc2UgS2V5OjpSaWdodEFycm93OgorICAgICAgICAgICAgcmV0dXJuIGV2ZW50
LmFsdEtleSgpID8gU2Nyb2xsR3JhbnVsYXJpdHk6OlNjcm9sbEJ5UGFnZSA6IFNjcm9sbEdyYW51
bGFyaXR5OjpTY3JvbGxCeUxpbmU7CisgICAgICAgIGNhc2UgS2V5OjpVcEFycm93OgorICAgICAg
ICBjYXNlIEtleTo6RG93bkFycm93OgorICAgICAgICAgICAgaWYgKGV2ZW50Lm1ldGFLZXkoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gU2Nyb2xsR3JhbnVsYXJpdHk6OlNjcm9sbEJ5RG9jdW1l
bnQ7CisgICAgICAgICAgICBpZiAoZXZlbnQuYWx0S2V5KCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIFNjcm9sbEdyYW51bGFyaXR5OjpTY3JvbGxCeVBhZ2U7CisgICAgICAgICAgICByZXR1cm4g
U2Nyb2xsR3JhbnVsYXJpdHk6OlNjcm9sbEJ5TGluZTsKKyAgICAgICAgY2FzZSBLZXk6OlNwYWNl
OgorICAgICAgICAgICAgcmV0dXJuIFNjcm9sbEdyYW51bGFyaXR5OjpTY3JvbGxCeVBhZ2U7Cisg
ICAgICAgIH07CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfSgp
OworCisgICAgYXV0byBkaXJlY3Rpb24gPSBbJl0geworICAgICAgICBzd2l0Y2ggKGtleSkgewor
ICAgICAgICBjYXNlIEtleTo6TGVmdEFycm93OgorICAgICAgICAgICAgcmV0dXJuIFNjcm9sbERp
cmVjdGlvbjo6U2Nyb2xsTGVmdDsKKyAgICAgICAgY2FzZSBLZXk6OlJpZ2h0QXJyb3c6CisgICAg
ICAgICAgICByZXR1cm4gU2Nyb2xsRGlyZWN0aW9uOjpTY3JvbGxSaWdodDsKKyAgICAgICAgY2Fz
ZSBLZXk6OlVwQXJyb3c6CisgICAgICAgICAgICByZXR1cm4gU2Nyb2xsRGlyZWN0aW9uOjpTY3Jv
bGxVcDsKKyAgICAgICAgY2FzZSBLZXk6OkRvd25BcnJvdzoKKyAgICAgICAgICAgIHJldHVybiBT
Y3JvbGxEaXJlY3Rpb246OlNjcm9sbERvd247CisgICAgICAgIGNhc2UgS2V5OjpTcGFjZToKKyAg
ICAgICAgICAgIHJldHVybiBldmVudC5zaGlmdEtleSgpID8gU2Nyb2xsRGlyZWN0aW9uOjpTY3Jv
bGxVcCA6IFNjcm9sbERpcmVjdGlvbjo6U2Nyb2xsRG93bjsKKyAgICAgICAgfQorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0oKTsKKworICAgIGZsb2F0IGRpc3Rh
bmNlID0gc2Nyb2xsRGlzdGFuY2UoZGlyZWN0aW9uLCBncmFudWxhcml0eSk7CisKKyAgICBLZXli
b2FyZFNjcm9sbCBzY3JvbGw7CisKKyAgICBzY3JvbGwub2Zmc2V0ID0gdW5pdFZlY3RvckZvclNj
cm9sbERpcmVjdGlvbihkaXJlY3Rpb24pLnNjYWxlZChkaXN0YW5jZSk7CisgICAgc2Nyb2xsLmdy
YW51bGFyaXR5ID0gZ3JhbnVsYXJpdHk7CisgICAgc2Nyb2xsLmRpcmVjdGlvbiA9IGRpcmVjdGlv
bjsKKyAgICBzY3JvbGwubWF4aW11bVZlbG9jaXR5ID0gc2Nyb2xsLm9mZnNldC5zY2FsZWQoS2V5
Ym9hcmRTY3JvbGxQYXJhbWV0ZXJzOjpwYXJhbWV0ZXJzKCkubWF4aW11bVZlbG9jaXR5TXVsdGlw
bGllcik7CisgICAgc2Nyb2xsLmZvcmNlID0gc2Nyb2xsLm1heGltdW1WZWxvY2l0eS5zY2FsZWQo
S2V5Ym9hcmRTY3JvbGxQYXJhbWV0ZXJzOjpwYXJhbWV0ZXJzKCkuc3ByaW5nTWFzcyAvIEtleWJv
YXJkU2Nyb2xsUGFyYW1ldGVyczo6cGFyYW1ldGVycygpLnRpbWVUb01heGltdW1WZWxvY2l0eSk7
CisKKyAgICByZXR1cm4gc2Nyb2xsOworfQorCitib29sIEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0
b3I6OmJlZ2luS2V5Ym9hcmRTY3JvbGxHZXN0dXJlKEtleWJvYXJkRXZlbnQmIGV2ZW50KQorewor
ICAgIGF1dG8gc2Nyb2xsID0ga2V5Ym9hcmRTY3JvbGxGb3JLZXlib2FyZEV2ZW50KGV2ZW50KTsK
KworICAgIGlmICghc2Nyb2xsKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2N1cnJl
bnRLZXlib2FyZFNjcm9sbCA9IHNjcm9sbDsKKworICAgIGlmIChldmVudC50eXBlKCkgIT0gZXZl
bnROYW1lcygpLmtleWRvd25FdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYg
KG1fc2Nyb2xsVHJpZ2dlcmluZ0tleUlzUHJlc3NlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKG1fY3VycmVudEtleWJvYXJkU2Nyb2xsLT5ncmFudWxhcml0eSA9PSBTY3JvbGxH
cmFudWxhcml0eTo6U2Nyb2xsQnlEb2N1bWVudCkgeworICAgICAgICBtX3ZlbG9jaXR5ID0geyB9
OworICAgICAgICBzdG9wS2V5Ym9hcmRTY3JvbGxBbmltYXRpb24oKTsKKyAgICAgICAgYXV0byBu
ZXdQb3NpdGlvbiA9IEludFBvaW50KG1fc2Nyb2xsQW5pbWF0b3IuY3VycmVudFBvc2l0aW9uKCkg
KyBtX2N1cnJlbnRLZXlib2FyZFNjcm9sbC0+b2Zmc2V0KTsKKyAgICAgICAgbV9zY3JvbGxBbmlt
YXRvci5zY3JvbGxUb1Bvc2l0aW9uV2l0aEFuaW1hdGlvbihuZXdQb3NpdGlvbik7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIG1fdGltZUF0TGFzdEZyYW1lID0gTW9ub3Rvbmlj
VGltZTo6bm93KCk7CisgICAgbV9zY3JvbGxUcmlnZ2VyaW5nS2V5SXNQcmVzc2VkID0gdHJ1ZTsK
KworICAgIG1faWRlYWxQb3NpdGlvbkZvck1pbmltdW1UcmF2ZWwgPSBtX3Njcm9sbEFuaW1hdG9y
LmN1cnJlbnRQb3NpdGlvbigpICsgbV9jdXJyZW50S2V5Ym9hcmRTY3JvbGwtPm9mZnNldDsKKyAg
ICBtX3Njcm9sbENvbnRyb2xsZXIuYmVnaW5LZXlib2FyZFNjcm9sbGluZygpOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3N0YXRpYyBTY3JvbGxQb3NpdGlvbiBmYXJ0aGVzdFBvaW50SW5EaXJl
Y3Rpb24oRmxvYXRQb2ludCBhLCBGbG9hdFBvaW50IGIsIFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rp
b24pCit7CisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBjYXNlIFNjcm9sbERpcmVjdGlv
bjo6U2Nyb2xsVXA6CisgICAgICAgIHJldHVybiBTY3JvbGxQb3NpdGlvbihhLngoKSwgc3RkOjpt
aW4oYS55KCksIGIueSgpKSk7CisgICAgY2FzZSBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbERvd246
CisgICAgICAgIHJldHVybiBTY3JvbGxQb3NpdGlvbihhLngoKSwgc3RkOjptYXgoYS55KCksIGIu
eSgpKSk7CisgICAgY2FzZSBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbExlZnQ6CisgICAgICAgIHJl
dHVybiBTY3JvbGxQb3NpdGlvbihzdGQ6Om1pbihhLngoKSwgYi54KCkpLCBhLnkoKSk7CisgICAg
Y2FzZSBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbFJpZ2h0OgorICAgICAgICByZXR1cm4gU2Nyb2xs
UG9zaXRpb24oc3RkOjptYXgoYS54KCksIGIueCgpKSwgYS55KCkpOworICAgIH0KKworICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB7IH07Cit9CisKK3ZvaWQgS2V5Ym9hcmRT
Y3JvbGxpbmdBbmltYXRvcjo6c3RvcEtleWJvYXJkU2Nyb2xsQW5pbWF0aW9uKCkKK3sKKyAgICBp
ZiAoIW1fY3VycmVudEtleWJvYXJkU2Nyb2xsKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRv
IHBhcmFtcyA9IEtleWJvYXJkU2Nyb2xsUGFyYW1ldGVyczo6cGFyYW1ldGVycygpOworCisgICAg
Ly8gRGV0ZXJtaW5lIHRoZSBzZXR0bGluZyBwb3NpdGlvbiBvZiB0aGUgc3ByaW5nLCBjb25zZXJ2
aW5nIHRoZSBzeXN0ZW0ncyBjdXJyZW50IGVuZXJneS4KKyAgICAvLyBLaW5ldGljID0gZWxhc3Rp
YyBwb3RlbnRpYWwKKyAgICAvLyAxLzIgKiBtICogdl4yID0gMS8yICogayAqIHheMgorICAgIC8v
IHggPSBzcXJ0KHZeMiAqIG0gLyBrKQorICAgIGF1dG8gZGlzcGxhY2VtZW50TWFnbml0dWRlU3F1
YXJlZCA9IChtX3ZlbG9jaXR5ICogbV92ZWxvY2l0eSkuc2NhbGVkKHBhcmFtcy5zcHJpbmdNYXNz
IC8gcGFyYW1zLnNwcmluZ1N0aWZmbmVzcyk7CisgICAgRmxvYXRTaXplIGRpc3BsYWNlbWVudCA9
IHsKKyAgICAgICAgc3RkOjpjb3B5c2lnbihzcXJ0KGRpc3BsYWNlbWVudE1hZ25pdHVkZVNxdWFy
ZWQud2lkdGgoKSksIG1fdmVsb2NpdHkud2lkdGgoKSksCisgICAgICAgIHN0ZDo6Y29weXNpZ24o
c3FydChkaXNwbGFjZW1lbnRNYWduaXR1ZGVTcXVhcmVkLmhlaWdodCgpKSwgbV92ZWxvY2l0eS5o
ZWlnaHQoKSkKKyAgICB9OworCisgICAgLy8gSWYgdGhlIHNwcmluZyB3b3VsZCBzZXR0bGUgYmVm
b3JlIHRoZSBtaW5pbXVtIHRyYXZlbCBkaXN0YW5jZQorICAgIC8vIGZvciBhbiBpbnN0YW50YW5l
b3VzIHRhcCwgbW92ZSB0aGUgc2V0dGxpbmcgcG9zaXRpb24gb2YgdGhlIHNwcmluZworICAgIC8v
IG91dCB0byB0aGF0IHBvaW50LgorICAgIFNjcm9sbFBvc2l0aW9uIGZhcnRoZXN0UG9pbnQgPSBm
YXJ0aGVzdFBvaW50SW5EaXJlY3Rpb24obV9zY3JvbGxBbmltYXRvci5jdXJyZW50UG9zaXRpb24o
KSArIGRpc3BsYWNlbWVudCwgbV9pZGVhbFBvc2l0aW9uRm9yTWluaW11bVRyYXZlbCwgbV9jdXJy
ZW50S2V5Ym9hcmRTY3JvbGwtPmRpcmVjdGlvbik7CisgICAgbV9pZGVhbFBvc2l0aW9uID0gbV9z
Y3JvbGxBbmltYXRvci5zY3JvbGxhYmxlQXJlYSgpLmNvbnN0cmFpblNjcm9sbFBvc2l0aW9uKGZh
cnRoZXN0UG9pbnQpOworCisgICAgbV9jdXJyZW50S2V5Ym9hcmRTY3JvbGwgPSBzdGQ6Om51bGxv
cHQ7Cit9CisKK3ZvaWQgS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcjo6aGFuZGxlS2V5VXBFdmVu
dFdoaWxlU2Nyb2xsaW5nKCkKK3sKKyAgICBpZiAoIW1fc2Nyb2xsVHJpZ2dlcmluZ0tleUlzUHJl
c3NlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RvcEtleWJvYXJkU2Nyb2xsQW5pbWF0aW9u
KCk7CisgICAgbV9zY3JvbGxUcmlnZ2VyaW5nS2V5SXNQcmVzc2VkID0gZmFsc2U7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tl
eWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZjhlNWJlMDAwNDc4ODIzYmJl
YjdlNzEwODFiOGM2ZjM3OThjZGRiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5oCkBAIC0wLDAgKzEsNjAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNp
bmNsdWRlICJLZXlib2FyZFNjcm9sbC5oIgorI2luY2x1ZGUgIlJlY3RFZGdlcy5oIgorI2luY2x1
ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgS2V5
Ym9hcmRTY3JvbGxpbmdBbmltYXRvciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisgICAgS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcihTY3JvbGxBbmltYXRvciYsIFNj
cm9sbENvbnRyb2xsZXImKTsKKworICAgIGJvb2wgYmVnaW5LZXlib2FyZFNjcm9sbEdlc3R1cmUo
S2V5Ym9hcmRFdmVudCYpOworICAgIHZvaWQgaGFuZGxlS2V5VXBFdmVudFdoaWxlU2Nyb2xsaW5n
KCk7CisgICAgdm9pZCB1cGRhdGVLZXlib2FyZFNjcm9sbFBvc2l0aW9uKE1vbm90b25pY1RpbWUp
OworCitwcml2YXRlOgorICAgIHZvaWQgc3RvcEtleWJvYXJkU2Nyb2xsQW5pbWF0aW9uKCk7Cisg
ICAgUmVjdEVkZ2VzPGJvb2w+IHNjcm9sbGFibGVEaXJlY3Rpb25zRnJvbU9mZnNldChGbG9hdFBv
aW50KSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPEtleWJvYXJkU2Nyb2xsPiBrZXlib2FyZFNj
cm9sbEZvcktleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCYpOworICAgIGZsb2F0IHNjcm9sbERp
c3RhbmNlKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkpOworCisgICAgU2Nyb2xs
QW5pbWF0b3ImIG1fc2Nyb2xsQW5pbWF0b3I7CisgICAgU2Nyb2xsQ29udHJvbGxlciYgbV9zY3Jv
bGxDb250cm9sbGVyOworICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6S2V5Ym9hcmRTY3JvbGw+
IG1fY3VycmVudEtleWJvYXJkU2Nyb2xsOworICAgIGJvb2wgbV9zY3JvbGxUcmlnZ2VyaW5nS2V5
SXNQcmVzc2VkOworICAgIEZsb2F0U2l6ZSBtX3ZlbG9jaXR5OworICAgIE1vbm90b25pY1RpbWUg
bV90aW1lQXRMYXN0RnJhbWU7CisgICAgRmxvYXRQb2ludCBtX2lkZWFsUG9zaXRpb25Gb3JNaW5p
bXVtVHJhdmVsOworICAgIEZsb2F0UG9pbnQgbV9pZGVhbFBvc2l0aW9uOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsQW5pbWF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3Iu
Y3BwCmluZGV4IDVlODNmZGJhZTI3ZmI4OTg3ZjgwOWE4NTQ5NzU3YWMwNTg2MjM4MGMuLjRmODc5
NzEzNTQzYjdhMTJjMTBkM2YxZGUyMjJjMzkxZDAwYmYxNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJT
Y3JvbGxBbmltYXRvci5oIgogCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIktl
eWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuaCIKICNpbmNsdWRlICJMYXlvdXRTaXplLmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCiAjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0aW9uU21v
b3RoLmgiCkBAIC02Nyw2ICs2OCw3IEBAIFNjcm9sbEFuaW1hdG9yOjpTY3JvbGxBbmltYXRvcihT
Y3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEpCiAgICAgICAgIFt0aGlzXSB7CiAgICAgICAg
ICAgICBtX3Njcm9sbGFibGVBcmVhLnNldFNjcm9sbEJlaGF2aW9yU3RhdHVzKFNjcm9sbEJlaGF2
aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbik7CiAgICAgICAgIH0pKQorICAgICwgbV9rZXlib2Fy
ZFNjcm9sbGluZ0FuaW1hdG9yKG1ha2VVbmlxdWU8S2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcj4o
KnRoaXMsIG1fc2Nyb2xsQ29udHJvbGxlcikpCiB7CiB9CiAKQEAgLTMzMiw3ICszMzQsNyBAQCB2
b2lkIFNjcm9sbEFuaW1hdG9yOjpzdGFydEFuaW1hdGlvbkNhbGxiYWNrKFNjcm9sbENvbnRyb2xs
ZXImKQogewogICAgIGlmIChtX3Njcm9sbENvbnRyb2xsZXJBbmltYXRpb25UaW1lci5pc0FjdGl2
ZSgpKQogICAgICAgICByZXR1cm47Ci0gICAgICAgIAorCiAgICAgbV9zY3JvbGxDb250cm9sbGVy
QW5pbWF0aW9uVGltZXIuc3RhcnRSZXBlYXRpbmcoMV9zIC8gNjAuKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgKaW5kZXggZDkyY2ZkYmRmYmIwNWYxZmE5MTM0
ZWM2NTg3NWFmY2I4Y2UxZDc4Yy4uMzMyNzFlMDY4MWZhNTM5Yjk3NzY1OGRhNWE1YzlmYzI2OTEw
MDkxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3Iu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCkBAIC0zNCw3
ICszNCw2IEBACiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2hl
ZWxFdmVudC5oIgogI2luY2x1ZGUgIlNjcm9sbENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJTY3Jv
bGxUeXBlcy5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSAiV2hlZWxFdmVudFRlc3RN
b25pdG9yLmgiCiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KQEAgLTQzLDYgKzQyLDcgQEAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIEtleWJvYXJk
U2Nyb2xsaW5nQW5pbWF0b3I7CiBjbGFzcyBQbGF0Zm9ybVRvdWNoRXZlbnQ7CiBjbGFzcyBTY3Jv
bGxBbmltYXRpb247CiBjbGFzcyBTY3JvbGxhYmxlQXJlYTsKQEAgLTgxLDYgKzgxLDggQEAgcHVi
bGljOgogCiAgICAgdmlydHVhbCBib29sIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1X
aGVlbEV2ZW50Jik7CiAKKyAgICBLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yICprZXlib2FyZFNj
cm9sbGluZ0FuaW1hdG9yKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9rZXlib2FyZFNjcm9s
bGluZ0FuaW1hdG9yLmdldCgpOyB9CisKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIHZp
cnR1YWwgYm9vbCBoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYpOwog
I2VuZGlmCkBAIC0xNzgsNiArMTgwLDcgQEAgcHJvdGVjdGVkOgogICAgIEZsb2F0UG9pbnQgbV9j
dXJyZW50UG9zaXRpb247CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0aW9uPiBt
X3Njcm9sbEFuaW1hdGlvbjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8S2V5Ym9hcmRTY3JvbGxpbmdB
bmltYXRvcj4gbV9rZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQ29u
dHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmNw
cAppbmRleCBlOTM3NWJhNzQ3NjhiZGI0NzNiZDhiZjFmZmE0OWI4MWNmOTk0M2E5Li4yMWZkOTg1
YzI1MjRmNWEzMTQxMzQ4OWY2NjMxNjkxYTFjNTBhM2M2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcm9sbENvbnRyb2xsZXIuaCIKIAorI2luY2x1ZGUgIktl
eWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuaCIKICNpbmNsdWRlICJMYXlvdXRTaXplLmgiCiAjaW5j
bHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgpAQCAtNDMs
MTUgKzQ0LDE2IEBAIFNjcm9sbENvbnRyb2xsZXI6OlNjcm9sbENvbnRyb2xsZXIoU2Nyb2xsQ29u
dHJvbGxlckNsaWVudCYgY2xpZW50KQogCiB2b2lkIFNjcm9sbENvbnRyb2xsZXI6OmFuaW1hdGlv
bkNhbGxiYWNrKE1vbm90b25pY1RpbWUgY3VycmVudFRpbWUpCiB7Ci0gICAgTE9HX1dJVEhfU1RS
RUFNKFNjcm9sbGluZywgc3RyZWFtIDw8ICJTY3JvbGxDb250cm9sbGVyICIgPDwgdGhpcyA8PCAi
IGFuaW1hdGlvbkNhbGxiYWNrOiBpc0FuaW1hdGluZ1J1YmJlckJhbmQgIiA8PCBtX2lzQW5pbWF0
aW5nUnViYmVyQmFuZCA8PCAiIGlzQW5pbWF0aW5nU2Nyb2xsU25hcCAiIDw8IG1faXNBbmltYXRp
bmdTY3JvbGxTbmFwKTsKKyAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwg
IlNjcm9sbENvbnRyb2xsZXIgIiA8PCB0aGlzIDw8ICIgYW5pbWF0aW9uQ2FsbGJhY2s6IGlzQW5p
bWF0aW5nUnViYmVyQmFuZCAiIDw8IG1faXNBbmltYXRpbmdSdWJiZXJCYW5kIDw8ICIgaXNBbmlt
YXRpbmdTY3JvbGxTbmFwICIgPDwgbV9pc0FuaW1hdGluZ1Njcm9sbFNuYXAgPDwgImlzQW5pbWF0
aW5nS2V5Ym9hcmRTY3JvbGxpbmciIDw8IG1faXNBbmltYXRpbmdLZXlib2FyZFNjcm9sbGluZyk7
CiAKICAgICB1cGRhdGVTY3JvbGxTbmFwQW5pbWF0aW5nU3RhdGUoY3VycmVudFRpbWUpOwogICAg
IHVwZGF0ZVJ1YmJlckJhbmRBbmltYXRpbmdTdGF0ZShjdXJyZW50VGltZSk7CisgICAgdXBkYXRl
S2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRpbmdTdGF0ZShjdXJyZW50VGltZSk7CiB9CiAKIHZvaWQg
U2Nyb2xsQ29udHJvbGxlcjo6c3RhcnRPclN0b3BBbmltYXRpb25DYWxsYmFja3MoKQogewotICAg
IGJvb2wgbmVlZHNDYWxsYmFja3MgPSBtX2lzQW5pbWF0aW5nUnViYmVyQmFuZCB8fCBtX2lzQW5p
bWF0aW5nU2Nyb2xsU25hcDsKKyAgICBib29sIG5lZWRzQ2FsbGJhY2tzID0gbV9pc0FuaW1hdGlu
Z1J1YmJlckJhbmQgfHwgbV9pc0FuaW1hdGluZ1Njcm9sbFNuYXAgfHwgbV9pc0FuaW1hdGluZ0tl
eWJvYXJkU2Nyb2xsaW5nOwogICAgIGlmIChuZWVkc0NhbGxiYWNrcyA9PSBtX2lzUnVubmluZ0Fu
aW1hdGluZ0NhbGxiYWNrKQogICAgICAgICByZXR1cm47CiAKQEAgLTY1LDYgKzY3LDE2IEBAIHZv
aWQgU2Nyb2xsQ29udHJvbGxlcjo6c3RhcnRPclN0b3BBbmltYXRpb25DYWxsYmFja3MoKQogICAg
IG1faXNSdW5uaW5nQW5pbWF0aW5nQ2FsbGJhY2sgPSBmYWxzZTsKIH0KIAordm9pZCBTY3JvbGxD
b250cm9sbGVyOjpiZWdpbktleWJvYXJkU2Nyb2xsaW5nKCkKK3sKKyAgICBzZXRJc0FuaW1hdGlu
Z0tleWJvYXJkU2Nyb2xsaW5nKHRydWUpOworfQorCit2b2lkIFNjcm9sbENvbnRyb2xsZXI6OnN0
b3BLZXlib2FyZFNjcm9sbGluZygpCit7CisgICAgc2V0SXNBbmltYXRpbmdLZXlib2FyZFNjcm9s
bGluZyhmYWxzZSk7Cit9CisKIHZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c2V0SXNBbmltYXRpbmdS
dWJiZXJCYW5kKGJvb2wgaXNBbmltYXRpbmdSdWJiZXJCYW5kKQogewogICAgIGlmIChpc0FuaW1h
dGluZ1J1YmJlckJhbmQgPT0gbV9pc0FuaW1hdGluZ1J1YmJlckJhbmQpCkBAIC04Myw2ICs5NSwx
NSBAQCB2b2lkIFNjcm9sbENvbnRyb2xsZXI6OnNldElzQW5pbWF0aW5nU2Nyb2xsU25hcChib29s
IGlzQW5pbWF0aW5nU2Nyb2xsU25hcCkKICAgICBzdGFydE9yU3RvcEFuaW1hdGlvbkNhbGxiYWNr
cygpOwogfQogCit2b2lkIFNjcm9sbENvbnRyb2xsZXI6OnNldElzQW5pbWF0aW5nS2V5Ym9hcmRT
Y3JvbGxpbmcoYm9vbCBpc0FuaW1hdGluZ0tleWJvYXJkU2Nyb2xsaW5nKQoreworICAgIGlmIChp
c0FuaW1hdGluZ0tleWJvYXJkU2Nyb2xsaW5nID09IG1faXNBbmltYXRpbmdLZXlib2FyZFNjcm9s
bGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pc0FuaW1hdGluZ0tleWJvYXJkU2Nyb2xs
aW5nID0gaXNBbmltYXRpbmdLZXlib2FyZFNjcm9sbGluZzsKKyAgICBzdGFydE9yU3RvcEFuaW1h
dGlvbkNhbGxiYWNrcygpOworfQorCiBib29sIFNjcm9sbENvbnRyb2xsZXI6OnVzZXNTY3JvbGxT
bmFwKCkgY29uc3QKIHsKICAgICByZXR1cm4gISFtX3Njcm9sbFNuYXBTdGF0ZTsKQEAgLTE5NSw2
ICsyMTYsMTUgQEAgdm9pZCBTY3JvbGxDb250cm9sbGVyOjpyZXNuYXBBZnRlckxheW91dCgpCiAg
ICAgICAgIHNldE5lYXJlc3RTY3JvbGxTbmFwSW5kZXhGb3JBeGlzQW5kT2Zmc2V0KFNjcm9sbEV2
ZW50QXhpczo6VmVydGljYWwsIG9mZnNldC55KCkpOwogCiB9CisKK3ZvaWQgU2Nyb2xsQ29udHJv
bGxlcjo6dXBkYXRlS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRpbmdTdGF0ZShNb25vdG9uaWNUaW1l
IGN1cnJlbnRUaW1lKQoreworICAgIGlmICghbV9pc0FuaW1hdGluZ0tleWJvYXJkU2Nyb2xsaW5n
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NsaWVudC5rZXlib2FyZFNjcm9sbGluZ0FuaW1h
dG9yKCktPnVwZGF0ZUtleWJvYXJkU2Nyb2xsUG9zaXRpb24oY3VycmVudFRpbWUpOworfQorCiAv
LyBDdXJyZW50bHksIG9ubHkgTWFjIHN1cHBvcnRzIG1vbWVudHVtIHNyb2xsaW5nLWJhc2VkIHNj
cm9sbHNuYXBwaW5nIGFuZCBydWJiZXIgYmFuZGluZwogLy8gc28gYWxsIG9mIHRoZXNlIG1ldGhv
ZHMgYXJlIGEgbm9vcCBvbiBub24tTWFjIHBsYXRmb3Jtcy4KICNpZiAhUExBVEZPUk0oTUFDKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5oCmluZGV4IDJiNDc1MWVl
YThlNDNlNWQ1ZDViMjlmOTMzNDExN2VkZmNiN2NkOGUuLjg4OGE0MTI4NDFlMzgyNWEyMDQ1ZWY3
ZGU2MjM0YjY4ODViYzdlOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbENvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxDb250
cm9sbGVyLmgKQEAgLTM4LDYgKzM4LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFz
cyBLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yOwogY2xhc3MgTGF5b3V0U2l6ZTsKIGNsYXNzIFBs
YXRmb3JtV2hlZWxFdmVudDsKIGNsYXNzIFNjcm9sbENvbnRyb2xsZXI7CkBAIC03Miw2ICs3Myw5
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc3RhcnRBbmltYXRpb25DYWxsYmFjayhTY3Jv
bGxDb250cm9sbGVyJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzdG9wQW5pbWF0aW9uQ2FsbGJh
Y2soU2Nyb2xsQ29udHJvbGxlciYpID0gMDsKIAorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVLZXli
b2FyZFNjcm9sbFBvc2l0aW9uKE1vbm90b25pY1RpbWUpIHsgfQorICAgIHZpcnR1YWwgS2V5Ym9h
cmRTY3JvbGxpbmdBbmltYXRvciAqa2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcigpIGNvbnN0IHsg
cmV0dXJuIG51bGxwdHI7IH0KKwogI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKICAgICB2aXJ0
dWFsIGJvb2wgYWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2
ZW50JikgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NWZXJ0aWNhbFN0cmV0Y2hp
bmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgY29uc3QgPSAwOwpAQCAtMTIxLDYgKzEyNSw5
IEBAIHB1YmxpYzoKICAgICBib29sIHVzZXNTY3JvbGxTbmFwKCkgY29uc3Q7CiAgICAgdm9pZCBz
dG9wQWxsVGltZXJzKCk7CiAgICAgdm9pZCBzY3JvbGxQb3NpdGlvbkNoYW5nZWQoKTsKKworICAg
IHZvaWQgYmVnaW5LZXlib2FyZFNjcm9sbGluZygpOworICAgIHZvaWQgc3RvcEtleWJvYXJkU2Ny
b2xsaW5nKCk7CiAgICAgCiAgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCBwZXJpb2RpY2FsbHkgYnkg
dGhlIGNsaWVudC4gU3RhcnRlZCBieSBzdGFydEFuaW1hdGlvbkNhbGxiYWNrKCksIHN0b3BwZWQg
Ynkgc3RvcEFuaW1hdGlvbkNhbGxiYWNrKCkuCiAgICAgdm9pZCBhbmltYXRpb25DYWxsYmFjayhN
b25vdG9uaWNUaW1lKTsKQEAgLTE2Myw5ICsxNzAsMTEgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQg
dXBkYXRlU2Nyb2xsU25hcEFuaW1hdGluZ1N0YXRlKE1vbm90b25pY1RpbWUpOwogICAgIHZvaWQg
dXBkYXRlUnViYmVyQmFuZEFuaW1hdGluZ1N0YXRlKE1vbm90b25pY1RpbWUpOwotICAgIAorICAg
IHZvaWQgdXBkYXRlS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRpbmdTdGF0ZShNb25vdG9uaWNUaW1l
KTsKKwogICAgIHZvaWQgc2V0SXNBbmltYXRpbmdSdWJiZXJCYW5kKGJvb2wpOwogICAgIHZvaWQg
c2V0SXNBbmltYXRpbmdTY3JvbGxTbmFwKGJvb2wpOworICAgIHZvaWQgc2V0SXNBbmltYXRpbmdL
ZXlib2FyZFNjcm9sbGluZyhib29sKTsKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICB2b2lkIHN0
YXJ0U2Nyb2xsU25hcEFuaW1hdGlvbigpOwpAQCAtMTk5LDYgKzIwOCw3IEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBtX2lzUnVubmluZ0FuaW1hdGluZ0NhbGxiYWNrIHsgZmFsc2UgfTsKICAgICBib29s
IG1faXNBbmltYXRpbmdSdWJiZXJCYW5kIHsgZmFsc2UgfTsKICAgICBib29sIG1faXNBbmltYXRp
bmdTY3JvbGxTbmFwIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNBbmltYXRpbmdLZXlib2FyZFNj
cm9sbGluZyB7IGZhbHNlIH07CiAKICNpZiBQTEFURk9STShNQUMpCiAgICAgV2FsbFRpbWUgbV9s
YXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXA7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434249</attachid>
            <date>2021-07-26 15:21:46 -0700</date>
            <delta_ts>2021-07-28 13:18:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228009-20210726182145.patch</filename>
            <type>text/plain</type>
            <size>35744</size>
            <attacher name="Dana Estra">dana.estra</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5OTU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTg2OTY2YzRlMjRjN2M1
MDIwZWJmNTMyZWUyZjRhODgzNDBjYjgyYi4uYTY5MTlhMzFiMDliNjE2ZDUyNzBjOGRjZjNlYmRm
MjliN2I4NDdhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDIxLTA3LTIzICBEYW5h
IEVzdHJhICA8ZGVzdHJhQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQga2V5LWRyaXZlbiBzbW9v
dGggc2Nyb2xsaW5nIHRvIG1hY09TCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjgwMDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBDYXVzZSBrZXlib2FyZCBzY3JvbGwgZXZlbnQgdG8gdHJpZ2dlciBzdGFy
dCBvZiBzbW9vdGggc2Nyb2xsIGFuaW1hdGlvbiwgdXNpbmcgc2FtZSBwaHlzaWNzIGltcGxlbWVu
dGF0aW9uIGFzIGlPUyBzbW9vdGggc2Nyb2xsaW5nLgorCisgICAgICAgIE5vIHRlc3RzIHlldC4K
KworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpkZWZhdWx0RXZlbnRIYW5k
bGVyKToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpFdmVudEhhbmRsZXI6OmRlZmF1bHRLZXlib2FyZEV2ZW50SGFuZGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNjcm9sbERpc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50SGFuZGxlcjo6c3RvcEtleWJvYXJkU2Nyb2xsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50SGFuZGxlcjo6c3RhcnRLZXlib2FyZFNjcm9sbGluZyk6CisgICAgICAgICogcGxhdGZv
cm0vS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vU2Nyb2xsQW5pbWF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6
OnN0YXJ0QW5pbWF0aW9uQ2FsbGJhY2spOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1h
dG9yLmg6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjphbmltYXRpb25DYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjpzdGFydE9yU3RvcEFuaW1hdGlvbkNhbGxiYWNr
cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjpiZWdpbktleWJvYXJkU2Ny
b2xsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OnN0b3BLZXlib2Fy
ZFNjcm9sbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjpzZXRJc0Fu
aW1hdGluZ0tleWJvYXJkU2Nyb2xsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRy
b2xsZXI6OnVwZGF0ZUtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0aW5nU3RhdGUpOgorICAgICAgICAq
IHBsYXRmb3JtL1Njcm9sbENvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENv
bnRyb2xsZXJDbGllbnQ6OnVwZGF0ZUtleWJvYXJkU2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAK
IDIwMjEtMDctMTUgIFRpbSBOZ3V5ZW4gIDxudGltQGFwcGxlLmNvbT4KIAogICAgICAgICA8ZGlh
bG9nPiBlbGVtZW50OiBkbyBub3QgcGVyZm9ybSBjbG9zZSgpIG1ldGhvZCBzdGVwcyB3aGVuIHJl
bW92aW5nIG9wZW4gYXR0cmlidXRlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCAzY2JmYTVhYjVhNGJmNTg0
NDk2YWI2MTMzY2UzMDhkNDk5MjNiYTAyLi5jM2ZmNDlkMDE4MjgwZDI3MzdmZGE1MDBkYTI0ZmZj
MDg2YTdmZGU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTgyNyw2ICsxODI3LDcgQEAgcGxhdGZvcm0v
RmlsZUhhbmRsZS5jcHAKIHBsYXRmb3JtL0ZpbGVNb25pdG9yLmNwcAogcGxhdGZvcm0vRmlsZVN0
cmVhbS5jcHAKIHBsYXRmb3JtL0ZyYW1lUmF0ZU1vbml0b3IuY3BwCitwbGF0Zm9ybS9LZXlib2Fy
ZFNjcm9sbGluZ0FuaW1hdG9yLmNwcAogcGxhdGZvcm0vTGF5b3V0VW5pdC5jcHAKIHBsYXRmb3Jt
L0xlZ2FjeVNjaGVtZVJlZ2lzdHJ5LmNwcAogcGxhdGZvcm0vTGVuZ3RoLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDRhMWQ3
ODY1NDc2OGJjMjg0ZmQ2N2Q3NDY2ZDg5YWNiZDYwY2NlOTguLjFkMjU0ZDE4YWI0MzM0NzY5N2E5
NDA5ODE0N2E4ODZiYTFiN2FlYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTY3Myw2ICs2NzMsNyBAQAogCQkxRjg3NTZCMjFF
MjJDMzM1MDA0MkM0MEQgLyogV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxRjg3NTZCMTFFMjJCRUVG
MDA0MkM0MEQgLyogV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUZBRkJGMTkxNUE1RkE3NDAw
MDgzQTIwIC8qIFVUSVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUZBRkJGMTYxNUE1RkE1MjAwMDgzQTIwIC8qIFVUSVV0aWxpdGllcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFGQzQw
RkJBMTY1NUNDQjkwMDQwRjI5RSAvKiBTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxRkM0MEZCNzE2NTVDNTkxMDA0
MEYyOUUgLyogU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5oICovOyB9OworCQkxRkQ5OTJGODI2QUEy
NEY5MDA4OEU1OTYgLyogS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUZEOTkyRjYyNkFBMjRGODAwODhFNTk2
IC8qIEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyMEQ2MjkyNzEyNTM2OTBCMDAwODE1NDMgLyogSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyMEQ2MjkyNTEyNTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uLmggKi87IH07CiAJCTIyNUExNkI1MEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVu
dFJlZ2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MjI1QTE2QjMwRDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2ZW50UmVnaW9uLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMjI4QzI4NDUxMEQ4MjUwMDAw
OUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMjI4QzI4NDQxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBw
YWJsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBA
IC03MDcyLDYgKzcwNzMsOCBAQAogCQkxRkFGQkYxNzE1QTVGQTUyMDAwODNBMjAgLyogVVRJVXRp
bGl0aWVzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVVRJVXRp
bGl0aWVzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxRkM0MEZCNzE2NTVDNTkx
MDA0MEYyOUUgLyogU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTFGQzQwRkI4MTY1NUM1OTEwMDQwRjI5RSAvKiBTdWJpbWFnZUNhY2hlV2l0
aFRpbWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN1YmltYWdl
Q2FjaGVXaXRoVGltZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxRkQ5OTJG
NjI2QUEyNEY4MDA4OEU1OTYgLyogS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFGRDk5MkY5MjZBQTI1NEQwMDg4RTU5NiAvKiBL
ZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyMEQ2MjkyNDEyNTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTIw
RDYyOTI1MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTIyNUExNkIzMEQ1QzExRTkwMDA5MDI5NSAv
KiBXZWJFdmVudFJlZ2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJF
dmVudFJlZ2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjgxMTgsNiArMjgx
MjEsOCBAQAogCQkJCTQxOTBGM0EzMjQ5RDE1MjgwMDUzMUM1NyAvKiBGcmFtZVJhdGVNb25pdG9y
LmggKi8sCiAJCQkJQTg3NDhCREYxMkNCRjJEQzAwMUZCQTQxIC8qIEhhc2hUb29scy5oICovLAog
CQkJCUJDM0JDMjlCMEU5MUFCMEYwMDgzNTU4OCAvKiBIb3N0V2luZG93LmggKi8sCisJCQkJMUZE
OTkyRjkyNkFBMjU0RDAwODhFNTk2IC8qIEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuY3BwICov
LAorCQkJCTFGRDk5MkY2MjZBQTI0RjgwMDg4RTU5NiAvKiBLZXlib2FyZFNjcm9sbGluZ0FuaW1h
dG9yLmggKi8sCiAJCQkJMUFFMDBENTcxODJEQUM4RDAwMDg3REQ3IC8qIEtleWVkQ29kaW5nLmgg
Ki8sCiAJCQkJRTE1RkY3RDQxOEM5NTUzODAwRkU0Qzg3IC8qIEtleXByZXNzQ29tbWFuZC5oICov
LAogCQkJCUEzRDQyQTg0MUYzM0JBMzYwMEE2NEI2MiAvKiBMYXlvdXRVbml0LmNwcCAqLywKQEAg
LTM0MTQ4LDYgKzM0MTUzLDcgQEAKIAkJCQk4M0I3NEVGNjFGM0UwQkYyMDA5OTZCQzcgLyogS2Vl
cGFsaXZlUmVxdWVzdFRyYWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1MDMxQjQ0MEE0NEVG
QzcwMEY5OTJFMCAvKiBLZXlib2FyZEV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxRjAyMEFF
RjI2NzgwRkNFMDAwMDgwOUEgLyogS2V5Ym9hcmRTY3JvbGwuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTFGRDk5MkY4MjZBQTI0RjkwMDg4RTU5NiAvKiBLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQUUwMEQ1OTE4MkRBQzhEMDAwODdERDcgLyogS2V5ZWRDb2Rp
bmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxN0E2M0M1MUI3NDMxOEYwMEU3RENEQyAvKiBLZXll
ZERlY29kZXJDRi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE3QTYzQzYxQjc0MzE5MjAwRTdEQ0RD
IC8qIEtleWVkRW5jb2RlckNGLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCBl
MjQ1NzdkZjNkNzYxN2JlNGIyNTYyNzA4YWI3NmQ4ZmM1ODI0NWVkLi5kNTZiMmI5NGZiOGYzYmRh
MDllN2RmMWRlZDQ2ZDk4ZmQ0M2RjNDU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC0yNDMyLDcgKzI0
MzIsNyBAQCB2b2lkIE5vZGU6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmIGV2ZW50KQogICAg
IGlmIChldmVudC50YXJnZXQoKSAhPSB0aGlzKQogICAgICAgICByZXR1cm47CiAgICAgY29uc3Qg
QXRvbVN0cmluZyYgZXZlbnRUeXBlID0gZXZlbnQudHlwZSgpOwotICAgIGlmIChldmVudFR5cGUg
PT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygp
LmtleXByZXNzRXZlbnQpIHsKKyAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5rZXlk
b3duRXZlbnQgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50IHx8IGV2
ZW50VHlwZSA9PSBldmVudE5hbWVzKCkua2V5dXBFdmVudCkgewogICAgICAgICBpZiAoaXM8S2V5
Ym9hcmRFdmVudD4oZXZlbnQpKSB7CiAgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9j
dW1lbnQoKS5mcmFtZSgpKQogICAgICAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS5k
ZWZhdWx0S2V5Ym9hcmRFdmVudEhhbmRsZXIoZG93bmNhc3Q8S2V5Ym9hcmRFdmVudD4oZXZlbnQp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCAwNWNkYTY1ODE5MjRhMjZj
ZjcwNWM5ODI5NWZkNDI4ZTQzNjRmNzNiLi4wZjgwMTQwNTNiZjY0OWU0NTdlMjY0MzBkN2NjYTZj
NWYxNzRmNGI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC02OCw3ICs2
OCw3IEBACiAjaW5jbHVkZSAiSW1hZ2VPdmVybGF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIklu
c3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKLSNp
bmNsdWRlICJLZXlib2FyZFNjcm9sbC5oIgorI2luY2x1ZGUgIktleWJvYXJkU2Nyb2xsaW5nQW5p
bWF0b3IuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgog
I2luY2x1ZGUgIk1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaCIKQEAgLTM4MDMsNiArMzgw
Myw4IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpkZWZhdWx0S2V5Ym9hcmRFdmVudEhhbmRsZXIoS2V5
Ym9hcmRFdmVudCYgZXZlbnQpCiAgICAgICAgIGlmIChldmVudC5jaGFyQ29kZSgpID09ICcgJykK
ICAgICAgICAgICAgIGRlZmF1bHRTcGFjZUV2ZW50SGFuZGxlcihldmVudCk7CiAgICAgfQorICAg
IGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXVwRXZlbnQpCisgICAgICAgIHN0
b3BLZXlib2FyZFNjcm9sbGluZygpOwogfQogCiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKQEAg
LTQxOTcsNyArNDE5OSw3IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpkZWZhdWx0U3BhY2VFdmVudEhh
bmRsZXIoS2V5Ym9hcmRFdmVudCYgZXZlbnQpCiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1
cm47CiAKLSAgICBib29sIGRlZmF1bHRIYW5kbGVkID0gbV9mcmFtZS5zZXR0aW5ncygpLmV2ZW50
SGFuZGxlckRyaXZlblNtb290aEtleWJvYXJkU2Nyb2xsaW5nRW5hYmxlZCgpID8gaGFuZGxlS2V5
Ym9hcmRTY3JvbGxpbmcoZXZlbnQpIDogdmlldy0+bG9naWNhbFNjcm9sbChkaXJlY3Rpb24sIFNj
cm9sbEJ5UGFnZSk7CisgICAgYm9vbCBkZWZhdWx0SGFuZGxlZCA9IG1fZnJhbWUuc2V0dGluZ3Mo
KS5ldmVudEhhbmRsZXJEcml2ZW5TbW9vdGhLZXlib2FyZFNjcm9sbGluZ0VuYWJsZWQoKSA/IHN0
YXJ0S2V5Ym9hcmRTY3JvbGxpbmcoZXZlbnQpIDogdmlldy0+bG9naWNhbFNjcm9sbChkaXJlY3Rp
b24sIFNjcm9sbEJ5UGFnZSk7CiAgICAgaWYgKGRlZmF1bHRIYW5kbGVkKQogICAgICAgICBldmVu
dC5zZXREZWZhdWx0SGFuZGxlZCgpOwogfQpAQCAtNDIzNyw3ICs0MjM5LDcgQEAgZmxvYXQgRXZl
bnRIYW5kbGVyOjpzY3JvbGxEaXN0YW5jZShTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3Jv
bGxHcmFudWxhcml0eQogICAgICAgICAgICAgcmV0dXJuIG1fZnJhbWUudmlldygpLT52ZXJ0aWNh
bFNjcm9sbGJhcigpOwogICAgICAgICByZXR1cm4gbV9mcmFtZS52aWV3KCktPmhvcml6b250YWxT
Y3JvbGxiYXIoKTsKICAgICB9KCk7Ci0gICAgCisKICAgICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7
CiAgICAgY2FzZSBTY3JvbGxHcmFudWxhcml0eTo6U2Nyb2xsQnlMaW5lOgogICAgICAgICByZXR1
cm4gc2Nyb2xsYmFyLT5saW5lU3RlcCgpOwpAQCAtNDI1Miw2MiArNDI1NCwyOCBAQCBmbG9hdCBF
dmVudEhhbmRsZXI6OnNjcm9sbERpc3RhbmNlKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNj
cm9sbEdyYW51bGFyaXR5CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAot
Ym9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZUtleWJvYXJkU2Nyb2xsaW5nKEtleWJvYXJkRXZlbnQm
IGV2ZW50KQordm9pZCBFdmVudEhhbmRsZXI6OnN0b3BLZXlib2FyZFNjcm9sbGluZygpCiB7CiAg
ICAgUmVmIHByb3RlY3RlZEZyYW1lID0gbV9mcmFtZTsKLSAgICAvLyBGSVhNRSAoYnVnIDIyNzQ1
OSk6IFRoaXMgbG9naWMgZG9lcyBub3QgYWNjb3VudCBmb3Igd3JpdGluZy1tb2RlLgotCi0gICAg
ZW51bSBjbGFzcyBLZXkgOiB1aW50OF90IHsgTGVmdEFycm93LCBSaWdodEFycm93LCBVcEFycm93
LCBEb3duQXJyb3csIFNwYWNlIH07Ci0KLSAgICBLZXkga2V5OwotICAgIGlmIChldmVudC5rZXlJ
ZGVudGlmaWVyKCkgPT0gIkxlZnQiKQotICAgICAgICBrZXkgPSBLZXk6OkxlZnRBcnJvdzsKLSAg
ICBlbHNlIGlmIChldmVudC5rZXlJZGVudGlmaWVyKCkgPT0gIlJpZ2h0IikKLSAgICAgICAga2V5
ID0gS2V5OjpSaWdodEFycm93OwotICAgIGVsc2UgaWYgKGV2ZW50LmtleUlkZW50aWZpZXIoKSA9
PSAiVXAiKQotICAgICAgICBrZXkgPSBLZXk6OlVwQXJyb3c7Ci0gICAgZWxzZSBpZiAoZXZlbnQu
a2V5SWRlbnRpZmllcigpID09ICJEb3duIikKLSAgICAgICAga2V5ID0gS2V5OjpEb3duQXJyb3c7
Ci0gICAgZWxzZSBpZiAoZXZlbnQuY2hhckNvZGUoKSA9PSAnICcpCi0gICAgICAgIGtleSA9IEtl
eTo6U3BhY2U7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgRnJhbWVWaWV3
KiB2aWV3ID0gbV9mcmFtZS52aWV3KCk7CiAKLSAgICBhdXRvIGdyYW51bGFyaXR5ID0gWyZdIHsK
LSAgICAgICAgc3dpdGNoIChrZXkpIHsKLSAgICAgICAgY2FzZSBLZXk6OkxlZnRBcnJvdzoKLSAg
ICAgICAgY2FzZSBLZXk6OlJpZ2h0QXJyb3c6Ci0gICAgICAgICAgICByZXR1cm4gZXZlbnQuYWx0
S2V5KCkgPyBTY3JvbGxHcmFudWxhcml0eTo6U2Nyb2xsQnlQYWdlIDogU2Nyb2xsR3JhbnVsYXJp
dHk6OlNjcm9sbEJ5TGluZTsKLSAgICAgICAgY2FzZSBLZXk6OlVwQXJyb3c6Ci0gICAgICAgIGNh
c2UgS2V5OjpEb3duQXJyb3c6Ci0gICAgICAgICAgICBpZiAoZXZlbnQubWV0YUtleSgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBTY3JvbGxHcmFudWxhcml0eTo6U2Nyb2xsQnlEb2N1bWVudDsK
LSAgICAgICAgICAgIGlmIChldmVudC5hbHRLZXkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
U2Nyb2xsR3JhbnVsYXJpdHk6OlNjcm9sbEJ5UGFnZTsKLSAgICAgICAgICAgIHJldHVybiBTY3Jv
bGxHcmFudWxhcml0eTo6U2Nyb2xsQnlMaW5lOwotICAgICAgICBjYXNlIEtleTo6U3BhY2U6Ci0g
ICAgICAgICAgICByZXR1cm4gU2Nyb2xsR3JhbnVsYXJpdHk6OlNjcm9sbEJ5UGFnZTsKLSAgICAg
ICAgfTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9KCk7Cisg
ICAgS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvciogYW5pbWF0b3IgPSB2aWV3LT5zY3JvbGxBbmlt
YXRvcigpLmtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IoKTsKIAotICAgIGF1dG8gZGlyZWN0aW9u
ID0gWyZdIHsKLSAgICAgICAgc3dpdGNoIChrZXkpIHsKLSAgICAgICAgY2FzZSBLZXk6OkxlZnRB
cnJvdzoKLSAgICAgICAgICAgIHJldHVybiBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbExlZnQ7Ci0g
ICAgICAgIGNhc2UgS2V5OjpSaWdodEFycm93OgotICAgICAgICAgICAgcmV0dXJuIFNjcm9sbERp
cmVjdGlvbjo6U2Nyb2xsUmlnaHQ7Ci0gICAgICAgIGNhc2UgS2V5OjpVcEFycm93OgotICAgICAg
ICAgICAgcmV0dXJuIFNjcm9sbERpcmVjdGlvbjo6U2Nyb2xsVXA7Ci0gICAgICAgIGNhc2UgS2V5
OjpEb3duQXJyb3c6Ci0gICAgICAgICAgICByZXR1cm4gU2Nyb2xsRGlyZWN0aW9uOjpTY3JvbGxE
b3duOwotICAgICAgICBjYXNlIEtleTo6U3BhY2U6Ci0gICAgICAgICAgICByZXR1cm4gZXZlbnQu
c2hpZnRLZXkoKSA/IFNjcm9sbERpcmVjdGlvbjo6U2Nyb2xsVXAgOiBTY3JvbGxEaXJlY3Rpb246
OlNjcm9sbERvd247Ci0gICAgICAgIH0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICB9KCk7CisgICAgaWYgKGFuaW1hdG9yKQorICAgICAgICBhbmltYXRvci0+aGFu
ZGxlS2V5VXBFdmVudFdoaWxlU2Nyb2xsaW5nKCk7Cit9CisKK2Jvb2wgRXZlbnRIYW5kbGVyOjpz
dGFydEtleWJvYXJkU2Nyb2xsaW5nKEtleWJvYXJkRXZlbnQmIGV2ZW50KQoreworICAgIFJlZiBw
cm90ZWN0ZWRGcmFtZSA9IG1fZnJhbWU7CisgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS52
aWV3KCk7CisKKyAgICBLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yKiBhbmltYXRvciA9IHZpZXct
PnNjcm9sbEFuaW1hdG9yKCkua2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcigpOwogCi0gICAgcmV0
dXJuIEV2ZW50SGFuZGxlcjo6c2Nyb2xsUmVjdXJzaXZlbHkoZGlyZWN0aW9uLCBncmFudWxhcml0
eSwgbnVsbHB0cik7CisgICAgaWYgKGFuaW1hdG9yKQorICAgICAgICByZXR1cm4gYW5pbWF0b3It
PmJlZ2luS2V5Ym9hcmRTY3JvbGxHZXN0dXJlKGV2ZW50KTsKKworICAgIHJldHVybiBmYWxzZTsK
IH0KIAogdm9pZCBFdmVudEhhbmRsZXI6OmRlZmF1bHRBcnJvd0V2ZW50SGFuZGxlcihGb2N1c0Rp
cmVjdGlvbiBmb2N1c0RpcmVjdGlvbiwgS2V5Ym9hcmRFdmVudCYgZXZlbnQpCkBAIC00MzE2LDcg
KzQyODQsNyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6ZGVmYXVsdEFycm93RXZlbnRIYW5kbGVyKEZv
Y3VzRGlyZWN0aW9uIGZvY3VzRGlyZWN0aW9uLCBLZXlibwogCiAgICAgaWYgKCFpc1NwYXRpYWxO
YXZpZ2F0aW9uRW5hYmxlZCgmbV9mcmFtZSkpIHsKICAgICAgICAgaWYgKG1fZnJhbWUuc2V0dGlu
Z3MoKS5ldmVudEhhbmRsZXJEcml2ZW5TbW9vdGhLZXlib2FyZFNjcm9sbGluZ0VuYWJsZWQoKSkK
LSAgICAgICAgICAgIGhhbmRsZUtleWJvYXJkU2Nyb2xsaW5nKGV2ZW50KTsKKyAgICAgICAgICAg
IHN0YXJ0S2V5Ym9hcmRTY3JvbGxpbmcoZXZlbnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAppbmRleCBhNWFmNDA0NjE0ZTZjZjg2ZDBiYzVj
YzY1MDI0NTUzMDMyZjhiYjQyLi4yMjdlMDJjZTNlZDRlMjdiMzhjODBiYTk2ZjdiMGMwODU0YmNl
MzQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKQEAgLTM3Nyw3ICszNzcsOCBAQCBw
cml2YXRlOgogICAgIGJvb2wgaGFuZGxlTW91c2VQcmVzc0V2ZW50VHJpcGxlQ2xpY2soY29uc3Qg
TW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYpOwogCiAgICAgZmxvYXQgc2Nyb2xsRGlzdGFu
Y2UoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSk7Ci0gICAgYm9vbCBoYW5kbGVL
ZXlib2FyZFNjcm9sbGluZyhLZXlib2FyZEV2ZW50Jik7CisgICAgYm9vbCBzdGFydEtleWJvYXJk
U2Nyb2xsaW5nKEtleWJvYXJkRXZlbnQmKTsKKyAgICB2b2lkIHN0b3BLZXlib2FyZFNjcm9sbGlu
ZygpOwogCiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKICAgICBib29sIGhhbmRsZU1vdXNlRHJh
Z2dlZEV2ZW50KGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmLCBDaGVja0RyYWdI
eXN0ZXJlc2lzID0gU2hvdWxkQ2hlY2tEcmFnSHlzdGVyZXNpcyk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9LZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjAyOWFiZGEwZDYzY2VmYWJkNzZmMTQ5MDc1OTdkM2YzYjU0YTM5MzMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9y
LmNwcApAQCAtMCwwICsxLDMwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLmgiCisKKyNpbmNsdWRlICJFdmVu
dE5hbWVzLmgiCisjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKKyNpbmNsdWRlICJTY3JvbGxhYmxl
QXJlYS5oIgorI2luY2x1ZGUgIldyaXRpbmdNb2RlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcjo6S2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcihT
Y3JvbGxBbmltYXRvciYgc2Nyb2xsQW5pbWF0b3IsIFNjcm9sbENvbnRyb2xsZXImIHNjcm9sbENv
bnRyb2xsZXIpCisgICAgOiBtX3Njcm9sbEFuaW1hdG9yKHNjcm9sbEFuaW1hdG9yKQorICAgICwg
bV9zY3JvbGxDb250cm9sbGVyKHNjcm9sbENvbnRyb2xsZXIpCit7Cit9CisKK1JlY3RFZGdlczxi
b29sPiBLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yOjpzY3JvbGxhYmxlRGlyZWN0aW9uc0Zyb21P
ZmZzZXQoRmxvYXRQb2ludCBvZmZzZXQpIGNvbnN0Cit7CisgICAgYXV0byBtaW5pbXVtU2Nyb2xs
UG9zaXRpb24gPSBtX3Njcm9sbEFuaW1hdG9yLnNjcm9sbGFibGVBcmVhKCkubWluaW11bVNjcm9s
bFBvc2l0aW9uKCk7CisgICAgYXV0byBtYXhpbXVtU2Nyb2xsUG9zaXRpb24gPSBtX3Njcm9sbEFu
aW1hdG9yLnNjcm9sbGFibGVBcmVhKCkubWF4aW11bVNjcm9sbFBvc2l0aW9uKCk7CisKKyAgICBS
ZWN0RWRnZXM8Ym9vbD4gZWRnZXM7CisKKyAgICBlZGdlcy5zZXRUb3Aob2Zmc2V0LnkoKSA+IG1p
bmltdW1TY3JvbGxQb3NpdGlvbi55KCkpOworICAgIGVkZ2VzLnNldEJvdHRvbShvZmZzZXQueSgp
IDwgbWF4aW11bVNjcm9sbFBvc2l0aW9uLnkoKSk7CisgICAgZWRnZXMuc2V0TGVmdChvZmZzZXQu
eCgpID4gbWluaW11bVNjcm9sbFBvc2l0aW9uLngoKSk7CisgICAgZWRnZXMuc2V0UmlnaHQob2Zm
c2V0LngoKSA8IG1heGltdW1TY3JvbGxQb3NpdGlvbi54KCkpOworCisgICAgcmV0dXJuIGVkZ2Vz
OworfQorCitzdGF0aWMgQm94U2lkZSBib3hTaWRlRm9yRGlyZWN0aW9uKFNjcm9sbERpcmVjdGlv
biBkaXJlY3Rpb24pCit7CisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBjYXNlIFNjcm9s
bERpcmVjdGlvbjo6U2Nyb2xsVXA6CisgICAgICAgIHJldHVybiBCb3hTaWRlOjpUb3A7CisgICAg
Y2FzZSBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbERvd246CisgICAgICAgIHJldHVybiBCb3hTaWRl
OjpCb3R0b207CisgICAgY2FzZSBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbExlZnQ6CisgICAgICAg
IHJldHVybiBCb3hTaWRlOjpMZWZ0OworICAgIGNhc2UgU2Nyb2xsRGlyZWN0aW9uOjpTY3JvbGxS
aWdodDoKKyAgICAgICAgcmV0dXJuIEJveFNpZGU6OlJpZ2h0OworICAgIH0KKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gQm94U2lkZTo6VG9wOworfQorCitzdGF0aWMgRmxv
YXRTaXplIHBlcnBlbmRpY3VsYXJBYnNvbHV0ZVVuaXRWZWN0b3IoU2Nyb2xsRGlyZWN0aW9uIGRp
cmVjdGlvbikKK3sKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNhc2UgU2Nyb2xsRGly
ZWN0aW9uOjpTY3JvbGxVcDoKKyAgICBjYXNlIFNjcm9sbERpcmVjdGlvbjo6U2Nyb2xsRG93bjoK
KyAgICAgICAgcmV0dXJuIHsgMSwgMCB9OworICAgIGNhc2UgU2Nyb2xsRGlyZWN0aW9uOjpTY3Jv
bGxMZWZ0OgorICAgIGNhc2UgU2Nyb2xsRGlyZWN0aW9uOjpTY3JvbGxSaWdodDoKKyAgICAgICAg
cmV0dXJuIHsgMCwgMSB9OworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit2b2lkIEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3I6OnVwZGF0ZUtl
eWJvYXJkU2Nyb2xsUG9zaXRpb24oTW9ub3RvbmljVGltZSBjdXJyZW50VGltZSkKK3sKKyAgICBh
dXRvIGZvcmNlID0gRmxvYXRTaXplIHsgfTsKKyAgICBhdXRvIGF4ZXNUb0FwcGx5U3ByaW5nID0g
RmxvYXRTaXplIHsgMSwgMSB9OworICAgIEtleWJvYXJkU2Nyb2xsUGFyYW1ldGVycyBwYXJhbXMg
PSBLZXlib2FyZFNjcm9sbFBhcmFtZXRlcnM6OnBhcmFtZXRlcnMoKTsKKworICAgIGlmIChtX2N1
cnJlbnRLZXlib2FyZFNjcm9sbCkgeworICAgICAgICBhdXRvIHNjcm9sbGFibGVEaXJlY3Rpb25z
ID0gc2Nyb2xsYWJsZURpcmVjdGlvbnNGcm9tT2Zmc2V0KG1fc2Nyb2xsQW5pbWF0b3IuY3VycmVu
dFBvc2l0aW9uKCkpOworICAgICAgICBhdXRvIGRpcmVjdGlvbiA9IG1fY3VycmVudEtleWJvYXJk
U2Nyb2xsLT5kaXJlY3Rpb247CisKKyAgICAgICAgaWYgKHNjcm9sbGFibGVEaXJlY3Rpb25zLmF0
KGJveFNpZGVGb3JEaXJlY3Rpb24oZGlyZWN0aW9uKSkpIHsKKyAgICAgICAgICAgIC8vIEFwcGx5
IHRoZSBzY3JvbGxpbmcgZm9yY2UuIE9ubHkgYXBwbHkgdGhlIHNwcmluZyBpbiB0aGUgcGVycGVu
ZGljdWxhciBheGlzLAorICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0IGRyYWdzIGFnYWluc3Qg
dGhlIGRpcmVjdGlvbiBvZiBtb3Rpb24uCisgICAgICAgICAgICBheGVzVG9BcHBseVNwcmluZyA9
IHBlcnBlbmRpY3VsYXJBYnNvbHV0ZVVuaXRWZWN0b3IoZGlyZWN0aW9uKTsKKyAgICAgICAgICAg
IGZvcmNlID0gbV9jdXJyZW50S2V5Ym9hcmRTY3JvbGwtPmZvcmNlOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgLy8gVGhlIHNjcm9sbCB2aWV3IGNhbm5vdCBzY3JvbGwgaW4gdGhpcyBk
aXJlY3Rpb24sIGFuZCBpcyBydWJiZXItYmFuZGluZy4KKyAgICAgICAgICAgIC8vIEFwcGx5IGEg
Y29uc3RhbnQgYW5kIHNpZ25pZmljYW50IGZvcmNlOyBvdGhlcndpc2UsIHRoZSBmb3JjZSBmb3Ig
YQorICAgICAgICAgICAgLy8gc2luZ2xlLWxpbmUgaW5jcmVtZW50IGlzIG5vdCBzdHJvbmcgZW5v
dWdoIHRvIHJ1YmJlci1iYW5kIHBlcmNlcHRpYmx5LgorICAgICAgICAgICAgZm9yY2UgPSB1bml0
VmVjdG9yRm9yU2Nyb2xsRGlyZWN0aW9uKGRpcmVjdGlvbikuc2NhbGVkKHBhcmFtcy5ydWJiZXJC
YW5kRm9yY2UpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZhYnMobV92ZWxvY2l0eS53aWR0
aCgpKSA+PSBmYWJzKG1fY3VycmVudEtleWJvYXJkU2Nyb2xsLT5tYXhpbXVtVmVsb2NpdHkud2lk
dGgoKSkpCisgICAgICAgICAgICBmb3JjZS5zZXRXaWR0aCgwKTsKKworICAgICAgICBpZiAoZmFi
cyhtX3ZlbG9jaXR5LmhlaWdodCgpKSA+PSBmYWJzKG1fY3VycmVudEtleWJvYXJkU2Nyb2xsLT5t
YXhpbXVtVmVsb2NpdHkuaGVpZ2h0KCkpKQorICAgICAgICAgICAgZm9yY2Uuc2V0SGVpZ2h0KDAp
OworICAgIH0KKworICAgIFNjcm9sbFBvc2l0aW9uIGlkZWFsUG9zaXRpb24gPSBtX3Njcm9sbEFu
aW1hdG9yLnNjcm9sbGFibGVBcmVhKCkuY29uc3RyYWluU2Nyb2xsUG9zaXRpb24oSW50UG9pbnQo
bV9jdXJyZW50S2V5Ym9hcmRTY3JvbGwgPyBtX3Njcm9sbEFuaW1hdG9yLmN1cnJlbnRQb3NpdGlv
bigpIDogbV9pZGVhbFBvc2l0aW9uKSk7CisgICAgRmxvYXRTaXplIGRpc3BsYWNlbWVudCA9IG1f
c2Nyb2xsQW5pbWF0b3IuY3VycmVudFBvc2l0aW9uKCkgLSBpZGVhbFBvc2l0aW9uOworCisgICAg
YXV0byBzcHJpbmdGb3JjZSA9IC1kaXNwbGFjZW1lbnQuc2NhbGVkKHBhcmFtcy5zcHJpbmdTdGlm
Zm5lc3MpIC0gbV92ZWxvY2l0eS5zY2FsZWQocGFyYW1zLnNwcmluZ0RhbXBpbmcpOworICAgIGZv
cmNlICs9IHNwcmluZ0ZvcmNlICogYXhlc1RvQXBwbHlTcHJpbmc7CisKKyAgICBmbG9hdCBmcmFt
ZUR1cmF0aW9uID0gKGN1cnJlbnRUaW1lIC0gbV90aW1lQXRMYXN0RnJhbWUpLnZhbHVlKCk7Cisg
ICAgbV90aW1lQXRMYXN0RnJhbWUgPSBjdXJyZW50VGltZTsKKworICAgIEZsb2F0U2l6ZSBhY2Nl
bGVyYXRpb24gPSBmb3JjZS5zY2FsZWQoMS4gLyBwYXJhbXMuc3ByaW5nTWFzcyk7CisgICAgbV92
ZWxvY2l0eSArPSBhY2NlbGVyYXRpb24uc2NhbGVkKGZyYW1lRHVyYXRpb24pOworICAgIEZsb2F0
UG9pbnQgbmV3UG9zaXRpb24gPSBtX3Njcm9sbEFuaW1hdG9yLmN1cnJlbnRQb3NpdGlvbigpICsg
bV92ZWxvY2l0eS5zY2FsZWQoZnJhbWVEdXJhdGlvbik7CisKKyAgICBtX3Njcm9sbEFuaW1hdG9y
LnNjcm9sbFRvUG9zaXRpb25XaXRob3V0QW5pbWF0aW9uKG5ld1Bvc2l0aW9uKTsKKworICAgIGlm
ICghbV9zY3JvbGxUcmlnZ2VyaW5nS2V5SXNQcmVzc2VkICYmIG1fdmVsb2NpdHkuZGlhZ29uYWxM
ZW5ndGhTcXVhcmVkKCkgPCAxKSB7CisgICAgICAgIG1fc2Nyb2xsQ29udHJvbGxlci5zdG9wS2V5
Ym9hcmRTY3JvbGxpbmcoKTsKKyAgICAgICAgbV92ZWxvY2l0eSA9IHsgfTsKKyAgICB9Cit9CisK
K2Zsb2F0IEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3I6OnNjcm9sbERpc3RhbmNlKFNjcm9sbERp
cmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KSBjb25zdAor
eworICAgIGF1dG8gc2Nyb2xsYmFyID0gWyZdIHsKKyAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBT
Y3JvbGxEaXJlY3Rpb246OlNjcm9sbFVwIHx8IGRpcmVjdGlvbiA9PSBTY3JvbGxEaXJlY3Rpb246
OlNjcm9sbERvd24pCisgICAgICAgICAgICByZXR1cm4gbV9zY3JvbGxBbmltYXRvci5zY3JvbGxh
YmxlQXJlYSgpLnZlcnRpY2FsU2Nyb2xsYmFyKCk7CisgICAgICAgIHJldHVybiBtX3Njcm9sbEFu
aW1hdG9yLnNjcm9sbGFibGVBcmVhKCkuaG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgIH0oKTsK
KworICAgIHN3aXRjaCAoZ3JhbnVsYXJpdHkpIHsKKyAgICBjYXNlIFNjcm9sbEdyYW51bGFyaXR5
OjpTY3JvbGxCeUxpbmU6CisgICAgICAgIHJldHVybiBzY3JvbGxiYXItPmxpbmVTdGVwKCk7Cisg
ICAgY2FzZSBTY3JvbGxHcmFudWxhcml0eTo6U2Nyb2xsQnlQYWdlOgorICAgICAgICByZXR1cm4g
c2Nyb2xsYmFyLT5wYWdlU3RlcCgpOworICAgIGNhc2UgU2Nyb2xsR3JhbnVsYXJpdHk6OlNjcm9s
bEJ5RG9jdW1lbnQ6CisgICAgICAgIHJldHVybiBzY3JvbGxiYXItPnRvdGFsU2l6ZSgpOworICAg
IGNhc2UgU2Nyb2xsR3JhbnVsYXJpdHk6OlNjcm9sbEJ5UGl4ZWw6CisgICAgICAgIHJldHVybiBz
Y3JvbGxiYXItPnBpeGVsU3RlcCgpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGQ6
Om9wdGlvbmFsPEtleWJvYXJkU2Nyb2xsPiBLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yOjprZXli
b2FyZFNjcm9sbEZvcktleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCYgZXZlbnQpIGNvbnN0Cit7
CisgICAgLy8gRklYTUUgKGJ1ZyAyMjc0NTkpOiBUaGlzIGxvZ2ljIGRvZXMgbm90IGFjY291bnQg
Zm9yIHdyaXRpbmctbW9kZS4KKworICAgIGVudW0gY2xhc3MgS2V5IDogdWludDhfdCB7IExlZnRB
cnJvdywgUmlnaHRBcnJvdywgVXBBcnJvdywgRG93bkFycm93LCBTcGFjZSB9OworCisgICAgS2V5
IGtleTsKKyAgICBpZiAoZXZlbnQua2V5SWRlbnRpZmllcigpID09ICJMZWZ0IikKKyAgICAgICAg
a2V5ID0gS2V5OjpMZWZ0QXJyb3c7CisgICAgZWxzZSBpZiAoZXZlbnQua2V5SWRlbnRpZmllcigp
ID09ICJSaWdodCIpCisgICAgICAgIGtleSA9IEtleTo6UmlnaHRBcnJvdzsKKyAgICBlbHNlIGlm
IChldmVudC5rZXlJZGVudGlmaWVyKCkgPT0gIlVwIikKKyAgICAgICAga2V5ID0gS2V5OjpVcEFy
cm93OworICAgIGVsc2UgaWYgKGV2ZW50LmtleUlkZW50aWZpZXIoKSA9PSAiRG93biIpCisgICAg
ICAgIGtleSA9IEtleTo6RG93bkFycm93OworICAgIGVsc2UgaWYgKGV2ZW50LmNoYXJDb2RlKCkg
PT0gJyAnKQorICAgICAgICBrZXkgPSBLZXk6OlNwYWNlOworICAgIGVsc2UKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGF1dG8gZ3JhbnVsYXJpdHkgPSBbJl0geworICAgICAg
ICBzd2l0Y2ggKGtleSkgeworICAgICAgICBjYXNlIEtleTo6TGVmdEFycm93OgorICAgICAgICBj
YXNlIEtleTo6UmlnaHRBcnJvdzoKKyAgICAgICAgICAgIHJldHVybiBldmVudC5hbHRLZXkoKSA/
IFNjcm9sbEdyYW51bGFyaXR5OjpTY3JvbGxCeVBhZ2UgOiBTY3JvbGxHcmFudWxhcml0eTo6U2Ny
b2xsQnlMaW5lOworICAgICAgICBjYXNlIEtleTo6VXBBcnJvdzoKKyAgICAgICAgY2FzZSBLZXk6
OkRvd25BcnJvdzoKKyAgICAgICAgICAgIGlmIChldmVudC5tZXRhS2V5KCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIFNjcm9sbEdyYW51bGFyaXR5OjpTY3JvbGxCeURvY3VtZW50OworICAgICAg
ICAgICAgaWYgKGV2ZW50LmFsdEtleSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBTY3JvbGxH
cmFudWxhcml0eTo6U2Nyb2xsQnlQYWdlOworICAgICAgICAgICAgcmV0dXJuIFNjcm9sbEdyYW51
bGFyaXR5OjpTY3JvbGxCeUxpbmU7CisgICAgICAgIGNhc2UgS2V5OjpTcGFjZToKKyAgICAgICAg
ICAgIHJldHVybiBTY3JvbGxHcmFudWxhcml0eTo6U2Nyb2xsQnlQYWdlOworICAgICAgICB9Owor
ICAgIH0oKTsKKworICAgIGF1dG8gZGlyZWN0aW9uID0gWyZdIHsKKyAgICAgICAgc3dpdGNoIChr
ZXkpIHsKKyAgICAgICAgY2FzZSBLZXk6OkxlZnRBcnJvdzoKKyAgICAgICAgICAgIHJldHVybiBT
Y3JvbGxEaXJlY3Rpb246OlNjcm9sbExlZnQ7CisgICAgICAgIGNhc2UgS2V5OjpSaWdodEFycm93
OgorICAgICAgICAgICAgcmV0dXJuIFNjcm9sbERpcmVjdGlvbjo6U2Nyb2xsUmlnaHQ7CisgICAg
ICAgIGNhc2UgS2V5OjpVcEFycm93OgorICAgICAgICAgICAgcmV0dXJuIFNjcm9sbERpcmVjdGlv
bjo6U2Nyb2xsVXA7CisgICAgICAgIGNhc2UgS2V5OjpEb3duQXJyb3c6CisgICAgICAgICAgICBy
ZXR1cm4gU2Nyb2xsRGlyZWN0aW9uOjpTY3JvbGxEb3duOworICAgICAgICBjYXNlIEtleTo6U3Bh
Y2U6CisgICAgICAgICAgICByZXR1cm4gZXZlbnQuc2hpZnRLZXkoKSA/IFNjcm9sbERpcmVjdGlv
bjo6U2Nyb2xsVXAgOiBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbERvd247CisgICAgICAgIH0KKyAg
ICB9KCk7CisKKyAgICBmbG9hdCBkaXN0YW5jZSA9IHNjcm9sbERpc3RhbmNlKGRpcmVjdGlvbiwg
Z3JhbnVsYXJpdHkpOworCisgICAgS2V5Ym9hcmRTY3JvbGwgc2Nyb2xsOworCisgICAgc2Nyb2xs
Lm9mZnNldCA9IHVuaXRWZWN0b3JGb3JTY3JvbGxEaXJlY3Rpb24oZGlyZWN0aW9uKS5zY2FsZWQo
ZGlzdGFuY2UpOworICAgIHNjcm9sbC5ncmFudWxhcml0eSA9IGdyYW51bGFyaXR5OworICAgIHNj
cm9sbC5kaXJlY3Rpb24gPSBkaXJlY3Rpb247CisgICAgc2Nyb2xsLm1heGltdW1WZWxvY2l0eSA9
IHNjcm9sbC5vZmZzZXQuc2NhbGVkKEtleWJvYXJkU2Nyb2xsUGFyYW1ldGVyczo6cGFyYW1ldGVy
cygpLm1heGltdW1WZWxvY2l0eU11bHRpcGxpZXIpOworICAgIHNjcm9sbC5mb3JjZSA9IHNjcm9s
bC5tYXhpbXVtVmVsb2NpdHkuc2NhbGVkKEtleWJvYXJkU2Nyb2xsUGFyYW1ldGVyczo6cGFyYW1l
dGVycygpLnNwcmluZ01hc3MgLyBLZXlib2FyZFNjcm9sbFBhcmFtZXRlcnM6OnBhcmFtZXRlcnMo
KS50aW1lVG9NYXhpbXVtVmVsb2NpdHkpOworCisgICAgcmV0dXJuIHNjcm9sbDsKK30KKworYm9v
bCBLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yOjpiZWdpbktleWJvYXJkU2Nyb2xsR2VzdHVyZShL
ZXlib2FyZEV2ZW50JiBldmVudCkKK3sKKyAgICBhdXRvIHNjcm9sbCA9IGtleWJvYXJkU2Nyb2xs
Rm9yS2V5Ym9hcmRFdmVudChldmVudCk7CisKKyAgICBpZiAoIXNjcm9sbCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgbV9jdXJyZW50S2V5Ym9hcmRTY3JvbGwgPSBzY3JvbGw7CisKKyAg
ICBpZiAoZXZlbnQudHlwZSgpICE9IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX3Njcm9sbFRyaWdnZXJpbmdLZXlJc1ByZXNzZWQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX2N1cnJlbnRLZXlib2FyZFNjcm9s
bC0+Z3JhbnVsYXJpdHkgPT0gU2Nyb2xsR3JhbnVsYXJpdHk6OlNjcm9sbEJ5RG9jdW1lbnQpIHsK
KyAgICAgICAgbV92ZWxvY2l0eSA9IHsgfTsKKyAgICAgICAgc3RvcEtleWJvYXJkU2Nyb2xsQW5p
bWF0aW9uKCk7CisgICAgICAgIGF1dG8gbmV3UG9zaXRpb24gPSBJbnRQb2ludChtX3Njcm9sbEFu
aW1hdG9yLmN1cnJlbnRQb3NpdGlvbigpICsgbV9jdXJyZW50S2V5Ym9hcmRTY3JvbGwtPm9mZnNl
dCk7CisgICAgICAgIG1fc2Nyb2xsQW5pbWF0b3Iuc2Nyb2xsVG9Qb3NpdGlvbldpdGhBbmltYXRp
b24obmV3UG9zaXRpb24pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBtX3Rp
bWVBdExhc3RGcmFtZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOworICAgIG1fc2Nyb2xsVHJpZ2dl
cmluZ0tleUlzUHJlc3NlZCA9IHRydWU7CisKKyAgICBtX2lkZWFsUG9zaXRpb25Gb3JNaW5pbXVt
VHJhdmVsID0gbV9zY3JvbGxBbmltYXRvci5jdXJyZW50UG9zaXRpb24oKSArIG1fY3VycmVudEtl
eWJvYXJkU2Nyb2xsLT5vZmZzZXQ7CisgICAgbV9zY3JvbGxDb250cm9sbGVyLmJlZ2luS2V5Ym9h
cmRTY3JvbGxpbmcoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgU2Nyb2xsUG9z
aXRpb24gZmFydGhlc3RQb2ludEluRGlyZWN0aW9uKEZsb2F0UG9pbnQgYSwgRmxvYXRQb2ludCBi
LCBTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7
CisgICAgY2FzZSBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbFVwOgorICAgICAgICByZXR1cm4gU2Ny
b2xsUG9zaXRpb24oYS54KCksIHN0ZDo6bWluKGEueSgpLCBiLnkoKSkpOworICAgIGNhc2UgU2Ny
b2xsRGlyZWN0aW9uOjpTY3JvbGxEb3duOgorICAgICAgICByZXR1cm4gU2Nyb2xsUG9zaXRpb24o
YS54KCksIHN0ZDo6bWF4KGEueSgpLCBiLnkoKSkpOworICAgIGNhc2UgU2Nyb2xsRGlyZWN0aW9u
OjpTY3JvbGxMZWZ0OgorICAgICAgICByZXR1cm4gU2Nyb2xsUG9zaXRpb24oc3RkOjptaW4oYS54
KCksIGIueCgpKSwgYS55KCkpOworICAgIGNhc2UgU2Nyb2xsRGlyZWN0aW9uOjpTY3JvbGxSaWdo
dDoKKyAgICAgICAgcmV0dXJuIFNjcm9sbFBvc2l0aW9uKHN0ZDo6bWF4KGEueCgpLCBiLngoKSks
IGEueSgpKTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
eyB9OworfQorCit2b2lkIEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3I6OnN0b3BLZXlib2FyZFNj
cm9sbEFuaW1hdGlvbigpCit7CisgICAgaWYgKCFtX2N1cnJlbnRLZXlib2FyZFNjcm9sbCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgYXV0byBwYXJhbXMgPSBLZXlib2FyZFNjcm9sbFBhcmFtZXRl
cnM6OnBhcmFtZXRlcnMoKTsKKworICAgIC8vIERldGVybWluZSB0aGUgc2V0dGxpbmcgcG9zaXRp
b24gb2YgdGhlIHNwcmluZywgY29uc2VydmluZyB0aGUgc3lzdGVtJ3MgY3VycmVudCBlbmVyZ3ku
CisgICAgLy8gS2luZXRpYyA9IGVsYXN0aWMgcG90ZW50aWFsCisgICAgLy8gMS8yICogbSAqIHZe
MiA9IDEvMiAqIGsgKiB4XjIKKyAgICAvLyB4ID0gc3FydCh2XjIgKiBtIC8gaykKKyAgICBhdXRv
IGRpc3BsYWNlbWVudE1hZ25pdHVkZVNxdWFyZWQgPSAobV92ZWxvY2l0eSAqIG1fdmVsb2NpdHkp
LnNjYWxlZChwYXJhbXMuc3ByaW5nTWFzcyAvIHBhcmFtcy5zcHJpbmdTdGlmZm5lc3MpOworICAg
IEZsb2F0U2l6ZSBkaXNwbGFjZW1lbnQgPSB7CisgICAgICAgIHN0ZDo6Y29weXNpZ24oc3FydChk
aXNwbGFjZW1lbnRNYWduaXR1ZGVTcXVhcmVkLndpZHRoKCkpLCBtX3ZlbG9jaXR5LndpZHRoKCkp
LAorICAgICAgICBzdGQ6OmNvcHlzaWduKHNxcnQoZGlzcGxhY2VtZW50TWFnbml0dWRlU3F1YXJl
ZC5oZWlnaHQoKSksIG1fdmVsb2NpdHkuaGVpZ2h0KCkpCisgICAgfTsKKworICAgIC8vIElmIHRo
ZSBzcHJpbmcgd291bGQgc2V0dGxlIGJlZm9yZSB0aGUgbWluaW11bSB0cmF2ZWwgZGlzdGFuY2UK
KyAgICAvLyBmb3IgYW4gaW5zdGFudGFuZW91cyB0YXAsIG1vdmUgdGhlIHNldHRsaW5nIHBvc2l0
aW9uIG9mIHRoZSBzcHJpbmcKKyAgICAvLyBvdXQgdG8gdGhhdCBwb2ludC4KKyAgICBTY3JvbGxQ
b3NpdGlvbiBmYXJ0aGVzdFBvaW50ID0gZmFydGhlc3RQb2ludEluRGlyZWN0aW9uKG1fc2Nyb2xs
QW5pbWF0b3IuY3VycmVudFBvc2l0aW9uKCkgKyBkaXNwbGFjZW1lbnQsIG1faWRlYWxQb3NpdGlv
bkZvck1pbmltdW1UcmF2ZWwsIG1fY3VycmVudEtleWJvYXJkU2Nyb2xsLT5kaXJlY3Rpb24pOwor
ICAgIG1faWRlYWxQb3NpdGlvbiA9IG1fc2Nyb2xsQW5pbWF0b3Iuc2Nyb2xsYWJsZUFyZWEoKS5j
b25zdHJhaW5TY3JvbGxQb3NpdGlvbihmYXJ0aGVzdFBvaW50KTsKKworICAgIG1fY3VycmVudEtl
eWJvYXJkU2Nyb2xsID0gc3RkOjpudWxsb3B0OworfQorCit2b2lkIEtleWJvYXJkU2Nyb2xsaW5n
QW5pbWF0b3I6OmhhbmRsZUtleVVwRXZlbnRXaGlsZVNjcm9sbGluZygpCit7CisgICAgaWYgKCFt
X3Njcm9sbFRyaWdnZXJpbmdLZXlJc1ByZXNzZWQpCisgICAgICAgIHJldHVybjsKKworICAgIHN0
b3BLZXlib2FyZFNjcm9sbEFuaW1hdGlvbigpOworICAgIG1fc2Nyb2xsVHJpZ2dlcmluZ0tleUlz
UHJlc3NlZCA9IGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMzUwMWIyN2NkYmJmNjhkMDc5Y2QzZjM4YzRhYzg3NGFjMDY2OTEyMQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0
b3IuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJLZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRTY3JvbGwuaCIKKyNpbmNs
dWRlICJSZWN0RWRnZXMuaCIKKyNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IpOworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0
b3IoU2Nyb2xsQW5pbWF0b3ImLCBTY3JvbGxDb250cm9sbGVyJik7CisKKyAgICBib29sIGJlZ2lu
S2V5Ym9hcmRTY3JvbGxHZXN0dXJlKEtleWJvYXJkRXZlbnQmKTsKKyAgICB2b2lkIGhhbmRsZUtl
eVVwRXZlbnRXaGlsZVNjcm9sbGluZygpOworICAgIHZvaWQgdXBkYXRlS2V5Ym9hcmRTY3JvbGxQ
b3NpdGlvbihNb25vdG9uaWNUaW1lKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHN0b3BLZXlib2Fy
ZFNjcm9sbEFuaW1hdGlvbigpOworICAgIFJlY3RFZGdlczxib29sPiBzY3JvbGxhYmxlRGlyZWN0
aW9uc0Zyb21PZmZzZXQoRmxvYXRQb2ludCkgY29uc3Q7CisgICAgc3RkOjpvcHRpb25hbDxLZXli
b2FyZFNjcm9sbD4ga2V5Ym9hcmRTY3JvbGxGb3JLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQm
KSBjb25zdDsKKyAgICBmbG9hdCBzY3JvbGxEaXN0YW5jZShTY3JvbGxEaXJlY3Rpb24sIFNjcm9s
bEdyYW51bGFyaXR5KSBjb25zdDsKKworICAgIFNjcm9sbEFuaW1hdG9yJiBtX3Njcm9sbEFuaW1h
dG9yOworICAgIFNjcm9sbENvbnRyb2xsZXImIG1fc2Nyb2xsQ29udHJvbGxlcjsKKyAgICBzdGQ6
Om9wdGlvbmFsPFdlYkNvcmU6OktleWJvYXJkU2Nyb2xsPiBtX2N1cnJlbnRLZXlib2FyZFNjcm9s
bDsKKyAgICBib29sIG1fc2Nyb2xsVHJpZ2dlcmluZ0tleUlzUHJlc3NlZDsKKyAgICBGbG9hdFNp
emUgbV92ZWxvY2l0eTsKKyAgICBNb25vdG9uaWNUaW1lIG1fdGltZUF0TGFzdEZyYW1lOworICAg
IEZsb2F0UG9pbnQgbV9pZGVhbFBvc2l0aW9uRm9yTWluaW11bVRyYXZlbDsKKyAgICBGbG9hdFBv
aW50IG1faWRlYWxQb3NpdGlvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAppbmRleCA1ZTgzZmRiYWUyN2Zi
ODk4N2Y4MDlhODU0OTc1N2FjMDU4NjIzODBjLi40Zjg3OTcxMzU0M2I3YTEyYzEwZDNmMWRlMjIy
YzM5MWQwMGJmMTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxB
bmltYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3Iu
Y3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIKIAogI2lu
Y2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9y
LmgiCiAjaW5jbHVkZSAiTGF5b3V0U2l6ZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVu
dC5oIgogI2luY2x1ZGUgIlNjcm9sbEFuaW1hdGlvblNtb290aC5oIgpAQCAtNjcsNiArNjgsNyBA
QCBTY3JvbGxBbmltYXRvcjo6U2Nyb2xsQW5pbWF0b3IoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFi
bGVBcmVhKQogICAgICAgICBbdGhpc10gewogICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS5z
ZXRTY3JvbGxCZWhhdmlvclN0YXR1cyhTY3JvbGxCZWhhdmlvclN0YXR1czo6Tm90SW5BbmltYXRp
b24pOwogICAgICAgICB9KSkKKyAgICAsIG1fa2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcihtYWtl
VW5pcXVlPEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3I+KCp0aGlzLCBtX3Njcm9sbENvbnRyb2xs
ZXIpKQogewogfQogCkBAIC0zMzIsNyArMzM0LDcgQEAgdm9pZCBTY3JvbGxBbmltYXRvcjo6c3Rh
cnRBbmltYXRpb25DYWxsYmFjayhTY3JvbGxDb250cm9sbGVyJikKIHsKICAgICBpZiAobV9zY3Jv
bGxDb250cm9sbGVyQW5pbWF0aW9uVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAKKwogICAgIG1fc2Nyb2xsQ29udHJvbGxlckFuaW1hdGlvblRpbWVyLnN0YXJ0UmVw
ZWF0aW5nKDFfcyAvIDYwLik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbEFuaW1hdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmlt
YXRvci5oCmluZGV4IGQ5MmNmZGJkZmJiMDVmMWZhOTEzNGVjNjU4NzVhZmNiOGNlMWQ3OGMuLjMz
MjcxZTA2ODFmYTUzOWI5Nzc2NThkYTVhNWM5ZmMyNjkxMDA5MTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaApAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgIkZs
b2F0UG9pbnQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJT
Y3JvbGxDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKICNpbmNsdWRlICJU
aW1lci5oIgogI2luY2x1ZGUgIldoZWVsRXZlbnRUZXN0TW9uaXRvci5oIgogI2luY2x1ZGUgPHd0
Zi9GYXN0TWFsbG9jLmg+CkBAIC00Myw2ICs0Miw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIEZsb2F0UG9pbnQ7CitjbGFzcyBLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yOwogY2xh
c3MgUGxhdGZvcm1Ub3VjaEV2ZW50OwogY2xhc3MgU2Nyb2xsQW5pbWF0aW9uOwogY2xhc3MgU2Ny
b2xsYWJsZUFyZWE7CkBAIC04MSw2ICs4MSw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9v
bCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOwogCisgICAgS2V5
Ym9hcmRTY3JvbGxpbmdBbmltYXRvciAqa2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcigpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIG1fa2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5nZXQoKTsgfQor
CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlVG91Y2hF
dmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmKTsKICNlbmRpZgpAQCAtMTc4LDYgKzE4MCw3
IEBAIHByb3RlY3RlZDoKICAgICBGbG9hdFBvaW50IG1fY3VycmVudFBvc2l0aW9uOwogCiAgICAg
c3RkOjp1bmlxdWVfcHRyPFNjcm9sbEFuaW1hdGlvbj4gbV9zY3JvbGxBbmltYXRpb247CisgICAg
c3RkOjp1bmlxdWVfcHRyPEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3I+IG1fa2V5Ym9hcmRTY3Jv
bGxpbmdBbmltYXRvcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5jcHAKaW5kZXggZTkzNzViYTc0NzY4YmRi
NDczYmQ4YmYxZmZhNDliODFjZjk5NDNhOS4uMjFmZDk4NWMyNTI0ZjVhMzE0MTM0ODlmNjYzMTY5
MWExYzUwYTNjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQ29u
dHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxl
ci5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJT
Y3JvbGxDb250cm9sbGVyLmgiCiAKKyNpbmNsdWRlICJLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9y
LmgiCiAjaW5jbHVkZSAiTGF5b3V0U2l6ZS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNs
dWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKQEAgLTQzLDE1ICs0NCwxNiBAQCBTY3JvbGxDb250
cm9sbGVyOjpTY3JvbGxDb250cm9sbGVyKFNjcm9sbENvbnRyb2xsZXJDbGllbnQmIGNsaWVudCkK
IAogdm9pZCBTY3JvbGxDb250cm9sbGVyOjphbmltYXRpb25DYWxsYmFjayhNb25vdG9uaWNUaW1l
IGN1cnJlbnRUaW1lKQogewotICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8
PCAiU2Nyb2xsQ29udHJvbGxlciAiIDw8IHRoaXMgPDwgIiBhbmltYXRpb25DYWxsYmFjazogaXNB
bmltYXRpbmdSdWJiZXJCYW5kICIgPDwgbV9pc0FuaW1hdGluZ1J1YmJlckJhbmQgPDwgIiBpc0Fu
aW1hdGluZ1Njcm9sbFNuYXAgIiA8PCBtX2lzQW5pbWF0aW5nU2Nyb2xsU25hcCk7CisgICAgTE9H
X1dJVEhfU1RSRUFNKFNjcm9sbGluZywgc3RyZWFtIDw8ICJTY3JvbGxDb250cm9sbGVyICIgPDwg
dGhpcyA8PCAiIGFuaW1hdGlvbkNhbGxiYWNrOiBpc0FuaW1hdGluZ1J1YmJlckJhbmQgIiA8PCBt
X2lzQW5pbWF0aW5nUnViYmVyQmFuZCA8PCAiIGlzQW5pbWF0aW5nU2Nyb2xsU25hcCAiIDw8IG1f
aXNBbmltYXRpbmdTY3JvbGxTbmFwIDw8ICJpc0FuaW1hdGluZ0tleWJvYXJkU2Nyb2xsaW5nIiA8
PCBtX2lzQW5pbWF0aW5nS2V5Ym9hcmRTY3JvbGxpbmcpOwogCiAgICAgdXBkYXRlU2Nyb2xsU25h
cEFuaW1hdGluZ1N0YXRlKGN1cnJlbnRUaW1lKTsKICAgICB1cGRhdGVSdWJiZXJCYW5kQW5pbWF0
aW5nU3RhdGUoY3VycmVudFRpbWUpOworICAgIHVwZGF0ZUtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0
aW5nU3RhdGUoY3VycmVudFRpbWUpOwogfQogCiB2b2lkIFNjcm9sbENvbnRyb2xsZXI6OnN0YXJ0
T3JTdG9wQW5pbWF0aW9uQ2FsbGJhY2tzKCkKIHsKLSAgICBib29sIG5lZWRzQ2FsbGJhY2tzID0g
bV9pc0FuaW1hdGluZ1J1YmJlckJhbmQgfHwgbV9pc0FuaW1hdGluZ1Njcm9sbFNuYXA7CisgICAg
Ym9vbCBuZWVkc0NhbGxiYWNrcyA9IG1faXNBbmltYXRpbmdSdWJiZXJCYW5kIHx8IG1faXNBbmlt
YXRpbmdTY3JvbGxTbmFwIHx8IG1faXNBbmltYXRpbmdLZXlib2FyZFNjcm9sbGluZzsKICAgICBp
ZiAobmVlZHNDYWxsYmFja3MgPT0gbV9pc1J1bm5pbmdBbmltYXRpbmdDYWxsYmFjaykKICAgICAg
ICAgcmV0dXJuOwogCkBAIC02NSw2ICs2NywxNiBAQCB2b2lkIFNjcm9sbENvbnRyb2xsZXI6OnN0
YXJ0T3JTdG9wQW5pbWF0aW9uQ2FsbGJhY2tzKCkKICAgICBtX2lzUnVubmluZ0FuaW1hdGluZ0Nh
bGxiYWNrID0gZmFsc2U7CiB9CiAKK3ZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6YmVnaW5LZXlib2Fy
ZFNjcm9sbGluZygpCit7CisgICAgc2V0SXNBbmltYXRpbmdLZXlib2FyZFNjcm9sbGluZyh0cnVl
KTsKK30KKwordm9pZCBTY3JvbGxDb250cm9sbGVyOjpzdG9wS2V5Ym9hcmRTY3JvbGxpbmcoKQor
eworICAgIHNldElzQW5pbWF0aW5nS2V5Ym9hcmRTY3JvbGxpbmcoZmFsc2UpOworfQorCiB2b2lk
IFNjcm9sbENvbnRyb2xsZXI6OnNldElzQW5pbWF0aW5nUnViYmVyQmFuZChib29sIGlzQW5pbWF0
aW5nUnViYmVyQmFuZCkKIHsKICAgICBpZiAoaXNBbmltYXRpbmdSdWJiZXJCYW5kID09IG1faXNB
bmltYXRpbmdSdWJiZXJCYW5kKQpAQCAtODMsNiArOTUsMTUgQEAgdm9pZCBTY3JvbGxDb250cm9s
bGVyOjpzZXRJc0FuaW1hdGluZ1Njcm9sbFNuYXAoYm9vbCBpc0FuaW1hdGluZ1Njcm9sbFNuYXAp
CiAgICAgc3RhcnRPclN0b3BBbmltYXRpb25DYWxsYmFja3MoKTsKIH0KIAordm9pZCBTY3JvbGxD
b250cm9sbGVyOjpzZXRJc0FuaW1hdGluZ0tleWJvYXJkU2Nyb2xsaW5nKGJvb2wgaXNBbmltYXRp
bmdLZXlib2FyZFNjcm9sbGluZykKK3sKKyAgICBpZiAoaXNBbmltYXRpbmdLZXlib2FyZFNjcm9s
bGluZyA9PSBtX2lzQW5pbWF0aW5nS2V5Ym9hcmRTY3JvbGxpbmcpCisgICAgICAgIHJldHVybjsK
KworICAgIG1faXNBbmltYXRpbmdLZXlib2FyZFNjcm9sbGluZyA9IGlzQW5pbWF0aW5nS2V5Ym9h
cmRTY3JvbGxpbmc7CisgICAgc3RhcnRPclN0b3BBbmltYXRpb25DYWxsYmFja3MoKTsKK30KKwog
Ym9vbCBTY3JvbGxDb250cm9sbGVyOjp1c2VzU2Nyb2xsU25hcCgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuICEhbV9zY3JvbGxTbmFwU3RhdGU7CkBAIC0xOTUsNiArMjE2LDE1IEBAIHZvaWQgU2Nyb2xs
Q29udHJvbGxlcjo6cmVzbmFwQWZ0ZXJMYXlvdXQoKQogICAgICAgICBzZXROZWFyZXN0U2Nyb2xs
U25hcEluZGV4Rm9yQXhpc0FuZE9mZnNldChTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCBvZmZz
ZXQueSgpKTsKIAogfQorCit2b2lkIFNjcm9sbENvbnRyb2xsZXI6OnVwZGF0ZUtleWJvYXJkU2Ny
b2xsaW5nQW5pbWF0aW5nU3RhdGUoTW9ub3RvbmljVGltZSBjdXJyZW50VGltZSkKK3sKKyAgICBp
ZiAoIW1faXNBbmltYXRpbmdLZXlib2FyZFNjcm9sbGluZykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9jbGllbnQua2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcigpLT51cGRhdGVLZXlib2FyZFNj
cm9sbFBvc2l0aW9uKGN1cnJlbnRUaW1lKTsKK30KKwogLy8gQ3VycmVudGx5LCBvbmx5IE1hYyBz
dXBwb3J0cyBtb21lbnR1bSBzcm9sbGluZy1iYXNlZCBzY3JvbGxzbmFwcGluZyBhbmQgcnViYmVy
IGJhbmRpbmcKIC8vIHNvIGFsbCBvZiB0aGVzZSBtZXRob2RzIGFyZSBhIG5vb3Agb24gbm9uLU1h
YyBwbGF0Zm9ybXMuCiAjaWYgIVBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbENvbnRyb2xsZXIuaAppbmRleCAyYjQ3NTFlZWE4ZTQzZTVkNWQ1YjI5ZjkzMzQxMTdl
ZGZjYjdjZDhlLi44ODhhNDEyODQxZTM4MjVhMjA0NWVmN2RlNjIzNGI2ODg1YmM3ZTllIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5oCkBAIC0zOCw2ICszOCw3
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgS2V5Ym9hcmRTY3JvbGxpbmdBbmlt
YXRvcjsKIGNsYXNzIExheW91dFNpemU7CiBjbGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQ7CiBjbGFz
cyBTY3JvbGxDb250cm9sbGVyOwpAQCAtNzIsNiArNzMsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIHN0YXJ0QW5pbWF0aW9uQ2FsbGJhY2soU2Nyb2xsQ29udHJvbGxlciYpID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgc3RvcEFuaW1hdGlvbkNhbGxiYWNrKFNjcm9sbENvbnRyb2xsZXImKSA9
IDA7CiAKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlS2V5Ym9hcmRTY3JvbGxQb3NpdGlvbihNb25v
dG9uaWNUaW1lKSB7IH0KKyAgICB2aXJ0dWFsIEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IgKmtl
eWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CisKICNp
ZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCiAgICAgdmlydHVhbCBib29sIGFsbG93c0hvcml6b250
YWxTdHJldGNoaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIGNvbnN0ID0gMDsKICAgICB2
aXJ0dWFsIGJvb2wgYWxsb3dzVmVydGljYWxTdHJldGNoaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxF
dmVudCYpIGNvbnN0ID0gMDsKQEAgLTEyMSw2ICsxMjUsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCB1
c2VzU2Nyb2xsU25hcCgpIGNvbnN0OwogICAgIHZvaWQgc3RvcEFsbFRpbWVycygpOwogICAgIHZv
aWQgc2Nyb2xsUG9zaXRpb25DaGFuZ2VkKCk7CisKKyAgICB2b2lkIGJlZ2luS2V5Ym9hcmRTY3Jv
bGxpbmcoKTsKKyAgICB2b2lkIHN0b3BLZXlib2FyZFNjcm9sbGluZygpOwogICAgIAogICAgIC8v
IFNob3VsZCBiZSBjYWxsZWQgcGVyaW9kaWNhbGx5IGJ5IHRoZSBjbGllbnQuIFN0YXJ0ZWQgYnkg
c3RhcnRBbmltYXRpb25DYWxsYmFjaygpLCBzdG9wcGVkIGJ5IHN0b3BBbmltYXRpb25DYWxsYmFj
aygpLgogICAgIHZvaWQgYW5pbWF0aW9uQ2FsbGJhY2soTW9ub3RvbmljVGltZSk7CkBAIC0xNjMs
OSArMTcwLDExIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHVwZGF0ZVNjcm9sbFNuYXBBbmltYXRp
bmdTdGF0ZShNb25vdG9uaWNUaW1lKTsKICAgICB2b2lkIHVwZGF0ZVJ1YmJlckJhbmRBbmltYXRp
bmdTdGF0ZShNb25vdG9uaWNUaW1lKTsKLSAgICAKKyAgICB2b2lkIHVwZGF0ZUtleWJvYXJkU2Ny
b2xsaW5nQW5pbWF0aW5nU3RhdGUoTW9ub3RvbmljVGltZSk7CisKICAgICB2b2lkIHNldElzQW5p
bWF0aW5nUnViYmVyQmFuZChib29sKTsKICAgICB2b2lkIHNldElzQW5pbWF0aW5nU2Nyb2xsU25h
cChib29sKTsKKyAgICB2b2lkIHNldElzQW5pbWF0aW5nS2V5Ym9hcmRTY3JvbGxpbmcoYm9vbCk7
CiAKICNpZiBQTEFURk9STShNQUMpCiAgICAgdm9pZCBzdGFydFNjcm9sbFNuYXBBbmltYXRpb24o
KTsKQEAgLTE5OSw2ICsyMDgsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc1J1bm5pbmdBbmlt
YXRpbmdDYWxsYmFjayB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzQW5pbWF0aW5nUnViYmVyQmFu
ZCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzQW5pbWF0aW5nU2Nyb2xsU25hcCB7IGZhbHNlIH07
CisgICAgYm9vbCBtX2lzQW5pbWF0aW5nS2V5Ym9hcmRTY3JvbGxpbmcgeyBmYWxzZSB9OwogCiAj
aWYgUExBVEZPUk0oTUFDKQogICAgIFdhbGxUaW1lIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0
YW1wOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434452</attachid>
            <date>2021-07-28 13:18:59 -0700</date>
            <delta_ts>2021-07-30 12:03:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228009-20210728161858.patch</filename>
            <type>text/plain</type>
            <size>35740</size>
            <attacher name="Dana Estra">dana.estra</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5OTU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTg2OTY2YzRlMjRjN2M1
MDIwZWJmNTMyZWUyZjRhODgzNDBjYjgyYi4uZmQ2MWM0MWZlNmZhZTllODQyNGZlNjg5M2I5Njg0
NTNmYTVkYTJjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDIxLTA3LTIzICBEYW5h
IEVzdHJhICA8ZGVzdHJhQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQga2V5LWRyaXZlbiBzbW9v
dGggc2Nyb2xsaW5nIHRvIG1hY09TCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjgwMDkKKworICAgICAgICBSZXZpZXdlZCBieSBUaW0gSG9ydG9uLgor
CisgICAgICAgIENhdXNlIGtleWJvYXJkIHNjcm9sbCBldmVudCB0byB0cmlnZ2VyIHN0YXJ0IG9m
IHNtb290aCBzY3JvbGwgYW5pbWF0aW9uLCB1c2luZyBzYW1lIHBoeXNpY3MgaW1wbGVtZW50YXRp
b24gYXMgaU9TIHNtb290aCBzY3JvbGxpbmcuCisKKyAgICAgICAgTm8gdGVzdHMgeWV0LgorCisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRv
bS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmRlZmF1bHRFdmVudEhhbmRsZXIp
OgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50SGFuZGxlcjo6ZGVmYXVsdEtleWJvYXJkRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50SGFuZGxlcjo6c2Nyb2xsRGlzdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6RXZl
bnRIYW5kbGVyOjpzdG9wS2V5Ym9hcmRTY3JvbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RXZl
bnRIYW5kbGVyOjpzdGFydEtleWJvYXJkU2Nyb2xsaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9L
ZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
S2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6c3Rh
cnRBbmltYXRpb25DYWxsYmFjayk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3Iu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OmFuaW1hdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OnN0YXJ0T3JTdG9wQW5pbWF0aW9uQ2FsbGJhY2tzKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OmJlZ2luS2V5Ym9hcmRTY3JvbGxp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6c3RvcEtleWJvYXJkU2Ny
b2xsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OnNldElzQW5pbWF0
aW5nS2V5Ym9hcmRTY3JvbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxl
cjo6dXBkYXRlS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRpbmdTdGF0ZSk6CisgICAgICAgICogcGxh
dGZvcm0vU2Nyb2xsQ29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJv
bGxlckNsaWVudDo6dXBkYXRlS2V5Ym9hcmRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIAogMjAy
MS0wNy0xNSAgVGltIE5ndXllbiAgPG50aW1AYXBwbGUuY29tPgogCiAgICAgICAgIDxkaWFsb2c+
IGVsZW1lbnQ6IGRvIG5vdCBwZXJmb3JtIGNsb3NlKCkgbWV0aG9kIHN0ZXBzIHdoZW4gcmVtb3Zp
bmcgb3BlbiBhdHRyaWJ1dGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4
dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDNjYmZhNWFiNWE0YmY1ODQ0OTZh
YjYxMzNjZTMwOGQ0OTkyM2JhMDIuLmMzZmY0OWQwMTgyODBkMjczN2ZkYTUwMGRhMjRmZmMwODZh
N2ZkZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xODI3LDYgKzE4MjcsNyBAQCBwbGF0Zm9ybS9GaWxl
SGFuZGxlLmNwcAogcGxhdGZvcm0vRmlsZU1vbml0b3IuY3BwCiBwbGF0Zm9ybS9GaWxlU3RyZWFt
LmNwcAogcGxhdGZvcm0vRnJhbWVSYXRlTW9uaXRvci5jcHAKK3BsYXRmb3JtL0tleWJvYXJkU2Ny
b2xsaW5nQW5pbWF0b3IuY3BwCiBwbGF0Zm9ybS9MYXlvdXRVbml0LmNwcAogcGxhdGZvcm0vTGVn
YWN5U2NoZW1lUmVnaXN0cnkuY3BwCiBwbGF0Zm9ybS9MZW5ndGguY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNGExZDc4NjU0
NzY4YmMyODRmZDY3ZDc0NjZkODlhY2JkNjBjY2U5OC4uMWQyNTRkMThhYjQzMzQ3Njk3YTk0MDk4
MTQ3YTg4NmJhMWI3YWVjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjczLDYgKzY3Myw3IEBACiAJCTFGODc1NkIyMUUyMkMz
MzUwMDQyQzQwRCAvKiBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFGODc1NkIxMUUyMkJFRUYwMDQy
QzQwRCAvKiBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxRkFGQkYxOTE1QTVGQTc0MDAwODNB
MjAgLyogVVRJVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxRkFGQkYxNjE1QTVGQTUyMDAwODNBMjAgLyogVVRJVXRpbGl0aWVzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUZDNDBGQkEx
NjU1Q0NCOTAwNDBGMjlFIC8qIFN1YmltYWdlQ2FjaGVXaXRoVGltZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFGQzQwRkI3MTY1NUM1OTEwMDQwRjI5
RSAvKiBTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmggKi87IH07CisJCTFGRDk5MkY4MjZBQTI0Rjkw
MDg4RTU5NiAvKiBLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxRkQ5OTJGNjI2QUEyNEY4MDA4OEU1OTYgLyog
S2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTIwRDYyOTI3MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDIwRDYyOTI1MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb24uaCAqLzsgfTsKIAkJMjI1QTE2QjUwRDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2ZW50UmVn
aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMjVB
MTZCMzBENUMxMUU5MDAwOTAyOTUgLyogV2ViRXZlbnRSZWdpb24uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyMjhDMjg0NTEwRDgyNTAwMDA5RDBE
MEUgLyogU2NyaXB0V3JhcHBhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyMjhDMjg0NDEwRDgyNTAwMDA5RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTcw
NzIsNiArNzA3Myw4IEBACiAJCTFGQUZCRjE3MTVBNUZBNTIwMDA4M0EyMCAvKiBVVElVdGlsaXRp
ZXMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBVVElVdGlsaXRp
ZXMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFGQzQwRkI3MTY1NUM1OTEwMDQw
RjI5RSAvKiBTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFN1YmltYWdlQ2FjaGVXaXRoVGltZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMUZDNDBGQjgxNjU1QzU5MTAwNDBGMjlFIC8qIFN1YmltYWdlQ2FjaGVXaXRoVGlt
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3ViaW1hZ2VDYWNo
ZVdpdGhUaW1lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFGRDk5MkY2MjZB
QTI0RjgwMDg4RTU5NiAvKiBLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUZEOTkyRjkyNkFBMjU0RDAwODhFNTk2IC8qIEtleWJv
YXJkU2Nyb2xsaW5nQW5pbWF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTIwRDYyOTI0MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjBENjI5
MjUxMjUzNjkwQjAwMDgxNTQzIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjI1QTE2QjMwRDVDMTFFOTAwMDkwMjk1IC8qIFdl
YkV2ZW50UmVnaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkV2ZW50
UmVnaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yODExOCw2ICsyODEyMSw4
IEBACiAJCQkJNDE5MEYzQTMyNDlEMTUyODAwNTMxQzU3IC8qIEZyYW1lUmF0ZU1vbml0b3IuaCAq
LywKIAkJCQlBODc0OEJERjEyQ0JGMkRDMDAxRkJBNDEgLyogSGFzaFRvb2xzLmggKi8sCiAJCQkJ
QkMzQkMyOUIwRTkxQUIwRjAwODM1NTg4IC8qIEhvc3RXaW5kb3cuaCAqLywKKwkJCQkxRkQ5OTJG
OTI2QUEyNTREMDA4OEU1OTYgLyogS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5jcHAgKi8sCisJ
CQkJMUZEOTkyRjYyNkFBMjRGODAwODhFNTk2IC8qIEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3Iu
aCAqLywKIAkJCQkxQUUwMEQ1NzE4MkRBQzhEMDAwODdERDcgLyogS2V5ZWRDb2RpbmcuaCAqLywK
IAkJCQlFMTVGRjdENDE4Qzk1NTM4MDBGRTRDODcgLyogS2V5cHJlc3NDb21tYW5kLmggKi8sCiAJ
CQkJQTNENDJBODQxRjMzQkEzNjAwQTY0QjYyIC8qIExheW91dFVuaXQuY3BwICovLApAQCAtMzQx
NDgsNiArMzQxNTMsNyBAQAogCQkJCTgzQjc0RUY2MUYzRTBCRjIwMDk5NkJDNyAvKiBLZWVwYWxp
dmVSZXF1ZXN0VHJhY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODUwMzFCNDQwQTQ0RUZDNzAw
Rjk5MkUwIC8qIEtleWJvYXJkRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFGMDIwQUVGMjY3
ODBGQ0UwMDAwODA5QSAvKiBLZXlib2FyZFNjcm9sbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUZE
OTkyRjgyNkFBMjRGOTAwODhFNTk2IC8qIEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFBRTAwRDU5MTgyREFDOEQwMDA4N0RENyAvKiBLZXllZENvZGluZy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTE3QTYzQzUxQjc0MzE4RjAwRTdEQ0RDIC8qIEtleWVkRGVj
b2RlckNGLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTdBNjNDNjFCNzQzMTkyMDBFN0RDREMgLyog
S2V5ZWRFbmNvZGVyQ0YuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4IGUyNDU3
N2RmM2Q3NjE3YmU0YjI1NjI3MDhhYjc2ZDhmYzU4MjQ1ZWQuLmQ1NmIyYjk0ZmI4ZjNiZGEwOWU3
ZGYxZGVkNDZkOThmZDQzZGM0NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTI0MzIsNyArMjQzMiw3
IEBAIHZvaWQgTm9kZTo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCYgZXZlbnQpCiAgICAgaWYg
KGV2ZW50LnRhcmdldCgpICE9IHRoaXMpCiAgICAgICAgIHJldHVybjsKICAgICBjb25zdCBBdG9t
U3RyaW5nJiBldmVudFR5cGUgPSBldmVudC50eXBlKCk7Ci0gICAgaWYgKGV2ZW50VHlwZSA9PSBl
dmVudE5hbWVzKCkua2V5ZG93bkV2ZW50IHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkua2V5
cHJlc3NFdmVudCkgeworICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmtleWRvd25F
dmVudCB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQgfHwgZXZlbnRU
eXBlID09IGV2ZW50TmFtZXMoKS5rZXl1cEV2ZW50KSB7CiAgICAgICAgIGlmIChpczxLZXlib2Fy
ZEV2ZW50PihldmVudCkpIHsKICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVu
dCgpLmZyYW1lKCkpCiAgICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLmRlZmF1
bHRLZXlib2FyZEV2ZW50SGFuZGxlcihkb3duY2FzdDxLZXlib2FyZEV2ZW50PihldmVudCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDA1Y2RhNjU4MTkyNGEyNmNmNzA1
Yzk4Mjk1ZmQ0MjhlNDM2NGY3M2IuLjBmODAxNDA1M2JmNjQ5ZTQ1N2UyNjQzMGQ3Y2NhNmM1ZjE3
NGY0YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTY4LDcgKzY4LDcg
QEAKICNpbmNsdWRlICJJbWFnZU92ZXJsYXlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgotI2luY2x1
ZGUgIktleWJvYXJkU2Nyb2xsLmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRv
ci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5j
bHVkZSAiTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5oIgpAQCAtMzgwMyw2ICszODAzLDgg
QEAgdm9pZCBFdmVudEhhbmRsZXI6OmRlZmF1bHRLZXlib2FyZEV2ZW50SGFuZGxlcihLZXlib2Fy
ZEV2ZW50JiBldmVudCkKICAgICAgICAgaWYgKGV2ZW50LmNoYXJDb2RlKCkgPT0gJyAnKQogICAg
ICAgICAgICAgZGVmYXVsdFNwYWNlRXZlbnRIYW5kbGVyKGV2ZW50KTsKICAgICB9CisgICAgaWYg
KGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5dXBFdmVudCkKKyAgICAgICAgc3RvcEtl
eWJvYXJkU2Nyb2xsaW5nKCk7CiB9CiAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQpAQCAtNDE5
Nyw3ICs0MTk5LDcgQEAgdm9pZCBFdmVudEhhbmRsZXI6OmRlZmF1bHRTcGFjZUV2ZW50SGFuZGxl
cihLZXlib2FyZEV2ZW50JiBldmVudCkKICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGJvb2wgZGVmYXVsdEhhbmRsZWQgPSBtX2ZyYW1lLnNldHRpbmdzKCkuZXZlbnRIYW5k
bGVyRHJpdmVuU21vb3RoS2V5Ym9hcmRTY3JvbGxpbmdFbmFibGVkKCkgPyBoYW5kbGVLZXlib2Fy
ZFNjcm9sbGluZyhldmVudCkgOiB2aWV3LT5sb2dpY2FsU2Nyb2xsKGRpcmVjdGlvbiwgU2Nyb2xs
QnlQYWdlKTsKKyAgICBib29sIGRlZmF1bHRIYW5kbGVkID0gbV9mcmFtZS5zZXR0aW5ncygpLmV2
ZW50SGFuZGxlckRyaXZlblNtb290aEtleWJvYXJkU2Nyb2xsaW5nRW5hYmxlZCgpID8gc3RhcnRL
ZXlib2FyZFNjcm9sbGluZyhldmVudCkgOiB2aWV3LT5sb2dpY2FsU2Nyb2xsKGRpcmVjdGlvbiwg
U2Nyb2xsQnlQYWdlKTsKICAgICBpZiAoZGVmYXVsdEhhbmRsZWQpCiAgICAgICAgIGV2ZW50LnNl
dERlZmF1bHRIYW5kbGVkKCk7CiB9CkBAIC00MjM3LDcgKzQyMzksNyBAQCBmbG9hdCBFdmVudEhh
bmRsZXI6OnNjcm9sbERpc3RhbmNlKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdy
YW51bGFyaXR5CiAgICAgICAgICAgICByZXR1cm4gbV9mcmFtZS52aWV3KCktPnZlcnRpY2FsU2Ny
b2xsYmFyKCk7CiAgICAgICAgIHJldHVybiBtX2ZyYW1lLnZpZXcoKS0+aG9yaXpvbnRhbFNjcm9s
bGJhcigpOwogICAgIH0oKTsKLSAgICAKKwogICAgIHN3aXRjaCAoZ3JhbnVsYXJpdHkpIHsKICAg
ICBjYXNlIFNjcm9sbEdyYW51bGFyaXR5OjpTY3JvbGxCeUxpbmU6CiAgICAgICAgIHJldHVybiBz
Y3JvbGxiYXItPmxpbmVTdGVwKCk7CkBAIC00MjUyLDYyICs0MjU0LDI4IEBAIGZsb2F0IEV2ZW50
SGFuZGxlcjo6c2Nyb2xsRGlzdGFuY2UoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xs
R3JhbnVsYXJpdHkKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1ib29s
IEV2ZW50SGFuZGxlcjo6aGFuZGxlS2V5Ym9hcmRTY3JvbGxpbmcoS2V5Ym9hcmRFdmVudCYgZXZl
bnQpCit2b2lkIEV2ZW50SGFuZGxlcjo6c3RvcEtleWJvYXJkU2Nyb2xsaW5nKCkKIHsKICAgICBS
ZWYgcHJvdGVjdGVkRnJhbWUgPSBtX2ZyYW1lOwotICAgIC8vIEZJWE1FIChidWcgMjI3NDU5KTog
VGhpcyBsb2dpYyBkb2VzIG5vdCBhY2NvdW50IGZvciB3cml0aW5nLW1vZGUuCi0KLSAgICBlbnVt
IGNsYXNzIEtleSA6IHVpbnQ4X3QgeyBMZWZ0QXJyb3csIFJpZ2h0QXJyb3csIFVwQXJyb3csIERv
d25BcnJvdywgU3BhY2UgfTsKLQotICAgIEtleSBrZXk7Ci0gICAgaWYgKGV2ZW50LmtleUlkZW50
aWZpZXIoKSA9PSAiTGVmdCIpCi0gICAgICAgIGtleSA9IEtleTo6TGVmdEFycm93OwotICAgIGVs
c2UgaWYgKGV2ZW50LmtleUlkZW50aWZpZXIoKSA9PSAiUmlnaHQiKQotICAgICAgICBrZXkgPSBL
ZXk6OlJpZ2h0QXJyb3c7Ci0gICAgZWxzZSBpZiAoZXZlbnQua2V5SWRlbnRpZmllcigpID09ICJV
cCIpCi0gICAgICAgIGtleSA9IEtleTo6VXBBcnJvdzsKLSAgICBlbHNlIGlmIChldmVudC5rZXlJ
ZGVudGlmaWVyKCkgPT0gIkRvd24iKQotICAgICAgICBrZXkgPSBLZXk6OkRvd25BcnJvdzsKLSAg
ICBlbHNlIGlmIChldmVudC5jaGFyQ29kZSgpID09ICcgJykKLSAgICAgICAga2V5ID0gS2V5OjpT
cGFjZTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBGcmFtZVZpZXcqIHZp
ZXcgPSBtX2ZyYW1lLnZpZXcoKTsKIAotICAgIGF1dG8gZ3JhbnVsYXJpdHkgPSBbJl0gewotICAg
ICAgICBzd2l0Y2ggKGtleSkgewotICAgICAgICBjYXNlIEtleTo6TGVmdEFycm93OgotICAgICAg
ICBjYXNlIEtleTo6UmlnaHRBcnJvdzoKLSAgICAgICAgICAgIHJldHVybiBldmVudC5hbHRLZXko
KSA/IFNjcm9sbEdyYW51bGFyaXR5OjpTY3JvbGxCeVBhZ2UgOiBTY3JvbGxHcmFudWxhcml0eTo6
U2Nyb2xsQnlMaW5lOwotICAgICAgICBjYXNlIEtleTo6VXBBcnJvdzoKLSAgICAgICAgY2FzZSBL
ZXk6OkRvd25BcnJvdzoKLSAgICAgICAgICAgIGlmIChldmVudC5tZXRhS2V5KCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIFNjcm9sbEdyYW51bGFyaXR5OjpTY3JvbGxCeURvY3VtZW50OwotICAg
ICAgICAgICAgaWYgKGV2ZW50LmFsdEtleSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBTY3Jv
bGxHcmFudWxhcml0eTo6U2Nyb2xsQnlQYWdlOwotICAgICAgICAgICAgcmV0dXJuIFNjcm9sbEdy
YW51bGFyaXR5OjpTY3JvbGxCeUxpbmU7Ci0gICAgICAgIGNhc2UgS2V5OjpTcGFjZToKLSAgICAg
ICAgICAgIHJldHVybiBTY3JvbGxHcmFudWxhcml0eTo6U2Nyb2xsQnlQYWdlOwotICAgICAgICB9
OwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0oKTsKKyAgICBL
ZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yKiBhbmltYXRvciA9IHZpZXctPnNjcm9sbEFuaW1hdG9y
KCkua2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcigpOwogCi0gICAgYXV0byBkaXJlY3Rpb24gPSBb
Jl0gewotICAgICAgICBzd2l0Y2ggKGtleSkgewotICAgICAgICBjYXNlIEtleTo6TGVmdEFycm93
OgotICAgICAgICAgICAgcmV0dXJuIFNjcm9sbERpcmVjdGlvbjo6U2Nyb2xsTGVmdDsKLSAgICAg
ICAgY2FzZSBLZXk6OlJpZ2h0QXJyb3c6Ci0gICAgICAgICAgICByZXR1cm4gU2Nyb2xsRGlyZWN0
aW9uOjpTY3JvbGxSaWdodDsKLSAgICAgICAgY2FzZSBLZXk6OlVwQXJyb3c6Ci0gICAgICAgICAg
ICByZXR1cm4gU2Nyb2xsRGlyZWN0aW9uOjpTY3JvbGxVcDsKLSAgICAgICAgY2FzZSBLZXk6OkRv
d25BcnJvdzoKLSAgICAgICAgICAgIHJldHVybiBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbERvd247
Ci0gICAgICAgIGNhc2UgS2V5OjpTcGFjZToKLSAgICAgICAgICAgIHJldHVybiBldmVudC5zaGlm
dEtleSgpID8gU2Nyb2xsRGlyZWN0aW9uOjpTY3JvbGxVcCA6IFNjcm9sbERpcmVjdGlvbjo6U2Ny
b2xsRG93bjsKLSAgICAgICAgfQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIH0oKTsKKyAgICBpZiAoYW5pbWF0b3IpCisgICAgICAgIGFuaW1hdG9yLT5oYW5kbGVL
ZXlVcEV2ZW50V2hpbGVTY3JvbGxpbmcoKTsKK30KKworYm9vbCBFdmVudEhhbmRsZXI6OnN0YXJ0
S2V5Ym9hcmRTY3JvbGxpbmcoS2V5Ym9hcmRFdmVudCYgZXZlbnQpCit7CisgICAgUmVmIHByb3Rl
Y3RlZEZyYW1lID0gbV9mcmFtZTsKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLnZpZXco
KTsKKworICAgIEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IqIGFuaW1hdG9yID0gdmlldy0+c2Ny
b2xsQW5pbWF0b3IoKS5rZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yKCk7CiAKLSAgICByZXR1cm4g
RXZlbnRIYW5kbGVyOjpzY3JvbGxSZWN1cnNpdmVseShkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBu
dWxscHRyKTsKKyAgICBpZiAoYW5pbWF0b3IpCisgICAgICAgIHJldHVybiBhbmltYXRvci0+YmVn
aW5LZXlib2FyZFNjcm9sbEdlc3R1cmUoZXZlbnQpOworCisgICAgcmV0dXJuIGZhbHNlOwogfQog
CiB2b2lkIEV2ZW50SGFuZGxlcjo6ZGVmYXVsdEFycm93RXZlbnRIYW5kbGVyKEZvY3VzRGlyZWN0
aW9uIGZvY3VzRGlyZWN0aW9uLCBLZXlib2FyZEV2ZW50JiBldmVudCkKQEAgLTQzMTYsNyArNDI4
NCw3IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpkZWZhdWx0QXJyb3dFdmVudEhhbmRsZXIoRm9jdXNE
aXJlY3Rpb24gZm9jdXNEaXJlY3Rpb24sIEtleWJvCiAKICAgICBpZiAoIWlzU3BhdGlhbE5hdmln
YXRpb25FbmFibGVkKCZtX2ZyYW1lKSkgewogICAgICAgICBpZiAobV9mcmFtZS5zZXR0aW5ncygp
LmV2ZW50SGFuZGxlckRyaXZlblNtb290aEtleWJvYXJkU2Nyb2xsaW5nRW5hYmxlZCgpKQotICAg
ICAgICAgICAgaGFuZGxlS2V5Ym9hcmRTY3JvbGxpbmcoZXZlbnQpOworICAgICAgICAgICAgc3Rh
cnRLZXlib2FyZFNjcm9sbGluZyhldmVudCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCmluZGV4IGE1YWY0MDQ2MTRlNmNmODZkMGJjNWNjNjUw
MjQ1NTMwMzJmOGJiNDIuLjIyN2UwMmNlM2VkNGUyN2IzOGM4MGJhOTZmN2IwYzA4NTRiY2UzNDMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaApAQCAtMzc3LDcgKzM3Nyw4IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBoYW5kbGVNb3VzZVByZXNzRXZlbnRUcmlwbGVDbGljayhjb25zdCBNb3Vz
ZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJik7CiAKICAgICBmbG9hdCBzY3JvbGxEaXN0YW5jZShT
Y3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5KTsKLSAgICBib29sIGhhbmRsZUtleWJv
YXJkU2Nyb2xsaW5nKEtleWJvYXJkRXZlbnQmKTsKKyAgICBib29sIHN0YXJ0S2V5Ym9hcmRTY3Jv
bGxpbmcoS2V5Ym9hcmRFdmVudCYpOworICAgIHZvaWQgc3RvcEtleWJvYXJkU2Nyb2xsaW5nKCk7
CiAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQogICAgIGJvb2wgaGFuZGxlTW91c2VEcmFnZ2Vk
RXZlbnQoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYsIENoZWNrRHJhZ0h5c3Rl
cmVzaXMgPSBTaG91bGRDaGVja0RyYWdIeXN0ZXJlc2lzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MDI5YWJkYTBkNjNjZWZhYmQ3NmYxNDkwNzU5N2QzZjNiNTRhMzkzMwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuY3Bw
CkBAIC0wLDAgKzEsMzA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIktleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuaCIKKworI2luY2x1ZGUgIkV2ZW50TmFt
ZXMuaCIKKyNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgorI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVh
LmgiCisjaW5jbHVkZSAiV3JpdGluZ01vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitL
ZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yOjpLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yKFNjcm9s
bEFuaW1hdG9yJiBzY3JvbGxBbmltYXRvciwgU2Nyb2xsQ29udHJvbGxlciYgc2Nyb2xsQ29udHJv
bGxlcikKKyAgICA6IG1fc2Nyb2xsQW5pbWF0b3Ioc2Nyb2xsQW5pbWF0b3IpCisgICAgLCBtX3Nj
cm9sbENvbnRyb2xsZXIoc2Nyb2xsQ29udHJvbGxlcikKK3sKK30KKworUmVjdEVkZ2VzPGJvb2w+
IEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3I6OnNjcm9sbGFibGVEaXJlY3Rpb25zRnJvbU9mZnNl
dChGbG9hdFBvaW50IG9mZnNldCkgY29uc3QKK3sKKyAgICBhdXRvIG1pbmltdW1TY3JvbGxQb3Np
dGlvbiA9IG1fc2Nyb2xsQW5pbWF0b3Iuc2Nyb2xsYWJsZUFyZWEoKS5taW5pbXVtU2Nyb2xsUG9z
aXRpb24oKTsKKyAgICBhdXRvIG1heGltdW1TY3JvbGxQb3NpdGlvbiA9IG1fc2Nyb2xsQW5pbWF0
b3Iuc2Nyb2xsYWJsZUFyZWEoKS5tYXhpbXVtU2Nyb2xsUG9zaXRpb24oKTsKKworICAgIFJlY3RF
ZGdlczxib29sPiBlZGdlczsKKworICAgIGVkZ2VzLnNldFRvcChvZmZzZXQueSgpID4gbWluaW11
bVNjcm9sbFBvc2l0aW9uLnkoKSk7CisgICAgZWRnZXMuc2V0Qm90dG9tKG9mZnNldC55KCkgPCBt
YXhpbXVtU2Nyb2xsUG9zaXRpb24ueSgpKTsKKyAgICBlZGdlcy5zZXRMZWZ0KG9mZnNldC54KCkg
PiBtaW5pbXVtU2Nyb2xsUG9zaXRpb24ueCgpKTsKKyAgICBlZGdlcy5zZXRSaWdodChvZmZzZXQu
eCgpIDwgbWF4aW11bVNjcm9sbFBvc2l0aW9uLngoKSk7CisKKyAgICByZXR1cm4gZWRnZXM7Cit9
CisKK3N0YXRpYyBCb3hTaWRlIGJveFNpZGVGb3JEaXJlY3Rpb24oU2Nyb2xsRGlyZWN0aW9uIGRp
cmVjdGlvbikKK3sKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNhc2UgU2Nyb2xsRGly
ZWN0aW9uOjpTY3JvbGxVcDoKKyAgICAgICAgcmV0dXJuIEJveFNpZGU6OlRvcDsKKyAgICBjYXNl
IFNjcm9sbERpcmVjdGlvbjo6U2Nyb2xsRG93bjoKKyAgICAgICAgcmV0dXJuIEJveFNpZGU6OkJv
dHRvbTsKKyAgICBjYXNlIFNjcm9sbERpcmVjdGlvbjo6U2Nyb2xsTGVmdDoKKyAgICAgICAgcmV0
dXJuIEJveFNpZGU6OkxlZnQ7CisgICAgY2FzZSBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbFJpZ2h0
OgorICAgICAgICByZXR1cm4gQm94U2lkZTo6UmlnaHQ7CisgICAgfQorICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiBCb3hTaWRlOjpUb3A7Cit9CisKK3N0YXRpYyBGbG9hdFNp
emUgcGVycGVuZGljdWxhckFic29sdXRlVW5pdFZlY3RvcihTY3JvbGxEaXJlY3Rpb24gZGlyZWN0
aW9uKQoreworICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBTY3JvbGxEaXJlY3Rp
b246OlNjcm9sbFVwOgorICAgIGNhc2UgU2Nyb2xsRGlyZWN0aW9uOjpTY3JvbGxEb3duOgorICAg
ICAgICByZXR1cm4geyAxLCAwIH07CisgICAgY2FzZSBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbExl
ZnQ6CisgICAgY2FzZSBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbFJpZ2h0OgorICAgICAgICByZXR1
cm4geyAwLCAxIH07CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biB7IH07Cit9CisKK3ZvaWQgS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcjo6dXBkYXRlS2V5Ym9h
cmRTY3JvbGxQb3NpdGlvbihNb25vdG9uaWNUaW1lIGN1cnJlbnRUaW1lKQoreworICAgIGF1dG8g
Zm9yY2UgPSBGbG9hdFNpemUgeyB9OworICAgIGF1dG8gYXhlc1RvQXBwbHlTcHJpbmcgPSBGbG9h
dFNpemUgeyAxLCAxIH07CisgICAgS2V5Ym9hcmRTY3JvbGxQYXJhbWV0ZXJzIHBhcmFtcyA9IEtl
eWJvYXJkU2Nyb2xsUGFyYW1ldGVyczo6cGFyYW1ldGVycygpOworCisgICAgaWYgKG1fY3VycmVu
dEtleWJvYXJkU2Nyb2xsKSB7CisgICAgICAgIGF1dG8gc2Nyb2xsYWJsZURpcmVjdGlvbnMgPSBz
Y3JvbGxhYmxlRGlyZWN0aW9uc0Zyb21PZmZzZXQobV9zY3JvbGxBbmltYXRvci5jdXJyZW50UG9z
aXRpb24oKSk7CisgICAgICAgIGF1dG8gZGlyZWN0aW9uID0gbV9jdXJyZW50S2V5Ym9hcmRTY3Jv
bGwtPmRpcmVjdGlvbjsKKworICAgICAgICBpZiAoc2Nyb2xsYWJsZURpcmVjdGlvbnMuYXQoYm94
U2lkZUZvckRpcmVjdGlvbihkaXJlY3Rpb24pKSkgeworICAgICAgICAgICAgLy8gQXBwbHkgdGhl
IHNjcm9sbGluZyBmb3JjZS4gT25seSBhcHBseSB0aGUgc3ByaW5nIGluIHRoZSBwZXJwZW5kaWN1
bGFyIGF4aXMsCisgICAgICAgICAgICAvLyBvdGhlcndpc2UgaXQgZHJhZ3MgYWdhaW5zdCB0aGUg
ZGlyZWN0aW9uIG9mIG1vdGlvbi4KKyAgICAgICAgICAgIGF4ZXNUb0FwcGx5U3ByaW5nID0gcGVy
cGVuZGljdWxhckFic29sdXRlVW5pdFZlY3RvcihkaXJlY3Rpb24pOworICAgICAgICAgICAgZm9y
Y2UgPSBtX2N1cnJlbnRLZXlib2FyZFNjcm9sbC0+Zm9yY2U7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAvLyBUaGUgc2Nyb2xsIHZpZXcgY2Fubm90IHNjcm9sbCBpbiB0aGlzIGRpcmVj
dGlvbiwgYW5kIGlzIHJ1YmJlci1iYW5kaW5nLgorICAgICAgICAgICAgLy8gQXBwbHkgYSBjb25z
dGFudCBhbmQgc2lnbmlmaWNhbnQgZm9yY2U7IG90aGVyd2lzZSwgdGhlIGZvcmNlIGZvciBhCisg
ICAgICAgICAgICAvLyBzaW5nbGUtbGluZSBpbmNyZW1lbnQgaXMgbm90IHN0cm9uZyBlbm91Z2gg
dG8gcnViYmVyLWJhbmQgcGVyY2VwdGlibHkuCisgICAgICAgICAgICBmb3JjZSA9IHVuaXRWZWN0
b3JGb3JTY3JvbGxEaXJlY3Rpb24oZGlyZWN0aW9uKS5zY2FsZWQocGFyYW1zLnJ1YmJlckJhbmRG
b3JjZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZmFicyhtX3ZlbG9jaXR5LndpZHRoKCkp
ID49IGZhYnMobV9jdXJyZW50S2V5Ym9hcmRTY3JvbGwtPm1heGltdW1WZWxvY2l0eS53aWR0aCgp
KSkKKyAgICAgICAgICAgIGZvcmNlLnNldFdpZHRoKDApOworCisgICAgICAgIGlmIChmYWJzKG1f
dmVsb2NpdHkuaGVpZ2h0KCkpID49IGZhYnMobV9jdXJyZW50S2V5Ym9hcmRTY3JvbGwtPm1heGlt
dW1WZWxvY2l0eS5oZWlnaHQoKSkpCisgICAgICAgICAgICBmb3JjZS5zZXRIZWlnaHQoMCk7Cisg
ICAgfQorCisgICAgU2Nyb2xsUG9zaXRpb24gaWRlYWxQb3NpdGlvbiA9IG1fc2Nyb2xsQW5pbWF0
b3Iuc2Nyb2xsYWJsZUFyZWEoKS5jb25zdHJhaW5TY3JvbGxQb3NpdGlvbihJbnRQb2ludChtX2N1
cnJlbnRLZXlib2FyZFNjcm9sbCA/IG1fc2Nyb2xsQW5pbWF0b3IuY3VycmVudFBvc2l0aW9uKCkg
OiBtX2lkZWFsUG9zaXRpb24pKTsKKyAgICBGbG9hdFNpemUgZGlzcGxhY2VtZW50ID0gbV9zY3Jv
bGxBbmltYXRvci5jdXJyZW50UG9zaXRpb24oKSAtIGlkZWFsUG9zaXRpb247CisKKyAgICBhdXRv
IHNwcmluZ0ZvcmNlID0gLWRpc3BsYWNlbWVudC5zY2FsZWQocGFyYW1zLnNwcmluZ1N0aWZmbmVz
cykgLSBtX3ZlbG9jaXR5LnNjYWxlZChwYXJhbXMuc3ByaW5nRGFtcGluZyk7CisgICAgZm9yY2Ug
Kz0gc3ByaW5nRm9yY2UgKiBheGVzVG9BcHBseVNwcmluZzsKKworICAgIGZsb2F0IGZyYW1lRHVy
YXRpb24gPSAoY3VycmVudFRpbWUgLSBtX3RpbWVBdExhc3RGcmFtZSkudmFsdWUoKTsKKyAgICBt
X3RpbWVBdExhc3RGcmFtZSA9IGN1cnJlbnRUaW1lOworCisgICAgRmxvYXRTaXplIGFjY2VsZXJh
dGlvbiA9IGZvcmNlLnNjYWxlZCgxLiAvIHBhcmFtcy5zcHJpbmdNYXNzKTsKKyAgICBtX3ZlbG9j
aXR5ICs9IGFjY2VsZXJhdGlvbi5zY2FsZWQoZnJhbWVEdXJhdGlvbik7CisgICAgRmxvYXRQb2lu
dCBuZXdQb3NpdGlvbiA9IG1fc2Nyb2xsQW5pbWF0b3IuY3VycmVudFBvc2l0aW9uKCkgKyBtX3Zl
bG9jaXR5LnNjYWxlZChmcmFtZUR1cmF0aW9uKTsKKworICAgIG1fc2Nyb2xsQW5pbWF0b3Iuc2Ny
b2xsVG9Qb3NpdGlvbldpdGhvdXRBbmltYXRpb24obmV3UG9zaXRpb24pOworCisgICAgaWYgKCFt
X3Njcm9sbFRyaWdnZXJpbmdLZXlJc1ByZXNzZWQgJiYgbV92ZWxvY2l0eS5kaWFnb25hbExlbmd0
aFNxdWFyZWQoKSA8IDEpIHsKKyAgICAgICAgbV9zY3JvbGxDb250cm9sbGVyLnN0b3BLZXlib2Fy
ZFNjcm9sbGluZygpOworICAgICAgICBtX3ZlbG9jaXR5ID0geyB9OworICAgIH0KK30KKworZmxv
YXQgS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcjo6c2Nyb2xsRGlzdGFuY2UoU2Nyb2xsRGlyZWN0
aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpIGNvbnN0Cit7Cisg
ICAgYXV0byBzY3JvbGxiYXIgPSBbJl0geworICAgICAgICBpZiAoZGlyZWN0aW9uID09IFNjcm9s
bERpcmVjdGlvbjo6U2Nyb2xsVXAgfHwgZGlyZWN0aW9uID09IFNjcm9sbERpcmVjdGlvbjo6U2Ny
b2xsRG93bikKKyAgICAgICAgICAgIHJldHVybiBtX3Njcm9sbEFuaW1hdG9yLnNjcm9sbGFibGVB
cmVhKCkudmVydGljYWxTY3JvbGxiYXIoKTsKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsQW5pbWF0
b3Iuc2Nyb2xsYWJsZUFyZWEoKS5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAgfSgpOworCisg
ICAgc3dpdGNoIChncmFudWxhcml0eSkgeworICAgIGNhc2UgU2Nyb2xsR3JhbnVsYXJpdHk6OlNj
cm9sbEJ5TGluZToKKyAgICAgICAgcmV0dXJuIHNjcm9sbGJhci0+bGluZVN0ZXAoKTsKKyAgICBj
YXNlIFNjcm9sbEdyYW51bGFyaXR5OjpTY3JvbGxCeVBhZ2U6CisgICAgICAgIHJldHVybiBzY3Jv
bGxiYXItPnBhZ2VTdGVwKCk7CisgICAgY2FzZSBTY3JvbGxHcmFudWxhcml0eTo6U2Nyb2xsQnlE
b2N1bWVudDoKKyAgICAgICAgcmV0dXJuIHNjcm9sbGJhci0+dG90YWxTaXplKCk7CisgICAgY2Fz
ZSBTY3JvbGxHcmFudWxhcml0eTo6U2Nyb2xsQnlQaXhlbDoKKyAgICAgICAgcmV0dXJuIHNjcm9s
bGJhci0+cGl4ZWxTdGVwKCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0ZDo6b3B0
aW9uYWw8S2V5Ym9hcmRTY3JvbGw+IEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3I6OmtleWJvYXJk
U2Nyb2xsRm9yS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50JiBldmVudCkgY29uc3QKK3sKKyAg
ICAvLyBGSVhNRSAoYnVnIDIyNzQ1OSk6IFRoaXMgbG9naWMgZG9lcyBub3QgYWNjb3VudCBmb3Ig
d3JpdGluZy1tb2RlLgorCisgICAgZW51bSBjbGFzcyBLZXkgOiB1aW50OF90IHsgTGVmdEFycm93
LCBSaWdodEFycm93LCBVcEFycm93LCBEb3duQXJyb3csIFNwYWNlIH07CisKKyAgICBLZXkga2V5
OworICAgIGlmIChldmVudC5rZXlJZGVudGlmaWVyKCkgPT0gIkxlZnQiKQorICAgICAgICBrZXkg
PSBLZXk6OkxlZnRBcnJvdzsKKyAgICBlbHNlIGlmIChldmVudC5rZXlJZGVudGlmaWVyKCkgPT0g
IlJpZ2h0IikKKyAgICAgICAga2V5ID0gS2V5OjpSaWdodEFycm93OworICAgIGVsc2UgaWYgKGV2
ZW50LmtleUlkZW50aWZpZXIoKSA9PSAiVXAiKQorICAgICAgICBrZXkgPSBLZXk6OlVwQXJyb3c7
CisgICAgZWxzZSBpZiAoZXZlbnQua2V5SWRlbnRpZmllcigpID09ICJEb3duIikKKyAgICAgICAg
a2V5ID0gS2V5OjpEb3duQXJyb3c7CisgICAgZWxzZSBpZiAoZXZlbnQuY2hhckNvZGUoKSA9PSAn
ICcpCisgICAgICAgIGtleSA9IEtleTo6U3BhY2U7CisgICAgZWxzZQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworCisgICAgYXV0byBncmFudWxhcml0eSA9IFsmXSB7CisgICAgICAgIHN3
aXRjaCAoa2V5KSB7CisgICAgICAgIGNhc2UgS2V5OjpMZWZ0QXJyb3c6CisgICAgICAgIGNhc2Ug
S2V5OjpSaWdodEFycm93OgorICAgICAgICAgICAgcmV0dXJuIGV2ZW50LmFsdEtleSgpID8gU2Ny
b2xsR3JhbnVsYXJpdHk6OlNjcm9sbEJ5UGFnZSA6IFNjcm9sbEdyYW51bGFyaXR5OjpTY3JvbGxC
eUxpbmU7CisgICAgICAgIGNhc2UgS2V5OjpVcEFycm93OgorICAgICAgICBjYXNlIEtleTo6RG93
bkFycm93OgorICAgICAgICAgICAgaWYgKGV2ZW50Lm1ldGFLZXkoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gU2Nyb2xsR3JhbnVsYXJpdHk6OlNjcm9sbEJ5RG9jdW1lbnQ7CisgICAgICAgICAg
ICBpZiAoZXZlbnQuYWx0S2V5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFNjcm9sbEdyYW51
bGFyaXR5OjpTY3JvbGxCeVBhZ2U7CisgICAgICAgICAgICByZXR1cm4gU2Nyb2xsR3JhbnVsYXJp
dHk6OlNjcm9sbEJ5TGluZTsKKyAgICAgICAgY2FzZSBLZXk6OlNwYWNlOgorICAgICAgICAgICAg
cmV0dXJuIFNjcm9sbEdyYW51bGFyaXR5OjpTY3JvbGxCeVBhZ2U7CisgICAgICAgIH07CisgICAg
fSgpOworCisgICAgYXV0byBkaXJlY3Rpb24gPSBbJl0geworICAgICAgICBzd2l0Y2ggKGtleSkg
eworICAgICAgICBjYXNlIEtleTo6TGVmdEFycm93OgorICAgICAgICAgICAgcmV0dXJuIFNjcm9s
bERpcmVjdGlvbjo6U2Nyb2xsTGVmdDsKKyAgICAgICAgY2FzZSBLZXk6OlJpZ2h0QXJyb3c6Cisg
ICAgICAgICAgICByZXR1cm4gU2Nyb2xsRGlyZWN0aW9uOjpTY3JvbGxSaWdodDsKKyAgICAgICAg
Y2FzZSBLZXk6OlVwQXJyb3c6CisgICAgICAgICAgICByZXR1cm4gU2Nyb2xsRGlyZWN0aW9uOjpT
Y3JvbGxVcDsKKyAgICAgICAgY2FzZSBLZXk6OkRvd25BcnJvdzoKKyAgICAgICAgICAgIHJldHVy
biBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbERvd247CisgICAgICAgIGNhc2UgS2V5OjpTcGFjZToK
KyAgICAgICAgICAgIHJldHVybiBldmVudC5zaGlmdEtleSgpID8gU2Nyb2xsRGlyZWN0aW9uOjpT
Y3JvbGxVcCA6IFNjcm9sbERpcmVjdGlvbjo6U2Nyb2xsRG93bjsKKyAgICAgICAgfQorICAgIH0o
KTsKKworICAgIGZsb2F0IGRpc3RhbmNlID0gc2Nyb2xsRGlzdGFuY2UoZGlyZWN0aW9uLCBncmFu
dWxhcml0eSk7CisKKyAgICBLZXlib2FyZFNjcm9sbCBzY3JvbGw7CisKKyAgICBzY3JvbGwub2Zm
c2V0ID0gdW5pdFZlY3RvckZvclNjcm9sbERpcmVjdGlvbihkaXJlY3Rpb24pLnNjYWxlZChkaXN0
YW5jZSk7CisgICAgc2Nyb2xsLmdyYW51bGFyaXR5ID0gZ3JhbnVsYXJpdHk7CisgICAgc2Nyb2xs
LmRpcmVjdGlvbiA9IGRpcmVjdGlvbjsKKyAgICBzY3JvbGwubWF4aW11bVZlbG9jaXR5ID0gc2Ny
b2xsLm9mZnNldC5zY2FsZWQoS2V5Ym9hcmRTY3JvbGxQYXJhbWV0ZXJzOjpwYXJhbWV0ZXJzKCku
bWF4aW11bVZlbG9jaXR5TXVsdGlwbGllcik7CisgICAgc2Nyb2xsLmZvcmNlID0gc2Nyb2xsLm1h
eGltdW1WZWxvY2l0eS5zY2FsZWQoS2V5Ym9hcmRTY3JvbGxQYXJhbWV0ZXJzOjpwYXJhbWV0ZXJz
KCkuc3ByaW5nTWFzcyAvIEtleWJvYXJkU2Nyb2xsUGFyYW1ldGVyczo6cGFyYW1ldGVycygpLnRp
bWVUb01heGltdW1WZWxvY2l0eSk7CisKKyAgICByZXR1cm4gc2Nyb2xsOworfQorCitib29sIEtl
eWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3I6OmJlZ2luS2V5Ym9hcmRTY3JvbGxHZXN0dXJlKEtleWJv
YXJkRXZlbnQmIGV2ZW50KQoreworICAgIGF1dG8gc2Nyb2xsID0ga2V5Ym9hcmRTY3JvbGxGb3JL
ZXlib2FyZEV2ZW50KGV2ZW50KTsKKworICAgIGlmICghc2Nyb2xsKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBtX2N1cnJlbnRLZXlib2FyZFNjcm9sbCA9IHNjcm9sbDsKKworICAgIGlm
IChldmVudC50eXBlKCkgIT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaWYgKG1fc2Nyb2xsVHJpZ2dlcmluZ0tleUlzUHJlc3NlZCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1fY3VycmVudEtleWJvYXJkU2Nyb2xsLT5n
cmFudWxhcml0eSA9PSBTY3JvbGxHcmFudWxhcml0eTo6U2Nyb2xsQnlEb2N1bWVudCkgeworICAg
ICAgICBtX3ZlbG9jaXR5ID0geyB9OworICAgICAgICBzdG9wS2V5Ym9hcmRTY3JvbGxBbmltYXRp
b24oKTsKKyAgICAgICAgYXV0byBuZXdQb3NpdGlvbiA9IEludFBvaW50KG1fc2Nyb2xsQW5pbWF0
b3IuY3VycmVudFBvc2l0aW9uKCkgKyBtX2N1cnJlbnRLZXlib2FyZFNjcm9sbC0+b2Zmc2V0KTsK
KyAgICAgICAgbV9zY3JvbGxBbmltYXRvci5zY3JvbGxUb1Bvc2l0aW9uV2l0aEFuaW1hdGlvbihu
ZXdQb3NpdGlvbik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIG1fdGltZUF0
TGFzdEZyYW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAgbV9zY3JvbGxUcmlnZ2VyaW5n
S2V5SXNQcmVzc2VkID0gdHJ1ZTsKKworICAgIG1faWRlYWxQb3NpdGlvbkZvck1pbmltdW1UcmF2
ZWwgPSBtX3Njcm9sbEFuaW1hdG9yLmN1cnJlbnRQb3NpdGlvbigpICsgbV9jdXJyZW50S2V5Ym9h
cmRTY3JvbGwtPm9mZnNldDsKKyAgICBtX3Njcm9sbENvbnRyb2xsZXIuYmVnaW5LZXlib2FyZFNj
cm9sbGluZygpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBTY3JvbGxQb3NpdGlv
biBmYXJ0aGVzdFBvaW50SW5EaXJlY3Rpb24oRmxvYXRQb2ludCBhLCBGbG9hdFBvaW50IGIsIFNj
cm9sbERpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAg
ICBjYXNlIFNjcm9sbERpcmVjdGlvbjo6U2Nyb2xsVXA6CisgICAgICAgIHJldHVybiBTY3JvbGxQ
b3NpdGlvbihhLngoKSwgc3RkOjptaW4oYS55KCksIGIueSgpKSk7CisgICAgY2FzZSBTY3JvbGxE
aXJlY3Rpb246OlNjcm9sbERvd246CisgICAgICAgIHJldHVybiBTY3JvbGxQb3NpdGlvbihhLngo
KSwgc3RkOjptYXgoYS55KCksIGIueSgpKSk7CisgICAgY2FzZSBTY3JvbGxEaXJlY3Rpb246OlNj
cm9sbExlZnQ6CisgICAgICAgIHJldHVybiBTY3JvbGxQb3NpdGlvbihzdGQ6Om1pbihhLngoKSwg
Yi54KCkpLCBhLnkoKSk7CisgICAgY2FzZSBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbFJpZ2h0Ogor
ICAgICAgICByZXR1cm4gU2Nyb2xsUG9zaXRpb24oc3RkOjptYXgoYS54KCksIGIueCgpKSwgYS55
KCkpOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB7IH07
Cit9CisKK3ZvaWQgS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcjo6c3RvcEtleWJvYXJkU2Nyb2xs
QW5pbWF0aW9uKCkKK3sKKyAgICBpZiAoIW1fY3VycmVudEtleWJvYXJkU2Nyb2xsKQorICAgICAg
ICByZXR1cm47CisKKyAgICBhdXRvIHBhcmFtcyA9IEtleWJvYXJkU2Nyb2xsUGFyYW1ldGVyczo6
cGFyYW1ldGVycygpOworCisgICAgLy8gRGV0ZXJtaW5lIHRoZSBzZXR0bGluZyBwb3NpdGlvbiBv
ZiB0aGUgc3ByaW5nLCBjb25zZXJ2aW5nIHRoZSBzeXN0ZW0ncyBjdXJyZW50IGVuZXJneS4KKyAg
ICAvLyBLaW5ldGljID0gZWxhc3RpYyBwb3RlbnRpYWwKKyAgICAvLyAxLzIgKiBtICogdl4yID0g
MS8yICogayAqIHheMgorICAgIC8vIHggPSBzcXJ0KHZeMiAqIG0gLyBrKQorICAgIGF1dG8gZGlz
cGxhY2VtZW50TWFnbml0dWRlU3F1YXJlZCA9IChtX3ZlbG9jaXR5ICogbV92ZWxvY2l0eSkuc2Nh
bGVkKHBhcmFtcy5zcHJpbmdNYXNzIC8gcGFyYW1zLnNwcmluZ1N0aWZmbmVzcyk7CisgICAgRmxv
YXRTaXplIGRpc3BsYWNlbWVudCA9IHsKKyAgICAgICAgc3RkOjpjb3B5c2lnbihzcXJ0KGRpc3Bs
YWNlbWVudE1hZ25pdHVkZVNxdWFyZWQud2lkdGgoKSksIG1fdmVsb2NpdHkud2lkdGgoKSksCisg
ICAgICAgIHN0ZDo6Y29weXNpZ24oc3FydChkaXNwbGFjZW1lbnRNYWduaXR1ZGVTcXVhcmVkLmhl
aWdodCgpKSwgbV92ZWxvY2l0eS5oZWlnaHQoKSkKKyAgICB9OworCisgICAgLy8gSWYgdGhlIHNw
cmluZyB3b3VsZCBzZXR0bGUgYmVmb3JlIHRoZSBtaW5pbXVtIHRyYXZlbCBkaXN0YW5jZQorICAg
IC8vIGZvciBhbiBpbnN0YW50YW5lb3VzIHRhcCwgbW92ZSB0aGUgc2V0dGxpbmcgcG9zaXRpb24g
b2YgdGhlIHNwcmluZworICAgIC8vIG91dCB0byB0aGF0IHBvaW50LgorICAgIFNjcm9sbFBvc2l0
aW9uIGZhcnRoZXN0UG9pbnQgPSBmYXJ0aGVzdFBvaW50SW5EaXJlY3Rpb24obV9zY3JvbGxBbmlt
YXRvci5jdXJyZW50UG9zaXRpb24oKSArIGRpc3BsYWNlbWVudCwgbV9pZGVhbFBvc2l0aW9uRm9y
TWluaW11bVRyYXZlbCwgbV9jdXJyZW50S2V5Ym9hcmRTY3JvbGwtPmRpcmVjdGlvbik7CisgICAg
bV9pZGVhbFBvc2l0aW9uID0gbV9zY3JvbGxBbmltYXRvci5zY3JvbGxhYmxlQXJlYSgpLmNvbnN0
cmFpblNjcm9sbFBvc2l0aW9uKGZhcnRoZXN0UG9pbnQpOworCisgICAgbV9jdXJyZW50S2V5Ym9h
cmRTY3JvbGwgPSBzdGQ6Om51bGxvcHQ7Cit9CisKK3ZvaWQgS2V5Ym9hcmRTY3JvbGxpbmdBbmlt
YXRvcjo6aGFuZGxlS2V5VXBFdmVudFdoaWxlU2Nyb2xsaW5nKCkKK3sKKyAgICBpZiAoIW1fc2Ny
b2xsVHJpZ2dlcmluZ0tleUlzUHJlc3NlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RvcEtl
eWJvYXJkU2Nyb2xsQW5pbWF0aW9uKCk7CisgICAgbV9zY3JvbGxUcmlnZ2VyaW5nS2V5SXNQcmVz
c2VkID0gZmFsc2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4zNTAxYjI3Y2RiYmY2OGQwNzljZDNmMzhjNGFjODc0YWMwNjY5MTIxCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5o
CkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJLZXlib2FyZFNjcm9sbC5oIgorI2luY2x1ZGUg
IlJlY3RFZGdlcy5oIgorI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvciB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcik7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcihT
Y3JvbGxBbmltYXRvciYsIFNjcm9sbENvbnRyb2xsZXImKTsKKworICAgIGJvb2wgYmVnaW5LZXli
b2FyZFNjcm9sbEdlc3R1cmUoS2V5Ym9hcmRFdmVudCYpOworICAgIHZvaWQgaGFuZGxlS2V5VXBF
dmVudFdoaWxlU2Nyb2xsaW5nKCk7CisgICAgdm9pZCB1cGRhdGVLZXlib2FyZFNjcm9sbFBvc2l0
aW9uKE1vbm90b25pY1RpbWUpOworCitwcml2YXRlOgorICAgIHZvaWQgc3RvcEtleWJvYXJkU2Ny
b2xsQW5pbWF0aW9uKCk7CisgICAgUmVjdEVkZ2VzPGJvb2w+IHNjcm9sbGFibGVEaXJlY3Rpb25z
RnJvbU9mZnNldChGbG9hdFBvaW50KSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPEtleWJvYXJk
U2Nyb2xsPiBrZXlib2FyZFNjcm9sbEZvcktleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCYpIGNv
bnN0OworICAgIGZsb2F0IHNjcm9sbERpc3RhbmNlKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3Jh
bnVsYXJpdHkpIGNvbnN0OworCisgICAgU2Nyb2xsQW5pbWF0b3ImIG1fc2Nyb2xsQW5pbWF0b3I7
CisgICAgU2Nyb2xsQ29udHJvbGxlciYgbV9zY3JvbGxDb250cm9sbGVyOworICAgIHN0ZDo6b3B0
aW9uYWw8V2ViQ29yZTo6S2V5Ym9hcmRTY3JvbGw+IG1fY3VycmVudEtleWJvYXJkU2Nyb2xsOwor
ICAgIGJvb2wgbV9zY3JvbGxUcmlnZ2VyaW5nS2V5SXNQcmVzc2VkOworICAgIEZsb2F0U2l6ZSBt
X3ZlbG9jaXR5OworICAgIE1vbm90b25pY1RpbWUgbV90aW1lQXRMYXN0RnJhbWU7CisgICAgRmxv
YXRQb2ludCBtX2lkZWFsUG9zaXRpb25Gb3JNaW5pbXVtVHJhdmVsOworICAgIEZsb2F0UG9pbnQg
bV9pZGVhbFBvc2l0aW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCmluZGV4IDVlODNmZGJhZTI3ZmI4OTg3
ZjgwOWE4NTQ5NzU3YWMwNTg2MjM4MGMuLjRmODc5NzEzNTQzYjdhMTJjMTBkM2YxZGUyMjJjMzkx
ZDAwYmYxNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1h
dG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAK
QEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgogCiAjaW5jbHVk
ZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIktleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuaCIK
ICNpbmNsdWRlICJMYXlvdXRTaXplLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50Lmgi
CiAjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0aW9uU21vb3RoLmgiCkBAIC02Nyw2ICs2OCw3IEBAIFNj
cm9sbEFuaW1hdG9yOjpTY3JvbGxBbmltYXRvcihTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFy
ZWEpCiAgICAgICAgIFt0aGlzXSB7CiAgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhLnNldFNj
cm9sbEJlaGF2aW9yU3RhdHVzKFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbik7
CiAgICAgICAgIH0pKQorICAgICwgbV9rZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yKG1ha2VVbmlx
dWU8S2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcj4oKnRoaXMsIG1fc2Nyb2xsQ29udHJvbGxlcikp
CiB7CiB9CiAKQEAgLTMzMiw3ICszMzQsNyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yOjpzdGFydEFu
aW1hdGlvbkNhbGxiYWNrKFNjcm9sbENvbnRyb2xsZXImKQogewogICAgIGlmIChtX3Njcm9sbENv
bnRyb2xsZXJBbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICByZXR1cm47Ci0gICAg
ICAgIAorCiAgICAgbV9zY3JvbGxDb250cm9sbGVyQW5pbWF0aW9uVGltZXIuc3RhcnRSZXBlYXRp
bmcoMV9zIC8gNjAuKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsQW5pbWF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9y
LmgKaW5kZXggZDkyY2ZkYmRmYmIwNWYxZmE5MTM0ZWM2NTg3NWFmY2I4Y2UxZDc4Yy4uMzMyNzFl
MDY4MWZhNTM5Yjk3NzY1OGRhNWE1YzlmYzI2OTEwMDkxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxBbmltYXRvci5oCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSAiRmxvYXRQ
b2ludC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgogI2luY2x1ZGUgIlNjcm9s
bENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgogI2luY2x1ZGUgIlRpbWVy
LmgiCiAjaW5jbHVkZSAiV2hlZWxFdmVudFRlc3RNb25pdG9yLmgiCiAjaW5jbHVkZSA8d3RmL0Zh
c3RNYWxsb2MuaD4KQEAgLTQzLDYgKzQyLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgRmxvYXRQb2ludDsKK2NsYXNzIEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3I7CiBjbGFzcyBQ
bGF0Zm9ybVRvdWNoRXZlbnQ7CiBjbGFzcyBTY3JvbGxBbmltYXRpb247CiBjbGFzcyBTY3JvbGxh
YmxlQXJlYTsKQEAgLTgxLDYgKzgxLDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGhh
bmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7CiAKKyAgICBLZXlib2Fy
ZFNjcm9sbGluZ0FuaW1hdG9yICprZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gbV9rZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLmdldCgpOyB9CisKICNp
ZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVUb3VjaEV2ZW50
KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYpOwogI2VuZGlmCkBAIC0xNzgsNiArMTgwLDcgQEAg
cHJvdGVjdGVkOgogICAgIEZsb2F0UG9pbnQgbV9jdXJyZW50UG9zaXRpb247CiAKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0aW9uPiBtX3Njcm9sbEFuaW1hdGlvbjsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8S2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcj4gbV9rZXlib2FyZFNjcm9sbGlu
Z0FuaW1hdG9yOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmNwcAppbmRleCBlOTM3NWJhNzQ3NjhiZGI0NzNi
ZDhiZjFmZmE0OWI4MWNmOTk0M2E5Li4yMWZkOTg1YzI1MjRmNWEzMTQxMzQ4OWY2NjMxNjkxYTFj
NTBhM2M2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9s
bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmNw
cApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcm9s
bENvbnRyb2xsZXIuaCIKIAorI2luY2x1ZGUgIktleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuaCIK
ICNpbmNsdWRlICJMYXlvdXRTaXplLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtV2hlZWxFdmVudC5oIgpAQCAtNDMsMTUgKzQ0LDE2IEBAIFNjcm9sbENvbnRyb2xs
ZXI6OlNjcm9sbENvbnRyb2xsZXIoU2Nyb2xsQ29udHJvbGxlckNsaWVudCYgY2xpZW50KQogCiB2
b2lkIFNjcm9sbENvbnRyb2xsZXI6OmFuaW1hdGlvbkNhbGxiYWNrKE1vbm90b25pY1RpbWUgY3Vy
cmVudFRpbWUpCiB7Ci0gICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGluZywgc3RyZWFtIDw8ICJT
Y3JvbGxDb250cm9sbGVyICIgPDwgdGhpcyA8PCAiIGFuaW1hdGlvbkNhbGxiYWNrOiBpc0FuaW1h
dGluZ1J1YmJlckJhbmQgIiA8PCBtX2lzQW5pbWF0aW5nUnViYmVyQmFuZCA8PCAiIGlzQW5pbWF0
aW5nU2Nyb2xsU25hcCAiIDw8IG1faXNBbmltYXRpbmdTY3JvbGxTbmFwKTsKKyAgICBMT0dfV0lU
SF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgIlNjcm9sbENvbnRyb2xsZXIgIiA8PCB0aGlz
IDw8ICIgYW5pbWF0aW9uQ2FsbGJhY2s6IGlzQW5pbWF0aW5nUnViYmVyQmFuZCAiIDw8IG1faXNB
bmltYXRpbmdSdWJiZXJCYW5kIDw8ICIgaXNBbmltYXRpbmdTY3JvbGxTbmFwICIgPDwgbV9pc0Fu
aW1hdGluZ1Njcm9sbFNuYXAgPDwgImlzQW5pbWF0aW5nS2V5Ym9hcmRTY3JvbGxpbmciIDw8IG1f
aXNBbmltYXRpbmdLZXlib2FyZFNjcm9sbGluZyk7CiAKICAgICB1cGRhdGVTY3JvbGxTbmFwQW5p
bWF0aW5nU3RhdGUoY3VycmVudFRpbWUpOwogICAgIHVwZGF0ZVJ1YmJlckJhbmRBbmltYXRpbmdT
dGF0ZShjdXJyZW50VGltZSk7CisgICAgdXBkYXRlS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRpbmdT
dGF0ZShjdXJyZW50VGltZSk7CiB9CiAKIHZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c3RhcnRPclN0
b3BBbmltYXRpb25DYWxsYmFja3MoKQogewotICAgIGJvb2wgbmVlZHNDYWxsYmFja3MgPSBtX2lz
QW5pbWF0aW5nUnViYmVyQmFuZCB8fCBtX2lzQW5pbWF0aW5nU2Nyb2xsU25hcDsKKyAgICBib29s
IG5lZWRzQ2FsbGJhY2tzID0gbV9pc0FuaW1hdGluZ1J1YmJlckJhbmQgfHwgbV9pc0FuaW1hdGlu
Z1Njcm9sbFNuYXAgfHwgbV9pc0FuaW1hdGluZ0tleWJvYXJkU2Nyb2xsaW5nOwogICAgIGlmIChu
ZWVkc0NhbGxiYWNrcyA9PSBtX2lzUnVubmluZ0FuaW1hdGluZ0NhbGxiYWNrKQogICAgICAgICBy
ZXR1cm47CiAKQEAgLTY1LDYgKzY3LDE2IEBAIHZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c3RhcnRP
clN0b3BBbmltYXRpb25DYWxsYmFja3MoKQogICAgIG1faXNSdW5uaW5nQW5pbWF0aW5nQ2FsbGJh
Y2sgPSBmYWxzZTsKIH0KIAordm9pZCBTY3JvbGxDb250cm9sbGVyOjpiZWdpbktleWJvYXJkU2Ny
b2xsaW5nKCkKK3sKKyAgICBzZXRJc0FuaW1hdGluZ0tleWJvYXJkU2Nyb2xsaW5nKHRydWUpOwor
fQorCit2b2lkIFNjcm9sbENvbnRyb2xsZXI6OnN0b3BLZXlib2FyZFNjcm9sbGluZygpCit7Cisg
ICAgc2V0SXNBbmltYXRpbmdLZXlib2FyZFNjcm9sbGluZyhmYWxzZSk7Cit9CisKIHZvaWQgU2Ny
b2xsQ29udHJvbGxlcjo6c2V0SXNBbmltYXRpbmdSdWJiZXJCYW5kKGJvb2wgaXNBbmltYXRpbmdS
dWJiZXJCYW5kKQogewogICAgIGlmIChpc0FuaW1hdGluZ1J1YmJlckJhbmQgPT0gbV9pc0FuaW1h
dGluZ1J1YmJlckJhbmQpCkBAIC04Myw2ICs5NSwxNSBAQCB2b2lkIFNjcm9sbENvbnRyb2xsZXI6
OnNldElzQW5pbWF0aW5nU2Nyb2xsU25hcChib29sIGlzQW5pbWF0aW5nU2Nyb2xsU25hcCkKICAg
ICBzdGFydE9yU3RvcEFuaW1hdGlvbkNhbGxiYWNrcygpOwogfQogCit2b2lkIFNjcm9sbENvbnRy
b2xsZXI6OnNldElzQW5pbWF0aW5nS2V5Ym9hcmRTY3JvbGxpbmcoYm9vbCBpc0FuaW1hdGluZ0tl
eWJvYXJkU2Nyb2xsaW5nKQoreworICAgIGlmIChpc0FuaW1hdGluZ0tleWJvYXJkU2Nyb2xsaW5n
ID09IG1faXNBbmltYXRpbmdLZXlib2FyZFNjcm9sbGluZykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9pc0FuaW1hdGluZ0tleWJvYXJkU2Nyb2xsaW5nID0gaXNBbmltYXRpbmdLZXlib2FyZFNj
cm9sbGluZzsKKyAgICBzdGFydE9yU3RvcEFuaW1hdGlvbkNhbGxiYWNrcygpOworfQorCiBib29s
IFNjcm9sbENvbnRyb2xsZXI6OnVzZXNTY3JvbGxTbmFwKCkgY29uc3QKIHsKICAgICByZXR1cm4g
ISFtX3Njcm9sbFNuYXBTdGF0ZTsKQEAgLTE5NSw2ICsyMTYsMTUgQEAgdm9pZCBTY3JvbGxDb250
cm9sbGVyOjpyZXNuYXBBZnRlckxheW91dCgpCiAgICAgICAgIHNldE5lYXJlc3RTY3JvbGxTbmFw
SW5kZXhGb3JBeGlzQW5kT2Zmc2V0KFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwsIG9mZnNldC55
KCkpOwogCiB9CisKK3ZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6dXBkYXRlS2V5Ym9hcmRTY3JvbGxp
bmdBbmltYXRpbmdTdGF0ZShNb25vdG9uaWNUaW1lIGN1cnJlbnRUaW1lKQoreworICAgIGlmICgh
bV9pc0FuaW1hdGluZ0tleWJvYXJkU2Nyb2xsaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X2NsaWVudC5rZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yKCktPnVwZGF0ZUtleWJvYXJkU2Nyb2xs
UG9zaXRpb24oY3VycmVudFRpbWUpOworfQorCiAvLyBDdXJyZW50bHksIG9ubHkgTWFjIHN1cHBv
cnRzIG1vbWVudHVtIHNyb2xsaW5nLWJhc2VkIHNjcm9sbHNuYXBwaW5nIGFuZCBydWJiZXIgYmFu
ZGluZwogLy8gc28gYWxsIG9mIHRoZXNlIG1ldGhvZHMgYXJlIGEgbm9vcCBvbiBub24tTWFjIHBs
YXRmb3Jtcy4KICNpZiAhUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsQ29udHJvbGxlci5oCmluZGV4IDJiNDc1MWVlYThlNDNlNWQ1ZDViMjlmOTMzNDExN2VkZmNi
N2NkOGUuLjg4OGE0MTI4NDFlMzgyNWEyMDQ1ZWY3ZGU2MjM0YjY4ODViYzdlOWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbENvbnRyb2xsZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmgKQEAgLTM4LDYgKzM4LDcgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9y
OwogY2xhc3MgTGF5b3V0U2l6ZTsKIGNsYXNzIFBsYXRmb3JtV2hlZWxFdmVudDsKIGNsYXNzIFNj
cm9sbENvbnRyb2xsZXI7CkBAIC03Miw2ICs3Myw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgc3RhcnRBbmltYXRpb25DYWxsYmFjayhTY3JvbGxDb250cm9sbGVyJikgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBzdG9wQW5pbWF0aW9uQ2FsbGJhY2soU2Nyb2xsQ29udHJvbGxlciYpID0gMDsK
IAorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVLZXlib2FyZFNjcm9sbFBvc2l0aW9uKE1vbm90b25p
Y1RpbWUpIHsgfQorICAgIHZpcnR1YWwgS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvciAqa2V5Ym9h
cmRTY3JvbGxpbmdBbmltYXRvcigpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KKwogI2lmIEVO
QUJMRShSVUJCRVJfQkFORElORykKICAgICB2aXJ0dWFsIGJvb2wgYWxsb3dzSG9yaXpvbnRhbFN0
cmV0Y2hpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgY29uc3QgPSAwOwogICAgIHZpcnR1
YWwgYm9vbCBhbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50
JikgY29uc3QgPSAwOwpAQCAtMTIxLDYgKzEyNSw5IEBAIHB1YmxpYzoKICAgICBib29sIHVzZXNT
Y3JvbGxTbmFwKCkgY29uc3Q7CiAgICAgdm9pZCBzdG9wQWxsVGltZXJzKCk7CiAgICAgdm9pZCBz
Y3JvbGxQb3NpdGlvbkNoYW5nZWQoKTsKKworICAgIHZvaWQgYmVnaW5LZXlib2FyZFNjcm9sbGlu
ZygpOworICAgIHZvaWQgc3RvcEtleWJvYXJkU2Nyb2xsaW5nKCk7CiAgICAgCiAgICAgLy8gU2hv
dWxkIGJlIGNhbGxlZCBwZXJpb2RpY2FsbHkgYnkgdGhlIGNsaWVudC4gU3RhcnRlZCBieSBzdGFy
dEFuaW1hdGlvbkNhbGxiYWNrKCksIHN0b3BwZWQgYnkgc3RvcEFuaW1hdGlvbkNhbGxiYWNrKCku
CiAgICAgdm9pZCBhbmltYXRpb25DYWxsYmFjayhNb25vdG9uaWNUaW1lKTsKQEAgLTE2Myw5ICsx
NzAsMTEgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdXBkYXRlU2Nyb2xsU25hcEFuaW1hdGluZ1N0
YXRlKE1vbm90b25pY1RpbWUpOwogICAgIHZvaWQgdXBkYXRlUnViYmVyQmFuZEFuaW1hdGluZ1N0
YXRlKE1vbm90b25pY1RpbWUpOwotICAgIAorICAgIHZvaWQgdXBkYXRlS2V5Ym9hcmRTY3JvbGxp
bmdBbmltYXRpbmdTdGF0ZShNb25vdG9uaWNUaW1lKTsKKwogICAgIHZvaWQgc2V0SXNBbmltYXRp
bmdSdWJiZXJCYW5kKGJvb2wpOwogICAgIHZvaWQgc2V0SXNBbmltYXRpbmdTY3JvbGxTbmFwKGJv
b2wpOworICAgIHZvaWQgc2V0SXNBbmltYXRpbmdLZXlib2FyZFNjcm9sbGluZyhib29sKTsKIAog
I2lmIFBMQVRGT1JNKE1BQykKICAgICB2b2lkIHN0YXJ0U2Nyb2xsU25hcEFuaW1hdGlvbigpOwpA
QCAtMTk5LDYgKzIwOCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzUnVubmluZ0FuaW1hdGlu
Z0NhbGxiYWNrIHsgZmFsc2UgfTsKICAgICBib29sIG1faXNBbmltYXRpbmdSdWJiZXJCYW5kIHsg
ZmFsc2UgfTsKICAgICBib29sIG1faXNBbmltYXRpbmdTY3JvbGxTbmFwIHsgZmFsc2UgfTsKKyAg
ICBib29sIG1faXNBbmltYXRpbmdLZXlib2FyZFNjcm9sbGluZyB7IGZhbHNlIH07CiAKICNpZiBQ
TEFURk9STShNQUMpCiAgICAgV2FsbFRpbWUgbV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXA7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434649</attachid>
            <date>2021-07-30 12:03:35 -0700</date>
            <delta_ts>2021-08-30 21:20:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228009-20210730150334.patch</filename>
            <type>text/plain</type>
            <size>35795</size>
            <attacher name="Dana Estra">dana.estra</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwNDgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmEzZmM2N2NlYTNhMGM4
Y2JlZTc4Zjg1ZDkzNWUxMjU3NjkwYWMwZC4uZjc3ZDNmOWFlMGI4YmNkNmVjY2YxYzNkM2ZkYjc0
ZDczYzBkZGI4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDIxLTA3LTIzICBEYW5h
IEVzdHJhICA8ZGVzdHJhQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQga2V5LWRyaXZlbiBzbW9v
dGggc2Nyb2xsaW5nIHRvIG1hY09TCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjgwMDkKKworICAgICAgICBSZXZpZXdlZCBieSBUaW0gSG9ydG9uLgor
CisgICAgICAgIENhdXNlIGtleWJvYXJkIHNjcm9sbCBldmVudCB0byB0cmlnZ2VyIHN0YXJ0IG9m
IHNtb290aCBzY3JvbGwgYW5pbWF0aW9uLCB1c2luZyBzYW1lIHBoeXNpY3MgaW1wbGVtZW50YXRp
b24gYXMgaU9TIHNtb290aCBzY3JvbGxpbmcuCisKKyAgICAgICAgTm8gdGVzdHMgeWV0LgorCisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRv
bS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmRlZmF1bHRFdmVudEhhbmRsZXIp
OgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50SGFuZGxlcjo6ZGVmYXVsdEtleWJvYXJkRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50SGFuZGxlcjo6c2Nyb2xsRGlzdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6RXZl
bnRIYW5kbGVyOjpzdG9wS2V5Ym9hcmRTY3JvbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RXZl
bnRIYW5kbGVyOjpzdGFydEtleWJvYXJkU2Nyb2xsaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9L
ZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
S2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6c3Rh
cnRBbmltYXRpb25DYWxsYmFjayk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3Iu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OmFuaW1hdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OnN0YXJ0T3JTdG9wQW5pbWF0aW9uQ2FsbGJhY2tzKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OmJlZ2luS2V5Ym9hcmRTY3JvbGxp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6c3RvcEtleWJvYXJkU2Ny
b2xsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OnNldElzQW5pbWF0
aW5nS2V5Ym9hcmRTY3JvbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxl
cjo6dXBkYXRlS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRpbmdTdGF0ZSk6CisgICAgICAgICogcGxh
dGZvcm0vU2Nyb2xsQ29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJv
bGxlckNsaWVudDo6dXBkYXRlS2V5Ym9hcmRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIAogMjAy
MS0wNy0zMCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIENsaWNr
aW5nIGFuIEhUTUxMaW5rRWxlbWVudCBzaG91bGQgbm90IHRyaWdnZXIgYSBuYXZpZ2F0aW9uCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0CmluZGV4IDU0NDQzZmI4OGE0ZGNhYmNiYjM2ZTUxZjVjMjc3ZTRmZmNjZjVhNjIu
Ljc2MWZkY2U3YjI4NmM5NGRmODA3YmE1NjBlNWFiYzUyZjIzNGI4NzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
CkBAIC0xNzQ1LDYgKzE3NDUsNyBAQCBwbGF0Zm9ybS9GaWxlSGFuZGxlLmNwcAogcGxhdGZvcm0v
RmlsZU1vbml0b3IuY3BwCiBwbGF0Zm9ybS9GaWxlU3RyZWFtLmNwcAogcGxhdGZvcm0vRnJhbWVS
YXRlTW9uaXRvci5jcHAKK3BsYXRmb3JtL0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuY3BwCiBw
bGF0Zm9ybS9MYXlvdXRVbml0LmNwcAogcGxhdGZvcm0vTGVnYWN5U2NoZW1lUmVnaXN0cnkuY3Bw
CiBwbGF0Zm9ybS9MZW5ndGguY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZTBiZGJiNmYwZWZjNTVhNDgzM2FhOWRlMWJlMjU3
OTBhNGZkY2I0Yi4uMjI0ZjIwYTc2ZmNkZTQ4ODRjMzI0OTM5NmJiNjA4OGY2YTVmNzMxMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtNjczLDYgKzY3Myw3IEBACiAJCTFGODc1NkIyMUUyMkMzMzUwMDQyQzQwRCAvKiBXZWJTUUxp
dGVEYXRhYmFzZVRyYWNrZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFGODc1NkIxMUUyMkJFRUYwMDQyQzQwRCAvKiBXZWJTUUxpdGVEYXRh
YmFzZVRyYWNrZXJDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkxRkFGQkYxOTE1QTVGQTc0MDAwODNBMjAgLyogVVRJVXRpbGl0aWVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxRkFGQkYxNjE1
QTVGQTUyMDAwODNBMjAgLyogVVRJVXRpbGl0aWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUZDNDBGQkExNjU1Q0NCOTAwNDBGMjlFIC8qIFN1
YmltYWdlQ2FjaGVXaXRoVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFGQzQwRkI3MTY1NUM1OTEwMDQwRjI5RSAvKiBTdWJpbWFnZUNhY2hlV2l0
aFRpbWVyLmggKi87IH07CisJCTFGRDk5MkY4MjZBQTI0RjkwMDg4RTU5NiAvKiBLZXlib2FyZFNj
cm9sbGluZ0FuaW1hdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxRkQ5OTJGNjI2QUEyNEY4MDA4OEU1OTYgLyogS2V5Ym9hcmRTY3JvbGxpbmdBbmlt
YXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTIwRDYyOTI3MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIwRDYyOTI1MTI1
MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCAqLzsgfTsKIAkJMjI1
QTE2QjUwRDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2ZW50UmVnaW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMjVBMTZCMzBENUMxMUU5MDAwOTAyOTUg
LyogV2ViRXZlbnRSZWdpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkyMjhDMjg0NTEwRDgyNTAwMDA5RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMjhDMjg0
NDEwRDgyNTAwMDA5RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTcwMTMsNiArNzAxNCw4IEBACiAJCTFG
QUZCRjE3MTVBNUZBNTIwMDA4M0EyMCAvKiBVVElVdGlsaXRpZXMubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBVVElVdGlsaXRpZXMubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTFGQzQwRkI3MTY1NUM1OTEwMDQwRjI5RSAvKiBTdWJpbWFnZUNhY2hl
V2l0aFRpbWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN1YmltYWdlQ2Fj
aGVXaXRoVGltZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUZDNDBGQjgxNjU1
QzU5MTAwNDBGMjlFIC8qIFN1YmltYWdlQ2FjaGVXaXRoVGltZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFGRDk5MkY2MjZBQTI0RjgwMDg4RTU5NiAvKiBLZXli
b2FyZFNjcm9sbGluZ0FuaW1hdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMUZEOTkyRjkyNkFBMjU0RDAwODhFNTk2IC8qIEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3Iu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gS2V5Ym9hcmRTY3JvbGxp
bmdBbmltYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTIwRDYyOTI0MTI1
MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjBENjI5MjUxMjUzNjkwQjAwMDgxNTQzIC8q
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMjI1QTE2QjMwRDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2ZW50UmVnaW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkV2ZW50UmVnaW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yNzU1Miw2ICsyNzU1NSw4IEBACiAJCQkJNDE5MEYzQTMyNDlE
MTUyODAwNTMxQzU3IC8qIEZyYW1lUmF0ZU1vbml0b3IuaCAqLywKIAkJCQlBODc0OEJERjEyQ0JG
MkRDMDAxRkJBNDEgLyogSGFzaFRvb2xzLmggKi8sCiAJCQkJQkMzQkMyOUIwRTkxQUIwRjAwODM1
NTg4IC8qIEhvc3RXaW5kb3cuaCAqLywKKwkJCQkxRkQ5OTJGOTI2QUEyNTREMDA4OEU1OTYgLyog
S2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5jcHAgKi8sCisJCQkJMUZEOTkyRjYyNkFBMjRGODAw
ODhFNTk2IC8qIEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuaCAqLywKIAkJCQkxQUUwMEQ1NzE4
MkRBQzhEMDAwODdERDcgLyogS2V5ZWRDb2RpbmcuaCAqLywKIAkJCQlFMTVGRjdENDE4Qzk1NTM4
MDBGRTRDODcgLyogS2V5cHJlc3NDb21tYW5kLmggKi8sCiAJCQkJQTNENDJBODQxRjMzQkEzNjAw
QTY0QjYyIC8qIExheW91dFVuaXQuY3BwICovLApAQCAtMzMzMzMsNiArMzMzMzgsNyBAQAogCQkJ
CTgzQjc0RUY2MUYzRTBCRjIwMDk5NkJDNyAvKiBLZWVwYWxpdmVSZXF1ZXN0VHJhY2tlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODUwMzFCNDQwQTQ0RUZDNzAwRjk5MkUwIC8qIEtleWJvYXJkRXZl
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFGMDIwQUVGMjY3ODBGQ0UwMDAwODA5QSAvKiBLZXli
b2FyZFNjcm9sbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUZEOTkyRjgyNkFBMjRGOTAwODhFNTk2
IC8qIEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRTAw
RDU5MTgyREFDOEQwMDA4N0RENyAvKiBLZXllZENvZGluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTE3QTYzQzUxQjc0MzE4RjAwRTdEQ0RDIC8qIEtleWVkRGVjb2RlckNGLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MTdBNjNDNjFCNzQzMTkyMDBFN0RDREMgLyogS2V5ZWRFbmNvZGVyQ0YuaCBpbiBI
ZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4IGUzMmI0YmQ0Y2Q0ZjgyZGIyMWE1OTQ3YTU4
MjdmNWM2YjViZWI4ZDcuLjY5MjRjZjM2YTEyMjlhMzQzNWQ3OGUwYjdkNGM1ZDNmNjNhNmZlMTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5jcHAKQEAgLTI0MzIsNyArMjQzMiw3IEBAIHZvaWQgTm9kZTo6ZGVmYXVs
dEV2ZW50SGFuZGxlcihFdmVudCYgZXZlbnQpCiAgICAgaWYgKGV2ZW50LnRhcmdldCgpICE9IHRo
aXMpCiAgICAgICAgIHJldHVybjsKICAgICBjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUgPSBl
dmVudC50eXBlKCk7Ci0gICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2
ZW50IHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkua2V5cHJlc3NFdmVudCkgeworICAgIGlm
IChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCB8fCBldmVudFR5cGUgPT0g
ZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5r
ZXl1cEV2ZW50KSB7CiAgICAgICAgIGlmIChpczxLZXlib2FyZEV2ZW50PihldmVudCkpIHsKICAg
ICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLmZyYW1lKCkpCiAgICAgICAg
ICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLmRlZmF1bHRLZXlib2FyZEV2ZW50SGFuZGxl
cihkb3duY2FzdDxLZXlib2FyZEV2ZW50PihldmVudCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhh
bmRsZXIuY3BwCmluZGV4IGVhZWYwYjU1NWFmYjQ5NDlmNTQ5OTFkYzQ3YzNkZTRlMjNiNTVhNmYu
LmRiODRiYzgxN2JkNjg3MjcwZjJjOTRkNTNmNmFlOTU5NWNkZjIzMTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTY4LDcgKzY4LDcgQEAKICNpbmNsdWRlICJJbWFnZU92
ZXJsYXlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgi
CiAjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgotI2luY2x1ZGUgIktleWJvYXJkU2Nyb2xsLmgi
CisjaW5jbHVkZSAiS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5oIgogI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudFdpdGhI
aXRUZXN0UmVzdWx0cy5oIgpAQCAtMzgwMyw2ICszODAzLDEyIEBAIHZvaWQgRXZlbnRIYW5kbGVy
OjpkZWZhdWx0S2V5Ym9hcmRFdmVudEhhbmRsZXIoS2V5Ym9hcmRFdmVudCYgZXZlbnQpCiAgICAg
ICAgIGlmIChldmVudC5jaGFyQ29kZSgpID09ICcgJykKICAgICAgICAgICAgIGRlZmF1bHRTcGFj
ZUV2ZW50SGFuZGxlcihldmVudCk7CiAgICAgfQorICAgIGlmIChldmVudC50eXBlKCkgPT0gZXZl
bnROYW1lcygpLmtleXVwRXZlbnQpIHsKKyAgICAgICAgbV9mcmFtZS5lZGl0b3IoKS5oYW5kbGVL
ZXlib2FyZEV2ZW50KGV2ZW50KTsKKyAgICAgICAgaWYgKGV2ZW50LmRlZmF1bHRIYW5kbGVkKCkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHN0b3BLZXlib2FyZFNjcm9sbGluZygpOwor
ICAgIH0KIH0KIAogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCkBAIC00MTk3LDcgKzQyMDMsNyBA
QCB2b2lkIEV2ZW50SGFuZGxlcjo6ZGVmYXVsdFNwYWNlRXZlbnRIYW5kbGVyKEtleWJvYXJkRXZl
bnQmIGV2ZW50KQogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuOwogCi0gICAgYm9vbCBk
ZWZhdWx0SGFuZGxlZCA9IG1fZnJhbWUuc2V0dGluZ3MoKS5ldmVudEhhbmRsZXJEcml2ZW5TbW9v
dGhLZXlib2FyZFNjcm9sbGluZ0VuYWJsZWQoKSA/IGhhbmRsZUtleWJvYXJkU2Nyb2xsaW5nKGV2
ZW50KSA6IHZpZXctPmxvZ2ljYWxTY3JvbGwoZGlyZWN0aW9uLCBTY3JvbGxCeVBhZ2UpOworICAg
IGJvb2wgZGVmYXVsdEhhbmRsZWQgPSBtX2ZyYW1lLnNldHRpbmdzKCkuZXZlbnRIYW5kbGVyRHJp
dmVuU21vb3RoS2V5Ym9hcmRTY3JvbGxpbmdFbmFibGVkKCkgPyBzdGFydEtleWJvYXJkU2Nyb2xs
aW5nKGV2ZW50KSA6IHZpZXctPmxvZ2ljYWxTY3JvbGwoZGlyZWN0aW9uLCBTY3JvbGxCeVBhZ2Up
OwogICAgIGlmIChkZWZhdWx0SGFuZGxlZCkKICAgICAgICAgZXZlbnQuc2V0RGVmYXVsdEhhbmRs
ZWQoKTsKIH0KQEAgLTQyMzcsNyArNDI0Myw3IEBAIGZsb2F0IEV2ZW50SGFuZGxlcjo6c2Nyb2xs
RGlzdGFuY2UoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkKICAg
ICAgICAgICAgIHJldHVybiBtX2ZyYW1lLnZpZXcoKS0+dmVydGljYWxTY3JvbGxiYXIoKTsKICAg
ICAgICAgcmV0dXJuIG1fZnJhbWUudmlldygpLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CiAgICAg
fSgpOwotICAgIAorCiAgICAgc3dpdGNoIChncmFudWxhcml0eSkgewogICAgIGNhc2UgU2Nyb2xs
R3JhbnVsYXJpdHk6OlNjcm9sbEJ5TGluZToKICAgICAgICAgcmV0dXJuIHNjcm9sbGJhci0+bGlu
ZVN0ZXAoKTsKQEAgLTQyNTIsNjIgKzQyNTgsMjggQEAgZmxvYXQgRXZlbnRIYW5kbGVyOjpzY3Jv
bGxEaXN0YW5jZShTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eQog
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLWJvb2wgRXZlbnRIYW5kbGVy
OjpoYW5kbGVLZXlib2FyZFNjcm9sbGluZyhLZXlib2FyZEV2ZW50JiBldmVudCkKK3ZvaWQgRXZl
bnRIYW5kbGVyOjpzdG9wS2V5Ym9hcmRTY3JvbGxpbmcoKQogewogICAgIFJlZiBwcm90ZWN0ZWRG
cmFtZSA9IG1fZnJhbWU7Ci0gICAgLy8gRklYTUUgKGJ1ZyAyMjc0NTkpOiBUaGlzIGxvZ2ljIGRv
ZXMgbm90IGFjY291bnQgZm9yIHdyaXRpbmctbW9kZS4KLQotICAgIGVudW0gY2xhc3MgS2V5IDog
dWludDhfdCB7IExlZnRBcnJvdywgUmlnaHRBcnJvdywgVXBBcnJvdywgRG93bkFycm93LCBTcGFj
ZSB9OwotCi0gICAgS2V5IGtleTsKLSAgICBpZiAoZXZlbnQua2V5SWRlbnRpZmllcigpID09ICJM
ZWZ0IikKLSAgICAgICAga2V5ID0gS2V5OjpMZWZ0QXJyb3c7Ci0gICAgZWxzZSBpZiAoZXZlbnQu
a2V5SWRlbnRpZmllcigpID09ICJSaWdodCIpCi0gICAgICAgIGtleSA9IEtleTo6UmlnaHRBcnJv
dzsKLSAgICBlbHNlIGlmIChldmVudC5rZXlJZGVudGlmaWVyKCkgPT0gIlVwIikKLSAgICAgICAg
a2V5ID0gS2V5OjpVcEFycm93OwotICAgIGVsc2UgaWYgKGV2ZW50LmtleUlkZW50aWZpZXIoKSA9
PSAiRG93biIpCi0gICAgICAgIGtleSA9IEtleTo6RG93bkFycm93OwotICAgIGVsc2UgaWYgKGV2
ZW50LmNoYXJDb2RlKCkgPT0gJyAnKQotICAgICAgICBrZXkgPSBLZXk6OlNwYWNlOwotICAgIGVs
c2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUu
dmlldygpOwogCi0gICAgYXV0byBncmFudWxhcml0eSA9IFsmXSB7Ci0gICAgICAgIHN3aXRjaCAo
a2V5KSB7Ci0gICAgICAgIGNhc2UgS2V5OjpMZWZ0QXJyb3c6Ci0gICAgICAgIGNhc2UgS2V5OjpS
aWdodEFycm93OgotICAgICAgICAgICAgcmV0dXJuIGV2ZW50LmFsdEtleSgpID8gU2Nyb2xsR3Jh
bnVsYXJpdHk6OlNjcm9sbEJ5UGFnZSA6IFNjcm9sbEdyYW51bGFyaXR5OjpTY3JvbGxCeUxpbmU7
Ci0gICAgICAgIGNhc2UgS2V5OjpVcEFycm93OgotICAgICAgICBjYXNlIEtleTo6RG93bkFycm93
OgotICAgICAgICAgICAgaWYgKGV2ZW50Lm1ldGFLZXkoKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gU2Nyb2xsR3JhbnVsYXJpdHk6OlNjcm9sbEJ5RG9jdW1lbnQ7Ci0gICAgICAgICAgICBpZiAo
ZXZlbnQuYWx0S2V5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFNjcm9sbEdyYW51bGFyaXR5
OjpTY3JvbGxCeVBhZ2U7Ci0gICAgICAgICAgICByZXR1cm4gU2Nyb2xsR3JhbnVsYXJpdHk6OlNj
cm9sbEJ5TGluZTsKLSAgICAgICAgY2FzZSBLZXk6OlNwYWNlOgotICAgICAgICAgICAgcmV0dXJu
IFNjcm9sbEdyYW51bGFyaXR5OjpTY3JvbGxCeVBhZ2U7Ci0gICAgICAgIH07Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfSgpOworICAgIEtleWJvYXJkU2Nyb2xs
aW5nQW5pbWF0b3IqIGFuaW1hdG9yID0gdmlldy0+c2Nyb2xsQW5pbWF0b3IoKS5rZXlib2FyZFNj
cm9sbGluZ0FuaW1hdG9yKCk7CiAKLSAgICBhdXRvIGRpcmVjdGlvbiA9IFsmXSB7Ci0gICAgICAg
IHN3aXRjaCAoa2V5KSB7Ci0gICAgICAgIGNhc2UgS2V5OjpMZWZ0QXJyb3c6Ci0gICAgICAgICAg
ICByZXR1cm4gU2Nyb2xsRGlyZWN0aW9uOjpTY3JvbGxMZWZ0OwotICAgICAgICBjYXNlIEtleTo6
UmlnaHRBcnJvdzoKLSAgICAgICAgICAgIHJldHVybiBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbFJp
Z2h0OwotICAgICAgICBjYXNlIEtleTo6VXBBcnJvdzoKLSAgICAgICAgICAgIHJldHVybiBTY3Jv
bGxEaXJlY3Rpb246OlNjcm9sbFVwOwotICAgICAgICBjYXNlIEtleTo6RG93bkFycm93OgotICAg
ICAgICAgICAgcmV0dXJuIFNjcm9sbERpcmVjdGlvbjo6U2Nyb2xsRG93bjsKLSAgICAgICAgY2Fz
ZSBLZXk6OlNwYWNlOgotICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnNoaWZ0S2V5KCkgPyBTY3Jv
bGxEaXJlY3Rpb246OlNjcm9sbFVwIDogU2Nyb2xsRGlyZWN0aW9uOjpTY3JvbGxEb3duOwotICAg
ICAgICB9Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfSgpOwor
ICAgIGlmIChhbmltYXRvcikKKyAgICAgICAgYW5pbWF0b3ItPmhhbmRsZUtleVVwRXZlbnQoKTsK
K30KKworYm9vbCBFdmVudEhhbmRsZXI6OnN0YXJ0S2V5Ym9hcmRTY3JvbGxpbmcoS2V5Ym9hcmRF
dmVudCYgZXZlbnQpCit7CisgICAgUmVmIHByb3RlY3RlZEZyYW1lID0gbV9mcmFtZTsKKyAgICBG
cmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLnZpZXcoKTsKKworICAgIEtleWJvYXJkU2Nyb2xsaW5n
QW5pbWF0b3IqIGFuaW1hdG9yID0gdmlldy0+c2Nyb2xsQW5pbWF0b3IoKS5rZXlib2FyZFNjcm9s
bGluZ0FuaW1hdG9yKCk7CiAKLSAgICByZXR1cm4gRXZlbnRIYW5kbGVyOjpzY3JvbGxSZWN1cnNp
dmVseShkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBudWxscHRyKTsKKyAgICBpZiAoYW5pbWF0b3Ip
CisgICAgICAgIHJldHVybiBhbmltYXRvci0+YmVnaW5LZXlib2FyZFNjcm9sbEdlc3R1cmUoZXZl
bnQpOworCisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIEV2ZW50SGFuZGxlcjo6ZGVmYXVs
dEFycm93RXZlbnRIYW5kbGVyKEZvY3VzRGlyZWN0aW9uIGZvY3VzRGlyZWN0aW9uLCBLZXlib2Fy
ZEV2ZW50JiBldmVudCkKQEAgLTQzMTYsNyArNDI4OCw3IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpk
ZWZhdWx0QXJyb3dFdmVudEhhbmRsZXIoRm9jdXNEaXJlY3Rpb24gZm9jdXNEaXJlY3Rpb24sIEtl
eWJvCiAKICAgICBpZiAoIWlzU3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKCZtX2ZyYW1lKSkgewog
ICAgICAgICBpZiAobV9mcmFtZS5zZXR0aW5ncygpLmV2ZW50SGFuZGxlckRyaXZlblNtb290aEtl
eWJvYXJkU2Nyb2xsaW5nRW5hYmxlZCgpKQotICAgICAgICAgICAgaGFuZGxlS2V5Ym9hcmRTY3Jv
bGxpbmcoZXZlbnQpOworICAgICAgICAgICAgc3RhcnRLZXlib2FyZFNjcm9sbGluZyhldmVudCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCmlu
ZGV4IGQ1Y2FhNjViMWZlMjY1MGMwMmE5MGUxMzJiMjgzOTgxNTI5MDExZTUuLmRmOWQ2YzcwNzQy
MDZmZjgzMmZhNjhkOTMzNzEyODNjYzhlYzNiNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRs
ZXIuaApAQCAtMzc3LDcgKzM3Nyw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBoYW5kbGVNb3VzZVBy
ZXNzRXZlbnRUcmlwbGVDbGljayhjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJik7
CiAKICAgICBmbG9hdCBzY3JvbGxEaXN0YW5jZShTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51
bGFyaXR5KTsKLSAgICBib29sIGhhbmRsZUtleWJvYXJkU2Nyb2xsaW5nKEtleWJvYXJkRXZlbnQm
KTsKKyAgICBib29sIHN0YXJ0S2V5Ym9hcmRTY3JvbGxpbmcoS2V5Ym9hcmRFdmVudCYpOworICAg
IHZvaWQgc3RvcEtleWJvYXJkU2Nyb2xsaW5nKCk7CiAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JU
KQogICAgIGJvb2wgaGFuZGxlTW91c2VEcmFnZ2VkRXZlbnQoY29uc3QgTW91c2VFdmVudFdpdGhI
aXRUZXN0UmVzdWx0cyYsIENoZWNrRHJhZ0h5c3RlcmVzaXMgPSBTaG91bGRDaGVja0RyYWdIeXN0
ZXJlc2lzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tleWJvYXJkU2Ny
b2xsaW5nQW5pbWF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS2V5Ym9hcmRTY3Jv
bGxpbmdBbmltYXRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWE4NmJiZWI4MzY5NDZiNDMxODUzZjEyYjI3
YmQzZTY5ODkyYWVkYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuY3BwCkBAIC0wLDAgKzEsMzA4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIktleWJvYXJkU2Nyb2xsaW5nQW5p
bWF0b3IuaCIKKworI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJTY3JvbGxUeXBl
cy5oIgorI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCisjaW5jbHVkZSAiV3JpdGluZ01vZGUu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yOjpL
ZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yKFNjcm9sbEFuaW1hdG9yJiBzY3JvbGxBbmltYXRvciwg
U2Nyb2xsQ29udHJvbGxlciYgc2Nyb2xsQ29udHJvbGxlcikKKyAgICA6IG1fc2Nyb2xsQW5pbWF0
b3Ioc2Nyb2xsQW5pbWF0b3IpCisgICAgLCBtX3Njcm9sbENvbnRyb2xsZXIoc2Nyb2xsQ29udHJv
bGxlcikKK3sKK30KKworUmVjdEVkZ2VzPGJvb2w+IEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3I6
OnNjcm9sbGFibGVEaXJlY3Rpb25zRnJvbU9mZnNldChGbG9hdFBvaW50IG9mZnNldCkgY29uc3QK
K3sKKyAgICBhdXRvIG1pbmltdW1TY3JvbGxQb3NpdGlvbiA9IG1fc2Nyb2xsQW5pbWF0b3Iuc2Ny
b2xsYWJsZUFyZWEoKS5taW5pbXVtU2Nyb2xsUG9zaXRpb24oKTsKKyAgICBhdXRvIG1heGltdW1T
Y3JvbGxQb3NpdGlvbiA9IG1fc2Nyb2xsQW5pbWF0b3Iuc2Nyb2xsYWJsZUFyZWEoKS5tYXhpbXVt
U2Nyb2xsUG9zaXRpb24oKTsKKworICAgIFJlY3RFZGdlczxib29sPiBlZGdlczsKKworICAgIGVk
Z2VzLnNldFRvcChvZmZzZXQueSgpID4gbWluaW11bVNjcm9sbFBvc2l0aW9uLnkoKSk7CisgICAg
ZWRnZXMuc2V0Qm90dG9tKG9mZnNldC55KCkgPCBtYXhpbXVtU2Nyb2xsUG9zaXRpb24ueSgpKTsK
KyAgICBlZGdlcy5zZXRMZWZ0KG9mZnNldC54KCkgPiBtaW5pbXVtU2Nyb2xsUG9zaXRpb24ueCgp
KTsKKyAgICBlZGdlcy5zZXRSaWdodChvZmZzZXQueCgpIDwgbWF4aW11bVNjcm9sbFBvc2l0aW9u
LngoKSk7CisKKyAgICByZXR1cm4gZWRnZXM7Cit9CisKK3N0YXRpYyBCb3hTaWRlIGJveFNpZGVG
b3JEaXJlY3Rpb24oU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAgICBzd2l0Y2ggKGRp
cmVjdGlvbikgeworICAgIGNhc2UgU2Nyb2xsRGlyZWN0aW9uOjpTY3JvbGxVcDoKKyAgICAgICAg
cmV0dXJuIEJveFNpZGU6OlRvcDsKKyAgICBjYXNlIFNjcm9sbERpcmVjdGlvbjo6U2Nyb2xsRG93
bjoKKyAgICAgICAgcmV0dXJuIEJveFNpZGU6OkJvdHRvbTsKKyAgICBjYXNlIFNjcm9sbERpcmVj
dGlvbjo6U2Nyb2xsTGVmdDoKKyAgICAgICAgcmV0dXJuIEJveFNpZGU6OkxlZnQ7CisgICAgY2Fz
ZSBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbFJpZ2h0OgorICAgICAgICByZXR1cm4gQm94U2lkZTo6
UmlnaHQ7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBCb3hT
aWRlOjpUb3A7Cit9CisKK3N0YXRpYyBGbG9hdFNpemUgcGVycGVuZGljdWxhckFic29sdXRlVW5p
dFZlY3RvcihTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIHN3aXRjaCAoZGlyZWN0
aW9uKSB7CisgICAgY2FzZSBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbFVwOgorICAgIGNhc2UgU2Ny
b2xsRGlyZWN0aW9uOjpTY3JvbGxEb3duOgorICAgICAgICByZXR1cm4geyAxLCAwIH07CisgICAg
Y2FzZSBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbExlZnQ6CisgICAgY2FzZSBTY3JvbGxEaXJlY3Rp
b246OlNjcm9sbFJpZ2h0OgorICAgICAgICByZXR1cm4geyAwLCAxIH07CisgICAgfQorICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB7IH07Cit9CisKK3ZvaWQgS2V5Ym9hcmRT
Y3JvbGxpbmdBbmltYXRvcjo6dXBkYXRlS2V5Ym9hcmRTY3JvbGxQb3NpdGlvbihNb25vdG9uaWNU
aW1lIGN1cnJlbnRUaW1lKQoreworICAgIGF1dG8gZm9yY2UgPSBGbG9hdFNpemUgeyB9OworICAg
IGF1dG8gYXhlc1RvQXBwbHlTcHJpbmcgPSBGbG9hdFNpemUgeyAxLCAxIH07CisgICAgS2V5Ym9h
cmRTY3JvbGxQYXJhbWV0ZXJzIHBhcmFtcyA9IEtleWJvYXJkU2Nyb2xsUGFyYW1ldGVyczo6cGFy
YW1ldGVycygpOworCisgICAgaWYgKG1fY3VycmVudEtleWJvYXJkU2Nyb2xsKSB7CisgICAgICAg
IGF1dG8gc2Nyb2xsYWJsZURpcmVjdGlvbnMgPSBzY3JvbGxhYmxlRGlyZWN0aW9uc0Zyb21PZmZz
ZXQobV9zY3JvbGxBbmltYXRvci5jdXJyZW50UG9zaXRpb24oKSk7CisgICAgICAgIGF1dG8gZGly
ZWN0aW9uID0gbV9jdXJyZW50S2V5Ym9hcmRTY3JvbGwtPmRpcmVjdGlvbjsKKworICAgICAgICBp
ZiAoc2Nyb2xsYWJsZURpcmVjdGlvbnMuYXQoYm94U2lkZUZvckRpcmVjdGlvbihkaXJlY3Rpb24p
KSkgeworICAgICAgICAgICAgLy8gQXBwbHkgdGhlIHNjcm9sbGluZyBmb3JjZS4gT25seSBhcHBs
eSB0aGUgc3ByaW5nIGluIHRoZSBwZXJwZW5kaWN1bGFyIGF4aXMsCisgICAgICAgICAgICAvLyBv
dGhlcndpc2UgaXQgZHJhZ3MgYWdhaW5zdCB0aGUgZGlyZWN0aW9uIG9mIG1vdGlvbi4KKyAgICAg
ICAgICAgIGF4ZXNUb0FwcGx5U3ByaW5nID0gcGVycGVuZGljdWxhckFic29sdXRlVW5pdFZlY3Rv
cihkaXJlY3Rpb24pOworICAgICAgICAgICAgZm9yY2UgPSBtX2N1cnJlbnRLZXlib2FyZFNjcm9s
bC0+Zm9yY2U7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBUaGUgc2Nyb2xsIHZp
ZXcgY2Fubm90IHNjcm9sbCBpbiB0aGlzIGRpcmVjdGlvbiwgYW5kIGlzIHJ1YmJlci1iYW5kaW5n
LgorICAgICAgICAgICAgLy8gQXBwbHkgYSBjb25zdGFudCBhbmQgc2lnbmlmaWNhbnQgZm9yY2U7
IG90aGVyd2lzZSwgdGhlIGZvcmNlIGZvciBhCisgICAgICAgICAgICAvLyBzaW5nbGUtbGluZSBp
bmNyZW1lbnQgaXMgbm90IHN0cm9uZyBlbm91Z2ggdG8gcnViYmVyLWJhbmQgcGVyY2VwdGlibHku
CisgICAgICAgICAgICBmb3JjZSA9IHVuaXRWZWN0b3JGb3JTY3JvbGxEaXJlY3Rpb24oZGlyZWN0
aW9uKS5zY2FsZWQocGFyYW1zLnJ1YmJlckJhbmRGb3JjZSk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoZmFicyhtX3ZlbG9jaXR5LndpZHRoKCkpID49IGZhYnMobV9jdXJyZW50S2V5Ym9hcmRT
Y3JvbGwtPm1heGltdW1WZWxvY2l0eS53aWR0aCgpKSkKKyAgICAgICAgICAgIGZvcmNlLnNldFdp
ZHRoKDApOworCisgICAgICAgIGlmIChmYWJzKG1fdmVsb2NpdHkuaGVpZ2h0KCkpID49IGZhYnMo
bV9jdXJyZW50S2V5Ym9hcmRTY3JvbGwtPm1heGltdW1WZWxvY2l0eS5oZWlnaHQoKSkpCisgICAg
ICAgICAgICBmb3JjZS5zZXRIZWlnaHQoMCk7CisgICAgfQorCisgICAgU2Nyb2xsUG9zaXRpb24g
aWRlYWxQb3NpdGlvbiA9IG1fc2Nyb2xsQW5pbWF0b3Iuc2Nyb2xsYWJsZUFyZWEoKS5jb25zdHJh
aW5TY3JvbGxQb3NpdGlvbihJbnRQb2ludChtX2N1cnJlbnRLZXlib2FyZFNjcm9sbCA/IG1fc2Ny
b2xsQW5pbWF0b3IuY3VycmVudFBvc2l0aW9uKCkgOiBtX2lkZWFsUG9zaXRpb24pKTsKKyAgICBG
bG9hdFNpemUgZGlzcGxhY2VtZW50ID0gbV9zY3JvbGxBbmltYXRvci5jdXJyZW50UG9zaXRpb24o
KSAtIGlkZWFsUG9zaXRpb247CisKKyAgICBhdXRvIHNwcmluZ0ZvcmNlID0gLWRpc3BsYWNlbWVu
dC5zY2FsZWQocGFyYW1zLnNwcmluZ1N0aWZmbmVzcykgLSBtX3ZlbG9jaXR5LnNjYWxlZChwYXJh
bXMuc3ByaW5nRGFtcGluZyk7CisgICAgZm9yY2UgKz0gc3ByaW5nRm9yY2UgKiBheGVzVG9BcHBs
eVNwcmluZzsKKworICAgIGZsb2F0IGZyYW1lRHVyYXRpb24gPSAoY3VycmVudFRpbWUgLSBtX3Rp
bWVBdExhc3RGcmFtZSkudmFsdWUoKTsKKyAgICBtX3RpbWVBdExhc3RGcmFtZSA9IGN1cnJlbnRU
aW1lOworCisgICAgRmxvYXRTaXplIGFjY2VsZXJhdGlvbiA9IGZvcmNlLnNjYWxlZCgxLiAvIHBh
cmFtcy5zcHJpbmdNYXNzKTsKKyAgICBtX3ZlbG9jaXR5ICs9IGFjY2VsZXJhdGlvbi5zY2FsZWQo
ZnJhbWVEdXJhdGlvbik7CisgICAgRmxvYXRQb2ludCBuZXdQb3NpdGlvbiA9IG1fc2Nyb2xsQW5p
bWF0b3IuY3VycmVudFBvc2l0aW9uKCkgKyBtX3ZlbG9jaXR5LnNjYWxlZChmcmFtZUR1cmF0aW9u
KTsKKworICAgIG1fc2Nyb2xsQW5pbWF0b3Iuc2Nyb2xsVG9Qb3NpdGlvbldpdGhvdXRBbmltYXRp
b24obmV3UG9zaXRpb24pOworCisgICAgaWYgKCFtX3Njcm9sbFRyaWdnZXJpbmdLZXlJc1ByZXNz
ZWQgJiYgbV92ZWxvY2l0eS5kaWFnb25hbExlbmd0aFNxdWFyZWQoKSA8IDEpIHsKKyAgICAgICAg
bV9zY3JvbGxDb250cm9sbGVyLnN0b3BLZXlib2FyZFNjcm9sbGluZygpOworICAgICAgICBtX3Zl
bG9jaXR5ID0geyB9OworICAgIH0KK30KKworZmxvYXQgS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRv
cjo6c2Nyb2xsRGlzdGFuY2UoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVs
YXJpdHkgZ3JhbnVsYXJpdHkpIGNvbnN0Cit7CisgICAgYXV0byBzY3JvbGxiYXIgPSBbJl0gewor
ICAgICAgICBpZiAoZGlyZWN0aW9uID09IFNjcm9sbERpcmVjdGlvbjo6U2Nyb2xsVXAgfHwgZGly
ZWN0aW9uID09IFNjcm9sbERpcmVjdGlvbjo6U2Nyb2xsRG93bikKKyAgICAgICAgICAgIHJldHVy
biBtX3Njcm9sbEFuaW1hdG9yLnNjcm9sbGFibGVBcmVhKCkudmVydGljYWxTY3JvbGxiYXIoKTsK
KyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsQW5pbWF0b3Iuc2Nyb2xsYWJsZUFyZWEoKS5ob3Jpem9u
dGFsU2Nyb2xsYmFyKCk7CisgICAgfSgpOworCisgICAgc3dpdGNoIChncmFudWxhcml0eSkgewor
ICAgIGNhc2UgU2Nyb2xsR3JhbnVsYXJpdHk6OlNjcm9sbEJ5TGluZToKKyAgICAgICAgcmV0dXJu
IHNjcm9sbGJhci0+bGluZVN0ZXAoKTsKKyAgICBjYXNlIFNjcm9sbEdyYW51bGFyaXR5OjpTY3Jv
bGxCeVBhZ2U6CisgICAgICAgIHJldHVybiBzY3JvbGxiYXItPnBhZ2VTdGVwKCk7CisgICAgY2Fz
ZSBTY3JvbGxHcmFudWxhcml0eTo6U2Nyb2xsQnlEb2N1bWVudDoKKyAgICAgICAgcmV0dXJuIHNj
cm9sbGJhci0+dG90YWxTaXplKCk7CisgICAgY2FzZSBTY3JvbGxHcmFudWxhcml0eTo6U2Nyb2xs
QnlQaXhlbDoKKyAgICAgICAgcmV0dXJuIHNjcm9sbGJhci0+cGl4ZWxTdGVwKCk7CisgICAgfQor
CisgICAgcmV0dXJuIDA7Cit9CisKK3N0ZDo6b3B0aW9uYWw8S2V5Ym9hcmRTY3JvbGw+IEtleWJv
YXJkU2Nyb2xsaW5nQW5pbWF0b3I6OmtleWJvYXJkU2Nyb2xsRm9yS2V5Ym9hcmRFdmVudChLZXli
b2FyZEV2ZW50JiBldmVudCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRSAoYnVnIDIyNzQ1OSk6IFRo
aXMgbG9naWMgZG9lcyBub3QgYWNjb3VudCBmb3Igd3JpdGluZy1tb2RlLgorCisgICAgZW51bSBj
bGFzcyBLZXkgOiB1aW50OF90IHsgTGVmdEFycm93LCBSaWdodEFycm93LCBVcEFycm93LCBEb3du
QXJyb3csIFNwYWNlIH07CisKKyAgICBLZXkga2V5OworICAgIGlmIChldmVudC5rZXlJZGVudGlm
aWVyKCkgPT0gIkxlZnQiKQorICAgICAgICBrZXkgPSBLZXk6OkxlZnRBcnJvdzsKKyAgICBlbHNl
IGlmIChldmVudC5rZXlJZGVudGlmaWVyKCkgPT0gIlJpZ2h0IikKKyAgICAgICAga2V5ID0gS2V5
OjpSaWdodEFycm93OworICAgIGVsc2UgaWYgKGV2ZW50LmtleUlkZW50aWZpZXIoKSA9PSAiVXAi
KQorICAgICAgICBrZXkgPSBLZXk6OlVwQXJyb3c7CisgICAgZWxzZSBpZiAoZXZlbnQua2V5SWRl
bnRpZmllcigpID09ICJEb3duIikKKyAgICAgICAga2V5ID0gS2V5OjpEb3duQXJyb3c7CisgICAg
ZWxzZSBpZiAoZXZlbnQuY2hhckNvZGUoKSA9PSAnICcpCisgICAgICAgIGtleSA9IEtleTo6U3Bh
Y2U7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgYXV0byBn
cmFudWxhcml0eSA9IFsmXSB7CisgICAgICAgIHN3aXRjaCAoa2V5KSB7CisgICAgICAgIGNhc2Ug
S2V5OjpMZWZ0QXJyb3c6CisgICAgICAgIGNhc2UgS2V5OjpSaWdodEFycm93OgorICAgICAgICAg
ICAgcmV0dXJuIGV2ZW50LmFsdEtleSgpID8gU2Nyb2xsR3JhbnVsYXJpdHk6OlNjcm9sbEJ5UGFn
ZSA6IFNjcm9sbEdyYW51bGFyaXR5OjpTY3JvbGxCeUxpbmU7CisgICAgICAgIGNhc2UgS2V5OjpV
cEFycm93OgorICAgICAgICBjYXNlIEtleTo6RG93bkFycm93OgorICAgICAgICAgICAgaWYgKGV2
ZW50Lm1ldGFLZXkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gU2Nyb2xsR3JhbnVsYXJpdHk6
OlNjcm9sbEJ5RG9jdW1lbnQ7CisgICAgICAgICAgICBpZiAoZXZlbnQuYWx0S2V5KCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIFNjcm9sbEdyYW51bGFyaXR5OjpTY3JvbGxCeVBhZ2U7CisgICAg
ICAgICAgICByZXR1cm4gU2Nyb2xsR3JhbnVsYXJpdHk6OlNjcm9sbEJ5TGluZTsKKyAgICAgICAg
Y2FzZSBLZXk6OlNwYWNlOgorICAgICAgICAgICAgcmV0dXJuIFNjcm9sbEdyYW51bGFyaXR5OjpT
Y3JvbGxCeVBhZ2U7CisgICAgICAgIH07CisgICAgfSgpOworCisgICAgYXV0byBkaXJlY3Rpb24g
PSBbJl0geworICAgICAgICBzd2l0Y2ggKGtleSkgeworICAgICAgICBjYXNlIEtleTo6TGVmdEFy
cm93OgorICAgICAgICAgICAgcmV0dXJuIFNjcm9sbERpcmVjdGlvbjo6U2Nyb2xsTGVmdDsKKyAg
ICAgICAgY2FzZSBLZXk6OlJpZ2h0QXJyb3c6CisgICAgICAgICAgICByZXR1cm4gU2Nyb2xsRGly
ZWN0aW9uOjpTY3JvbGxSaWdodDsKKyAgICAgICAgY2FzZSBLZXk6OlVwQXJyb3c6CisgICAgICAg
ICAgICByZXR1cm4gU2Nyb2xsRGlyZWN0aW9uOjpTY3JvbGxVcDsKKyAgICAgICAgY2FzZSBLZXk6
OkRvd25BcnJvdzoKKyAgICAgICAgICAgIHJldHVybiBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbERv
d247CisgICAgICAgIGNhc2UgS2V5OjpTcGFjZToKKyAgICAgICAgICAgIHJldHVybiBldmVudC5z
aGlmdEtleSgpID8gU2Nyb2xsRGlyZWN0aW9uOjpTY3JvbGxVcCA6IFNjcm9sbERpcmVjdGlvbjo6
U2Nyb2xsRG93bjsKKyAgICAgICAgfQorICAgIH0oKTsKKworICAgIGZsb2F0IGRpc3RhbmNlID0g
c2Nyb2xsRGlzdGFuY2UoZGlyZWN0aW9uLCBncmFudWxhcml0eSk7CisKKyAgICBLZXlib2FyZFNj
cm9sbCBzY3JvbGw7CisKKyAgICBzY3JvbGwub2Zmc2V0ID0gdW5pdFZlY3RvckZvclNjcm9sbERp
cmVjdGlvbihkaXJlY3Rpb24pLnNjYWxlZChkaXN0YW5jZSk7CisgICAgc2Nyb2xsLmdyYW51bGFy
aXR5ID0gZ3JhbnVsYXJpdHk7CisgICAgc2Nyb2xsLmRpcmVjdGlvbiA9IGRpcmVjdGlvbjsKKyAg
ICBzY3JvbGwubWF4aW11bVZlbG9jaXR5ID0gc2Nyb2xsLm9mZnNldC5zY2FsZWQoS2V5Ym9hcmRT
Y3JvbGxQYXJhbWV0ZXJzOjpwYXJhbWV0ZXJzKCkubWF4aW11bVZlbG9jaXR5TXVsdGlwbGllcik7
CisgICAgc2Nyb2xsLmZvcmNlID0gc2Nyb2xsLm1heGltdW1WZWxvY2l0eS5zY2FsZWQoS2V5Ym9h
cmRTY3JvbGxQYXJhbWV0ZXJzOjpwYXJhbWV0ZXJzKCkuc3ByaW5nTWFzcyAvIEtleWJvYXJkU2Ny
b2xsUGFyYW1ldGVyczo6cGFyYW1ldGVycygpLnRpbWVUb01heGltdW1WZWxvY2l0eSk7CisKKyAg
ICByZXR1cm4gc2Nyb2xsOworfQorCitib29sIEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3I6OmJl
Z2luS2V5Ym9hcmRTY3JvbGxHZXN0dXJlKEtleWJvYXJkRXZlbnQmIGV2ZW50KQoreworICAgIGF1
dG8gc2Nyb2xsID0ga2V5Ym9hcmRTY3JvbGxGb3JLZXlib2FyZEV2ZW50KGV2ZW50KTsKKworICAg
IGlmICghc2Nyb2xsKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2N1cnJlbnRLZXli
b2FyZFNjcm9sbCA9IHNjcm9sbDsKKworICAgIGlmIChldmVudC50eXBlKCkgIT0gZXZlbnROYW1l
cygpLmtleWRvd25FdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1fc2Ny
b2xsVHJpZ2dlcmluZ0tleUlzUHJlc3NlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKG1fY3VycmVudEtleWJvYXJkU2Nyb2xsLT5ncmFudWxhcml0eSA9PSBTY3JvbGxHcmFudWxh
cml0eTo6U2Nyb2xsQnlEb2N1bWVudCkgeworICAgICAgICBtX3ZlbG9jaXR5ID0geyB9OworICAg
ICAgICBzdG9wS2V5Ym9hcmRTY3JvbGxBbmltYXRpb24oKTsKKyAgICAgICAgYXV0byBuZXdQb3Np
dGlvbiA9IEludFBvaW50KG1fc2Nyb2xsQW5pbWF0b3IuY3VycmVudFBvc2l0aW9uKCkgKyBtX2N1
cnJlbnRLZXlib2FyZFNjcm9sbC0+b2Zmc2V0KTsKKyAgICAgICAgbV9zY3JvbGxBbmltYXRvci5z
Y3JvbGxUb1Bvc2l0aW9uV2l0aEFuaW1hdGlvbihuZXdQb3NpdGlvbik7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIG1fdGltZUF0TGFzdEZyYW1lID0gTW9ub3RvbmljVGltZTo6
bm93KCk7CisgICAgbV9zY3JvbGxUcmlnZ2VyaW5nS2V5SXNQcmVzc2VkID0gdHJ1ZTsKKworICAg
IG1faWRlYWxQb3NpdGlvbkZvck1pbmltdW1UcmF2ZWwgPSBtX3Njcm9sbEFuaW1hdG9yLmN1cnJl
bnRQb3NpdGlvbigpICsgbV9jdXJyZW50S2V5Ym9hcmRTY3JvbGwtPm9mZnNldDsKKyAgICBtX3Nj
cm9sbENvbnRyb2xsZXIuYmVnaW5LZXlib2FyZFNjcm9sbGluZygpOworCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3N0YXRpYyBTY3JvbGxQb3NpdGlvbiBmYXJ0aGVzdFBvaW50SW5EaXJlY3Rpb24o
RmxvYXRQb2ludCBhLCBGbG9hdFBvaW50IGIsIFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24pCit7
CisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBjYXNlIFNjcm9sbERpcmVjdGlvbjo6U2Ny
b2xsVXA6CisgICAgICAgIHJldHVybiBTY3JvbGxQb3NpdGlvbihhLngoKSwgc3RkOjptaW4oYS55
KCksIGIueSgpKSk7CisgICAgY2FzZSBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbERvd246CisgICAg
ICAgIHJldHVybiBTY3JvbGxQb3NpdGlvbihhLngoKSwgc3RkOjptYXgoYS55KCksIGIueSgpKSk7
CisgICAgY2FzZSBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbExlZnQ6CisgICAgICAgIHJldHVybiBT
Y3JvbGxQb3NpdGlvbihzdGQ6Om1pbihhLngoKSwgYi54KCkpLCBhLnkoKSk7CisgICAgY2FzZSBT
Y3JvbGxEaXJlY3Rpb246OlNjcm9sbFJpZ2h0OgorICAgICAgICByZXR1cm4gU2Nyb2xsUG9zaXRp
b24oc3RkOjptYXgoYS54KCksIGIueCgpKSwgYS55KCkpOworICAgIH0KKworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB7IH07Cit9CisKK3ZvaWQgS2V5Ym9hcmRTY3JvbGxp
bmdBbmltYXRvcjo6c3RvcEtleWJvYXJkU2Nyb2xsQW5pbWF0aW9uKCkKK3sKKyAgICBpZiAoIW1f
Y3VycmVudEtleWJvYXJkU2Nyb2xsKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHBhcmFt
cyA9IEtleWJvYXJkU2Nyb2xsUGFyYW1ldGVyczo6cGFyYW1ldGVycygpOworCisgICAgLy8gRGV0
ZXJtaW5lIHRoZSBzZXR0bGluZyBwb3NpdGlvbiBvZiB0aGUgc3ByaW5nLCBjb25zZXJ2aW5nIHRo
ZSBzeXN0ZW0ncyBjdXJyZW50IGVuZXJneS4KKyAgICAvLyBLaW5ldGljID0gZWxhc3RpYyBwb3Rl
bnRpYWwKKyAgICAvLyAxLzIgKiBtICogdl4yID0gMS8yICogayAqIHheMgorICAgIC8vIHggPSBz
cXJ0KHZeMiAqIG0gLyBrKQorICAgIGF1dG8gZGlzcGxhY2VtZW50TWFnbml0dWRlU3F1YXJlZCA9
IChtX3ZlbG9jaXR5ICogbV92ZWxvY2l0eSkuc2NhbGVkKHBhcmFtcy5zcHJpbmdNYXNzIC8gcGFy
YW1zLnNwcmluZ1N0aWZmbmVzcyk7CisgICAgRmxvYXRTaXplIGRpc3BsYWNlbWVudCA9IHsKKyAg
ICAgICAgc3RkOjpjb3B5c2lnbihzcXJ0KGRpc3BsYWNlbWVudE1hZ25pdHVkZVNxdWFyZWQud2lk
dGgoKSksIG1fdmVsb2NpdHkud2lkdGgoKSksCisgICAgICAgIHN0ZDo6Y29weXNpZ24oc3FydChk
aXNwbGFjZW1lbnRNYWduaXR1ZGVTcXVhcmVkLmhlaWdodCgpKSwgbV92ZWxvY2l0eS5oZWlnaHQo
KSkKKyAgICB9OworCisgICAgLy8gSWYgdGhlIHNwcmluZyB3b3VsZCBzZXR0bGUgYmVmb3JlIHRo
ZSBtaW5pbXVtIHRyYXZlbCBkaXN0YW5jZQorICAgIC8vIGZvciBhbiBpbnN0YW50YW5lb3VzIHRh
cCwgbW92ZSB0aGUgc2V0dGxpbmcgcG9zaXRpb24gb2YgdGhlIHNwcmluZworICAgIC8vIG91dCB0
byB0aGF0IHBvaW50LgorICAgIFNjcm9sbFBvc2l0aW9uIGZhcnRoZXN0UG9pbnQgPSBmYXJ0aGVz
dFBvaW50SW5EaXJlY3Rpb24obV9zY3JvbGxBbmltYXRvci5jdXJyZW50UG9zaXRpb24oKSArIGRp
c3BsYWNlbWVudCwgbV9pZGVhbFBvc2l0aW9uRm9yTWluaW11bVRyYXZlbCwgbV9jdXJyZW50S2V5
Ym9hcmRTY3JvbGwtPmRpcmVjdGlvbik7CisgICAgbV9pZGVhbFBvc2l0aW9uID0gbV9zY3JvbGxB
bmltYXRvci5zY3JvbGxhYmxlQXJlYSgpLmNvbnN0cmFpblNjcm9sbFBvc2l0aW9uKGZhcnRoZXN0
UG9pbnQpOworCisgICAgbV9jdXJyZW50S2V5Ym9hcmRTY3JvbGwgPSBzdGQ6Om51bGxvcHQ7Cit9
CisKK3ZvaWQgS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcjo6aGFuZGxlS2V5VXBFdmVudCgpCit7
CisgICAgaWYgKCFtX3Njcm9sbFRyaWdnZXJpbmdLZXlJc1ByZXNzZWQpCisgICAgICAgIHJldHVy
bjsKKworICAgIHN0b3BLZXlib2FyZFNjcm9sbEFuaW1hdGlvbigpOworICAgIG1fc2Nyb2xsVHJp
Z2dlcmluZ0tleUlzUHJlc3NlZCA9IGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LZXlib2FyZFNjcm9sbGluZ0Fu
aW1hdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LZXlib2FyZFNjcm9sbGluZ0FuaW1h
dG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZjU3ODQwNzNhMmRkMmE2NmQ1Y2U3YzRmNWMxZmZjZDgzNmU2YjFh
ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tleWJvYXJkU2Ny
b2xsaW5nQW5pbWF0b3IuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRTY3Jv
bGwuaCIKKyNpbmNsdWRlICJSZWN0RWRnZXMuaCIKKyNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0
b3IgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3Ip
OworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEtleWJvYXJkU2Ny
b2xsaW5nQW5pbWF0b3IoU2Nyb2xsQW5pbWF0b3ImLCBTY3JvbGxDb250cm9sbGVyJik7CisKKyAg
ICBib29sIGJlZ2luS2V5Ym9hcmRTY3JvbGxHZXN0dXJlKEtleWJvYXJkRXZlbnQmKTsKKyAgICB2
b2lkIGhhbmRsZUtleVVwRXZlbnQoKTsKKyAgICB2b2lkIHVwZGF0ZUtleWJvYXJkU2Nyb2xsUG9z
aXRpb24oTW9ub3RvbmljVGltZSk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBzdG9wS2V5Ym9hcmRT
Y3JvbGxBbmltYXRpb24oKTsKKyAgICBSZWN0RWRnZXM8Ym9vbD4gc2Nyb2xsYWJsZURpcmVjdGlv
bnNGcm9tT2Zmc2V0KEZsb2F0UG9pbnQpIGNvbnN0OworICAgIHN0ZDo6b3B0aW9uYWw8S2V5Ym9h
cmRTY3JvbGw+IGtleWJvYXJkU2Nyb2xsRm9yS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50Jikg
Y29uc3Q7CisgICAgZmxvYXQgc2Nyb2xsRGlzdGFuY2UoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxH
cmFudWxhcml0eSkgY29uc3Q7CisKKyAgICBTY3JvbGxBbmltYXRvciYgbV9zY3JvbGxBbmltYXRv
cjsKKyAgICBTY3JvbGxDb250cm9sbGVyJiBtX3Njcm9sbENvbnRyb2xsZXI7CisgICAgc3RkOjpv
cHRpb25hbDxXZWJDb3JlOjpLZXlib2FyZFNjcm9sbD4gbV9jdXJyZW50S2V5Ym9hcmRTY3JvbGw7
CisgICAgYm9vbCBtX3Njcm9sbFRyaWdnZXJpbmdLZXlJc1ByZXNzZWQ7CisgICAgRmxvYXRTaXpl
IG1fdmVsb2NpdHk7CisgICAgTW9ub3RvbmljVGltZSBtX3RpbWVBdExhc3RGcmFtZTsKKyAgICBG
bG9hdFBvaW50IG1faWRlYWxQb3NpdGlvbkZvck1pbmltdW1UcmF2ZWw7CisgICAgRmxvYXRQb2lu
dCBtX2lkZWFsUG9zaXRpb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKaW5kZXggODQ2Y2EwMzc5OTFhNjBm
YWMwMzI1ZDFhMjZhNzU1YjM5MzIyY2RkOC4uOWFjNDE5ZjMwMTEwY2U1Y2IxMGYzYWI0MmViM2Iw
ZTMxZjIyY2JjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNw
cApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCiAKICNpbmNs
dWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5o
IgogI2luY2x1ZGUgIkxheW91dFNpemUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQu
aCIKICNpbmNsdWRlICJTY3JvbGxBbmltYXRpb25TbW9vdGguaCIKQEAgLTY3LDYgKzY4LDcgQEAg
U2Nyb2xsQW5pbWF0b3I6OlNjcm9sbEFuaW1hdG9yKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxl
QXJlYSkKICAgICAgICAgW3RoaXNdIHsKICAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEuc2V0
U2Nyb2xsQmVoYXZpb3JTdGF0dXMoU2Nyb2xsQmVoYXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9u
KTsKICAgICAgICAgfSkpCisgICAgLCBtX2tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IobWFrZVVu
aXF1ZTxLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yPigqdGhpcywgbV9zY3JvbGxDb250cm9sbGVy
KSkKIHsKIH0KIApAQCAtMzMyLDcgKzMzNCw3IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3I6OnN0YXJ0
QW5pbWF0aW9uQ2FsbGJhY2soU2Nyb2xsQ29udHJvbGxlciYpCiB7CiAgICAgaWYgKG1fc2Nyb2xs
Q29udHJvbGxlckFuaW1hdGlvblRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgCisKICAgICBtX3Njcm9sbENvbnRyb2xsZXJBbmltYXRpb25UaW1lci5zdGFydFJlcGVh
dGluZygxX3MgLyA2MC4pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxBbmltYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3IuaAppbmRleCA0M2JjMjg2YzA3MTgwODQxNjdmY2IxOGQyMTczNzRkYzE4NDk2Yzk4Li5hNGYz
OWQ1NjFjNjM5NTFmNTMxMjllZmNlZjU0MjUwZTE1OWEyYmFmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlICJGbG9h
dFBvaW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCiAjaW5jbHVkZSAiU2Ny
b2xsQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVkZSAiVGlt
ZXIuaCIKICNpbmNsdWRlICJXaGVlbEV2ZW50VGVzdE1vbml0b3IuaCIKICNpbmNsdWRlIDx3dGYv
RmFzdE1hbGxvYy5oPgpAQCAtNDMsNiArNDIsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBGbG9hdFBvaW50OworY2xhc3MgS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcjsKIGNsYXNz
IFBsYXRmb3JtVG91Y2hFdmVudDsKIGNsYXNzIFNjcm9sbEFuaW1hdGlvbjsKIGNsYXNzIFNjcm9s
bGFibGVBcmVhOwpAQCAtODEsNiArODEsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wg
aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKTsKIAorICAgIEtleWJv
YXJkU2Nyb2xsaW5nQW5pbWF0b3IgKmtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBtX2tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuZ2V0KCk7IH0KKwog
I2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgdmlydHVhbCBib29sIGhhbmRsZVRvdWNoRXZl
bnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50Jik7CiAjZW5kaWYKQEAgLTE3OCw2ICsxODAsNyBA
QCBwcm90ZWN0ZWQ6CiAgICAgRmxvYXRQb2ludCBtX2N1cnJlbnRQb3NpdGlvbjsKIAogICAgIHN0
ZDo6dW5pcXVlX3B0cjxTY3JvbGxBbmltYXRpb24+IG1fc2Nyb2xsQW5pbWF0aW9uOworICAgIHN0
ZDo6dW5pcXVlX3B0cjxLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yPiBtX2tleWJvYXJkU2Nyb2xs
aW5nQW5pbWF0b3I7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbENvbnRyb2xsZXIuY3BwCmluZGV4IDM2ZjJmMTlmZjFlYzA5ZWE0
OWVkNGZkMTc4MWZhMzI1M2ZiM2NmY2QuLjYzZGY3YzQ4YzZlNjkwM2RjNGMwNmRjMjA3Zjc1Y2Y0
NGRmYzhmNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbENvbnRy
b2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbENvbnRyb2xsZXIu
Y3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2Ny
b2xsQ29udHJvbGxlci5oIgogCisjaW5jbHVkZSAiS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5o
IgogI2luY2x1ZGUgIkxheW91dFNpemUuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCkBAIC00MywxNSArNDQsMTYgQEAgU2Nyb2xsQ29udHJv
bGxlcjo6U2Nyb2xsQ29udHJvbGxlcihTY3JvbGxDb250cm9sbGVyQ2xpZW50JiBjbGllbnQpCiAK
IHZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6YW5pbWF0aW9uQ2FsbGJhY2soTW9ub3RvbmljVGltZSBj
dXJyZW50VGltZSkKIHsKLSAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwg
IlNjcm9sbENvbnRyb2xsZXIgIiA8PCB0aGlzIDw8ICIgYW5pbWF0aW9uQ2FsbGJhY2s6IGlzQW5p
bWF0aW5nUnViYmVyQmFuZCAiIDw8IG1faXNBbmltYXRpbmdSdWJiZXJCYW5kIDw8ICIgaXNBbmlt
YXRpbmdTY3JvbGxTbmFwICIgPDwgbV9pc0FuaW1hdGluZ1Njcm9sbFNuYXApOworICAgIExPR19X
SVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAiU2Nyb2xsQ29udHJvbGxlciAiIDw8IHRo
aXMgPDwgIiBhbmltYXRpb25DYWxsYmFjazogaXNBbmltYXRpbmdSdWJiZXJCYW5kICIgPDwgbV9p
c0FuaW1hdGluZ1J1YmJlckJhbmQgPDwgIiBpc0FuaW1hdGluZ1Njcm9sbFNuYXAgIiA8PCBtX2lz
QW5pbWF0aW5nU2Nyb2xsU25hcCA8PCAiaXNBbmltYXRpbmdLZXlib2FyZFNjcm9sbGluZyIgPDwg
bV9pc0FuaW1hdGluZ0tleWJvYXJkU2Nyb2xsaW5nKTsKIAogICAgIHVwZGF0ZVNjcm9sbFNuYXBB
bmltYXRpbmdTdGF0ZShjdXJyZW50VGltZSk7CiAgICAgdXBkYXRlUnViYmVyQmFuZEFuaW1hdGlu
Z1N0YXRlKGN1cnJlbnRUaW1lKTsKKyAgICB1cGRhdGVLZXlib2FyZFNjcm9sbGluZ0FuaW1hdGlu
Z1N0YXRlKGN1cnJlbnRUaW1lKTsKIH0KIAogdm9pZCBTY3JvbGxDb250cm9sbGVyOjpzdGFydE9y
U3RvcEFuaW1hdGlvbkNhbGxiYWNrcygpCiB7Ci0gICAgYm9vbCBuZWVkc0NhbGxiYWNrcyA9IG1f
aXNBbmltYXRpbmdSdWJiZXJCYW5kIHx8IG1faXNBbmltYXRpbmdTY3JvbGxTbmFwOworICAgIGJv
b2wgbmVlZHNDYWxsYmFja3MgPSBtX2lzQW5pbWF0aW5nUnViYmVyQmFuZCB8fCBtX2lzQW5pbWF0
aW5nU2Nyb2xsU25hcCB8fCBtX2lzQW5pbWF0aW5nS2V5Ym9hcmRTY3JvbGxpbmc7CiAgICAgaWYg
KG5lZWRzQ2FsbGJhY2tzID09IG1faXNSdW5uaW5nQW5pbWF0aW5nQ2FsbGJhY2spCiAgICAgICAg
IHJldHVybjsKIApAQCAtNjUsNiArNjcsMTYgQEAgdm9pZCBTY3JvbGxDb250cm9sbGVyOjpzdGFy
dE9yU3RvcEFuaW1hdGlvbkNhbGxiYWNrcygpCiAgICAgbV9pc1J1bm5pbmdBbmltYXRpbmdDYWxs
YmFjayA9IGZhbHNlOwogfQogCit2b2lkIFNjcm9sbENvbnRyb2xsZXI6OmJlZ2luS2V5Ym9hcmRT
Y3JvbGxpbmcoKQoreworICAgIHNldElzQW5pbWF0aW5nS2V5Ym9hcmRTY3JvbGxpbmcodHJ1ZSk7
Cit9CisKK3ZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c3RvcEtleWJvYXJkU2Nyb2xsaW5nKCkKK3sK
KyAgICBzZXRJc0FuaW1hdGluZ0tleWJvYXJkU2Nyb2xsaW5nKGZhbHNlKTsKK30KKwogdm9pZCBT
Y3JvbGxDb250cm9sbGVyOjpzZXRJc0FuaW1hdGluZ1J1YmJlckJhbmQoYm9vbCBpc0FuaW1hdGlu
Z1J1YmJlckJhbmQpCiB7CiAgICAgaWYgKGlzQW5pbWF0aW5nUnViYmVyQmFuZCA9PSBtX2lzQW5p
bWF0aW5nUnViYmVyQmFuZCkKQEAgLTgzLDYgKzk1LDE1IEBAIHZvaWQgU2Nyb2xsQ29udHJvbGxl
cjo6c2V0SXNBbmltYXRpbmdTY3JvbGxTbmFwKGJvb2wgaXNBbmltYXRpbmdTY3JvbGxTbmFwKQog
ICAgIHN0YXJ0T3JTdG9wQW5pbWF0aW9uQ2FsbGJhY2tzKCk7CiB9CiAKK3ZvaWQgU2Nyb2xsQ29u
dHJvbGxlcjo6c2V0SXNBbmltYXRpbmdLZXlib2FyZFNjcm9sbGluZyhib29sIGlzQW5pbWF0aW5n
S2V5Ym9hcmRTY3JvbGxpbmcpCit7CisgICAgaWYgKGlzQW5pbWF0aW5nS2V5Ym9hcmRTY3JvbGxp
bmcgPT0gbV9pc0FuaW1hdGluZ0tleWJvYXJkU2Nyb2xsaW5nKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX2lzQW5pbWF0aW5nS2V5Ym9hcmRTY3JvbGxpbmcgPSBpc0FuaW1hdGluZ0tleWJvYXJk
U2Nyb2xsaW5nOworICAgIHN0YXJ0T3JTdG9wQW5pbWF0aW9uQ2FsbGJhY2tzKCk7Cit9CisKIGJv
b2wgU2Nyb2xsQ29udHJvbGxlcjo6dXNlc1Njcm9sbFNuYXAoKSBjb25zdAogewogICAgIHJldHVy
biAhIW1fc2Nyb2xsU25hcFN0YXRlOwpAQCAtMTk4LDYgKzIxOSwxNSBAQCB2b2lkIFNjcm9sbENv
bnRyb2xsZXI6OnJlc25hcEFmdGVyTGF5b3V0KCkKICAgICAgICAgc2V0TmVhcmVzdFNjcm9sbFNu
YXBJbmRleEZvckF4aXNBbmRPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwgb2Zmc2V0
KTsKIAogfQorCit2b2lkIFNjcm9sbENvbnRyb2xsZXI6OnVwZGF0ZUtleWJvYXJkU2Nyb2xsaW5n
QW5pbWF0aW5nU3RhdGUoTW9ub3RvbmljVGltZSBjdXJyZW50VGltZSkKK3sKKyAgICBpZiAoIW1f
aXNBbmltYXRpbmdLZXlib2FyZFNjcm9sbGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9j
bGllbnQua2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcigpLT51cGRhdGVLZXlib2FyZFNjcm9sbFBv
c2l0aW9uKGN1cnJlbnRUaW1lKTsKK30KKwogLy8gQ3VycmVudGx5LCBvbmx5IE1hYyBzdXBwb3J0
cyBtb21lbnR1bSBzcm9sbGluZy1iYXNlZCBzY3JvbGxzbmFwcGluZyBhbmQgcnViYmVyIGJhbmRp
bmcKIC8vIHNvIGFsbCBvZiB0aGVzZSBtZXRob2RzIGFyZSBhIG5vb3Agb24gbm9uLU1hYyBwbGF0
Zm9ybXMuCiAjaWYgIVBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bENvbnRyb2xsZXIuaAppbmRleCBmZmFkM2IxNzFmMjIwNDBmOTk0Y2Y4M2IzYTA4ZGNlN2M5N2Uz
YTVmLi5kZDljMDkyMGU0YWYxZjliYTMyNDIxYTlkN2ZkYWMxODNhNTFlMzcwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5oCkBAIC0zOCw2ICszOCw3IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcjsK
IGNsYXNzIExheW91dFNpemU7CiBjbGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQ7CiBjbGFzcyBTY3Jv
bGxDb250cm9sbGVyOwpAQCAtNzIsNiArNzMsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHN0YXJ0QW5pbWF0aW9uQ2FsbGJhY2soU2Nyb2xsQ29udHJvbGxlciYpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgc3RvcEFuaW1hdGlvbkNhbGxiYWNrKFNjcm9sbENvbnRyb2xsZXImKSA9IDA7CiAK
KyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlS2V5Ym9hcmRTY3JvbGxQb3NpdGlvbihNb25vdG9uaWNU
aW1lKSB7IH0KKyAgICB2aXJ0dWFsIEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IgKmtleWJvYXJk
U2Nyb2xsaW5nQW5pbWF0b3IoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CisKICNpZiBFTkFC
TEUoUlVCQkVSX0JBTkRJTkcpCiAgICAgdmlydHVhbCBib29sIGFsbG93c0hvcml6b250YWxTdHJl
dGNoaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFs
IGJvb2wgYWxsb3dzVmVydGljYWxTdHJldGNoaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYp
IGNvbnN0ID0gMDsKQEAgLTEyMSw2ICsxMjUsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCB1c2VzU2Ny
b2xsU25hcCgpIGNvbnN0OwogICAgIHZvaWQgc3RvcEFsbFRpbWVycygpOwogICAgIHZvaWQgc2Ny
b2xsUG9zaXRpb25DaGFuZ2VkKCk7CisKKyAgICB2b2lkIGJlZ2luS2V5Ym9hcmRTY3JvbGxpbmco
KTsKKyAgICB2b2lkIHN0b3BLZXlib2FyZFNjcm9sbGluZygpOwogICAgIAogICAgIC8vIFNob3Vs
ZCBiZSBjYWxsZWQgcGVyaW9kaWNhbGx5IGJ5IHRoZSBjbGllbnQuIFN0YXJ0ZWQgYnkgc3RhcnRB
bmltYXRpb25DYWxsYmFjaygpLCBzdG9wcGVkIGJ5IHN0b3BBbmltYXRpb25DYWxsYmFjaygpLgog
ICAgIHZvaWQgYW5pbWF0aW9uQ2FsbGJhY2soTW9ub3RvbmljVGltZSk7CkBAIC0xNjMsOSArMTcw
LDExIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHVwZGF0ZVNjcm9sbFNuYXBBbmltYXRpbmdTdGF0
ZShNb25vdG9uaWNUaW1lKTsKICAgICB2b2lkIHVwZGF0ZVJ1YmJlckJhbmRBbmltYXRpbmdTdGF0
ZShNb25vdG9uaWNUaW1lKTsKLSAgICAKKyAgICB2b2lkIHVwZGF0ZUtleWJvYXJkU2Nyb2xsaW5n
QW5pbWF0aW5nU3RhdGUoTW9ub3RvbmljVGltZSk7CisKICAgICB2b2lkIHNldElzQW5pbWF0aW5n
UnViYmVyQmFuZChib29sKTsKICAgICB2b2lkIHNldElzQW5pbWF0aW5nU2Nyb2xsU25hcChib29s
KTsKKyAgICB2b2lkIHNldElzQW5pbWF0aW5nS2V5Ym9hcmRTY3JvbGxpbmcoYm9vbCk7CiAKICNp
ZiBQTEFURk9STShNQUMpCiAgICAgdm9pZCBzdGFydFNjcm9sbFNuYXBBbmltYXRpb24oKTsKQEAg
LTE5OSw2ICsyMDgsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc1J1bm5pbmdBbmltYXRpbmdD
YWxsYmFjayB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzQW5pbWF0aW5nUnViYmVyQmFuZCB7IGZh
bHNlIH07CiAgICAgYm9vbCBtX2lzQW5pbWF0aW5nU2Nyb2xsU25hcCB7IGZhbHNlIH07CisgICAg
Ym9vbCBtX2lzQW5pbWF0aW5nS2V5Ym9hcmRTY3JvbGxpbmcgeyBmYWxzZSB9OwogCiAjaWYgUExB
VEZPUk0oTUFDKQogICAgIFdhbGxUaW1lIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>434941</attachid>
            <date>2021-08-04 15:09:54 -0700</date>
            <delta_ts>2021-08-04 15:19:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228009-20210804180953.patch</filename>
            <type>text/plain</type>
            <size>35673</size>
            <attacher name="Dana Estra">dana.estra</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwNDgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmEzZmM2N2NlYTNhMGM4
Y2JlZTc4Zjg1ZDkzNWUxMjU3NjkwYWMwZC4uZjc3ZDNmOWFlMGI4YmNkNmVjY2YxYzNkM2ZkYjc0
ZDczYzBkZGI4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDIxLTA3LTIzICBEYW5h
IEVzdHJhICA8ZGVzdHJhQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQga2V5LWRyaXZlbiBzbW9v
dGggc2Nyb2xsaW5nIHRvIG1hY09TCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjgwMDkKKworICAgICAgICBSZXZpZXdlZCBieSBUaW0gSG9ydG9uLgor
CisgICAgICAgIENhdXNlIGtleWJvYXJkIHNjcm9sbCBldmVudCB0byB0cmlnZ2VyIHN0YXJ0IG9m
IHNtb290aCBzY3JvbGwgYW5pbWF0aW9uLCB1c2luZyBzYW1lIHBoeXNpY3MgaW1wbGVtZW50YXRp
b24gYXMgaU9TIHNtb290aCBzY3JvbGxpbmcuCisKKyAgICAgICAgTm8gdGVzdHMgeWV0LgorCisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRv
bS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmRlZmF1bHRFdmVudEhhbmRsZXIp
OgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50SGFuZGxlcjo6ZGVmYXVsdEtleWJvYXJkRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50SGFuZGxlcjo6c2Nyb2xsRGlzdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6RXZl
bnRIYW5kbGVyOjpzdG9wS2V5Ym9hcmRTY3JvbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RXZl
bnRIYW5kbGVyOjpzdGFydEtleWJvYXJkU2Nyb2xsaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9L
ZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
S2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6c3Rh
cnRBbmltYXRpb25DYWxsYmFjayk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3Iu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OmFuaW1hdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OnN0YXJ0T3JTdG9wQW5pbWF0aW9uQ2FsbGJhY2tzKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OmJlZ2luS2V5Ym9hcmRTY3JvbGxp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6c3RvcEtleWJvYXJkU2Ny
b2xsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OnNldElzQW5pbWF0
aW5nS2V5Ym9hcmRTY3JvbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxl
cjo6dXBkYXRlS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRpbmdTdGF0ZSk6CisgICAgICAgICogcGxh
dGZvcm0vU2Nyb2xsQ29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJv
bGxlckNsaWVudDo6dXBkYXRlS2V5Ym9hcmRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIAogMjAy
MS0wNy0zMCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIENsaWNr
aW5nIGFuIEhUTUxMaW5rRWxlbWVudCBzaG91bGQgbm90IHRyaWdnZXIgYSBuYXZpZ2F0aW9uCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0CmluZGV4IDU0NDQzZmI4OGE0ZGNhYmNiYjM2ZTUxZjVjMjc3ZTRmZmNjZjVhNjIu
Ljc2MWZkY2U3YjI4NmM5NGRmODA3YmE1NjBlNWFiYzUyZjIzNGI4NzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
CkBAIC0xNzQ1LDYgKzE3NDUsNyBAQCBwbGF0Zm9ybS9GaWxlSGFuZGxlLmNwcAogcGxhdGZvcm0v
RmlsZU1vbml0b3IuY3BwCiBwbGF0Zm9ybS9GaWxlU3RyZWFtLmNwcAogcGxhdGZvcm0vRnJhbWVS
YXRlTW9uaXRvci5jcHAKK3BsYXRmb3JtL0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuY3BwCiBw
bGF0Zm9ybS9MYXlvdXRVbml0LmNwcAogcGxhdGZvcm0vTGVnYWN5U2NoZW1lUmVnaXN0cnkuY3Bw
CiBwbGF0Zm9ybS9MZW5ndGguY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZTBiZGJiNmYwZWZjNTVhNDgzM2FhOWRlMWJlMjU3
OTBhNGZkY2I0Yi4uMjI0ZjIwYTc2ZmNkZTQ4ODRjMzI0OTM5NmJiNjA4OGY2YTVmNzMxMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtNjczLDYgKzY3Myw3IEBACiAJCTFGODc1NkIyMUUyMkMzMzUwMDQyQzQwRCAvKiBXZWJTUUxp
dGVEYXRhYmFzZVRyYWNrZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFGODc1NkIxMUUyMkJFRUYwMDQyQzQwRCAvKiBXZWJTUUxpdGVEYXRh
YmFzZVRyYWNrZXJDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkxRkFGQkYxOTE1QTVGQTc0MDAwODNBMjAgLyogVVRJVXRpbGl0aWVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxRkFGQkYxNjE1
QTVGQTUyMDAwODNBMjAgLyogVVRJVXRpbGl0aWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUZDNDBGQkExNjU1Q0NCOTAwNDBGMjlFIC8qIFN1
YmltYWdlQ2FjaGVXaXRoVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFGQzQwRkI3MTY1NUM1OTEwMDQwRjI5RSAvKiBTdWJpbWFnZUNhY2hlV2l0
aFRpbWVyLmggKi87IH07CisJCTFGRDk5MkY4MjZBQTI0RjkwMDg4RTU5NiAvKiBLZXlib2FyZFNj
cm9sbGluZ0FuaW1hdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxRkQ5OTJGNjI2QUEyNEY4MDA4OEU1OTYgLyogS2V5Ym9hcmRTY3JvbGxpbmdBbmlt
YXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTIwRDYyOTI3MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIwRDYyOTI1MTI1
MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCAqLzsgfTsKIAkJMjI1
QTE2QjUwRDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2ZW50UmVnaW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMjVBMTZCMzBENUMxMUU5MDAwOTAyOTUg
LyogV2ViRXZlbnRSZWdpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkyMjhDMjg0NTEwRDgyNTAwMDA5RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMjhDMjg0
NDEwRDgyNTAwMDA5RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTcwMTMsNiArNzAxNCw4IEBACiAJCTFG
QUZCRjE3MTVBNUZBNTIwMDA4M0EyMCAvKiBVVElVdGlsaXRpZXMubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBVVElVdGlsaXRpZXMubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTFGQzQwRkI3MTY1NUM1OTEwMDQwRjI5RSAvKiBTdWJpbWFnZUNhY2hl
V2l0aFRpbWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN1YmltYWdlQ2Fj
aGVXaXRoVGltZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUZDNDBGQjgxNjU1
QzU5MTAwNDBGMjlFIC8qIFN1YmltYWdlQ2FjaGVXaXRoVGltZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFGRDk5MkY2MjZBQTI0RjgwMDg4RTU5NiAvKiBLZXli
b2FyZFNjcm9sbGluZ0FuaW1hdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMUZEOTkyRjkyNkFBMjU0RDAwODhFNTk2IC8qIEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3Iu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gS2V5Ym9hcmRTY3JvbGxp
bmdBbmltYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTIwRDYyOTI0MTI1
MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjBENjI5MjUxMjUzNjkwQjAwMDgxNTQzIC8q
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMjI1QTE2QjMwRDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2ZW50UmVnaW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkV2ZW50UmVnaW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yNzU1Miw2ICsyNzU1NSw4IEBACiAJCQkJNDE5MEYzQTMyNDlE
MTUyODAwNTMxQzU3IC8qIEZyYW1lUmF0ZU1vbml0b3IuaCAqLywKIAkJCQlBODc0OEJERjEyQ0JG
MkRDMDAxRkJBNDEgLyogSGFzaFRvb2xzLmggKi8sCiAJCQkJQkMzQkMyOUIwRTkxQUIwRjAwODM1
NTg4IC8qIEhvc3RXaW5kb3cuaCAqLywKKwkJCQkxRkQ5OTJGOTI2QUEyNTREMDA4OEU1OTYgLyog
S2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5jcHAgKi8sCisJCQkJMUZEOTkyRjYyNkFBMjRGODAw
ODhFNTk2IC8qIEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuaCAqLywKIAkJCQkxQUUwMEQ1NzE4
MkRBQzhEMDAwODdERDcgLyogS2V5ZWRDb2RpbmcuaCAqLywKIAkJCQlFMTVGRjdENDE4Qzk1NTM4
MDBGRTRDODcgLyogS2V5cHJlc3NDb21tYW5kLmggKi8sCiAJCQkJQTNENDJBODQxRjMzQkEzNjAw
QTY0QjYyIC8qIExheW91dFVuaXQuY3BwICovLApAQCAtMzMzMzMsNiArMzMzMzgsNyBAQAogCQkJ
CTgzQjc0RUY2MUYzRTBCRjIwMDk5NkJDNyAvKiBLZWVwYWxpdmVSZXF1ZXN0VHJhY2tlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODUwMzFCNDQwQTQ0RUZDNzAwRjk5MkUwIC8qIEtleWJvYXJkRXZl
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFGMDIwQUVGMjY3ODBGQ0UwMDAwODA5QSAvKiBLZXli
b2FyZFNjcm9sbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUZEOTkyRjgyNkFBMjRGOTAwODhFNTk2
IC8qIEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRTAw
RDU5MTgyREFDOEQwMDA4N0RENyAvKiBLZXllZENvZGluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTE3QTYzQzUxQjc0MzE4RjAwRTdEQ0RDIC8qIEtleWVkRGVjb2RlckNGLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MTdBNjNDNjFCNzQzMTkyMDBFN0RDREMgLyogS2V5ZWRFbmNvZGVyQ0YuaCBpbiBI
ZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4IGUzMmI0YmQ0Y2Q0ZjgyZGIyMWE1OTQ3YTU4
MjdmNWM2YjViZWI4ZDcuLjY5MjRjZjM2YTEyMjlhMzQzNWQ3OGUwYjdkNGM1ZDNmNjNhNmZlMTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5jcHAKQEAgLTI0MzIsNyArMjQzMiw3IEBAIHZvaWQgTm9kZTo6ZGVmYXVs
dEV2ZW50SGFuZGxlcihFdmVudCYgZXZlbnQpCiAgICAgaWYgKGV2ZW50LnRhcmdldCgpICE9IHRo
aXMpCiAgICAgICAgIHJldHVybjsKICAgICBjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUgPSBl
dmVudC50eXBlKCk7Ci0gICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2
ZW50IHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkua2V5cHJlc3NFdmVudCkgeworICAgIGlm
IChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCB8fCBldmVudFR5cGUgPT0g
ZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5r
ZXl1cEV2ZW50KSB7CiAgICAgICAgIGlmIChpczxLZXlib2FyZEV2ZW50PihldmVudCkpIHsKICAg
ICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLmZyYW1lKCkpCiAgICAgICAg
ICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLmRlZmF1bHRLZXlib2FyZEV2ZW50SGFuZGxl
cihkb3duY2FzdDxLZXlib2FyZEV2ZW50PihldmVudCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhh
bmRsZXIuY3BwCmluZGV4IGVhZWYwYjU1NWFmYjQ5NDlmNTQ5OTFkYzQ3YzNkZTRlMjNiNTVhNmYu
LmMxOWQxNTVjNGZiMjNkZGUzOWI3YWI3NDgxODIyMzBlOWI1OGM1NjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTY4LDcgKzY4LDcgQEAKICNpbmNsdWRlICJJbWFnZU92
ZXJsYXlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgi
CiAjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgotI2luY2x1ZGUgIktleWJvYXJkU2Nyb2xsLmgi
CisjaW5jbHVkZSAiS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5oIgogI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudFdpdGhI
aXRUZXN0UmVzdWx0cy5oIgpAQCAtMzgwMyw2ICszODAzLDggQEAgdm9pZCBFdmVudEhhbmRsZXI6
OmRlZmF1bHRLZXlib2FyZEV2ZW50SGFuZGxlcihLZXlib2FyZEV2ZW50JiBldmVudCkKICAgICAg
ICAgaWYgKGV2ZW50LmNoYXJDb2RlKCkgPT0gJyAnKQogICAgICAgICAgICAgZGVmYXVsdFNwYWNl
RXZlbnRIYW5kbGVyKGV2ZW50KTsKICAgICB9CisgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkua2V5dXBFdmVudCkKKyAgICAgICAgc3RvcEtleWJvYXJkU2Nyb2xsaW5nKCk7CiB9
CiAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQpAQCAtNDE5Nyw3ICs0MTk5LDcgQEAgdm9pZCBF
dmVudEhhbmRsZXI6OmRlZmF1bHRTcGFjZUV2ZW50SGFuZGxlcihLZXlib2FyZEV2ZW50JiBldmVu
dCkKICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybjsKIAotICAgIGJvb2wgZGVmYXVsdEhh
bmRsZWQgPSBtX2ZyYW1lLnNldHRpbmdzKCkuZXZlbnRIYW5kbGVyRHJpdmVuU21vb3RoS2V5Ym9h
cmRTY3JvbGxpbmdFbmFibGVkKCkgPyBoYW5kbGVLZXlib2FyZFNjcm9sbGluZyhldmVudCkgOiB2
aWV3LT5sb2dpY2FsU2Nyb2xsKGRpcmVjdGlvbiwgU2Nyb2xsQnlQYWdlKTsKKyAgICBib29sIGRl
ZmF1bHRIYW5kbGVkID0gbV9mcmFtZS5zZXR0aW5ncygpLmV2ZW50SGFuZGxlckRyaXZlblNtb290
aEtleWJvYXJkU2Nyb2xsaW5nRW5hYmxlZCgpID8gc3RhcnRLZXlib2FyZFNjcm9sbGluZyhldmVu
dCkgOiB2aWV3LT5sb2dpY2FsU2Nyb2xsKGRpcmVjdGlvbiwgU2Nyb2xsQnlQYWdlKTsKICAgICBp
ZiAoZGVmYXVsdEhhbmRsZWQpCiAgICAgICAgIGV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7CiB9
CkBAIC00MjM3LDcgKzQyMzksNyBAQCBmbG9hdCBFdmVudEhhbmRsZXI6OnNjcm9sbERpc3RhbmNl
KFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5CiAgICAgICAgICAg
ICByZXR1cm4gbV9mcmFtZS52aWV3KCktPnZlcnRpY2FsU2Nyb2xsYmFyKCk7CiAgICAgICAgIHJl
dHVybiBtX2ZyYW1lLnZpZXcoKS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpOwogICAgIH0oKTsKLSAg
ICAKKwogICAgIHN3aXRjaCAoZ3JhbnVsYXJpdHkpIHsKICAgICBjYXNlIFNjcm9sbEdyYW51bGFy
aXR5OjpTY3JvbGxCeUxpbmU6CiAgICAgICAgIHJldHVybiBzY3JvbGxiYXItPmxpbmVTdGVwKCk7
CkBAIC00MjUyLDYyICs0MjU0LDI4IEBAIGZsb2F0IEV2ZW50SGFuZGxlcjo6c2Nyb2xsRGlzdGFu
Y2UoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkKICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1ib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxl
S2V5Ym9hcmRTY3JvbGxpbmcoS2V5Ym9hcmRFdmVudCYgZXZlbnQpCit2b2lkIEV2ZW50SGFuZGxl
cjo6c3RvcEtleWJvYXJkU2Nyb2xsaW5nKCkKIHsKICAgICBSZWYgcHJvdGVjdGVkRnJhbWUgPSBt
X2ZyYW1lOwotICAgIC8vIEZJWE1FIChidWcgMjI3NDU5KTogVGhpcyBsb2dpYyBkb2VzIG5vdCBh
Y2NvdW50IGZvciB3cml0aW5nLW1vZGUuCi0KLSAgICBlbnVtIGNsYXNzIEtleSA6IHVpbnQ4X3Qg
eyBMZWZ0QXJyb3csIFJpZ2h0QXJyb3csIFVwQXJyb3csIERvd25BcnJvdywgU3BhY2UgfTsKLQot
ICAgIEtleSBrZXk7Ci0gICAgaWYgKGV2ZW50LmtleUlkZW50aWZpZXIoKSA9PSAiTGVmdCIpCi0g
ICAgICAgIGtleSA9IEtleTo6TGVmdEFycm93OwotICAgIGVsc2UgaWYgKGV2ZW50LmtleUlkZW50
aWZpZXIoKSA9PSAiUmlnaHQiKQotICAgICAgICBrZXkgPSBLZXk6OlJpZ2h0QXJyb3c7Ci0gICAg
ZWxzZSBpZiAoZXZlbnQua2V5SWRlbnRpZmllcigpID09ICJVcCIpCi0gICAgICAgIGtleSA9IEtl
eTo6VXBBcnJvdzsKLSAgICBlbHNlIGlmIChldmVudC5rZXlJZGVudGlmaWVyKCkgPT0gIkRvd24i
KQotICAgICAgICBrZXkgPSBLZXk6OkRvd25BcnJvdzsKLSAgICBlbHNlIGlmIChldmVudC5jaGFy
Q29kZSgpID09ICcgJykKLSAgICAgICAga2V5ID0gS2V5OjpTcGFjZTsKLSAgICBlbHNlCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLnZpZXcoKTsK
IAotICAgIGF1dG8gZ3JhbnVsYXJpdHkgPSBbJl0gewotICAgICAgICBzd2l0Y2ggKGtleSkgewot
ICAgICAgICBjYXNlIEtleTo6TGVmdEFycm93OgotICAgICAgICBjYXNlIEtleTo6UmlnaHRBcnJv
dzoKLSAgICAgICAgICAgIHJldHVybiBldmVudC5hbHRLZXkoKSA/IFNjcm9sbEdyYW51bGFyaXR5
OjpTY3JvbGxCeVBhZ2UgOiBTY3JvbGxHcmFudWxhcml0eTo6U2Nyb2xsQnlMaW5lOwotICAgICAg
ICBjYXNlIEtleTo6VXBBcnJvdzoKLSAgICAgICAgY2FzZSBLZXk6OkRvd25BcnJvdzoKLSAgICAg
ICAgICAgIGlmIChldmVudC5tZXRhS2V5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFNjcm9s
bEdyYW51bGFyaXR5OjpTY3JvbGxCeURvY3VtZW50OwotICAgICAgICAgICAgaWYgKGV2ZW50LmFs
dEtleSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBTY3JvbGxHcmFudWxhcml0eTo6U2Nyb2xs
QnlQYWdlOwotICAgICAgICAgICAgcmV0dXJuIFNjcm9sbEdyYW51bGFyaXR5OjpTY3JvbGxCeUxp
bmU7Ci0gICAgICAgIGNhc2UgS2V5OjpTcGFjZToKLSAgICAgICAgICAgIHJldHVybiBTY3JvbGxH
cmFudWxhcml0eTo6U2Nyb2xsQnlQYWdlOwotICAgICAgICB9OwotICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0oKTsKKyAgICBLZXlib2FyZFNjcm9sbGluZ0FuaW1h
dG9yKiBhbmltYXRvciA9IHZpZXctPnNjcm9sbEFuaW1hdG9yKCkua2V5Ym9hcmRTY3JvbGxpbmdB
bmltYXRvcigpOwogCi0gICAgYXV0byBkaXJlY3Rpb24gPSBbJl0gewotICAgICAgICBzd2l0Y2gg
KGtleSkgewotICAgICAgICBjYXNlIEtleTo6TGVmdEFycm93OgotICAgICAgICAgICAgcmV0dXJu
IFNjcm9sbERpcmVjdGlvbjo6U2Nyb2xsTGVmdDsKLSAgICAgICAgY2FzZSBLZXk6OlJpZ2h0QXJy
b3c6Ci0gICAgICAgICAgICByZXR1cm4gU2Nyb2xsRGlyZWN0aW9uOjpTY3JvbGxSaWdodDsKLSAg
ICAgICAgY2FzZSBLZXk6OlVwQXJyb3c6Ci0gICAgICAgICAgICByZXR1cm4gU2Nyb2xsRGlyZWN0
aW9uOjpTY3JvbGxVcDsKLSAgICAgICAgY2FzZSBLZXk6OkRvd25BcnJvdzoKLSAgICAgICAgICAg
IHJldHVybiBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbERvd247Ci0gICAgICAgIGNhc2UgS2V5OjpT
cGFjZToKLSAgICAgICAgICAgIHJldHVybiBldmVudC5zaGlmdEtleSgpID8gU2Nyb2xsRGlyZWN0
aW9uOjpTY3JvbGxVcCA6IFNjcm9sbERpcmVjdGlvbjo6U2Nyb2xsRG93bjsKLSAgICAgICAgfQot
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0oKTsKKyAgICBpZiAo
YW5pbWF0b3IpCisgICAgICAgIGFuaW1hdG9yLT5oYW5kbGVLZXlVcEV2ZW50KCk7Cit9CisKK2Jv
b2wgRXZlbnRIYW5kbGVyOjpzdGFydEtleWJvYXJkU2Nyb2xsaW5nKEtleWJvYXJkRXZlbnQmIGV2
ZW50KQoreworICAgIFJlZiBwcm90ZWN0ZWRGcmFtZSA9IG1fZnJhbWU7CisgICAgRnJhbWVWaWV3
KiB2aWV3ID0gbV9mcmFtZS52aWV3KCk7CisKKyAgICBLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9y
KiBhbmltYXRvciA9IHZpZXctPnNjcm9sbEFuaW1hdG9yKCkua2V5Ym9hcmRTY3JvbGxpbmdBbmlt
YXRvcigpOwogCi0gICAgcmV0dXJuIEV2ZW50SGFuZGxlcjo6c2Nyb2xsUmVjdXJzaXZlbHkoZGly
ZWN0aW9uLCBncmFudWxhcml0eSwgbnVsbHB0cik7CisgICAgaWYgKGFuaW1hdG9yKQorICAgICAg
ICByZXR1cm4gYW5pbWF0b3ItPmJlZ2luS2V5Ym9hcmRTY3JvbGxHZXN0dXJlKGV2ZW50KTsKKwor
ICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBFdmVudEhhbmRsZXI6OmRlZmF1bHRBcnJvd0V2
ZW50SGFuZGxlcihGb2N1c0RpcmVjdGlvbiBmb2N1c0RpcmVjdGlvbiwgS2V5Ym9hcmRFdmVudCYg
ZXZlbnQpCkBAIC00MzE2LDcgKzQyODQsNyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6ZGVmYXVsdEFy
cm93RXZlbnRIYW5kbGVyKEZvY3VzRGlyZWN0aW9uIGZvY3VzRGlyZWN0aW9uLCBLZXlibwogCiAg
ICAgaWYgKCFpc1NwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZCgmbV9mcmFtZSkpIHsKICAgICAgICAg
aWYgKG1fZnJhbWUuc2V0dGluZ3MoKS5ldmVudEhhbmRsZXJEcml2ZW5TbW9vdGhLZXlib2FyZFNj
cm9sbGluZ0VuYWJsZWQoKSkKLSAgICAgICAgICAgIGhhbmRsZUtleWJvYXJkU2Nyb2xsaW5nKGV2
ZW50KTsKKyAgICAgICAgICAgIHN0YXJ0S2V5Ym9hcmRTY3JvbGxpbmcoZXZlbnQpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAppbmRleCBkNWNh
YTY1YjFmZTI2NTBjMDJhOTBlMTMyYjI4Mzk4MTUyOTAxMWU1Li5kZjlkNmM3MDc0MjA2ZmY4MzJm
YTY4ZDkzMzcxMjgzY2M4ZWMzYjYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKQEAg
LTM3Nyw3ICszNzcsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgaGFuZGxlTW91c2VQcmVzc0V2ZW50
VHJpcGxlQ2xpY2soY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYpOwogCiAgICAg
ZmxvYXQgc2Nyb2xsRGlzdGFuY2UoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSk7
Ci0gICAgYm9vbCBoYW5kbGVLZXlib2FyZFNjcm9sbGluZyhLZXlib2FyZEV2ZW50Jik7CisgICAg
Ym9vbCBzdGFydEtleWJvYXJkU2Nyb2xsaW5nKEtleWJvYXJkRXZlbnQmKTsKKyAgICB2b2lkIHN0
b3BLZXlib2FyZFNjcm9sbGluZygpOwogCiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKICAgICBi
b29sIGhhbmRsZU1vdXNlRHJhZ2dlZEV2ZW50KGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJl
c3VsdHMmLCBDaGVja0RyYWdIeXN0ZXJlc2lzID0gU2hvdWxkQ2hlY2tEcmFnSHlzdGVyZXNpcyk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LZXlib2FyZFNjcm9sbGluZ0Fu
aW1hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tleWJvYXJkU2Nyb2xsaW5nQW5p
bWF0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFhODZiYmViODM2OTQ2YjQzMTg1M2YxMmIyN2JkM2U2OTg5
MmFlZGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LZXlib2Fy
ZFNjcm9sbGluZ0FuaW1hdG9yLmNwcApAQCAtMCwwICsxLDMwOCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLmgi
CisKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKKyNp
bmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgorI2luY2x1ZGUgIldyaXRpbmdNb2RlLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcjo6S2V5Ym9hcmRT
Y3JvbGxpbmdBbmltYXRvcihTY3JvbGxBbmltYXRvciYgc2Nyb2xsQW5pbWF0b3IsIFNjcm9sbENv
bnRyb2xsZXImIHNjcm9sbENvbnRyb2xsZXIpCisgICAgOiBtX3Njcm9sbEFuaW1hdG9yKHNjcm9s
bEFuaW1hdG9yKQorICAgICwgbV9zY3JvbGxDb250cm9sbGVyKHNjcm9sbENvbnRyb2xsZXIpCit7
Cit9CisKK1JlY3RFZGdlczxib29sPiBLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yOjpzY3JvbGxh
YmxlRGlyZWN0aW9uc0Zyb21PZmZzZXQoRmxvYXRQb2ludCBvZmZzZXQpIGNvbnN0Cit7CisgICAg
YXV0byBtaW5pbXVtU2Nyb2xsUG9zaXRpb24gPSBtX3Njcm9sbEFuaW1hdG9yLnNjcm9sbGFibGVB
cmVhKCkubWluaW11bVNjcm9sbFBvc2l0aW9uKCk7CisgICAgYXV0byBtYXhpbXVtU2Nyb2xsUG9z
aXRpb24gPSBtX3Njcm9sbEFuaW1hdG9yLnNjcm9sbGFibGVBcmVhKCkubWF4aW11bVNjcm9sbFBv
c2l0aW9uKCk7CisKKyAgICBSZWN0RWRnZXM8Ym9vbD4gZWRnZXM7CisKKyAgICBlZGdlcy5zZXRU
b3Aob2Zmc2V0LnkoKSA+IG1pbmltdW1TY3JvbGxQb3NpdGlvbi55KCkpOworICAgIGVkZ2VzLnNl
dEJvdHRvbShvZmZzZXQueSgpIDwgbWF4aW11bVNjcm9sbFBvc2l0aW9uLnkoKSk7CisgICAgZWRn
ZXMuc2V0TGVmdChvZmZzZXQueCgpID4gbWluaW11bVNjcm9sbFBvc2l0aW9uLngoKSk7CisgICAg
ZWRnZXMuc2V0UmlnaHQob2Zmc2V0LngoKSA8IG1heGltdW1TY3JvbGxQb3NpdGlvbi54KCkpOwor
CisgICAgcmV0dXJuIGVkZ2VzOworfQorCitzdGF0aWMgQm94U2lkZSBib3hTaWRlRm9yRGlyZWN0
aW9uKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgc3dpdGNoIChkaXJlY3Rpb24p
IHsKKyAgICBjYXNlIFNjcm9sbERpcmVjdGlvbjo6U2Nyb2xsVXA6CisgICAgICAgIHJldHVybiBC
b3hTaWRlOjpUb3A7CisgICAgY2FzZSBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbERvd246CisgICAg
ICAgIHJldHVybiBCb3hTaWRlOjpCb3R0b207CisgICAgY2FzZSBTY3JvbGxEaXJlY3Rpb246OlNj
cm9sbExlZnQ6CisgICAgICAgIHJldHVybiBCb3hTaWRlOjpMZWZ0OworICAgIGNhc2UgU2Nyb2xs
RGlyZWN0aW9uOjpTY3JvbGxSaWdodDoKKyAgICAgICAgcmV0dXJuIEJveFNpZGU6OlJpZ2h0Owor
ICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gQm94U2lkZTo6VG9w
OworfQorCitzdGF0aWMgRmxvYXRTaXplIHBlcnBlbmRpY3VsYXJBYnNvbHV0ZVVuaXRWZWN0b3Io
U2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewor
ICAgIGNhc2UgU2Nyb2xsRGlyZWN0aW9uOjpTY3JvbGxVcDoKKyAgICBjYXNlIFNjcm9sbERpcmVj
dGlvbjo6U2Nyb2xsRG93bjoKKyAgICAgICAgcmV0dXJuIHsgMSwgMCB9OworICAgIGNhc2UgU2Ny
b2xsRGlyZWN0aW9uOjpTY3JvbGxMZWZ0OgorICAgIGNhc2UgU2Nyb2xsRGlyZWN0aW9uOjpTY3Jv
bGxSaWdodDoKKyAgICAgICAgcmV0dXJuIHsgMCwgMSB9OworICAgIH0KKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4geyB9OworfQorCit2b2lkIEtleWJvYXJkU2Nyb2xsaW5n
QW5pbWF0b3I6OnVwZGF0ZUtleWJvYXJkU2Nyb2xsUG9zaXRpb24oTW9ub3RvbmljVGltZSBjdXJy
ZW50VGltZSkKK3sKKyAgICBhdXRvIGZvcmNlID0gRmxvYXRTaXplIHsgfTsKKyAgICBhdXRvIGF4
ZXNUb0FwcGx5U3ByaW5nID0gRmxvYXRTaXplIHsgMSwgMSB9OworICAgIEtleWJvYXJkU2Nyb2xs
UGFyYW1ldGVycyBwYXJhbXMgPSBLZXlib2FyZFNjcm9sbFBhcmFtZXRlcnM6OnBhcmFtZXRlcnMo
KTsKKworICAgIGlmIChtX2N1cnJlbnRLZXlib2FyZFNjcm9sbCkgeworICAgICAgICBhdXRvIHNj
cm9sbGFibGVEaXJlY3Rpb25zID0gc2Nyb2xsYWJsZURpcmVjdGlvbnNGcm9tT2Zmc2V0KG1fc2Ny
b2xsQW5pbWF0b3IuY3VycmVudFBvc2l0aW9uKCkpOworICAgICAgICBhdXRvIGRpcmVjdGlvbiA9
IG1fY3VycmVudEtleWJvYXJkU2Nyb2xsLT5kaXJlY3Rpb247CisKKyAgICAgICAgaWYgKHNjcm9s
bGFibGVEaXJlY3Rpb25zLmF0KGJveFNpZGVGb3JEaXJlY3Rpb24oZGlyZWN0aW9uKSkpIHsKKyAg
ICAgICAgICAgIC8vIEFwcGx5IHRoZSBzY3JvbGxpbmcgZm9yY2UuIE9ubHkgYXBwbHkgdGhlIHNw
cmluZyBpbiB0aGUgcGVycGVuZGljdWxhciBheGlzLAorICAgICAgICAgICAgLy8gb3RoZXJ3aXNl
IGl0IGRyYWdzIGFnYWluc3QgdGhlIGRpcmVjdGlvbiBvZiBtb3Rpb24uCisgICAgICAgICAgICBh
eGVzVG9BcHBseVNwcmluZyA9IHBlcnBlbmRpY3VsYXJBYnNvbHV0ZVVuaXRWZWN0b3IoZGlyZWN0
aW9uKTsKKyAgICAgICAgICAgIGZvcmNlID0gbV9jdXJyZW50S2V5Ym9hcmRTY3JvbGwtPmZvcmNl
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gVGhlIHNjcm9sbCB2aWV3IGNhbm5v
dCBzY3JvbGwgaW4gdGhpcyBkaXJlY3Rpb24sIGFuZCBpcyBydWJiZXItYmFuZGluZy4KKyAgICAg
ICAgICAgIC8vIEFwcGx5IGEgY29uc3RhbnQgYW5kIHNpZ25pZmljYW50IGZvcmNlOyBvdGhlcndp
c2UsIHRoZSBmb3JjZSBmb3IgYQorICAgICAgICAgICAgLy8gc2luZ2xlLWxpbmUgaW5jcmVtZW50
IGlzIG5vdCBzdHJvbmcgZW5vdWdoIHRvIHJ1YmJlci1iYW5kIHBlcmNlcHRpYmx5LgorICAgICAg
ICAgICAgZm9yY2UgPSB1bml0VmVjdG9yRm9yU2Nyb2xsRGlyZWN0aW9uKGRpcmVjdGlvbikuc2Nh
bGVkKHBhcmFtcy5ydWJiZXJCYW5kRm9yY2UpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZh
YnMobV92ZWxvY2l0eS53aWR0aCgpKSA+PSBmYWJzKG1fY3VycmVudEtleWJvYXJkU2Nyb2xsLT5t
YXhpbXVtVmVsb2NpdHkud2lkdGgoKSkpCisgICAgICAgICAgICBmb3JjZS5zZXRXaWR0aCgwKTsK
KworICAgICAgICBpZiAoZmFicyhtX3ZlbG9jaXR5LmhlaWdodCgpKSA+PSBmYWJzKG1fY3VycmVu
dEtleWJvYXJkU2Nyb2xsLT5tYXhpbXVtVmVsb2NpdHkuaGVpZ2h0KCkpKQorICAgICAgICAgICAg
Zm9yY2Uuc2V0SGVpZ2h0KDApOworICAgIH0KKworICAgIFNjcm9sbFBvc2l0aW9uIGlkZWFsUG9z
aXRpb24gPSBtX3Njcm9sbEFuaW1hdG9yLnNjcm9sbGFibGVBcmVhKCkuY29uc3RyYWluU2Nyb2xs
UG9zaXRpb24oSW50UG9pbnQobV9jdXJyZW50S2V5Ym9hcmRTY3JvbGwgPyBtX3Njcm9sbEFuaW1h
dG9yLmN1cnJlbnRQb3NpdGlvbigpIDogbV9pZGVhbFBvc2l0aW9uKSk7CisgICAgRmxvYXRTaXpl
IGRpc3BsYWNlbWVudCA9IG1fc2Nyb2xsQW5pbWF0b3IuY3VycmVudFBvc2l0aW9uKCkgLSBpZGVh
bFBvc2l0aW9uOworCisgICAgYXV0byBzcHJpbmdGb3JjZSA9IC1kaXNwbGFjZW1lbnQuc2NhbGVk
KHBhcmFtcy5zcHJpbmdTdGlmZm5lc3MpIC0gbV92ZWxvY2l0eS5zY2FsZWQocGFyYW1zLnNwcmlu
Z0RhbXBpbmcpOworICAgIGZvcmNlICs9IHNwcmluZ0ZvcmNlICogYXhlc1RvQXBwbHlTcHJpbmc7
CisKKyAgICBmbG9hdCBmcmFtZUR1cmF0aW9uID0gKGN1cnJlbnRUaW1lIC0gbV90aW1lQXRMYXN0
RnJhbWUpLnZhbHVlKCk7CisgICAgbV90aW1lQXRMYXN0RnJhbWUgPSBjdXJyZW50VGltZTsKKwor
ICAgIEZsb2F0U2l6ZSBhY2NlbGVyYXRpb24gPSBmb3JjZS5zY2FsZWQoMS4gLyBwYXJhbXMuc3By
aW5nTWFzcyk7CisgICAgbV92ZWxvY2l0eSArPSBhY2NlbGVyYXRpb24uc2NhbGVkKGZyYW1lRHVy
YXRpb24pOworICAgIEZsb2F0UG9pbnQgbmV3UG9zaXRpb24gPSBtX3Njcm9sbEFuaW1hdG9yLmN1
cnJlbnRQb3NpdGlvbigpICsgbV92ZWxvY2l0eS5zY2FsZWQoZnJhbWVEdXJhdGlvbik7CisKKyAg
ICBtX3Njcm9sbEFuaW1hdG9yLnNjcm9sbFRvUG9zaXRpb25XaXRob3V0QW5pbWF0aW9uKG5ld1Bv
c2l0aW9uKTsKKworICAgIGlmICghbV9zY3JvbGxUcmlnZ2VyaW5nS2V5SXNQcmVzc2VkICYmIG1f
dmVsb2NpdHkuZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCkgPCAxKSB7CisgICAgICAgIG1fc2Nyb2xs
Q29udHJvbGxlci5zdG9wS2V5Ym9hcmRTY3JvbGxpbmcoKTsKKyAgICAgICAgbV92ZWxvY2l0eSA9
IHsgfTsKKyAgICB9Cit9CisKK2Zsb2F0IEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3I6OnNjcm9s
bERpc3RhbmNlKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdy
YW51bGFyaXR5KSBjb25zdAoreworICAgIGF1dG8gc2Nyb2xsYmFyID0gWyZdIHsKKyAgICAgICAg
aWYgKGRpcmVjdGlvbiA9PSBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbFVwIHx8IGRpcmVjdGlvbiA9
PSBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbERvd24pCisgICAgICAgICAgICByZXR1cm4gbV9zY3Jv
bGxBbmltYXRvci5zY3JvbGxhYmxlQXJlYSgpLnZlcnRpY2FsU2Nyb2xsYmFyKCk7CisgICAgICAg
IHJldHVybiBtX3Njcm9sbEFuaW1hdG9yLnNjcm9sbGFibGVBcmVhKCkuaG9yaXpvbnRhbFNjcm9s
bGJhcigpOworICAgIH0oKTsKKworICAgIHN3aXRjaCAoZ3JhbnVsYXJpdHkpIHsKKyAgICBjYXNl
IFNjcm9sbEdyYW51bGFyaXR5OjpTY3JvbGxCeUxpbmU6CisgICAgICAgIHJldHVybiBzY3JvbGxi
YXItPmxpbmVTdGVwKCk7CisgICAgY2FzZSBTY3JvbGxHcmFudWxhcml0eTo6U2Nyb2xsQnlQYWdl
OgorICAgICAgICByZXR1cm4gc2Nyb2xsYmFyLT5wYWdlU3RlcCgpOworICAgIGNhc2UgU2Nyb2xs
R3JhbnVsYXJpdHk6OlNjcm9sbEJ5RG9jdW1lbnQ6CisgICAgICAgIHJldHVybiBzY3JvbGxiYXIt
PnRvdGFsU2l6ZSgpOworICAgIGNhc2UgU2Nyb2xsR3JhbnVsYXJpdHk6OlNjcm9sbEJ5UGl4ZWw6
CisgICAgICAgIHJldHVybiBzY3JvbGxiYXItPnBpeGVsU3RlcCgpOworICAgIH0KKworICAgIHJl
dHVybiAwOworfQorCitzdGQ6Om9wdGlvbmFsPEtleWJvYXJkU2Nyb2xsPiBLZXlib2FyZFNjcm9s
bGluZ0FuaW1hdG9yOjprZXlib2FyZFNjcm9sbEZvcktleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVu
dCYgZXZlbnQpIGNvbnN0Cit7CisgICAgLy8gRklYTUUgKGJ1ZyAyMjc0NTkpOiBUaGlzIGxvZ2lj
IGRvZXMgbm90IGFjY291bnQgZm9yIHdyaXRpbmctbW9kZS4KKworICAgIGVudW0gY2xhc3MgS2V5
IDogdWludDhfdCB7IExlZnRBcnJvdywgUmlnaHRBcnJvdywgVXBBcnJvdywgRG93bkFycm93LCBT
cGFjZSB9OworCisgICAgS2V5IGtleTsKKyAgICBpZiAoZXZlbnQua2V5SWRlbnRpZmllcigpID09
ICJMZWZ0IikKKyAgICAgICAga2V5ID0gS2V5OjpMZWZ0QXJyb3c7CisgICAgZWxzZSBpZiAoZXZl
bnQua2V5SWRlbnRpZmllcigpID09ICJSaWdodCIpCisgICAgICAgIGtleSA9IEtleTo6UmlnaHRB
cnJvdzsKKyAgICBlbHNlIGlmIChldmVudC5rZXlJZGVudGlmaWVyKCkgPT0gIlVwIikKKyAgICAg
ICAga2V5ID0gS2V5OjpVcEFycm93OworICAgIGVsc2UgaWYgKGV2ZW50LmtleUlkZW50aWZpZXIo
KSA9PSAiRG93biIpCisgICAgICAgIGtleSA9IEtleTo6RG93bkFycm93OworICAgIGVsc2UgaWYg
KGV2ZW50LmNoYXJDb2RlKCkgPT0gJyAnKQorICAgICAgICBrZXkgPSBLZXk6OlNwYWNlOworICAg
IGVsc2UKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGF1dG8gZ3JhbnVsYXJp
dHkgPSBbJl0geworICAgICAgICBzd2l0Y2ggKGtleSkgeworICAgICAgICBjYXNlIEtleTo6TGVm
dEFycm93OgorICAgICAgICBjYXNlIEtleTo6UmlnaHRBcnJvdzoKKyAgICAgICAgICAgIHJldHVy
biBldmVudC5hbHRLZXkoKSA/IFNjcm9sbEdyYW51bGFyaXR5OjpTY3JvbGxCeVBhZ2UgOiBTY3Jv
bGxHcmFudWxhcml0eTo6U2Nyb2xsQnlMaW5lOworICAgICAgICBjYXNlIEtleTo6VXBBcnJvdzoK
KyAgICAgICAgY2FzZSBLZXk6OkRvd25BcnJvdzoKKyAgICAgICAgICAgIGlmIChldmVudC5tZXRh
S2V5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFNjcm9sbEdyYW51bGFyaXR5OjpTY3JvbGxC
eURvY3VtZW50OworICAgICAgICAgICAgaWYgKGV2ZW50LmFsdEtleSgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBTY3JvbGxHcmFudWxhcml0eTo6U2Nyb2xsQnlQYWdlOworICAgICAgICAgICAg
cmV0dXJuIFNjcm9sbEdyYW51bGFyaXR5OjpTY3JvbGxCeUxpbmU7CisgICAgICAgIGNhc2UgS2V5
OjpTcGFjZToKKyAgICAgICAgICAgIHJldHVybiBTY3JvbGxHcmFudWxhcml0eTo6U2Nyb2xsQnlQ
YWdlOworICAgICAgICB9OworICAgIH0oKTsKKworICAgIGF1dG8gZGlyZWN0aW9uID0gWyZdIHsK
KyAgICAgICAgc3dpdGNoIChrZXkpIHsKKyAgICAgICAgY2FzZSBLZXk6OkxlZnRBcnJvdzoKKyAg
ICAgICAgICAgIHJldHVybiBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbExlZnQ7CisgICAgICAgIGNh
c2UgS2V5OjpSaWdodEFycm93OgorICAgICAgICAgICAgcmV0dXJuIFNjcm9sbERpcmVjdGlvbjo6
U2Nyb2xsUmlnaHQ7CisgICAgICAgIGNhc2UgS2V5OjpVcEFycm93OgorICAgICAgICAgICAgcmV0
dXJuIFNjcm9sbERpcmVjdGlvbjo6U2Nyb2xsVXA7CisgICAgICAgIGNhc2UgS2V5OjpEb3duQXJy
b3c6CisgICAgICAgICAgICByZXR1cm4gU2Nyb2xsRGlyZWN0aW9uOjpTY3JvbGxEb3duOworICAg
ICAgICBjYXNlIEtleTo6U3BhY2U6CisgICAgICAgICAgICByZXR1cm4gZXZlbnQuc2hpZnRLZXko
KSA/IFNjcm9sbERpcmVjdGlvbjo6U2Nyb2xsVXAgOiBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbERv
d247CisgICAgICAgIH0KKyAgICB9KCk7CisKKyAgICBmbG9hdCBkaXN0YW5jZSA9IHNjcm9sbERp
c3RhbmNlKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOworCisgICAgS2V5Ym9hcmRTY3JvbGwgc2Ny
b2xsOworCisgICAgc2Nyb2xsLm9mZnNldCA9IHVuaXRWZWN0b3JGb3JTY3JvbGxEaXJlY3Rpb24o
ZGlyZWN0aW9uKS5zY2FsZWQoZGlzdGFuY2UpOworICAgIHNjcm9sbC5ncmFudWxhcml0eSA9IGdy
YW51bGFyaXR5OworICAgIHNjcm9sbC5kaXJlY3Rpb24gPSBkaXJlY3Rpb247CisgICAgc2Nyb2xs
Lm1heGltdW1WZWxvY2l0eSA9IHNjcm9sbC5vZmZzZXQuc2NhbGVkKEtleWJvYXJkU2Nyb2xsUGFy
YW1ldGVyczo6cGFyYW1ldGVycygpLm1heGltdW1WZWxvY2l0eU11bHRpcGxpZXIpOworICAgIHNj
cm9sbC5mb3JjZSA9IHNjcm9sbC5tYXhpbXVtVmVsb2NpdHkuc2NhbGVkKEtleWJvYXJkU2Nyb2xs
UGFyYW1ldGVyczo6cGFyYW1ldGVycygpLnNwcmluZ01hc3MgLyBLZXlib2FyZFNjcm9sbFBhcmFt
ZXRlcnM6OnBhcmFtZXRlcnMoKS50aW1lVG9NYXhpbXVtVmVsb2NpdHkpOworCisgICAgcmV0dXJu
IHNjcm9sbDsKK30KKworYm9vbCBLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yOjpiZWdpbktleWJv
YXJkU2Nyb2xsR2VzdHVyZShLZXlib2FyZEV2ZW50JiBldmVudCkKK3sKKyAgICBhdXRvIHNjcm9s
bCA9IGtleWJvYXJkU2Nyb2xsRm9yS2V5Ym9hcmRFdmVudChldmVudCk7CisKKyAgICBpZiAoIXNj
cm9sbCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9jdXJyZW50S2V5Ym9hcmRTY3Jv
bGwgPSBzY3JvbGw7CisKKyAgICBpZiAoZXZlbnQudHlwZSgpICE9IGV2ZW50TmFtZXMoKS5rZXlk
b3duRXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX3Njcm9sbFRyaWdn
ZXJpbmdLZXlJc1ByZXNzZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX2N1
cnJlbnRLZXlib2FyZFNjcm9sbC0+Z3JhbnVsYXJpdHkgPT0gU2Nyb2xsR3JhbnVsYXJpdHk6OlNj
cm9sbEJ5RG9jdW1lbnQpIHsKKyAgICAgICAgbV92ZWxvY2l0eSA9IHsgfTsKKyAgICAgICAgc3Rv
cEtleWJvYXJkU2Nyb2xsQW5pbWF0aW9uKCk7CisgICAgICAgIGF1dG8gbmV3UG9zaXRpb24gPSBJ
bnRQb2ludChtX3Njcm9sbEFuaW1hdG9yLmN1cnJlbnRQb3NpdGlvbigpICsgbV9jdXJyZW50S2V5
Ym9hcmRTY3JvbGwtPm9mZnNldCk7CisgICAgICAgIG1fc2Nyb2xsQW5pbWF0b3Iuc2Nyb2xsVG9Q
b3NpdGlvbldpdGhBbmltYXRpb24obmV3UG9zaXRpb24pOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICBtX3RpbWVBdExhc3RGcmFtZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwor
ICAgIG1fc2Nyb2xsVHJpZ2dlcmluZ0tleUlzUHJlc3NlZCA9IHRydWU7CisKKyAgICBtX2lkZWFs
UG9zaXRpb25Gb3JNaW5pbXVtVHJhdmVsID0gbV9zY3JvbGxBbmltYXRvci5jdXJyZW50UG9zaXRp
b24oKSArIG1fY3VycmVudEtleWJvYXJkU2Nyb2xsLT5vZmZzZXQ7CisgICAgbV9zY3JvbGxDb250
cm9sbGVyLmJlZ2luS2V5Ym9hcmRTY3JvbGxpbmcoKTsKKworICAgIHJldHVybiB0cnVlOworfQor
CitzdGF0aWMgU2Nyb2xsUG9zaXRpb24gZmFydGhlc3RQb2ludEluRGlyZWN0aW9uKEZsb2F0UG9p
bnQgYSwgRmxvYXRQb2ludCBiLCBTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIHN3
aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBTY3JvbGxEaXJlY3Rpb246OlNjcm9sbFVwOgor
ICAgICAgICByZXR1cm4gU2Nyb2xsUG9zaXRpb24oYS54KCksIHN0ZDo6bWluKGEueSgpLCBiLnko
KSkpOworICAgIGNhc2UgU2Nyb2xsRGlyZWN0aW9uOjpTY3JvbGxEb3duOgorICAgICAgICByZXR1
cm4gU2Nyb2xsUG9zaXRpb24oYS54KCksIHN0ZDo6bWF4KGEueSgpLCBiLnkoKSkpOworICAgIGNh
c2UgU2Nyb2xsRGlyZWN0aW9uOjpTY3JvbGxMZWZ0OgorICAgICAgICByZXR1cm4gU2Nyb2xsUG9z
aXRpb24oc3RkOjptaW4oYS54KCksIGIueCgpKSwgYS55KCkpOworICAgIGNhc2UgU2Nyb2xsRGly
ZWN0aW9uOjpTY3JvbGxSaWdodDoKKyAgICAgICAgcmV0dXJuIFNjcm9sbFBvc2l0aW9uKHN0ZDo6
bWF4KGEueCgpLCBiLngoKSksIGEueSgpKTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4geyB9OworfQorCit2b2lkIEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0
b3I6OnN0b3BLZXlib2FyZFNjcm9sbEFuaW1hdGlvbigpCit7CisgICAgaWYgKCFtX2N1cnJlbnRL
ZXlib2FyZFNjcm9sbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBwYXJhbXMgPSBLZXli
b2FyZFNjcm9sbFBhcmFtZXRlcnM6OnBhcmFtZXRlcnMoKTsKKworICAgIC8vIERldGVybWluZSB0
aGUgc2V0dGxpbmcgcG9zaXRpb24gb2YgdGhlIHNwcmluZywgY29uc2VydmluZyB0aGUgc3lzdGVt
J3MgY3VycmVudCBlbmVyZ3kuCisgICAgLy8gS2luZXRpYyA9IGVsYXN0aWMgcG90ZW50aWFsCisg
ICAgLy8gMS8yICogbSAqIHZeMiA9IDEvMiAqIGsgKiB4XjIKKyAgICAvLyB4ID0gc3FydCh2XjIg
KiBtIC8gaykKKyAgICBhdXRvIGRpc3BsYWNlbWVudE1hZ25pdHVkZVNxdWFyZWQgPSAobV92ZWxv
Y2l0eSAqIG1fdmVsb2NpdHkpLnNjYWxlZChwYXJhbXMuc3ByaW5nTWFzcyAvIHBhcmFtcy5zcHJp
bmdTdGlmZm5lc3MpOworICAgIEZsb2F0U2l6ZSBkaXNwbGFjZW1lbnQgPSB7CisgICAgICAgIHN0
ZDo6Y29weXNpZ24oc3FydChkaXNwbGFjZW1lbnRNYWduaXR1ZGVTcXVhcmVkLndpZHRoKCkpLCBt
X3ZlbG9jaXR5LndpZHRoKCkpLAorICAgICAgICBzdGQ6OmNvcHlzaWduKHNxcnQoZGlzcGxhY2Vt
ZW50TWFnbml0dWRlU3F1YXJlZC5oZWlnaHQoKSksIG1fdmVsb2NpdHkuaGVpZ2h0KCkpCisgICAg
fTsKKworICAgIC8vIElmIHRoZSBzcHJpbmcgd291bGQgc2V0dGxlIGJlZm9yZSB0aGUgbWluaW11
bSB0cmF2ZWwgZGlzdGFuY2UKKyAgICAvLyBmb3IgYW4gaW5zdGFudGFuZW91cyB0YXAsIG1vdmUg
dGhlIHNldHRsaW5nIHBvc2l0aW9uIG9mIHRoZSBzcHJpbmcKKyAgICAvLyBvdXQgdG8gdGhhdCBw
b2ludC4KKyAgICBTY3JvbGxQb3NpdGlvbiBmYXJ0aGVzdFBvaW50ID0gZmFydGhlc3RQb2ludElu
RGlyZWN0aW9uKG1fc2Nyb2xsQW5pbWF0b3IuY3VycmVudFBvc2l0aW9uKCkgKyBkaXNwbGFjZW1l
bnQsIG1faWRlYWxQb3NpdGlvbkZvck1pbmltdW1UcmF2ZWwsIG1fY3VycmVudEtleWJvYXJkU2Ny
b2xsLT5kaXJlY3Rpb24pOworICAgIG1faWRlYWxQb3NpdGlvbiA9IG1fc2Nyb2xsQW5pbWF0b3Iu
c2Nyb2xsYWJsZUFyZWEoKS5jb25zdHJhaW5TY3JvbGxQb3NpdGlvbihmYXJ0aGVzdFBvaW50KTsK
KworICAgIG1fY3VycmVudEtleWJvYXJkU2Nyb2xsID0gc3RkOjpudWxsb3B0OworfQorCit2b2lk
IEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3I6OmhhbmRsZUtleVVwRXZlbnQoKQoreworICAgIGlm
ICghbV9zY3JvbGxUcmlnZ2VyaW5nS2V5SXNQcmVzc2VkKQorICAgICAgICByZXR1cm47CisKKyAg
ICBzdG9wS2V5Ym9hcmRTY3JvbGxBbmltYXRpb24oKTsKKyAgICBtX3Njcm9sbFRyaWdnZXJpbmdL
ZXlJc1ByZXNzZWQgPSBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmY1Nzg0MDczYTJkZDJhNjZkNWNlN2M0ZjVjMWZmY2Q4MzZlNmIxYWQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LZXlib2FyZFNjcm9sbGluZ0Fu
aW1hdG9yLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIktleWJvYXJkU2Nyb2xsLmgiCisj
aW5jbHVkZSAiUmVjdEVkZ2VzLmgiCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yIHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yKTsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBLZXlib2FyZFNjcm9sbGluZ0Fu
aW1hdG9yKFNjcm9sbEFuaW1hdG9yJiwgU2Nyb2xsQ29udHJvbGxlciYpOworCisgICAgYm9vbCBi
ZWdpbktleWJvYXJkU2Nyb2xsR2VzdHVyZShLZXlib2FyZEV2ZW50Jik7CisgICAgdm9pZCBoYW5k
bGVLZXlVcEV2ZW50KCk7CisgICAgdm9pZCB1cGRhdGVLZXlib2FyZFNjcm9sbFBvc2l0aW9uKE1v
bm90b25pY1RpbWUpOworCitwcml2YXRlOgorICAgIHZvaWQgc3RvcEtleWJvYXJkU2Nyb2xsQW5p
bWF0aW9uKCk7CisgICAgUmVjdEVkZ2VzPGJvb2w+IHNjcm9sbGFibGVEaXJlY3Rpb25zRnJvbU9m
ZnNldChGbG9hdFBvaW50KSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPEtleWJvYXJkU2Nyb2xs
PiBrZXlib2FyZFNjcm9sbEZvcktleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCYpIGNvbnN0Owor
ICAgIGZsb2F0IHNjcm9sbERpc3RhbmNlKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJp
dHkpIGNvbnN0OworCisgICAgU2Nyb2xsQW5pbWF0b3ImIG1fc2Nyb2xsQW5pbWF0b3I7CisgICAg
U2Nyb2xsQ29udHJvbGxlciYgbV9zY3JvbGxDb250cm9sbGVyOworICAgIHN0ZDo6b3B0aW9uYWw8
V2ViQ29yZTo6S2V5Ym9hcmRTY3JvbGw+IG1fY3VycmVudEtleWJvYXJkU2Nyb2xsOworICAgIGJv
b2wgbV9zY3JvbGxUcmlnZ2VyaW5nS2V5SXNQcmVzc2VkOworICAgIEZsb2F0U2l6ZSBtX3ZlbG9j
aXR5OworICAgIE1vbm90b25pY1RpbWUgbV90aW1lQXRMYXN0RnJhbWU7CisgICAgRmxvYXRQb2lu
dCBtX2lkZWFsUG9zaXRpb25Gb3JNaW5pbXVtVHJhdmVsOworICAgIEZsb2F0UG9pbnQgbV9pZGVh
bFBvc2l0aW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCmluZGV4IDg0NmNhMDM3OTkxYTYwZmFjMDMyNWQx
YTI2YTc1NWIzOTMyMmNkZDguLjlhYzQxOWYzMDExMGNlNWNiMTBmM2FiNDJlYjNiMGUzMWYyMmNi
Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKQEAgLTMz
LDYgKzMzLDcgQEAKICNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgogCiAjaW5jbHVkZSAiRmxv
YXRQb2ludC5oIgorI2luY2x1ZGUgIktleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuaCIKICNpbmNs
dWRlICJMYXlvdXRTaXplLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCiAjaW5j
bHVkZSAiU2Nyb2xsQW5pbWF0aW9uU21vb3RoLmgiCkBAIC02Nyw2ICs2OCw3IEBAIFNjcm9sbEFu
aW1hdG9yOjpTY3JvbGxBbmltYXRvcihTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEpCiAg
ICAgICAgIFt0aGlzXSB7CiAgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhLnNldFNjcm9sbEJl
aGF2aW9yU3RhdHVzKFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbik7CiAgICAg
ICAgIH0pKQorICAgICwgbV9rZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yKG1ha2VVbmlxdWU8S2V5
Ym9hcmRTY3JvbGxpbmdBbmltYXRvcj4oKnRoaXMsIG1fc2Nyb2xsQ29udHJvbGxlcikpCiB7CiB9
CiAKQEAgLTMzMiw3ICszMzQsNyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yOjpzdGFydEFuaW1hdGlv
bkNhbGxiYWNrKFNjcm9sbENvbnRyb2xsZXImKQogewogICAgIGlmIChtX3Njcm9sbENvbnRyb2xs
ZXJBbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICByZXR1cm47Ci0gICAgICAgIAor
CiAgICAgbV9zY3JvbGxDb250cm9sbGVyQW5pbWF0aW9uVGltZXIuc3RhcnRSZXBlYXRpbmcoMV9z
IC8gNjAuKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
QW5pbWF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgKaW5k
ZXggNDNiYzI4NmMwNzE4MDg0MTY3ZmNiMThkMjE3Mzc0ZGMxODQ5NmM5OC4uYTRmMzlkNTYxYzYz
OTUxZjUzMTI5ZWZjZWY1NDI1MGUxNTlhMmJhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvci5oCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSAiRmxvYXRQb2ludC5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgogI2luY2x1ZGUgIlNjcm9sbENvbnRy
b2xsZXIuaCIKLSNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAj
aW5jbHVkZSAiV2hlZWxFdmVudFRlc3RNb25pdG9yLmgiCiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxs
b2MuaD4KQEAgLTQzLDYgKzQyLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmxv
YXRQb2ludDsKK2NsYXNzIEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3I7CiBjbGFzcyBQbGF0Zm9y
bVRvdWNoRXZlbnQ7CiBjbGFzcyBTY3JvbGxBbmltYXRpb247CiBjbGFzcyBTY3JvbGxhYmxlQXJl
YTsKQEAgLTgxLDYgKzgxLDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGhhbmRsZVdo
ZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7CiAKKyAgICBLZXlib2FyZFNjcm9s
bGluZ0FuaW1hdG9yICprZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gbV9rZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLmdldCgpOyB9CisKICNpZiBFTkFC
TEUoVE9VQ0hfRVZFTlRTKQogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVUb3VjaEV2ZW50KGNvbnN0
IFBsYXRmb3JtVG91Y2hFdmVudCYpOwogI2VuZGlmCkBAIC0xNzgsNiArMTgwLDcgQEAgcHJvdGVj
dGVkOgogICAgIEZsb2F0UG9pbnQgbV9jdXJyZW50UG9zaXRpb247CiAKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8U2Nyb2xsQW5pbWF0aW9uPiBtX3Njcm9sbEFuaW1hdGlvbjsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8S2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcj4gbV9rZXlib2FyZFNjcm9sbGluZ0FuaW1h
dG9yOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxDb250cm9sbGVyLmNwcAppbmRleCAzNmYyZjE5ZmYxZWMwOWVhNDllZDRmZDE3
ODFmYTMyNTNmYjNjZmNkLi42M2RmN2M0OGM2ZTY5MDNkYzRjMDZkYzIwN2Y3NWNmNDRkZmM4ZjVh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmNwcApAQCAt
MjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcm9sbENvbnRy
b2xsZXIuaCIKIAorI2luY2x1ZGUgIktleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuaCIKICNpbmNs
dWRlICJMYXlvdXRTaXplLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtV2hlZWxFdmVudC5oIgpAQCAtNDMsMTUgKzQ0LDE2IEBAIFNjcm9sbENvbnRyb2xsZXI6OlNj
cm9sbENvbnRyb2xsZXIoU2Nyb2xsQ29udHJvbGxlckNsaWVudCYgY2xpZW50KQogCiB2b2lkIFNj
cm9sbENvbnRyb2xsZXI6OmFuaW1hdGlvbkNhbGxiYWNrKE1vbm90b25pY1RpbWUgY3VycmVudFRp
bWUpCiB7Ci0gICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGluZywgc3RyZWFtIDw8ICJTY3JvbGxD
b250cm9sbGVyICIgPDwgdGhpcyA8PCAiIGFuaW1hdGlvbkNhbGxiYWNrOiBpc0FuaW1hdGluZ1J1
YmJlckJhbmQgIiA8PCBtX2lzQW5pbWF0aW5nUnViYmVyQmFuZCA8PCAiIGlzQW5pbWF0aW5nU2Ny
b2xsU25hcCAiIDw8IG1faXNBbmltYXRpbmdTY3JvbGxTbmFwKTsKKyAgICBMT0dfV0lUSF9TVFJF
QU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgIlNjcm9sbENvbnRyb2xsZXIgIiA8PCB0aGlzIDw8ICIg
YW5pbWF0aW9uQ2FsbGJhY2s6IGlzQW5pbWF0aW5nUnViYmVyQmFuZCAiIDw8IG1faXNBbmltYXRp
bmdSdWJiZXJCYW5kIDw8ICIgaXNBbmltYXRpbmdTY3JvbGxTbmFwICIgPDwgbV9pc0FuaW1hdGlu
Z1Njcm9sbFNuYXAgPDwgImlzQW5pbWF0aW5nS2V5Ym9hcmRTY3JvbGxpbmciIDw8IG1faXNBbmlt
YXRpbmdLZXlib2FyZFNjcm9sbGluZyk7CiAKICAgICB1cGRhdGVTY3JvbGxTbmFwQW5pbWF0aW5n
U3RhdGUoY3VycmVudFRpbWUpOwogICAgIHVwZGF0ZVJ1YmJlckJhbmRBbmltYXRpbmdTdGF0ZShj
dXJyZW50VGltZSk7CisgICAgdXBkYXRlS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRpbmdTdGF0ZShj
dXJyZW50VGltZSk7CiB9CiAKIHZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c3RhcnRPclN0b3BBbmlt
YXRpb25DYWxsYmFja3MoKQogewotICAgIGJvb2wgbmVlZHNDYWxsYmFja3MgPSBtX2lzQW5pbWF0
aW5nUnViYmVyQmFuZCB8fCBtX2lzQW5pbWF0aW5nU2Nyb2xsU25hcDsKKyAgICBib29sIG5lZWRz
Q2FsbGJhY2tzID0gbV9pc0FuaW1hdGluZ1J1YmJlckJhbmQgfHwgbV9pc0FuaW1hdGluZ1Njcm9s
bFNuYXAgfHwgbV9pc0FuaW1hdGluZ0tleWJvYXJkU2Nyb2xsaW5nOwogICAgIGlmIChuZWVkc0Nh
bGxiYWNrcyA9PSBtX2lzUnVubmluZ0FuaW1hdGluZ0NhbGxiYWNrKQogICAgICAgICByZXR1cm47
CiAKQEAgLTY1LDYgKzY3LDE2IEBAIHZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c3RhcnRPclN0b3BB
bmltYXRpb25DYWxsYmFja3MoKQogICAgIG1faXNSdW5uaW5nQW5pbWF0aW5nQ2FsbGJhY2sgPSBm
YWxzZTsKIH0KIAordm9pZCBTY3JvbGxDb250cm9sbGVyOjpiZWdpbktleWJvYXJkU2Nyb2xsaW5n
KCkKK3sKKyAgICBzZXRJc0FuaW1hdGluZ0tleWJvYXJkU2Nyb2xsaW5nKHRydWUpOworfQorCit2
b2lkIFNjcm9sbENvbnRyb2xsZXI6OnN0b3BLZXlib2FyZFNjcm9sbGluZygpCit7CisgICAgc2V0
SXNBbmltYXRpbmdLZXlib2FyZFNjcm9sbGluZyhmYWxzZSk7Cit9CisKIHZvaWQgU2Nyb2xsQ29u
dHJvbGxlcjo6c2V0SXNBbmltYXRpbmdSdWJiZXJCYW5kKGJvb2wgaXNBbmltYXRpbmdSdWJiZXJC
YW5kKQogewogICAgIGlmIChpc0FuaW1hdGluZ1J1YmJlckJhbmQgPT0gbV9pc0FuaW1hdGluZ1J1
YmJlckJhbmQpCkBAIC04Myw2ICs5NSwxNSBAQCB2b2lkIFNjcm9sbENvbnRyb2xsZXI6OnNldElz
QW5pbWF0aW5nU2Nyb2xsU25hcChib29sIGlzQW5pbWF0aW5nU2Nyb2xsU25hcCkKICAgICBzdGFy
dE9yU3RvcEFuaW1hdGlvbkNhbGxiYWNrcygpOwogfQogCit2b2lkIFNjcm9sbENvbnRyb2xsZXI6
OnNldElzQW5pbWF0aW5nS2V5Ym9hcmRTY3JvbGxpbmcoYm9vbCBpc0FuaW1hdGluZ0tleWJvYXJk
U2Nyb2xsaW5nKQoreworICAgIGlmIChpc0FuaW1hdGluZ0tleWJvYXJkU2Nyb2xsaW5nID09IG1f
aXNBbmltYXRpbmdLZXlib2FyZFNjcm9sbGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9p
c0FuaW1hdGluZ0tleWJvYXJkU2Nyb2xsaW5nID0gaXNBbmltYXRpbmdLZXlib2FyZFNjcm9sbGlu
ZzsKKyAgICBzdGFydE9yU3RvcEFuaW1hdGlvbkNhbGxiYWNrcygpOworfQorCiBib29sIFNjcm9s
bENvbnRyb2xsZXI6OnVzZXNTY3JvbGxTbmFwKCkgY29uc3QKIHsKICAgICByZXR1cm4gISFtX3Nj
cm9sbFNuYXBTdGF0ZTsKQEAgLTE5OCw2ICsyMTksMTUgQEAgdm9pZCBTY3JvbGxDb250cm9sbGVy
OjpyZXNuYXBBZnRlckxheW91dCgpCiAgICAgICAgIHNldE5lYXJlc3RTY3JvbGxTbmFwSW5kZXhG
b3JBeGlzQW5kT2Zmc2V0KFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwsIG9mZnNldCk7CiAKIH0K
Kwordm9pZCBTY3JvbGxDb250cm9sbGVyOjp1cGRhdGVLZXlib2FyZFNjcm9sbGluZ0FuaW1hdGlu
Z1N0YXRlKE1vbm90b25pY1RpbWUgY3VycmVudFRpbWUpCit7CisgICAgaWYgKCFtX2lzQW5pbWF0
aW5nS2V5Ym9hcmRTY3JvbGxpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY2xpZW50Lmtl
eWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IoKS0+dXBkYXRlS2V5Ym9hcmRTY3JvbGxQb3NpdGlvbihj
dXJyZW50VGltZSk7Cit9CisKIC8vIEN1cnJlbnRseSwgb25seSBNYWMgc3VwcG9ydHMgbW9tZW50
dW0gc3JvbGxpbmctYmFzZWQgc2Nyb2xsc25hcHBpbmcgYW5kIHJ1YmJlciBiYW5kaW5nCiAvLyBz
byBhbGwgb2YgdGhlc2UgbWV0aG9kcyBhcmUgYSBub29wIG9uIG5vbi1NYWMgcGxhdGZvcm1zLgog
I2lmICFQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9s
bGVyLmgKaW5kZXggZmZhZDNiMTcxZjIyMDQwZjk5NGNmODNiM2EwOGRjZTdjOTdlM2E1Zi4uZGQ5
YzA5MjBlNGFmMWY5YmEzMjQyMWE5ZDdmZGFjMTgzYTUxZTM3MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbENvbnRyb2xsZXIuaApAQCAtMzgsNiArMzgsNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK2NsYXNzIEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3I7CiBjbGFzcyBM
YXlvdXRTaXplOwogY2xhc3MgUGxhdGZvcm1XaGVlbEV2ZW50OwogY2xhc3MgU2Nyb2xsQ29udHJv
bGxlcjsKQEAgLTcyLDYgKzczLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzdGFydEFu
aW1hdGlvbkNhbGxiYWNrKFNjcm9sbENvbnRyb2xsZXImKSA9IDA7CiAgICAgdmlydHVhbCB2b2lk
IHN0b3BBbmltYXRpb25DYWxsYmFjayhTY3JvbGxDb250cm9sbGVyJikgPSAwOwogCisgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZUtleWJvYXJkU2Nyb2xsUG9zaXRpb24oTW9ub3RvbmljVGltZSkgeyB9
CisgICAgdmlydHVhbCBLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yICprZXlib2FyZFNjcm9sbGlu
Z0FuaW1hdG9yKCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQorCiAjaWYgRU5BQkxFKFJVQkJF
Ul9CQU5ESU5HKQogICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZyhj
b25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGFs
bG93c1ZlcnRpY2FsU3RyZXRjaGluZyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBjb25zdCA9
IDA7CkBAIC0xMjEsNiArMTI1LDkgQEAgcHVibGljOgogICAgIGJvb2wgdXNlc1Njcm9sbFNuYXAo
KSBjb25zdDsKICAgICB2b2lkIHN0b3BBbGxUaW1lcnMoKTsKICAgICB2b2lkIHNjcm9sbFBvc2l0
aW9uQ2hhbmdlZCgpOworCisgICAgdm9pZCBiZWdpbktleWJvYXJkU2Nyb2xsaW5nKCk7CisgICAg
dm9pZCBzdG9wS2V5Ym9hcmRTY3JvbGxpbmcoKTsKICAgICAKICAgICAvLyBTaG91bGQgYmUgY2Fs
bGVkIHBlcmlvZGljYWxseSBieSB0aGUgY2xpZW50LiBTdGFydGVkIGJ5IHN0YXJ0QW5pbWF0aW9u
Q2FsbGJhY2soKSwgc3RvcHBlZCBieSBzdG9wQW5pbWF0aW9uQ2FsbGJhY2soKS4KICAgICB2b2lk
IGFuaW1hdGlvbkNhbGxiYWNrKE1vbm90b25pY1RpbWUpOwpAQCAtMTYzLDkgKzE3MCwxMSBAQCBw
cml2YXRlOgogCiAgICAgdm9pZCB1cGRhdGVTY3JvbGxTbmFwQW5pbWF0aW5nU3RhdGUoTW9ub3Rv
bmljVGltZSk7CiAgICAgdm9pZCB1cGRhdGVSdWJiZXJCYW5kQW5pbWF0aW5nU3RhdGUoTW9ub3Rv
bmljVGltZSk7Ci0gICAgCisgICAgdm9pZCB1cGRhdGVLZXlib2FyZFNjcm9sbGluZ0FuaW1hdGlu
Z1N0YXRlKE1vbm90b25pY1RpbWUpOworCiAgICAgdm9pZCBzZXRJc0FuaW1hdGluZ1J1YmJlckJh
bmQoYm9vbCk7CiAgICAgdm9pZCBzZXRJc0FuaW1hdGluZ1Njcm9sbFNuYXAoYm9vbCk7CisgICAg
dm9pZCBzZXRJc0FuaW1hdGluZ0tleWJvYXJkU2Nyb2xsaW5nKGJvb2wpOwogCiAjaWYgUExBVEZP
Uk0oTUFDKQogICAgIHZvaWQgc3RhcnRTY3JvbGxTbmFwQW5pbWF0aW9uKCk7CkBAIC0xOTksNiAr
MjA4LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNSdW5uaW5nQW5pbWF0aW5nQ2FsbGJhY2sg
eyBmYWxzZSB9OwogICAgIGJvb2wgbV9pc0FuaW1hdGluZ1J1YmJlckJhbmQgeyBmYWxzZSB9Owog
ICAgIGJvb2wgbV9pc0FuaW1hdGluZ1Njcm9sbFNuYXAgeyBmYWxzZSB9OworICAgIGJvb2wgbV9p
c0FuaW1hdGluZ0tleWJvYXJkU2Nyb2xsaW5nIHsgZmFsc2UgfTsKIAogI2lmIFBMQVRGT1JNKE1B
QykKICAgICBXYWxsVGltZSBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcDsK
</data>

          </attachment>
      

    </bug>

</bugzilla>