<?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>183557</bug_id>
          
          <creation_ts>2018-03-11 19:51:24 -0700</creation_ts>
          <short_desc>[Web Animations] Reflect timing properties and keyframe styles set by CSS for CSSAnimation and CSSTransition objects</short_desc>
          <delta_ts>2018-03-12 06:02:55 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Animations</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>183504</dup_id>
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=183504</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antoine Quint">graouts</reporter>
          <assigned_to name="Antoine Quint">graouts</assigned_to>
          <cc>dino</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1405630</commentid>
    <comment_count>0</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2018-03-11 19:51:24 -0700</bug_when>
    <thetext>[Web Animations] Reflect timing properties and keyframe styles set by CSS for CSSAnimation and CSSTransition objects</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1405631</commentid>
    <comment_count>1</comment_count>
      <attachid>335568</attachid>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2018-03-11 19:57:43 -0700</bug_when>
    <thetext>Created attachment 335568
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1405691</commentid>
    <comment_count>2</comment_count>
      <attachid>335568</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2018-03-12 03:53:17 -0700</bug_when>
    <thetext>Comment on attachment 335568
Patch

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

&gt; Source/WebCore/animation/AnimationEffectTimingReadOnly.cpp:232
&gt; +void AnimationEffectTimingReadOnly::setTimingFunction(const RefPtr&lt;TimingFunction&gt; timingFunction)

I think this can be a RefPtr&lt;TimingFunction&gt;&amp; to avoid a cycle.

&gt; Source/WebCore/animation/CSSAnimation.cpp:59
&gt; +

Get a local variable to avoid calling backingAnimation so many times:

const Animation&amp; animation = backingAnimation();

&gt; Source/WebCore/animation/CSSAnimation.cpp:95
&gt; +    auto* timing = effect()-&gt;timing();
&gt; +    timing-&gt;setFill(fillMode);
&gt; +    timing-&gt;setDirection(direction);
&gt; +    timing-&gt;setIterations(backingAnimation().iterationCount());

Why not just call setFill() etc from inside the switch statements and avoid local variables?

&gt; Source/WebCore/animation/DeclarativeAnimation.cpp:38
&gt; +DeclarativeAnimation::DeclarativeAnimation(Document&amp; document, const Animation&amp; backingAnimation)
&gt; +    : WebAnimation(document)
&gt; +    , m_backingAnimation(const_cast&lt;Animation&amp;&gt;(backingAnimation))

You should make m_backingAnimation a const Animation&amp;, that way you won&apos;t need to const_cast. It shouldn&apos;t create a Ref&lt;&gt;

&gt; Source/WebCore/animation/DeclarativeAnimation.cpp:44
&gt; +void DeclarativeAnimation::setBackingAnimation(const Animation&amp; backingAnimation)
&gt; +{
&gt; +    m_backingAnimation = const_cast&lt;Animation&amp;&gt;(backingAnimation);

When do you set this outside the constructor? I don&apos;t think you need this method (nor should you have it).

&gt; Source/WebCore/animation/DeclarativeAnimation.cpp:56
&gt; +    auto effect = KeyframeEffectReadOnly::create(target);
&gt; +    setEffect(WTFMove(effect));

No need for the variable.

&gt; Source/WebCore/animation/DeclarativeAnimation.h:43
&gt; +    void setBackingAnimation(const Animation&amp;);

See above.

&gt; Source/WebCore/animation/DeclarativeAnimation.h:48
&gt; +    virtual void initialize(Element&amp;);

Can&apos;t this be a const Element&amp;? You copy the timeline out in a subclass, but i think that&apos;s const too.

&gt; Source/WebCore/animation/DeclarativeAnimation.h:52
&gt; +    Ref&lt;Animation&gt; m_backingAnimation;

See above.

&gt; Source/WebCore/bindings/js/JSWebAnimationCustom.cpp:29
&gt; +#include &quot;CSSAnimation.h&quot;

Why?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1405698</commentid>
    <comment_count>3</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2018-03-12 04:44:09 -0700</bug_when>
    <thetext>(In reply to Dean Jackson from comment #2)
&gt; Comment on attachment 335568 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=335568&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/animation/AnimationEffectTimingReadOnly.cpp:232
&gt; &gt; +void AnimationEffectTimingReadOnly::setTimingFunction(const RefPtr&lt;TimingFunction&gt; timingFunction)
&gt; 
&gt; I think this can be a RefPtr&lt;TimingFunction&gt;&amp; to avoid a cycle.

Will fix.

&gt; &gt; Source/WebCore/animation/CSSAnimation.cpp:59
&gt; &gt; +
&gt; 
&gt; Get a local variable to avoid calling backingAnimation so many times:
&gt; 
&gt; const Animation&amp; animation = backingAnimation();

Will add `auto&amp; animation = backingAnimation();`

&gt; &gt; Source/WebCore/animation/CSSAnimation.cpp:95
&gt; &gt; +    auto* timing = effect()-&gt;timing();
&gt; &gt; +    timing-&gt;setFill(fillMode);
&gt; &gt; +    timing-&gt;setDirection(direction);
&gt; &gt; +    timing-&gt;setIterations(backingAnimation().iterationCount());
&gt; 
&gt; Why not just call setFill() etc from inside the switch statements and avoid
&gt; local variables?

Good point, will fix.

&gt; &gt; Source/WebCore/animation/DeclarativeAnimation.cpp:38
&gt; &gt; +DeclarativeAnimation::DeclarativeAnimation(Document&amp; document, const Animation&amp; backingAnimation)
&gt; &gt; +    : WebAnimation(document)
&gt; &gt; +    , m_backingAnimation(const_cast&lt;Animation&amp;&gt;(backingAnimation))
&gt; 
&gt; You should make m_backingAnimation a const Animation&amp;, that way you won&apos;t
&gt; need to const_cast. It shouldn&apos;t create a Ref&lt;&gt;

This is using the same approach taken by AnimationBase. Note that Animation.h has the following:

Animation&amp; operator=(const Animation&amp; o);

&gt; &gt; Source/WebCore/animation/DeclarativeAnimation.cpp:44
&gt; &gt; +void DeclarativeAnimation::setBackingAnimation(const Animation&amp; backingAnimation)
&gt; &gt; +{
&gt; &gt; +    m_backingAnimation = const_cast&lt;Animation&amp;&gt;(backingAnimation);
&gt; 
&gt; When do you set this outside the constructor? I don&apos;t think you need this
&gt; method (nor should you have it).

We need to update the backing animation when updating CSSAnimation objects during style resolution, see the patch in webkit.org/b/183558.

&gt; &gt; Source/WebCore/animation/DeclarativeAnimation.cpp:56
&gt; &gt; +    auto effect = KeyframeEffectReadOnly::create(target);
&gt; &gt; +    setEffect(WTFMove(effect));
&gt; 
&gt; No need for the variable.

Will fix.

&gt; &gt; Source/WebCore/animation/DeclarativeAnimation.h:43
&gt; &gt; +    void setBackingAnimation(const Animation&amp;);
&gt; 
&gt; See above.
&gt; 
&gt; &gt; Source/WebCore/animation/DeclarativeAnimation.h:48
&gt; &gt; +    virtual void initialize(Element&amp;);
&gt; 
&gt; Can&apos;t this be a const Element&amp;? You copy the timeline out in a subclass, but
&gt; i think that&apos;s const too.

It can, although eventually it&apos;ll need to be const_cast&apos;d for final call to the KeyframeEffectReadOnly(ClassType, Ref&lt;AnimationEffectTimingReadOnly&gt;&amp;&amp;, Element*) constructor.

Will fix.

&gt; &gt; Source/WebCore/animation/DeclarativeAnimation.h:52
&gt; &gt; +    Ref&lt;Animation&gt; m_backingAnimation;
&gt; 
&gt; See above.
&gt; 
&gt; &gt; Source/WebCore/bindings/js/JSWebAnimationCustom.cpp:29
&gt; &gt; +#include &quot;CSSAnimation.h&quot;
&gt; 
&gt; Why?

Must have been needed some time during development of this patch, but it turns out it&apos;s not needed, thanks for catching this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1405709</commentid>
    <comment_count>4</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2018-03-12 06:02:55 -0700</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 183504 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>335568</attachid>
            <date>2018-03-11 19:57:43 -0700</date>
            <delta_ts>2018-03-12 03:53:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-183557-20180312035742.patch</filename>
            <type>text/plain</type>
            <size>30776</size>
            <attacher name="Antoine Quint">graouts</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI5NTE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmQwZjE0YjczMDM0ZmI0
MzVmMjU2NzVhYjkwNjA3OTUzZjViNjJjZi4uMjE5NDdlMzk0NmUzOWFhY2Q1Y2Q3NWUyYTk2YThm
OTAxYTdmYjFlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0IEBACisyMDE4LTAzLTExICBBbnRv
aW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYiBBbmltYXRpb25z
XSBSZWZsZWN0IHRpbWluZyBwcm9wZXJ0aWVzIGFuZCBrZXlmcmFtZSBzdHlsZXMgc2V0IGJ5IENT
UyBmb3IgQ1NTQW5pbWF0aW9uIGFuZCBDU1NUcmFuc2l0aW9uIG9iamVjdHMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MzU1NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIGludHJvZHVjZSBhIG5ldyBz
dXBlcmNsYXNzIHRvIGJvdGggQ1NTQW5pbWF0aW9uIGFuZCBDU1NUcmFuc2l0aW9uIHdoaWNoIGlu
dHJvZHVjZXMgdGhlIGNvbmNlcHQgb2YgYSBiYWNraW5nQW5pbWF0aW9uKCksCisgICAgICAgIHdo
aWNoIGlzIGFuIEFuaW1hdGlvbiBoZWxkIGJ5IHRoZSBSZW5kZXJTdHlsZSBvYmplY3RzIGluIHRo
ZWlyIGFuaW1hdGlvbnMoKSBhbmQgdHJhbnNpdGlvbnMoKSBBbmltYXRpb25MaXN0LiBVc2luZyB0
aGUgYmFja2luZworICAgICAgICBhbmltYXRpb24sIHdlIGNhbiByZWZsZWN0IENTUyB2YWx1ZXMg
Zm9yIGFuaW1hdGlvbnMgYW5kIHRyYW5zaXRpb25zLCB3aGlsZSBrZXlmcmFtZSB2YWx1ZXMgd2ls
bCBiZSBvYnRhaW5lZCB0aHJvdWdoIHRoZSBSZW5kZXJTdHlsZQorICAgICAgICBvYmplY3RzLgor
ICAgICAgICAKKyAgICAgICAgV2UgYWRkIHR3byB2aXJ0dWFsIG1ldGhvZHMgd2l0aCBiYXNlIGlt
cGxlbWVudGF0aW9uczogaW5pdGlhbGl6ZSgpLCB3aGljaCBpcyBjYWxsZWQgZHVyaW5nIHRoZSBz
dWJjbGFzc2VzJyBjcmVhdGUoKSBtZXRob2RzLCBhbmQgCisgICAgICAgIHN5bmNQcm9wZXJ0aWVz
V2l0aEJhY2tpbmdBbmltYXRpb24oKSwgd2hpY2ggZW5zdXJlcyB0aGF0IHByb3BlcnRpZXMgb24g
dGhlIERlY2xhcmF0aXZlQW5pbWF0aW9uIG9iamVjdHMgKFdlYiBBbmltYXRpb25zIHNpZGUpIG1h
dGNoCisgICAgICAgIHRoZSBiYWNraW5nIGFuaW1hdGlvbiAoQ1NTIHNpZGUpLgorCisgICAgICAg
ICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIGFuaW1hdGlvbi9BbmltYXRpb25FZmZlY3RUaW1pbmdSZWFkT25seS5j
cHA6IEluIG9yZGVyIGZvciBEZWNsYXJhdGl2ZUFuaW1hdGlvbjo6c3luY1Byb3BlcnRpZXNXaXRo
QmFja2luZ0FuaW1hdGlvbigpIHRvIHNldCB0aGUgdGltaW5nCisgICAgICAgIGZ1bmN0aW9uIGZv
ciBhIGRlY2xhcmF0aXZlIGFuaW1hdGlvbidzIGVmZmVjdCwgd2UgbmVlZCBhIHB1YmxpYyBtZXRo
b2QgdG8gc2V0IGFuIGVmZmVjdCdzIHRpbWluZyBmdW5jdGlvbiBvdXRzaWRlIG9mIGp1c3QgdGhl
ICJlYXNpbmciCisgICAgICAgIHByb3BlcnR5IHNldHRlciBleHBvc2VkIHZpYSB0aGUgSlMgQVBJ
LiBTbyB3ZSBpbnRyb2R1Y2UgYSBzZXRUaW1pbmdGdW5jdGlvbigpIG1ldGhvZCBhbmQgY2FsbCBp
dCBmcm9tIHNldEVhc2luZygpLgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uRWZmZWN0VGlt
aW5nUmVhZE9ubHk6OnNldEVhc2luZyk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25FZmZl
Y3RUaW1pbmdSZWFkT25seTo6c2V0VGltaW5nRnVuY3Rpb24pOgorICAgICAgICAqIGFuaW1hdGlv
bi9BbmltYXRpb25FZmZlY3RUaW1pbmdSZWFkT25seS5oOgorICAgICAgICAqIGFuaW1hdGlvbi9D
U1NUcmFuc2l0aW9uLmNwcDogQ1NTVHJhbnNpdGlvbiBpcyBub3cgYSBzdWJjbGFzcyBvZiBEZWNs
YXJhdGl2ZUFuaW1hdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1RyYW5zaXRpb246OmNyZWF0
ZSk6IFNldCB0aGUgdHJhbnNpdGlvblByb3BlcnR5IHByb3BlcnR5IGJhc2VkIG9uIHRoZSBwcm92
aWRlZCBiYWNraW5nIGFuaW1hdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1RyYW5zaXRpb246
OkNTU1RyYW5zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVHJhbnNpdGlvbjo6bWF0Y2hl
c0JhY2tpbmdBbmltYXRpb25BbmRTdHlsZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
VHJhbnNpdGlvbjo6Y2FuQmVMaXN0ZWQgY29uc3QpOiBTdWJjbGFzcyB0aGlzIG1ldGhvZCBzdWNo
IHRoYXQgd2UgYWxzbyBjaGVjayB0aGF0IHdlIGhhdmUgYmxlbmRpbmcga2V5ZnJhbWVzIGZvciBh
IENTU1RyYW5zaXRpb24gdG8gYmUKKyAgICAgICAgbGlzdGVkIGJ5IGNhbGxzIHRvIGdldEFuaW1h
dGlvbnMoKS4KKyAgICAgICAgKiBhbmltYXRpb24vQ1NTVHJhbnNpdGlvbi5oOgorICAgICAgICAq
IGFuaW1hdGlvbi9EZWNsYXJhdGl2ZUFuaW1hdGlvbi5jcHA6IEFkZGVkLiBUaGlzIG5ldyBXZWJB
bmltYXRpb24gc3ViY2xhc3Mgbm93IGlzIHRoZSBjb21tb24gYmFzZSBjbGFzcyBmb3IgYm90aCBD
U1NBbmltYXRpb24gYW5kIENTU1RyYW5zaXRpb24uCisgICAgICAgIEl0IGVzdGFibGlzaGVzIGEg
cmVsYXRpb25zaGlwIHdpdGggYSAiYmFja2luZyBhbmltYXRpb24iLCB3aGljaCBpcyBhbiBBbmlt
YXRpb24gb2J0YWluZWQgZnJvbSBhIHN0eWxlJ3MgQW5pbWF0aW9uTGlzdCB3aGlsZSByZXNvbHZp
bmcgc3R5bGVzLgorICAgICAgICBUaGVzZSBiYWNraW5nIGFuaW1hdGlvbnMgY29udGFpbiBhbGwg
b2YgdGhlIHBhcnNlZCBDU1Mgc3R5bGVzIHJlbGF0ZWQgdG8gQ1NTIEFuaW1hdGlvbnMgYW5kIENT
UyBUcmFuc2l0aW9ucyBhbmQgd2UgdXNlIHRob3NlIHRvIHNldCBtYXRjaGluZyBwcm9wZXJ0aWVz
CisgICAgICAgIG9mIHRoZSBXZWIgQW5pbWF0aW9ucyB0aW1pbmcgbW9kZWwgaW4gdGhlIG5ldyBz
eW5jUHJvcGVydGllc1dpdGhCYWNraW5nQW5pbWF0aW9uKCkgdmlydHVhbCBtZXRob2QsIHdoaWNo
IHN1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIHRvIHBlcmZvcm0gZnVydGhlcgorICAgICAgICB3b3Jr
IHRoYXQgaXMgc3BlY2lmaWMgdG8gYSBnaXZlbiBkZWNsYXJhdGl2ZSBhbmltYXRpb24gdHlwZS4g
VGhlIGluaXRpYWxpemUoKSBtZXRob2QgaXMgY2FsbGVkIGR1cmluZyBjcmVhdGUoKSBtZXRob2Rz
IHRvIHBlcmZvcm0gY29tbW9uIGFuaW1hdGlvbgorICAgICAgICBzZXR1cCB3b3JrLiBOb3RlIHRo
YXQgd2hpbGUgYm90aCBpbml0aWFsaXplKCkgYW5kIHN5bmNQcm9wZXJ0aWVzV2l0aEJhY2tpbmdB
bmltYXRpb24oKSBhcmUgY2FsbGVkLCB3ZSBzdXNwZW5kIGludmFsaWRhdGlvbiB0byB0aGF0IGFu
aW1hdGlvbidzIGVmZmVjdAorICAgICAgICBzaW5jZSB0aGVzZSBtZXRob2RzIGFyZSBtZWFudCB0
byBiZSBjYWxsZWQgZHVyaW5nIHN0eWxlIGludmFsaWRhdGlvbiBhbmQgd2Ugd291bGQgaGl0IGFu
IGFzc2VydGlvbiBpZiB3ZSBmb2xsb3dlZCB0aGUgdXN1YWwgcm91dGUgb2YgY2FsbGluZworICAg
ICAgICB1cGRhdGVTdHlsZUlmTmVlZGVkKCkgb24gdGhlIHRhcmdldCdzIGRvY3VtZW50IGR1cmlu
ZyBpbnZhbGlkYXRpb24uCisgICAgICAgIChXZWJDb3JlOjpEZWNsYXJhdGl2ZUFuaW1hdGlvbjo6
RGVjbGFyYXRpdmVBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RGVjbGFyYXRpdmVBbmlt
YXRpb246OnNldEJhY2tpbmdBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RGVjbGFyYXRp
dmVBbmltYXRpb246OmluaXRpYWxpemUpOiBDcmVhdGUgYSBLZXlmcmFtZUVmZmVjdFJlYWRPbmx5
IGZvciB0aGlzIGFuaW1hdGlvbiBhbmQgc2V0IHRoZSBwcm92aWRlZCBlbGVtZW50IGFzIGl0cyB0
YXJnZXQsIHNldCB0aGF0CisgICAgICAgIGVsZW1lbnQncyBkb2N1bWVudCdzIHRpbWVsaW5lIGFu
ZCBwbGF5IHRoZSBhbmltYXRpb24gaWYgdGhlIGJhY2tpbmcgYW5pbWF0aW9uJ3MgcGxheSBzdGF0
ZSBpcyBwbGF5aW5nLgorICAgICAgICAoV2ViQ29yZTo6RGVjbGFyYXRpdmVBbmltYXRpb246OnN5
bmNQcm9wZXJ0aWVzV2l0aEJhY2tpbmdBbmltYXRpb24pOiBSZWZsZWN0IHRoZSB7YW5pbWF0aW9u
fHRyYW5zaXRpb259LWRlbGF5LCB7YW5pbWF0aW9ufHRyYW5zaXRpb259LWR1cmF0aW9uIGFuZAor
ICAgICAgICB7YW5pbWF0aW9ufHRyYW5zaXRpb259LXRpbWluZy1mdW5jdGlvbiBwcm9wZXJ0aWVz
IGFzIHNldCBvbiB0aGUgYmFja2luZyBhbmltYXRpb24uCisgICAgICAgICogYW5pbWF0aW9uL0Rl
Y2xhcmF0aXZlQW5pbWF0aW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGVjbGFyYXRp
dmVBbmltYXRpb246OmJhY2tpbmdBbmltYXRpb24gY29uc3QpOgorICAgICAgICAqIGFuaW1hdGlv
bi9LZXlmcmFtZUVmZmVjdFJlYWRPbmx5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1l
RWZmZWN0UmVhZE9ubHk6OmNyZWF0ZSk6IEFkZCBhIG5ldyBjcmVhdGUoKSBtZXRob2QgdGhhdCBv
bmx5IHByb3ZpZGVzIGEgdGFyZ2V0IGFuZCB3aGljaCBpcyB1c2VkIGJ5IERlY2xhcmF0aXZlQW5p
bWF0aW9uOjppbml0aWFsaXplKCkuCisgICAgICAgICogYW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0
UmVhZE9ubHkuaDoKKyAgICAgICAgKiBhbmltYXRpb24vV2ViQW5pbWF0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkFuaW1hdGlvbjo6c3VzcGVuZEVmZmVjdEludmFsaWRhdGlvbik6IERl
Y2xhcmF0aXZlQW5pbWF0aW9uIGluc3RhbmNlcyBoYXZlIHRoZWlyIHRpbWluZyBtb2RlbCBwcm9w
ZXJ0aWVzIHNldCBkdXJpbmcgc3R5bGUgaW52YWxpZGF0aW9uLCBzbyB3ZSBuZWVkCisgICAgICAg
IGEgbWVjaGFuaXNtIHRvIGFsbG93IHRoZSB1c3VhbCBlZmZlY3QgaW52YWxpZGF0aW9uIHRvIGJl
IHN1c3BlbmRlZCBpbiB0aGlzIGNhc2UuIFdlIG5vdyBtYWludGFpbiBhIHNpbXBsZSBtX3N1c3Bl
bmRDb3VudCBjb3VudCB0aGF0IGluY3JlYXNlcyBhbmQgZGVjcmVhc2VzIHdpdGgKKyAgICAgICAg
Y2FsbHMgdG8gdGhpcyBtZXRob2QgYW5kIHVuc3VzcGVuZEVmZmVjdEludmFsaWRhdGlvbigpIGFu
ZCBhIGlzRWZmZWN0SW52YWxpZGF0aW9uU3VzcGVuZGVkKCkgbWV0aG9kIHJldHVybmluZyB0cnVl
IHdoZW5ldmVyIHRoYXQgY291bnQgaXMgcG9zaXRpdmUuCisgICAgICAgIChXZWJDb3JlOjpXZWJB
bmltYXRpb246OnVuc3VzcGVuZEVmZmVjdEludmFsaWRhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJBbmltYXRpb246OnRpbWluZ01vZGVsRGlkQ2hhbmdlKTogQ2hlY2sgdGhhdCBlZmZlY3Qg
aW52YWxpZGF0aW9uIGlzIG5vdCBzdXNwZW5kZWQgYmVmb3JlIHByb2NlZWRpbmcgd2l0aCBpbnZh
bGlkYXRpbmcgdGhlIGVmZmVjdC4KKyAgICAgICAgKiBhbmltYXRpb24vV2ViQW5pbWF0aW9uLmg6
CisgICAgICAgIChXZWJDb3JlOjpXZWJBbmltYXRpb246OmlzRGVjbGFyYXRpdmVBbmltYXRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViQW5pbWF0aW9uOjppc0VmZmVjdEludmFsaWRh
dGlvblN1c3BlbmRlZCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXZWJBbmltYXRpb25DdXN0
b20uY3BwOgorCiAyMDE4LTAzLTEwICBNZWdhbiBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBs
ZS5jb20+CiAKICAgICAgICAgTWVkaWEgcXVlcnkgZm9yIGRlZmF1bHQgYXBwZWFyYW5jZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dAppbmRleCAyMDAwNGI2ZTNlMjQwZjg2NzI5MzMzZmEwZjMwYzJiYmE4YmE2Njc3Li45
ZjJhZWNiZmM3YmIyOGI4ZTQ1MjMwZTI5OGIxMWYwMmM3ODAxZTM1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApA
QCAtMzM4LDYgKzMzOCw3IEBAIGFuaW1hdGlvbi9BbmltYXRpb25QbGF5YmFja0V2ZW50LmNwcAog
YW5pbWF0aW9uL0FuaW1hdGlvblRpbWVsaW5lLmNwcAogYW5pbWF0aW9uL0NTU0FuaW1hdGlvbi5j
cHAKIGFuaW1hdGlvbi9DU1NUcmFuc2l0aW9uLmNwcAorYW5pbWF0aW9uL0RlY2xhcmF0aXZlQW5p
bWF0aW9uLmNwcAogYW5pbWF0aW9uL0RvY3VtZW50VGltZWxpbmUuY3BwCiBhbmltYXRpb24vS2V5
ZnJhbWVFZmZlY3QuY3BwCiBhbmltYXRpb24vS2V5ZnJhbWVFZmZlY3RSZWFkT25seS5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCAyNTM3M2NhNmU1YmYwNTg4MTFlMzk5YWRmZWE5NTNlOGRkYTcyZWQ3Li4zMjJhMzYyNjkzNTA5
M2U1NjZiMjQ5YzY2YTYwZWViYzliYmY0ODExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xOTg0LDYgKzE5ODQsOCBAQAogCQk3
MTU1NkNCNDFGOUYwOUJBMDBFNzhEMDggLyogS2V5ZnJhbWVFZmZlY3QuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcxNTU2Q0FBMUY5RjA5OUIwMEU3OEQw
OCAvKiBLZXlmcmFtZUVmZmVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTcxNTU2Q0JEMUY5RjBBNDkwMEU3OEQwOCAvKiBKU0FuaW1hdGlvbkVm
ZmVjdFRpbWluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzE1NTZDQjkxRjlGMDlGRDAwRTc4RDA4IC8qIEpTQW5pbWF0aW9uRWZmZWN0VGltaW5nLmgg
Ki87IH07CiAJCTcxNTU2Q0JFMUY5RjBBNDkwMEU3OEQwOCAvKiBKU0tleWZyYW1lRWZmZWN0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MTU1NkNCNzFG
OUYwOUZDMDBFNzhEMDggLyogSlNLZXlmcmFtZUVmZmVjdC5oICovOyB9OworCQk3MTVBRDcyMDIw
NTA1MTMyMDBENTkyREMgLyogRGVjbGFyYXRpdmVBbmltYXRpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcxNUFENzFEMjA1MDUxMjQwMEQ1OTJEQyAv
KiBEZWNsYXJhdGl2ZUFuaW1hdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTcxNUFENzIxMjA1MDUxM0YwMEQ1OTJEQyAvKiBDU1NUcmFuc2l0
aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MTIz
QzE4NjIwNDczOUJBMDA3ODkzOTIgLyogQ1NTVHJhbnNpdGlvbi5oICovOyB9OwogCQk3MUExQjYw
ODFERUU1QUQ3MDA3M0JDRkIgLyogbW9kZXJuLW1lZGlhLWNvbnRyb2xzLWxvY2FsaXplZC1zdHJp
bmdzLmpzIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
MUExQjYwNjFERUU1QTgyMDA3M0JDRkIgLyogbW9kZXJuLW1lZGlhLWNvbnRyb2xzLWxvY2FsaXpl
ZC1zdHJpbmdzLmpzICovOyB9OwogCQk3MUE1N0RGMjE1NEJFMjVDMDAwOUQxMjAgLyogU1ZHUGF0
aFV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzFBNTdERjAxNTRCRTI1QzAwMDlEMTIwIC8qIFNWR1BhdGhVdGlsaXRpZXMuaCAqLzsgfTsK
IAkJNzFCMjg0MjcyMDNDRUM0QzAwMzZBQTVEIC8qIEpTQ1NTQW5pbWF0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUIyODQyNjIwM0NFQzBEMDAz
NkFBNUQgLyogSlNDU1NBbmltYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtODkwMSw2ICs4OTAzLDggQEAKIAkJNzE1NTZDQkIxRjlGMDlG
RTAwRTc4RDA4IC8qIEpTQW5pbWF0aW9uRWZmZWN0VGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQW5pbWF0aW9uRWZmZWN0VGltaW5nLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzE1N0UzRDExREMxRUU0QjAwOTQ1NTBFIC8qIHNjcnVi
YmluZy1zdXBwb3J0LmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0g
InNjcnViYmluZy1zdXBwb3J0LmpzIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzE1
N0YwNjExNTBCNjU2NDAwNkVBQUJEIC8qIFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdBbmltYXRlZFRyYW5zZm9ybUxp
c3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MTVBRDcxRDIwNTA1MTI0MDBE
NTkyREMgLyogRGVjbGFyYXRpdmVBbmltYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRGVjbGFyYXRpdmVBbmltYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzE1QUQ3MUYyMDUwNTEyNDAwRDU5MkRDIC8qIERlY2xhcmF0aXZlQW5pbWF0aW9uLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlY2xhcmF0aXZlQW5pbWF0
aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzE1REE1RDMyMDFCQjkwMjAw
MkVGMkIwIC8qIEpTV2ViQW5pbWF0aW9uQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTV2ViQW5pbWF0aW9uQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzE2QzhERjExRTQ4QjI2OTAwNUJEMERBIC8qIHZvbHVtZS1kb3duLXN1
cHBvcnQuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSAidm9sdW1l
LWRvd24tc3VwcG9ydC5qcyI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxNkM4REYy
MUU0OEIyNjkwMDVCRDBEQSAvKiB2b2x1bWUtdXAtc3VwcG9ydC5qcyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9ICJ2b2x1bWUtdXAtc3VwcG9ydC5qcyI7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTIxMiw2ICsxOTIxNiw4IEBACiAJCQkJNzEyM0MxODcy
MDQ3MzlCQjAwNzg5MzkyIC8qIENTU1RyYW5zaXRpb24uY3BwICovLAogCQkJCTcxMjNDMTg2MjA0
NzM5QkEwMDc4OTM5MiAvKiBDU1NUcmFuc2l0aW9uLmggKi8sCiAJCQkJNzEyM0MxODUyMDQ3MzlC
OTAwNzg5MzkyIC8qIENTU1RyYW5zaXRpb24uaWRsICovLAorCQkJCTcxNUFENzFGMjA1MDUxMjQw
MEQ1OTJEQyAvKiBEZWNsYXJhdGl2ZUFuaW1hdGlvbi5jcHAgKi8sCisJCQkJNzE1QUQ3MUQyMDUw
NTEyNDAwRDU5MkRDIC8qIERlY2xhcmF0aXZlQW5pbWF0aW9uLmggKi8sCiAJCQkJNzEwMjVFQzQx
Rjk5RjA5NjAwNEEyNTBDIC8qIERvY3VtZW50VGltZWxpbmUuY3BwICovLAogCQkJCTcxMDI1RUM1
MUY5OUYwOTYwMDRBMjUwQyAvKiBEb2N1bWVudFRpbWVsaW5lLmggKi8sCiAJCQkJNzEwMjVFQ0Ex
Rjk5RjA5NjAwNEEyNTBDIC8qIERvY3VtZW50VGltZWxpbmUuaWRsICovLApAQCAtMjcyMTYsNiAr
MjcyMjIsNyBAQAogCQkJCTk0NkQzNzNDMUQ2Q0RGQzAwMDc3MDg0RiAvKiBDU1NUb2tlbml6ZXJJ
bnB1dFN0cmVhbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOUFCMUYzODAxOEUyNDg5QTAwNTM0NzQz
IC8qIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4ODJE
QTIzMTU5Mzg0OEQwMDAxMTVFRCAvKiBDU1NUb1N0eWxlTWFwLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk3MTVBRDcyMTIwNTA1MTNGMDBENTkyREMgLyogQ1NTVHJhbnNpdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMzcxRjUzRTkwRDI3MDRGOTAwRUNFMEQ1IC8qIENTU1VuaWNvZGVSYW5nZVZhbHVl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlERDdDREYyNTBBMjNDRjk4MDAwNjk5MjggLyogQ1NTVW5r
bm93blJ1bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDN0Q4RkYwMUJEMDNCNjQwMEZGRTU0MCAv
KiBDU1NVbnNldFZhbHVlLmggaW4gSGVhZGVycyAqLywKQEAgLTI3MjY0LDYgKzI3MjcxLDcgQEAK
IAkJCQlGNTVCM0RCQTEyNTFGMTJEMDAzRUYyNjkgLyogRGF0ZVRpbWVMb2NhbElucHV0VHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2QTEyQkUxQTAwOTIzNzAwQzZERTcyIC8qIERlYnVnUGFn
ZU92ZXJsYXlzLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NUZFQTVEMDE1NkRERThDMDA2NTQxMDEg
LyogRGVjaW1hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzE1QUQ3MjAyMDUwNTEzMjAwRDU5MkRD
IC8qIERlY2xhcmF0aXZlQW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEMyMjhBMTEx
RDU3MjJFMDBENUE3RDMgLyogRGVjb2RlZERhdGFEb2N1bWVudFBhcnNlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQ0VDQ0ZDM0IxNDE5NzNENTAwMkEwQUMxIC8qIERlY29kZUVzY2FwZVNlcXVlbmNl
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTU1MTMwMDExRTdDQ0NDQjAwQTY5RTM4IC8qIERlY29k
aW5nT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
bmltYXRpb24vQW5pbWF0aW9uRWZmZWN0VGltaW5nUmVhZE9ubHkuY3BwIGIvU291cmNlL1dlYkNv
cmUvYW5pbWF0aW9uL0FuaW1hdGlvbkVmZmVjdFRpbWluZ1JlYWRPbmx5LmNwcAppbmRleCBiYWUz
ZjM1YWQxOTIxZDA4MjNiZGJiOTY2OTM2YzQ5YzA4NGVjNThkLi5iNmQxZTJiYzliNzc5NDI0MTk5
NDgyMzkyODliOGQwMjE1Mzc1OTM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRp
b24vQW5pbWF0aW9uRWZmZWN0VGltaW5nUmVhZE9ubHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FuaW1hdGlvbi9BbmltYXRpb25FZmZlY3RUaW1pbmdSZWFkT25seS5jcHAKQEAgLTE3MCw4ICsx
NzAsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBBbmltYXRpb25FZmZlY3RUaW1pbmdSZWFkT25seTo6
c2V0RWFzaW5nKGNvbnN0IFN0cmluZyYgZWFzaW5nKQogICAgIGF1dG8gdGltaW5nRnVuY3Rpb25S
ZXN1bHQgPSBUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlRnJvbUNTU1RleHQoZWFzaW5nKTsKICAgICBp
ZiAodGltaW5nRnVuY3Rpb25SZXN1bHQuaGFzRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiB0
aW1pbmdGdW5jdGlvblJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7Ci0gICAgbV90aW1pbmdGdW5j
dGlvbiA9IHRpbWluZ0Z1bmN0aW9uUmVzdWx0LnJldHVyblZhbHVlKCk7Ci0gICAgcHJvcGVydHlE
aWRDaGFuZ2UoKTsKKyAgICBzZXRUaW1pbmdGdW5jdGlvbih0aW1pbmdGdW5jdGlvblJlc3VsdC5y
ZXR1cm5WYWx1ZSgpKTsKICAgICByZXR1cm4geyB9OwogfQogCkBAIC0yMzAsNiArMjI5LDEyIEBA
IHZvaWQgQW5pbWF0aW9uRWZmZWN0VGltaW5nUmVhZE9ubHk6OnNldERpcmVjdGlvbihQbGF5YmFj
a0RpcmVjdGlvbiBkaXJlY3Rpb24pCiAgICAgcHJvcGVydHlEaWRDaGFuZ2UoKTsKIH0KIAordm9p
ZCBBbmltYXRpb25FZmZlY3RUaW1pbmdSZWFkT25seTo6c2V0VGltaW5nRnVuY3Rpb24oY29uc3Qg
UmVmUHRyPFRpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbikKK3sKKyAgICBtX3RpbWluZ0Z1
bmN0aW9uID0gdGltaW5nRnVuY3Rpb247CisgICAgcHJvcGVydHlEaWRDaGFuZ2UoKTsKK30KKwog
U2Vjb25kcyBBbmltYXRpb25FZmZlY3RUaW1pbmdSZWFkT25seTo6YWN0aXZlRHVyYXRpb24oKSBj
b25zdAogewogICAgIC8vIDMuOC4yLiBDYWxjdWxhdGluZyB0aGUgYWN0aXZlIGR1cmF0aW9uCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0aW9uRWZmZWN0VGltaW5n
UmVhZE9ubHkuaCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRpb25FZmZlY3RUaW1p
bmdSZWFkT25seS5oCmluZGV4IGFmYmY3OTNmMzI1MjI1ZmVkYzdiYzMzNDI5ZTExZmYyNjE4ZmJk
ZjYuLmRiYzBjNzE2NzI4YTcwOWJmNzI0MjllMDI2ZmU0MGMyODVjMmFkOTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRpb25FZmZlY3RUaW1pbmdSZWFkT25seS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRpb25FZmZlY3RUaW1pbmdSZWFk
T25seS5oCkBAIC04Nyw2ICs4Nyw4IEBAIHB1YmxpYzoKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBz
ZXRFYXNpbmcoY29uc3QgU3RyaW5nJik7CiAKICAgICBUaW1pbmdGdW5jdGlvbiogdGltaW5nRnVu
Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3RpbWluZ0Z1bmN0aW9uLmdldCgpOyB9CisgICAgdm9p
ZCBzZXRUaW1pbmdGdW5jdGlvbihjb25zdCBSZWZQdHI8VGltaW5nRnVuY3Rpb24+KTsKKwogICAg
IFNlY29uZHMgZW5kVGltZSgpIGNvbnN0OwogICAgIFNlY29uZHMgYWN0aXZlRHVyYXRpb24oKSBj
b25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU0FuaW1hdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uLmNwcAppbmRleCAw
MTdiMDA0YWJjMzJjMjY0ZDE5OGVhNTM3ZmM2MzZhYjc5Nzk1M2E0Li45ODVjYTMxYmI4NDNjMzkx
MjNjZWRjODQyODFkYjM4MTczMDU4MWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hbmlt
YXRpb24vQ1NTQW5pbWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NT
QW5pbWF0aW9uLmNwcApAQCAtMzEsMTkgKzMxLDc2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotUmVmPENTU0FuaW1hdGlvbj4gQ1NTQW5pbWF0aW9uOjpjcmVhdGUoRWxlbWVudCYgdGFyZ2V0
LCBjb25zdCBBbmltYXRpb24mKQorUmVmPENTU0FuaW1hdGlvbj4gQ1NTQW5pbWF0aW9uOjpjcmVh
dGUoRWxlbWVudCYgdGFyZ2V0LCBjb25zdCBBbmltYXRpb24mIGJhY2tpbmdBbmltYXRpb24pCiB7
Ci0gICAgYXV0byYgZG9jdW1lbnQgPSB0YXJnZXQuZG9jdW1lbnQoKTsKLQotICAgIGF1dG8gcmVz
dWx0ID0gYWRvcHRSZWYoKm5ldyBDU1NBbmltYXRpb24oZG9jdW1lbnQpKTsKLQorICAgIGF1dG8g
cmVzdWx0ID0gYWRvcHRSZWYoKm5ldyBDU1NBbmltYXRpb24odGFyZ2V0LmRvY3VtZW50KCksIGJh
Y2tpbmdBbmltYXRpb24pKTsKKyAgICByZXN1bHQtPm1fYW5pbWF0aW9uTmFtZSA9IGJhY2tpbmdB
bmltYXRpb24ubmFtZSgpOworICAgIHJlc3VsdC0+aW5pdGlhbGl6ZSh0YXJnZXQpOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLUNTU0FuaW1hdGlvbjo6Q1NTQW5pbWF0aW9uKERvY3VtZW50JiBk
b2N1bWVudCkKLSAgICA6IFdlYkFuaW1hdGlvbihkb2N1bWVudCkKK0NTU0FuaW1hdGlvbjo6Q1NT
QW5pbWF0aW9uKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgQW5pbWF0aW9uJiBiYWNraW5nQW5p
bWF0aW9uKQorICAgIDogRGVjbGFyYXRpdmVBbmltYXRpb24oZG9jdW1lbnQsIGJhY2tpbmdBbmlt
YXRpb24pCiB7CiB9CiAKK3ZvaWQgQ1NTQW5pbWF0aW9uOjppbml0aWFsaXplKEVsZW1lbnQmIHRh
cmdldCkKK3sKKyAgICBEZWNsYXJhdGl2ZUFuaW1hdGlvbjo6aW5pdGlhbGl6ZSh0YXJnZXQpOwor
CisgICAgZG93bmNhc3Q8S2V5ZnJhbWVFZmZlY3RSZWFkT25seT4oZWZmZWN0KCkpLT5jb21wdXRl
Q1NTQW5pbWF0aW9uQmxlbmRpbmdLZXlmcmFtZXMoKTsKK30KKwordm9pZCBDU1NBbmltYXRpb246
OnN5bmNQcm9wZXJ0aWVzV2l0aEJhY2tpbmdBbmltYXRpb24oKQoreworICAgIERlY2xhcmF0aXZl
QW5pbWF0aW9uOjpzeW5jUHJvcGVydGllc1dpdGhCYWNraW5nQW5pbWF0aW9uKCk7CisKKyAgICBz
dXNwZW5kRWZmZWN0SW52YWxpZGF0aW9uKCk7CisKKyAgICBGaWxsTW9kZSBmaWxsTW9kZTsKKyAg
ICBzd2l0Y2ggKGJhY2tpbmdBbmltYXRpb24oKS5maWxsTW9kZSgpKSB7CisgICAgY2FzZSBBbmlt
YXRpb25GaWxsTW9kZU5vbmU6CisgICAgICAgIGZpbGxNb2RlID0gRmlsbE1vZGU6Ok5vbmU7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQW5pbWF0aW9uRmlsbE1vZGVCYWNrd2FyZHM6CisgICAg
ICAgIGZpbGxNb2RlID0gRmlsbE1vZGU6OkJhY2t3YXJkczsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBbmltYXRpb25GaWxsTW9kZUZvcndhcmRzOgorICAgICAgICBmaWxsTW9kZSA9IEZpbGxN
b2RlOjpGb3J3YXJkczsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBbmltYXRpb25GaWxsTW9k
ZUJvdGg6CisgICAgICAgIGZpbGxNb2RlID0gRmlsbE1vZGU6OkJvdGg7CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIFBsYXliYWNrRGlyZWN0aW9uIGRpcmVjdGlvbjsKKyAgICBzd2l0Y2gg
KGJhY2tpbmdBbmltYXRpb24oKS5kaXJlY3Rpb24oKSkgeworICAgIGNhc2UgQW5pbWF0aW9uOjpB
bmltYXRpb25EaXJlY3Rpb25Ob3JtYWw6CisgICAgICAgIGRpcmVjdGlvbiA9IFBsYXliYWNrRGly
ZWN0aW9uOjpOb3JtYWw7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQW5pbWF0aW9uOjpBbmlt
YXRpb25EaXJlY3Rpb25BbHRlcm5hdGU6CisgICAgICAgIGRpcmVjdGlvbiA9IFBsYXliYWNrRGly
ZWN0aW9uOjpBbHRlcm5hdGU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQW5pbWF0aW9uOjpB
bmltYXRpb25EaXJlY3Rpb25SZXZlcnNlOgorICAgICAgICBkaXJlY3Rpb24gPSBQbGF5YmFja0Rp
cmVjdGlvbjo6UmV2ZXJzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBbmltYXRpb246OkFu
aW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0ZVJldmVyc2U6CisgICAgICAgIGRpcmVjdGlvbiA9IFBs
YXliYWNrRGlyZWN0aW9uOjpBbHRlcm5hdGVSZXZlcnNlOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBhdXRvKiB0aW1pbmcgPSBlZmZlY3QoKS0+dGltaW5nKCk7CisgICAgdGltaW5nLT5z
ZXRGaWxsKGZpbGxNb2RlKTsKKyAgICB0aW1pbmctPnNldERpcmVjdGlvbihkaXJlY3Rpb24pOwor
ICAgIHRpbWluZy0+c2V0SXRlcmF0aW9ucyhiYWNraW5nQW5pbWF0aW9uKCkuaXRlcmF0aW9uQ291
bnQoKSk7CisKKyAgICAvLyBTeW5jaHJvbml6ZSB0aGUgcGxheSBzdGF0ZQorICAgIGlmIChiYWNr
aW5nQW5pbWF0aW9uKCkucGxheVN0YXRlKCkgPT0gQW5pbVBsYXlTdGF0ZVBsYXlpbmcgJiYgcGxh
eVN0YXRlKCkgPT0gV2ViQW5pbWF0aW9uOjpQbGF5U3RhdGU6OlBhdXNlZCkKKyAgICAgICAgcGxh
eSgpOworICAgIGVsc2UgaWYgKGJhY2tpbmdBbmltYXRpb24oKS5wbGF5U3RhdGUoKSA9PSBBbmlt
UGxheVN0YXRlUGF1c2VkICYmIHBsYXlTdGF0ZSgpID09IFdlYkFuaW1hdGlvbjo6UGxheVN0YXRl
OjpSdW5uaW5nKQorICAgICAgICBwYXVzZSgpOworCisgICAgdW5zdXNwZW5kRWZmZWN0SW52YWxp
ZGF0aW9uKCk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1h
dGlvbi9DU1NBbmltYXRpb24uaAppbmRleCBjYTkyNGE2NTE5ZTk2OWM4MjFlOWNjZGU4ODVhY2Iw
M2MwMWNjY2E1Li5iNTY0NTYyNzI1MDFlYmY0ZWQ2NTFlMjQ0NWU1ODhkNDJjOGIyNzkxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbi5oCkBAIC0yNSw3ICsyNSw3IEBACiAK
ICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiV2ViQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAiRGVj
bGFyYXRpdmVBbmltYXRpb24uaCIKICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTMzLDcgKzMzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQW5p
bWF0aW9uOwogY2xhc3MgRWxlbWVudDsKIAotY2xhc3MgQ1NTQW5pbWF0aW9uIGZpbmFsIDogcHVi
bGljIFdlYkFuaW1hdGlvbiB7CitjbGFzcyBDU1NBbmltYXRpb24gZmluYWwgOiBwdWJsaWMgRGVj
bGFyYXRpdmVBbmltYXRpb24gewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8Q1NTQW5pbWF0aW9u
PiBjcmVhdGUoRWxlbWVudCYsIGNvbnN0IEFuaW1hdGlvbiYpOwogICAgIH5DU1NBbmltYXRpb24o
KSA9IGRlZmF1bHQ7CkBAIC00MSw4ICs0MSwxMiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0NTU0Fu
aW1hdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KICAgICBjb25zdCBTdHJp
bmcmIGFuaW1hdGlvbk5hbWUoKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlvbk5hbWU7IH0KIAor
cHJvdGVjdGVkOgorICAgIHZvaWQgaW5pdGlhbGl6ZShFbGVtZW50JikgZmluYWw7CisgICAgdm9p
ZCBzeW5jUHJvcGVydGllc1dpdGhCYWNraW5nQW5pbWF0aW9uKCkgZmluYWw7CisKIHByaXZhdGU6
Ci0gICAgQ1NTQW5pbWF0aW9uKERvY3VtZW50Jik7CisgICAgQ1NTQW5pbWF0aW9uKERvY3VtZW50
JiwgY29uc3QgQW5pbWF0aW9uJik7CiAKICAgICBTdHJpbmcgbV9hbmltYXRpb25OYW1lOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTVHJhbnNpdGlvbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTVHJhbnNpdGlvbi5jcHAKaW5kZXggNzMwNDQyZmZk
ODAwNTNjMDJkOTQ3NTY0MzMxMzk3YjI5Mzk5MzhhNS4uOTdmYWQzZTg1MGQzNTRiZjY0ODQ0MWY2
YzcyNzQzNjA5MDg2M2FiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NT
U1RyYW5zaXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NUcmFuc2l0
aW9uLmNwcApAQCAtMjgsMjEgKzI4LDM3IEBACiAKICNpbmNsdWRlICJBbmltYXRpb24uaCIKICNp
bmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiS2V5ZnJhbWVFZmZlY3RSZWFkT25seS5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlZjxDU1NUcmFuc2l0aW9uPiBDU1NUcmFuc2l0aW9u
OjpjcmVhdGUoRWxlbWVudCYgdGFyZ2V0LCBjb25zdCBBbmltYXRpb24mKQorUmVmPENTU1RyYW5z
aXRpb24+IENTU1RyYW5zaXRpb246OmNyZWF0ZShFbGVtZW50JiB0YXJnZXQsIGNvbnN0IEFuaW1h
dGlvbiYgYmFja2luZ0FuaW1hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlLCBjb25z
dCBSZW5kZXJTdHlsZSYgbmV3U3R5bGUpCiB7Ci0gICAgYXV0byYgZG9jdW1lbnQgPSB0YXJnZXQu
ZG9jdW1lbnQoKTsKKyAgICBhdXRvIHJlc3VsdCA9IGFkb3B0UmVmKCpuZXcgQ1NTVHJhbnNpdGlv
bih0YXJnZXQuZG9jdW1lbnQoKSwgYmFja2luZ0FuaW1hdGlvbikpOworICAgIHJlc3VsdC0+bV90
cmFuc2l0aW9uUHJvcGVydHkgPSBiYWNraW5nQW5pbWF0aW9uLnByb3BlcnR5KCk7CisgICAgcmVz
dWx0LT5pbml0aWFsaXplKHRhcmdldCk7CisgICAgZG93bmNhc3Q8S2V5ZnJhbWVFZmZlY3RSZWFk
T25seT4ocmVzdWx0LT5lZmZlY3QoKSktPmNvbXB1dGVDU1NUcmFuc2l0aW9uQmxlbmRpbmdLZXlm
cmFtZXMob2xkU3R5bGUsIG5ld1N0eWxlKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQogCi0gICAg
YXV0byByZXN1bHQgPSBhZG9wdFJlZigqbmV3IENTU1RyYW5zaXRpb24oZG9jdW1lbnQpKTsKK0NT
U1RyYW5zaXRpb246OkNTU1RyYW5zaXRpb24oRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBBbmlt
YXRpb24mIGJhY2tpbmdBbmltYXRpb24pCisgICAgOiBEZWNsYXJhdGl2ZUFuaW1hdGlvbihkb2N1
bWVudCwgYmFja2luZ0FuaW1hdGlvbikKK3sKK30KIAotICAgIHJldHVybiByZXN1bHQ7Citib29s
IENTU1RyYW5zaXRpb246Om1hdGNoZXNCYWNraW5nQW5pbWF0aW9uQW5kU3R5bGVzKGNvbnN0IEFu
aW1hdGlvbiYgbmV3QmFja2luZ0FuaW1hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxl
LCBjb25zdCBSZW5kZXJTdHlsZSYgbmV3U3R5bGUpIGNvbnN0Cit7CisgICAgYm9vbCBiYWNraW5n
QW5pbWF0aW9uc01hdGNoID0gYmFja2luZ0FuaW1hdGlvbigpID09IG5ld0JhY2tpbmdBbmltYXRp
b247CisgICAgaWYgKCFvbGRTdHlsZSkKKyAgICAgICAgcmV0dXJuIGJhY2tpbmdBbmltYXRpb25z
TWF0Y2g7CisgICAgcmV0dXJuIGJhY2tpbmdBbmltYXRpb25zTWF0Y2ggJiYgIWRvd25jYXN0PEtl
eWZyYW1lRWZmZWN0UmVhZE9ubHk+KGVmZmVjdCgpKS0+c3R5bGVzV291bGRZaWVsZE5ld0NTU1Ry
YW5zaXRpb25zQmxlbmRpbmdLZXlmcmFtZXMoKm9sZFN0eWxlLCBuZXdTdHlsZSk7CiB9CiAKLUNT
U1RyYW5zaXRpb246OkNTU1RyYW5zaXRpb24oRG9jdW1lbnQmIGRvY3VtZW50KQotICAgIDogV2Vi
QW5pbWF0aW9uKGRvY3VtZW50KQorYm9vbCBDU1NUcmFuc2l0aW9uOjpjYW5CZUxpc3RlZCgpIGNv
bnN0CiB7CisgICAgaWYgKCFkb3duY2FzdDxLZXlmcmFtZUVmZmVjdFJlYWRPbmx5PihlZmZlY3Qo
KSktPmhhc0JsZW5kaW5nS2V5ZnJhbWVzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBy
ZXR1cm4gV2ViQW5pbWF0aW9uOjpjYW5CZUxpc3RlZCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTVHJhbnNpdGlv
bi5oIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU1RyYW5zaXRpb24uaAppbmRleCAxMTUx
MzMzZDQ4ZTRkZmFjOGUwMzQyZGU1ZTZkNzFlZmY0YzNkZjJjLi4zNWYwZWQwYTliZjU4YjRjM2Q2
ZTBkOTBhZTVmMGNhZmJmMTQ2YTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRp
b24vQ1NTVHJhbnNpdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NUcmFu
c2l0aW9uLmgKQEAgLTI2LDI0ICsyNiwyOCBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJD
U1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAiV2ViQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAi
RGVjbGFyYXRpdmVBbmltYXRpb24uaCIKICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgQW5pbWF0aW9uOwogY2xhc3MgRWxlbWVudDsKK2NsYXNzIFJl
bmRlclN0eWxlOwogCi1jbGFzcyBDU1NUcmFuc2l0aW9uIGZpbmFsIDogcHVibGljIFdlYkFuaW1h
dGlvbiB7CitjbGFzcyBDU1NUcmFuc2l0aW9uIGZpbmFsIDogcHVibGljIERlY2xhcmF0aXZlQW5p
bWF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENTU1RyYW5zaXRpb24+IGNyZWF0ZShF
bGVtZW50JiwgY29uc3QgQW5pbWF0aW9uJik7CisgICAgc3RhdGljIFJlZjxDU1NUcmFuc2l0aW9u
PiBjcmVhdGUoRWxlbWVudCYsIGNvbnN0IEFuaW1hdGlvbiYsIGNvbnN0IFJlbmRlclN0eWxlKiBv
bGRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIG5ld1N0eWxlKTsKICAgICB+Q1NTVHJhbnNpdGlv
bigpID0gZGVmYXVsdDsKIAogICAgIGJvb2wgaXNDU1NUcmFuc2l0aW9uKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gdHJ1ZTsgfQogICAgIFN0cmluZyB0cmFuc2l0aW9uUHJvcGVydHkoKSBjb25z
dCB7IHJldHVybiBnZXRQcm9wZXJ0eU5hbWVTdHJpbmcobV90cmFuc2l0aW9uUHJvcGVydHkpOyB9
CiAKKyAgICBib29sIG1hdGNoZXNCYWNraW5nQW5pbWF0aW9uQW5kU3R5bGVzKGNvbnN0IEFuaW1h
dGlvbiYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIG5l
d1N0eWxlKSBjb25zdDsKKyAgICBib29sIGNhbkJlTGlzdGVkKCkgY29uc3QgZmluYWw7CisKIHBy
aXZhdGU6Ci0gICAgQ1NTVHJhbnNpdGlvbihEb2N1bWVudCYpOworICAgIENTU1RyYW5zaXRpb24o
RG9jdW1lbnQmLCBjb25zdCBBbmltYXRpb24mKTsKIAogICAgIENTU1Byb3BlcnR5SUQgbV90cmFu
c2l0aW9uUHJvcGVydHk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9E
ZWNsYXJhdGl2ZUFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vRGVjbGFy
YXRpdmVBbmltYXRpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY5MTAyZDE1NzIwMjFjMDZkMmJmOGY5NmJi
MGI4YWIyYmFkMmFlNjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRp
b24vRGVjbGFyYXRpdmVBbmltYXRpb24uY3BwCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiRGVjbGFyYXRpdmVBbmltYXRpb24uaCIKKworI2luY2x1ZGUgIkFuaW1hdGlvbi5o
IgorI2luY2x1ZGUgIkFuaW1hdGlvbkVmZmVjdFRpbWluZ1JlYWRPbmx5LmgiCisjaW5jbHVkZSAi
RWxlbWVudC5oIgorI2luY2x1ZGUgIktleWZyYW1lRWZmZWN0UmVhZE9ubHkuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitEZWNsYXJhdGl2ZUFuaW1hdGlvbjo6RGVjbGFyYXRpdmVBbmltYXRp
b24oRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBBbmltYXRpb24mIGJhY2tpbmdBbmltYXRpb24p
CisgICAgOiBXZWJBbmltYXRpb24oZG9jdW1lbnQpCisgICAgLCBtX2JhY2tpbmdBbmltYXRpb24o
Y29uc3RfY2FzdDxBbmltYXRpb24mPihiYWNraW5nQW5pbWF0aW9uKSkKK3sKK30KKwordm9pZCBE
ZWNsYXJhdGl2ZUFuaW1hdGlvbjo6c2V0QmFja2luZ0FuaW1hdGlvbihjb25zdCBBbmltYXRpb24m
IGJhY2tpbmdBbmltYXRpb24pCit7CisgICAgbV9iYWNraW5nQW5pbWF0aW9uID0gY29uc3RfY2Fz
dDxBbmltYXRpb24mPihiYWNraW5nQW5pbWF0aW9uKTsKKyAgICBzeW5jUHJvcGVydGllc1dpdGhC
YWNraW5nQW5pbWF0aW9uKCk7Cit9CisKK3ZvaWQgRGVjbGFyYXRpdmVBbmltYXRpb246OmluaXRp
YWxpemUoRWxlbWVudCYgdGFyZ2V0KQoreworICAgIC8vIFdlIG5lZWQgdG8gc3VzcGVuZCBpbnZh
bGlkYXRpb24gb2YgdGhlIGFuaW1hdGlvbidzIGtleWZyYW1lIGVmZmVjdCBkdXJpbmcgaXRzIGNy
ZWF0aW9uCisgICAgLy8gYXMgaXQgd291bGQgb3RoZXJ3aXNlIHRyaWdnZXIgaW52YWxpZGF0aW9u
IG9mIHRoZSBkb2N1bWVudCdzIHN0eWxlIGFuZCB0aGlzIHdvdWxkIGJlCisgICAgLy8gaW5jb3Jy
ZWN0IHNpbmNlIGl0IHdvdWxkIGhhcHBlbiBkdXJpbmcgc3R5bGUgaW52YWxpZGF0aW9uLgorICAg
IHN1c3BlbmRFZmZlY3RJbnZhbGlkYXRpb24oKTsKKworICAgIGF1dG8gZWZmZWN0ID0gS2V5ZnJh
bWVFZmZlY3RSZWFkT25seTo6Y3JlYXRlKHRhcmdldCk7CisgICAgc2V0RWZmZWN0KFdURk1vdmUo
ZWZmZWN0KSk7CisgICAgc2V0VGltZWxpbmUoJnRhcmdldC5kb2N1bWVudCgpLnRpbWVsaW5lKCkp
OworICAgIHN5bmNQcm9wZXJ0aWVzV2l0aEJhY2tpbmdBbmltYXRpb24oKTsKKyAgICBpZiAoYmFj
a2luZ0FuaW1hdGlvbigpLnBsYXlTdGF0ZSgpID09IEFuaW1QbGF5U3RhdGVQbGF5aW5nKQorICAg
ICAgICBwbGF5KCk7CisKKyAgICB1bnN1c3BlbmRFZmZlY3RJbnZhbGlkYXRpb24oKTsKK30KKwor
dm9pZCBEZWNsYXJhdGl2ZUFuaW1hdGlvbjo6c3luY1Byb3BlcnRpZXNXaXRoQmFja2luZ0FuaW1h
dGlvbigpCit7CisgICAgc3VzcGVuZEVmZmVjdEludmFsaWRhdGlvbigpOworCisgICAgYXV0byog
dGltaW5nID0gZWZmZWN0KCktPnRpbWluZygpOworICAgIHRpbWluZy0+c2V0RGVsYXkoU2Vjb25k
cyhtX2JhY2tpbmdBbmltYXRpb24tPmRlbGF5KCkpKTsKKyAgICB0aW1pbmctPnNldEl0ZXJhdGlv
bkR1cmF0aW9uKFNlY29uZHMobV9iYWNraW5nQW5pbWF0aW9uLT5kdXJhdGlvbigpKSk7CisgICAg
dGltaW5nLT5zZXRUaW1pbmdGdW5jdGlvbihtX2JhY2tpbmdBbmltYXRpb24tPnRpbWluZ0Z1bmN0
aW9uKCkpOworCisgICAgdW5zdXNwZW5kRWZmZWN0SW52YWxpZGF0aW9uKCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9E
ZWNsYXJhdGl2ZUFuaW1hdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RlY2xhcmF0
aXZlQW5pbWF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWMyN2Q5YTNhMmFkYzg5OTMwOTU5YzhlYTk3YzRm
ZDZkMTJkYTA2OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9E
ZWNsYXJhdGl2ZUFuaW1hdGlvbi5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldl
YkFuaW1hdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBBbmltYXRpb247CitjbGFzcyBFbGVtZW50OworCitjbGFzcyBEZWNsYXJhdGl2
ZUFuaW1hdGlvbiA6IHB1YmxpYyBXZWJBbmltYXRpb24geworcHVibGljOgorICAgIH5EZWNsYXJh
dGl2ZUFuaW1hdGlvbigpID0gZGVmYXVsdDsKKworICAgIGJvb2wgaXNEZWNsYXJhdGl2ZUFuaW1h
dGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKworICAgIGNvbnN0IEFuaW1hdGlv
biYgYmFja2luZ0FuaW1hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZ0FuaW1hdGlvbjsg
fQorICAgIHZvaWQgc2V0QmFja2luZ0FuaW1hdGlvbihjb25zdCBBbmltYXRpb24mKTsKKworcHJv
dGVjdGVkOgorICAgIERlY2xhcmF0aXZlQW5pbWF0aW9uKERvY3VtZW50JiwgY29uc3QgQW5pbWF0
aW9uJik7CisKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZShFbGVtZW50Jik7CisgICAgdmly
dHVhbCB2b2lkIHN5bmNQcm9wZXJ0aWVzV2l0aEJhY2tpbmdBbmltYXRpb24oKTsKKworcHJpdmF0
ZToKKyAgICBSZWY8QW5pbWF0aW9uPiBtX2JhY2tpbmdBbmltYXRpb247CisKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XRUJfQU5JTUFUSU9O
KERlY2xhcmF0aXZlQW5pbWF0aW9uLCBpc0RlY2xhcmF0aXZlQW5pbWF0aW9uKCkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vS2V5ZnJhbWVFZmZlY3RSZWFkT25seS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vS2V5ZnJhbWVFZmZlY3RSZWFkT25seS5jcHAKaW5k
ZXggNjhiZTJjMWM3MTI5NjNiZjlhODQ2YWU0YzMxM2QzNDY0NWM1ZDAwNy4uMTg1OTJmNmY5Y2Rm
ZGUxNWViMWE4YWYxNzExNmQ2MmFlNGQzYzJjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0UmVhZE9ubHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdFJlYWRPbmx5LmNwcApAQCAtNDQ2LDYgKzQ0NiwxNSBA
QCBFeGNlcHRpb25PcjxSZWY8S2V5ZnJhbWVFZmZlY3RSZWFkT25seT4+IEtleWZyYW1lRWZmZWN0
UmVhZE9ubHk6OmNyZWF0ZShKU0M6OkV4ZQogICAgIHJldHVybiBXVEZNb3ZlKGtleWZyYW1lRWZm
ZWN0KTsKIH0KIAorUmVmPEtleWZyYW1lRWZmZWN0UmVhZE9ubHk+IEtleWZyYW1lRWZmZWN0UmVh
ZE9ubHk6OmNyZWF0ZShFbGVtZW50JiB0YXJnZXQpCit7CisgICAgYXV0byB0aW1pbmcgPSBBbmlt
YXRpb25FZmZlY3RUaW1pbmdSZWFkT25seTo6Y3JlYXRlKCk7CisKKyAgICBhdXRvIGtleWZyYW1l
RWZmZWN0ID0gYWRvcHRSZWYoKm5ldyBLZXlmcmFtZUVmZmVjdFJlYWRPbmx5KEtleWZyYW1lRWZm
ZWN0UmVhZE9ubHlDbGFzcywgV1RGTW92ZSh0aW1pbmcpLCAmdGFyZ2V0KSk7CisKKyAgICByZXR1
cm4ga2V5ZnJhbWVFZmZlY3Q7Cit9CisKIEtleWZyYW1lRWZmZWN0UmVhZE9ubHk6OktleWZyYW1l
RWZmZWN0UmVhZE9ubHkoQ2xhc3NUeXBlIGNsYXNzVHlwZSwgUmVmPEFuaW1hdGlvbkVmZmVjdFRp
bWluZ1JlYWRPbmx5PiYmIHRpbWluZywgRWxlbWVudCogdGFyZ2V0KQogICAgIDogQW5pbWF0aW9u
RWZmZWN0UmVhZE9ubHkoY2xhc3NUeXBlLCBXVEZNb3ZlKHRpbWluZykpCiAgICAgLCBtX3Rhcmdl
dCh0YXJnZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vS2V5ZnJhbWVF
ZmZlY3RSZWFkT25seS5oIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0
UmVhZE9ubHkuaAppbmRleCAzYzUzYzBjNjBlZGY3YjY3NjVhZDVkZmE5OWUxMjViZDhlMGI2ZmI2
Li4zN2RhZjEzMjg4MmRlOGFkMjUzNzFkYmQ4YzRjNmJlYzRmN2E1Mjk0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9hbmltYXRpb24vS2V5ZnJhbWVFZmZlY3RSZWFkT25seS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdFJlYWRPbmx5LmgKQEAgLTQ2LDYg
KzQ2LDcgQEAgY2xhc3MgS2V5ZnJhbWVFZmZlY3RSZWFkT25seSA6IHB1YmxpYyBBbmltYXRpb25F
ZmZlY3RSZWFkT25seQogcHVibGljOgogICAgIHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8S2V5ZnJh
bWVFZmZlY3RSZWFkT25seT4+IGNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSYsIEVsZW1lbnQqLCBKU0M6
OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiYmLCBzdGQ6Om9wdGlvbmFsPFZhcmlhbnQ8ZG91YmxlLCBL
ZXlmcmFtZUVmZmVjdE9wdGlvbnM+PiYmKTsKICAgICBzdGF0aWMgRXhjZXB0aW9uT3I8UmVmPEtl
eWZyYW1lRWZmZWN0UmVhZE9ubHk+PiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUmLCBSZWY8S2V5ZnJh
bWVFZmZlY3RSZWFkT25seT4mJik7CisgICAgc3RhdGljIFJlZjxLZXlmcmFtZUVmZmVjdFJlYWRP
bmx5PiBjcmVhdGUoRWxlbWVudCYpOwogICAgIH5LZXlmcmFtZUVmZmVjdFJlYWRPbmx5KCkgeyB9
CiAKICAgICBzdHJ1Y3QgQmFzZVByb3BlcnR5SW5kZXhlZEtleWZyYW1lIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9XZWJBbmltYXRpb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvYW5pbWF0aW9uL1dlYkFuaW1hdGlvbi5jcHAKaW5kZXggNjkzOTUyZmY4MjE3YWU4YTg5YjRj
MzkxODdkYTA2OTQwMmYxYjZmZC4uODlhYWM3MTllZWZlZjg1Mjc2MGFmNWMyYWM1ZmE4MTZhZDU5
OGY5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL1dlYkFuaW1hdGlvbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL1dlYkFuaW1hdGlvbi5jcHAKQEAgLTcy
LDkgKzcyLDIwIEBAIFdlYkFuaW1hdGlvbjo6fldlYkFuaW1hdGlvbigpCiAgICAgICAgIG1fdGlt
ZWxpbmUtPnJlbW92ZUFuaW1hdGlvbigqdGhpcyk7CiB9CiAKK3ZvaWQgV2ViQW5pbWF0aW9uOjpz
dXNwZW5kRWZmZWN0SW52YWxpZGF0aW9uKCkKK3sKKyAgICArK21fc3VzcGVuZENvdW50OworfQor
Cit2b2lkIFdlYkFuaW1hdGlvbjo6dW5zdXNwZW5kRWZmZWN0SW52YWxpZGF0aW9uKCkKK3sKKyAg
ICBBU1NFUlQobV9zdXNwZW5kQ291bnQgPiAwKTsKKyAgICAtLW1fc3VzcGVuZENvdW50OworfQor
CiB2b2lkIFdlYkFuaW1hdGlvbjo6dGltaW5nTW9kZWxEaWRDaGFuZ2UoKQogewotICAgIGlmICht
X2VmZmVjdCkKKyAgICBpZiAoIWlzRWZmZWN0SW52YWxpZGF0aW9uU3VzcGVuZGVkKCkgJiYgbV9l
ZmZlY3QpCiAgICAgICAgIG1fZWZmZWN0LT5pbnZhbGlkYXRlKCk7CiAgICAgaWYgKG1fdGltZWxp
bmUpCiAgICAgICAgIG1fdGltZWxpbmUtPnRpbWluZ01vZGVsRGlkQ2hhbmdlKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vV2ViQW5pbWF0aW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9hbmltYXRpb24vV2ViQW5pbWF0aW9uLmgKaW5kZXggOWE4OTA5N2U1ZjIzZGEyMGU0OWIx
YzE4NDQ3ZDYxNjQ0OWVjN2FkNS4uYTg1NmJiN2NhNDNkZGZiYmNjZjkyMTJlZTZjZGUxNTFmNGQ2
ZWZjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL1dlYkFuaW1hdGlvbi5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9XZWJBbmltYXRpb24uaApAQCAtNTIsNiAr
NTIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxXZWJBbmltYXRpb24+IGNyZWF0ZShEb2N1
bWVudCYsIEFuaW1hdGlvbkVmZmVjdFJlYWRPbmx5KiwgQW5pbWF0aW9uVGltZWxpbmUqKTsKICAg
ICB+V2ViQW5pbWF0aW9uKCk7CiAKKyAgICB2aXJ0dWFsIGJvb2wgaXNEZWNsYXJhdGl2ZUFuaW1h
dGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzQ1NTQW5p
bWF0aW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNDU1NU
cmFuc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIApAQCAtMTA1LDYgKzEwNiw4IEBA
IHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZUZpbmlzaGVkU3RhdGUoRGlkU2VlaywgU3luY2hyb25v
dXNseU5vdGlmeSk7CiAKICAgICB2b2lkIHRpbWluZ01vZGVsRGlkQ2hhbmdlKCk7CisgICAgdm9p
ZCBzdXNwZW5kRWZmZWN0SW52YWxpZGF0aW9uKCk7CisgICAgdm9pZCB1bnN1c3BlbmRFZmZlY3RJ
bnZhbGlkYXRpb24oKTsKIAogICAgIFN0cmluZyBkZXNjcmlwdGlvbigpOwogCkBAIC0xMTQsNiAr
MTE3LDggQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IFdlYkFuaW1hdGlvbihE
b2N1bWVudCYpOwogCisgICAgYm9vbCBpc0VmZmVjdEludmFsaWRhdGlvblN1c3BlbmRlZCgpIHsg
cmV0dXJuIG1fc3VzcGVuZENvdW50OyB9CisKIHByaXZhdGU6CiAgICAgZW51bSBjbGFzcyBSZXNw
ZWN0SG9sZFRpbWUgeyBZZXMsIE5vIH07CiAgICAgZW51bSBjbGFzcyBBdXRvUmV3aW5kIHsgWWVz
LCBObyB9OwpAQCAtMTQ1LDYgKzE1MCw3IEBAIHByaXZhdGU6CiAgICAgc3RkOjpvcHRpb25hbDxT
ZWNvbmRzPiBtX3ByZXZpb3VzQ3VycmVudFRpbWU7CiAgICAgc3RkOjpvcHRpb25hbDxTZWNvbmRz
PiBtX3N0YXJ0VGltZTsKICAgICBzdGQ6Om9wdGlvbmFsPFNlY29uZHM+IG1faG9sZFRpbWU7Cisg
ICAgaW50IG1fc3VzcGVuZENvdW50IHsgMCB9OwogICAgIGRvdWJsZSBtX3BsYXliYWNrUmF0ZSB7
IDEgfTsKICAgICBib29sIG1faXNTdG9wcGVkIHsgZmFsc2UgfTsKICAgICBib29sIG1fZmluaXNo
Tm90aWZpY2F0aW9uU3RlcHNNaWNyb3Rhc2tQZW5kaW5nOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNXZWJBbmltYXRpb25DdXN0b20uY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNXZWJBbmltYXRpb25DdXN0b20uY3BwCmluZGV4IGFlOTUzMTJhZThl
NTcxYWZmMzBhMDMwY2YzZWM2ZDljMzlmMzk0MTMuLjdiNTRkNjhlOGZjYWFiM2NhNjJlNDA0MGMy
NjJjZDdjNTBiYmRjYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
V2ViQW5pbWF0aW9uQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dlYkFuaW1hdGlvbkN1c3RvbS5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJKU1dlYkFuaW1hdGlvbi5oIgogCisjaW5jbHVkZSAiQ1NTQW5pbWF0
aW9uLmgiCiAjaW5jbHVkZSAiSlNBbmltYXRpb25FZmZlY3RSZWFkT25seS5oIgogI2luY2x1ZGUg
IkpTQW5pbWF0aW9uVGltZWxpbmUuaCIKICNpbmNsdWRlICJKU0NTU0FuaW1hdGlvbi5oIgo=
</data>
<flag name="review"
          id="354188"
          type_id="1"
          status="+"
          setter="dino"
    />
          </attachment>
      

    </bug>

</bugzilla>