<?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>79819</bug_id>
          
          <creation_ts>2012-02-28 11:50:08 -0800</creation_ts>
          <short_desc>[chromium] Add impl-thread support for animation-timing-function</short_desc>
          <delta_ts>2012-02-29 19:34:53 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>77662</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter>vollick</reporter>
          <assigned_to>vollick</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>566933</commentid>
    <comment_count>0</comment_count>
    <who name="">vollick</who>
    <bug_when>2012-02-28 11:50:08 -0800</bug_when>
    <thetext>Add support for animation-timing-function as per http://www.w3.org/TR/css3-transitions/ on the impl-thread</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566958</commentid>
    <comment_count>1</comment_count>
      <attachid>129305</attachid>
    <who name="">vollick</who>
    <bug_when>2012-02-28 12:09:16 -0800</bug_when>
    <thetext>Created attachment 129305
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567109</commentid>
    <comment_count>2</comment_count>
      <attachid>129305</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-02-28 14:34:14 -0800</bug_when>
    <thetext>Comment on attachment 129305
Patch

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

Dumb question --- if we had N-step cubic bezier curves, could we convert this bizarreness with the per-frame 

Can you pull out the const-correctness changes to UnitBezier to a separate patch?

Can we call CCTimingFunction -&gt; CCTimingCurve?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCKeyframedAnimationCurve.cpp:-47
&gt; -    if (!keyframes.size())

can we at least put an early-check for the keyframe being at the end to make the common case fast?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCKeyframedAnimationCurve.cpp:47
&gt; +    OwnPtr&lt;Keyframe&gt; popKeyframe = keyframe;

also, do we have unit tests that insert keyframes out of order and verify that the keyframes are sorted?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCKeyframedAnimationCurve.cpp:59
&gt; +PassOwnPtr&lt;CCTimingFunction&gt; cloneTimingFunction(const CCTimingFunction* timingFunction)

This smells funny that you&apos;re allowed to clone a null timing function. I&apos;d rather ASSERT(timingFunction) and guard against null in the callers.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCKeyframedAnimationCurve.cpp:64
&gt; +    OwnPtr&lt;CCAnimationCurve&gt; curve = timingFunction-&gt;clone();

Virtuals can override return type and save you this mess, or so people far smarter than I tell me.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCKeyframedAnimationCurve.cpp:112
&gt; +    return CCFloatKeyframe::create(time(), value(), cloneTimingFunction(timingFunction()));

avoid passing null to the clone, i think

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.cpp:77
&gt; +                // FIXME: add support for steps timing function.

is this noted on the &quot;modes we need to eventually support&quot;?

Can this be implemented as a specific set of cubic bezier segments?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.cpp:82
&gt; +            case TimingFunction::CubicBezierFunction: {

Is this double-bracing in keeping with wk style? Smells funny.

&gt; Source/WebKit/chromium/tests/CCKeyframedAnimationCurveTest.cpp:218
&gt;  }

do we need tests for the cubic bezier curve itself?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567316</commentid>
    <comment_count>3</comment_count>
      <attachid>129374</attachid>
    <who name="">vollick</who>
    <bug_when>2012-02-28 18:39:05 -0800</bug_when>
    <thetext>Created attachment 129374
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567321</commentid>
    <comment_count>4</comment_count>
    <who name="">vollick</who>
    <bug_when>2012-02-28 18:53:14 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 129305 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=129305&amp;action=review
&gt; 
&gt; Dumb question --- if we had N-step cubic bezier curves, could we convert this bizarreness with the per-frame 
My goal was to closely match http://www.w3.org/TR/css3-animations/. In this document, each keyframe save the last one can be associated with a timing function, and I&apos;ve tried to do the same thing. This approach also simplifies CCKeyframed*AnimationCurve -- I just have to resample using the timing function before interpolating two keyframes.
&gt; 
&gt; Can you pull out the const-correctness changes to UnitBezier to a separate patch?
Done.
&gt; 
&gt; Can we call CCTimingFunction -&gt; CCTimingCurve?
&gt; 
It does clash a bit with the other *Curve class names, but I was trying to match http://www.w3.org/TR/css3-animations/ which uses this jargon.
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCKeyframedAnimationCurve.cpp:-47
&gt; &gt; -    if (!keyframes.size())
&gt; 
&gt; can we at least put an early-check for the keyframe being at the end to make the common case fast?
&gt; 
Done.
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCKeyframedAnimationCurve.cpp:47
&gt; &gt; +    OwnPtr&lt;Keyframe&gt; popKeyframe = keyframe;
&gt; 
&gt; also, do we have unit tests that insert keyframes out of order and verify that the keyframes are sorted?
&gt; 
Added.
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCKeyframedAnimationCurve.cpp:59
&gt; &gt; +PassOwnPtr&lt;CCTimingFunction&gt; cloneTimingFunction(const CCTimingFunction* timingFunction)
&gt; 
&gt; This smells funny that you&apos;re allowed to clone a null timing function. I&apos;d rather ASSERT(timingFunction) and guard against null in the callers.
&gt; 
Done.
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCKeyframedAnimationCurve.cpp:64
&gt; &gt; +    OwnPtr&lt;CCAnimationCurve&gt; curve = timingFunction-&gt;clone();
&gt; 
&gt; Virtuals can override return type and save you this mess, or so people far smarter than I tell me.
&gt; 
I would love to do this, but it turns out that covariant return type tricks won&apos;t work with smart pointers :( http://stackoverflow.com/questions/5969996/covariant-return-type-with-template-container
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCKeyframedAnimationCurve.cpp:112
&gt; &gt; +    return CCFloatKeyframe::create(time(), value(), cloneTimingFunction(timingFunction()));
&gt; 
&gt; avoid passing null to the clone, i think
Done.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.cpp:77
&gt; &gt; +                // FIXME: add support for steps timing function.
&gt; 
&gt; is this noted on the &quot;modes we need to eventually support&quot;?
&gt; 
Wasn&apos;t mentioned here http://www.w3.org/TR/css3-animations/#animation-timing-function_tag, so I didn&apos;t include in the list.

&gt; Can this be implemented as a specific set of cubic bezier segments?
Yes, that&apos;s a possibility.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.cpp:82
&gt; &gt; +            case TimingFunction::CubicBezierFunction: {
&gt; 
&gt; Is this double-bracing in keeping with wk style? Smells funny.
&gt; 
Removed.
&gt; &gt; Source/WebKit/chromium/tests/CCKeyframedAnimationCurveTest.cpp:218
&gt; &gt;  }
&gt; 
&gt; do we need tests for the cubic bezier curve itself?
I didn&apos;t think so since it&apos;s implemented in terms of UnitBezier. I have a very basic test in CCKeyframedAnimationCurveTest that checks that the curve is nonlinear when it should be and that it takes on sane values.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567817</commentid>
    <comment_count>5</comment_count>
      <attachid>129374</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-29 12:19:30 -0800</bug_when>
    <thetext>Comment on attachment 129374
Patch

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

R=me. Several naming nits cos that&apos;s how we roll :)

&gt; Source/WebCore/platform/graphics/chromium/cc/CCKeyframedAnimationCurve.cpp:47
&gt; +void insertKeyframe(PassOwnPtr&lt;Keyframe&gt; keyframe, Vector&lt;OwnPtr&lt;Keyframe&gt; &gt;&amp; keyframes)
&gt;  {
&gt; -    if (!keyframes.size())
&gt; -        return true;
&gt; -
&gt; -    for (size_t i = 0; i &lt; keyframes.size() - 1; ++i) {
&gt; -        if (keyframes[i].time &gt; keyframes[i+1].time)
&gt; -            return false;
&gt; +    OwnPtr&lt;Keyframe&gt; popKeyframe = keyframe;

nit: the naming here is reversed from what we normally do, although I think the logic is correct. the normal idiom is to name the parameter of type PassOwnPtr&lt;&gt; &quot;popFoo&quot; and then create a local called &quot;foo&quot; and never use the PassOwnPtr&lt;&gt; value again. http://www.webkit.org/coding/RefPtr.html has an example using PassRefPtr. this looks like the code is manipulating the PassOwnPtr&lt;&gt; value, which doesn&apos;t work since it&apos;s nulled out after assignment into a local OwnPtr&lt;&gt;

would you mind swapping the names?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCTimingFunction.cpp:32
&gt; +const double kEpsilon = 1e-6;

nit: in WebKit, constants are named the same way as other variables - there&apos;s no &quot;k&quot; prefix

&gt; Source/WebCore/platform/graphics/chromium/cc/CCTimingFunction.cpp:75
&gt; +PassOwnPtr&lt;CCTimingFunction&gt; CCEaseTimingFunction::create()

nit: it probably wouldn&apos;t hurt to put a link to the section of the CSS spec that defines these seemingly magical numbers (I see you have one in the header)

&gt; Source/WebCore/platform/graphics/chromium/cc/CCTimingFunction.h:53
&gt; +    virtual float getValue(double t) const;

nit: in headers please expand the variable name out to &apos;time&apos; just to be extra clear</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567840</commentid>
    <comment_count>6</comment_count>
      <attachid>129492</attachid>
    <who name="">vollick</who>
    <bug_when>2012-02-29 12:49:56 -0800</bug_when>
    <thetext>Created attachment 129492
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568235</commentid>
    <comment_count>7</comment_count>
      <attachid>129492</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-29 19:34:48 -0800</bug_when>
    <thetext>Comment on attachment 129492
Patch

Clearing flags on attachment: 129492

Committed r109297: &lt;http://trac.webkit.org/changeset/109297&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568236</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-29 19:34:53 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129305</attachid>
            <date>2012-02-28 12:09:16 -0800</date>
            <delta_ts>2012-02-28 18:39:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79819-20120228150915.patch</filename>
            <type>text/plain</type>
            <size>51584</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4OTg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjNjYzk5YjEzOGI1NzI2
Mjc3MTE4NWUzY2MwZDFiYWY4OGRlZGQ1Yy4uYWRiYmFjYjZlNDQzOGUxZThkODRhZGQxOWU1NTk4
M2U2NDUwOTM4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc5IEBACisyMDEyLTAyLTI4ICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQWRk
IGltcGwtdGhyZWFkIHN1cHBvcnQgZm9yIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5ODE5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvVW5pdEJlemllci5oOgorICAgICAgICAoV2Vi
Q29yZTo6VW5pdEJlemllcjo6VW5pdEJlemllcik6CisgICAgICAgIChVbml0QmV6aWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlVuaXRCZXppZXI6OnNhbXBsZUN1cnZlWCk6CisgICAgICAgIChXZWJD
b3JlOjpVbml0QmV6aWVyOjpzYW1wbGVDdXJ2ZVkpOgorICAgICAgICAoV2ViQ29yZTo6VW5pdEJl
emllcjo6c2FtcGxlQ3VydmVEZXJpdmF0aXZlWCk6CisgICAgICAgIChXZWJDb3JlOjpVbml0QmV6
aWVyOjpzb2x2ZUN1cnZlWCk6CisgICAgICAgIChXZWJDb3JlOjpVbml0QmV6aWVyOjpzb2x2ZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmlt
YXRpb25DdXJ2ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0tleWZyYW1lOjpDQ0tleWZyYW1l
KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZTo6fkND
S2V5ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZTo6dGltZSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0tleWZyYW1lOjp0aW1pbmdGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0Zsb2F0S2V5ZnJhbWU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0Zsb2F0S2V5
ZnJhbWU6OkNDRmxvYXRLZXlmcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0Zsb2F0S2V5ZnJh
bWU6On5DQ0Zsb2F0S2V5ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NGbG9hdEtleWZyYW1l
Ojp2YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0Zsb2F0S2V5ZnJhbWU6OmNsb25lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1RyYW5zZm9ybUtleWZyYW1lOjpDQ1RyYW5zZm9ybUtleWZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDVHJhbnNmb3JtS2V5ZnJhbWU6On5DQ1RyYW5zZm9ybUtleWZyYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDVHJhbnNmb3JtS2V5ZnJhbWU6OnZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDVHJhbnNmb3JtS2V5ZnJhbWU6OmNsb25lKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6Q0NLZXlmcmFtZWRGbG9hdEFuaW1h
dGlvbkN1cnZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25D
dXJ2ZTo6YWRkS2V5ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRGbG9hdEFu
aW1hdGlvbkN1cnZlOjpkdXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0tleWZyYW1lZEZs
b2F0QW5pbWF0aW9uQ3VydmU6OmNsb25lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDS2V5ZnJhbWVk
RmxvYXRBbmltYXRpb25DdXJ2ZTo6Z2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlm
cmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OkNDS2V5ZnJhbWVkVHJhbnNmb3Jt
QW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1B
bmltYXRpb25DdXJ2ZTo6fkNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6YWRkS2V5
ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25D
dXJ2ZTo6ZHVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1B
bmltYXRpb25DdXJ2ZTo6Y2xvbmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFu
c2Zvcm1BbmltYXRpb25DdXJ2ZTo6Z2V0VmFsdWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuaDoKKyAgICAgICAgKEND
S2V5ZnJhbWUpOgorICAgICAgICAoQ0NGbG9hdEtleWZyYW1lKToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoQ0NUcmFuc2Zvcm1LZXlmcmFtZSk6CisgICAgICAgIChDQ0tleWZyYW1lZEZs
b2F0QW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAoQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGltaW5nRnVuY3Rpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NUaW1pbmdGdW5jdGlvbjo6Q0NUaW1pbmdGdW5jdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpDQ1RpbWluZ0Z1bmN0aW9uOjp+Q0NUaW1pbmdGdW5jdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpDQ1RpbWluZ0Z1bmN0aW9uOjpkdXJhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpDQ0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OkNDQ3ViaWNCZXppZXJUaW1p
bmdGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0N1YmljQmV6aWVyVGltaW5nRnVuY3Rp
b246On5DQ0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0ND
dWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpnZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmNsb25lKToKKyAgICAgICAgKFdlYkNvcmU6OkND
RWFzZVRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NFYXNlSW5U
aW1pbmdGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRWFzZU91dFRpbWlu
Z0Z1bmN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NFYXNlSW5PdXRUaW1pbmdG
dW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RpbWluZ0Z1bmN0aW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChDQ1RpbWluZ0Z1bmN0aW9uKToKKyAgICAgICAgKENDQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlv
bik6CisgICAgICAgIChDQ0Vhc2VUaW1pbmdGdW5jdGlvbik6CisgICAgICAgIChDQ0Vhc2VJblRp
bWluZ0Z1bmN0aW9uKToKKyAgICAgICAgKENDRWFzZU91dFRpbWluZ0Z1bmN0aW9uKToKKyAgICAg
ICAgKENDRWFzZUluT3V0VGltaW5nRnVuY3Rpb24pOgorCiAyMDEyLTAyLTI3ICBJbHlhIFRpa2hv
bm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIHNpbmds
ZSBsaW5lIGZpeCBmb3IgcjEwODk4My4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggYTZl
OTRkZjg5NDJlMzlkZjc4NWFkNzM3OTk4Y2MzNDFmNWQzOTY3ZS4uZGUzZWI5NWMyODU3OGNiMzFk
OTFkZDIyOWVjYTJlYTI3YWIzNjg1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNCBAQAorMjAxMi0wMi0yOCAgSWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBbY2hyb21pdW1dIEFkZCBpbXBsLXRocmVhZCBzdXBwb3J0IGZvciBhbmlt
YXRpb24tdGltaW5nLWZ1bmN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03OTgxOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogdGVzdHMvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisgICAgICAgIChXZWJDb3JlKToKKwogMjAxMi0wMi0y
NiAgSGFqaW1lIE1vcnJpdGEgIDxtb3JyaXRhQGNocm9taXVtLm9yZz4KIAogICAgICAgICBNb3Zl
IENocm9tZUNsaWVudDo6c2hvd0NvbnRleHRNZW51KCkgdG8gQ29udGV4dE1lbnVDbGllbnQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQppbmRleCBlYjJmNTljY2Q0ZjFhNWEwMzY5ODk5NjYyMGEyZTJhYjU1YzcyYTY1
Li44YjdmOGJhNDliOGE0NzlmZTgyMTc1YzczNWNmZmRhMjdiN2UxNDM3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCkBAIC0zMzU3LDYgKzMzNTcsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlRHJhd1F1YWQuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVEcmF3UXVhZC5oJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbWluZ0Z1bmN0aW9uLmNwcCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaW1pbmdGdW5j
dGlvbi5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Ro
cmVhZC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Ro
cmVhZFByb3h5LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaHJlYWRQcm94eS5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1VuaXRCZXppZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1VuaXRCZXppZXIuaAppbmRleCA5NzNkNzViYWIxZTNjNThjMzEzNjUxMTdlOGVlMmNiYjEzZTZj
NjRmLi4zN2IyMDg4ZjBlYWY3OWZhZTI2NjMwZTQzODcwNGI0OTdjODkwYWIwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Vbml0QmV6aWVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVW5pdEJlemllci5oCkBAIC0yMCw5ICsyMCw5
IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgogICovCi0gCisKICNpZm5kZWYgVW5pdEJlemllcl9oCiAjZGVm
aW5lIFVuaXRCZXppZXJfaAogCkBAIC0zNywzMCArMzcsMzAgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICAgICAgY3ggPSAzLjAgKiBwMXg7CiAgICAgICAgICAgICBieCA9IDMuMCAqIChw
MnggLSBwMXgpIC0gY3g7CiAgICAgICAgICAgICBheCA9IDEuMCAtIGN4IC1ieDsKLSAgICAgICAg
ICAgICAKKwogICAgICAgICAgICAgY3kgPSAzLjAgKiBwMXk7CiAgICAgICAgICAgICBieSA9IDMu
MCAqIChwMnkgLSBwMXkpIC0gY3k7CiAgICAgICAgICAgICBheSA9IDEuMCAtIGN5IC0gYnk7CiAg
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGRvdWJsZSBzYW1wbGVDdXJ2ZVgoZG91YmxlIHQp
CisKKyAgICAgICAgZG91YmxlIHNhbXBsZUN1cnZlWChkb3VibGUgdCkgY29uc3QKICAgICAgICAg
ewogICAgICAgICAgICAgLy8gYGF4IHReMyArIGJ4IHReMiArIGN4IHQnIGV4cGFuZGVkIHVzaW5n
IEhvcm5lcidzIHJ1bGUuCiAgICAgICAgICAgICByZXR1cm4gKChheCAqIHQgKyBieCkgKiB0ICsg
Y3gpICogdDsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZG91YmxlIHNhbXBsZUN1cnZl
WShkb3VibGUgdCkKKworICAgICAgICBkb3VibGUgc2FtcGxlQ3VydmVZKGRvdWJsZSB0KSBjb25z
dAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gKChheSAqIHQgKyBieSkgKiB0ICsgY3kp
ICogdDsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZG91YmxlIHNhbXBsZUN1cnZlRGVy
aXZhdGl2ZVgoZG91YmxlIHQpCisKKyAgICAgICAgZG91YmxlIHNhbXBsZUN1cnZlRGVyaXZhdGl2
ZVgoZG91YmxlIHQpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiAoMy4wICog
YXggKiB0ICsgMi4wICogYngpICogdCArIGN4OwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAg
ICAgIC8vIEdpdmVuIGFuIHggdmFsdWUsIGZpbmQgYSBwYXJhbWV0cmljIHZhbHVlIGl0IGNhbWUg
ZnJvbS4KLSAgICAgICAgZG91YmxlIHNvbHZlQ3VydmVYKGRvdWJsZSB4LCBkb3VibGUgZXBzaWxv
bikKKyAgICAgICAgZG91YmxlIHNvbHZlQ3VydmVYKGRvdWJsZSB4LCBkb3VibGUgZXBzaWxvbikg
Y29uc3QKICAgICAgICAgewogICAgICAgICAgICAgZG91YmxlIHQwOwogICAgICAgICAgICAgZG91
YmxlIHQxOwpAQCAtMTA1LDE2ICsxMDUsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICAgICAgcmV0dXJuIHQyOwogICAgICAgICB9CiAKLSAgICAgICAgZG91YmxlIHNvbHZlKGRvdWJs
ZSB4LCBkb3VibGUgZXBzaWxvbikKKyAgICAgICAgZG91YmxlIHNvbHZlKGRvdWJsZSB4LCBkb3Vi
bGUgZXBzaWxvbikgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIHNhbXBsZUN1
cnZlWShzb2x2ZUN1cnZlWCh4LCBlcHNpbG9uKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAg
ICBwcml2YXRlOgogICAgICAgICBkb3VibGUgYXg7CiAgICAgICAgIGRvdWJsZSBieDsKICAgICAg
ICAgZG91YmxlIGN4OwotICAgICAgICAKKwogICAgICAgICBkb3VibGUgYXk7CiAgICAgICAgIGRv
dWJsZSBieTsKICAgICAgICAgZG91YmxlIGN5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0tleWZy
YW1lZEFuaW1hdGlvbkN1cnZlLmNwcAppbmRleCBiNjE1YzczNmNjMDNmMDk3ODk3NzM1YzRmOTA0
YzY3OTNjOTlmODBmLi4wNWI2MDRmMGZjZThiODI5ZmEzOTE2MjRmZmU2M2M0YmEwYzU4MjcwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmNwcApAQCAt
NDIsMzEgKzQyLDE3MSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgewogCiB0ZW1w
bGF0ZSA8Y2xhc3MgS2V5ZnJhbWU+Ci1ib29sIGtleWZyYW1lc0FyZVNvcnRlZChjb25zdCBWZWN0
b3I8S2V5ZnJhbWU+JiBrZXlmcmFtZXMpCit2b2lkIGluc2VydEtleWZyYW1lKFBhc3NPd25QdHI8
S2V5ZnJhbWU+IGtleWZyYW1lLCBWZWN0b3I8T3duUHRyPEtleWZyYW1lPiA+JiBrZXlmcmFtZXMp
CiB7Ci0gICAgaWYgKCFrZXlmcmFtZXMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBPd25QdHI8S2V5ZnJhbWU+IHBvcEtleWZyYW1lID0ga2V5ZnJhbWU7CiAKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGtleWZyYW1lcy5zaXplKCkgLSAxOyArK2kpIHsKLSAgICAgICAgaWYg
KGtleWZyYW1lc1tpXS50aW1lID4ga2V5ZnJhbWVzW2krMV0udGltZSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleWZyYW1lcy5zaXplKCk7
ICsraSkgeworICAgICAgICBpZiAocG9wS2V5ZnJhbWUtPnRpbWUoKSA8IGtleWZyYW1lc1tpXS0+
dGltZSgpKSB7CisgICAgICAgICAgICBrZXlmcmFtZXMuaW5zZXJ0KGksIHBvcEtleWZyYW1lLnJl
bGVhc2UoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9CiAKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBrZXlmcmFtZXMuYXBwZW5kKHBvcEtleWZyYW1lLnJlbGVhc2UoKSk7
Cit9CisKK1Bhc3NPd25QdHI8Q0NUaW1pbmdGdW5jdGlvbj4gY2xvbmVUaW1pbmdGdW5jdGlvbihj
b25zdCBDQ1RpbWluZ0Z1bmN0aW9uKiB0aW1pbmdGdW5jdGlvbikKK3sKKyAgICBpZiAoIXRpbWlu
Z0Z1bmN0aW9uKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIE93blB0cjxDQ0FuaW1h
dGlvbkN1cnZlPiBjdXJ2ZSA9IHRpbWluZ0Z1bmN0aW9uLT5jbG9uZSgpOworICAgIHJldHVybiBh
ZG9wdFB0cihzdGF0aWNfY2FzdDxDQ1RpbWluZ0Z1bmN0aW9uKj4oY3VydmUubGVha1B0cigpKSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlCiAKLVBhc3NPd25QdHI8Q0NLZXlmcmFtZWRGbG9hdEFuaW1h
dGlvbkN1cnZlPiBDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZShjb25zdCBW
ZWN0b3I8Q0NGbG9hdEtleWZyYW1lPiYga2V5ZnJhbWVzKQorQ0NLZXlmcmFtZTo6Q0NLZXlmcmFt
ZShkb3VibGUgdGltZSwgUGFzc093blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlv
bikKKyAgICA6IG1fdGltZSh0aW1lKQorICAgICwgbV90aW1pbmdGdW5jdGlvbih0aW1pbmdGdW5j
dGlvbikKIHsKLSAgICBpZiAoIWtleWZyYW1lcy5zaXplKCkgfHwgIWtleWZyYW1lc0FyZVNvcnRl
ZChrZXlmcmFtZXMpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKK30KKworQ0NLZXlmcmFtZTo6
fkNDS2V5ZnJhbWUoKQoreworfQogCi0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0tleWZyYW1l
ZEZsb2F0QW5pbWF0aW9uQ3VydmUoa2V5ZnJhbWVzKSk7Citkb3VibGUgQ0NLZXlmcmFtZTo6dGlt
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGltZTsKK30KKworY29uc3QgQ0NUaW1pbmdGdW5j
dGlvbiogQ0NLZXlmcmFtZTo6dGltaW5nRnVuY3Rpb24oKSBjb25zdAoreworICAgIHJldHVybiBt
X3RpbWluZ0Z1bmN0aW9uLmdldCgpOworfQorCitQYXNzT3duUHRyPENDRmxvYXRLZXlmcmFtZT4g
Q0NGbG9hdEtleWZyYW1lOjpjcmVhdGUoZG91YmxlIHRpbWUsIGZsb2F0IHZhbHVlLCBQYXNzT3du
UHRyPENDVGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uKQoreworICAgIHJldHVybiBhZG9w
dFB0cihuZXcgQ0NGbG9hdEtleWZyYW1lKHRpbWUsIHZhbHVlLCB0aW1pbmdGdW5jdGlvbikpOwor
fQorCitDQ0Zsb2F0S2V5ZnJhbWU6OkNDRmxvYXRLZXlmcmFtZShkb3VibGUgdGltZSwgZmxvYXQg
dmFsdWUsIFBhc3NPd25QdHI8Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb24pCisgICAg
OiBDQ0tleWZyYW1lKHRpbWUsIHRpbWluZ0Z1bmN0aW9uKQorICAgICwgbV92YWx1ZSh2YWx1ZSkK
K3sKK30KKworQ0NGbG9hdEtleWZyYW1lOjp+Q0NGbG9hdEtleWZyYW1lKCkKK3sKK30KKworZmxv
YXQgQ0NGbG9hdEtleWZyYW1lOjp2YWx1ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdmFsdWU7
Cit9CisKK1Bhc3NPd25QdHI8Q0NGbG9hdEtleWZyYW1lPiBDQ0Zsb2F0S2V5ZnJhbWU6OmNsb25l
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ0NGbG9hdEtleWZyYW1lOjpjcmVhdGUodGltZSgpLCB2
YWx1ZSgpLCBjbG9uZVRpbWluZ0Z1bmN0aW9uKHRpbWluZ0Z1bmN0aW9uKCkpKTsKK30KKworUGFz
c093blB0cjxDQ1RyYW5zZm9ybUtleWZyYW1lPiBDQ1RyYW5zZm9ybUtleWZyYW1lOjpjcmVhdGUo
ZG91YmxlIHRpbWUsIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHZhbHVlLCBQYXNzT3duUHRy
PENDVGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uKQoreworICAgIHJldHVybiBhZG9wdFB0
cihuZXcgQ0NUcmFuc2Zvcm1LZXlmcmFtZSh0aW1lLCB2YWx1ZSwgdGltaW5nRnVuY3Rpb24pKTsK
K30KKworQ0NUcmFuc2Zvcm1LZXlmcmFtZTo6Q0NUcmFuc2Zvcm1LZXlmcmFtZShkb3VibGUgdGlt
ZSwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgdmFsdWUsIFBhc3NPd25QdHI8Q0NUaW1pbmdG
dW5jdGlvbj4gdGltaW5nRnVuY3Rpb24pCisgICAgOiBDQ0tleWZyYW1lKHRpbWUsIHRpbWluZ0Z1
bmN0aW9uKQorICAgICwgbV92YWx1ZSh2YWx1ZSkKK3sKIH0KIAotQ0NLZXlmcmFtZWRGbG9hdEFu
aW1hdGlvbkN1cnZlOjpDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmUoY29uc3QgVmVjdG9y
PENDRmxvYXRLZXlmcmFtZT4mIGtleWZyYW1lcykKLSAgICA6IG1fa2V5ZnJhbWVzKGtleWZyYW1l
cykKK0NDVHJhbnNmb3JtS2V5ZnJhbWU6On5DQ1RyYW5zZm9ybUtleWZyYW1lKCkKK3sKK30KKwor
Y29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgQ0NUcmFuc2Zvcm1LZXlmcmFtZTo6dmFsdWUoKSBj
b25zdAoreworICAgIHJldHVybiBtX3ZhbHVlOworfQorCitQYXNzT3duUHRyPENDVHJhbnNmb3Jt
S2V5ZnJhbWU+IENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNsb25lKCkgY29uc3QKK3sKKyAgICAvLyBX
ZSBuZWVkIHRvIGRvIGEgZGVlcCBjb3B5IHRoZSBtX3ZhbHVlIG1heSBjb250YWluIHJlZiBwb2lu
dGVycyB0byBUcmFuc2Zvcm1PcGVyYXRpb24gb2JqZWN0cy4KKyAgICBUcmFuc2Zvcm1PcGVyYXRp
b25zIG9wZXJhdGlvbnM7CisgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBtX3ZhbHVlLnNpemUo
KTsgKytqKSB7CisgICAgICAgIFRyYW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBvcGVy
YXRpb25UeXBlID0gbV92YWx1ZS5vcGVyYXRpb25zKClbal0tPmdldE9wZXJhdGlvblR5cGUoKTsK
KyAgICAgICAgc3dpdGNoIChvcGVyYXRpb25UeXBlKSB7CisgICAgICAgIGNhc2UgVHJhbnNmb3Jt
T3BlcmF0aW9uOjpTQ0FMRV9YOgorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NB
TEVfWToKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1o6CisgICAgICAg
IGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV8zRDoKKyAgICAgICAgY2FzZSBUcmFuc2Zv
cm1PcGVyYXRpb246OlNDQUxFOiB7CisgICAgICAgICAgICBTY2FsZVRyYW5zZm9ybU9wZXJhdGlv
biogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24qPihtX3Zh
bHVlLm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7CisgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJh
dGlvbnMoKS5hcHBlbmQoU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0cmFuc2Zvcm0t
PngoKSwgdHJhbnNmb3JtLT55KCksIHRyYW5zZm9ybS0+eigpLCBvcGVyYXRpb25UeXBlKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJh
dGlvbjo6VFJBTlNMQVRFX1g6CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFO
U0xBVEVfWToKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9aOgor
ICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFXzNEOgorICAgICAgICBj
YXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFOiB7CisgICAgICAgICAgICBUcmFuc2xh
dGVUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFRyYW5zbGF0ZVRy
YW5zZm9ybU9wZXJhdGlvbio+KG1fdmFsdWUub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKKyAgICAg
ICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1P
cGVyYXRpb246OmNyZWF0ZSh0cmFuc2Zvcm0tPngoKSwgdHJhbnNmb3JtLT55KCksIHRyYW5zZm9y
bS0+eigpLCBvcGVyYXRpb25UeXBlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1g6CisgICAgICAgIGNhc2Ug
VHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfWToKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVy
YXRpb246OlJPVEFURV8zRDoKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFU
RTogeworICAgICAgICAgICAgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBz
dGF0aWNfY2FzdDxSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24qPihtX3ZhbHVlLm9wZXJhdGlvbnMo
KVtqXS5nZXQoKSk7CisgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQo
Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUodHJhbnNmb3JtLT54KCksIHRyYW5zZm9y
bS0+eSgpLCB0cmFuc2Zvcm0tPnooKSwgdHJhbnNmb3JtLT5hbmdsZSgpLCBvcGVyYXRpb25UeXBl
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFRyYW5zZm9y
bU9wZXJhdGlvbjo6U0tFV19YOgorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tF
V19ZOgorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFVzogeworICAgICAgICAg
ICAgU2tld1RyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8U2tld1Ry
YW5zZm9ybU9wZXJhdGlvbio+KG1fdmFsdWUub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKKyAgICAg
ICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChTa2V3VHJhbnNmb3JtT3BlcmF0
aW9uOjpjcmVhdGUodHJhbnNmb3JtLT5hbmdsZVgoKSwgdHJhbnNmb3JtLT5hbmdsZVkoKSwgb3Bl
cmF0aW9uVHlwZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBUcmFuc2Zvcm1PcGVyYXRpb246Ok1BVFJJWDogeworICAgICAgICAgICAgTWF0cml4VHJhbnNm
b3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxNYXRyaXhUcmFuc2Zvcm1PcGVy
YXRpb24qPihtX3ZhbHVlLm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7CisgICAgICAgICAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBtID0gdHJhbnNmb3JtLT5tYXRyaXgoKTsKKyAgICAgICAgICAgIG9w
ZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246OmNy
ZWF0ZShtLmEoKSwgbS5iKCksIG0uYygpLCBtLmQoKSwgbS5lKCksIG0uZigpKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6
TUFUUklYXzNEOiB7CisgICAgICAgICAgICBNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbiogdHJh
bnNmb3JtID0gc3RhdGljX2Nhc3Q8TWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24qPihtX3ZhbHVl
Lm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7CisgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlv
bnMoKS5hcHBlbmQoTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0cmFuc2Zvcm0t
Pm1hdHJpeCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IFRyYW5zZm9ybU9wZXJhdGlvbjo6UEVSU1BFQ1RJVkU6IHsKKyAgICAgICAgICAgIFBlcnNwZWN0
aXZlVHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxQZXJzcGVjdGl2
ZVRyYW5zZm9ybU9wZXJhdGlvbio+KG1fdmFsdWUub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKKyAg
ICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChQZXJzcGVjdGl2ZVRyYW5z
Zm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHRyYW5zZm9ybS0+cGVyc3BlY3RpdmUoKSkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246
OklERU5USVRZOiB7CisgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQo
SWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSgpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpOT05FOgorICAg
ICAgICAgICAgLy8gRG8gbm90aGluZy4KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9IC8v
IHN3aXRjaAorICAgIH0gLy8gZm9yIGVhY2ggb3BlcmF0aW9uCisKKyAgICByZXR1cm4gQ0NUcmFu
c2Zvcm1LZXlmcmFtZTo6Y3JlYXRlKHRpbWUoKSwgb3BlcmF0aW9ucywgY2xvbmVUaW1pbmdGdW5j
dGlvbih0aW1pbmdGdW5jdGlvbigpKSk7Cit9CisKK1Bhc3NPd25QdHI8Q0NLZXlmcmFtZWRGbG9h
dEFuaW1hdGlvbkN1cnZlPiBDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgp
Cit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3Vy
dmUpOworfQorCitDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6OkNDS2V5ZnJhbWVkRmxv
YXRBbmltYXRpb25DdXJ2ZSgpCiB7CiB9CiAKQEAgLTc0LDE1OSArMjE0LDExMCBAQCBDQ0tleWZy
YW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6On5DQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmUo
KQogewogfQogCit2b2lkIENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6YWRkS2V5ZnJh
bWUoUGFzc093blB0cjxDQ0Zsb2F0S2V5ZnJhbWU+IGtleWZyYW1lKQoreworICAgIGluc2VydEtl
eWZyYW1lKGtleWZyYW1lLCBtX2tleWZyYW1lcyk7Cit9CisKIGRvdWJsZSBDQ0tleWZyYW1lZEZs
b2F0QW5pbWF0aW9uQ3VydmU6OmR1cmF0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9rZXlm
cmFtZXMubGFzdCgpLnRpbWUgLSBtX2tleWZyYW1lcy5maXJzdCgpLnRpbWU7CisgICAgcmV0dXJu
IG1fa2V5ZnJhbWVzLmxhc3QoKS0+dGltZSgpIC0gbV9rZXlmcmFtZXMuZmlyc3QoKS0+dGltZSgp
OwogfQogCiBQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IENDS2V5ZnJhbWVkRmxvYXRBbmlt
YXRpb25DdXJ2ZTo6Y2xvbmUoKSBjb25zdAogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NL
ZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlKCp0aGlzKSk7CisgICAgT3duUHRyPENDS2V5ZnJh
bWVkRmxvYXRBbmltYXRpb25DdXJ2ZT4gdG9SZXR1cm4oQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlv
bkN1cnZlOjpjcmVhdGUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2tleWZyYW1l
cy5zaXplKCk7ICsraSkKKyAgICAgICAgdG9SZXR1cm4tPmFkZEtleWZyYW1lKG1fa2V5ZnJhbWVz
W2ldLT5jbG9uZSgpKTsKKyAgICByZXR1cm4gdG9SZXR1cm4ucmVsZWFzZSgpOwogfQogCiBmbG9h
dCBDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmdldFZhbHVlKGRvdWJsZSB0KSBjb25z
dAogewotICAgIGlmICh0IDw9IG1fa2V5ZnJhbWVzLmZpcnN0KCkudGltZSkKLSAgICAgICAgcmV0
dXJuIG1fa2V5ZnJhbWVzLmZpcnN0KCkudmFsdWU7CisgICAgaWYgKHQgPD0gbV9rZXlmcmFtZXMu
Zmlyc3QoKS0+dGltZSgpKQorICAgICAgICByZXR1cm4gbV9rZXlmcmFtZXMuZmlyc3QoKS0+dmFs
dWUoKTsKIAotICAgIGlmICh0ID49IG1fa2V5ZnJhbWVzLmxhc3QoKS50aW1lKQotICAgICAgICBy
ZXR1cm4gbV9rZXlmcmFtZXMubGFzdCgpLnZhbHVlOworICAgIGlmICh0ID49IG1fa2V5ZnJhbWVz
Lmxhc3QoKS0+dGltZSgpKQorICAgICAgICByZXR1cm4gbV9rZXlmcmFtZXMubGFzdCgpLT52YWx1
ZSgpOwogCiAgICAgc2l6ZV90IGkgPSAwOwogICAgIGZvciAoOyBpIDwgbV9rZXlmcmFtZXMuc2l6
ZSgpIC0gMTsgKytpKSB7Ci0gICAgICAgIGlmICh0IDwgbV9rZXlmcmFtZXNbaSsxXS50aW1lKQor
ICAgICAgICBpZiAodCA8IG1fa2V5ZnJhbWVzW2krMV0tPnRpbWUoKSkKICAgICAgICAgICAgIGJy
ZWFrOwogICAgIH0KIAotICAgIGZsb2F0IHByb2dyZXNzID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KCh0
IC0gbV9rZXlmcmFtZXNbaV0udGltZSkgLyAobV9rZXlmcmFtZXNbaSsxXS50aW1lIC0gbV9rZXlm
cmFtZXNbaV0udGltZSkpOwotICAgIC8vIEZJWE1FOiBhcHBseSB0aW1pbmcgZnVuY3Rpb24gaGVy
ZS4KLSAgICByZXR1cm4gbV9rZXlmcmFtZXNbaV0udmFsdWUgKyAobV9rZXlmcmFtZXNbaSsxXS52
YWx1ZSAtIG1fa2V5ZnJhbWVzW2ldLnZhbHVlKSAqIHByb2dyZXNzOworICAgIGZsb2F0IHByb2dy
ZXNzID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KCh0IC0gbV9rZXlmcmFtZXNbaV0tPnRpbWUoKSkgLyAo
bV9rZXlmcmFtZXNbaSsxXS0+dGltZSgpIC0gbV9rZXlmcmFtZXNbaV0tPnRpbWUoKSkpOworCisg
ICAgaWYgKG1fa2V5ZnJhbWVzW2ldLT50aW1pbmdGdW5jdGlvbigpKQorICAgICAgICBwcm9ncmVz
cyA9IG1fa2V5ZnJhbWVzW2ldLT50aW1pbmdGdW5jdGlvbigpLT5nZXRWYWx1ZShwcm9ncmVzcyk7
CisKKyAgICByZXR1cm4gbV9rZXlmcmFtZXNbaV0tPnZhbHVlKCkgKyAobV9rZXlmcmFtZXNbaSsx
XS0+dmFsdWUoKSAtIG1fa2V5ZnJhbWVzW2ldLT52YWx1ZSgpKSAqIHByb2dyZXNzOwogfQogCi1Q
YXNzT3duUHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IENDS2V5ZnJhbWVk
VHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNyZWF0ZShjb25zdCBWZWN0b3I8Q0NUcmFuc2Zvcm1L
ZXlmcmFtZT4mIGtleWZyYW1lcykKK1Bhc3NPd25QdHI8Q0NLZXlmcmFtZWRUcmFuc2Zvcm1Bbmlt
YXRpb25DdXJ2ZT4gQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkK
IHsKLSAgICBpZiAoIWtleWZyYW1lcy5zaXplKCkgfHwgIWtleWZyYW1lc0FyZVNvcnRlZChrZXlm
cmFtZXMpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3
IENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUpOworfQogCi0gICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKGtleWZyYW1lcykp
OworQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Q0NLZXlmcmFtZWRUcmFuc2Zv
cm1BbmltYXRpb25DdXJ2ZSgpCit7CiB9CiAKLUNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9u
Q3VydmU6OkNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoY29uc3QgVmVjdG9yPEND
VHJhbnNmb3JtS2V5ZnJhbWU+JiBrZXlmcmFtZXMpCi0gICAgOiBtX2tleWZyYW1lcyhrZXlmcmFt
ZXMpCitDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjp+Q0NLZXlmcmFtZWRUcmFu
c2Zvcm1BbmltYXRpb25DdXJ2ZSgpCiB7CiB9CiAKLUNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0
aW9uQ3VydmU6On5DQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCkgeyB9Cit2b2lk
IENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmFkZEtleWZyYW1lKFBhc3NPd25Q
dHI8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4ga2V5ZnJhbWUpCit7CisgICAgaW5zZXJ0S2V5ZnJhbWUo
a2V5ZnJhbWUsIG1fa2V5ZnJhbWVzKTsKK30KIAogZG91YmxlIENDS2V5ZnJhbWVkVHJhbnNmb3Jt
QW5pbWF0aW9uQ3VydmU6OmR1cmF0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9rZXlmcmFt
ZXMubGFzdCgpLnRpbWUgLSBtX2tleWZyYW1lcy5maXJzdCgpLnRpbWU7CisgICAgcmV0dXJuIG1f
a2V5ZnJhbWVzLmxhc3QoKS0+dGltZSgpIC0gbV9rZXlmcmFtZXMuZmlyc3QoKS0+dGltZSgpOwog
fQogCiBQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmU6OmNsb25lKCkgY29uc3QKIHsKLSAgICBWZWN0b3I8Q0NUcmFuc2Zvcm1LZXlm
cmFtZT4ga2V5ZnJhbWVzOwotICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBkZWVwIGNvcHkgb2YgYWxs
IG9mIHRoZSBrZXlmcmFtZXMgc2luY2UgdGhleSBjb250YWluIHJlZgotICAgIC8vIHBvaW50ZXJz
IHRvIFRyYW5zZm9ybU9wZXJhdGlvbiBvYmplY3RzLgotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9rZXlmcmFtZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgQ0NUcmFuc2Zvcm1LZXlmcmFt
ZSBrZXlmcmFtZShtX2tleWZyYW1lc1tpXS50aW1lKTsKLSAgICAgICAgZm9yIChzaXplX3QgaiA9
IDA7IGogPCBtX2tleWZyYW1lc1tpXS52YWx1ZS5zaXplKCk7ICsraikgewotICAgICAgICAgICAg
VHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIG9wZXJhdGlvblR5cGUgPSBtX2tleWZy
YW1lc1tpXS52YWx1ZS5vcGVyYXRpb25zKClbal0tPmdldE9wZXJhdGlvblR5cGUoKTsKLSAgICAg
ICAgICAgIHN3aXRjaCAob3BlcmF0aW9uVHlwZSkgewotICAgICAgICAgICAgY2FzZSBUcmFuc2Zv
cm1PcGVyYXRpb246OlNDQUxFX1g6Ci0gICAgICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlv
bjo6U0NBTEVfWToKLSAgICAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV9a
OgotICAgICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFXzNEOgotICAgICAg
ICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFOiB7Ci0gICAgICAgICAgICAgICAg
U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFNjYWxlVHJh
bnNmb3JtT3BlcmF0aW9uKj4obV9rZXlmcmFtZXNbaV0udmFsdWUub3BlcmF0aW9ucygpW2pdLmdl
dCgpKTsKLSAgICAgICAgICAgICAgICBrZXlmcmFtZS52YWx1ZS5vcGVyYXRpb25zKCkuYXBwZW5k
KFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUodHJhbnNmb3JtLT54KCksIHRyYW5zZm9y
bS0+eSgpLCB0cmFuc2Zvcm0tPnooKSwgb3BlcmF0aW9uVHlwZSkpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRp
b246OlRSQU5TTEFURV9YOgotICAgICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRS
QU5TTEFURV9ZOgotICAgICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFU
RV9aOgotICAgICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV8zRDoK
LSAgICAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEU6IHsKLSAgICAg
ICAgICAgICAgICBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRp
Y19jYXN0PFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+KG1fa2V5ZnJhbWVzW2ldLnZhbHVl
Lm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7Ci0gICAgICAgICAgICAgICAga2V5ZnJhbWUudmFsdWUu
b3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0
cmFuc2Zvcm0tPngoKSwgdHJhbnNmb3JtLT55KCksIHRyYW5zZm9ybS0+eigpLCBvcGVyYXRpb25U
eXBlKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1g6Ci0gICAgICAgICAgICBjYXNlIFRy
YW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1k6Ci0gICAgICAgICAgICBjYXNlIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6Uk9UQVRFXzNEOgotICAgICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246
OlJPVEFURTogewotICAgICAgICAgICAgICAgIFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiogdHJh
bnNmb3JtID0gc3RhdGljX2Nhc3Q8Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKj4obV9rZXlmcmFt
ZXNbaV0udmFsdWUub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKLSAgICAgICAgICAgICAgICBrZXlm
cmFtZS52YWx1ZS5vcGVyYXRpb25zKCkuYXBwZW5kKFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6
Y3JlYXRlKHRyYW5zZm9ybS0+eCgpLCB0cmFuc2Zvcm0tPnkoKSwgdHJhbnNmb3JtLT56KCksIHRy
YW5zZm9ybS0+YW5nbGUoKSwgb3BlcmF0aW9uVHlwZSkpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNL
RVdfWDoKLSAgICAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VXX1k6Ci0gICAg
ICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFVzogewotICAgICAgICAgICAgICAg
IFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFNrZXdUcmFu
c2Zvcm1PcGVyYXRpb24qPihtX2tleWZyYW1lc1tpXS52YWx1ZS5vcGVyYXRpb25zKClbal0uZ2V0
KCkpOwotICAgICAgICAgICAgICAgIGtleWZyYW1lLnZhbHVlLm9wZXJhdGlvbnMoKS5hcHBlbmQo
U2tld1RyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHRyYW5zZm9ybS0+YW5nbGVYKCksIHRyYW5z
Zm9ybS0+YW5nbGVZKCksIG9wZXJhdGlvblR5cGUpKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpNQVRS
SVg6IHsKLSAgICAgICAgICAgICAgICBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9y
bSA9IHN0YXRpY19jYXN0PE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbio+KG1fa2V5ZnJhbWVzW2ld
LnZhbHVlLm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggbSA9IHRyYW5zZm9ybS0+bWF0cml4KCk7Ci0gICAgICAgICAgICAgICAga2V5
ZnJhbWUudmFsdWUub3BlcmF0aW9ucygpLmFwcGVuZChNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246
OmNyZWF0ZShtLmEoKSwgbS5iKCksIG0uYygpLCBtLmQoKSwgbS5lKCksIG0uZigpKSk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6TUFUUklYXzNEOiB7Ci0gICAgICAgICAgICAgICAgTWF0cml4M0RUcmFu
c2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PE1hdHJpeDNEVHJhbnNmb3Jt
T3BlcmF0aW9uKj4obV9rZXlmcmFtZXNbaV0udmFsdWUub3BlcmF0aW9ucygpW2pdLmdldCgpKTsK
LSAgICAgICAgICAgICAgICBrZXlmcmFtZS52YWx1ZS5vcGVyYXRpb25zKCkuYXBwZW5kKE1hdHJp
eDNEVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUodHJhbnNmb3JtLT5tYXRyaXgoKSkpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBUcmFu
c2Zvcm1PcGVyYXRpb246OlBFUlNQRUNUSVZFOiB7Ci0gICAgICAgICAgICAgICAgUGVyc3BlY3Rp
dmVUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFBlcnNwZWN0aXZl
VHJhbnNmb3JtT3BlcmF0aW9uKj4obV9rZXlmcmFtZXNbaV0udmFsdWUub3BlcmF0aW9ucygpW2pd
LmdldCgpKTsKLSAgICAgICAgICAgICAgICBrZXlmcmFtZS52YWx1ZS5vcGVyYXRpb25zKCkuYXBw
ZW5kKFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUodHJhbnNmb3JtLT5wZXJz
cGVjdGl2ZSgpKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6SURFTlRJVFk6IHsKLSAgICAgICAgICAg
ICAgICBrZXlmcmFtZS52YWx1ZS5vcGVyYXRpb25zKCkuYXBwZW5kKElkZW50aXR5VHJhbnNmb3Jt
T3BlcmF0aW9uOjpjcmVhdGUoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Tk9ORToKLSAgICAgICAg
ICAgICAgICAvLyBEbyBub3RoaW5nLgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfSAvLyBzd2l0Y2gKLSAgICAgICAgfSAvLyBmb3IgZWFjaCBvcGVyYXRpb24KLSAgICAgICAg
a2V5ZnJhbWVzLmFwcGVuZChrZXlmcmFtZSk7Ci0gICAgfQotICAgIHJldHVybiBDQ0tleWZyYW1l
ZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoa2V5ZnJhbWVzKTsKKyAgICBPd25QdHI8
Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4gdG9SZXR1cm4oQ0NLZXlmcmFtZWRU
cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9rZXlmcmFtZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIHRvUmV0dXJuLT5hZGRLZXlm
cmFtZShtX2tleWZyYW1lc1tpXS0+Y2xvbmUoKSk7CisgICAgcmV0dXJuIHRvUmV0dXJuLnJlbGVh
c2UoKTsKIH0KIAogVHJhbnNmb3JtYXRpb25NYXRyaXggQ0NLZXlmcmFtZWRUcmFuc2Zvcm1Bbmlt
YXRpb25DdXJ2ZTo6Z2V0VmFsdWUoZG91YmxlIHQsIGNvbnN0IEludFNpemUmIGxheWVyU2l6ZSkg
Y29uc3QKIHsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm1NYXRyaXg7CiAKLSAg
ICBpZiAodCA8PSBtX2tleWZyYW1lcy5maXJzdCgpLnRpbWUpIHsKLSAgICAgICAgbV9rZXlmcmFt
ZXMuZmlyc3QoKS52YWx1ZS5hcHBseShsYXllclNpemUsIHRyYW5zZm9ybU1hdHJpeCk7CisgICAg
aWYgKHQgPD0gbV9rZXlmcmFtZXMuZmlyc3QoKS0+dGltZSgpKSB7CisgICAgICAgIG1fa2V5ZnJh
bWVzLmZpcnN0KCktPnZhbHVlKCkuYXBwbHkobGF5ZXJTaXplLCB0cmFuc2Zvcm1NYXRyaXgpOwog
ICAgICAgICByZXR1cm4gdHJhbnNmb3JtTWF0cml4OwogICAgIH0KIAotICAgIGlmICh0ID49IG1f
a2V5ZnJhbWVzLmxhc3QoKS50aW1lKSB7Ci0gICAgICAgIG1fa2V5ZnJhbWVzLmxhc3QoKS52YWx1
ZS5hcHBseShsYXllclNpemUsIHRyYW5zZm9ybU1hdHJpeCk7CisgICAgaWYgKHQgPj0gbV9rZXlm
cmFtZXMubGFzdCgpLT50aW1lKCkpIHsKKyAgICAgICAgbV9rZXlmcmFtZXMubGFzdCgpLT52YWx1
ZSgpLmFwcGx5KGxheWVyU2l6ZSwgdHJhbnNmb3JtTWF0cml4KTsKICAgICAgICAgcmV0dXJuIHRy
YW5zZm9ybU1hdHJpeDsKICAgICB9CiAKICAgICBzaXplX3QgaSA9IDA7CiAgICAgZm9yICg7IGkg
PCBtX2tleWZyYW1lcy5zaXplKCkgLSAxOyArK2kpIHsKLSAgICAgICAgaWYgKHQgPCBtX2tleWZy
YW1lc1tpKzFdLnRpbWUpCisgICAgICAgIGlmICh0IDwgbV9rZXlmcmFtZXNbaSsxXS0+dGltZSgp
KQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgLy8gRklYTUU6IGFwcGx5IHRpbWlu
ZyBmdW5jdGlvbiBoZXJlLgotICAgIGRvdWJsZSBwcm9ncmVzcyA9ICh0IC0gbV9rZXlmcmFtZXNb
aV0udGltZSkgLyAobV9rZXlmcmFtZXNbaSsxXS50aW1lIC0gbV9rZXlmcmFtZXNbaV0udGltZSk7
CisgICAgZG91YmxlIHByb2dyZXNzID0gKHQgLSBtX2tleWZyYW1lc1tpXS0+dGltZSgpKSAvICht
X2tleWZyYW1lc1tpKzFdLT50aW1lKCkgLSBtX2tleWZyYW1lc1tpXS0+dGltZSgpKTsKKworICAg
IGlmIChtX2tleWZyYW1lc1tpXS0+dGltaW5nRnVuY3Rpb24oKSkKKyAgICAgICAgcHJvZ3Jlc3Mg
PSBtX2tleWZyYW1lc1tpXS0+dGltaW5nRnVuY3Rpb24oKS0+Z2V0VmFsdWUocHJvZ3Jlc3MpOwog
Ci0gICAgaWYgKG1fa2V5ZnJhbWVzW2ldLnZhbHVlLm9wZXJhdGlvbnNNYXRjaChtX2tleWZyYW1l
c1tpKzFdLnZhbHVlKSkgewotICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IG1fa2V5ZnJh
bWVzW2krMV0udmFsdWUuc2l6ZSgpOyArK2opCi0gICAgICAgICAgICBtX2tleWZyYW1lc1tpKzFd
LnZhbHVlLm9wZXJhdGlvbnMoKVtqXS0+YmxlbmQobV9rZXlmcmFtZXNbaV0udmFsdWUuYXQoaiks
IHByb2dyZXNzKS0+YXBwbHkodHJhbnNmb3JtTWF0cml4LCBsYXllclNpemUpOworICAgIGlmICht
X2tleWZyYW1lc1tpXS0+dmFsdWUoKS5vcGVyYXRpb25zTWF0Y2gobV9rZXlmcmFtZXNbaSsxXS0+
dmFsdWUoKSkpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBtX2tleWZyYW1lc1tp
KzFdLT52YWx1ZSgpLnNpemUoKTsgKytqKQorICAgICAgICAgICAgbV9rZXlmcmFtZXNbaSsxXS0+
dmFsdWUoKS5vcGVyYXRpb25zKClbal0tPmJsZW5kKG1fa2V5ZnJhbWVzW2ldLT52YWx1ZSgpLmF0
KGopLCBwcm9ncmVzcyktPmFwcGx5KHRyYW5zZm9ybU1hdHJpeCwgbGF5ZXJTaXplKTsKICAgICB9
IGVsc2UgewogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzb3VyY2U7CiAKLSAgICAgICAg
bV9rZXlmcmFtZXNbaV0udmFsdWUuYXBwbHkobGF5ZXJTaXplLCBzb3VyY2UpOwotICAgICAgICBt
X2tleWZyYW1lc1tpKzFdLnZhbHVlLmFwcGx5KGxheWVyU2l6ZSwgdHJhbnNmb3JtTWF0cml4KTsK
KyAgICAgICAgbV9rZXlmcmFtZXNbaV0tPnZhbHVlKCkuYXBwbHkobGF5ZXJTaXplLCBzb3VyY2Up
OworICAgICAgICBtX2tleWZyYW1lc1tpKzFdLT52YWx1ZSgpLmFwcGx5KGxheWVyU2l6ZSwgdHJh
bnNmb3JtTWF0cml4KTsKIAogICAgICAgICB0cmFuc2Zvcm1NYXRyaXguYmxlbmQoc291cmNlLCBw
cm9ncmVzcyk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25D
dXJ2ZS5oCmluZGV4IDFjNGQ2NGFkYjExOTdhYTY3NWE2MDMwOTI4MmZjYTZhNTZhMzY2NmUuLmMz
MDczYmYwODRhY2Y3ODFiZjdjMmIxNmZlZTNlMWUyZjY2YjZkYTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJhbWVkQW5pbWF0
aW9uQ3VydmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmgKQEAgLTI3LDQ2ICsyNyw2NiBAQAogCiAj
aW5jbHVkZSAiVHJhbnNmb3JtT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9u
Q3VydmUuaCIKKyNpbmNsdWRlICJjYy9DQ1RpbWluZ0Z1bmN0aW9uLmgiCiAKICNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1zdHJ1Y3QgQ0NGbG9hdEtleWZyYW1lIHsKLSAgICBDQ0Zsb2F0S2V5ZnJhbWUo
ZG91YmxlIHRpbWUsIGZsb2F0IHZhbHVlKQotICAgICAgICA6IHRpbWUodGltZSkKLSAgICAgICAg
LCB2YWx1ZSh2YWx1ZSkKLSAgICB7Ci0gICAgfQorY2xhc3MgQ0NLZXlmcmFtZSB7CitwdWJsaWM6
CisgICAgZG91YmxlIHRpbWUoKSBjb25zdDsKKyAgICBjb25zdCBDQ1RpbWluZ0Z1bmN0aW9uKiB0
aW1pbmdGdW5jdGlvbigpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgQ0NLZXlmcmFtZShkb3Vi
bGUgdGltZSwgUGFzc093blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPik7CisgICAgdmlydHVhbCB+Q0NL
ZXlmcmFtZSgpOwogCi0gICAgZG91YmxlIHRpbWU7Ci0gICAgZmxvYXQgdmFsdWU7Citwcml2YXRl
OgorICAgIGRvdWJsZSBtX3RpbWU7CisgICAgT3duUHRyPENDVGltaW5nRnVuY3Rpb24+IG1fdGlt
aW5nRnVuY3Rpb247CiB9OwogCi1zdHJ1Y3QgQ0NUcmFuc2Zvcm1LZXlmcmFtZSB7Ci0gICAgZXhw
bGljaXQgQ0NUcmFuc2Zvcm1LZXlmcmFtZShkb3VibGUgdGltZSkKLSAgICAgICAgOiB0aW1lKHRp
bWUpCi0gICAgewotICAgIH0KK2NsYXNzIENDRmxvYXRLZXlmcmFtZSA6IHB1YmxpYyBDQ0tleWZy
YW1lIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ0Zsb2F0S2V5ZnJhbWU+IGNy
ZWF0ZShkb3VibGUgdGltZSwgZmxvYXQgdmFsdWUsIFBhc3NPd25QdHI8Q0NUaW1pbmdGdW5jdGlv
bj4pOworICAgIHZpcnR1YWwgfkNDRmxvYXRLZXlmcmFtZSgpOworCisgICAgZmxvYXQgdmFsdWUo
KSBjb25zdDsKIAotICAgIENDVHJhbnNmb3JtS2V5ZnJhbWUoZG91YmxlIHRpbWUsIGNvbnN0IFRy
YW5zZm9ybU9wZXJhdGlvbnMmIHZhbHVlKQotICAgICAgICA6IHRpbWUodGltZSkKLSAgICAgICAg
LCB2YWx1ZSh2YWx1ZSkKLSAgICB7Ci0gICAgfQorICAgIFBhc3NPd25QdHI8Q0NGbG9hdEtleWZy
YW1lPiBjbG9uZSgpIGNvbnN0OwogCi0gICAgZG91YmxlIHRpbWU7Ci0gICAgVHJhbnNmb3JtT3Bl
cmF0aW9ucyB2YWx1ZTsKK3ByaXZhdGU6CisgICAgQ0NGbG9hdEtleWZyYW1lKGRvdWJsZSB0aW1l
LCBmbG9hdCB2YWx1ZSwgUGFzc093blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPik7CisKKyAgICBmbG9h
dCBtX3ZhbHVlOworfTsKKworY2xhc3MgQ0NUcmFuc2Zvcm1LZXlmcmFtZSA6IHB1YmxpYyBDQ0tl
eWZyYW1lIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1RyYW5zZm9ybUtleWZy
YW1lPiBjcmVhdGUoZG91YmxlIHRpbWUsIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHZhbHVl
LCBQYXNzT3duUHRyPENDVGltaW5nRnVuY3Rpb24+KTsKKyAgICB2aXJ0dWFsIH5DQ1RyYW5zZm9y
bUtleWZyYW1lKCk7CisKKyAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB2YWx1ZSgpIGNv
bnN0OworCisgICAgUGFzc093blB0cjxDQ1RyYW5zZm9ybUtleWZyYW1lPiBjbG9uZSgpIGNvbnN0
OworCitwcml2YXRlOgorICAgIENDVHJhbnNmb3JtS2V5ZnJhbWUoZG91YmxlIHRpbWUsIGNvbnN0
IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHZhbHVlLCBQYXNzT3duUHRyPENDVGltaW5nRnVuY3Rpb24+
KTsKKworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgbV92YWx1ZTsKIH07CiAKIGNsYXNzIENDS2V5
ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZSA6IHB1YmxpYyBDQ0Zsb2F0QW5pbWF0aW9uQ3VydmUg
ewogcHVibGljOgogICAgIC8vIEl0IGlzIHJlcXVpcmVkIHRoYXQgdGhlIGtleWZyYW1lcyBiZSBz
b3J0ZWQgYnkgdGltZS4KLSAgICBzdGF0aWMgUGFzc093blB0cjxDQ0tleWZyYW1lZEZsb2F0QW5p
bWF0aW9uQ3VydmU+IGNyZWF0ZShjb25zdCBWZWN0b3I8Q0NGbG9hdEtleWZyYW1lPiYga2V5ZnJh
bWVzKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3Vy
dmU+IGNyZWF0ZSgpOwogCiAgICAgdmlydHVhbCB+Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1
cnZlKCk7CiAKKyAgICB2b2lkIGFkZEtleWZyYW1lKFBhc3NPd25QdHI8Q0NGbG9hdEtleWZyYW1l
Pik7CisKICAgICAvLyBDQ0FuaW1hdGlvbkN1cnZlIGltcGxlbWVudGF0aW9uCiAgICAgdmlydHVh
bCBkb3VibGUgZHVyYXRpb24oKSBjb25zdDsKICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NBbmlt
YXRpb25DdXJ2ZT4gY2xvbmUoKSBjb25zdDsKQEAgLTc1LDIwICs5NSwyMiBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBmbG9hdCBnZXRWYWx1ZShkb3VibGUgdCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0g
ICAgZXhwbGljaXQgQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlKGNvbnN0IFZlY3RvcjxD
Q0Zsb2F0S2V5ZnJhbWU+Jik7CisgICAgQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlKCk7
CiAKICAgICAvLyBBbHdheXMgc29ydGVkIGluIG9yZGVyIG9mIGluY3JlYXNpbmcgdGltZS4gTm8g
dHdvIGtleWZyYW1lcyBoYXZlIHRoZQogICAgIC8vIHNhbWUgdGltZS4KLSAgICBWZWN0b3I8Q0NG
bG9hdEtleWZyYW1lPiBtX2tleWZyYW1lczsKKyAgICBWZWN0b3I8T3duUHRyPENDRmxvYXRLZXlm
cmFtZT4gPiBtX2tleWZyYW1lczsKIH07CiAKIGNsYXNzIENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmUgOiBwdWJsaWMgQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSB7CiBwdWJsaWM6
CiAgICAgLy8gSXQgaXMgcmVxdWlyZWQgdGhhdCB0aGUga2V5ZnJhbWVzIGJlIHNvcnRlZCBieSB0
aW1lLgotICAgIHN0YXRpYyBQYXNzT3duUHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9u
Q3VydmU+IGNyZWF0ZShjb25zdCBWZWN0b3I8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4mIGtleWZyYW1l
cyk7CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25D
dXJ2ZT4gY3JlYXRlKCk7CiAKICAgICB2aXJ0dWFsIH5DQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1h
dGlvbkN1cnZlKCk7CiAKKyAgICB2b2lkIGFkZEtleWZyYW1lKFBhc3NPd25QdHI8Q0NUcmFuc2Zv
cm1LZXlmcmFtZT4pOworCiAgICAgLy8gQ0NBbmltYXRpb25DdXJ2ZSBpbXBsZW1lbnRhdGlvbgog
ICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uKCkgY29uc3Q7CiAgICAgdmlydHVhbCBQYXNzT3du
UHRyPENDQW5pbWF0aW9uQ3VydmU+IGNsb25lKCkgY29uc3Q7CkBAIC05NywxMSArMTE5LDExIEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IGdldFZhbHVlKGRvdWJs
ZSB0LCBjb25zdCBJbnRTaXplJikgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgQ0NL
ZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZShjb25zdCBWZWN0b3I8Q0NUcmFuc2Zvcm1L
ZXlmcmFtZT4mKTsKKyAgICBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCk7CiAK
ICAgICAvLyBBbHdheXMgc29ydGVkIGluIG9yZGVyIG9mIGluY3JlYXNpbmcgdGltZS4gTm8gdHdv
IGtleWZyYW1lcyBoYXZlIHRoZQogICAgIC8vIHNhbWUgdGltZS4KLSAgICBWZWN0b3I8Q0NUcmFu
c2Zvcm1LZXlmcmFtZT4gbV9rZXlmcmFtZXM7CisgICAgVmVjdG9yPE93blB0cjxDQ1RyYW5zZm9y
bUtleWZyYW1lPiA+IG1fa2V5ZnJhbWVzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4
IGQ5ZTcyZWZjNDg2YmMyNDRkZTQ0YzFiODQ3NGFjNmQ2N2Y2OTA1NjIuLjdmMTk4NDIxY2YxMjY2
MjI4NDRhYWFhMDA3MWEwNDQzMDM5NmM1NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKQEAgLTM3LDE2ICszNywxNiBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIG5hbWVzcGFjZSB7CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBLZXlmcmFtZSwg
dHlwZW5hbWUgVmFsdWU+Ci12b2lkIGFwcGVuZEtleWZyYW1lKFZlY3RvcjxLZXlmcmFtZT4mIGtl
eWZyYW1lcywgZG91YmxlIGtleVRpbWUsIGNvbnN0IFZhbHVlKiB2YWx1ZSkKK3RlbXBsYXRlIDxj
bGFzcyBWYWx1ZSwgY2xhc3MgS2V5ZnJhbWUsIGNsYXNzIEN1cnZlPgordm9pZCBhcHBlbmRLZXlm
cmFtZShDdXJ2ZSYgY3VydmUsIGRvdWJsZSBrZXlUaW1lLCBjb25zdCBWYWx1ZSogdmFsdWUsIFBh
c3NPd25QdHI8Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb24pCiB7Ci0gICAga2V5ZnJh
bWVzLmFwcGVuZChLZXlmcmFtZShrZXlUaW1lLCB2YWx1ZS0+dmFsdWUoKSkpOworICAgIGN1cnZl
LmFkZEtleWZyYW1lKEtleWZyYW1lOjpjcmVhdGUoa2V5VGltZSwgdmFsdWUtPnZhbHVlKCksIHRp
bWluZ0Z1bmN0aW9uKSk7CiB9CiAKIHRlbXBsYXRlIDw+Ci12b2lkIGFwcGVuZEtleWZyYW1lPEND
VHJhbnNmb3JtS2V5ZnJhbWUsIFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlPihWZWN0b3I8Q0NUcmFu
c2Zvcm1LZXlmcmFtZT4mIGtleWZyYW1lcywgZG91YmxlIGtleVRpbWUsIGNvbnN0IFRyYW5zZm9y
bUFuaW1hdGlvblZhbHVlKiB2YWx1ZSkKK3ZvaWQgYXBwZW5kS2V5ZnJhbWU8VHJhbnNmb3JtQW5p
bWF0aW9uVmFsdWUsIENDVHJhbnNmb3JtS2V5ZnJhbWUsIENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmU+KENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUmIGN1cnZlLCBk
b3VibGUga2V5VGltZSwgY29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUqIHZhbHVlLCBQYXNz
T3duUHRyPENDVGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uKQogewotICAgIGtleWZyYW1l
cy5hcHBlbmQoQ0NUcmFuc2Zvcm1LZXlmcmFtZShrZXlUaW1lLCAqdmFsdWUtPnZhbHVlKCkpKTsK
KyAgICBjdXJ2ZS5hZGRLZXlmcmFtZShDQ1RyYW5zZm9ybUtleWZyYW1lOjpjcmVhdGUoa2V5VGlt
ZSwgKnZhbHVlLT52YWx1ZSgpLCB0aW1pbmdGdW5jdGlvbikpOwogfQogCiB0ZW1wbGF0ZSA8Y2xh
c3MgVmFsdWUsIGNsYXNzIEtleWZyYW1lLCBjbGFzcyBDdXJ2ZT4KQEAgLTY0LDIxICs2NCwzNCBA
QCBQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBjcmVhdGVBY3RpdmVBbmltYXRpb24oY29u
c3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbAogICAgIGlmIChhbmltYXRpb24gJiYgYW5pbWF0aW9u
LT5pc0ZpbGxNb2RlU2V0KCkgJiYgKGFuaW1hdGlvbi0+ZmlsbHNGb3J3YXJkcygpIHx8IGFuaW1h
dGlvbi0+ZmlsbHNCYWNrd2FyZHMoKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCisgICAg
T3duUHRyPEN1cnZlPiBjdXJ2ZSA9IEN1cnZlOjpjcmVhdGUoKTsKICAgICBWZWN0b3I8S2V5ZnJh
bWU+IGtleWZyYW1lczsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVMaXN0LnNp
emUoKTsgaSsrKSB7CiAgICAgICAgIGNvbnN0IFZhbHVlKiBvcmlnaW5hbFZhbHVlID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgVmFsdWUqPih2YWx1ZUxpc3QuYXQoaSkpOwogCi0gICAgICAgIC8vIEZJWE1F
OiBhZGQgc3VwcG9ydCBmb3IgdGltaW5nIGZ1bmN0aW9ucy4KLSAgICAgICAgaWYgKG9yaWdpbmFs
VmFsdWUtPnRpbWluZ0Z1bmN0aW9uKCkgJiYgb3JpZ2luYWxWYWx1ZS0+dGltaW5nRnVuY3Rpb24o
KS0+dHlwZSgpICE9IFRpbWluZ0Z1bmN0aW9uOjpMaW5lYXJGdW5jdGlvbikKLSAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICBPd25QdHI8Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5n
RnVuY3Rpb247CisgICAgICAgIGlmIChvcmlnaW5hbFZhbHVlLT50aW1pbmdGdW5jdGlvbigpKSB7
CisgICAgICAgICAgICBzd2l0Y2ggKG9yaWdpbmFsVmFsdWUtPnRpbWluZ0Z1bmN0aW9uKCktPnR5
cGUoKSkgeworICAgICAgICAgICAgY2FzZSBUaW1pbmdGdW5jdGlvbjo6U3RlcHNGdW5jdGlvbjoK
KyAgICAgICAgICAgICAgICAvLyBGSVhNRTogYWRkIHN1cHBvcnQgZm9yIHN0ZXBzIHRpbWluZyBm
dW5jdGlvbi4KKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIGNh
c2UgVGltaW5nRnVuY3Rpb246OkxpbmVhckZ1bmN0aW9uOgorICAgICAgICAgICAgICAgIC8vIERv
bid0IHNldCB0aGUgdGltaW5nIGZ1bmN0aW9uLiBLZXlmcmFtZXMgYXJlIGludGVycG9sYXRlZCBs
aW5lYXJseSBpZiB0aGVyZSBpcyBubyB0aW1pbmcgZnVuY3Rpb24uCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIFRpbWluZ0Z1bmN0aW9uOjpDdWJpY0JlemllckZ1bmN0
aW9uOiB7CisgICAgICAgICAgICAgICAgY29uc3QgQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbiog
b3JpZ2luYWxUaW1pbmdGdW5jdGlvbiA9IHN0YXRpY19jYXN0PGNvbnN0IEN1YmljQmV6aWVyVGlt
aW5nRnVuY3Rpb24qPihvcmlnaW5hbFZhbHVlLT50aW1pbmdGdW5jdGlvbigpKTsKKyAgICAgICAg
ICAgICAgICB0aW1pbmdGdW5jdGlvbiA9IENDQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3Jl
YXRlKG9yaWdpbmFsVGltaW5nRnVuY3Rpb24tPngxKCksIG9yaWdpbmFsVGltaW5nRnVuY3Rpb24t
PnkxKCksIG9yaWdpbmFsVGltaW5nRnVuY3Rpb24tPngyKCksIG9yaWdpbmFsVGltaW5nRnVuY3Rp
b24tPnkyKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfSAvLyBzd2l0Y2gKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB0aW1pbmdGdW5j
dGlvbiA9IENDRWFzZVRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKTsKIAogICAgICAgICBkb3VibGUg
ZHVyYXRpb24gPSAoYW5pbWF0aW9uICYmIGFuaW1hdGlvbi0+aXNEdXJhdGlvblNldCgpKSA/IGFu
aW1hdGlvbi0+ZHVyYXRpb24oKSA6IDE7Ci0gICAgICAgIGFwcGVuZEtleWZyYW1lKGtleWZyYW1l
cywgb3JpZ2luYWxWYWx1ZS0+a2V5VGltZSgpICogZHVyYXRpb24sIG9yaWdpbmFsVmFsdWUpOwor
ICAgICAgICBhcHBlbmRLZXlmcmFtZTxWYWx1ZSwgS2V5ZnJhbWUsIEN1cnZlPigqY3VydmUsIG9y
aWdpbmFsVmFsdWUtPmtleVRpbWUoKSAqIGR1cmF0aW9uLCBvcmlnaW5hbFZhbHVlLCB0aW1pbmdG
dW5jdGlvbi5yZWxlYXNlKCkpOwogICAgIH0KIAotICAgIE93blB0cjxDdXJ2ZT4gY3VydmUgPSBD
dXJ2ZTo6Y3JlYXRlKGtleWZyYW1lcyk7Ci0KICAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+
IGFuaW0gPSBDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGN1cnZlLnJlbGVhc2UoKSwgYW5pbWF0
aW9uSWQsIGdyb3VwSWQsIHRhcmdldFByb3BlcnR5KTsKIAogICAgIEFTU0VSVChhbmltLmdldCgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGltaW5nRnVuY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUaW1pbmdGdW5jdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTE4MmMyNjI4
OTA4OGM0YjliMjg5ZDUzMjkxYjcxMzQzNmIxOGZmOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGltaW5nRnVuY3Rpb24u
Y3BwCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2luY2x1ZGUgImNjL0NDVGltaW5nRnVuY3Rpb24uaCIKKworI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KKworbmFtZXNwYWNlIHsKK2NvbnN0IGRvdWJsZSBrRXBzaWxvbiA9IDFlLTY7Cit9IC8v
IG5hbWVzcGFjZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NDVGltaW5nRnVuY3Rpb246OkND
VGltaW5nRnVuY3Rpb24oKQoreworfQorCitDQ1RpbWluZ0Z1bmN0aW9uOjp+Q0NUaW1pbmdGdW5j
dGlvbigpCit7Cit9CisKK2RvdWJsZSBDQ1RpbWluZ0Z1bmN0aW9uOjpkdXJhdGlvbigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIDEuMDsKK30KKworUGFzc093blB0cjxDQ0N1YmljQmV6aWVyVGltaW5n
RnVuY3Rpb24+IENDQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKGRvdWJsZSB4MSwg
ZG91YmxlIHkxLCBkb3VibGUgeDIsIGRvdWJsZSB5MikKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IENDQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbih4MSwgeTEsIHgyLCB5MikpOworfQorCitD
Q0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OkNDQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbihk
b3VibGUgeDEsIGRvdWJsZSB5MSwgZG91YmxlIHgyLCBkb3VibGUgeTIpCisgICAgOiBtX2N1cnZl
KHgxLCB5MSwgeDIsIHkyKQoreworfQorCitDQ0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246On5D
Q0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24oKQoreworfQorCitmbG9hdCBDQ0N1YmljQmV6aWVy
VGltaW5nRnVuY3Rpb246OmdldFZhbHVlKGRvdWJsZSB4KSBjb25zdAoreworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxmbG9hdD4obV9jdXJ2ZS5zb2x2ZSh4LCBrRXBzaWxvbikpOworfQorCitQYXNz
T3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IENDQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y2xv
bmUoKSBjb25zdAoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NDdWJpY0JlemllclRpbWlu
Z0Z1bmN0aW9uKCp0aGlzKSk7Cit9CisKK1Bhc3NPd25QdHI8Q0NUaW1pbmdGdW5jdGlvbj4gQ0NF
YXNlVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIENDQ3ViaWNCZXppZXJU
aW1pbmdGdW5jdGlvbjo6Y3JlYXRlKDAuMjUsIDAuMSwgMC4yNSwgMSk7Cit9CisKK1Bhc3NPd25Q
dHI8Q0NUaW1pbmdGdW5jdGlvbj4gQ0NFYXNlSW5UaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkKK3sK
KyAgICByZXR1cm4gQ0NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoMC40MiwgMCwg
MS4wLCAxKTsKK30KKworUGFzc093blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPiBDQ0Vhc2VPdXRUaW1p
bmdGdW5jdGlvbjo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gQ0NDdWJpY0JlemllclRpbWluZ0Z1
bmN0aW9uOjpjcmVhdGUoMCwgMCwgMC41OCwgMSk7Cit9CisKK1Bhc3NPd25QdHI8Q0NUaW1pbmdG
dW5jdGlvbj4gQ0NFYXNlSW5PdXRUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkKK3sKKyAgICByZXR1
cm4gQ0NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoMC40MiwgMCwgMC41OCwgMSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGltaW5nRnVuY3Rpb24uaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGltaW5nRnVuY3Rpb24u
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi43YTVlNGY5NGM4NDIxOTM0YWUxODg1NTI1NDI5YWEwNmYyN2VhOGYwCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NUaW1pbmdGdW5jdGlvbi5oCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisg
KiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgQ0NUaW1pbmdGdW5jdGlvbl9oCisjZGVmaW5lIENDVGltaW5nRnVuY3Rpb25faAor
CisjaW5jbHVkZSAiVW5pdEJlemllci5oIgorI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUu
aCIKKworI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworLy8gU2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtdHJhbnNpdGlvbnMvLgorY2xhc3Mg
Q0NUaW1pbmdGdW5jdGlvbiA6IHB1YmxpYyBDQ0Zsb2F0QW5pbWF0aW9uQ3VydmUgeworcHVibGlj
OgorICAgIHZpcnR1YWwgfkNDVGltaW5nRnVuY3Rpb24oKTsKKworICAgIC8vIFBhcnRpYWwgaW1w
bGVtZW50YXRpb24gb2YgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlLgorICAgIHZpcnR1YWwgZG91Ymxl
IGR1cmF0aW9uKCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICBDQ1RpbWluZ0Z1bmN0aW9uKCk7
Cit9OworCitjbGFzcyBDQ0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24gOiBwdWJsaWMgQ0NUaW1p
bmdGdW5jdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NDdWJpY0Jlemll
clRpbWluZ0Z1bmN0aW9uPiBjcmVhdGUoZG91YmxlIHgxLCBkb3VibGUgeTEsIGRvdWJsZSB4Miwg
ZG91YmxlIHkyKTsKKyAgICB2aXJ0dWFsIH5DQ0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24oKTsK
KworICAgIC8vIFBhcnRpYWwgaW1wbGVtZW50YXRpb24gb2YgQ0NGbG9hdEFuaW1hdGlvbkN1cnZl
LgorICAgIHZpcnR1YWwgZmxvYXQgZ2V0VmFsdWUoZG91YmxlIHQpIGNvbnN0OworICAgIHZpcnR1
YWwgUGFzc093blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiBjbG9uZSgpIGNvbnN0OworCitwcm90ZWN0
ZWQ6CisgICAgQ0NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKGRvdWJsZSB4MSwgZG91YmxlIHkx
LCBkb3VibGUgeDIsIGRvdWJsZSB5Mik7CisKKyAgICBVbml0QmV6aWVyIG1fY3VydmU7Cit9Owor
CitjbGFzcyBDQ0Vhc2VUaW1pbmdGdW5jdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NP
d25QdHI8Q0NUaW1pbmdGdW5jdGlvbj4gY3JlYXRlKCk7Cit9OworCitjbGFzcyBDQ0Vhc2VJblRp
bWluZ0Z1bmN0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1RpbWluZ0Z1
bmN0aW9uPiBjcmVhdGUoKTsKK307CisKK2NsYXNzIENDRWFzZU91dFRpbWluZ0Z1bmN0aW9uIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPiBjcmVhdGUo
KTsKK307CisKK2NsYXNzIENDRWFzZUluT3V0VGltaW5nRnVuY3Rpb24geworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzT3duUHRyPENDVGltaW5nRnVuY3Rpb24+IGNyZWF0ZSgpOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ0NUaW1pbmdGdW5jdGlvbl9oCisKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NLZXlmcmFtZWRBbmltYXRp
b25DdXJ2ZVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0tleWZyYW1l
ZEFuaW1hdGlvbkN1cnZlVGVzdC5jcHAKaW5kZXggYjc3MzJhZWFiNzQyN2RlMzhjN2Q3NDdkOTU3
MDE2Njk5ODFlNmZiNS4uMmE1ODcxNjRiMTNlMDhjMDMxZWQ3Y2YwOTIxMjE0YTYzM2IyYTFiMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0tleWZyYW1lZEFuaW1h
dGlvbkN1cnZlVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0tl
eWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdC5jcHAKQEAgLTQ4LDkgKzQ4LDggQEAgdm9pZCBleHBl
Y3RUcmFuc2xhdGVYKGRvdWJsZSB0cmFuc2xhdGVYLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgbWF0cml4KQogLy8gVGVzdHMgdGhhdCBhIGZsb2F0IGFuaW1hdGlvbiB3aXRoIG9uZSBrZXlm
cmFtZSB3b3JrcyBhcyBleHBlY3RlZC4KIFRFU1QoQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRl
c3QsIE9uZUZsb2F0S2V5ZnJhbWUpCiB7Ci0gICAgVmVjdG9yPENDRmxvYXRLZXlmcmFtZT4ga2V5
ZnJhbWVzOwotICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NGbG9hdEtleWZyYW1lKDAsIDIpKTsKLSAg
ICBPd25QdHI8Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShDQ0tleWZyYW1l
ZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZShrZXlmcmFtZXMpKTsKKyAgICBPd25QdHI8Q0NL
ZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShDQ0tleWZyYW1lZEZsb2F0QW5pbWF0
aW9uQ3VydmU6OmNyZWF0ZSgpKTsKKyAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NGbG9hdEtleWZy
YW1lOjpjcmVhdGUoMCwgMiwgbnVsbHB0cikpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2
ZS0+Z2V0VmFsdWUoLTEpKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdldFZhbHVl
KDApKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdldFZhbHVlKDAuNSkpOwpAQCAt
NjEsMTAgKzYwLDkgQEAgVEVTVChDQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdCwgT25lRmxv
YXRLZXlmcmFtZSkKIC8vIFRlc3RzIHRoYXQgYSBmbG9hdCBhbmltYXRpb24gd2l0aCB0d28ga2V5
ZnJhbWVzIHdvcmtzIGFzIGV4cGVjdGVkLgogVEVTVChDQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZl
VGVzdCwgVHdvRmxvYXRLZXlmcmFtZSkKIHsKLSAgICBWZWN0b3I8Q0NGbG9hdEtleWZyYW1lPiBr
ZXlmcmFtZXM7Ci0gICAga2V5ZnJhbWVzLmFwcGVuZChDQ0Zsb2F0S2V5ZnJhbWUoMCwgMikpOwot
ICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NGbG9hdEtleWZyYW1lKDEsIDQpKTsKLSAgICBPd25QdHI8
Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShDQ0tleWZyYW1lZEZsb2F0QW5p
bWF0aW9uQ3VydmU6OmNyZWF0ZShrZXlmcmFtZXMpKTsKKyAgICBPd25QdHI8Q0NLZXlmcmFtZWRG
bG9hdEFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6
OmNyZWF0ZSgpKTsKKyAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NGbG9hdEtleWZyYW1lOjpjcmVh
dGUoMCwgMiwgbnVsbHB0cikpOworICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ0Zsb2F0S2V5ZnJh
bWU6OmNyZWF0ZSgxLCA0LCBudWxscHRyKSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZl
LT5nZXRWYWx1ZSgtMSkpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUo
MCkpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgzLCBjdXJ2ZS0+Z2V0VmFsdWUoMC41KSk7CkBAIC03
NSwxMSArNzMsMTAgQEAgVEVTVChDQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdCwgVHdvRmxv
YXRLZXlmcmFtZSkKIC8vIFRlc3RzIHRoYXQgYSBmbG9hdCBhbmltYXRpb24gd2l0aCB0aHJlZSBr
ZXlmcmFtZXMgd29ya3MgYXMgZXhwZWN0ZWQuCiBURVNUKENDS2V5ZnJhbWVkQW5pbWF0aW9uQ3Vy
dmVUZXN0LCBUaHJlZUZsb2F0S2V5ZnJhbWUpCiB7Ci0gICAgVmVjdG9yPENDRmxvYXRLZXlmcmFt
ZT4ga2V5ZnJhbWVzOwotICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NGbG9hdEtleWZyYW1lKDAsIDIp
KTsKLSAgICBrZXlmcmFtZXMuYXBwZW5kKENDRmxvYXRLZXlmcmFtZSgxLCA0KSk7Ci0gICAga2V5
ZnJhbWVzLmFwcGVuZChDQ0Zsb2F0S2V5ZnJhbWUoMiwgOCkpOwotICAgIE93blB0cjxDQ0tleWZy
YW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU+IGN1cnZlKENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25D
dXJ2ZTo6Y3JlYXRlKGtleWZyYW1lcykpOworICAgIE93blB0cjxDQ0tleWZyYW1lZEZsb2F0QW5p
bWF0aW9uQ3VydmU+IGN1cnZlKENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRl
KCkpOworICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ0Zsb2F0S2V5ZnJhbWU6OmNyZWF0ZSgwLCAy
LCBudWxscHRyKSk7CisgICAgY3VydmUtPmFkZEtleWZyYW1lKENDRmxvYXRLZXlmcmFtZTo6Y3Jl
YXRlKDEsIDQsIG51bGxwdHIpKTsKKyAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NGbG9hdEtleWZy
YW1lOjpjcmVhdGUoMiwgOCwgbnVsbHB0cikpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2
ZS0+Z2V0VmFsdWUoLTEpKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdldFZhbHVl
KDApKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMywgY3VydmUtPmdldFZhbHVlKDAuNSkpOwpAQCAt
OTIsMTMgKzg5LDExIEBAIFRFU1QoQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QsIFRocmVl
RmxvYXRLZXlmcmFtZSkKIC8vIFRlc3RzIHRoYXQgYSBmbG9hdCBhbmltYXRpb24gd2l0aCBtdWx0
aXBsZSBrZXlzIGF0IGEgZ2l2ZW4gdGltZSB3b3JrcyBzYW5lbHkuCiBURVNUKENDS2V5ZnJhbWVk
QW5pbWF0aW9uQ3VydmVUZXN0LCBSZXBlYXRlZEZsb2F0S2V5VGltZXMpCiB7Ci0gICAgVmVjdG9y
PENDRmxvYXRLZXlmcmFtZT4ga2V5ZnJhbWVzOwotICAgIC8vIEEgc3RlcCBmdW5jdGlvbi4KLSAg
ICBrZXlmcmFtZXMuYXBwZW5kKENDRmxvYXRLZXlmcmFtZSgwLCA0KSk7Ci0gICAga2V5ZnJhbWVz
LmFwcGVuZChDQ0Zsb2F0S2V5ZnJhbWUoMSwgNCkpOwotICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NG
bG9hdEtleWZyYW1lKDEsIDYpKTsKLSAgICBrZXlmcmFtZXMuYXBwZW5kKENDRmxvYXRLZXlmcmFt
ZSgyLCA2KSk7Ci0gICAgT3duUHRyPENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZT4gY3Vy
dmUoQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoa2V5ZnJhbWVzKSk7Cisg
ICAgT3duUHRyPENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZT4gY3VydmUoQ0NLZXlmcmFt
ZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoKSk7CisgICAgY3VydmUtPmFkZEtleWZyYW1l
KENDRmxvYXRLZXlmcmFtZTo6Y3JlYXRlKDAsIDQsIG51bGxwdHIpKTsKKyAgICBjdXJ2ZS0+YWRk
S2V5ZnJhbWUoQ0NGbG9hdEtleWZyYW1lOjpjcmVhdGUoMSwgNCwgbnVsbHB0cikpOworICAgIGN1
cnZlLT5hZGRLZXlmcmFtZShDQ0Zsb2F0S2V5ZnJhbWU6OmNyZWF0ZSgxLCA2LCBudWxscHRyKSk7
CisgICAgY3VydmUtPmFkZEtleWZyYW1lKENDRmxvYXRLZXlmcmFtZTo6Y3JlYXRlKDIsIDYsIG51
bGxwdHIpKTsKIAogICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS0+Z2V0VmFsdWUoLTEpKTsK
ICAgICBFWFBFQ1RfRkxPQVRfRVEoNCwgY3VydmUtPmdldFZhbHVlKDApKTsKQEAgLTExNywxMSAr
MTEyLDExIEBAIFRFU1QoQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QsIFJlcGVhdGVkRmxv
YXRLZXlUaW1lcykKIC8vIFRlc3RzIHRoYXQgYSB0cmFuc2Zvcm0gYW5pbWF0aW9uIHdpdGggb25l
IGtleWZyYW1lIHdvcmtzIGFzIGV4cGVjdGVkLgogVEVTVChDQ0tleWZyYW1lZEFuaW1hdGlvbkN1
cnZlVGVzdCwgT25lVHJhbnNmb3JtS2V5ZnJhbWUpCiB7Ci0gICAgVmVjdG9yPENDVHJhbnNmb3Jt
S2V5ZnJhbWU+IGtleWZyYW1lczsKKyAgICBPd25QdHI8Q0NLZXlmcmFtZWRUcmFuc2Zvcm1Bbmlt
YXRpb25DdXJ2ZT4gY3VydmUoQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3Jl
YXRlKCkpOwogICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKICAgICBvcGVyYXRp
b25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVh
dGUoTGVuZ3RoKDIsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9u
OjpUUkFOU0xBVEVfWCkpOwotICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NUcmFuc2Zvcm1LZXlmcmFt
ZSgwLCBvcGVyYXRpb25zKSk7Ci0gICAgT3duUHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0
aW9uQ3VydmU+IGN1cnZlKENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNyZWF0
ZShrZXlmcmFtZXMpKTsKKyAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NUcmFuc2Zvcm1LZXlmcmFt
ZTo6Y3JlYXRlKDAsIG9wZXJhdGlvbnMsIG51bGxwdHIpKTsKKwogICAgIEludFNpemUgbGF5ZXJT
aXplOyAvLyBpZ25vcmVkCiAgICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUo
LTEsIGxheWVyU2l6ZSkpOwogICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVl
KDAsIGxheWVyU2l6ZSkpOwpAQCAtMTMzLDE0ICsxMjgsMTMgQEAgVEVTVChDQ0tleWZyYW1lZEFu
aW1hdGlvbkN1cnZlVGVzdCwgT25lVHJhbnNmb3JtS2V5ZnJhbWUpCiAvLyBUZXN0cyB0aGF0IGEg
dHJhbnNmb3JtIGFuaW1hdGlvbiB3aXRoIHR3byBrZXlmcmFtZXMgd29ya3MgYXMgZXhwZWN0ZWQu
CiBURVNUKENDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVUZXN0LCBUd29UcmFuc2Zvcm1LZXlmcmFt
ZSkKIHsKLSAgICBWZWN0b3I8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4ga2V5ZnJhbWVzOworICAgIE93
blB0cjxDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShDQ0tleWZyYW1l
ZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoKSk7CiAgICAgVHJhbnNmb3JtT3BlcmF0
aW9ucyBvcGVyYXRpb25zMTsKICAgICBvcGVyYXRpb25zMS5vcGVyYXRpb25zKCkuYXBwZW5kKFRy
YW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgyLCBGaXhlZCksIExlbmd0
aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKICAgICBUcmFu
c2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOwogICAgIG9wZXJhdGlvbnMyLm9wZXJhdGlvbnMo
KS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDQsIEZp
eGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkp
OwotICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NUcmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRpb25z
MSkpOwotICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRp
b25zMikpOwotICAgIE93blB0cjxDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPiBj
dXJ2ZShDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoa2V5ZnJhbWVz
KSk7CisgICAgY3VydmUtPmFkZEtleWZyYW1lKENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZSgw
LCBvcGVyYXRpb25zMSwgbnVsbHB0cikpOworICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ1RyYW5z
Zm9ybUtleWZyYW1lOjpjcmVhdGUoMSwgb3BlcmF0aW9uczIsIG51bGxwdHIpKTsKICAgICBJbnRT
aXplIGxheWVyU2l6ZTsgLy8gaWdub3JlZAogICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUt
PmdldFZhbHVlKC0xLCBsYXllclNpemUpKTsKICAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZl
LT5nZXRWYWx1ZSgwLCBsYXllclNpemUpKTsKQEAgLTE1MiwxNyArMTQ2LDE2IEBAIFRFU1QoQ0NL
ZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QsIFR3b1RyYW5zZm9ybUtleWZyYW1lKQogLy8gVGVz
dHMgdGhhdCBhIHRyYW5zZm9ybSBhbmltYXRpb24gd2l0aCB0aHJlZSBrZXlmcmFtZXMgd29ya3Mg
YXMgZXhwZWN0ZWQuCiBURVNUKENDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVUZXN0LCBUaHJlZVRy
YW5zZm9ybUtleWZyYW1lKQogewotICAgIFZlY3RvcjxDQ1RyYW5zZm9ybUtleWZyYW1lPiBrZXlm
cmFtZXM7CisgICAgT3duUHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IGN1
cnZlKENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgpKTsKICAgICBU
cmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOwogICAgIG9wZXJhdGlvbnMxLm9wZXJhdGlv
bnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDIs
IEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVf
WCkpOwogICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7CiAgICAgb3BlcmF0aW9u
czIub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0
ZShMZW5ndGgoNCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246
OlRSQU5TTEFURV9YKSk7CiAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMzsKICAg
ICBvcGVyYXRpb25zMy5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJh
dGlvbjo6Y3JlYXRlKExlbmd0aCg4LCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9y
bU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKLSAgICBrZXlmcmFtZXMuYXBwZW5kKENDVHJhbnNm
b3JtS2V5ZnJhbWUoMCwgb3BlcmF0aW9uczEpKTsKLSAgICBrZXlmcmFtZXMuYXBwZW5kKENDVHJh
bnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0aW9uczIpKTsKLSAgICBrZXlmcmFtZXMuYXBwZW5kKEND
VHJhbnNmb3JtS2V5ZnJhbWUoMiwgb3BlcmF0aW9uczMpKTsKLSAgICBPd25QdHI8Q0NLZXlmcmFt
ZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4gY3VydmUoQ0NLZXlmcmFtZWRUcmFuc2Zvcm1Bbmlt
YXRpb25DdXJ2ZTo6Y3JlYXRlKGtleWZyYW1lcykpOworICAgIGN1cnZlLT5hZGRLZXlmcmFtZShD
Q1RyYW5zZm9ybUtleWZyYW1lOjpjcmVhdGUoMCwgb3BlcmF0aW9uczEsIG51bGxwdHIpKTsKKyAg
ICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NUcmFuc2Zvcm1LZXlmcmFtZTo6Y3JlYXRlKDEsIG9wZXJh
dGlvbnMyLCBudWxscHRyKSk7CisgICAgY3VydmUtPmFkZEtleWZyYW1lKENDVHJhbnNmb3JtS2V5
ZnJhbWU6OmNyZWF0ZSgyLCBvcGVyYXRpb25zMywgbnVsbHB0cikpOwogICAgIEludFNpemUgbGF5
ZXJTaXplOyAvLyBpZ25vcmVkCiAgICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFs
dWUoLTEsIGxheWVyU2l6ZSkpOwogICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZh
bHVlKDAsIGxheWVyU2l6ZSkpOwpAQCAtMTc2LDcgKzE2OSw3IEBAIFRFU1QoQ0NLZXlmcmFtZWRB
bmltYXRpb25DdXJ2ZVRlc3QsIFRocmVlVHJhbnNmb3JtS2V5ZnJhbWUpCiAvLyBUZXN0cyB0aGF0
IGEgdHJhbnNmb3JtIGFuaW1hdGlvbiB3aXRoIG11bHRpcGxlIGtleXMgYXQgYSBnaXZlbiB0aW1l
IHdvcmtzIHNhbmVseS4KIFRFU1QoQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QsIFJlcGVh
dGVkVHJhbnNmb3JtS2V5VGltZXMpCiB7Ci0gICAgVmVjdG9yPENDVHJhbnNmb3JtS2V5ZnJhbWU+
IGtleWZyYW1lczsKKyAgICBPd25QdHI8Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2
ZT4gY3VydmUoQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkpOwog
ICAgIC8vIEEgc3RlcCBmdW5jdGlvbi4KICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlv
bnMxOwogICAgIG9wZXJhdGlvbnMxLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNm
b3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDQsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwg
VHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOwpAQCAtMTg2LDExICsxNzksMTAgQEAg
VEVTVChDQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdCwgUmVwZWF0ZWRUcmFuc2Zvcm1LZXlU
aW1lcykKICAgICBvcGVyYXRpb25zMy5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCg2LCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCks
IFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKICAgICBUcmFuc2Zvcm1PcGVyYXRp
b25zIG9wZXJhdGlvbnM0OwogICAgIG9wZXJhdGlvbnM0Lm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJh
bnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDYsIEZpeGVkKSwgTGVuZ3Ro
KDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOwotICAgIGtleWZy
YW1lcy5hcHBlbmQoQ0NUcmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRpb25zMSkpOwotICAgIGtl
eWZyYW1lcy5hcHBlbmQoQ0NUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMikpOwotICAg
IGtleWZyYW1lcy5hcHBlbmQoQ0NUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMykpOwot
ICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NUcmFuc2Zvcm1LZXlmcmFtZSgyLCBvcGVyYXRpb25zNCkp
OwotICAgIE93blB0cjxDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShD
Q0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoa2V5ZnJhbWVzKSk7Cisg
ICAgY3VydmUtPmFkZEtleWZyYW1lKENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZSgwLCBvcGVy
YXRpb25zMSwgbnVsbHB0cikpOworICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ1RyYW5zZm9ybUtl
eWZyYW1lOjpjcmVhdGUoMSwgb3BlcmF0aW9uczIsIG51bGxwdHIpKTsKKyAgICBjdXJ2ZS0+YWRk
S2V5ZnJhbWUoQ0NUcmFuc2Zvcm1LZXlmcmFtZTo6Y3JlYXRlKDEsIG9wZXJhdGlvbnMzLCBudWxs
cHRyKSk7CisgICAgY3VydmUtPmFkZEtleWZyYW1lKENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0
ZSgyLCBvcGVyYXRpb25zNCwgbnVsbHB0cikpOwogCiAgICAgSW50U2l6ZSBsYXllclNpemU7IC8v
IGlnbm9yZWQKIApAQCAtMjA5LDMzICsyMDEsMjAgQEAgVEVTVChDQ0tleWZyYW1lZEFuaW1hdGlv
bkN1cnZlVGVzdCwgUmVwZWF0ZWRUcmFuc2Zvcm1LZXlUaW1lcykKICAgICBleHBlY3RUcmFuc2xh
dGVYKDYsIGN1cnZlLT5nZXRWYWx1ZSgzLCBsYXllclNpemUpKTsKIH0KIAotLy8gVGVzdHMgdGhh
dCBpbnZhbGlkIGxpc3RzIG9mIGtleWZyYW1lcyByZXN1bHQgaW4gbm90aGluZyBiZWluZyByZXR1
cm5lZCBmcm9tIDo6Y3JlYXRlLgotVEVTVChDQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdCwg
SW52YWxpZEtleWZyYW1lcykKKy8vIFRlc3RzIHRoYXQgYSBjdWJpYyBiZXppZXIgdGltaW5nIGZ1
bmN0aW9uIHdvcmtzIGFzIGV4cGVjdGVkLgorVEVTVChDQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZl
VGVzdCwgQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbikKIHsKLSAgICAvLyBJdCBpcyBpbnZhbGlk
IHRvIHBhc3MgYW4gZW1wdHkgdmVjdG9yIG9mIGtleWZyYW1lcyB0byBjcmVhdGUuCi0gICAgVmVj
dG9yPENDVHJhbnNmb3JtS2V5ZnJhbWU+IHRyYW5zZm9ybUtleWZyYW1lczsKLSAgICBPd25QdHI8
Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4gdHJhbnNmb3JtQ3VydmUgPSBDQ0tl
eWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpjcmVhdGUodHJhbnNmb3JtS2V5ZnJhbWVz
KTsKLSAgICBFWFBFQ1RfRkFMU0UodHJhbnNmb3JtQ3VydmUuZ2V0KCkpOwotCi0gICAgVmVjdG9y
PENDRmxvYXRLZXlmcmFtZT4gZmxvYXRLZXlmcmFtZXM7Ci0gICAgT3duUHRyPENDS2V5ZnJhbWVk
RmxvYXRBbmltYXRpb25DdXJ2ZT4gZmxvYXRDdXJ2ZSA9IENDS2V5ZnJhbWVkRmxvYXRBbmltYXRp
b25DdXJ2ZTo6Y3JlYXRlKGZsb2F0S2V5ZnJhbWVzKTsKLSAgICBFWFBFQ1RfRkFMU0UoZmxvYXRD
dXJ2ZS5nZXQoKSk7Ci0KLSAgICAvLyBJdCBpcyBpbnZhbGlkIHRvIHBhc3MgYSB2ZWN0b3Igb2Yg
dW5zb3J0ZWQga2V5ZnJhbWVzIHRvIGNyZWF0ZTsKLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9w
ZXJhdGlvbnMxOwotICAgIG9wZXJhdGlvbnMxLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRl
VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDIsIEZpeGVkKSwgTGVuZ3RoKDAsIEZp
eGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOwotICAgIFRyYW5zZm9ybU9w
ZXJhdGlvbnMgb3BlcmF0aW9uczI7Ci0gICAgb3BlcmF0aW9uczIub3BlcmF0aW9ucygpLmFwcGVu
ZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoNCwgRml4ZWQpLCBM
ZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7Ci0gICAg
dHJhbnNmb3JtS2V5ZnJhbWVzLmFwcGVuZChDQ1RyYW5zZm9ybUtleWZyYW1lKDEsIG9wZXJhdGlv
bnMxKSk7Ci0gICAgdHJhbnNmb3JtS2V5ZnJhbWVzLmFwcGVuZChDQ1RyYW5zZm9ybUtleWZyYW1l
KDAsIG9wZXJhdGlvbnMyKSk7Ci0gICAgdHJhbnNmb3JtQ3VydmUgPSBDQ0tleWZyYW1lZFRyYW5z
Zm9ybUFuaW1hdGlvbkN1cnZlOjpjcmVhdGUodHJhbnNmb3JtS2V5ZnJhbWVzKTsKLSAgICBFWFBF
Q1RfRkFMU0UodHJhbnNmb3JtQ3VydmUuZ2V0KCkpOwotCi0gICAgZmxvYXRLZXlmcmFtZXMuYXBw
ZW5kKENDRmxvYXRLZXlmcmFtZSgxLCAyKSk7Ci0gICAgZmxvYXRLZXlmcmFtZXMuYXBwZW5kKEND
RmxvYXRLZXlmcmFtZSgwLCA0KSk7Ci0gICAgZmxvYXRDdXJ2ZSA9IENDS2V5ZnJhbWVkRmxvYXRB
bmltYXRpb25DdXJ2ZTo6Y3JlYXRlKGZsb2F0S2V5ZnJhbWVzKTsKLSAgICBFWFBFQ1RfRkFMU0Uo
ZmxvYXRDdXJ2ZS5nZXQoKSk7CisgICAgT3duUHRyPENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25D
dXJ2ZT4gY3VydmUoQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoKSk7Cisg
ICAgY3VydmUtPmFkZEtleWZyYW1lKENDRmxvYXRLZXlmcmFtZTo6Y3JlYXRlKDAsIDAsIENDQ3Vi
aWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKDAuMjUsIDAsIDAuNzUsIDEpKSk7CisgICAg
Y3VydmUtPmFkZEtleWZyYW1lKENDRmxvYXRLZXlmcmFtZTo6Y3JlYXRlKDEsIDEsIG51bGxwdHIp
KTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBjdXJ2ZS0+Z2V0VmFsdWUoMCkpOworICAgIEVY
UEVDVF9MVCgwLCBjdXJ2ZS0+Z2V0VmFsdWUoMC4yNSkpOworICAgIEVYUEVDVF9HVCgwLjI1LCBj
dXJ2ZS0+Z2V0VmFsdWUoMC4yNSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgwLjUsIGN1cnZlLT5n
ZXRWYWx1ZSgwLjUpKTsKKyAgICBFWFBFQ1RfTFQoMC43NSwgY3VydmUtPmdldFZhbHVlKDAuNzUp
KTsKKyAgICBFWFBFQ1RfR1QoMSwgY3VydmUtPmdldFZhbHVlKDAuNzUpKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoMSwgY3VydmUtPmdldFZhbHVlKDEpKTsKIH0KIAotCiB9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129374</attachid>
            <date>2012-02-28 18:39:05 -0800</date>
            <delta_ts>2012-02-29 12:49:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79819-20120228213903.patch</filename>
            <type>text/plain</type>
            <size>49972</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4OTg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjNjYzk5YjEzOGI1NzI2
Mjc3MTE4NWUzY2MwZDFiYWY4OGRlZGQ1Yy4uNmQzMDk5YjdhMzA0Mzg0MDAwMGQwNDU1YTE5MzZk
YTFiNGRjZGNhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDEyLTAyLTI4ICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQWRk
IGltcGwtdGhyZWFkIHN1cHBvcnQgZm9yIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5ODE5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmlt
YXRpb25DdXJ2ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0tleWZyYW1lOjpDQ0tleWZyYW1l
KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZTo6fkND
S2V5ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZTo6dGltZSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0tleWZyYW1lOjp0aW1pbmdGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0Zsb2F0S2V5ZnJhbWU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0Zsb2F0S2V5
ZnJhbWU6OkNDRmxvYXRLZXlmcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0Zsb2F0S2V5ZnJh
bWU6On5DQ0Zsb2F0S2V5ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NGbG9hdEtleWZyYW1l
Ojp2YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0Zsb2F0S2V5ZnJhbWU6OmNsb25lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1RyYW5zZm9ybUtleWZyYW1lOjpDQ1RyYW5zZm9ybUtleWZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDVHJhbnNmb3JtS2V5ZnJhbWU6On5DQ1RyYW5zZm9ybUtleWZyYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDVHJhbnNmb3JtS2V5ZnJhbWU6OnZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDVHJhbnNmb3JtS2V5ZnJhbWU6OmNsb25lKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6Q0NLZXlmcmFtZWRGbG9hdEFuaW1h
dGlvbkN1cnZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25D
dXJ2ZTo6YWRkS2V5ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRGbG9hdEFu
aW1hdGlvbkN1cnZlOjpkdXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0tleWZyYW1lZEZs
b2F0QW5pbWF0aW9uQ3VydmU6OmNsb25lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDS2V5ZnJhbWVk
RmxvYXRBbmltYXRpb25DdXJ2ZTo6Z2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlm
cmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OkNDS2V5ZnJhbWVkVHJhbnNmb3Jt
QW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1B
bmltYXRpb25DdXJ2ZTo6fkNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6YWRkS2V5
ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25D
dXJ2ZTo6ZHVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1B
bmltYXRpb25DdXJ2ZTo6Y2xvbmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFu
c2Zvcm1BbmltYXRpb25DdXJ2ZTo6Z2V0VmFsdWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuaDoKKyAgICAgICAgKEND
S2V5ZnJhbWUpOgorICAgICAgICAoQ0NGbG9hdEtleWZyYW1lKToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoQ0NUcmFuc2Zvcm1LZXlmcmFtZSk6CisgICAgICAgIChDQ0tleWZyYW1lZEZs
b2F0QW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAoQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGltaW5nRnVuY3Rpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NUaW1pbmdGdW5jdGlvbjo6Q0NUaW1pbmdGdW5jdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpDQ1RpbWluZ0Z1bmN0aW9uOjp+Q0NUaW1pbmdGdW5jdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpDQ1RpbWluZ0Z1bmN0aW9uOjpkdXJhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpDQ0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OkNDQ3ViaWNCZXppZXJUaW1p
bmdGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0N1YmljQmV6aWVyVGltaW5nRnVuY3Rp
b246On5DQ0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0ND
dWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpnZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmNsb25lKToKKyAgICAgICAgKFdlYkNvcmU6OkND
RWFzZVRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NFYXNlSW5U
aW1pbmdGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRWFzZU91dFRpbWlu
Z0Z1bmN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NFYXNlSW5PdXRUaW1pbmdG
dW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RpbWluZ0Z1bmN0aW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChDQ1RpbWluZ0Z1bmN0aW9uKToKKyAgICAgICAgKENDQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlv
bik6CisgICAgICAgIChDQ0Vhc2VUaW1pbmdGdW5jdGlvbik6CisgICAgICAgIChDQ0Vhc2VJblRp
bWluZ0Z1bmN0aW9uKToKKyAgICAgICAgKENDRWFzZU91dFRpbWluZ0Z1bmN0aW9uKToKKyAgICAg
ICAgKENDRWFzZUluT3V0VGltaW5nRnVuY3Rpb24pOgorCiAyMDEyLTAyLTI3ICBJbHlhIFRpa2hv
bm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIHNpbmds
ZSBsaW5lIGZpeCBmb3IgcjEwODk4My4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggYTZl
OTRkZjg5NDJlMzlkZjc4NWFkNzM3OTk4Y2MzNDFmNWQzOTY3ZS4uZGUzZWI5NWMyODU3OGNiMzFk
OTFkZDIyOWVjYTJlYTI3YWIzNjg1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNCBAQAorMjAxMi0wMi0yOCAgSWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBbY2hyb21pdW1dIEFkZCBpbXBsLXRocmVhZCBzdXBwb3J0IGZvciBhbmlt
YXRpb24tdGltaW5nLWZ1bmN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03OTgxOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogdGVzdHMvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisgICAgICAgIChXZWJDb3JlKToKKwogMjAxMi0wMi0y
NiAgSGFqaW1lIE1vcnJpdGEgIDxtb3JyaXRhQGNocm9taXVtLm9yZz4KIAogICAgICAgICBNb3Zl
IENocm9tZUNsaWVudDo6c2hvd0NvbnRleHRNZW51KCkgdG8gQ29udGV4dE1lbnVDbGllbnQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQppbmRleCBlYjJmNTljY2Q0ZjFhNWEwMzY5ODk5NjYyMGEyZTJhYjU1YzcyYTY1
Li44YjdmOGJhNDliOGE0NzlmZTgyMTc1YzczNWNmZmRhMjdiN2UxNDM3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCkBAIC0zMzU3LDYgKzMzNTcsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlRHJhd1F1YWQuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVEcmF3UXVhZC5oJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbWluZ0Z1bmN0aW9uLmNwcCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaW1pbmdGdW5j
dGlvbi5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Ro
cmVhZC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Ro
cmVhZFByb3h5LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaHJlYWRQcm94eS5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmlt
YXRpb25DdXJ2ZS5jcHAKaW5kZXggYjYxNWM3MzZjYzAzZjA5Nzg5NzczNWM0ZjkwNGM2NzkzYzk5
ZjgwZi4uNDk2MjE3ZThhMTYzN2NkYjU1NGNkMzRkODFiOTc5NDM5NGVjYjQwNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFt
ZWRBbmltYXRpb25DdXJ2ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5jcHAKQEAgLTQyLDMxICs0
MiwxNzMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIHsKIAogdGVtcGxhdGUgPGNs
YXNzIEtleWZyYW1lPgotYm9vbCBrZXlmcmFtZXNBcmVTb3J0ZWQoY29uc3QgVmVjdG9yPEtleWZy
YW1lPiYga2V5ZnJhbWVzKQordm9pZCBpbnNlcnRLZXlmcmFtZShQYXNzT3duUHRyPEtleWZyYW1l
PiBrZXlmcmFtZSwgVmVjdG9yPE93blB0cjxLZXlmcmFtZT4gPiYga2V5ZnJhbWVzKQogewotICAg
IGlmICgha2V5ZnJhbWVzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGtleWZyYW1lcy5zaXplKCkgLSAxOyArK2kpIHsKLSAgICAgICAg
aWYgKGtleWZyYW1lc1tpXS50aW1lID4ga2V5ZnJhbWVzW2krMV0udGltZSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBPd25QdHI8S2V5ZnJhbWU+IHBvcEtleWZyYW1lID0ga2V5ZnJh
bWU7CisKKyAgICAvLyBVc3VhbGx5LCB0aGUga2V5ZnJhbWVzIHdpbGwgYmUgYWRkZWQgaW4gb3Jk
ZXIsIHNvIHRoaXMgbG9vcCB3b3VsZCBiZSB1bm5lY2Vzc2FyeSBhbmQKKyAgICAvLyB3ZSBzaG91
bGQgc2tpcCBpdCBpZiBwb3NzaWJsZS4KKyAgICBpZiAoIWtleWZyYW1lcy5pc0VtcHR5KCkgJiYg
cG9wS2V5ZnJhbWUtPnRpbWUoKSA8IGtleWZyYW1lcy5sYXN0KCktPnRpbWUoKSkgeworICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleWZyYW1lcy5zaXplKCk7ICsraSkgeworICAgICAg
ICAgICAgaWYgKHBvcEtleWZyYW1lLT50aW1lKCkgPCBrZXlmcmFtZXNbaV0tPnRpbWUoKSkgewor
ICAgICAgICAgICAgICAgIGtleWZyYW1lcy5pbnNlcnQoaSwgcG9wS2V5ZnJhbWUucmVsZWFzZSgp
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAg
ICB9CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBrZXlmcmFtZXMuYXBwZW5kKHBvcEtleWZyYW1l
LnJlbGVhc2UoKSk7Cit9CisKK1Bhc3NPd25QdHI8Q0NUaW1pbmdGdW5jdGlvbj4gY2xvbmVUaW1p
bmdGdW5jdGlvbihjb25zdCBDQ1RpbWluZ0Z1bmN0aW9uKiB0aW1pbmdGdW5jdGlvbikKK3sKKyAg
ICBBU1NFUlQodGltaW5nRnVuY3Rpb24pOworICAgIE93blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiBj
dXJ2ZSh0aW1pbmdGdW5jdGlvbi0+Y2xvbmUoKSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKHN0YXRp
Y19jYXN0PENDVGltaW5nRnVuY3Rpb24qPihjdXJ2ZS5sZWFrUHRyKCkpKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UKIAotUGFzc093blB0cjxDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU+IEND
S2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKGNvbnN0IFZlY3RvcjxDQ0Zsb2F0
S2V5ZnJhbWU+JiBrZXlmcmFtZXMpCitDQ0tleWZyYW1lOjpDQ0tleWZyYW1lKGRvdWJsZSB0aW1l
LCBQYXNzT3duUHRyPENDVGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uKQorICAgIDogbV90
aW1lKHRpbWUpCisgICAgLCBtX3RpbWluZ0Z1bmN0aW9uKHRpbWluZ0Z1bmN0aW9uKQoreworfQor
CitDQ0tleWZyYW1lOjp+Q0NLZXlmcmFtZSgpCit7Cit9CisKK2RvdWJsZSBDQ0tleWZyYW1lOjp0
aW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90aW1lOworfQorCitjb25zdCBDQ1RpbWluZ0Z1
bmN0aW9uKiBDQ0tleWZyYW1lOjp0aW1pbmdGdW5jdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fdGltaW5nRnVuY3Rpb24uZ2V0KCk7Cit9CisKK1Bhc3NPd25QdHI8Q0NGbG9hdEtleWZyYW1l
PiBDQ0Zsb2F0S2V5ZnJhbWU6OmNyZWF0ZShkb3VibGUgdGltZSwgZmxvYXQgdmFsdWUsIFBhc3NP
d25QdHI8Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb24pCit7CisgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBDQ0Zsb2F0S2V5ZnJhbWUodGltZSwgdmFsdWUsIHRpbWluZ0Z1bmN0aW9uKSk7
Cit9CisKK0NDRmxvYXRLZXlmcmFtZTo6Q0NGbG9hdEtleWZyYW1lKGRvdWJsZSB0aW1lLCBmbG9h
dCB2YWx1ZSwgUGFzc093blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbikKKyAg
ICA6IENDS2V5ZnJhbWUodGltZSwgdGltaW5nRnVuY3Rpb24pCisgICAgLCBtX3ZhbHVlKHZhbHVl
KQoreworfQorCitDQ0Zsb2F0S2V5ZnJhbWU6On5DQ0Zsb2F0S2V5ZnJhbWUoKQoreworfQorCitm
bG9hdCBDQ0Zsb2F0S2V5ZnJhbWU6OnZhbHVlKCkgY29uc3QKIHsKLSAgICBpZiAoIWtleWZyYW1l
cy5zaXplKCkgfHwgIWtleWZyYW1lc0FyZVNvcnRlZChrZXlmcmFtZXMpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gbV92YWx1ZTsKK30KIAotICAgIHJldHVybiBhZG9wdFB0
cihuZXcgQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlKGtleWZyYW1lcykpOworUGFzc093
blB0cjxDQ0Zsb2F0S2V5ZnJhbWU+IENDRmxvYXRLZXlmcmFtZTo6Y2xvbmUoKSBjb25zdAorewor
ICAgIHJldHVybiBDQ0Zsb2F0S2V5ZnJhbWU6OmNyZWF0ZSh0aW1lKCksIHZhbHVlKCksIHRpbWlu
Z0Z1bmN0aW9uKCkgPyBjbG9uZVRpbWluZ0Z1bmN0aW9uKHRpbWluZ0Z1bmN0aW9uKCkpIDogbnVs
bHB0cik7CiB9CiAKLUNDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6Q0NLZXlmcmFtZWRG
bG9hdEFuaW1hdGlvbkN1cnZlKGNvbnN0IFZlY3RvcjxDQ0Zsb2F0S2V5ZnJhbWU+JiBrZXlmcmFt
ZXMpCi0gICAgOiBtX2tleWZyYW1lcyhrZXlmcmFtZXMpCitQYXNzT3duUHRyPENDVHJhbnNmb3Jt
S2V5ZnJhbWU+IENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZShkb3VibGUgdGltZSwgY29uc3Qg
VHJhbnNmb3JtT3BlcmF0aW9ucyYgdmFsdWUsIFBhc3NPd25QdHI8Q0NUaW1pbmdGdW5jdGlvbj4g
dGltaW5nRnVuY3Rpb24pCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1RyYW5zZm9ybUtl
eWZyYW1lKHRpbWUsIHZhbHVlLCB0aW1pbmdGdW5jdGlvbikpOworfQorCitDQ1RyYW5zZm9ybUtl
eWZyYW1lOjpDQ1RyYW5zZm9ybUtleWZyYW1lKGRvdWJsZSB0aW1lLCBjb25zdCBUcmFuc2Zvcm1P
cGVyYXRpb25zJiB2YWx1ZSwgUGFzc093blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5j
dGlvbikKKyAgICA6IENDS2V5ZnJhbWUodGltZSwgdGltaW5nRnVuY3Rpb24pCisgICAgLCBtX3Zh
bHVlKHZhbHVlKQoreworfQorCitDQ1RyYW5zZm9ybUtleWZyYW1lOjp+Q0NUcmFuc2Zvcm1LZXlm
cmFtZSgpCit7Cit9CisKK2NvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIENDVHJhbnNmb3JtS2V5
ZnJhbWU6OnZhbHVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV92YWx1ZTsKK30KKworUGFzc093
blB0cjxDQ1RyYW5zZm9ybUtleWZyYW1lPiBDQ1RyYW5zZm9ybUtleWZyYW1lOjpjbG9uZSgpIGNv
bnN0Cit7CisgICAgLy8gV2UgbmVlZCB0byBkbyBhIGRlZXAgY29weSB0aGUgbV92YWx1ZSBtYXkg
Y29udGFpbiByZWYgcG9pbnRlcnMgdG8gVHJhbnNmb3JtT3BlcmF0aW9uIG9iamVjdHMuCisgICAg
VHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOworICAgIGZvciAoc2l6ZV90IGogPSAwOyBq
IDwgbV92YWx1ZS5zaXplKCk7ICsraikgeworICAgICAgICBUcmFuc2Zvcm1PcGVyYXRpb246Ok9w
ZXJhdGlvblR5cGUgb3BlcmF0aW9uVHlwZSA9IG1fdmFsdWUub3BlcmF0aW9ucygpW2pdLT5nZXRP
cGVyYXRpb25UeXBlKCk7CisgICAgICAgIHN3aXRjaCAob3BlcmF0aW9uVHlwZSkgeworICAgICAg
ICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfWDoKKyAgICAgICAgY2FzZSBUcmFuc2Zv
cm1PcGVyYXRpb246OlNDQUxFX1k6CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpT
Q0FMRV9aOgorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfM0Q6CisgICAg
ICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRTogeworICAgICAgICAgICAgU2NhbGVU
cmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFNjYWxlVHJhbnNmb3Jt
T3BlcmF0aW9uKj4obV92YWx1ZS5vcGVyYXRpb25zKClbal0uZ2V0KCkpOworICAgICAgICAgICAg
b3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpj
cmVhdGUodHJhbnNmb3JtLT54KCksIHRyYW5zZm9ybS0+eSgpLCB0cmFuc2Zvcm0tPnooKSwgb3Bl
cmF0aW9uVHlwZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YOgorICAgICAgICBjYXNlIFRyYW5zZm9y
bU9wZXJhdGlvbjo6VFJBTlNMQVRFX1k6CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9u
OjpUUkFOU0xBVEVfWjoKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFU
RV8zRDoKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURTogeworICAg
ICAgICAgICAgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNf
Y2FzdDxUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24qPihtX3ZhbHVlLm9wZXJhdGlvbnMoKVtq
XS5nZXQoKSk7CisgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJh
bnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUodHJhbnNmb3JtLT54KCksIHRyYW5zZm9y
bS0+eSgpLCB0cmFuc2Zvcm0tPnooKSwgb3BlcmF0aW9uVHlwZSkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV9Y
OgorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1k6CisgICAgICAgIGNh
c2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfM0Q6CisgICAgICAgIGNhc2UgVHJhbnNmb3Jt
T3BlcmF0aW9uOjpST1RBVEU6IHsKKyAgICAgICAgICAgIFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlv
biogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKj4obV92
YWx1ZS5vcGVyYXRpb25zKClbal0uZ2V0KCkpOworICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVy
YXRpb25zKCkuYXBwZW5kKFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHRyYW5zZm9y
bS0+eCgpLCB0cmFuc2Zvcm0tPnkoKSwgdHJhbnNmb3JtLT56KCksIHRyYW5zZm9ybS0+YW5nbGUo
KSwgb3BlcmF0aW9uVHlwZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVdfWDoKKyAgICAgICAgY2FzZSBUcmFuc2Zv
cm1PcGVyYXRpb246OlNLRVdfWToKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNL
RVc6IHsKKyAgICAgICAgICAgIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0
YXRpY19jYXN0PFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24qPihtX3ZhbHVlLm9wZXJhdGlvbnMoKVtq
XS5nZXQoKSk7CisgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoU2tl
d1RyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHRyYW5zZm9ybS0+YW5nbGVYKCksIHRyYW5zZm9y
bS0+YW5nbGVZKCksIG9wZXJhdGlvblR5cGUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpNQVRSSVg6IHsKKyAgICAgICAg
ICAgIE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8TWF0
cml4VHJhbnNmb3JtT3BlcmF0aW9uKj4obV92YWx1ZS5vcGVyYXRpb25zKClbal0uZ2V0KCkpOwor
ICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbSA9IHRyYW5zZm9ybS0+bWF0cml4KCk7
CisgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoTWF0cml4VHJhbnNm
b3JtT3BlcmF0aW9uOjpjcmVhdGUobS5hKCksIG0uYigpLCBtLmMoKSwgbS5kKCksIG0uZSgpLCBt
LmYoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBUcmFu
c2Zvcm1PcGVyYXRpb246Ok1BVFJJWF8zRDogeworICAgICAgICAgICAgTWF0cml4M0RUcmFuc2Zv
cm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PE1hdHJpeDNEVHJhbnNmb3JtT3Bl
cmF0aW9uKj4obV92YWx1ZS5vcGVyYXRpb25zKClbal0uZ2V0KCkpOworICAgICAgICAgICAgb3Bl
cmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uOjpj
cmVhdGUodHJhbnNmb3JtLT5tYXRyaXgoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlBFUlNQRUNUSVZFOiB7CisgICAg
ICAgICAgICBQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGlj
X2Nhc3Q8UGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24qPihtX3ZhbHVlLm9wZXJhdGlvbnMo
KVtqXS5nZXQoKSk7CisgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQo
UGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0cmFuc2Zvcm0tPnBlcnNwZWN0
aXZlKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgVHJh
bnNmb3JtT3BlcmF0aW9uOjpJREVOVElUWTogeworICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVy
YXRpb25zKCkuYXBwZW5kKElkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJh
dGlvbjo6Tk9ORToKKyAgICAgICAgICAgIC8vIERvIG5vdGhpbmcuCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfSAvLyBzd2l0Y2gKKyAgICB9IC8vIGZvciBlYWNoIG9wZXJhdGlvbgorCisg
ICAgcmV0dXJuIENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZSh0aW1lKCksIG9wZXJhdGlvbnMs
IHRpbWluZ0Z1bmN0aW9uKCkgPyBjbG9uZVRpbWluZ0Z1bmN0aW9uKHRpbWluZ0Z1bmN0aW9uKCkp
IDogbnVsbHB0cik7Cit9CisKK1Bhc3NPd25QdHI8Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1
cnZlPiBDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgpCit7CisgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmUpOworfQorCitD
Q0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6OkNDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25D
dXJ2ZSgpCiB7CiB9CiAKQEAgLTc0LDE1OSArMjE2LDExMCBAQCBDQ0tleWZyYW1lZEZsb2F0QW5p
bWF0aW9uQ3VydmU6On5DQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmUoKQogewogfQogCit2
b2lkIENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6YWRkS2V5ZnJhbWUoUGFzc093blB0
cjxDQ0Zsb2F0S2V5ZnJhbWU+IGtleWZyYW1lKQoreworICAgIGluc2VydEtleWZyYW1lKGtleWZy
YW1lLCBtX2tleWZyYW1lcyk7Cit9CisKIGRvdWJsZSBDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9u
Q3VydmU6OmR1cmF0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9rZXlmcmFtZXMubGFzdCgp
LnRpbWUgLSBtX2tleWZyYW1lcy5maXJzdCgpLnRpbWU7CisgICAgcmV0dXJuIG1fa2V5ZnJhbWVz
Lmxhc3QoKS0+dGltZSgpIC0gbV9rZXlmcmFtZXMuZmlyc3QoKS0+dGltZSgpOwogfQogCiBQYXNz
T3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6
Y2xvbmUoKSBjb25zdAogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NLZXlmcmFtZWRGbG9h
dEFuaW1hdGlvbkN1cnZlKCp0aGlzKSk7CisgICAgT3duUHRyPENDS2V5ZnJhbWVkRmxvYXRBbmlt
YXRpb25DdXJ2ZT4gdG9SZXR1cm4oQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjpjcmVh
dGUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2tleWZyYW1lcy5zaXplKCk7ICsr
aSkKKyAgICAgICAgdG9SZXR1cm4tPmFkZEtleWZyYW1lKG1fa2V5ZnJhbWVzW2ldLT5jbG9uZSgp
KTsKKyAgICByZXR1cm4gdG9SZXR1cm4ucmVsZWFzZSgpOwogfQogCiBmbG9hdCBDQ0tleWZyYW1l
ZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmdldFZhbHVlKGRvdWJsZSB0KSBjb25zdAogewotICAgIGlm
ICh0IDw9IG1fa2V5ZnJhbWVzLmZpcnN0KCkudGltZSkKLSAgICAgICAgcmV0dXJuIG1fa2V5ZnJh
bWVzLmZpcnN0KCkudmFsdWU7CisgICAgaWYgKHQgPD0gbV9rZXlmcmFtZXMuZmlyc3QoKS0+dGlt
ZSgpKQorICAgICAgICByZXR1cm4gbV9rZXlmcmFtZXMuZmlyc3QoKS0+dmFsdWUoKTsKIAotICAg
IGlmICh0ID49IG1fa2V5ZnJhbWVzLmxhc3QoKS50aW1lKQotICAgICAgICByZXR1cm4gbV9rZXlm
cmFtZXMubGFzdCgpLnZhbHVlOworICAgIGlmICh0ID49IG1fa2V5ZnJhbWVzLmxhc3QoKS0+dGlt
ZSgpKQorICAgICAgICByZXR1cm4gbV9rZXlmcmFtZXMubGFzdCgpLT52YWx1ZSgpOwogCiAgICAg
c2l6ZV90IGkgPSAwOwogICAgIGZvciAoOyBpIDwgbV9rZXlmcmFtZXMuc2l6ZSgpIC0gMTsgKytp
KSB7Ci0gICAgICAgIGlmICh0IDwgbV9rZXlmcmFtZXNbaSsxXS50aW1lKQorICAgICAgICBpZiAo
dCA8IG1fa2V5ZnJhbWVzW2krMV0tPnRpbWUoKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0K
IAotICAgIGZsb2F0IHByb2dyZXNzID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KCh0IC0gbV9rZXlmcmFt
ZXNbaV0udGltZSkgLyAobV9rZXlmcmFtZXNbaSsxXS50aW1lIC0gbV9rZXlmcmFtZXNbaV0udGlt
ZSkpOwotICAgIC8vIEZJWE1FOiBhcHBseSB0aW1pbmcgZnVuY3Rpb24gaGVyZS4KLSAgICByZXR1
cm4gbV9rZXlmcmFtZXNbaV0udmFsdWUgKyAobV9rZXlmcmFtZXNbaSsxXS52YWx1ZSAtIG1fa2V5
ZnJhbWVzW2ldLnZhbHVlKSAqIHByb2dyZXNzOworICAgIGZsb2F0IHByb2dyZXNzID0gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KCh0IC0gbV9rZXlmcmFtZXNbaV0tPnRpbWUoKSkgLyAobV9rZXlmcmFtZXNb
aSsxXS0+dGltZSgpIC0gbV9rZXlmcmFtZXNbaV0tPnRpbWUoKSkpOworCisgICAgaWYgKG1fa2V5
ZnJhbWVzW2ldLT50aW1pbmdGdW5jdGlvbigpKQorICAgICAgICBwcm9ncmVzcyA9IG1fa2V5ZnJh
bWVzW2ldLT50aW1pbmdGdW5jdGlvbigpLT5nZXRWYWx1ZShwcm9ncmVzcyk7CisKKyAgICByZXR1
cm4gbV9rZXlmcmFtZXNbaV0tPnZhbHVlKCkgKyAobV9rZXlmcmFtZXNbaSsxXS0+dmFsdWUoKSAt
IG1fa2V5ZnJhbWVzW2ldLT52YWx1ZSgpKSAqIHByb2dyZXNzOwogfQogCi1QYXNzT3duUHRyPEND
S2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmU6OmNyZWF0ZShjb25zdCBWZWN0b3I8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4mIGtl
eWZyYW1lcykKK1Bhc3NPd25QdHI8Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4g
Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkKIHsKLSAgICBpZiAo
IWtleWZyYW1lcy5zaXplKCkgfHwgIWtleWZyYW1lc0FyZVNvcnRlZChrZXlmcmFtZXMpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDS2V5ZnJhbWVk
VHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUpOworfQogCi0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBD
Q0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKGtleWZyYW1lcykpOworQ0NLZXlmcmFt
ZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25D
dXJ2ZSgpCit7CiB9CiAKLUNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OkNDS2V5
ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoY29uc3QgVmVjdG9yPENDVHJhbnNmb3JtS2V5
ZnJhbWU+JiBrZXlmcmFtZXMpCi0gICAgOiBtX2tleWZyYW1lcyhrZXlmcmFtZXMpCitDQ0tleWZy
YW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjp+Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZSgpCiB7CiB9CiAKLUNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6On5D
Q0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCkgeyB9Cit2b2lkIENDS2V5ZnJhbWVk
VHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmFkZEtleWZyYW1lKFBhc3NPd25QdHI8Q0NUcmFuc2Zv
cm1LZXlmcmFtZT4ga2V5ZnJhbWUpCit7CisgICAgaW5zZXJ0S2V5ZnJhbWUoa2V5ZnJhbWUsIG1f
a2V5ZnJhbWVzKTsKK30KIAogZG91YmxlIENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3Vy
dmU6OmR1cmF0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9rZXlmcmFtZXMubGFzdCgpLnRp
bWUgLSBtX2tleWZyYW1lcy5maXJzdCgpLnRpbWU7CisgICAgcmV0dXJuIG1fa2V5ZnJhbWVzLmxh
c3QoKS0+dGltZSgpIC0gbV9rZXlmcmFtZXMuZmlyc3QoKS0+dGltZSgpOwogfQogCiBQYXNzT3du
UHRyPENDQW5pbWF0aW9uQ3VydmU+IENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6
OmNsb25lKCkgY29uc3QKIHsKLSAgICBWZWN0b3I8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4ga2V5ZnJh
bWVzOwotICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBkZWVwIGNvcHkgb2YgYWxsIG9mIHRoZSBrZXlm
cmFtZXMgc2luY2UgdGhleSBjb250YWluIHJlZgotICAgIC8vIHBvaW50ZXJzIHRvIFRyYW5zZm9y
bU9wZXJhdGlvbiBvYmplY3RzLgotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9rZXlmcmFt
ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgQ0NUcmFuc2Zvcm1LZXlmcmFtZSBrZXlmcmFtZSht
X2tleWZyYW1lc1tpXS50aW1lKTsKLSAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBtX2tl
eWZyYW1lc1tpXS52YWx1ZS5zaXplKCk7ICsraikgewotICAgICAgICAgICAgVHJhbnNmb3JtT3Bl
cmF0aW9uOjpPcGVyYXRpb25UeXBlIG9wZXJhdGlvblR5cGUgPSBtX2tleWZyYW1lc1tpXS52YWx1
ZS5vcGVyYXRpb25zKClbal0tPmdldE9wZXJhdGlvblR5cGUoKTsKLSAgICAgICAgICAgIHN3aXRj
aCAob3BlcmF0aW9uVHlwZSkgewotICAgICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246
OlNDQUxFX1g6Ci0gICAgICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfWToK
LSAgICAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV9aOgotICAgICAgICAg
ICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFXzNEOgotICAgICAgICAgICAgY2FzZSBU
cmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFOiB7Ci0gICAgICAgICAgICAgICAgU2NhbGVUcmFuc2Zv
cm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFNjYWxlVHJhbnNmb3JtT3BlcmF0
aW9uKj4obV9rZXlmcmFtZXNbaV0udmFsdWUub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKLSAgICAg
ICAgICAgICAgICBrZXlmcmFtZS52YWx1ZS5vcGVyYXRpb25zKCkuYXBwZW5kKFNjYWxlVHJhbnNm
b3JtT3BlcmF0aW9uOjpjcmVhdGUodHJhbnNmb3JtLT54KCksIHRyYW5zZm9ybS0+eSgpLCB0cmFu
c2Zvcm0tPnooKSwgb3BlcmF0aW9uVHlwZSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFU
RV9YOgotICAgICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9ZOgot
ICAgICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9aOgotICAgICAg
ICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV8zRDoKLSAgICAgICAgICAg
IGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEU6IHsKLSAgICAgICAgICAgICAgICBU
cmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFRyYW5z
bGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+KG1fa2V5ZnJhbWVzW2ldLnZhbHVlLm9wZXJhdGlvbnMo
KVtqXS5nZXQoKSk7Ci0gICAgICAgICAgICAgICAga2V5ZnJhbWUudmFsdWUub3BlcmF0aW9ucygp
LmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0cmFuc2Zvcm0tPngo
KSwgdHJhbnNmb3JtLT55KCksIHRyYW5zZm9ybS0+eigpLCBvcGVyYXRpb25UeXBlKSk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1g6Ci0gICAgICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJh
dGlvbjo6Uk9UQVRFX1k6Ci0gICAgICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9U
QVRFXzNEOgotICAgICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURTogewot
ICAgICAgICAgICAgICAgIFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0gc3Rh
dGljX2Nhc3Q8Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKj4obV9rZXlmcmFtZXNbaV0udmFsdWUu
b3BlcmF0aW9ucygpW2pdLmdldCgpKTsKLSAgICAgICAgICAgICAgICBrZXlmcmFtZS52YWx1ZS5v
cGVyYXRpb25zKCkuYXBwZW5kKFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHRyYW5z
Zm9ybS0+eCgpLCB0cmFuc2Zvcm0tPnkoKSwgdHJhbnNmb3JtLT56KCksIHRyYW5zZm9ybS0+YW5n
bGUoKSwgb3BlcmF0aW9uVHlwZSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVdfWDoKLSAgICAg
ICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VXX1k6Ci0gICAgICAgICAgICBjYXNl
IFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFVzogewotICAgICAgICAgICAgICAgIFNrZXdUcmFuc2Zv
cm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFNrZXdUcmFuc2Zvcm1PcGVyYXRp
b24qPihtX2tleWZyYW1lc1tpXS52YWx1ZS5vcGVyYXRpb25zKClbal0uZ2V0KCkpOwotICAgICAg
ICAgICAgICAgIGtleWZyYW1lLnZhbHVlLm9wZXJhdGlvbnMoKS5hcHBlbmQoU2tld1RyYW5zZm9y
bU9wZXJhdGlvbjo6Y3JlYXRlKHRyYW5zZm9ybS0+YW5nbGVYKCksIHRyYW5zZm9ybS0+YW5nbGVZ
KCksIG9wZXJhdGlvblR5cGUpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpNQVRSSVg6IHsKLSAgICAg
ICAgICAgICAgICBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19j
YXN0PE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbio+KG1fa2V5ZnJhbWVzW2ldLnZhbHVlLm9wZXJh
dGlvbnMoKVtqXS5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
bSA9IHRyYW5zZm9ybS0+bWF0cml4KCk7Ci0gICAgICAgICAgICAgICAga2V5ZnJhbWUudmFsdWUu
b3BlcmF0aW9ucygpLmFwcGVuZChNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShtLmEo
KSwgbS5iKCksIG0uYygpLCBtLmQoKSwgbS5lKCksIG0uZigpKSk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlv
bjo6TUFUUklYXzNEOiB7Ci0gICAgICAgICAgICAgICAgTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRp
b24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uKj4o
bV9rZXlmcmFtZXNbaV0udmFsdWUub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKLSAgICAgICAgICAg
ICAgICBrZXlmcmFtZS52YWx1ZS5vcGVyYXRpb25zKCkuYXBwZW5kKE1hdHJpeDNEVHJhbnNmb3Jt
T3BlcmF0aW9uOjpjcmVhdGUodHJhbnNmb3JtLT5tYXRyaXgoKSkpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRp
b246OlBFUlNQRUNUSVZFOiB7Ci0gICAgICAgICAgICAgICAgUGVyc3BlY3RpdmVUcmFuc2Zvcm1P
cGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFBlcnNwZWN0aXZlVHJhbnNmb3JtT3Bl
cmF0aW9uKj4obV9rZXlmcmFtZXNbaV0udmFsdWUub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKLSAg
ICAgICAgICAgICAgICBrZXlmcmFtZS52YWx1ZS5vcGVyYXRpb25zKCkuYXBwZW5kKFBlcnNwZWN0
aXZlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUodHJhbnNmb3JtLT5wZXJzcGVjdGl2ZSgpKSk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNl
IFRyYW5zZm9ybU9wZXJhdGlvbjo6SURFTlRJVFk6IHsKLSAgICAgICAgICAgICAgICBrZXlmcmFt
ZS52YWx1ZS5vcGVyYXRpb25zKCkuYXBwZW5kKElkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uOjpj
cmVhdGUoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Tk9ORToKLSAgICAgICAgICAgICAgICAvLyBE
byBub3RoaW5nLgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfSAvLyBzd2l0
Y2gKLSAgICAgICAgfSAvLyBmb3IgZWFjaCBvcGVyYXRpb24KLSAgICAgICAga2V5ZnJhbWVzLmFw
cGVuZChrZXlmcmFtZSk7Ci0gICAgfQotICAgIHJldHVybiBDQ0tleWZyYW1lZFRyYW5zZm9ybUFu
aW1hdGlvbkN1cnZlOjpjcmVhdGUoa2V5ZnJhbWVzKTsKKyAgICBPd25QdHI8Q0NLZXlmcmFtZWRU
cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4gdG9SZXR1cm4oQ0NLZXlmcmFtZWRUcmFuc2Zvcm1Bbmlt
YXRpb25DdXJ2ZTo6Y3JlYXRlKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9rZXlm
cmFtZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIHRvUmV0dXJuLT5hZGRLZXlmcmFtZShtX2tleWZy
YW1lc1tpXS0+Y2xvbmUoKSk7CisgICAgcmV0dXJuIHRvUmV0dXJuLnJlbGVhc2UoKTsKIH0KIAog
VHJhbnNmb3JtYXRpb25NYXRyaXggQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6
Z2V0VmFsdWUoZG91YmxlIHQsIGNvbnN0IEludFNpemUmIGxheWVyU2l6ZSkgY29uc3QKIHsKICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm1NYXRyaXg7CiAKLSAgICBpZiAodCA8PSBt
X2tleWZyYW1lcy5maXJzdCgpLnRpbWUpIHsKLSAgICAgICAgbV9rZXlmcmFtZXMuZmlyc3QoKS52
YWx1ZS5hcHBseShsYXllclNpemUsIHRyYW5zZm9ybU1hdHJpeCk7CisgICAgaWYgKHQgPD0gbV9r
ZXlmcmFtZXMuZmlyc3QoKS0+dGltZSgpKSB7CisgICAgICAgIG1fa2V5ZnJhbWVzLmZpcnN0KCkt
PnZhbHVlKCkuYXBwbHkobGF5ZXJTaXplLCB0cmFuc2Zvcm1NYXRyaXgpOwogICAgICAgICByZXR1
cm4gdHJhbnNmb3JtTWF0cml4OwogICAgIH0KIAotICAgIGlmICh0ID49IG1fa2V5ZnJhbWVzLmxh
c3QoKS50aW1lKSB7Ci0gICAgICAgIG1fa2V5ZnJhbWVzLmxhc3QoKS52YWx1ZS5hcHBseShsYXll
clNpemUsIHRyYW5zZm9ybU1hdHJpeCk7CisgICAgaWYgKHQgPj0gbV9rZXlmcmFtZXMubGFzdCgp
LT50aW1lKCkpIHsKKyAgICAgICAgbV9rZXlmcmFtZXMubGFzdCgpLT52YWx1ZSgpLmFwcGx5KGxh
eWVyU2l6ZSwgdHJhbnNmb3JtTWF0cml4KTsKICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybU1hdHJp
eDsKICAgICB9CiAKICAgICBzaXplX3QgaSA9IDA7CiAgICAgZm9yICg7IGkgPCBtX2tleWZyYW1l
cy5zaXplKCkgLSAxOyArK2kpIHsKLSAgICAgICAgaWYgKHQgPCBtX2tleWZyYW1lc1tpKzFdLnRp
bWUpCisgICAgICAgIGlmICh0IDwgbV9rZXlmcmFtZXNbaSsxXS0+dGltZSgpKQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgfQogCi0gICAgLy8gRklYTUU6IGFwcGx5IHRpbWluZyBmdW5jdGlvbiBo
ZXJlLgotICAgIGRvdWJsZSBwcm9ncmVzcyA9ICh0IC0gbV9rZXlmcmFtZXNbaV0udGltZSkgLyAo
bV9rZXlmcmFtZXNbaSsxXS50aW1lIC0gbV9rZXlmcmFtZXNbaV0udGltZSk7CisgICAgZG91Ymxl
IHByb2dyZXNzID0gKHQgLSBtX2tleWZyYW1lc1tpXS0+dGltZSgpKSAvIChtX2tleWZyYW1lc1tp
KzFdLT50aW1lKCkgLSBtX2tleWZyYW1lc1tpXS0+dGltZSgpKTsKKworICAgIGlmIChtX2tleWZy
YW1lc1tpXS0+dGltaW5nRnVuY3Rpb24oKSkKKyAgICAgICAgcHJvZ3Jlc3MgPSBtX2tleWZyYW1l
c1tpXS0+dGltaW5nRnVuY3Rpb24oKS0+Z2V0VmFsdWUocHJvZ3Jlc3MpOwogCi0gICAgaWYgKG1f
a2V5ZnJhbWVzW2ldLnZhbHVlLm9wZXJhdGlvbnNNYXRjaChtX2tleWZyYW1lc1tpKzFdLnZhbHVl
KSkgewotICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IG1fa2V5ZnJhbWVzW2krMV0udmFs
dWUuc2l6ZSgpOyArK2opCi0gICAgICAgICAgICBtX2tleWZyYW1lc1tpKzFdLnZhbHVlLm9wZXJh
dGlvbnMoKVtqXS0+YmxlbmQobV9rZXlmcmFtZXNbaV0udmFsdWUuYXQoaiksIHByb2dyZXNzKS0+
YXBwbHkodHJhbnNmb3JtTWF0cml4LCBsYXllclNpemUpOworICAgIGlmIChtX2tleWZyYW1lc1tp
XS0+dmFsdWUoKS5vcGVyYXRpb25zTWF0Y2gobV9rZXlmcmFtZXNbaSsxXS0+dmFsdWUoKSkpIHsK
KyAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBtX2tleWZyYW1lc1tpKzFdLT52YWx1ZSgp
LnNpemUoKTsgKytqKQorICAgICAgICAgICAgbV9rZXlmcmFtZXNbaSsxXS0+dmFsdWUoKS5vcGVy
YXRpb25zKClbal0tPmJsZW5kKG1fa2V5ZnJhbWVzW2ldLT52YWx1ZSgpLmF0KGopLCBwcm9ncmVz
cyktPmFwcGx5KHRyYW5zZm9ybU1hdHJpeCwgbGF5ZXJTaXplKTsKICAgICB9IGVsc2UgewogICAg
ICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzb3VyY2U7CiAKLSAgICAgICAgbV9rZXlmcmFtZXNb
aV0udmFsdWUuYXBwbHkobGF5ZXJTaXplLCBzb3VyY2UpOwotICAgICAgICBtX2tleWZyYW1lc1tp
KzFdLnZhbHVlLmFwcGx5KGxheWVyU2l6ZSwgdHJhbnNmb3JtTWF0cml4KTsKKyAgICAgICAgbV9r
ZXlmcmFtZXNbaV0tPnZhbHVlKCkuYXBwbHkobGF5ZXJTaXplLCBzb3VyY2UpOworICAgICAgICBt
X2tleWZyYW1lc1tpKzFdLT52YWx1ZSgpLmFwcGx5KGxheWVyU2l6ZSwgdHJhbnNmb3JtTWF0cml4
KTsKIAogICAgICAgICB0cmFuc2Zvcm1NYXRyaXguYmxlbmQoc291cmNlLCBwcm9ncmVzcyk7CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5oCmluZGV4
IDFjNGQ2NGFkYjExOTdhYTY3NWE2MDMwOTI4MmZjYTZhNTZhMzY2NmUuLmMzMDczYmYwODRhY2Y3
ODFiZjdjMmIxNmZlZTNlMWUyZjY2YjZkYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0tleWZy
YW1lZEFuaW1hdGlvbkN1cnZlLmgKQEAgLTI3LDQ2ICsyNyw2NiBAQAogCiAjaW5jbHVkZSAiVHJh
bnNmb3JtT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKKyNp
bmNsdWRlICJjYy9DQ1RpbWluZ0Z1bmN0aW9uLmgiCiAKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1z
dHJ1Y3QgQ0NGbG9hdEtleWZyYW1lIHsKLSAgICBDQ0Zsb2F0S2V5ZnJhbWUoZG91YmxlIHRpbWUs
IGZsb2F0IHZhbHVlKQotICAgICAgICA6IHRpbWUodGltZSkKLSAgICAgICAgLCB2YWx1ZSh2YWx1
ZSkKLSAgICB7Ci0gICAgfQorY2xhc3MgQ0NLZXlmcmFtZSB7CitwdWJsaWM6CisgICAgZG91Ymxl
IHRpbWUoKSBjb25zdDsKKyAgICBjb25zdCBDQ1RpbWluZ0Z1bmN0aW9uKiB0aW1pbmdGdW5jdGlv
bigpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgQ0NLZXlmcmFtZShkb3VibGUgdGltZSwgUGFz
c093blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPik7CisgICAgdmlydHVhbCB+Q0NLZXlmcmFtZSgpOwog
Ci0gICAgZG91YmxlIHRpbWU7Ci0gICAgZmxvYXQgdmFsdWU7Citwcml2YXRlOgorICAgIGRvdWJs
ZSBtX3RpbWU7CisgICAgT3duUHRyPENDVGltaW5nRnVuY3Rpb24+IG1fdGltaW5nRnVuY3Rpb247
CiB9OwogCi1zdHJ1Y3QgQ0NUcmFuc2Zvcm1LZXlmcmFtZSB7Ci0gICAgZXhwbGljaXQgQ0NUcmFu
c2Zvcm1LZXlmcmFtZShkb3VibGUgdGltZSkKLSAgICAgICAgOiB0aW1lKHRpbWUpCi0gICAgewot
ICAgIH0KK2NsYXNzIENDRmxvYXRLZXlmcmFtZSA6IHB1YmxpYyBDQ0tleWZyYW1lIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ0Zsb2F0S2V5ZnJhbWU+IGNyZWF0ZShkb3VibGUg
dGltZSwgZmxvYXQgdmFsdWUsIFBhc3NPd25QdHI8Q0NUaW1pbmdGdW5jdGlvbj4pOworICAgIHZp
cnR1YWwgfkNDRmxvYXRLZXlmcmFtZSgpOworCisgICAgZmxvYXQgdmFsdWUoKSBjb25zdDsKIAot
ICAgIENDVHJhbnNmb3JtS2V5ZnJhbWUoZG91YmxlIHRpbWUsIGNvbnN0IFRyYW5zZm9ybU9wZXJh
dGlvbnMmIHZhbHVlKQotICAgICAgICA6IHRpbWUodGltZSkKLSAgICAgICAgLCB2YWx1ZSh2YWx1
ZSkKLSAgICB7Ci0gICAgfQorICAgIFBhc3NPd25QdHI8Q0NGbG9hdEtleWZyYW1lPiBjbG9uZSgp
IGNvbnN0OwogCi0gICAgZG91YmxlIHRpbWU7Ci0gICAgVHJhbnNmb3JtT3BlcmF0aW9ucyB2YWx1
ZTsKK3ByaXZhdGU6CisgICAgQ0NGbG9hdEtleWZyYW1lKGRvdWJsZSB0aW1lLCBmbG9hdCB2YWx1
ZSwgUGFzc093blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPik7CisKKyAgICBmbG9hdCBtX3ZhbHVlOwor
fTsKKworY2xhc3MgQ0NUcmFuc2Zvcm1LZXlmcmFtZSA6IHB1YmxpYyBDQ0tleWZyYW1lIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1RyYW5zZm9ybUtleWZyYW1lPiBjcmVhdGUo
ZG91YmxlIHRpbWUsIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHZhbHVlLCBQYXNzT3duUHRy
PENDVGltaW5nRnVuY3Rpb24+KTsKKyAgICB2aXJ0dWFsIH5DQ1RyYW5zZm9ybUtleWZyYW1lKCk7
CisKKyAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB2YWx1ZSgpIGNvbnN0OworCisgICAg
UGFzc093blB0cjxDQ1RyYW5zZm9ybUtleWZyYW1lPiBjbG9uZSgpIGNvbnN0OworCitwcml2YXRl
OgorICAgIENDVHJhbnNmb3JtS2V5ZnJhbWUoZG91YmxlIHRpbWUsIGNvbnN0IFRyYW5zZm9ybU9w
ZXJhdGlvbnMmIHZhbHVlLCBQYXNzT3duUHRyPENDVGltaW5nRnVuY3Rpb24+KTsKKworICAgIFRy
YW5zZm9ybU9wZXJhdGlvbnMgbV92YWx1ZTsKIH07CiAKIGNsYXNzIENDS2V5ZnJhbWVkRmxvYXRB
bmltYXRpb25DdXJ2ZSA6IHB1YmxpYyBDQ0Zsb2F0QW5pbWF0aW9uQ3VydmUgewogcHVibGljOgog
ICAgIC8vIEl0IGlzIHJlcXVpcmVkIHRoYXQgdGhlIGtleWZyYW1lcyBiZSBzb3J0ZWQgYnkgdGlt
ZS4KLSAgICBzdGF0aWMgUGFzc093blB0cjxDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU+
IGNyZWF0ZShjb25zdCBWZWN0b3I8Q0NGbG9hdEtleWZyYW1lPiYga2V5ZnJhbWVzKTsKKyAgICBz
dGF0aWMgUGFzc093blB0cjxDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU+IGNyZWF0ZSgp
OwogCiAgICAgdmlydHVhbCB+Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlKCk7CiAKKyAg
ICB2b2lkIGFkZEtleWZyYW1lKFBhc3NPd25QdHI8Q0NGbG9hdEtleWZyYW1lPik7CisKICAgICAv
LyBDQ0FuaW1hdGlvbkN1cnZlIGltcGxlbWVudGF0aW9uCiAgICAgdmlydHVhbCBkb3VibGUgZHVy
YXRpb24oKSBjb25zdDsKICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4g
Y2xvbmUoKSBjb25zdDsKQEAgLTc1LDIwICs5NSwyMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBm
bG9hdCBnZXRWYWx1ZShkb3VibGUgdCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQg
Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlKGNvbnN0IFZlY3RvcjxDQ0Zsb2F0S2V5ZnJh
bWU+Jik7CisgICAgQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlKCk7CiAKICAgICAvLyBB
bHdheXMgc29ydGVkIGluIG9yZGVyIG9mIGluY3JlYXNpbmcgdGltZS4gTm8gdHdvIGtleWZyYW1l
cyBoYXZlIHRoZQogICAgIC8vIHNhbWUgdGltZS4KLSAgICBWZWN0b3I8Q0NGbG9hdEtleWZyYW1l
PiBtX2tleWZyYW1lczsKKyAgICBWZWN0b3I8T3duUHRyPENDRmxvYXRLZXlmcmFtZT4gPiBtX2tl
eWZyYW1lczsKIH07CiAKIGNsYXNzIENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUg
OiBwdWJsaWMgQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSB7CiBwdWJsaWM6CiAgICAgLy8gSXQg
aXMgcmVxdWlyZWQgdGhhdCB0aGUga2V5ZnJhbWVzIGJlIHNvcnRlZCBieSB0aW1lLgotICAgIHN0
YXRpYyBQYXNzT3duUHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IGNyZWF0
ZShjb25zdCBWZWN0b3I8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4mIGtleWZyYW1lcyk7CisgICAgc3Rh
dGljIFBhc3NPd25QdHI8Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4gY3JlYXRl
KCk7CiAKICAgICB2aXJ0dWFsIH5DQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCk7
CiAKKyAgICB2b2lkIGFkZEtleWZyYW1lKFBhc3NPd25QdHI8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4p
OworCiAgICAgLy8gQ0NBbmltYXRpb25DdXJ2ZSBpbXBsZW1lbnRhdGlvbgogICAgIHZpcnR1YWwg
ZG91YmxlIGR1cmF0aW9uKCkgY29uc3Q7CiAgICAgdmlydHVhbCBQYXNzT3duUHRyPENDQW5pbWF0
aW9uQ3VydmU+IGNsb25lKCkgY29uc3Q7CkBAIC05NywxMSArMTE5LDExIEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IGdldFZhbHVlKGRvdWJsZSB0LCBjb25zdCBJ
bnRTaXplJikgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgQ0NLZXlmcmFtZWRUcmFu
c2Zvcm1BbmltYXRpb25DdXJ2ZShjb25zdCBWZWN0b3I8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4mKTsK
KyAgICBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCk7CiAKICAgICAvLyBBbHdh
eXMgc29ydGVkIGluIG9yZGVyIG9mIGluY3JlYXNpbmcgdGltZS4gTm8gdHdvIGtleWZyYW1lcyBo
YXZlIHRoZQogICAgIC8vIHNhbWUgdGltZS4KLSAgICBWZWN0b3I8Q0NUcmFuc2Zvcm1LZXlmcmFt
ZT4gbV9rZXlmcmFtZXM7CisgICAgVmVjdG9yPE93blB0cjxDQ1RyYW5zZm9ybUtleWZyYW1lPiA+
IG1fa2V5ZnJhbWVzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IGQ5ZTcyZWZjNDg2
YmMyNDRkZTQ0YzFiODQ3NGFjNmQ2N2Y2OTA1NjIuLjMzNWQzYTU4ZTk4YWVkMjk3ZWU1NDA1NGI1
NGQwNDg1MDg1MTcxYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlci5jcHAKQEAgLTM3LDE2ICszNywxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IG5hbWVzcGFjZSB7CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBLZXlmcmFtZSwgdHlwZW5hbWUgVmFs
dWU+Ci12b2lkIGFwcGVuZEtleWZyYW1lKFZlY3RvcjxLZXlmcmFtZT4mIGtleWZyYW1lcywgZG91
YmxlIGtleVRpbWUsIGNvbnN0IFZhbHVlKiB2YWx1ZSkKK3RlbXBsYXRlIDxjbGFzcyBWYWx1ZSwg
Y2xhc3MgS2V5ZnJhbWUsIGNsYXNzIEN1cnZlPgordm9pZCBhcHBlbmRLZXlmcmFtZShDdXJ2ZSYg
Y3VydmUsIGRvdWJsZSBrZXlUaW1lLCBjb25zdCBWYWx1ZSogdmFsdWUsIFBhc3NPd25QdHI8Q0NU
aW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb24pCiB7Ci0gICAga2V5ZnJhbWVzLmFwcGVuZChL
ZXlmcmFtZShrZXlUaW1lLCB2YWx1ZS0+dmFsdWUoKSkpOworICAgIGN1cnZlLmFkZEtleWZyYW1l
KEtleWZyYW1lOjpjcmVhdGUoa2V5VGltZSwgdmFsdWUtPnZhbHVlKCksIHRpbWluZ0Z1bmN0aW9u
KSk7CiB9CiAKIHRlbXBsYXRlIDw+Ci12b2lkIGFwcGVuZEtleWZyYW1lPENDVHJhbnNmb3JtS2V5
ZnJhbWUsIFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlPihWZWN0b3I8Q0NUcmFuc2Zvcm1LZXlmcmFt
ZT4mIGtleWZyYW1lcywgZG91YmxlIGtleVRpbWUsIGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZh
bHVlKiB2YWx1ZSkKK3ZvaWQgYXBwZW5kS2V5ZnJhbWU8VHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUs
IENDVHJhbnNmb3JtS2V5ZnJhbWUsIENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+
KENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUmIGN1cnZlLCBkb3VibGUga2V5VGlt
ZSwgY29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUqIHZhbHVlLCBQYXNzT3duUHRyPENDVGlt
aW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uKQogewotICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NU
cmFuc2Zvcm1LZXlmcmFtZShrZXlUaW1lLCAqdmFsdWUtPnZhbHVlKCkpKTsKKyAgICBjdXJ2ZS5h
ZGRLZXlmcmFtZShDQ1RyYW5zZm9ybUtleWZyYW1lOjpjcmVhdGUoa2V5VGltZSwgKnZhbHVlLT52
YWx1ZSgpLCB0aW1pbmdGdW5jdGlvbikpOwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgVmFsdWUsIGNs
YXNzIEtleWZyYW1lLCBjbGFzcyBDdXJ2ZT4KQEAgLTY0LDIxICs2NCwzMyBAQCBQYXNzT3duUHRy
PENDQWN0aXZlQW5pbWF0aW9uPiBjcmVhdGVBY3RpdmVBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVW
YWx1ZUxpc3QmIHZhbAogICAgIGlmIChhbmltYXRpb24gJiYgYW5pbWF0aW9uLT5pc0ZpbGxNb2Rl
U2V0KCkgJiYgKGFuaW1hdGlvbi0+ZmlsbHNGb3J3YXJkcygpIHx8IGFuaW1hdGlvbi0+ZmlsbHNC
YWNrd2FyZHMoKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCisgICAgT3duUHRyPEN1cnZl
PiBjdXJ2ZSA9IEN1cnZlOjpjcmVhdGUoKTsKICAgICBWZWN0b3I8S2V5ZnJhbWU+IGtleWZyYW1l
czsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVMaXN0LnNpemUoKTsgaSsrKSB7
CiAgICAgICAgIGNvbnN0IFZhbHVlKiBvcmlnaW5hbFZhbHVlID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
VmFsdWUqPih2YWx1ZUxpc3QuYXQoaSkpOwogCi0gICAgICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9y
dCBmb3IgdGltaW5nIGZ1bmN0aW9ucy4KLSAgICAgICAgaWYgKG9yaWdpbmFsVmFsdWUtPnRpbWlu
Z0Z1bmN0aW9uKCkgJiYgb3JpZ2luYWxWYWx1ZS0+dGltaW5nRnVuY3Rpb24oKS0+dHlwZSgpICE9
IFRpbWluZ0Z1bmN0aW9uOjpMaW5lYXJGdW5jdGlvbikKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICBPd25QdHI8Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb247Cisg
ICAgICAgIGlmIChvcmlnaW5hbFZhbHVlLT50aW1pbmdGdW5jdGlvbigpKSB7CisgICAgICAgICAg
ICBzd2l0Y2ggKG9yaWdpbmFsVmFsdWUtPnRpbWluZ0Z1bmN0aW9uKCktPnR5cGUoKSkgeworICAg
ICAgICAgICAgY2FzZSBUaW1pbmdGdW5jdGlvbjo6U3RlcHNGdW5jdGlvbjoKKyAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogYWRkIHN1cHBvcnQgZm9yIHN0ZXBzIHRpbWluZyBmdW5jdGlvbi4KKyAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIGNhc2UgVGltaW5nRnVu
Y3Rpb246OkxpbmVhckZ1bmN0aW9uOgorICAgICAgICAgICAgICAgIC8vIERvbid0IHNldCB0aGUg
dGltaW5nIGZ1bmN0aW9uLiBLZXlmcmFtZXMgYXJlIGludGVycG9sYXRlZCBsaW5lYXJseSBpZiB0
aGVyZSBpcyBubyB0aW1pbmcgZnVuY3Rpb24uCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIFRpbWluZ0Z1bmN0aW9uOjpDdWJpY0JlemllckZ1bmN0aW9uOgorICAgICAg
ICAgICAgICAgIGNvbnN0IEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24qIG9yaWdpbmFsVGltaW5n
RnVuY3Rpb24gPSBzdGF0aWNfY2FzdDxjb25zdCBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKj4o
b3JpZ2luYWxWYWx1ZS0+dGltaW5nRnVuY3Rpb24oKSk7CisgICAgICAgICAgICAgICAgdGltaW5n
RnVuY3Rpb24gPSBDQ0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmNyZWF0ZShvcmlnaW5hbFRp
bWluZ0Z1bmN0aW9uLT54MSgpLCBvcmlnaW5hbFRpbWluZ0Z1bmN0aW9uLT55MSgpLCBvcmlnaW5h
bFRpbWluZ0Z1bmN0aW9uLT54MigpLCBvcmlnaW5hbFRpbWluZ0Z1bmN0aW9uLT55MigpKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gLy8gc3dpdGNoCisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgdGltaW5nRnVuY3Rpb24gPSBDQ0Vhc2VUaW1pbmdGdW5jdGlvbjo6
Y3JlYXRlKCk7CiAKICAgICAgICAgZG91YmxlIGR1cmF0aW9uID0gKGFuaW1hdGlvbiAmJiBhbmlt
YXRpb24tPmlzRHVyYXRpb25TZXQoKSkgPyBhbmltYXRpb24tPmR1cmF0aW9uKCkgOiAxOwotICAg
ICAgICBhcHBlbmRLZXlmcmFtZShrZXlmcmFtZXMsIG9yaWdpbmFsVmFsdWUtPmtleVRpbWUoKSAq
IGR1cmF0aW9uLCBvcmlnaW5hbFZhbHVlKTsKKyAgICAgICAgYXBwZW5kS2V5ZnJhbWU8VmFsdWUs
IEtleWZyYW1lLCBDdXJ2ZT4oKmN1cnZlLCBvcmlnaW5hbFZhbHVlLT5rZXlUaW1lKCkgKiBkdXJh
dGlvbiwgb3JpZ2luYWxWYWx1ZSwgdGltaW5nRnVuY3Rpb24ucmVsZWFzZSgpKTsKICAgICB9CiAK
LSAgICBPd25QdHI8Q3VydmU+IGN1cnZlID0gQ3VydmU6OmNyZWF0ZShrZXlmcmFtZXMpOwotCiAg
ICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBhbmltID0gQ0NBY3RpdmVBbmltYXRpb246OmNy
ZWF0ZShjdXJ2ZS5yZWxlYXNlKCksIGFuaW1hdGlvbklkLCBncm91cElkLCB0YXJnZXRQcm9wZXJ0
eSk7CiAKICAgICBBU1NFUlQoYW5pbS5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbWluZ0Z1bmN0aW9uLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGltaW5nRnVuY3Rp
b24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjJhODNiOGMyYjBmMzE0MmE2OWQ2YzEwYjFjZDFhMTY2ZGI1YjFh
NjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RpbWluZ0Z1bmN0aW9uLmNwcApAQCAtMCwwICsxLDk1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ1RpbWluZ0Z1bmN0
aW9uLmgiCisKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSB7Citjb25zdCBk
b3VibGUga0Vwc2lsb24gPSAxZS02OworfSAvLyBuYW1lc3BhY2UKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitDQ1RpbWluZ0Z1bmN0aW9uOjpDQ1RpbWluZ0Z1bmN0aW9uKCkKK3sKK30KKworQ0NU
aW1pbmdGdW5jdGlvbjo6fkNDVGltaW5nRnVuY3Rpb24oKQoreworfQorCitkb3VibGUgQ0NUaW1p
bmdGdW5jdGlvbjo6ZHVyYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiAxLjA7Cit9CisKK1Bh
c3NPd25QdHI8Q0NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uPiBDQ0N1YmljQmV6aWVyVGltaW5n
RnVuY3Rpb246OmNyZWF0ZShkb3VibGUgeDEsIGRvdWJsZSB5MSwgZG91YmxlIHgyLCBkb3VibGUg
eTIpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0N1YmljQmV6aWVyVGltaW5nRnVuY3Rp
b24oeDEsIHkxLCB4MiwgeTIpKTsKK30KKworQ0NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpD
Q0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24oZG91YmxlIHgxLCBkb3VibGUgeTEsIGRvdWJsZSB4
MiwgZG91YmxlIHkyKQorICAgIDogbV9jdXJ2ZSh4MSwgeTEsIHgyLCB5MikKK3sKK30KKworQ0ND
dWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjp+Q0NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKCkK
K3sKK30KKworZmxvYXQgQ0NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpnZXRWYWx1ZShkb3Vi
bGUgeCkgY29uc3QKK3sKKyAgICBVbml0QmV6aWVyIHRlbXAobV9jdXJ2ZSk7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGZsb2F0Pih0ZW1wLnNvbHZlKHgsIGtFcHNpbG9uKSk7Cit9CisKK1Bhc3NP
d25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4gQ0NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpjbG9u
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0N1YmljQmV6aWVyVGltaW5n
RnVuY3Rpb24oKnRoaXMpKTsKK30KKworUGFzc093blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPiBDQ0Vh
c2VUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gQ0NDdWJpY0JlemllclRp
bWluZ0Z1bmN0aW9uOjpjcmVhdGUoMC4yNSwgMC4xLCAwLjI1LCAxKTsKK30KKworUGFzc093blB0
cjxDQ1RpbWluZ0Z1bmN0aW9uPiBDQ0Vhc2VJblRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKQorewor
ICAgIHJldHVybiBDQ0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgwLjQyLCAwLCAx
LjAsIDEpOworfQorCitQYXNzT3duUHRyPENDVGltaW5nRnVuY3Rpb24+IENDRWFzZU91dFRpbWlu
Z0Z1bmN0aW9uOjpjcmVhdGUoKQoreworICAgIHJldHVybiBDQ0N1YmljQmV6aWVyVGltaW5nRnVu
Y3Rpb246OmNyZWF0ZSgwLCAwLCAwLjU4LCAxKTsKK30KKworUGFzc093blB0cjxDQ1RpbWluZ0Z1
bmN0aW9uPiBDQ0Vhc2VJbk91dFRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKQoreworICAgIHJldHVy
biBDQ0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgwLjQyLCAwLCAwLjU4LCAxKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaW1pbmdGdW5jdGlvbi5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaW1pbmdGdW5jdGlvbi5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjdhNWU0Zjk0Yzg0MjE5MzRhZTE4ODU1MjU0MjlhYTA2ZjI3ZWE4ZjAKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RpbWluZ0Z1bmN0aW9uLmgKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAq
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBDQ1RpbWluZ0Z1bmN0aW9uX2gKKyNkZWZpbmUgQ0NUaW1pbmdGdW5jdGlvbl9oCisK
KyNpbmNsdWRlICJVbml0QmV6aWVyLmgiCisjaW5jbHVkZSAiY2MvQ0NBbmltYXRpb25DdXJ2ZS5o
IgorCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisvLyBTZWUgaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy10cmFuc2l0aW9ucy8uCitjbGFzcyBD
Q1RpbWluZ0Z1bmN0aW9uIDogcHVibGljIENDRmxvYXRBbmltYXRpb25DdXJ2ZSB7CitwdWJsaWM6
CisgICAgdmlydHVhbCB+Q0NUaW1pbmdGdW5jdGlvbigpOworCisgICAgLy8gUGFydGlhbCBpbXBs
ZW1lbnRhdGlvbiBvZiBDQ0Zsb2F0QW5pbWF0aW9uQ3VydmUuCisgICAgdmlydHVhbCBkb3VibGUg
ZHVyYXRpb24oKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIENDVGltaW5nRnVuY3Rpb24oKTsK
K307CisKK2NsYXNzIENDQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbiA6IHB1YmxpYyBDQ1RpbWlu
Z0Z1bmN0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ0N1YmljQmV6aWVy
VGltaW5nRnVuY3Rpb24+IGNyZWF0ZShkb3VibGUgeDEsIGRvdWJsZSB5MSwgZG91YmxlIHgyLCBk
b3VibGUgeTIpOworICAgIHZpcnR1YWwgfkNDQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbigpOwor
CisgICAgLy8gUGFydGlhbCBpbXBsZW1lbnRhdGlvbiBvZiBDQ0Zsb2F0QW5pbWF0aW9uQ3VydmUu
CisgICAgdmlydHVhbCBmbG9hdCBnZXRWYWx1ZShkb3VibGUgdCkgY29uc3Q7CisgICAgdmlydHVh
bCBQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IGNsb25lKCkgY29uc3Q7CisKK3Byb3RlY3Rl
ZDoKKyAgICBDQ0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24oZG91YmxlIHgxLCBkb3VibGUgeTEs
IGRvdWJsZSB4MiwgZG91YmxlIHkyKTsKKworICAgIFVuaXRCZXppZXIgbV9jdXJ2ZTsKK307CisK
K2NsYXNzIENDRWFzZVRpbWluZ0Z1bmN0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093
blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPiBjcmVhdGUoKTsKK307CisKK2NsYXNzIENDRWFzZUluVGlt
aW5nRnVuY3Rpb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDVGltaW5nRnVu
Y3Rpb24+IGNyZWF0ZSgpOworfTsKKworY2xhc3MgQ0NFYXNlT3V0VGltaW5nRnVuY3Rpb24gewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDVGltaW5nRnVuY3Rpb24+IGNyZWF0ZSgp
OworfTsKKworY2xhc3MgQ0NFYXNlSW5PdXRUaW1pbmdGdW5jdGlvbiB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NPd25QdHI8Q0NUaW1pbmdGdW5jdGlvbj4gY3JlYXRlKCk7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDQ1RpbWluZ0Z1bmN0aW9uX2gKKwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0tleWZyYW1lZEFuaW1hdGlv
bkN1cnZlVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDS2V5ZnJhbWVk
QW5pbWF0aW9uQ3VydmVUZXN0LmNwcAppbmRleCBiNzczMmFlYWI3NDI3ZGUzOGM3ZDc0N2Q5NTcw
MTY2OTk4MWU2ZmI1Li4xNWI1NTRhMDY5MDU3NTJmMWJkZWZjYjhhZWJiODcyOGZlZWZhNTVhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDS2V5ZnJhbWVkQW5pbWF0
aW9uQ3VydmVUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDS2V5
ZnJhbWVkQW5pbWF0aW9uQ3VydmVUZXN0LmNwcApAQCAtNDgsOSArNDgsOCBAQCB2b2lkIGV4cGVj
dFRyYW5zbGF0ZVgoZG91YmxlIHRyYW5zbGF0ZVgsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBtYXRyaXgpCiAvLyBUZXN0cyB0aGF0IGEgZmxvYXQgYW5pbWF0aW9uIHdpdGggb25lIGtleWZy
YW1lIHdvcmtzIGFzIGV4cGVjdGVkLgogVEVTVChDQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVz
dCwgT25lRmxvYXRLZXlmcmFtZSkKIHsKLSAgICBWZWN0b3I8Q0NGbG9hdEtleWZyYW1lPiBrZXlm
cmFtZXM7Ci0gICAga2V5ZnJhbWVzLmFwcGVuZChDQ0Zsb2F0S2V5ZnJhbWUoMCwgMikpOwotICAg
IE93blB0cjxDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU+IGN1cnZlKENDS2V5ZnJhbWVk
RmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKGtleWZyYW1lcykpOworICAgIE93blB0cjxDQ0tl
eWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU+IGN1cnZlKENDS2V5ZnJhbWVkRmxvYXRBbmltYXRp
b25DdXJ2ZTo6Y3JlYXRlKCkpOworICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ0Zsb2F0S2V5ZnJh
bWU6OmNyZWF0ZSgwLCAyLCBudWxscHRyKSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZl
LT5nZXRWYWx1ZSgtMSkpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUo
MCkpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMC41KSk7CkBAIC02
MSwxMCArNjAsOSBAQCBURVNUKENDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVUZXN0LCBPbmVGbG9h
dEtleWZyYW1lKQogLy8gVGVzdHMgdGhhdCBhIGZsb2F0IGFuaW1hdGlvbiB3aXRoIHR3byBrZXlm
cmFtZXMgd29ya3MgYXMgZXhwZWN0ZWQuCiBURVNUKENDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVU
ZXN0LCBUd29GbG9hdEtleWZyYW1lKQogewotICAgIFZlY3RvcjxDQ0Zsb2F0S2V5ZnJhbWU+IGtl
eWZyYW1lczsKLSAgICBrZXlmcmFtZXMuYXBwZW5kKENDRmxvYXRLZXlmcmFtZSgwLCAyKSk7Ci0g
ICAga2V5ZnJhbWVzLmFwcGVuZChDQ0Zsb2F0S2V5ZnJhbWUoMSwgNCkpOwotICAgIE93blB0cjxD
Q0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU+IGN1cnZlKENDS2V5ZnJhbWVkRmxvYXRBbmlt
YXRpb25DdXJ2ZTo6Y3JlYXRlKGtleWZyYW1lcykpOworICAgIE93blB0cjxDQ0tleWZyYW1lZEZs
b2F0QW5pbWF0aW9uQ3VydmU+IGN1cnZlKENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6
Y3JlYXRlKCkpOworICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ0Zsb2F0S2V5ZnJhbWU6OmNyZWF0
ZSgwLCAyLCBudWxscHRyKSk7CisgICAgY3VydmUtPmFkZEtleWZyYW1lKENDRmxvYXRLZXlmcmFt
ZTo6Y3JlYXRlKDEsIDQsIG51bGxwdHIpKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUt
PmdldFZhbHVlKC0xKSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLT5nZXRWYWx1ZSgw
KSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDMsIGN1cnZlLT5nZXRWYWx1ZSgwLjUpKTsKQEAgLTc1
LDExICs3MywxMCBAQCBURVNUKENDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVUZXN0LCBUd29GbG9h
dEtleWZyYW1lKQogLy8gVGVzdHMgdGhhdCBhIGZsb2F0IGFuaW1hdGlvbiB3aXRoIHRocmVlIGtl
eWZyYW1lcyB3b3JrcyBhcyBleHBlY3RlZC4KIFRFU1QoQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2
ZVRlc3QsIFRocmVlRmxvYXRLZXlmcmFtZSkKIHsKLSAgICBWZWN0b3I8Q0NGbG9hdEtleWZyYW1l
PiBrZXlmcmFtZXM7Ci0gICAga2V5ZnJhbWVzLmFwcGVuZChDQ0Zsb2F0S2V5ZnJhbWUoMCwgMikp
OwotICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NGbG9hdEtleWZyYW1lKDEsIDQpKTsKLSAgICBrZXlm
cmFtZXMuYXBwZW5kKENDRmxvYXRLZXlmcmFtZSgyLCA4KSk7Ci0gICAgT3duUHRyPENDS2V5ZnJh
bWVkRmxvYXRBbmltYXRpb25DdXJ2ZT4gY3VydmUoQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1
cnZlOjpjcmVhdGUoa2V5ZnJhbWVzKSk7CisgICAgT3duUHRyPENDS2V5ZnJhbWVkRmxvYXRBbmlt
YXRpb25DdXJ2ZT4gY3VydmUoQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjpjcmVhdGUo
KSk7CisgICAgY3VydmUtPmFkZEtleWZyYW1lKENDRmxvYXRLZXlmcmFtZTo6Y3JlYXRlKDAsIDIs
IG51bGxwdHIpKTsKKyAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NGbG9hdEtleWZyYW1lOjpjcmVh
dGUoMSwgNCwgbnVsbHB0cikpOworICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ0Zsb2F0S2V5ZnJh
bWU6OmNyZWF0ZSgyLCA4LCBudWxscHRyKSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZl
LT5nZXRWYWx1ZSgtMSkpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUo
MCkpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgzLCBjdXJ2ZS0+Z2V0VmFsdWUoMC41KSk7CkBAIC05
MiwxMyArODksMTEgQEAgVEVTVChDQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdCwgVGhyZWVG
bG9hdEtleWZyYW1lKQogLy8gVGVzdHMgdGhhdCBhIGZsb2F0IGFuaW1hdGlvbiB3aXRoIG11bHRp
cGxlIGtleXMgYXQgYSBnaXZlbiB0aW1lIHdvcmtzIHNhbmVseS4KIFRFU1QoQ0NLZXlmcmFtZWRB
bmltYXRpb25DdXJ2ZVRlc3QsIFJlcGVhdGVkRmxvYXRLZXlUaW1lcykKIHsKLSAgICBWZWN0b3I8
Q0NGbG9hdEtleWZyYW1lPiBrZXlmcmFtZXM7Ci0gICAgLy8gQSBzdGVwIGZ1bmN0aW9uLgotICAg
IGtleWZyYW1lcy5hcHBlbmQoQ0NGbG9hdEtleWZyYW1lKDAsIDQpKTsKLSAgICBrZXlmcmFtZXMu
YXBwZW5kKENDRmxvYXRLZXlmcmFtZSgxLCA0KSk7Ci0gICAga2V5ZnJhbWVzLmFwcGVuZChDQ0Zs
b2F0S2V5ZnJhbWUoMSwgNikpOwotICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NGbG9hdEtleWZyYW1l
KDIsIDYpKTsKLSAgICBPd25QdHI8Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlPiBjdXJ2
ZShDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZShrZXlmcmFtZXMpKTsKKyAg
ICBPd25QdHI8Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShDQ0tleWZyYW1l
ZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgpKTsKKyAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUo
Q0NGbG9hdEtleWZyYW1lOjpjcmVhdGUoMCwgNCwgbnVsbHB0cikpOworICAgIGN1cnZlLT5hZGRL
ZXlmcmFtZShDQ0Zsb2F0S2V5ZnJhbWU6OmNyZWF0ZSgxLCA0LCBudWxscHRyKSk7CisgICAgY3Vy
dmUtPmFkZEtleWZyYW1lKENDRmxvYXRLZXlmcmFtZTo6Y3JlYXRlKDEsIDYsIG51bGxwdHIpKTsK
KyAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NGbG9hdEtleWZyYW1lOjpjcmVhdGUoMiwgNiwgbnVs
bHB0cikpOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLT5nZXRWYWx1ZSgtMSkpOwog
ICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMCkpOwpAQCAtMTE3LDExICsx
MTIsMTEgQEAgVEVTVChDQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdCwgUmVwZWF0ZWRGbG9h
dEtleVRpbWVzKQogLy8gVGVzdHMgdGhhdCBhIHRyYW5zZm9ybSBhbmltYXRpb24gd2l0aCBvbmUg
a2V5ZnJhbWUgd29ya3MgYXMgZXhwZWN0ZWQuCiBURVNUKENDS2V5ZnJhbWVkQW5pbWF0aW9uQ3Vy
dmVUZXN0LCBPbmVUcmFuc2Zvcm1LZXlmcmFtZSkKIHsKLSAgICBWZWN0b3I8Q0NUcmFuc2Zvcm1L
ZXlmcmFtZT4ga2V5ZnJhbWVzOworICAgIE93blB0cjxDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1h
dGlvbkN1cnZlPiBjdXJ2ZShDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpjcmVh
dGUoKSk7CiAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOwogICAgIG9wZXJhdGlv
bnMub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0
ZShMZW5ndGgoMiwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246
OlRSQU5TTEFURV9YKSk7Ci0gICAga2V5ZnJhbWVzLmFwcGVuZChDQ1RyYW5zZm9ybUtleWZyYW1l
KDAsIG9wZXJhdGlvbnMpKTsKLSAgICBPd25QdHI8Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZT4gY3VydmUoQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRl
KGtleWZyYW1lcykpOworICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ1RyYW5zZm9ybUtleWZyYW1l
OjpjcmVhdGUoMCwgb3BlcmF0aW9ucywgbnVsbHB0cikpOworCiAgICAgSW50U2l6ZSBsYXllclNp
emU7IC8vIGlnbm9yZWQKICAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgt
MSwgbGF5ZXJTaXplKSk7CiAgICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUo
MCwgbGF5ZXJTaXplKSk7CkBAIC0xMzMsMTQgKzEyOCwxMyBAQCBURVNUKENDS2V5ZnJhbWVkQW5p
bWF0aW9uQ3VydmVUZXN0LCBPbmVUcmFuc2Zvcm1LZXlmcmFtZSkKIC8vIFRlc3RzIHRoYXQgYSB0
cmFuc2Zvcm0gYW5pbWF0aW9uIHdpdGggdHdvIGtleWZyYW1lcyB3b3JrcyBhcyBleHBlY3RlZC4K
IFRFU1QoQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QsIFR3b1RyYW5zZm9ybUtleWZyYW1l
KQogewotICAgIFZlY3RvcjxDQ1RyYW5zZm9ybUtleWZyYW1lPiBrZXlmcmFtZXM7CisgICAgT3du
UHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IGN1cnZlKENDS2V5ZnJhbWVk
VHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgpKTsKICAgICBUcmFuc2Zvcm1PcGVyYXRp
b25zIG9wZXJhdGlvbnMxOwogICAgIG9wZXJhdGlvbnMxLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJh
bnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDIsIEZpeGVkKSwgTGVuZ3Ro
KDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOwogICAgIFRyYW5z
Zm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7CiAgICAgb3BlcmF0aW9uczIub3BlcmF0aW9ucygp
LmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoNCwgRml4
ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7
Ci0gICAga2V5ZnJhbWVzLmFwcGVuZChDQ1RyYW5zZm9ybUtleWZyYW1lKDAsIG9wZXJhdGlvbnMx
KSk7Ci0gICAga2V5ZnJhbWVzLmFwcGVuZChDQ1RyYW5zZm9ybUtleWZyYW1lKDEsIG9wZXJhdGlv
bnMyKSk7Ci0gICAgT3duUHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IGN1
cnZlKENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNyZWF0ZShrZXlmcmFtZXMp
KTsKKyAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NUcmFuc2Zvcm1LZXlmcmFtZTo6Y3JlYXRlKDAs
IG9wZXJhdGlvbnMxLCBudWxscHRyKSk7CisgICAgY3VydmUtPmFkZEtleWZyYW1lKENDVHJhbnNm
b3JtS2V5ZnJhbWU6OmNyZWF0ZSgxLCBvcGVyYXRpb25zMiwgbnVsbHB0cikpOwogICAgIEludFNp
emUgbGF5ZXJTaXplOyAvLyBpZ25vcmVkCiAgICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+
Z2V0VmFsdWUoLTEsIGxheWVyU2l6ZSkpOwogICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUt
PmdldFZhbHVlKDAsIGxheWVyU2l6ZSkpOwpAQCAtMTUyLDE3ICsxNDYsMTYgQEAgVEVTVChDQ0tl
eWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdCwgVHdvVHJhbnNmb3JtS2V5ZnJhbWUpCiAvLyBUZXN0
cyB0aGF0IGEgdHJhbnNmb3JtIGFuaW1hdGlvbiB3aXRoIHRocmVlIGtleWZyYW1lcyB3b3JrcyBh
cyBleHBlY3RlZC4KIFRFU1QoQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QsIFRocmVlVHJh
bnNmb3JtS2V5ZnJhbWUpCiB7Ci0gICAgVmVjdG9yPENDVHJhbnNmb3JtS2V5ZnJhbWU+IGtleWZy
YW1lczsKKyAgICBPd25QdHI8Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4gY3Vy
dmUoQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkpOwogICAgIFRy
YW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7CiAgICAgb3BlcmF0aW9uczEub3BlcmF0aW9u
cygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoMiwg
Rml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9Y
KSk7CiAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMjsKICAgICBvcGVyYXRpb25z
Mi5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRl
KExlbmd0aCg0LCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6
VFJBTlNMQVRFX1gpKTsKICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMzOwogICAg
IG9wZXJhdGlvbnMzLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0
aW9uOjpjcmVhdGUoTGVuZ3RoKDgsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3Jt
T3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOwotICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NUcmFuc2Zv
cm1LZXlmcmFtZSgwLCBvcGVyYXRpb25zMSkpOwotICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NUcmFu
c2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMikpOwotICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NU
cmFuc2Zvcm1LZXlmcmFtZSgyLCBvcGVyYXRpb25zMykpOwotICAgIE93blB0cjxDQ0tleWZyYW1l
ZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1h
dGlvbkN1cnZlOjpjcmVhdGUoa2V5ZnJhbWVzKSk7CisgICAgY3VydmUtPmFkZEtleWZyYW1lKEND
VHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZSgwLCBvcGVyYXRpb25zMSwgbnVsbHB0cikpOworICAg
IGN1cnZlLT5hZGRLZXlmcmFtZShDQ1RyYW5zZm9ybUtleWZyYW1lOjpjcmVhdGUoMSwgb3BlcmF0
aW9uczIsIG51bGxwdHIpKTsKKyAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NUcmFuc2Zvcm1LZXlm
cmFtZTo6Y3JlYXRlKDIsIG9wZXJhdGlvbnMzLCBudWxscHRyKSk7CiAgICAgSW50U2l6ZSBsYXll
clNpemU7IC8vIGlnbm9yZWQKICAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1
ZSgtMSwgbGF5ZXJTaXplKSk7CiAgICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFs
dWUoMCwgbGF5ZXJTaXplKSk7CkBAIC0xNzYsNyArMTY5LDcgQEAgVEVTVChDQ0tleWZyYW1lZEFu
aW1hdGlvbkN1cnZlVGVzdCwgVGhyZWVUcmFuc2Zvcm1LZXlmcmFtZSkKIC8vIFRlc3RzIHRoYXQg
YSB0cmFuc2Zvcm0gYW5pbWF0aW9uIHdpdGggbXVsdGlwbGUga2V5cyBhdCBhIGdpdmVuIHRpbWUg
d29ya3Mgc2FuZWx5LgogVEVTVChDQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdCwgUmVwZWF0
ZWRUcmFuc2Zvcm1LZXlUaW1lcykKIHsKLSAgICBWZWN0b3I8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4g
a2V5ZnJhbWVzOworICAgIE93blB0cjxDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZl
PiBjdXJ2ZShDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoKSk7CiAg
ICAgLy8gQSBzdGVwIGZ1bmN0aW9uLgogICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9u
czE7CiAgICAgb3BlcmF0aW9uczEub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zv
cm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoNCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBU
cmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7CkBAIC0xODYsMTEgKzE3OSwxMCBAQCBU
RVNUKENDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVUZXN0LCBSZXBlYXRlZFRyYW5zZm9ybUtleVRp
bWVzKQogICAgIG9wZXJhdGlvbnMzLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNm
b3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDYsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwg
VHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOwogICAgIFRyYW5zZm9ybU9wZXJhdGlv
bnMgb3BlcmF0aW9uczQ7CiAgICAgb3BlcmF0aW9uczQub3BlcmF0aW9ucygpLmFwcGVuZChUcmFu
c2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoNiwgRml4ZWQpLCBMZW5ndGgo
MCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7Ci0gICAga2V5ZnJh
bWVzLmFwcGVuZChDQ1RyYW5zZm9ybUtleWZyYW1lKDAsIG9wZXJhdGlvbnMxKSk7Ci0gICAga2V5
ZnJhbWVzLmFwcGVuZChDQ1RyYW5zZm9ybUtleWZyYW1lKDEsIG9wZXJhdGlvbnMyKSk7Ci0gICAg
a2V5ZnJhbWVzLmFwcGVuZChDQ1RyYW5zZm9ybUtleWZyYW1lKDEsIG9wZXJhdGlvbnMzKSk7Ci0g
ICAga2V5ZnJhbWVzLmFwcGVuZChDQ1RyYW5zZm9ybUtleWZyYW1lKDIsIG9wZXJhdGlvbnM0KSk7
Ci0gICAgT3duUHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IGN1cnZlKEND
S2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNyZWF0ZShrZXlmcmFtZXMpKTsKKyAg
ICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NUcmFuc2Zvcm1LZXlmcmFtZTo6Y3JlYXRlKDAsIG9wZXJh
dGlvbnMxLCBudWxscHRyKSk7CisgICAgY3VydmUtPmFkZEtleWZyYW1lKENDVHJhbnNmb3JtS2V5
ZnJhbWU6OmNyZWF0ZSgxLCBvcGVyYXRpb25zMiwgbnVsbHB0cikpOworICAgIGN1cnZlLT5hZGRL
ZXlmcmFtZShDQ1RyYW5zZm9ybUtleWZyYW1lOjpjcmVhdGUoMSwgb3BlcmF0aW9uczMsIG51bGxw
dHIpKTsKKyAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NUcmFuc2Zvcm1LZXlmcmFtZTo6Y3JlYXRl
KDIsIG9wZXJhdGlvbnM0LCBudWxscHRyKSk7CiAKICAgICBJbnRTaXplIGxheWVyU2l6ZTsgLy8g
aWdub3JlZAogCkBAIC0yMDksMzMgKzIwMSwzNiBAQCBURVNUKENDS2V5ZnJhbWVkQW5pbWF0aW9u
Q3VydmVUZXN0LCBSZXBlYXRlZFRyYW5zZm9ybUtleVRpbWVzKQogICAgIGV4cGVjdFRyYW5zbGF0
ZVgoNiwgY3VydmUtPmdldFZhbHVlKDMsIGxheWVyU2l6ZSkpOwogfQogCi0vLyBUZXN0cyB0aGF0
IGludmFsaWQgbGlzdHMgb2Yga2V5ZnJhbWVzIHJlc3VsdCBpbiBub3RoaW5nIGJlaW5nIHJldHVy
bmVkIGZyb20gOjpjcmVhdGUuCi1URVNUKENDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVUZXN0LCBJ
bnZhbGlkS2V5ZnJhbWVzKQorLy8gVGVzdHMgdGhhdCB0aGUga2V5ZnJhbWVzIG1heSBiZSBhZGRl
ZCBvdXQgb2Ygb3JkZXIuCitURVNUKENDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVUZXN0LCBVbnNv
cnRlZEtleWZyYW1lcykKIHsKLSAgICAvLyBJdCBpcyBpbnZhbGlkIHRvIHBhc3MgYW4gZW1wdHkg
dmVjdG9yIG9mIGtleWZyYW1lcyB0byBjcmVhdGUuCi0gICAgVmVjdG9yPENDVHJhbnNmb3JtS2V5
ZnJhbWU+IHRyYW5zZm9ybUtleWZyYW1lczsKLSAgICBPd25QdHI8Q0NLZXlmcmFtZWRUcmFuc2Zv
cm1BbmltYXRpb25DdXJ2ZT4gdHJhbnNmb3JtQ3VydmUgPSBDQ0tleWZyYW1lZFRyYW5zZm9ybUFu
aW1hdGlvbkN1cnZlOjpjcmVhdGUodHJhbnNmb3JtS2V5ZnJhbWVzKTsKLSAgICBFWFBFQ1RfRkFM
U0UodHJhbnNmb3JtQ3VydmUuZ2V0KCkpOwotCi0gICAgVmVjdG9yPENDRmxvYXRLZXlmcmFtZT4g
ZmxvYXRLZXlmcmFtZXM7Ci0gICAgT3duUHRyPENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2
ZT4gZmxvYXRDdXJ2ZSA9IENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKGZs
b2F0S2V5ZnJhbWVzKTsKLSAgICBFWFBFQ1RfRkFMU0UoZmxvYXRDdXJ2ZS5nZXQoKSk7Ci0KLSAg
ICAvLyBJdCBpcyBpbnZhbGlkIHRvIHBhc3MgYSB2ZWN0b3Igb2YgdW5zb3J0ZWQga2V5ZnJhbWVz
IHRvIGNyZWF0ZTsKLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOwotICAgIG9w
ZXJhdGlvbnMxLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9u
OjpjcmVhdGUoTGVuZ3RoKDIsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3Bl
cmF0aW9uOjpUUkFOU0xBVEVfWCkpOwotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9u
czI7Ci0gICAgb3BlcmF0aW9uczIub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zv
cm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoNCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBU
cmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7Ci0gICAgdHJhbnNmb3JtS2V5ZnJhbWVz
LmFwcGVuZChDQ1RyYW5zZm9ybUtleWZyYW1lKDEsIG9wZXJhdGlvbnMxKSk7Ci0gICAgdHJhbnNm
b3JtS2V5ZnJhbWVzLmFwcGVuZChDQ1RyYW5zZm9ybUtleWZyYW1lKDAsIG9wZXJhdGlvbnMyKSk7
Ci0gICAgdHJhbnNmb3JtQ3VydmUgPSBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZl
OjpjcmVhdGUodHJhbnNmb3JtS2V5ZnJhbWVzKTsKLSAgICBFWFBFQ1RfRkFMU0UodHJhbnNmb3Jt
Q3VydmUuZ2V0KCkpOwotCi0gICAgZmxvYXRLZXlmcmFtZXMuYXBwZW5kKENDRmxvYXRLZXlmcmFt
ZSgxLCAyKSk7Ci0gICAgZmxvYXRLZXlmcmFtZXMuYXBwZW5kKENDRmxvYXRLZXlmcmFtZSgwLCA0
KSk7Ci0gICAgZmxvYXRDdXJ2ZSA9IENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3Jl
YXRlKGZsb2F0S2V5ZnJhbWVzKTsKLSAgICBFWFBFQ1RfRkFMU0UoZmxvYXRDdXJ2ZS5nZXQoKSk7
CisgICAgT3duUHRyPENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZT4gY3VydmUoQ0NLZXlm
cmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoKSk7CisgICAgY3VydmUtPmFkZEtleWZy
YW1lKENDRmxvYXRLZXlmcmFtZTo6Y3JlYXRlKDIsIDgsIG51bGxwdHIpKTsKKyAgICBjdXJ2ZS0+
YWRkS2V5ZnJhbWUoQ0NGbG9hdEtleWZyYW1lOjpjcmVhdGUoMCwgMiwgbnVsbHB0cikpOworICAg
IGN1cnZlLT5hZGRLZXlmcmFtZShDQ0Zsb2F0S2V5ZnJhbWU6OmNyZWF0ZSgxLCA0LCBudWxscHRy
KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLT5nZXRWYWx1ZSgtMSkpOworICAgIEVY
UEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMCkpOworICAgIEVYUEVDVF9GTE9BVF9F
USgzLCBjdXJ2ZS0+Z2V0VmFsdWUoMC41KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZl
LT5nZXRWYWx1ZSgxKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDYsIGN1cnZlLT5nZXRWYWx1ZSgx
LjUpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoOCwgY3VydmUtPmdldFZhbHVlKDIpKTsKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoOCwgY3VydmUtPmdldFZhbHVlKDMpKTsKIH0KIAorLy8gVGVzdHMgdGhh
dCBhIGN1YmljIGJlemllciB0aW1pbmcgZnVuY3Rpb24gd29ya3MgYXMgZXhwZWN0ZWQuCitURVNU
KENDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVUZXN0LCBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9u
KQoreworICAgIE93blB0cjxDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU+IGN1cnZlKEND
S2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkpOworICAgIGN1cnZlLT5hZGRL
ZXlmcmFtZShDQ0Zsb2F0S2V5ZnJhbWU6OmNyZWF0ZSgwLCAwLCBDQ0N1YmljQmV6aWVyVGltaW5n
RnVuY3Rpb246OmNyZWF0ZSgwLjI1LCAwLCAwLjc1LCAxKSkpOworICAgIGN1cnZlLT5hZGRLZXlm
cmFtZShDQ0Zsb2F0S2V5ZnJhbWU6OmNyZWF0ZSgxLCAxLCBudWxscHRyKSk7CisKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoMCwgY3VydmUtPmdldFZhbHVlKDApKTsKKyAgICBFWFBFQ1RfTFQoMCwgY3Vy
dmUtPmdldFZhbHVlKDAuMjUpKTsKKyAgICBFWFBFQ1RfR1QoMC4yNSwgY3VydmUtPmdldFZhbHVl
KDAuMjUpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMC41LCBjdXJ2ZS0+Z2V0VmFsdWUoMC41KSk7
CisgICAgRVhQRUNUX0xUKDAuNzUsIGN1cnZlLT5nZXRWYWx1ZSgwLjc1KSk7CisgICAgRVhQRUNU
X0dUKDEsIGN1cnZlLT5nZXRWYWx1ZSgwLjc1KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEsIGN1
cnZlLT5nZXRWYWx1ZSgxKSk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129492</attachid>
            <date>2012-02-29 12:49:56 -0800</date>
            <delta_ts>2012-02-29 19:34:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79819-20120229154955.patch</filename>
            <type>text/plain</type>
            <size>50063</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4OTg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjNjYzk5YjEzOGI1NzI2
Mjc3MTE4NWUzY2MwZDFiYWY4OGRlZGQ1Yy4uNmQzMDk5YjdhMzA0Mzg0MDAwMGQwNDU1YTE5MzZk
YTFiNGRjZGNhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDEyLTAyLTI4ICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQWRk
IGltcGwtdGhyZWFkIHN1cHBvcnQgZm9yIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5ODE5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmlt
YXRpb25DdXJ2ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0tleWZyYW1lOjpDQ0tleWZyYW1l
KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZTo6fkND
S2V5ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZTo6dGltZSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0tleWZyYW1lOjp0aW1pbmdGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0Zsb2F0S2V5ZnJhbWU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0Zsb2F0S2V5
ZnJhbWU6OkNDRmxvYXRLZXlmcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0Zsb2F0S2V5ZnJh
bWU6On5DQ0Zsb2F0S2V5ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NGbG9hdEtleWZyYW1l
Ojp2YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0Zsb2F0S2V5ZnJhbWU6OmNsb25lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1RyYW5zZm9ybUtleWZyYW1lOjpDQ1RyYW5zZm9ybUtleWZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDVHJhbnNmb3JtS2V5ZnJhbWU6On5DQ1RyYW5zZm9ybUtleWZyYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDVHJhbnNmb3JtS2V5ZnJhbWU6OnZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDVHJhbnNmb3JtS2V5ZnJhbWU6OmNsb25lKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6Q0NLZXlmcmFtZWRGbG9hdEFuaW1h
dGlvbkN1cnZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25D
dXJ2ZTo6YWRkS2V5ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRGbG9hdEFu
aW1hdGlvbkN1cnZlOjpkdXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0tleWZyYW1lZEZs
b2F0QW5pbWF0aW9uQ3VydmU6OmNsb25lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDS2V5ZnJhbWVk
RmxvYXRBbmltYXRpb25DdXJ2ZTo6Z2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlm
cmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OkNDS2V5ZnJhbWVkVHJhbnNmb3Jt
QW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1B
bmltYXRpb25DdXJ2ZTo6fkNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6YWRkS2V5
ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25D
dXJ2ZTo6ZHVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1B
bmltYXRpb25DdXJ2ZTo6Y2xvbmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFu
c2Zvcm1BbmltYXRpb25DdXJ2ZTo6Z2V0VmFsdWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuaDoKKyAgICAgICAgKEND
S2V5ZnJhbWUpOgorICAgICAgICAoQ0NGbG9hdEtleWZyYW1lKToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoQ0NUcmFuc2Zvcm1LZXlmcmFtZSk6CisgICAgICAgIChDQ0tleWZyYW1lZEZs
b2F0QW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAoQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGltaW5nRnVuY3Rpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NUaW1pbmdGdW5jdGlvbjo6Q0NUaW1pbmdGdW5jdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpDQ1RpbWluZ0Z1bmN0aW9uOjp+Q0NUaW1pbmdGdW5jdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpDQ1RpbWluZ0Z1bmN0aW9uOjpkdXJhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpDQ0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OkNDQ3ViaWNCZXppZXJUaW1p
bmdGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0N1YmljQmV6aWVyVGltaW5nRnVuY3Rp
b246On5DQ0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0ND
dWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpnZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmNsb25lKToKKyAgICAgICAgKFdlYkNvcmU6OkND
RWFzZVRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NFYXNlSW5U
aW1pbmdGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRWFzZU91dFRpbWlu
Z0Z1bmN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NFYXNlSW5PdXRUaW1pbmdG
dW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RpbWluZ0Z1bmN0aW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChDQ1RpbWluZ0Z1bmN0aW9uKToKKyAgICAgICAgKENDQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlv
bik6CisgICAgICAgIChDQ0Vhc2VUaW1pbmdGdW5jdGlvbik6CisgICAgICAgIChDQ0Vhc2VJblRp
bWluZ0Z1bmN0aW9uKToKKyAgICAgICAgKENDRWFzZU91dFRpbWluZ0Z1bmN0aW9uKToKKyAgICAg
ICAgKENDRWFzZUluT3V0VGltaW5nRnVuY3Rpb24pOgorCiAyMDEyLTAyLTI3ICBJbHlhIFRpa2hv
bm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIHNpbmds
ZSBsaW5lIGZpeCBmb3IgcjEwODk4My4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggYTZl
OTRkZjg5NDJlMzlkZjc4NWFkNzM3OTk4Y2MzNDFmNWQzOTY3ZS4uZGUzZWI5NWMyODU3OGNiMzFk
OTFkZDIyOWVjYTJlYTI3YWIzNjg1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNCBAQAorMjAxMi0wMi0yOCAgSWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBbY2hyb21pdW1dIEFkZCBpbXBsLXRocmVhZCBzdXBwb3J0IGZvciBhbmlt
YXRpb24tdGltaW5nLWZ1bmN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03OTgxOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogdGVzdHMvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisgICAgICAgIChXZWJDb3JlKToKKwogMjAxMi0wMi0y
NiAgSGFqaW1lIE1vcnJpdGEgIDxtb3JyaXRhQGNocm9taXVtLm9yZz4KIAogICAgICAgICBNb3Zl
IENocm9tZUNsaWVudDo6c2hvd0NvbnRleHRNZW51KCkgdG8gQ29udGV4dE1lbnVDbGllbnQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQppbmRleCBlYjJmNTljY2Q0ZjFhNWEwMzY5ODk5NjYyMGEyZTJhYjU1YzcyYTY1
Li44YjdmOGJhNDliOGE0NzlmZTgyMTc1YzczNWNmZmRhMjdiN2UxNDM3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCkBAIC0zMzU3LDYgKzMzNTcsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlRHJhd1F1YWQuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVEcmF3UXVhZC5oJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbWluZ0Z1bmN0aW9uLmNwcCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaW1pbmdGdW5j
dGlvbi5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Ro
cmVhZC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Ro
cmVhZFByb3h5LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaHJlYWRQcm94eS5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmlt
YXRpb25DdXJ2ZS5jcHAKaW5kZXggYjYxNWM3MzZjYzAzZjA5Nzg5NzczNWM0ZjkwNGM2NzkzYzk5
ZjgwZi4uYWU0MWZlMDY5NWIzMGQ2YTI5NDc3NTUwZWY2ZjE5OWIxMzE0Y2ZkOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFt
ZWRBbmltYXRpb25DdXJ2ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5jcHAKQEAgLTQyLDMxICs0
MiwxNzMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIHsKIAogdGVtcGxhdGUgPGNs
YXNzIEtleWZyYW1lPgotYm9vbCBrZXlmcmFtZXNBcmVTb3J0ZWQoY29uc3QgVmVjdG9yPEtleWZy
YW1lPiYga2V5ZnJhbWVzKQordm9pZCBpbnNlcnRLZXlmcmFtZShQYXNzT3duUHRyPEtleWZyYW1l
PiBwb3BLZXlmcmFtZSwgVmVjdG9yPE93blB0cjxLZXlmcmFtZT4gPiYga2V5ZnJhbWVzKQogewot
ICAgIGlmICgha2V5ZnJhbWVzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGtleWZyYW1lcy5zaXplKCkgLSAxOyArK2kpIHsKLSAgICAg
ICAgaWYgKGtleWZyYW1lc1tpXS50aW1lID4ga2V5ZnJhbWVzW2krMV0udGltZSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBPd25QdHI8S2V5ZnJhbWU+IGtleWZyYW1lID0gcG9wS2V5
ZnJhbWU7CisKKyAgICAvLyBVc3VhbGx5LCB0aGUga2V5ZnJhbWVzIHdpbGwgYmUgYWRkZWQgaW4g
b3JkZXIsIHNvIHRoaXMgbG9vcCB3b3VsZCBiZSB1bm5lY2Vzc2FyeSBhbmQKKyAgICAvLyB3ZSBz
aG91bGQgc2tpcCBpdCBpZiBwb3NzaWJsZS4KKyAgICBpZiAoIWtleWZyYW1lcy5pc0VtcHR5KCkg
JiYga2V5ZnJhbWUtPnRpbWUoKSA8IGtleWZyYW1lcy5sYXN0KCktPnRpbWUoKSkgeworICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleWZyYW1lcy5zaXplKCk7ICsraSkgeworICAgICAg
ICAgICAgaWYgKGtleWZyYW1lLT50aW1lKCkgPCBrZXlmcmFtZXNbaV0tPnRpbWUoKSkgeworICAg
ICAgICAgICAgICAgIGtleWZyYW1lcy5pbnNlcnQoaSwga2V5ZnJhbWUucmVsZWFzZSgpKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAK
LSAgICByZXR1cm4gdHJ1ZTsKKyAgICBrZXlmcmFtZXMuYXBwZW5kKGtleWZyYW1lLnJlbGVhc2Uo
KSk7Cit9CisKK1Bhc3NPd25QdHI8Q0NUaW1pbmdGdW5jdGlvbj4gY2xvbmVUaW1pbmdGdW5jdGlv
bihjb25zdCBDQ1RpbWluZ0Z1bmN0aW9uKiB0aW1pbmdGdW5jdGlvbikKK3sKKyAgICBBU1NFUlQo
dGltaW5nRnVuY3Rpb24pOworICAgIE93blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiBjdXJ2ZSh0aW1p
bmdGdW5jdGlvbi0+Y2xvbmUoKSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKHN0YXRpY19jYXN0PEND
VGltaW5nRnVuY3Rpb24qPihjdXJ2ZS5sZWFrUHRyKCkpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UK
IAotUGFzc093blB0cjxDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU+IENDS2V5ZnJhbWVk
RmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKGNvbnN0IFZlY3RvcjxDQ0Zsb2F0S2V5ZnJhbWU+
JiBrZXlmcmFtZXMpCitDQ0tleWZyYW1lOjpDQ0tleWZyYW1lKGRvdWJsZSB0aW1lLCBQYXNzT3du
UHRyPENDVGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uKQorICAgIDogbV90aW1lKHRpbWUp
CisgICAgLCBtX3RpbWluZ0Z1bmN0aW9uKHRpbWluZ0Z1bmN0aW9uKQoreworfQorCitDQ0tleWZy
YW1lOjp+Q0NLZXlmcmFtZSgpCit7Cit9CisKK2RvdWJsZSBDQ0tleWZyYW1lOjp0aW1lKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV90aW1lOworfQorCitjb25zdCBDQ1RpbWluZ0Z1bmN0aW9uKiBD
Q0tleWZyYW1lOjp0aW1pbmdGdW5jdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGltaW5n
RnVuY3Rpb24uZ2V0KCk7Cit9CisKK1Bhc3NPd25QdHI8Q0NGbG9hdEtleWZyYW1lPiBDQ0Zsb2F0
S2V5ZnJhbWU6OmNyZWF0ZShkb3VibGUgdGltZSwgZmxvYXQgdmFsdWUsIFBhc3NPd25QdHI8Q0NU
aW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb24pCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBDQ0Zsb2F0S2V5ZnJhbWUodGltZSwgdmFsdWUsIHRpbWluZ0Z1bmN0aW9uKSk7Cit9CisKK0ND
RmxvYXRLZXlmcmFtZTo6Q0NGbG9hdEtleWZyYW1lKGRvdWJsZSB0aW1lLCBmbG9hdCB2YWx1ZSwg
UGFzc093blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbikKKyAgICA6IENDS2V5
ZnJhbWUodGltZSwgdGltaW5nRnVuY3Rpb24pCisgICAgLCBtX3ZhbHVlKHZhbHVlKQoreworfQor
CitDQ0Zsb2F0S2V5ZnJhbWU6On5DQ0Zsb2F0S2V5ZnJhbWUoKQoreworfQorCitmbG9hdCBDQ0Zs
b2F0S2V5ZnJhbWU6OnZhbHVlKCkgY29uc3QKIHsKLSAgICBpZiAoIWtleWZyYW1lcy5zaXplKCkg
fHwgIWtleWZyYW1lc0FyZVNvcnRlZChrZXlmcmFtZXMpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICByZXR1cm4gbV92YWx1ZTsKK30KIAotICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NL
ZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlKGtleWZyYW1lcykpOworUGFzc093blB0cjxDQ0Zs
b2F0S2V5ZnJhbWU+IENDRmxvYXRLZXlmcmFtZTo6Y2xvbmUoKSBjb25zdAoreworICAgIHJldHVy
biBDQ0Zsb2F0S2V5ZnJhbWU6OmNyZWF0ZSh0aW1lKCksIHZhbHVlKCksIHRpbWluZ0Z1bmN0aW9u
KCkgPyBjbG9uZVRpbWluZ0Z1bmN0aW9uKHRpbWluZ0Z1bmN0aW9uKCkpIDogbnVsbHB0cik7CiB9
CiAKLUNDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6Q0NLZXlmcmFtZWRGbG9hdEFuaW1h
dGlvbkN1cnZlKGNvbnN0IFZlY3RvcjxDQ0Zsb2F0S2V5ZnJhbWU+JiBrZXlmcmFtZXMpCi0gICAg
OiBtX2tleWZyYW1lcyhrZXlmcmFtZXMpCitQYXNzT3duUHRyPENDVHJhbnNmb3JtS2V5ZnJhbWU+
IENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZShkb3VibGUgdGltZSwgY29uc3QgVHJhbnNmb3Jt
T3BlcmF0aW9ucyYgdmFsdWUsIFBhc3NPd25QdHI8Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVu
Y3Rpb24pCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1RyYW5zZm9ybUtleWZyYW1lKHRp
bWUsIHZhbHVlLCB0aW1pbmdGdW5jdGlvbikpOworfQorCitDQ1RyYW5zZm9ybUtleWZyYW1lOjpD
Q1RyYW5zZm9ybUtleWZyYW1lKGRvdWJsZSB0aW1lLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25z
JiB2YWx1ZSwgUGFzc093blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbikKKyAg
ICA6IENDS2V5ZnJhbWUodGltZSwgdGltaW5nRnVuY3Rpb24pCisgICAgLCBtX3ZhbHVlKHZhbHVl
KQoreworfQorCitDQ1RyYW5zZm9ybUtleWZyYW1lOjp+Q0NUcmFuc2Zvcm1LZXlmcmFtZSgpCit7
Cit9CisKK2NvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIENDVHJhbnNmb3JtS2V5ZnJhbWU6OnZh
bHVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV92YWx1ZTsKK30KKworUGFzc093blB0cjxDQ1Ry
YW5zZm9ybUtleWZyYW1lPiBDQ1RyYW5zZm9ybUtleWZyYW1lOjpjbG9uZSgpIGNvbnN0Cit7Cisg
ICAgLy8gV2UgbmVlZCB0byBkbyBhIGRlZXAgY29weSB0aGUgbV92YWx1ZSBtYXkgY29udGFpbiBy
ZWYgcG9pbnRlcnMgdG8gVHJhbnNmb3JtT3BlcmF0aW9uIG9iamVjdHMuCisgICAgVHJhbnNmb3Jt
T3BlcmF0aW9ucyBvcGVyYXRpb25zOworICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgbV92YWx1
ZS5zaXplKCk7ICsraikgeworICAgICAgICBUcmFuc2Zvcm1PcGVyYXRpb246Ok9wZXJhdGlvblR5
cGUgb3BlcmF0aW9uVHlwZSA9IG1fdmFsdWUub3BlcmF0aW9ucygpW2pdLT5nZXRPcGVyYXRpb25U
eXBlKCk7CisgICAgICAgIHN3aXRjaCAob3BlcmF0aW9uVHlwZSkgeworICAgICAgICBjYXNlIFRy
YW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfWDoKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRp
b246OlNDQUxFX1k6CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV9aOgor
ICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfM0Q6CisgICAgICAgIGNhc2Ug
VHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRTogeworICAgICAgICAgICAgU2NhbGVUcmFuc2Zvcm1P
cGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9u
Kj4obV92YWx1ZS5vcGVyYXRpb25zKClbal0uZ2V0KCkpOworICAgICAgICAgICAgb3BlcmF0aW9u
cy5vcGVyYXRpb25zKCkuYXBwZW5kKFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUodHJh
bnNmb3JtLT54KCksIHRyYW5zZm9ybS0+eSgpLCB0cmFuc2Zvcm0tPnooKSwgb3BlcmF0aW9uVHlw
ZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBUcmFuc2Zv
cm1PcGVyYXRpb246OlRSQU5TTEFURV9YOgorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlv
bjo6VFJBTlNMQVRFX1k6CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xB
VEVfWjoKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV8zRDoKKyAg
ICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURTogeworICAgICAgICAgICAg
VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxUcmFu
c2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24qPihtX3ZhbHVlLm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7
CisgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJh
bnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUodHJhbnNmb3JtLT54KCksIHRyYW5zZm9ybS0+eSgpLCB0
cmFuc2Zvcm0tPnooKSwgb3BlcmF0aW9uVHlwZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV9YOgorICAgICAg
ICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1k6CisgICAgICAgIGNhc2UgVHJhbnNm
b3JtT3BlcmF0aW9uOjpST1RBVEVfM0Q6CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9u
OjpST1RBVEU6IHsKKyAgICAgICAgICAgIFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNm
b3JtID0gc3RhdGljX2Nhc3Q8Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKj4obV92YWx1ZS5vcGVy
YXRpb25zKClbal0uZ2V0KCkpOworICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCku
YXBwZW5kKFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHRyYW5zZm9ybS0+eCgpLCB0
cmFuc2Zvcm0tPnkoKSwgdHJhbnNmb3JtLT56KCksIHRyYW5zZm9ybS0+YW5nbGUoKSwgb3BlcmF0
aW9uVHlwZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBU
cmFuc2Zvcm1PcGVyYXRpb246OlNLRVdfWDoKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRp
b246OlNLRVdfWToKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVc6IHsKKyAg
ICAgICAgICAgIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0
PFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24qPihtX3ZhbHVlLm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7
CisgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoU2tld1RyYW5zZm9y
bU9wZXJhdGlvbjo6Y3JlYXRlKHRyYW5zZm9ybS0+YW5nbGVYKCksIHRyYW5zZm9ybS0+YW5nbGVZ
KCksIG9wZXJhdGlvblR5cGUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpNQVRSSVg6IHsKKyAgICAgICAgICAgIE1hdHJp
eFRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8TWF0cml4VHJhbnNm
b3JtT3BlcmF0aW9uKj4obV92YWx1ZS5vcGVyYXRpb25zKClbal0uZ2V0KCkpOworICAgICAgICAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbSA9IHRyYW5zZm9ybS0+bWF0cml4KCk7CisgICAgICAg
ICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoTWF0cml4VHJhbnNmb3JtT3BlcmF0
aW9uOjpjcmVhdGUobS5hKCksIG0uYigpLCBtLmMoKSwgbS5kKCksIG0uZSgpLCBtLmYoKSkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVy
YXRpb246Ok1BVFJJWF8zRDogeworICAgICAgICAgICAgTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRp
b24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uKj4o
bV92YWx1ZS5vcGVyYXRpb25zKClbal0uZ2V0KCkpOworICAgICAgICAgICAgb3BlcmF0aW9ucy5v
cGVyYXRpb25zKCkuYXBwZW5kKE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUodHJh
bnNmb3JtLT5tYXRyaXgoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlBFUlNQRUNUSVZFOiB7CisgICAgICAgICAgICBQ
ZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8UGVy
c3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24qPihtX3ZhbHVlLm9wZXJhdGlvbnMoKVtqXS5nZXQo
KSk7CisgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoUGVyc3BlY3Rp
dmVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0cmFuc2Zvcm0tPnBlcnNwZWN0aXZlKCkpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3Bl
cmF0aW9uOjpJREVOVElUWTogeworICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCku
YXBwZW5kKElkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Tk9O
RToKKyAgICAgICAgICAgIC8vIERvIG5vdGhpbmcuCisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfSAvLyBzd2l0Y2gKKyAgICB9IC8vIGZvciBlYWNoIG9wZXJhdGlvbgorCisgICAgcmV0dXJu
IENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZSh0aW1lKCksIG9wZXJhdGlvbnMsIHRpbWluZ0Z1
bmN0aW9uKCkgPyBjbG9uZVRpbWluZ0Z1bmN0aW9uKHRpbWluZ0Z1bmN0aW9uKCkpIDogbnVsbHB0
cik7Cit9CisKK1Bhc3NPd25QdHI8Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlPiBDQ0tl
eWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmUpOworfQorCitDQ0tleWZyYW1l
ZEZsb2F0QW5pbWF0aW9uQ3VydmU6OkNDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZSgpCiB7
CiB9CiAKQEAgLTc0LDE1OSArMjE2LDExMCBAQCBDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3Vy
dmU6On5DQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmUoKQogewogfQogCit2b2lkIENDS2V5
ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6YWRkS2V5ZnJhbWUoUGFzc093blB0cjxDQ0Zsb2F0
S2V5ZnJhbWU+IGtleWZyYW1lKQoreworICAgIGluc2VydEtleWZyYW1lKGtleWZyYW1lLCBtX2tl
eWZyYW1lcyk7Cit9CisKIGRvdWJsZSBDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmR1
cmF0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9rZXlmcmFtZXMubGFzdCgpLnRpbWUgLSBt
X2tleWZyYW1lcy5maXJzdCgpLnRpbWU7CisgICAgcmV0dXJuIG1fa2V5ZnJhbWVzLmxhc3QoKS0+
dGltZSgpIC0gbV9rZXlmcmFtZXMuZmlyc3QoKS0+dGltZSgpOwogfQogCiBQYXNzT3duUHRyPEND
QW5pbWF0aW9uQ3VydmU+IENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y2xvbmUoKSBj
b25zdAogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlv
bkN1cnZlKCp0aGlzKSk7CisgICAgT3duUHRyPENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2
ZT4gdG9SZXR1cm4oQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoKSk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2tleWZyYW1lcy5zaXplKCk7ICsraSkKKyAgICAg
ICAgdG9SZXR1cm4tPmFkZEtleWZyYW1lKG1fa2V5ZnJhbWVzW2ldLT5jbG9uZSgpKTsKKyAgICBy
ZXR1cm4gdG9SZXR1cm4ucmVsZWFzZSgpOwogfQogCiBmbG9hdCBDQ0tleWZyYW1lZEZsb2F0QW5p
bWF0aW9uQ3VydmU6OmdldFZhbHVlKGRvdWJsZSB0KSBjb25zdAogewotICAgIGlmICh0IDw9IG1f
a2V5ZnJhbWVzLmZpcnN0KCkudGltZSkKLSAgICAgICAgcmV0dXJuIG1fa2V5ZnJhbWVzLmZpcnN0
KCkudmFsdWU7CisgICAgaWYgKHQgPD0gbV9rZXlmcmFtZXMuZmlyc3QoKS0+dGltZSgpKQorICAg
ICAgICByZXR1cm4gbV9rZXlmcmFtZXMuZmlyc3QoKS0+dmFsdWUoKTsKIAotICAgIGlmICh0ID49
IG1fa2V5ZnJhbWVzLmxhc3QoKS50aW1lKQotICAgICAgICByZXR1cm4gbV9rZXlmcmFtZXMubGFz
dCgpLnZhbHVlOworICAgIGlmICh0ID49IG1fa2V5ZnJhbWVzLmxhc3QoKS0+dGltZSgpKQorICAg
ICAgICByZXR1cm4gbV9rZXlmcmFtZXMubGFzdCgpLT52YWx1ZSgpOwogCiAgICAgc2l6ZV90IGkg
PSAwOwogICAgIGZvciAoOyBpIDwgbV9rZXlmcmFtZXMuc2l6ZSgpIC0gMTsgKytpKSB7Ci0gICAg
ICAgIGlmICh0IDwgbV9rZXlmcmFtZXNbaSsxXS50aW1lKQorICAgICAgICBpZiAodCA8IG1fa2V5
ZnJhbWVzW2krMV0tPnRpbWUoKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGZs
b2F0IHByb2dyZXNzID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KCh0IC0gbV9rZXlmcmFtZXNbaV0udGlt
ZSkgLyAobV9rZXlmcmFtZXNbaSsxXS50aW1lIC0gbV9rZXlmcmFtZXNbaV0udGltZSkpOwotICAg
IC8vIEZJWE1FOiBhcHBseSB0aW1pbmcgZnVuY3Rpb24gaGVyZS4KLSAgICByZXR1cm4gbV9rZXlm
cmFtZXNbaV0udmFsdWUgKyAobV9rZXlmcmFtZXNbaSsxXS52YWx1ZSAtIG1fa2V5ZnJhbWVzW2ld
LnZhbHVlKSAqIHByb2dyZXNzOworICAgIGZsb2F0IHByb2dyZXNzID0gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KCh0IC0gbV9rZXlmcmFtZXNbaV0tPnRpbWUoKSkgLyAobV9rZXlmcmFtZXNbaSsxXS0+dGlt
ZSgpIC0gbV9rZXlmcmFtZXNbaV0tPnRpbWUoKSkpOworCisgICAgaWYgKG1fa2V5ZnJhbWVzW2ld
LT50aW1pbmdGdW5jdGlvbigpKQorICAgICAgICBwcm9ncmVzcyA9IG1fa2V5ZnJhbWVzW2ldLT50
aW1pbmdGdW5jdGlvbigpLT5nZXRWYWx1ZShwcm9ncmVzcyk7CisKKyAgICByZXR1cm4gbV9rZXlm
cmFtZXNbaV0tPnZhbHVlKCkgKyAobV9rZXlmcmFtZXNbaSsxXS0+dmFsdWUoKSAtIG1fa2V5ZnJh
bWVzW2ldLT52YWx1ZSgpKSAqIHByb2dyZXNzOwogfQogCi1QYXNzT3duUHRyPENDS2V5ZnJhbWVk
VHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3Vy
dmU6OmNyZWF0ZShjb25zdCBWZWN0b3I8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4mIGtleWZyYW1lcykK
K1Bhc3NPd25QdHI8Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4gQ0NLZXlmcmFt
ZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkKIHsKLSAgICBpZiAoIWtleWZyYW1l
cy5zaXplKCkgfHwgIWtleWZyYW1lc0FyZVNvcnRlZChrZXlmcmFtZXMpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDS2V5ZnJhbWVkVHJhbnNmb3Jt
QW5pbWF0aW9uQ3VydmUpOworfQogCi0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0tleWZyYW1l
ZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKGtleWZyYW1lcykpOworQ0NLZXlmcmFtZWRUcmFuc2Zv
cm1BbmltYXRpb25DdXJ2ZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSgpCit7
CiB9CiAKLUNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OkNDS2V5ZnJhbWVkVHJh
bnNmb3JtQW5pbWF0aW9uQ3VydmUoY29uc3QgVmVjdG9yPENDVHJhbnNmb3JtS2V5ZnJhbWU+JiBr
ZXlmcmFtZXMpCi0gICAgOiBtX2tleWZyYW1lcyhrZXlmcmFtZXMpCitDQ0tleWZyYW1lZFRyYW5z
Zm9ybUFuaW1hdGlvbkN1cnZlOjp+Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSgp
CiB7CiB9CiAKLUNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6On5DQ0tleWZyYW1l
ZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCkgeyB9Cit2b2lkIENDS2V5ZnJhbWVkVHJhbnNmb3Jt
QW5pbWF0aW9uQ3VydmU6OmFkZEtleWZyYW1lKFBhc3NPd25QdHI8Q0NUcmFuc2Zvcm1LZXlmcmFt
ZT4ga2V5ZnJhbWUpCit7CisgICAgaW5zZXJ0S2V5ZnJhbWUoa2V5ZnJhbWUsIG1fa2V5ZnJhbWVz
KTsKK30KIAogZG91YmxlIENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmR1cmF0
aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9rZXlmcmFtZXMubGFzdCgpLnRpbWUgLSBtX2tl
eWZyYW1lcy5maXJzdCgpLnRpbWU7CisgICAgcmV0dXJuIG1fa2V5ZnJhbWVzLmxhc3QoKS0+dGlt
ZSgpIC0gbV9rZXlmcmFtZXMuZmlyc3QoKS0+dGltZSgpOwogfQogCiBQYXNzT3duUHRyPENDQW5p
bWF0aW9uQ3VydmU+IENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNsb25lKCkg
Y29uc3QKIHsKLSAgICBWZWN0b3I8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4ga2V5ZnJhbWVzOwotICAg
IC8vIFdlIG5lZWQgdG8gZG8gYSBkZWVwIGNvcHkgb2YgYWxsIG9mIHRoZSBrZXlmcmFtZXMgc2lu
Y2UgdGhleSBjb250YWluIHJlZgotICAgIC8vIHBvaW50ZXJzIHRvIFRyYW5zZm9ybU9wZXJhdGlv
biBvYmplY3RzLgotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9rZXlmcmFtZXMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgQ0NUcmFuc2Zvcm1LZXlmcmFtZSBrZXlmcmFtZShtX2tleWZyYW1l
c1tpXS50aW1lKTsKLSAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBtX2tleWZyYW1lc1tp
XS52YWx1ZS5zaXplKCk7ICsraikgewotICAgICAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9uOjpP
cGVyYXRpb25UeXBlIG9wZXJhdGlvblR5cGUgPSBtX2tleWZyYW1lc1tpXS52YWx1ZS5vcGVyYXRp
b25zKClbal0tPmdldE9wZXJhdGlvblR5cGUoKTsKLSAgICAgICAgICAgIHN3aXRjaCAob3BlcmF0
aW9uVHlwZSkgewotICAgICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1g6
Ci0gICAgICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfWToKLSAgICAgICAg
ICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV9aOgotICAgICAgICAgICAgY2FzZSBU
cmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFXzNEOgotICAgICAgICAgICAgY2FzZSBUcmFuc2Zvcm1P
cGVyYXRpb246OlNDQUxFOiB7Ci0gICAgICAgICAgICAgICAgU2NhbGVUcmFuc2Zvcm1PcGVyYXRp
b24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKj4obV9r
ZXlmcmFtZXNbaV0udmFsdWUub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKLSAgICAgICAgICAgICAg
ICBrZXlmcmFtZS52YWx1ZS5vcGVyYXRpb25zKCkuYXBwZW5kKFNjYWxlVHJhbnNmb3JtT3BlcmF0
aW9uOjpjcmVhdGUodHJhbnNmb3JtLT54KCksIHRyYW5zZm9ybS0+eSgpLCB0cmFuc2Zvcm0tPnoo
KSwgb3BlcmF0aW9uVHlwZSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YOgotICAg
ICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9ZOgotICAgICAgICAg
ICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9aOgotICAgICAgICAgICAgY2Fz
ZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV8zRDoKLSAgICAgICAgICAgIGNhc2UgVHJh
bnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEU6IHsKLSAgICAgICAgICAgICAgICBUcmFuc2xhdGVU
cmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFRyYW5zbGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbio+KG1fa2V5ZnJhbWVzW2ldLnZhbHVlLm9wZXJhdGlvbnMoKVtqXS5nZXQo
KSk7Ci0gICAgICAgICAgICAgICAga2V5ZnJhbWUudmFsdWUub3BlcmF0aW9ucygpLmFwcGVuZChU
cmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0cmFuc2Zvcm0tPngoKSwgdHJhbnNm
b3JtLT55KCksIHRyYW5zZm9ybS0+eigpLCBvcGVyYXRpb25UeXBlKSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJh
dGlvbjo6Uk9UQVRFX1g6Ci0gICAgICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9U
QVRFX1k6Ci0gICAgICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFXzNEOgot
ICAgICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURTogewotICAgICAgICAg
ICAgICAgIFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8
Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKj4obV9rZXlmcmFtZXNbaV0udmFsdWUub3BlcmF0aW9u
cygpW2pdLmdldCgpKTsKLSAgICAgICAgICAgICAgICBrZXlmcmFtZS52YWx1ZS5vcGVyYXRpb25z
KCkuYXBwZW5kKFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHRyYW5zZm9ybS0+eCgp
LCB0cmFuc2Zvcm0tPnkoKSwgdHJhbnNmb3JtLT56KCksIHRyYW5zZm9ybS0+YW5nbGUoKSwgb3Bl
cmF0aW9uVHlwZSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVdfWDoKLSAgICAgICAgICAgIGNh
c2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VXX1k6Ci0gICAgICAgICAgICBjYXNlIFRyYW5zZm9y
bU9wZXJhdGlvbjo6U0tFVzogewotICAgICAgICAgICAgICAgIFNrZXdUcmFuc2Zvcm1PcGVyYXRp
b24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24qPihtX2tl
eWZyYW1lc1tpXS52YWx1ZS5vcGVyYXRpb25zKClbal0uZ2V0KCkpOwotICAgICAgICAgICAgICAg
IGtleWZyYW1lLnZhbHVlLm9wZXJhdGlvbnMoKS5hcHBlbmQoU2tld1RyYW5zZm9ybU9wZXJhdGlv
bjo6Y3JlYXRlKHRyYW5zZm9ybS0+YW5nbGVYKCksIHRyYW5zZm9ybS0+YW5nbGVZKCksIG9wZXJh
dGlvblR5cGUpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpNQVRSSVg6IHsKLSAgICAgICAgICAgICAg
ICBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PE1hdHJp
eFRyYW5zZm9ybU9wZXJhdGlvbio+KG1fa2V5ZnJhbWVzW2ldLnZhbHVlLm9wZXJhdGlvbnMoKVtq
XS5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbSA9IHRyYW5z
Zm9ybS0+bWF0cml4KCk7Ci0gICAgICAgICAgICAgICAga2V5ZnJhbWUudmFsdWUub3BlcmF0aW9u
cygpLmFwcGVuZChNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShtLmEoKSwgbS5iKCks
IG0uYygpLCBtLmQoKSwgbS5lKCksIG0uZigpKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6TUFUUklY
XzNEOiB7Ci0gICAgICAgICAgICAgICAgTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5z
Zm9ybSA9IHN0YXRpY19jYXN0PE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uKj4obV9rZXlmcmFt
ZXNbaV0udmFsdWUub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKLSAgICAgICAgICAgICAgICBrZXlm
cmFtZS52YWx1ZS5vcGVyYXRpb25zKCkuYXBwZW5kKE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9u
OjpjcmVhdGUodHJhbnNmb3JtLT5tYXRyaXgoKSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlBFUlNQ
RUNUSVZFOiB7Ci0gICAgICAgICAgICAgICAgUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24q
IHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uKj4o
bV9rZXlmcmFtZXNbaV0udmFsdWUub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKLSAgICAgICAgICAg
ICAgICBrZXlmcmFtZS52YWx1ZS5vcGVyYXRpb25zKCkuYXBwZW5kKFBlcnNwZWN0aXZlVHJhbnNm
b3JtT3BlcmF0aW9uOjpjcmVhdGUodHJhbnNmb3JtLT5wZXJzcGVjdGl2ZSgpKSk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFRyYW5zZm9y
bU9wZXJhdGlvbjo6SURFTlRJVFk6IHsKLSAgICAgICAgICAgICAgICBrZXlmcmFtZS52YWx1ZS5v
cGVyYXRpb25zKCkuYXBwZW5kKElkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoKSk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNl
IFRyYW5zZm9ybU9wZXJhdGlvbjo6Tk9ORToKLSAgICAgICAgICAgICAgICAvLyBEbyBub3RoaW5n
LgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfSAvLyBzd2l0Y2gKLSAgICAg
ICAgfSAvLyBmb3IgZWFjaCBvcGVyYXRpb24KLSAgICAgICAga2V5ZnJhbWVzLmFwcGVuZChrZXlm
cmFtZSk7Ci0gICAgfQotICAgIHJldHVybiBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1
cnZlOjpjcmVhdGUoa2V5ZnJhbWVzKTsKKyAgICBPd25QdHI8Q0NLZXlmcmFtZWRUcmFuc2Zvcm1B
bmltYXRpb25DdXJ2ZT4gdG9SZXR1cm4oQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2
ZTo6Y3JlYXRlKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9rZXlmcmFtZXMuc2l6
ZSgpOyArK2kpCisgICAgICAgIHRvUmV0dXJuLT5hZGRLZXlmcmFtZShtX2tleWZyYW1lc1tpXS0+
Y2xvbmUoKSk7CisgICAgcmV0dXJuIHRvUmV0dXJuLnJlbGVhc2UoKTsKIH0KIAogVHJhbnNmb3Jt
YXRpb25NYXRyaXggQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Z2V0VmFsdWUo
ZG91YmxlIHQsIGNvbnN0IEludFNpemUmIGxheWVyU2l6ZSkgY29uc3QKIHsKICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm1NYXRyaXg7CiAKLSAgICBpZiAodCA8PSBtX2tleWZyYW1l
cy5maXJzdCgpLnRpbWUpIHsKLSAgICAgICAgbV9rZXlmcmFtZXMuZmlyc3QoKS52YWx1ZS5hcHBs
eShsYXllclNpemUsIHRyYW5zZm9ybU1hdHJpeCk7CisgICAgaWYgKHQgPD0gbV9rZXlmcmFtZXMu
Zmlyc3QoKS0+dGltZSgpKSB7CisgICAgICAgIG1fa2V5ZnJhbWVzLmZpcnN0KCktPnZhbHVlKCku
YXBwbHkobGF5ZXJTaXplLCB0cmFuc2Zvcm1NYXRyaXgpOwogICAgICAgICByZXR1cm4gdHJhbnNm
b3JtTWF0cml4OwogICAgIH0KIAotICAgIGlmICh0ID49IG1fa2V5ZnJhbWVzLmxhc3QoKS50aW1l
KSB7Ci0gICAgICAgIG1fa2V5ZnJhbWVzLmxhc3QoKS52YWx1ZS5hcHBseShsYXllclNpemUsIHRy
YW5zZm9ybU1hdHJpeCk7CisgICAgaWYgKHQgPj0gbV9rZXlmcmFtZXMubGFzdCgpLT50aW1lKCkp
IHsKKyAgICAgICAgbV9rZXlmcmFtZXMubGFzdCgpLT52YWx1ZSgpLmFwcGx5KGxheWVyU2l6ZSwg
dHJhbnNmb3JtTWF0cml4KTsKICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybU1hdHJpeDsKICAgICB9
CiAKICAgICBzaXplX3QgaSA9IDA7CiAgICAgZm9yICg7IGkgPCBtX2tleWZyYW1lcy5zaXplKCkg
LSAxOyArK2kpIHsKLSAgICAgICAgaWYgKHQgPCBtX2tleWZyYW1lc1tpKzFdLnRpbWUpCisgICAg
ICAgIGlmICh0IDwgbV9rZXlmcmFtZXNbaSsxXS0+dGltZSgpKQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgfQogCi0gICAgLy8gRklYTUU6IGFwcGx5IHRpbWluZyBmdW5jdGlvbiBoZXJlLgotICAg
IGRvdWJsZSBwcm9ncmVzcyA9ICh0IC0gbV9rZXlmcmFtZXNbaV0udGltZSkgLyAobV9rZXlmcmFt
ZXNbaSsxXS50aW1lIC0gbV9rZXlmcmFtZXNbaV0udGltZSk7CisgICAgZG91YmxlIHByb2dyZXNz
ID0gKHQgLSBtX2tleWZyYW1lc1tpXS0+dGltZSgpKSAvIChtX2tleWZyYW1lc1tpKzFdLT50aW1l
KCkgLSBtX2tleWZyYW1lc1tpXS0+dGltZSgpKTsKKworICAgIGlmIChtX2tleWZyYW1lc1tpXS0+
dGltaW5nRnVuY3Rpb24oKSkKKyAgICAgICAgcHJvZ3Jlc3MgPSBtX2tleWZyYW1lc1tpXS0+dGlt
aW5nRnVuY3Rpb24oKS0+Z2V0VmFsdWUocHJvZ3Jlc3MpOwogCi0gICAgaWYgKG1fa2V5ZnJhbWVz
W2ldLnZhbHVlLm9wZXJhdGlvbnNNYXRjaChtX2tleWZyYW1lc1tpKzFdLnZhbHVlKSkgewotICAg
ICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IG1fa2V5ZnJhbWVzW2krMV0udmFsdWUuc2l6ZSgp
OyArK2opCi0gICAgICAgICAgICBtX2tleWZyYW1lc1tpKzFdLnZhbHVlLm9wZXJhdGlvbnMoKVtq
XS0+YmxlbmQobV9rZXlmcmFtZXNbaV0udmFsdWUuYXQoaiksIHByb2dyZXNzKS0+YXBwbHkodHJh
bnNmb3JtTWF0cml4LCBsYXllclNpemUpOworICAgIGlmIChtX2tleWZyYW1lc1tpXS0+dmFsdWUo
KS5vcGVyYXRpb25zTWF0Y2gobV9rZXlmcmFtZXNbaSsxXS0+dmFsdWUoKSkpIHsKKyAgICAgICAg
Zm9yIChzaXplX3QgaiA9IDA7IGogPCBtX2tleWZyYW1lc1tpKzFdLT52YWx1ZSgpLnNpemUoKTsg
KytqKQorICAgICAgICAgICAgbV9rZXlmcmFtZXNbaSsxXS0+dmFsdWUoKS5vcGVyYXRpb25zKClb
al0tPmJsZW5kKG1fa2V5ZnJhbWVzW2ldLT52YWx1ZSgpLmF0KGopLCBwcm9ncmVzcyktPmFwcGx5
KHRyYW5zZm9ybU1hdHJpeCwgbGF5ZXJTaXplKTsKICAgICB9IGVsc2UgewogICAgICAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBzb3VyY2U7CiAKLSAgICAgICAgbV9rZXlmcmFtZXNbaV0udmFsdWUu
YXBwbHkobGF5ZXJTaXplLCBzb3VyY2UpOwotICAgICAgICBtX2tleWZyYW1lc1tpKzFdLnZhbHVl
LmFwcGx5KGxheWVyU2l6ZSwgdHJhbnNmb3JtTWF0cml4KTsKKyAgICAgICAgbV9rZXlmcmFtZXNb
aV0tPnZhbHVlKCkuYXBwbHkobGF5ZXJTaXplLCBzb3VyY2UpOworICAgICAgICBtX2tleWZyYW1l
c1tpKzFdLT52YWx1ZSgpLmFwcGx5KGxheWVyU2l6ZSwgdHJhbnNmb3JtTWF0cml4KTsKIAogICAg
ICAgICB0cmFuc2Zvcm1NYXRyaXguYmxlbmQoc291cmNlLCBwcm9ncmVzcyk7CiAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NL
ZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5oCmluZGV4IDFjNGQ2NGFk
YjExOTdhYTY3NWE2MDMwOTI4MmZjYTZhNTZhMzY2NmUuLmMzMDczYmYwODRhY2Y3ODFiZjdjMmIx
NmZlZTNlMWUyZjY2YjZkYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0tleWZyYW1lZEFuaW1h
dGlvbkN1cnZlLmgKQEAgLTI3LDQ2ICsyNyw2NiBAQAogCiAjaW5jbHVkZSAiVHJhbnNmb3JtT3Bl
cmF0aW9ucy5oIgogI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKKyNpbmNsdWRlICJj
Yy9DQ1RpbWluZ0Z1bmN0aW9uLmgiCiAKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdHJ1Y3QgQ0NG
bG9hdEtleWZyYW1lIHsKLSAgICBDQ0Zsb2F0S2V5ZnJhbWUoZG91YmxlIHRpbWUsIGZsb2F0IHZh
bHVlKQotICAgICAgICA6IHRpbWUodGltZSkKLSAgICAgICAgLCB2YWx1ZSh2YWx1ZSkKLSAgICB7
Ci0gICAgfQorY2xhc3MgQ0NLZXlmcmFtZSB7CitwdWJsaWM6CisgICAgZG91YmxlIHRpbWUoKSBj
b25zdDsKKyAgICBjb25zdCBDQ1RpbWluZ0Z1bmN0aW9uKiB0aW1pbmdGdW5jdGlvbigpIGNvbnN0
OworCitwcm90ZWN0ZWQ6CisgICAgQ0NLZXlmcmFtZShkb3VibGUgdGltZSwgUGFzc093blB0cjxD
Q1RpbWluZ0Z1bmN0aW9uPik7CisgICAgdmlydHVhbCB+Q0NLZXlmcmFtZSgpOwogCi0gICAgZG91
YmxlIHRpbWU7Ci0gICAgZmxvYXQgdmFsdWU7Citwcml2YXRlOgorICAgIGRvdWJsZSBtX3RpbWU7
CisgICAgT3duUHRyPENDVGltaW5nRnVuY3Rpb24+IG1fdGltaW5nRnVuY3Rpb247CiB9OwogCi1z
dHJ1Y3QgQ0NUcmFuc2Zvcm1LZXlmcmFtZSB7Ci0gICAgZXhwbGljaXQgQ0NUcmFuc2Zvcm1LZXlm
cmFtZShkb3VibGUgdGltZSkKLSAgICAgICAgOiB0aW1lKHRpbWUpCi0gICAgewotICAgIH0KK2Ns
YXNzIENDRmxvYXRLZXlmcmFtZSA6IHB1YmxpYyBDQ0tleWZyYW1lIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc093blB0cjxDQ0Zsb2F0S2V5ZnJhbWU+IGNyZWF0ZShkb3VibGUgdGltZSwgZmxv
YXQgdmFsdWUsIFBhc3NPd25QdHI8Q0NUaW1pbmdGdW5jdGlvbj4pOworICAgIHZpcnR1YWwgfkND
RmxvYXRLZXlmcmFtZSgpOworCisgICAgZmxvYXQgdmFsdWUoKSBjb25zdDsKIAotICAgIENDVHJh
bnNmb3JtS2V5ZnJhbWUoZG91YmxlIHRpbWUsIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHZh
bHVlKQotICAgICAgICA6IHRpbWUodGltZSkKLSAgICAgICAgLCB2YWx1ZSh2YWx1ZSkKLSAgICB7
Ci0gICAgfQorICAgIFBhc3NPd25QdHI8Q0NGbG9hdEtleWZyYW1lPiBjbG9uZSgpIGNvbnN0Owog
Ci0gICAgZG91YmxlIHRpbWU7Ci0gICAgVHJhbnNmb3JtT3BlcmF0aW9ucyB2YWx1ZTsKK3ByaXZh
dGU6CisgICAgQ0NGbG9hdEtleWZyYW1lKGRvdWJsZSB0aW1lLCBmbG9hdCB2YWx1ZSwgUGFzc093
blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPik7CisKKyAgICBmbG9hdCBtX3ZhbHVlOworfTsKKworY2xh
c3MgQ0NUcmFuc2Zvcm1LZXlmcmFtZSA6IHB1YmxpYyBDQ0tleWZyYW1lIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc093blB0cjxDQ1RyYW5zZm9ybUtleWZyYW1lPiBjcmVhdGUoZG91YmxlIHRp
bWUsIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHZhbHVlLCBQYXNzT3duUHRyPENDVGltaW5n
RnVuY3Rpb24+KTsKKyAgICB2aXJ0dWFsIH5DQ1RyYW5zZm9ybUtleWZyYW1lKCk7CisKKyAgICBj
b25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB2YWx1ZSgpIGNvbnN0OworCisgICAgUGFzc093blB0
cjxDQ1RyYW5zZm9ybUtleWZyYW1lPiBjbG9uZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIEND
VHJhbnNmb3JtS2V5ZnJhbWUoZG91YmxlIHRpbWUsIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMm
IHZhbHVlLCBQYXNzT3duUHRyPENDVGltaW5nRnVuY3Rpb24+KTsKKworICAgIFRyYW5zZm9ybU9w
ZXJhdGlvbnMgbV92YWx1ZTsKIH07CiAKIGNsYXNzIENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25D
dXJ2ZSA6IHB1YmxpYyBDQ0Zsb2F0QW5pbWF0aW9uQ3VydmUgewogcHVibGljOgogICAgIC8vIEl0
IGlzIHJlcXVpcmVkIHRoYXQgdGhlIGtleWZyYW1lcyBiZSBzb3J0ZWQgYnkgdGltZS4KLSAgICBz
dGF0aWMgUGFzc093blB0cjxDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU+IGNyZWF0ZShj
b25zdCBWZWN0b3I8Q0NGbG9hdEtleWZyYW1lPiYga2V5ZnJhbWVzKTsKKyAgICBzdGF0aWMgUGFz
c093blB0cjxDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU+IGNyZWF0ZSgpOwogCiAgICAg
dmlydHVhbCB+Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlKCk7CiAKKyAgICB2b2lkIGFk
ZEtleWZyYW1lKFBhc3NPd25QdHI8Q0NGbG9hdEtleWZyYW1lPik7CisKICAgICAvLyBDQ0FuaW1h
dGlvbkN1cnZlIGltcGxlbWVudGF0aW9uCiAgICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBj
b25zdDsKICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4gY2xvbmUoKSBj
b25zdDsKQEAgLTc1LDIwICs5NSwyMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBmbG9hdCBnZXRW
YWx1ZShkb3VibGUgdCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgQ0NLZXlmcmFt
ZWRGbG9hdEFuaW1hdGlvbkN1cnZlKGNvbnN0IFZlY3RvcjxDQ0Zsb2F0S2V5ZnJhbWU+Jik7Cisg
ICAgQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlKCk7CiAKICAgICAvLyBBbHdheXMgc29y
dGVkIGluIG9yZGVyIG9mIGluY3JlYXNpbmcgdGltZS4gTm8gdHdvIGtleWZyYW1lcyBoYXZlIHRo
ZQogICAgIC8vIHNhbWUgdGltZS4KLSAgICBWZWN0b3I8Q0NGbG9hdEtleWZyYW1lPiBtX2tleWZy
YW1lczsKKyAgICBWZWN0b3I8T3duUHRyPENDRmxvYXRLZXlmcmFtZT4gPiBtX2tleWZyYW1lczsK
IH07CiAKIGNsYXNzIENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgOiBwdWJsaWMg
Q0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSB7CiBwdWJsaWM6CiAgICAgLy8gSXQgaXMgcmVxdWly
ZWQgdGhhdCB0aGUga2V5ZnJhbWVzIGJlIHNvcnRlZCBieSB0aW1lLgotICAgIHN0YXRpYyBQYXNz
T3duUHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IGNyZWF0ZShjb25zdCBW
ZWN0b3I8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4mIGtleWZyYW1lcyk7CisgICAgc3RhdGljIFBhc3NP
d25QdHI8Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4gY3JlYXRlKCk7CiAKICAg
ICB2aXJ0dWFsIH5DQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCk7CiAKKyAgICB2
b2lkIGFkZEtleWZyYW1lKFBhc3NPd25QdHI8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4pOworCiAgICAg
Ly8gQ0NBbmltYXRpb25DdXJ2ZSBpbXBsZW1lbnRhdGlvbgogICAgIHZpcnR1YWwgZG91YmxlIGR1
cmF0aW9uKCkgY29uc3Q7CiAgICAgdmlydHVhbCBQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+
IGNsb25lKCkgY29uc3Q7CkBAIC05NywxMSArMTE5LDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IFRyYW5zZm9ybWF0aW9uTWF0cml4IGdldFZhbHVlKGRvdWJsZSB0LCBjb25zdCBJbnRTaXplJikg
Y29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgQ0NLZXlmcmFtZWRUcmFuc2Zvcm1Bbmlt
YXRpb25DdXJ2ZShjb25zdCBWZWN0b3I8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4mKTsKKyAgICBDQ0tl
eWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCk7CiAKICAgICAvLyBBbHdheXMgc29ydGVk
IGluIG9yZGVyIG9mIGluY3JlYXNpbmcgdGltZS4gTm8gdHdvIGtleWZyYW1lcyBoYXZlIHRoZQog
ICAgIC8vIHNhbWUgdGltZS4KLSAgICBWZWN0b3I8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4gbV9rZXlm
cmFtZXM7CisgICAgVmVjdG9yPE93blB0cjxDQ1RyYW5zZm9ybUtleWZyYW1lPiA+IG1fa2V5ZnJh
bWVzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IGQ5ZTcyZWZjNDg2YmMyNDRkZTQ0
YzFiODQ3NGFjNmQ2N2Y2OTA1NjIuLjMzNWQzYTU4ZTk4YWVkMjk3ZWU1NDA1NGI1NGQwNDg1MDg1
MTcxYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ci5jcHAKQEAgLTM3LDE2ICszNywxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFj
ZSB7CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBLZXlmcmFtZSwgdHlwZW5hbWUgVmFsdWU+Ci12b2lk
IGFwcGVuZEtleWZyYW1lKFZlY3RvcjxLZXlmcmFtZT4mIGtleWZyYW1lcywgZG91YmxlIGtleVRp
bWUsIGNvbnN0IFZhbHVlKiB2YWx1ZSkKK3RlbXBsYXRlIDxjbGFzcyBWYWx1ZSwgY2xhc3MgS2V5
ZnJhbWUsIGNsYXNzIEN1cnZlPgordm9pZCBhcHBlbmRLZXlmcmFtZShDdXJ2ZSYgY3VydmUsIGRv
dWJsZSBrZXlUaW1lLCBjb25zdCBWYWx1ZSogdmFsdWUsIFBhc3NPd25QdHI8Q0NUaW1pbmdGdW5j
dGlvbj4gdGltaW5nRnVuY3Rpb24pCiB7Ci0gICAga2V5ZnJhbWVzLmFwcGVuZChLZXlmcmFtZShr
ZXlUaW1lLCB2YWx1ZS0+dmFsdWUoKSkpOworICAgIGN1cnZlLmFkZEtleWZyYW1lKEtleWZyYW1l
OjpjcmVhdGUoa2V5VGltZSwgdmFsdWUtPnZhbHVlKCksIHRpbWluZ0Z1bmN0aW9uKSk7CiB9CiAK
IHRlbXBsYXRlIDw+Ci12b2lkIGFwcGVuZEtleWZyYW1lPENDVHJhbnNmb3JtS2V5ZnJhbWUsIFRy
YW5zZm9ybUFuaW1hdGlvblZhbHVlPihWZWN0b3I8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4mIGtleWZy
YW1lcywgZG91YmxlIGtleVRpbWUsIGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKiB2YWx1
ZSkKK3ZvaWQgYXBwZW5kS2V5ZnJhbWU8VHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUsIENDVHJhbnNm
b3JtS2V5ZnJhbWUsIENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+KENDS2V5ZnJh
bWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUmIGN1cnZlLCBkb3VibGUga2V5VGltZSwgY29uc3Qg
VHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUqIHZhbHVlLCBQYXNzT3duUHRyPENDVGltaW5nRnVuY3Rp
b24+IHRpbWluZ0Z1bmN0aW9uKQogewotICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NUcmFuc2Zvcm1L
ZXlmcmFtZShrZXlUaW1lLCAqdmFsdWUtPnZhbHVlKCkpKTsKKyAgICBjdXJ2ZS5hZGRLZXlmcmFt
ZShDQ1RyYW5zZm9ybUtleWZyYW1lOjpjcmVhdGUoa2V5VGltZSwgKnZhbHVlLT52YWx1ZSgpLCB0
aW1pbmdGdW5jdGlvbikpOwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgVmFsdWUsIGNsYXNzIEtleWZy
YW1lLCBjbGFzcyBDdXJ2ZT4KQEAgLTY0LDIxICs2NCwzMyBAQCBQYXNzT3duUHRyPENDQWN0aXZl
QW5pbWF0aW9uPiBjcmVhdGVBY3RpdmVBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3Qm
IHZhbAogICAgIGlmIChhbmltYXRpb24gJiYgYW5pbWF0aW9uLT5pc0ZpbGxNb2RlU2V0KCkgJiYg
KGFuaW1hdGlvbi0+ZmlsbHNGb3J3YXJkcygpIHx8IGFuaW1hdGlvbi0+ZmlsbHNCYWNrd2FyZHMo
KSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCisgICAgT3duUHRyPEN1cnZlPiBjdXJ2ZSA9
IEN1cnZlOjpjcmVhdGUoKTsKICAgICBWZWN0b3I8S2V5ZnJhbWU+IGtleWZyYW1lczsKIAogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVMaXN0LnNpemUoKTsgaSsrKSB7CiAgICAgICAg
IGNvbnN0IFZhbHVlKiBvcmlnaW5hbFZhbHVlID0gc3RhdGljX2Nhc3Q8Y29uc3QgVmFsdWUqPih2
YWx1ZUxpc3QuYXQoaSkpOwogCi0gICAgICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9ydCBmb3IgdGlt
aW5nIGZ1bmN0aW9ucy4KLSAgICAgICAgaWYgKG9yaWdpbmFsVmFsdWUtPnRpbWluZ0Z1bmN0aW9u
KCkgJiYgb3JpZ2luYWxWYWx1ZS0+dGltaW5nRnVuY3Rpb24oKS0+dHlwZSgpICE9IFRpbWluZ0Z1
bmN0aW9uOjpMaW5lYXJGdW5jdGlvbikKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICBPd25QdHI8Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb247CisgICAgICAgIGlm
IChvcmlnaW5hbFZhbHVlLT50aW1pbmdGdW5jdGlvbigpKSB7CisgICAgICAgICAgICBzd2l0Y2gg
KG9yaWdpbmFsVmFsdWUtPnRpbWluZ0Z1bmN0aW9uKCktPnR5cGUoKSkgeworICAgICAgICAgICAg
Y2FzZSBUaW1pbmdGdW5jdGlvbjo6U3RlcHNGdW5jdGlvbjoKKyAgICAgICAgICAgICAgICAvLyBG
SVhNRTogYWRkIHN1cHBvcnQgZm9yIHN0ZXBzIHRpbWluZyBmdW5jdGlvbi4KKyAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIGNhc2UgVGltaW5nRnVuY3Rpb246Okxp
bmVhckZ1bmN0aW9uOgorICAgICAgICAgICAgICAgIC8vIERvbid0IHNldCB0aGUgdGltaW5nIGZ1
bmN0aW9uLiBLZXlmcmFtZXMgYXJlIGludGVycG9sYXRlZCBsaW5lYXJseSBpZiB0aGVyZSBpcyBu
byB0aW1pbmcgZnVuY3Rpb24uCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIFRpbWluZ0Z1bmN0aW9uOjpDdWJpY0JlemllckZ1bmN0aW9uOgorICAgICAgICAgICAgICAg
IGNvbnN0IEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24qIG9yaWdpbmFsVGltaW5nRnVuY3Rpb24g
PSBzdGF0aWNfY2FzdDxjb25zdCBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKj4ob3JpZ2luYWxW
YWx1ZS0+dGltaW5nRnVuY3Rpb24oKSk7CisgICAgICAgICAgICAgICAgdGltaW5nRnVuY3Rpb24g
PSBDQ0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmNyZWF0ZShvcmlnaW5hbFRpbWluZ0Z1bmN0
aW9uLT54MSgpLCBvcmlnaW5hbFRpbWluZ0Z1bmN0aW9uLT55MSgpLCBvcmlnaW5hbFRpbWluZ0Z1
bmN0aW9uLT54MigpLCBvcmlnaW5hbFRpbWluZ0Z1bmN0aW9uLT55MigpKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0gLy8gc3dpdGNoCisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgdGltaW5nRnVuY3Rpb24gPSBDQ0Vhc2VUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCk7
CiAKICAgICAgICAgZG91YmxlIGR1cmF0aW9uID0gKGFuaW1hdGlvbiAmJiBhbmltYXRpb24tPmlz
RHVyYXRpb25TZXQoKSkgPyBhbmltYXRpb24tPmR1cmF0aW9uKCkgOiAxOwotICAgICAgICBhcHBl
bmRLZXlmcmFtZShrZXlmcmFtZXMsIG9yaWdpbmFsVmFsdWUtPmtleVRpbWUoKSAqIGR1cmF0aW9u
LCBvcmlnaW5hbFZhbHVlKTsKKyAgICAgICAgYXBwZW5kS2V5ZnJhbWU8VmFsdWUsIEtleWZyYW1l
LCBDdXJ2ZT4oKmN1cnZlLCBvcmlnaW5hbFZhbHVlLT5rZXlUaW1lKCkgKiBkdXJhdGlvbiwgb3Jp
Z2luYWxWYWx1ZSwgdGltaW5nRnVuY3Rpb24ucmVsZWFzZSgpKTsKICAgICB9CiAKLSAgICBPd25Q
dHI8Q3VydmU+IGN1cnZlID0gQ3VydmU6OmNyZWF0ZShrZXlmcmFtZXMpOwotCiAgICAgT3duUHRy
PENDQWN0aXZlQW5pbWF0aW9uPiBhbmltID0gQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShjdXJ2
ZS5yZWxlYXNlKCksIGFuaW1hdGlvbklkLCBncm91cElkLCB0YXJnZXRQcm9wZXJ0eSk7CiAKICAg
ICBBU1NFUlQoYW5pbS5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbWluZ0Z1bmN0aW9uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGltaW5nRnVuY3Rpb24uY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmRlY2MwMGM4Zjk3NmI1MTNmNDA1OWRhZmI0MWNiNTBhZTA4MTE0ZWYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RpbWluZ0Z1bmN0aW9uLmNwcApAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICog
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ1RpbWluZ0Z1bmN0aW9uLmgiCisK
KyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSB7Citjb25zdCBkb3VibGUgZXBz
aWxvbiA9IDFlLTY7Cit9IC8vIG5hbWVzcGFjZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ND
VGltaW5nRnVuY3Rpb246OkNDVGltaW5nRnVuY3Rpb24oKQoreworfQorCitDQ1RpbWluZ0Z1bmN0
aW9uOjp+Q0NUaW1pbmdGdW5jdGlvbigpCit7Cit9CisKK2RvdWJsZSBDQ1RpbWluZ0Z1bmN0aW9u
OjpkdXJhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIDEuMDsKK30KKworUGFzc093blB0cjxD
Q0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24+IENDQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6
Y3JlYXRlKGRvdWJsZSB4MSwgZG91YmxlIHkxLCBkb3VibGUgeDIsIGRvdWJsZSB5MikKK3sKKyAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IENDQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbih4MSwgeTEs
IHgyLCB5MikpOworfQorCitDQ0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OkNDQ3ViaWNCZXpp
ZXJUaW1pbmdGdW5jdGlvbihkb3VibGUgeDEsIGRvdWJsZSB5MSwgZG91YmxlIHgyLCBkb3VibGUg
eTIpCisgICAgOiBtX2N1cnZlKHgxLCB5MSwgeDIsIHkyKQoreworfQorCitDQ0N1YmljQmV6aWVy
VGltaW5nRnVuY3Rpb246On5DQ0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24oKQoreworfQorCitm
bG9hdCBDQ0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmdldFZhbHVlKGRvdWJsZSB4KSBjb25z
dAoreworICAgIFVuaXRCZXppZXIgdGVtcChtX2N1cnZlKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHRlbXAuc29sdmUoeCwgZXBzaWxvbikpOworfQorCitQYXNzT3duUHRyPENDQW5p
bWF0aW9uQ3VydmU+IENDQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y2xvbmUoKSBjb25zdAor
eworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKCp0
aGlzKSk7Cit9CisKKy8vIFRoZXNlIG51bWJlcnMgY29tZSBmcm9tIGh0dHA6Ly93d3cudzMub3Jn
L1RSL2NzczMtdHJhbnNpdGlvbnMvI3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uX3RhZy4KK1Bh
c3NPd25QdHI8Q0NUaW1pbmdGdW5jdGlvbj4gQ0NFYXNlVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgp
Cit7CisgICAgcmV0dXJuIENDQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKDAuMjUs
IDAuMSwgMC4yNSwgMSk7Cit9CisKK1Bhc3NPd25QdHI8Q0NUaW1pbmdGdW5jdGlvbj4gQ0NFYXNl
SW5UaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gQ0NDdWJpY0JlemllclRp
bWluZ0Z1bmN0aW9uOjpjcmVhdGUoMC40MiwgMCwgMS4wLCAxKTsKK30KKworUGFzc093blB0cjxD
Q1RpbWluZ0Z1bmN0aW9uPiBDQ0Vhc2VPdXRUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkKK3sKKyAg
ICByZXR1cm4gQ0NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoMCwgMCwgMC41OCwg
MSk7Cit9CisKK1Bhc3NPd25QdHI8Q0NUaW1pbmdGdW5jdGlvbj4gQ0NFYXNlSW5PdXRUaW1pbmdG
dW5jdGlvbjo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gQ0NDdWJpY0JlemllclRpbWluZ0Z1bmN0
aW9uOjpjcmVhdGUoMC40MiwgMCwgMC41OCwgMSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGltaW5nRnVuY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGltaW5nRnVuY3Rpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43N2U1YzQzYzU3M2Uz
MDBhZjEyZTAzYzQyZWE5MjllZGIxZWQyYmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaW1pbmdGdW5jdGlvbi5oCkBA
IC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NUaW1pbmdGdW5jdGlvbl9o
CisjZGVmaW5lIENDVGltaW5nRnVuY3Rpb25faAorCisjaW5jbHVkZSAiVW5pdEJlemllci5oIgor
I2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKKworI2luY2x1ZGUgPHd0Zi9QYXNzT3du
UHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gU2VlIGh0dHA6Ly93d3cudzMub3Jn
L1RSL2NzczMtdHJhbnNpdGlvbnMvLgorY2xhc3MgQ0NUaW1pbmdGdW5jdGlvbiA6IHB1YmxpYyBD
Q0Zsb2F0QW5pbWF0aW9uQ3VydmUgeworcHVibGljOgorICAgIHZpcnR1YWwgfkNDVGltaW5nRnVu
Y3Rpb24oKTsKKworICAgIC8vIFBhcnRpYWwgaW1wbGVtZW50YXRpb24gb2YgQ0NGbG9hdEFuaW1h
dGlvbkN1cnZlLgorICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uKCkgY29uc3Q7CisKK3Byb3Rl
Y3RlZDoKKyAgICBDQ1RpbWluZ0Z1bmN0aW9uKCk7Cit9OworCitjbGFzcyBDQ0N1YmljQmV6aWVy
VGltaW5nRnVuY3Rpb24gOiBwdWJsaWMgQ0NUaW1pbmdGdW5jdGlvbiB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NPd25QdHI8Q0NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uPiBjcmVhdGUoZG91
YmxlIHgxLCBkb3VibGUgeTEsIGRvdWJsZSB4MiwgZG91YmxlIHkyKTsKKyAgICB2aXJ0dWFsIH5D
Q0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24oKTsKKworICAgIC8vIFBhcnRpYWwgaW1wbGVtZW50
YXRpb24gb2YgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlLgorICAgIHZpcnR1YWwgZmxvYXQgZ2V0VmFs
dWUoZG91YmxlIHRpbWUpIGNvbnN0OworICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0FuaW1hdGlv
bkN1cnZlPiBjbG9uZSgpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgQ0NDdWJpY0JlemllclRp
bWluZ0Z1bmN0aW9uKGRvdWJsZSB4MSwgZG91YmxlIHkxLCBkb3VibGUgeDIsIGRvdWJsZSB5Mik7
CisKKyAgICBVbml0QmV6aWVyIG1fY3VydmU7Cit9OworCitjbGFzcyBDQ0Vhc2VUaW1pbmdGdW5j
dGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NUaW1pbmdGdW5jdGlvbj4g
Y3JlYXRlKCk7Cit9OworCitjbGFzcyBDQ0Vhc2VJblRpbWluZ0Z1bmN0aW9uIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPiBjcmVhdGUoKTsKK307CisK
K2NsYXNzIENDRWFzZU91dFRpbWluZ0Z1bmN0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c093blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPiBjcmVhdGUoKTsKK307CisKK2NsYXNzIENDRWFzZUlu
T3V0VGltaW5nRnVuY3Rpb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDVGlt
aW5nRnVuY3Rpb24+IGNyZWF0ZSgpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gQ0NUaW1pbmdGdW5jdGlvbl9oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdC5jcHAK
aW5kZXggYjc3MzJhZWFiNzQyN2RlMzhjN2Q3NDdkOTU3MDE2Njk5ODFlNmZiNS4uMTViNTU0YTA2
OTA1NzUyZjFiZGVmY2I4YWViYjg3MjhmZWVmYTU1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVz
dC5jcHAKQEAgLTQ4LDkgKzQ4LDggQEAgdm9pZCBleHBlY3RUcmFuc2xhdGVYKGRvdWJsZSB0cmFu
c2xhdGVYLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KQogLy8gVGVzdHMgdGhh
dCBhIGZsb2F0IGFuaW1hdGlvbiB3aXRoIG9uZSBrZXlmcmFtZSB3b3JrcyBhcyBleHBlY3RlZC4K
IFRFU1QoQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QsIE9uZUZsb2F0S2V5ZnJhbWUpCiB7
Ci0gICAgVmVjdG9yPENDRmxvYXRLZXlmcmFtZT4ga2V5ZnJhbWVzOwotICAgIGtleWZyYW1lcy5h
cHBlbmQoQ0NGbG9hdEtleWZyYW1lKDAsIDIpKTsKLSAgICBPd25QdHI8Q0NLZXlmcmFtZWRGbG9h
dEFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmNy
ZWF0ZShrZXlmcmFtZXMpKTsKKyAgICBPd25QdHI8Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1
cnZlPiBjdXJ2ZShDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgpKTsKKyAg
ICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NGbG9hdEtleWZyYW1lOjpjcmVhdGUoMCwgMiwgbnVsbHB0
cikpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoLTEpKTsKICAgICBF
WFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdldFZhbHVlKDApKTsKICAgICBFWFBFQ1RfRkxPQVRf
RVEoMiwgY3VydmUtPmdldFZhbHVlKDAuNSkpOwpAQCAtNjEsMTAgKzYwLDkgQEAgVEVTVChDQ0tl
eWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdCwgT25lRmxvYXRLZXlmcmFtZSkKIC8vIFRlc3RzIHRo
YXQgYSBmbG9hdCBhbmltYXRpb24gd2l0aCB0d28ga2V5ZnJhbWVzIHdvcmtzIGFzIGV4cGVjdGVk
LgogVEVTVChDQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdCwgVHdvRmxvYXRLZXlmcmFtZSkK
IHsKLSAgICBWZWN0b3I8Q0NGbG9hdEtleWZyYW1lPiBrZXlmcmFtZXM7Ci0gICAga2V5ZnJhbWVz
LmFwcGVuZChDQ0Zsb2F0S2V5ZnJhbWUoMCwgMikpOwotICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NG
bG9hdEtleWZyYW1lKDEsIDQpKTsKLSAgICBPd25QdHI8Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlv
bkN1cnZlPiBjdXJ2ZShDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZShrZXlm
cmFtZXMpKTsKKyAgICBPd25QdHI8Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlPiBjdXJ2
ZShDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgpKTsKKyAgICBjdXJ2ZS0+
YWRkS2V5ZnJhbWUoQ0NGbG9hdEtleWZyYW1lOjpjcmVhdGUoMCwgMiwgbnVsbHB0cikpOworICAg
IGN1cnZlLT5hZGRLZXlmcmFtZShDQ0Zsb2F0S2V5ZnJhbWU6OmNyZWF0ZSgxLCA0LCBudWxscHRy
KSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLT5nZXRWYWx1ZSgtMSkpOwogICAgIEVY
UEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMCkpOwogICAgIEVYUEVDVF9GTE9BVF9F
USgzLCBjdXJ2ZS0+Z2V0VmFsdWUoMC41KSk7CkBAIC03NSwxMSArNzMsMTAgQEAgVEVTVChDQ0tl
eWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdCwgVHdvRmxvYXRLZXlmcmFtZSkKIC8vIFRlc3RzIHRo
YXQgYSBmbG9hdCBhbmltYXRpb24gd2l0aCB0aHJlZSBrZXlmcmFtZXMgd29ya3MgYXMgZXhwZWN0
ZWQuCiBURVNUKENDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVUZXN0LCBUaHJlZUZsb2F0S2V5ZnJh
bWUpCiB7Ci0gICAgVmVjdG9yPENDRmxvYXRLZXlmcmFtZT4ga2V5ZnJhbWVzOwotICAgIGtleWZy
YW1lcy5hcHBlbmQoQ0NGbG9hdEtleWZyYW1lKDAsIDIpKTsKLSAgICBrZXlmcmFtZXMuYXBwZW5k
KENDRmxvYXRLZXlmcmFtZSgxLCA0KSk7Ci0gICAga2V5ZnJhbWVzLmFwcGVuZChDQ0Zsb2F0S2V5
ZnJhbWUoMiwgOCkpOwotICAgIE93blB0cjxDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU+
IGN1cnZlKENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKGtleWZyYW1lcykp
OworICAgIE93blB0cjxDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU+IGN1cnZlKENDS2V5
ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkpOworICAgIGN1cnZlLT5hZGRLZXlm
cmFtZShDQ0Zsb2F0S2V5ZnJhbWU6OmNyZWF0ZSgwLCAyLCBudWxscHRyKSk7CisgICAgY3VydmUt
PmFkZEtleWZyYW1lKENDRmxvYXRLZXlmcmFtZTo6Y3JlYXRlKDEsIDQsIG51bGxwdHIpKTsKKyAg
ICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NGbG9hdEtleWZyYW1lOjpjcmVhdGUoMiwgOCwgbnVsbHB0
cikpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoLTEpKTsKICAgICBF
WFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdldFZhbHVlKDApKTsKICAgICBFWFBFQ1RfRkxPQVRf
RVEoMywgY3VydmUtPmdldFZhbHVlKDAuNSkpOwpAQCAtOTIsMTMgKzg5LDExIEBAIFRFU1QoQ0NL
ZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QsIFRocmVlRmxvYXRLZXlmcmFtZSkKIC8vIFRlc3Rz
IHRoYXQgYSBmbG9hdCBhbmltYXRpb24gd2l0aCBtdWx0aXBsZSBrZXlzIGF0IGEgZ2l2ZW4gdGlt
ZSB3b3JrcyBzYW5lbHkuCiBURVNUKENDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVUZXN0LCBSZXBl
YXRlZEZsb2F0S2V5VGltZXMpCiB7Ci0gICAgVmVjdG9yPENDRmxvYXRLZXlmcmFtZT4ga2V5ZnJh
bWVzOwotICAgIC8vIEEgc3RlcCBmdW5jdGlvbi4KLSAgICBrZXlmcmFtZXMuYXBwZW5kKENDRmxv
YXRLZXlmcmFtZSgwLCA0KSk7Ci0gICAga2V5ZnJhbWVzLmFwcGVuZChDQ0Zsb2F0S2V5ZnJhbWUo
MSwgNCkpOwotICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NGbG9hdEtleWZyYW1lKDEsIDYpKTsKLSAg
ICBrZXlmcmFtZXMuYXBwZW5kKENDRmxvYXRLZXlmcmFtZSgyLCA2KSk7Ci0gICAgT3duUHRyPEND
S2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZT4gY3VydmUoQ0NLZXlmcmFtZWRGbG9hdEFuaW1h
dGlvbkN1cnZlOjpjcmVhdGUoa2V5ZnJhbWVzKSk7CisgICAgT3duUHRyPENDS2V5ZnJhbWVkRmxv
YXRBbmltYXRpb25DdXJ2ZT4gY3VydmUoQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjpj
cmVhdGUoKSk7CisgICAgY3VydmUtPmFkZEtleWZyYW1lKENDRmxvYXRLZXlmcmFtZTo6Y3JlYXRl
KDAsIDQsIG51bGxwdHIpKTsKKyAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NGbG9hdEtleWZyYW1l
OjpjcmVhdGUoMSwgNCwgbnVsbHB0cikpOworICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ0Zsb2F0
S2V5ZnJhbWU6OmNyZWF0ZSgxLCA2LCBudWxscHRyKSk7CisgICAgY3VydmUtPmFkZEtleWZyYW1l
KENDRmxvYXRLZXlmcmFtZTo6Y3JlYXRlKDIsIDYsIG51bGxwdHIpKTsKIAogICAgIEVYUEVDVF9G
TE9BVF9FUSg0LCBjdXJ2ZS0+Z2V0VmFsdWUoLTEpKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoNCwg
Y3VydmUtPmdldFZhbHVlKDApKTsKQEAgLTExNywxMSArMTEyLDExIEBAIFRFU1QoQ0NLZXlmcmFt
ZWRBbmltYXRpb25DdXJ2ZVRlc3QsIFJlcGVhdGVkRmxvYXRLZXlUaW1lcykKIC8vIFRlc3RzIHRo
YXQgYSB0cmFuc2Zvcm0gYW5pbWF0aW9uIHdpdGggb25lIGtleWZyYW1lIHdvcmtzIGFzIGV4cGVj
dGVkLgogVEVTVChDQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdCwgT25lVHJhbnNmb3JtS2V5
ZnJhbWUpCiB7Ci0gICAgVmVjdG9yPENDVHJhbnNmb3JtS2V5ZnJhbWU+IGtleWZyYW1lczsKKyAg
ICBPd25QdHI8Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4gY3VydmUoQ0NLZXlm
cmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkpOwogICAgIFRyYW5zZm9ybU9w
ZXJhdGlvbnMgb3BlcmF0aW9uczsKICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQo
VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDIsIEZpeGVkKSwgTGVu
Z3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOwotICAgIGtl
eWZyYW1lcy5hcHBlbmQoQ0NUcmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRpb25zKSk7Ci0gICAg
T3duUHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IGN1cnZlKENDS2V5ZnJh
bWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNyZWF0ZShrZXlmcmFtZXMpKTsKKyAgICBjdXJ2
ZS0+YWRkS2V5ZnJhbWUoQ0NUcmFuc2Zvcm1LZXlmcmFtZTo6Y3JlYXRlKDAsIG9wZXJhdGlvbnMs
IG51bGxwdHIpKTsKKwogICAgIEludFNpemUgbGF5ZXJTaXplOyAvLyBpZ25vcmVkCiAgICAgZXhw
ZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoLTEsIGxheWVyU2l6ZSkpOwogICAgIGV4
cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKDAsIGxheWVyU2l6ZSkpOwpAQCAtMTMz
LDE0ICsxMjgsMTMgQEAgVEVTVChDQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdCwgT25lVHJh
bnNmb3JtS2V5ZnJhbWUpCiAvLyBUZXN0cyB0aGF0IGEgdHJhbnNmb3JtIGFuaW1hdGlvbiB3aXRo
IHR3byBrZXlmcmFtZXMgd29ya3MgYXMgZXhwZWN0ZWQuCiBURVNUKENDS2V5ZnJhbWVkQW5pbWF0
aW9uQ3VydmVUZXN0LCBUd29UcmFuc2Zvcm1LZXlmcmFtZSkKIHsKLSAgICBWZWN0b3I8Q0NUcmFu
c2Zvcm1LZXlmcmFtZT4ga2V5ZnJhbWVzOworICAgIE93blB0cjxDQ0tleWZyYW1lZFRyYW5zZm9y
bUFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZl
OjpjcmVhdGUoKSk7CiAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKICAgICBv
cGVyYXRpb25zMS5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bjo6Y3JlYXRlKExlbmd0aCgyLCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlv
bnMyOwogICAgIG9wZXJhdGlvbnMyLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNm
b3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDQsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwg
VHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOwotICAgIGtleWZyYW1lcy5hcHBlbmQo
Q0NUcmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRpb25zMSkpOwotICAgIGtleWZyYW1lcy5hcHBl
bmQoQ0NUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMikpOwotICAgIE93blB0cjxDQ0tl
eWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShDQ0tleWZyYW1lZFRyYW5zZm9y
bUFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoa2V5ZnJhbWVzKSk7CisgICAgY3VydmUtPmFkZEtleWZy
YW1lKENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZSgwLCBvcGVyYXRpb25zMSwgbnVsbHB0cikp
OworICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ1RyYW5zZm9ybUtleWZyYW1lOjpjcmVhdGUoMSwg
b3BlcmF0aW9uczIsIG51bGxwdHIpKTsKICAgICBJbnRTaXplIGxheWVyU2l6ZTsgLy8gaWdub3Jl
ZAogICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKC0xLCBsYXllclNpemUp
KTsKICAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgwLCBsYXllclNpemUp
KTsKQEAgLTE1MiwxNyArMTQ2LDE2IEBAIFRFU1QoQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRl
c3QsIFR3b1RyYW5zZm9ybUtleWZyYW1lKQogLy8gVGVzdHMgdGhhdCBhIHRyYW5zZm9ybSBhbmlt
YXRpb24gd2l0aCB0aHJlZSBrZXlmcmFtZXMgd29ya3MgYXMgZXhwZWN0ZWQuCiBURVNUKENDS2V5
ZnJhbWVkQW5pbWF0aW9uQ3VydmVUZXN0LCBUaHJlZVRyYW5zZm9ybUtleWZyYW1lKQogewotICAg
IFZlY3RvcjxDQ1RyYW5zZm9ybUtleWZyYW1lPiBrZXlmcmFtZXM7CisgICAgT3duUHRyPENDS2V5
ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IGN1cnZlKENDS2V5ZnJhbWVkVHJhbnNmb3Jt
QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgpKTsKICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJh
dGlvbnMxOwogICAgIG9wZXJhdGlvbnMxLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJh
bnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDIsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVk
KSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOwogICAgIFRyYW5zZm9ybU9wZXJh
dGlvbnMgb3BlcmF0aW9uczI7CiAgICAgb3BlcmF0aW9uczIub3BlcmF0aW9ucygpLmFwcGVuZChU
cmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoNCwgRml4ZWQpLCBMZW5n
dGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7CiAgICAgVHJh
bnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMzsKICAgICBvcGVyYXRpb25zMy5vcGVyYXRpb25z
KCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCg4LCBG
aXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gp
KTsKLSAgICBrZXlmcmFtZXMuYXBwZW5kKENDVHJhbnNmb3JtS2V5ZnJhbWUoMCwgb3BlcmF0aW9u
czEpKTsKLSAgICBrZXlmcmFtZXMuYXBwZW5kKENDVHJhbnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0
aW9uczIpKTsKLSAgICBrZXlmcmFtZXMuYXBwZW5kKENDVHJhbnNmb3JtS2V5ZnJhbWUoMiwgb3Bl
cmF0aW9uczMpKTsKLSAgICBPd25QdHI8Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2
ZT4gY3VydmUoQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKGtleWZy
YW1lcykpOworICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ1RyYW5zZm9ybUtleWZyYW1lOjpjcmVh
dGUoMCwgb3BlcmF0aW9uczEsIG51bGxwdHIpKTsKKyAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NU
cmFuc2Zvcm1LZXlmcmFtZTo6Y3JlYXRlKDEsIG9wZXJhdGlvbnMyLCBudWxscHRyKSk7CisgICAg
Y3VydmUtPmFkZEtleWZyYW1lKENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZSgyLCBvcGVyYXRp
b25zMywgbnVsbHB0cikpOwogICAgIEludFNpemUgbGF5ZXJTaXplOyAvLyBpZ25vcmVkCiAgICAg
ZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoLTEsIGxheWVyU2l6ZSkpOwogICAg
IGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKDAsIGxheWVyU2l6ZSkpOwpAQCAt
MTc2LDcgKzE2OSw3IEBAIFRFU1QoQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QsIFRocmVl
VHJhbnNmb3JtS2V5ZnJhbWUpCiAvLyBUZXN0cyB0aGF0IGEgdHJhbnNmb3JtIGFuaW1hdGlvbiB3
aXRoIG11bHRpcGxlIGtleXMgYXQgYSBnaXZlbiB0aW1lIHdvcmtzIHNhbmVseS4KIFRFU1QoQ0NL
ZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QsIFJlcGVhdGVkVHJhbnNmb3JtS2V5VGltZXMpCiB7
Ci0gICAgVmVjdG9yPENDVHJhbnNmb3JtS2V5ZnJhbWU+IGtleWZyYW1lczsKKyAgICBPd25QdHI8
Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4gY3VydmUoQ0NLZXlmcmFtZWRUcmFu
c2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkpOwogICAgIC8vIEEgc3RlcCBmdW5jdGlvbi4K
ICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOwogICAgIG9wZXJhdGlvbnMxLm9w
ZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVu
Z3RoKDQsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFO
U0xBVEVfWCkpOwpAQCAtMTg2LDExICsxNzksMTAgQEAgVEVTVChDQ0tleWZyYW1lZEFuaW1hdGlv
bkN1cnZlVGVzdCwgUmVwZWF0ZWRUcmFuc2Zvcm1LZXlUaW1lcykKICAgICBvcGVyYXRpb25zMy5v
cGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExl
bmd0aCg2LCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJB
TlNMQVRFX1gpKTsKICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM0OwogICAgIG9w
ZXJhdGlvbnM0Lm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9u
OjpjcmVhdGUoTGVuZ3RoKDYsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3Bl
cmF0aW9uOjpUUkFOU0xBVEVfWCkpOwotICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NUcmFuc2Zvcm1L
ZXlmcmFtZSgwLCBvcGVyYXRpb25zMSkpOwotICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NUcmFuc2Zv
cm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMikpOwotICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NUcmFu
c2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMykpOwotICAgIGtleWZyYW1lcy5hcHBlbmQoQ0NU
cmFuc2Zvcm1LZXlmcmFtZSgyLCBvcGVyYXRpb25zNCkpOwotICAgIE93blB0cjxDQ0tleWZyYW1l
ZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1h
dGlvbkN1cnZlOjpjcmVhdGUoa2V5ZnJhbWVzKSk7CisgICAgY3VydmUtPmFkZEtleWZyYW1lKEND
VHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZSgwLCBvcGVyYXRpb25zMSwgbnVsbHB0cikpOworICAg
IGN1cnZlLT5hZGRLZXlmcmFtZShDQ1RyYW5zZm9ybUtleWZyYW1lOjpjcmVhdGUoMSwgb3BlcmF0
aW9uczIsIG51bGxwdHIpKTsKKyAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NUcmFuc2Zvcm1LZXlm
cmFtZTo6Y3JlYXRlKDEsIG9wZXJhdGlvbnMzLCBudWxscHRyKSk7CisgICAgY3VydmUtPmFkZEtl
eWZyYW1lKENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZSgyLCBvcGVyYXRpb25zNCwgbnVsbHB0
cikpOwogCiAgICAgSW50U2l6ZSBsYXllclNpemU7IC8vIGlnbm9yZWQKIApAQCAtMjA5LDMzICsy
MDEsMzYgQEAgVEVTVChDQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdCwgUmVwZWF0ZWRUcmFu
c2Zvcm1LZXlUaW1lcykKICAgICBleHBlY3RUcmFuc2xhdGVYKDYsIGN1cnZlLT5nZXRWYWx1ZSgz
LCBsYXllclNpemUpKTsKIH0KIAotLy8gVGVzdHMgdGhhdCBpbnZhbGlkIGxpc3RzIG9mIGtleWZy
YW1lcyByZXN1bHQgaW4gbm90aGluZyBiZWluZyByZXR1cm5lZCBmcm9tIDo6Y3JlYXRlLgotVEVT
VChDQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdCwgSW52YWxpZEtleWZyYW1lcykKKy8vIFRl
c3RzIHRoYXQgdGhlIGtleWZyYW1lcyBtYXkgYmUgYWRkZWQgb3V0IG9mIG9yZGVyLgorVEVTVChD
Q0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdCwgVW5zb3J0ZWRLZXlmcmFtZXMpCiB7Ci0gICAg
Ly8gSXQgaXMgaW52YWxpZCB0byBwYXNzIGFuIGVtcHR5IHZlY3RvciBvZiBrZXlmcmFtZXMgdG8g
Y3JlYXRlLgotICAgIFZlY3RvcjxDQ1RyYW5zZm9ybUtleWZyYW1lPiB0cmFuc2Zvcm1LZXlmcmFt
ZXM7Ci0gICAgT3duUHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IHRyYW5z
Zm9ybUN1cnZlID0gQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKHRy
YW5zZm9ybUtleWZyYW1lcyk7Ci0gICAgRVhQRUNUX0ZBTFNFKHRyYW5zZm9ybUN1cnZlLmdldCgp
KTsKLQotICAgIFZlY3RvcjxDQ0Zsb2F0S2V5ZnJhbWU+IGZsb2F0S2V5ZnJhbWVzOwotICAgIE93
blB0cjxDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU+IGZsb2F0Q3VydmUgPSBDQ0tleWZy
YW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZShmbG9hdEtleWZyYW1lcyk7Ci0gICAgRVhQ
RUNUX0ZBTFNFKGZsb2F0Q3VydmUuZ2V0KCkpOwotCi0gICAgLy8gSXQgaXMgaW52YWxpZCB0byBw
YXNzIGEgdmVjdG9yIG9mIHVuc29ydGVkIGtleWZyYW1lcyB0byBjcmVhdGU7Ci0gICAgVHJhbnNm
b3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKLSAgICBvcGVyYXRpb25zMS5vcGVyYXRpb25zKCku
YXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgyLCBGaXhl
ZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsK
LSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOwotICAgIG9wZXJhdGlvbnMyLm9w
ZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVu
Z3RoKDQsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFO
U0xBVEVfWCkpOwotICAgIHRyYW5zZm9ybUtleWZyYW1lcy5hcHBlbmQoQ0NUcmFuc2Zvcm1LZXlm
cmFtZSgxLCBvcGVyYXRpb25zMSkpOwotICAgIHRyYW5zZm9ybUtleWZyYW1lcy5hcHBlbmQoQ0NU
cmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRpb25zMikpOwotICAgIHRyYW5zZm9ybUN1cnZlID0g
Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKHRyYW5zZm9ybUtleWZy
YW1lcyk7Ci0gICAgRVhQRUNUX0ZBTFNFKHRyYW5zZm9ybUN1cnZlLmdldCgpKTsKLQotICAgIGZs
b2F0S2V5ZnJhbWVzLmFwcGVuZChDQ0Zsb2F0S2V5ZnJhbWUoMSwgMikpOwotICAgIGZsb2F0S2V5
ZnJhbWVzLmFwcGVuZChDQ0Zsb2F0S2V5ZnJhbWUoMCwgNCkpOwotICAgIGZsb2F0Q3VydmUgPSBD
Q0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZShmbG9hdEtleWZyYW1lcyk7Ci0g
ICAgRVhQRUNUX0ZBTFNFKGZsb2F0Q3VydmUuZ2V0KCkpOworICAgIE93blB0cjxDQ0tleWZyYW1l
ZEZsb2F0QW5pbWF0aW9uQ3VydmU+IGN1cnZlKENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2
ZTo6Y3JlYXRlKCkpOworICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ0Zsb2F0S2V5ZnJhbWU6OmNy
ZWF0ZSgyLCA4LCBudWxscHRyKSk7CisgICAgY3VydmUtPmFkZEtleWZyYW1lKENDRmxvYXRLZXlm
cmFtZTo6Y3JlYXRlKDAsIDIsIG51bGxwdHIpKTsKKyAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NG
bG9hdEtleWZyYW1lOjpjcmVhdGUoMSwgNCwgbnVsbHB0cikpOworICAgIEVYUEVDVF9GTE9BVF9F
USgyLCBjdXJ2ZS0+Z2V0VmFsdWUoLTEpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUt
PmdldFZhbHVlKDApKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMywgY3VydmUtPmdldFZhbHVlKDAu
NSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMSkpOworICAgIEVY
UEVDVF9GTE9BVF9FUSg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMS41KSk7CisgICAgRVhQRUNUX0ZMT0FU
X0VRKDgsIGN1cnZlLT5nZXRWYWx1ZSgyKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDgsIGN1cnZl
LT5nZXRWYWx1ZSgzKSk7CiB9CiAKKy8vIFRlc3RzIHRoYXQgYSBjdWJpYyBiZXppZXIgdGltaW5n
IGZ1bmN0aW9uIHdvcmtzIGFzIGV4cGVjdGVkLgorVEVTVChDQ0tleWZyYW1lZEFuaW1hdGlvbkN1
cnZlVGVzdCwgQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbikKK3sKKyAgICBPd25QdHI8Q0NLZXlm
cmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9u
Q3VydmU6OmNyZWF0ZSgpKTsKKyAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NGbG9hdEtleWZyYW1l
OjpjcmVhdGUoMCwgMCwgQ0NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoMC4yNSwg
MCwgMC43NSwgMSkpKTsKKyAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NGbG9hdEtleWZyYW1lOjpj
cmVhdGUoMSwgMSwgbnVsbHB0cikpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGN1cnZlLT5n
ZXRWYWx1ZSgwKSk7CisgICAgRVhQRUNUX0xUKDAsIGN1cnZlLT5nZXRWYWx1ZSgwLjI1KSk7Cisg
ICAgRVhQRUNUX0dUKDAuMjUsIGN1cnZlLT5nZXRWYWx1ZSgwLjI1KSk7CisgICAgRVhQRUNUX0ZM
T0FUX0VRKDAuNSwgY3VydmUtPmdldFZhbHVlKDAuNSkpOworICAgIEVYUEVDVF9MVCgwLjc1LCBj
dXJ2ZS0+Z2V0VmFsdWUoMC43NSkpOworICAgIEVYUEVDVF9HVCgxLCBjdXJ2ZS0+Z2V0VmFsdWUo
MC43NSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxLCBjdXJ2ZS0+Z2V0VmFsdWUoMSkpOworfQog
CiB9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>