<?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>197100</bug_id>
          
          <creation_ts>2019-04-19 02:17:12 -0700</creation_ts>
          <short_desc>[GTK] Slow scrolling (not matching GTK native scroll amount)</short_desc>
          <delta_ts>2021-10-25 03:06:49 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Scrolling</component>
          <version>Other</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=203914</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>232229</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="François Grabenstaetter">francoisgrabenstaetter</reporter>
          <assigned_to name="Chris Lord">clord</assigned_to>
          <cc>alicem</cc>
    
    <cc>clord</cc>
    
    <cc>francoisgrabenstaetter</cc>
    
    <cc>jer.noble</cc>
    
    <cc>koivisto</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>mrobinson</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1528734</commentid>
    <comment_count>0</comment_count>
    <who name="François Grabenstaetter">francoisgrabenstaetter</who>
    <bug_when>2019-04-19 02:17:12 -0700</bug_when>
    <thetext>The WebKitGTK scrolling In Epiphany browser is too slow and does not match the GTK native scrolling amount.

A similar ticket asks for options to adjust scroll amount and scroll acceleration here: https://bugs.webkit.org/show_bug.cgi?id=166649
But I think we should start to make the default scroll amount match the GTK native scroll.

Steps to Reproduce:
* Open Epiphany and a website
* Scroll with the mouse

Actual Results:
=&gt; Too slow scrolling

Expected Results: 
=&gt; A scrolling that matches the GTK native scrolling (~ X2 scroll amount ?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1802413</commentid>
    <comment_count>1</comment_count>
    <who name="Alice Mikhaylenko">alicem</who>
    <bug_when>2021-10-09 15:20:52 -0700</bug_when>
    <thetext>More info:

- This doesn&apos;t affect touchpad/per-pixel scrolling
- This happens regardless of async scrolling or not
- Happens with keyboard too

An easy reproducer - hold pgdown on https://planet.webkitgtk.org/

My theory is - it&apos;s related to smooth scrolling, when you have quickly incoming scroll events, the next event cancels animation from the last one and triggers a new animation without compensating for the fact the last animation stopped early. So if you press pgdown repeatedly but wait for the animation to finish each time, it&apos;s a lot faster than when you hold it, BUT the first (because key repeat delay) and last animations finish and so it&apos;s visible how the beginning and end of the scrolling is faster.

That happens in trunk though - 2.33.91 (sorry, 2.34.0 is not in the flatpak platform yet) seems to do something different and pgdown is too fast instead (while mouse scrolling is same as in trunk) - no idea here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1802566</commentid>
    <comment_count>2</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-10-11 03:18:58 -0700</bug_when>
    <thetext>(In reply to Alexander Mikhaylenko from comment #1)
&gt; More info:
&gt; 
&gt; - This doesn&apos;t affect touchpad/per-pixel scrolling
&gt; - This happens regardless of async scrolling or not
&gt; - Happens with keyboard too
&gt; 
&gt; An easy reproducer - hold pgdown on https://planet.webkitgtk.org/
&gt; 
&gt; My theory is - it&apos;s related to smooth scrolling, when you have quickly
&gt; incoming scroll events, the next event cancels animation from the last one
&gt; and triggers a new animation without compensating for the fact the last
&gt; animation stopped early. So if you press pgdown repeatedly but wait for the
&gt; animation to finish each time, it&apos;s a lot faster than when you hold it, BUT
&gt; the first (because key repeat delay) and last animations finish and so it&apos;s
&gt; visible how the beginning and end of the scrolling is faster.
&gt; 
&gt; That happens in trunk though - 2.33.91 (sorry, 2.34.0 is not in the flatpak
&gt; platform yet) seems to do something different and pgdown is too fast instead
&gt; (while mouse scrolling is same as in trunk) - no idea here.

Testing on master, I don&apos;t see this problem - behaviour between smooth and non-smooth in terms of the distance scrolled per mouse-wheel ticks in very quick succession (so they interrupt the animation) is the same.

However, I do see the interrupted smooth scrolling issue with keyboard scrolling (which is a different code-path, so doesn&apos;t surprise me). Could you possibly test again using minibrowser from a master checkout and update here what results you get and what you expect?

For reference, here is the code that stops this from happening with smooth scrolling from mouse-wheel events (and it&apos;s shared between sync and async paths): https://github.com/WebKit/WebKit/blob/a7eb93bd9b7414f627d8c7038a7163f3cc3945fd/Source/WebCore/platform/ScrollingEffectsController.cpp#L344</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1803698</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-10-13 03:59:22 -0700</bug_when>
    <thetext>For now I&apos;m looking at the keyboard scrolling code and seeing what we can do here. It doesn&apos;t look like the code is Mac-specific, but I don&apos;t think we call into it (and async side, we don&apos;t have a keyboard scrolling animator at all), so there&apos;s some work to be done here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1806063</commentid>
    <comment_count>4</comment_count>
      <attachid>441740</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-10-19 09:29:18 -0700</bug_when>
    <thetext>Created attachment 441740
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1806076</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-10-19 09:37:30 -0700</bug_when>
    <thetext>So this patch is what I consider &quot;good enough&quot;, but isn&apos;t the most ideal thing. For interrupted smooth scrolling, this patch makes it recalculate the duration and change the animation curve from ease-in-out to ease-out - at least perceptibly, this basically does what we want, but isn&apos;t mathematically correct.

Regarding the keyboard, this adds a new function to ScrollingEffectsController called offsetAnimatedScrollDestination exactly for this situation, and the previous special-case for mouse-wheel smooth scrolling now just calls this function.

In terms of the &apos;correct&apos; way of implementing this, we would ideally use the inverse of the animation curve calculation to make the perfect alteration of animation parameters to extend the existing ease-in-out animation in a perfect way. I&apos;ve done this before, but in practice it&apos;s a pain, and it&apos;d be much easier to get rid of an animation curve altogether and use a very basic physics simulation to control the animation instead.

I notice that ScrollingAnimationMomentum is basically a reimplementation of the ScrollingAnimationKinetic interface, but allowing pluggable behaviour - At some point we need to convert ScrollingAnimationKinetic into a GenericScrollingMomentumCalculator and share more code. It&apos;s a shame this wasn&apos;t done as part of the patch that added it in the first place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1806078</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-10-19 09:38:24 -0700</bug_when>
    <thetext>Unfortunately I&apos;m out of time today as well, so I&apos;ll have to rebase this tomorrow - if anyone gets to reviewing this, do feel free to go ahead if you think the rebase doesn&apos;t change things in any meaningful way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1806106</commentid>
    <comment_count>7</comment_count>
      <attachid>441740</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-10-19 10:04:07 -0700</bug_when>
    <thetext>Comment on attachment 441740
Patch

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

&gt; Source/WebCore/platform/ScrollAnimation.h:78
&gt; +    virtual FloatPoint predictedDestinationOffset() const = 0;

The &quot;predicted&quot; part is only true for momentum animations; for other animations, the destination is specified up-front. Maybe this should just be std::optional&lt;FloatPoint&gt; destinationOffset()?

&gt; Source/WebCore/platform/ScrollAnimationSmooth.cpp:62
&gt; +    // FIXME: This is a hangover of previous behaviour, but given there&apos;s a specific
&gt; +    //        retargetActiveAnimation function, maybe this should always restart the animation?

Yeah I think this should always use ease-in-out.

&gt; Source/WebCore/platform/ScrollingEffectsController.h:138
&gt; +    bool offsetAnimatedScrollDestination(FloatSize offset);

Use of &quot;offset&quot; as a verb here is confusing. We don&apos;t do that anywhere else in scrolling code. Maybe retargetAnimatedScrollBy(FloatSize)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1806653</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-10-20 09:13:33 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #7)
&gt; Comment on attachment 441740 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=441740&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/ScrollAnimation.h:78
&gt; &gt; +    virtual FloatPoint predictedDestinationOffset() const = 0;
&gt; 
&gt; The &quot;predicted&quot; part is only true for momentum animations; for other
&gt; animations, the destination is specified up-front. Maybe this should just be
&gt; std::optional&lt;FloatPoint&gt; destinationOffset()?
&gt; 
&gt; &gt; Source/WebCore/platform/ScrollAnimationSmooth.cpp:62
&gt; &gt; +    // FIXME: This is a hangover of previous behaviour, but given there&apos;s a specific
&gt; &gt; +    //        retargetActiveAnimation function, maybe this should always restart the animation?
&gt; 
&gt; Yeah I think this should always use ease-in-out.
&gt; 
&gt; &gt; Source/WebCore/platform/ScrollingEffectsController.h:138
&gt; &gt; +    bool offsetAnimatedScrollDestination(FloatSize offset);
&gt; 
&gt; Use of &quot;offset&quot; as a verb here is confusing. We don&apos;t do that anywhere else
&gt; in scrolling code. Maybe retargetAnimatedScrollBy(FloatSize)

These are all excellent suggestions, implementing now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1806666</commentid>
    <comment_count>9</comment_count>
      <attachid>441891</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-10-20 09:58:19 -0700</bug_when>
    <thetext>Created attachment 441891
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1806667</commentid>
    <comment_count>10</comment_count>
      <attachid>441891</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-10-20 10:02:33 -0700</bug_when>
    <thetext>Comment on attachment 441891
Patch

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

&gt; Source/WebCore/platform/ScrollAnimationSmooth.cpp:81
&gt; +    m_timingFunction = CubicBezierTimingFunction::create(CubicBezierTimingFunction::TimingFunctionPreset::EaseOut);

It&apos;s possible that this won&apos;t result in a smooth transition from old to new curve. Ideally we&apos;d keep the ease-in-out and just readjust the current time within the existing interval.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1807056</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-10-21 02:20:01 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #10)
&gt; Comment on attachment 441891 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=441891&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/ScrollAnimationSmooth.cpp:81
&gt; &gt; +    m_timingFunction = CubicBezierTimingFunction::create(CubicBezierTimingFunction::TimingFunctionPreset::EaseOut);
&gt; 
&gt; It&apos;s possible that this won&apos;t result in a smooth transition from old to new
&gt; curve. Ideally we&apos;d keep the ease-in-out and just readjust the current time
&gt; within the existing interval.

Agreed/understood, though doing the inverse of the ease-in-out calculation is non-trivial and try as I might, given the parameters going in on a GNOME3 desktop at least, I couldn&apos;t get this to look or feel bad... So I went for the simpler fix. Worth reinvestigating when more of this code is shared between all platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1807062</commentid>
    <comment_count>12</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-10-21 02:53:57 -0700</bug_when>
    <thetext>Committed r284596 (243327@main): &lt;https://commits.webkit.org/243327@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 441891.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1807063</commentid>
    <comment_count>13</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-10-21 02:54:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/84499836&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>441740</attachid>
            <date>2021-10-19 09:29:18 -0700</date>
            <delta_ts>2021-10-20 09:58:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-197100-20211019172917.patch</filename>
            <type>text/plain</type>
            <size>14442</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg0MDg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjYyZGE4NWFmOTJhYWFm
ZjM3NTc0Y2FjMTM2ZmM0NzQ4MGY0ZmYzYS4uZWZjZGFiZGFhMjE3YzA0ZDIwNWViN2Y0MGFjMDY4
NGYyNDZjOTgwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDIxLTEwLTE5ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBTbG93IHNjcm9sbGlu
ZyAobm90IG1hdGNoaW5nIEdUSyBuYXRpdmUgc2Nyb2xsIGFtb3VudCkKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NzEwMAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCB1cCBiZWhhdmlvdXIgd2l0aCBp
bnRlcnJ1cHRpbmcgc21vb3RoIHNjcm9sbGluZywgbWFpbmx5IG9uCisgICAgICAgIGtleWJvYXJk
LWluaXRpYXRlZCBzY3JvbGxpbmcsIGJ1dCBhbHNvIGZvciB0aGUgbW91c2Utd2hlZWwuIFdoZW4K
KyAgICAgICAgaW50ZXJydXB0aW5nIGEgc21vb3RoIHNjcm9sbCwgdGhlIGFuaW1hdGlvbiBjdXJ2
ZSBpcyBub3cgY2hhbmdlZCBmcm9tCisgICAgICAgIGVhc2UtaW4tb3V0IHRvIGVhc2Utb3V0IGFu
ZCB0aGUgZHVyYXRpb24gaXMgcmVjYWxjdWxhdGVkLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywg
Y292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFu
aW1hdGlvbi5oOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6cHJlZGljdGVkRGVz
dGluYXRpb25PZmZzZXQgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdGlv
bktpbmV0aWMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25Nb21lbnR1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRpb25Nb21lbnR1bTo6cHJlZGljdGVk
RGVzdGluYXRpb25PZmZzZXQgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1h
dGlvbk1vbWVudHVtLmg6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uU21vb3Ro
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdGlvblNtb290aDo6U2Nyb2xsQW5p
bWF0aW9uU21vb3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdGlvblNtb290aDo6
c3RhcnRBbmltYXRlZFNjcm9sbFRvRGVzdGluYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsQW5pbWF0aW9uU21vb3RoOjpyZXRhcmdldEFjdGl2ZUFuaW1hdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxBbmltYXRpb25TbW9vdGg6OmFuaW1hdGVTY3JvbGwpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsQW5pbWF0aW9uU21vb3RoOjpzdGFydE9yUmV0YXJnZXRBbmltYXRpb24p
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdGlvblNtb290aC5oOgor
ICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbEFuaW1hdG9yOjpzY3JvbGwpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGluZ0Vm
ZmVjdHNDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0VmZmVjdHND
b250cm9sbGVyOjpvZmZzZXRBbmltYXRlZFNjcm9sbERlc3RpbmF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjpoYW5kbGVXaGVlbEV2ZW50KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlci5oOgorCiAyMDIxLTEw
LTEzICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25Ad2Via2l0Lm9yZz4KIAogICAgICAgICBT
dGlja3kgZWxlbWVudCBpbnNpZGUgYW5vdGhlciBzdGlja3kgZWxlbWVudCBkb2VzIG5vdCByZWRy
YXcgcHJvcGVybHkgb24gc2Nyb2xsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1h
dGlvbi5oCmluZGV4IGVhZmJkYzkyMjlhMDZiMzU0NWI4NzdhYmU1MWUwZTkwYzM2ZGVmMzguLjZm
Njc2YzFiMzg0NWU2YzMzZmE3ZmFjMTQzNDhlZTRhZDhiZDIwZTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbi5oCkBAIC03NSw3ICs3NSw4IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlU2Nyb2xsRXh0ZW50cygpIHsgfTsKICAgICAKICAgICBGbG9h
dFBvaW50IGN1cnJlbnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRPZmZzZXQ7IH0K
LSAgICAKKyAgICB2aXJ0dWFsIEZsb2F0UG9pbnQgcHJlZGljdGVkRGVzdGluYXRpb25PZmZzZXQo
KSBjb25zdCA9IDA7CisKICAgICB2aXJ0dWFsIHZvaWQgc2VydmljZUFuaW1hdGlvbihNb25vdG9u
aWNUaW1lKSA9IDA7CiAKIHByb3RlY3RlZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsQW5pbWF0aW9uS2luZXRpYy5jcHAKaW5kZXggZGMyNWNmYzZlYTczMTI3OGYxZjNm
ZWFkNGZjYTA5YjJmNTM4NzJhMS4uN2U4NDJjYTQ1ZmRlZjc5ZmEyZjhjZmU0N2JhNGFhOTViM2Ji
MTU0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9u
S2luZXRpYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9u
S2luZXRpYy5jcHAKQEAgLTIwNSw2ICsyMDUsMTIgQEAgYm9vbCBTY3JvbGxBbmltYXRpb25LaW5l
dGljOjpyZXRhcmdldEFjdGl2ZUFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50JikKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKK0Zsb2F0UG9pbnQgU2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6cHJlZGlj
dGVkRGVzdGluYXRpb25PZmZzZXQoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
ZGVzdGluYXRpb24gcHJlZGljdGlvbi4KKyAgICByZXR1cm4geyB9OworfQorCiB2b2lkIFNjcm9s
bEFuaW1hdGlvbktpbmV0aWM6OnNlcnZpY2VBbmltYXRpb24oTW9ub3RvbmljVGltZSBjdXJyZW50
VGltZSkKIHsKICAgICBhdXRvIGVsYXBzZWRUaW1lID0gdGltZVNpbmNlU3RhcnQoY3VycmVudFRp
bWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9u
S2luZXRpYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uS2luZXRp
Yy5oCmluZGV4IDM3N2JkNTJiZjVmNjM5ODBmNGQxYjY3YWY5OGUxNmJiN2MwYmZjOGUuLjhkZjg3
MmNmYTEwMjk1MjRkYmQ4ZGM0NDQ1YWU3YzE5MTM1NWQyOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmgKQEAgLTYyLDYgKzYyLDcgQEAg
cHVibGljOgogCiAgICAgYm9vbCBzdGFydEFuaW1hdGVkU2Nyb2xsV2l0aEluaXRpYWxWZWxvY2l0
eShjb25zdCBGbG9hdFBvaW50JiBpbml0aWFsT2Zmc2V0LCBjb25zdCBGbG9hdFNpemUmIHZlbG9j
aXR5LCBib29sIG1heUhTY3JvbGwsIGJvb2wgbWF5VlNjcm9sbCk7CiAgICAgYm9vbCByZXRhcmdl
dEFjdGl2ZUFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50JiBuZXdPZmZzZXQpIGZpbmFsOworICAg
IEZsb2F0UG9pbnQgcHJlZGljdGVkRGVzdGluYXRpb25PZmZzZXQoKSBjb25zdCBmaW5hbDsKIAog
ICAgIHZvaWQgYXBwZW5kVG9TY3JvbGxIaXN0b3J5KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYp
OwogICAgIHZvaWQgY2xlYXJTY3JvbGxIaXN0b3J5KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25Nb21lbnR1bS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25Nb21lbnR1bS5jcHAKaW5kZXggNTQ0OWJhZDFiNjAx
MWRlNzhkNTg3MGNmNmFhZmY5NGFmZWI0NTRkYy4uMzJlMmQ0NjgwZGUwYWE4ZDJmZjhkYjQzNWRj
NDQyYjljMTg2ZTMwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
QW5pbWF0aW9uTW9tZW50dW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bEFuaW1hdGlvbk1vbWVudHVtLmNwcApAQCAtMTA1LDQgKzEwNSwxNCBAQCB2b2lkIFNjcm9sbEFu
aW1hdGlvbk1vbWVudHVtOjp1cGRhdGVTY3JvbGxFeHRlbnRzKCkKICAgICAgICAgcmV0YXJnZXRB
Y3RpdmVBbmltYXRpb24oY29uc3RyYWluZWRPZmZzZXQpOwogfQogCitGbG9hdFBvaW50IFNjcm9s
bEFuaW1hdGlvbk1vbWVudHVtOjpwcmVkaWN0ZWREZXN0aW5hdGlvbk9mZnNldCgpIGNvbnN0Cit7
CisgICAgaWYgKCFtX21vbWVudHVtQ2FsY3VsYXRvcikgeworICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gbV9tb21l
bnR1bUNhbGN1bGF0b3ItPnByZWRpY3RlZERlc3RpbmF0aW9uT2Zmc2V0KCk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbEFuaW1hdGlvbk1vbWVudHVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxB
bmltYXRpb25Nb21lbnR1bS5oCmluZGV4IDVjOWJlOTEzNDFkNjcyNGVjNTA2OTc0YjI3M2VmMTc5
Y2Y5NzI5NzkuLmVlMThhYjU4OWY4ZjU1ODFiMDZmMTMzMzY2YTVmMDNiNGFlZTY3NTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbk1vbWVudHVtLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uTW9tZW50dW0uaApA
QCAtNDAsNiArNDAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdG9wKCkgZmluYWw7CiAgICAgdm9p
ZCBzZXJ2aWNlQW5pbWF0aW9uKE1vbm90b25pY1RpbWUpIGZpbmFsOwogICAgIHZvaWQgdXBkYXRl
U2Nyb2xsRXh0ZW50cygpIGZpbmFsOworICAgIEZsb2F0UG9pbnQgcHJlZGljdGVkRGVzdGluYXRp
b25PZmZzZXQoKSBjb25zdCBmaW5hbDsKIAogcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
U2Nyb2xsaW5nTW9tZW50dW1DYWxjdWxhdG9yPiBtX21vbWVudHVtQ2FsY3VsYXRvcjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvblNtb290aC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25TbW9vdGguY3BwCmluZGV4
IGIzNTgwNWFjZTI1MDdiYWE5NTZiOWExOTRhOWFiY2I3MzRmYjI1MTMuLjU3OTlhMjBmM2Q4ZjEw
YzE1ODdmNzM3MzBkMTQxNTU2YjRkYWZhMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbEFuaW1hdGlvblNtb290aC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsQW5pbWF0aW9uU21vb3RoLmNwcApAQCAtNDEsNyArNDEsNyBAQCBzdGF0aWMg
Y29uc3QgU2Vjb25kcyBtYXhBbmltYXRpb25EdXJhdGlvbiB7IDIwMF9tcyB9OwogCiBTY3JvbGxB
bmltYXRpb25TbW9vdGg6OlNjcm9sbEFuaW1hdGlvblNtb290aChTY3JvbGxBbmltYXRpb25DbGll
bnQmIGNsaWVudCkKICAgICA6IFNjcm9sbEFuaW1hdGlvbihUeXBlOjpTbW9vdGgsIGNsaWVudCkK
LSAgICAsIG1fZWFzZUluT3V0VGltaW5nRnVuY3Rpb24oQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlv
bjo6Y3JlYXRlKEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OlRpbWluZ0Z1bmN0aW9uUHJlc2V0
OjpFYXNlSW5PdXQpKQorICAgICwgbV90aW1pbmdGdW5jdGlvbihDdWJpY0JlemllclRpbWluZ0Z1
bmN0aW9uOjpjcmVhdGUoKSkKIHsKIH0KIApAQCAtNDksMTEgKzQ5LDI2IEBAIFNjcm9sbEFuaW1h
dGlvblNtb290aDo6flNjcm9sbEFuaW1hdGlvblNtb290aCgpID0gZGVmYXVsdDsKIAogYm9vbCBT
Y3JvbGxBbmltYXRpb25TbW9vdGg6OnN0YXJ0QW5pbWF0ZWRTY3JvbGxUb0Rlc3RpbmF0aW9uKGNv
bnN0IEZsb2F0UG9pbnQmIGZyb21PZmZzZXQsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9u
T2Zmc2V0KQogewotICAgIG1fc3RhcnRPZmZzZXQgPSBmcm9tT2Zmc2V0OwotICAgIG1fZHVyYXRp
b24gPSBkdXJhdGlvbkZyb21EaXN0YW5jZShkZXN0aW5hdGlvbk9mZnNldCAtIG1fc3RhcnRPZmZz
ZXQpOworICAgIGlmICghaXNBY3RpdmUoKSAmJiBmcm9tT2Zmc2V0ID09IGRlc3RpbmF0aW9uT2Zm
c2V0KQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBhdXRvIGV4dGVudHMgPSBtX2NsaWVu
dC5zY3JvbGxFeHRlbnRzRm9yQW5pbWF0aW9uKCp0aGlzKTsKLSAgICByZXR1cm4gc3RhcnRPclJl
dGFyZ2V0QW5pbWF0aW9uKGV4dGVudHMsIGRlc3RpbmF0aW9uT2Zmc2V0KTsKKworICAgIG1fc3Rh
cnRPZmZzZXQgPSBmcm9tT2Zmc2V0OworICAgIG1fZGVzdGluYXRpb25PZmZzZXQgPSBkZXN0aW5h
dGlvbk9mZnNldC5jb25zdHJhaW5lZEJldHdlZW4oZXh0ZW50cy5taW5pbXVtU2Nyb2xsT2Zmc2V0
KCksIGV4dGVudHMubWF4aW11bVNjcm9sbE9mZnNldCgpKTsKKyAgICBtX2R1cmF0aW9uID0gZHVy
YXRpb25Gcm9tRGlzdGFuY2UobV9kZXN0aW5hdGlvbk9mZnNldCAtIG1fc3RhcnRPZmZzZXQpOwor
CisgICAgLy8gRklYTUU6IFRoaXMgaXMgYSBoYW5nb3ZlciBvZiBwcmV2aW91cyBiZWhhdmlvdXIs
IGJ1dCBnaXZlbiB0aGVyZSdzIGEgc3BlY2lmaWMKKyAgICAvLyAgICAgICAgcmV0YXJnZXRBY3Rp
dmVBbmltYXRpb24gZnVuY3Rpb24sIG1heWJlIHRoaXMgc2hvdWxkIGFsd2F5cyByZXN0YXJ0IHRo
ZSBhbmltYXRpb24/CisgICAgaWYgKGlzQWN0aXZlKCkpIHsKKyAgICAgICAgZG93bmNhc3Q8Q3Vi
aWNCZXppZXJUaW1pbmdGdW5jdGlvbj4oKm1fdGltaW5nRnVuY3Rpb24pLnNldFRpbWluZ0Z1bmN0
aW9uUHJlc2V0KEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OlRpbWluZ0Z1bmN0aW9uUHJlc2V0
OjpFYXNlT3V0KTsKKyAgICAgICAgbV9zdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBkb3duY2FzdDxDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9u
PigqbV90aW1pbmdGdW5jdGlvbikuc2V0VGltaW5nRnVuY3Rpb25QcmVzZXQoQ3ViaWNCZXppZXJU
aW1pbmdGdW5jdGlvbjo6VGltaW5nRnVuY3Rpb25QcmVzZXQ6OkVhc2VJbk91dCk7CisgICAgICAg
IGRpZFN0YXJ0KE1vbm90b25pY1RpbWU6Om5vdygpKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKIH0KIAogYm9vbCBTY3JvbGxBbmltYXRpb25TbW9vdGg6OnJldGFyZ2V0QWN0aXZlQW5pbWF0
aW9uKGNvbnN0IEZsb2F0UG9pbnQmIG5ld09mZnNldCkKQEAgLTYyLDE4ICs3NywxOCBAQCBib29s
IFNjcm9sbEFuaW1hdGlvblNtb290aDo6cmV0YXJnZXRBY3RpdmVBbmltYXRpb24oY29uc3QgRmxv
YXRQb2ludCYgbmV3T2Zmc2V0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBhdXRvIGV4
dGVudHMgPSBtX2NsaWVudC5zY3JvbGxFeHRlbnRzRm9yQW5pbWF0aW9uKCp0aGlzKTsKLSAgICBy
ZXR1cm4gc3RhcnRPclJldGFyZ2V0QW5pbWF0aW9uKGV4dGVudHMsIG5ld09mZnNldCk7Ci19CiAK
LWJvb2wgU2Nyb2xsQW5pbWF0aW9uU21vb3RoOjpzdGFydE9yUmV0YXJnZXRBbmltYXRpb24oY29u
c3QgU2Nyb2xsRXh0ZW50cyYgZXh0ZW50cywgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb25P
ZmZzZXQpCi17Ci0gICAgbV9kZXN0aW5hdGlvbk9mZnNldCA9IGRlc3RpbmF0aW9uT2Zmc2V0LmNv
bnN0cmFpbmVkQmV0d2VlbihleHRlbnRzLm1pbmltdW1TY3JvbGxPZmZzZXQoKSwgZXh0ZW50cy5t
YXhpbXVtU2Nyb2xsT2Zmc2V0KCkpOwotICAgIGJvb2wgbmVlZFRvU2Nyb2xsID0gbV9zdGFydE9m
ZnNldCAhPSBtX2Rlc3RpbmF0aW9uT2Zmc2V0OworICAgIG1fc3RhcnRUaW1lID0gTW9ub3Rvbmlj
VGltZTo6bm93KCk7CisgICAgbV9zdGFydE9mZnNldCA9IG1fY3VycmVudE9mZnNldDsKKyAgICBt
X2Rlc3RpbmF0aW9uT2Zmc2V0ID0gbmV3T2Zmc2V0LmNvbnN0cmFpbmVkQmV0d2VlbihleHRlbnRz
Lm1pbmltdW1TY3JvbGxPZmZzZXQoKSwgZXh0ZW50cy5tYXhpbXVtU2Nyb2xsT2Zmc2V0KCkpOwor
ICAgIG1fZHVyYXRpb24gPSBkdXJhdGlvbkZyb21EaXN0YW5jZShtX2Rlc3RpbmF0aW9uT2Zmc2V0
IC0gbV9zdGFydE9mZnNldCk7CisgICAgZG93bmNhc3Q8Q3ViaWNCZXppZXJUaW1pbmdGdW5jdGlv
bj4oKm1fdGltaW5nRnVuY3Rpb24pLnNldFRpbWluZ0Z1bmN0aW9uUHJlc2V0KEN1YmljQmV6aWVy
VGltaW5nRnVuY3Rpb246OlRpbWluZ0Z1bmN0aW9uUHJlc2V0OjpFYXNlT3V0KTsKKyAgICBtX3Rp
bWluZ0Z1bmN0aW9uID0gQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKEN1YmljQmV6
aWVyVGltaW5nRnVuY3Rpb246OlRpbWluZ0Z1bmN0aW9uUHJlc2V0OjpFYXNlT3V0KTsKIAotICAg
IGlmIChuZWVkVG9TY3JvbGwgJiYgIWlzQWN0aXZlKCkpCi0gICAgICAgIGRpZFN0YXJ0KE1vbm90
b25pY1RpbWU6Om5vdygpKTsKKyAgICBpZiAobV9jdXJyZW50T2Zmc2V0ID09IG1fZGVzdGluYXRp
b25PZmZzZXQpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBuZWVkVG9TY3Jv
bGw7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgU2Nyb2xsQW5pbWF0aW9uU21vb3RoOjp1
cGRhdGVTY3JvbGxFeHRlbnRzKCkKQEAgLTEwOCw3ICsxMjMsNyBAQCBib29sIFNjcm9sbEFuaW1h
dGlvblNtb290aDo6YW5pbWF0ZVNjcm9sbChNb25vdG9uaWNUaW1lIGN1cnJlbnRUaW1lKQogICAg
IGN1cnJlbnRUaW1lID0gc3RkOjptaW4oY3VycmVudFRpbWUsIGVuZFRpbWUpOwogCiAgICAgZG91
YmxlIGZyYWN0aW9uQ29tcGxldGUgPSAoY3VycmVudFRpbWUgLSBtX3N0YXJ0VGltZSkgLyBtX2R1
cmF0aW9uOwotICAgIGRvdWJsZSBwcm9ncmVzcyA9IG1fZWFzZUluT3V0VGltaW5nRnVuY3Rpb24t
PnRyYW5zZm9ybVByb2dyZXNzKGZyYWN0aW9uQ29tcGxldGUsIG1fZHVyYXRpb24udmFsdWUoKSk7
CisgICAgZG91YmxlIHByb2dyZXNzID0gbV90aW1pbmdGdW5jdGlvbi0+dHJhbnNmb3JtUHJvZ3Jl
c3MoZnJhY3Rpb25Db21wbGV0ZSwgbV9kdXJhdGlvbi52YWx1ZSgpKTsKIAogICAgIG1fY3VycmVu
dE9mZnNldCA9IHsKICAgICAgICAgbGluZWFySW50ZXJwb2xhdGlvbihwcm9ncmVzcywgbV9zdGFy
dE9mZnNldC54KCksIG1fZGVzdGluYXRpb25PZmZzZXQueCgpKSwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvblNtb290aC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uU21vb3RoLmgKaW5kZXggZmVmMDQ4MWM2ZWIwYmNk
M2I4YWFmZTQ2M2QwNjM2MjkwYWZlOWI1OS4uOTExNTA4YWM3YTVmNGVmMTFlNzFjYmE2MjI0ODRi
MGVjOTUwNmJlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0aW9uU21vb3RoLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
aW9uU21vb3RoLmgKQEAgLTQxLDEyICs0MSwxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBzdGFydEFu
aW1hdGVkU2Nyb2xsVG9EZXN0aW5hdGlvbihjb25zdCBGbG9hdFBvaW50JiBmcm9tT2Zmc2V0LCBj
b25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbk9mZnNldCk7CiAgICAgYm9vbCByZXRhcmdldEFj
dGl2ZUFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50JiBuZXdPZmZzZXQpIGZpbmFsOwogCi0gICAg
Y29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb25PZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2Rl
c3RpbmF0aW9uT2Zmc2V0OyB9CisgICAgRmxvYXRQb2ludCBwcmVkaWN0ZWREZXN0aW5hdGlvbk9m
ZnNldCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZGVzdGluYXRpb25PZmZzZXQ7IH0KIAogcHJp
dmF0ZToKIAotICAgIGJvb2wgc3RhcnRPclJldGFyZ2V0QW5pbWF0aW9uKGNvbnN0IFNjcm9sbEV4
dGVudHMmLCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbk9mZnNldCk7Ci0KICAgICB2b2lk
IHVwZGF0ZVNjcm9sbEV4dGVudHMoKSBmaW5hbDsKICAgICB2b2lkIHNlcnZpY2VBbmltYXRpb24o
TW9ub3RvbmljVGltZSkgZmluYWw7CiAKQEAgLTU5LDcgKzU3LDcgQEAgcHJpdmF0ZToKICAgICBG
bG9hdFBvaW50IG1fc3RhcnRPZmZzZXQ7CiAgICAgRmxvYXRQb2ludCBtX2Rlc3RpbmF0aW9uT2Zm
c2V0OwogCi0gICAgUmVmUHRyPFRpbWluZ0Z1bmN0aW9uPiBtX2Vhc2VJbk91dFRpbWluZ0Z1bmN0
aW9uOworICAgIFJlZlB0cjxUaW1pbmdGdW5jdGlvbj4gbV90aW1pbmdGdW5jdGlvbjsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbEFuaW1hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFu
aW1hdG9yLmNwcAppbmRleCA4YzMxZDFjMDdiNjhjODk2MGE2MTk2NjEyM2U3MTY1MGViOWI4YTky
Li40ZTA3MjJhMThlMWE0ZDViNDVmMjBhMDI2ODZjNTU0ODE5MGE5YzEwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCkBAIC04OSw2ICs4OSw5IEBAIGJvb2wg
U2Nyb2xsQW5pbWF0b3I6OnNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwg
U2Nyb2xsR3JhbnVsYXJpdHkKICAgICB9CiAKICAgICBpZiAobV9zY3JvbGxhYmxlQXJlYS5zY3Jv
bGxBbmltYXRvckVuYWJsZWQoKSAmJiBwbGF0Zm9ybUFsbG93c1Njcm9sbEFuaW1hdGlvbigpICYm
ICFiZWhhdmlvci5jb250YWlucyhTY3JvbGxCZWhhdmlvcjo6TmV2ZXJBbmltYXRlKSkgeworICAg
ICAgICBpZiAobV9zY3JvbGxDb250cm9sbGVyLm9mZnNldEFuaW1hdGVkU2Nyb2xsRGVzdGluYXRp
b24oZGVsdGEpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKICAgICAgICAgYXV0byBzdGFy
dE9mZnNldCA9IG9mZnNldEZyb21Qb3NpdGlvbihtX2N1cnJlbnRQb3NpdGlvbik7CiAgICAgICAg
IGF1dG8gZXh0ZW50cyA9IHNjcm9sbEV4dGVudHMoKTsKICAgICAgICAgYXV0byBkZXN0aW5hdGlv
bk9mZnNldCA9IChzdGFydE9mZnNldCArIGRlbHRhKS5jb25zdHJhaW5lZEJldHdlZW4oZXh0ZW50
cy5taW5pbXVtU2Nyb2xsT2Zmc2V0KCksIGV4dGVudHMubWF4aW11bVNjcm9sbE9mZnNldCgpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGluZ0VmZmVjdHNDb250
cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGluZ0VmZmVjdHNDb250
cm9sbGVyLmNwcAppbmRleCA5ZDAwMGFiMTMwNjlhMjVmMzFkMWViZTcyM2QzYTJmODgxYTFiNjcx
Li5mZmU0MDJjMTk4YTQxZmNlNGZhNjIwMjEyM2ZkMDM2ODI4YTgyMmVlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIuY3Bw
CkBAIC0xMTQsNiArMTE0LDE5IEBAIGJvb2wgU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OnJl
dGFyZ2V0QW5pbWF0ZWRTY3JvbGwoRmxvYXRQb2ludCBuZXdEZXN0aW5hdGlvCiAgICAgcmV0dXJu
IGRvd25jYXN0PFNjcm9sbEFuaW1hdGlvblNtb290aD4oKm1fY3VycmVudEFuaW1hdGlvbikucmV0
YXJnZXRBY3RpdmVBbmltYXRpb24obmV3RGVzdGluYXRpb25PZmZzZXQpOwogfQogCitib29sIFNj
cm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjpvZmZzZXRBbmltYXRlZFNjcm9sbERlc3RpbmF0aW9u
KEZsb2F0U2l6ZSBvZmZzZXQpCit7CisgICAgaWYgKCFpczxTY3JvbGxBbmltYXRpb25TbW9vdGg+
KG1fY3VycmVudEFuaW1hdGlvbi5nZXQoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IExPR19XSVRIX1NUUkVBTShTY3JvbGxBbmltYXRpb25zLCBzdHJlYW0gPDwgIlNjcm9sbGluZ0Vm
ZmVjdHNDb250cm9sbGVyICIgPDwgdGhpcyA8PCAiIG9mZnNldEFuaW1hdGVkU2Nyb2xsRGVzdGlu
YXRpb24gYnkgIiA8PCBvZmZzZXQpOworCisgICAgQVNTRVJUKG1fY3VycmVudEFuaW1hdGlvbi0+
aXNBY3RpdmUoKSk7CisgICAgYXV0byYgYW5pbWF0aW9uID0gZG93bmNhc3Q8U2Nyb2xsQW5pbWF0
aW9uU21vb3RoPigqbV9jdXJyZW50QW5pbWF0aW9uKTsKKyAgICBhdXRvIG5ld0Rlc3RpbmF0aW9u
T2Zmc2V0ID0gYW5pbWF0aW9uLnByZWRpY3RlZERlc3RpbmF0aW9uT2Zmc2V0KCkgKyBvZmZzZXQ7
CisgICAgcmV0dXJuIGFuaW1hdGlvbi5yZXRhcmdldEFjdGl2ZUFuaW1hdGlvbihuZXdEZXN0aW5h
dGlvbk9mZnNldCk7Cit9CisKIHZvaWQgU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OnN0b3BB
bmltYXRlZFNjcm9sbCgpCiB7CiAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbEFuaW1hdGlvbnMs
IHN0cmVhbSA8PCAiU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIgIiA8PCB0aGlzIDw8ICIgc3Rv
cEFuaW1hdGVkU2Nyb2xsIik7CkBAIC0zNDAsMTAgKzM1Myw3IEBAIGJvb2wgU2Nyb2xsaW5nRWZm
ZWN0c0NvbnRyb2xsZXI6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50
JiB3aGVlCiAKICNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKICAgICBpZiAobV9jbGllbnQu
c2Nyb2xsQW5pbWF0aW9uRW5hYmxlZCgpICYmICFtX2luU2Nyb2xsR2VzdHVyZSkgewotICAgICAg
ICBpZiAoaXM8U2Nyb2xsQW5pbWF0aW9uU21vb3RoPihtX2N1cnJlbnRBbmltYXRpb24uZ2V0KCkp
KSB7Ci0gICAgICAgICAgICBhdXRvIGxhc3REZXN0aW5hdGlvbk9mZnNldCA9IGRvd25jYXN0PFNj
cm9sbEFuaW1hdGlvblNtb290aD4oKm1fY3VycmVudEFuaW1hdGlvbikuZGVzdGluYXRpb25PZmZz
ZXQoKTsKLSAgICAgICAgICAgIHJldGFyZ2V0QW5pbWF0ZWRTY3JvbGwobGFzdERlc3RpbmF0aW9u
T2Zmc2V0ICsgRmxvYXRTaXplIHsgZGVsdGFYLCBkZWx0YVkgfSk7Ci0gICAgICAgIH0gZWxzZQor
ICAgICAgICBpZiAoIW9mZnNldEFuaW1hdGVkU2Nyb2xsRGVzdGluYXRpb24oeyBkZWx0YVgsIGRl
bHRhWSB9KSkKICAgICAgICAgICAgIHN0YXJ0QW5pbWF0ZWRTY3JvbGxUb0Rlc3RpbmF0aW9uKHNj
cm9sbE9mZnNldCwgc2Nyb2xsT2Zmc2V0ICsgRmxvYXRTaXplIHsgZGVsdGFYLCBkZWx0YVkgfSk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlci5oCmluZGV4IDc4YjkzYjAxYjk0OGRh
OGMxNTM5NWM1MjMzYzdiZTQ4NjllYmExNWMuLjg1YjhiOTM0YzRiYjc4N2I1N2QzM2ZjOWFlMWY5
ZDlhMDk4ODk1NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGlu
Z0VmZmVjdHNDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
aW5nRWZmZWN0c0NvbnRyb2xsZXIuaApAQCAtMTM1LDYgKzEzNSw3IEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgc3RhcnRBbmltYXRlZFNjcm9sbFRvRGVzdGluYXRpb24oRmxvYXRQb2ludCBzdGFydE9m
ZnNldCwgRmxvYXRQb2ludCBkZXN0aW5hdGlvbk9mZnNldCk7CiAgICAgYm9vbCByZXRhcmdldEFu
aW1hdGVkU2Nyb2xsKEZsb2F0UG9pbnQgbmV3RGVzdGluYXRpb25PZmZzZXQpOworICAgIGJvb2wg
b2Zmc2V0QW5pbWF0ZWRTY3JvbGxEZXN0aW5hdGlvbihGbG9hdFNpemUgb2Zmc2V0KTsKICAgICB2
b2lkIHN0b3BBbmltYXRlZFNjcm9sbCgpOwogCiAgICAgYm9vbCBzdGFydE1vbWVudHVtU2Nyb2xs
V2l0aEluaXRpYWxWZWxvY2l0eShjb25zdCBGbG9hdFBvaW50JiBpbml0aWFsT2Zmc2V0LCBjb25z
dCBGbG9hdFNpemUmIGluaXRpYWxWZWxvY2l0eSwgY29uc3QgRmxvYXRTaXplJiBpbml0aWFsRGVs
dGEsIGNvbnN0IFdURjo6RnVuY3Rpb248RmxvYXRQb2ludChjb25zdCBGbG9hdFBvaW50Jik+JiBk
ZXN0aW5hdGlvbk1vZGlmaWVyKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>441891</attachid>
            <date>2021-10-20 09:58:19 -0700</date>
            <delta_ts>2021-10-21 02:53:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-197100-20211020175818.patch</filename>
            <type>text/plain</type>
            <size>10767</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg0NTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmVjMjM2MTc2ODkwZjZi
NjY4ZmUxOWVhZDYxMDhiYTljZjM3OTMyZi4uNDc4ODY1YzVkOTJiYTY0ZjFiMTE2YzM0N2E1NWE4
ZTZhZDZiNzg0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDIxLTEwLTE5ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBTbG93IHNjcm9sbGlu
ZyAobm90IG1hdGNoaW5nIEdUSyBuYXRpdmUgc2Nyb2xsIGFtb3VudCkKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NzEwMAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCB1cCBiZWhhdmlvdXIgd2l0aCBp
bnRlcnJ1cHRpbmcgc21vb3RoIHNjcm9sbGluZywgbWFpbmx5IG9uCisgICAgICAgIGtleWJvYXJk
LWluaXRpYXRlZCBzY3JvbGxpbmcsIGJ1dCBhbHNvIGZvciB0aGUgbW91c2Utd2hlZWwuIFdoZW4K
KyAgICAgICAgaW50ZXJydXB0aW5nIGEgc21vb3RoIHNjcm9sbCwgdGhlIGFuaW1hdGlvbiBjdXJ2
ZSBpcyBub3cgY2hhbmdlZCBmcm9tCisgICAgICAgIGVhc2UtaW4tb3V0IHRvIGVhc2Utb3V0IGFu
ZCB0aGUgZHVyYXRpb24gaXMgcmVjYWxjdWxhdGVkLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywg
Y292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFu
aW1hdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0aW9uOjpkZXN0aW5hdGlv
bk9mZnNldCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uU21vb3Ro
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdGlvblNtb290aDo6U2Nyb2xsQW5p
bWF0aW9uU21vb3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdGlvblNtb290aDo6
c3RhcnRBbmltYXRlZFNjcm9sbFRvRGVzdGluYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsQW5pbWF0aW9uU21vb3RoOjpyZXRhcmdldEFjdGl2ZUFuaW1hdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxBbmltYXRpb25TbW9vdGg6OmFuaW1hdGVTY3JvbGwpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsQW5pbWF0aW9uU21vb3RoOjpzdGFydE9yUmV0YXJnZXRBbmltYXRpb24p
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdGlvblNtb290aC5oOgor
ICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbEFuaW1hdG9yOjpzY3JvbGwpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGluZ0Vm
ZmVjdHNDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0VmZmVjdHND
b250cm9sbGVyOjpyZXRhcmdldEFuaW1hdGVkU2Nyb2xsQnkpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OmhhbmRsZVdoZWVsRXZlbnQpOgorICAgICAgICAq
IHBsYXRmb3JtL1Njcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyLmg6CisKIDIwMjEtMTAtMjAgIEFu
dHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIERvbid0IHJlLWV2YWx1
YXRlIHZpZXdwb3J0IGRlcGVuZGVudCBtZWRpYSBxdWVyaWVzIGlmIHRoZSB2aWV3cG9ydCBkb2Vz
bid0IGNoYW5nZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb24uaAppbmRl
eCAyMzhmMjUwYzk4NWVkZDg4Y2VmYjNjZGExNzk2MjYxNjUyODYwOTgyLi40YzU2YTc5YTViMWQ0
MWU2YzA2MGFlMWIyMTY3NWU5Zjk5N2E5ZmU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxBbmltYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxBbmltYXRpb24uaApAQCAtNzgsNiArNzgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZVNjcm9sbEV4dGVudHMoKSB7IH07CiAgICAgCiAgICAgRmxvYXRQb2ludCBjdXJy
ZW50T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50T2Zmc2V0OyB9CisgICAgdmlydHVh
bCBzdGQ6Om9wdGlvbmFsPEZsb2F0UG9pbnQ+IGRlc3RpbmF0aW9uT2Zmc2V0KCkgY29uc3QgeyBy
ZXR1cm4gc3RkOjpudWxsb3B0OyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgc2VydmljZUFuaW1hdGlv
bihNb25vdG9uaWNUaW1lKSA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbEFuaW1hdGlvblNtb290aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxBbmltYXRpb25TbW9vdGguY3BwCmluZGV4IGIzNTgwNWFjZTI1MDdiYWE5NTZiOWExOTRh
OWFiY2I3MzRmYjI1MTMuLjI4NjEyNTI5OThiYTgxNDg3ODk1NDE0YzFlZTJiYmU4MzVhOGNlNjMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvblNtb290
aC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uU21vb3Ro
LmNwcApAQCAtNDEsNyArNDEsNyBAQCBzdGF0aWMgY29uc3QgU2Vjb25kcyBtYXhBbmltYXRpb25E
dXJhdGlvbiB7IDIwMF9tcyB9OwogCiBTY3JvbGxBbmltYXRpb25TbW9vdGg6OlNjcm9sbEFuaW1h
dGlvblNtb290aChTY3JvbGxBbmltYXRpb25DbGllbnQmIGNsaWVudCkKICAgICA6IFNjcm9sbEFu
aW1hdGlvbihUeXBlOjpTbW9vdGgsIGNsaWVudCkKLSAgICAsIG1fZWFzZUluT3V0VGltaW5nRnVu
Y3Rpb24oQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKEN1YmljQmV6aWVyVGltaW5n
RnVuY3Rpb246OlRpbWluZ0Z1bmN0aW9uUHJlc2V0OjpFYXNlSW5PdXQpKQorICAgICwgbV90aW1p
bmdGdW5jdGlvbihDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKSkKIHsKIH0KIApA
QCAtNDksMTEgKzQ5LDIxIEBAIFNjcm9sbEFuaW1hdGlvblNtb290aDo6flNjcm9sbEFuaW1hdGlv
blNtb290aCgpID0gZGVmYXVsdDsKIAogYm9vbCBTY3JvbGxBbmltYXRpb25TbW9vdGg6OnN0YXJ0
QW5pbWF0ZWRTY3JvbGxUb0Rlc3RpbmF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIGZyb21PZmZzZXQs
IGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uT2Zmc2V0KQogewotICAgIG1fc3RhcnRPZmZz
ZXQgPSBmcm9tT2Zmc2V0OwotICAgIG1fZHVyYXRpb24gPSBkdXJhdGlvbkZyb21EaXN0YW5jZShk
ZXN0aW5hdGlvbk9mZnNldCAtIG1fc3RhcnRPZmZzZXQpOworICAgIGlmICghaXNBY3RpdmUoKSAm
JiBmcm9tT2Zmc2V0ID09IGRlc3RpbmF0aW9uT2Zmc2V0KQorICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBhdXRvIGV4dGVudHMgPSBtX2NsaWVudC5zY3JvbGxFeHRlbnRzRm9yQW5pbWF0aW9u
KCp0aGlzKTsKLSAgICByZXR1cm4gc3RhcnRPclJldGFyZ2V0QW5pbWF0aW9uKGV4dGVudHMsIGRl
c3RpbmF0aW9uT2Zmc2V0KTsKKworICAgIG1fc3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93
KCk7CisgICAgbV9zdGFydE9mZnNldCA9IGZyb21PZmZzZXQ7CisgICAgbV9kZXN0aW5hdGlvbk9m
ZnNldCA9IGRlc3RpbmF0aW9uT2Zmc2V0LmNvbnN0cmFpbmVkQmV0d2VlbihleHRlbnRzLm1pbmlt
dW1TY3JvbGxPZmZzZXQoKSwgZXh0ZW50cy5tYXhpbXVtU2Nyb2xsT2Zmc2V0KCkpOworICAgIG1f
ZHVyYXRpb24gPSBkdXJhdGlvbkZyb21EaXN0YW5jZShtX2Rlc3RpbmF0aW9uT2Zmc2V0IC0gbV9z
dGFydE9mZnNldCk7CisgICAgZG93bmNhc3Q8Q3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbj4oKm1f
dGltaW5nRnVuY3Rpb24pLnNldFRpbWluZ0Z1bmN0aW9uUHJlc2V0KEN1YmljQmV6aWVyVGltaW5n
RnVuY3Rpb246OlRpbWluZ0Z1bmN0aW9uUHJlc2V0OjpFYXNlSW5PdXQpOworCisgICAgaWYgKCFp
c0FjdGl2ZSgpKQorICAgICAgICBkaWRTdGFydChNb25vdG9uaWNUaW1lOjpub3coKSk7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBTY3JvbGxBbmltYXRpb25TbW9vdGg6OnJldGFyZ2V0
QWN0aXZlQW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIG5ld09mZnNldCkKQEAgLTYyLDE4ICs3
MiwxOCBAQCBib29sIFNjcm9sbEFuaW1hdGlvblNtb290aDo6cmV0YXJnZXRBY3RpdmVBbmltYXRp
b24oY29uc3QgRmxvYXRQb2ludCYgbmV3T2Zmc2V0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBhdXRvIGV4dGVudHMgPSBtX2NsaWVudC5zY3JvbGxFeHRlbnRzRm9yQW5pbWF0aW9uKCp0
aGlzKTsKLSAgICByZXR1cm4gc3RhcnRPclJldGFyZ2V0QW5pbWF0aW9uKGV4dGVudHMsIG5ld09m
ZnNldCk7Ci19CiAKLWJvb2wgU2Nyb2xsQW5pbWF0aW9uU21vb3RoOjpzdGFydE9yUmV0YXJnZXRB
bmltYXRpb24oY29uc3QgU2Nyb2xsRXh0ZW50cyYgZXh0ZW50cywgY29uc3QgRmxvYXRQb2ludCYg
ZGVzdGluYXRpb25PZmZzZXQpCi17Ci0gICAgbV9kZXN0aW5hdGlvbk9mZnNldCA9IGRlc3RpbmF0
aW9uT2Zmc2V0LmNvbnN0cmFpbmVkQmV0d2VlbihleHRlbnRzLm1pbmltdW1TY3JvbGxPZmZzZXQo
KSwgZXh0ZW50cy5tYXhpbXVtU2Nyb2xsT2Zmc2V0KCkpOwotICAgIGJvb2wgbmVlZFRvU2Nyb2xs
ID0gbV9zdGFydE9mZnNldCAhPSBtX2Rlc3RpbmF0aW9uT2Zmc2V0OworICAgIG1fc3RhcnRUaW1l
ID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAgbV9zdGFydE9mZnNldCA9IG1fY3VycmVudE9m
ZnNldDsKKyAgICBtX2Rlc3RpbmF0aW9uT2Zmc2V0ID0gbmV3T2Zmc2V0LmNvbnN0cmFpbmVkQmV0
d2VlbihleHRlbnRzLm1pbmltdW1TY3JvbGxPZmZzZXQoKSwgZXh0ZW50cy5tYXhpbXVtU2Nyb2xs
T2Zmc2V0KCkpOworICAgIG1fZHVyYXRpb24gPSBkdXJhdGlvbkZyb21EaXN0YW5jZShtX2Rlc3Rp
bmF0aW9uT2Zmc2V0IC0gbV9zdGFydE9mZnNldCk7CisgICAgZG93bmNhc3Q8Q3ViaWNCZXppZXJU
aW1pbmdGdW5jdGlvbj4oKm1fdGltaW5nRnVuY3Rpb24pLnNldFRpbWluZ0Z1bmN0aW9uUHJlc2V0
KEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OlRpbWluZ0Z1bmN0aW9uUHJlc2V0OjpFYXNlT3V0
KTsKKyAgICBtX3RpbWluZ0Z1bmN0aW9uID0gQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3Jl
YXRlKEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OlRpbWluZ0Z1bmN0aW9uUHJlc2V0OjpFYXNl
T3V0KTsKIAotICAgIGlmIChuZWVkVG9TY3JvbGwgJiYgIWlzQWN0aXZlKCkpCi0gICAgICAgIGRp
ZFN0YXJ0KE1vbm90b25pY1RpbWU6Om5vdygpKTsKKyAgICBpZiAobV9jdXJyZW50T2Zmc2V0ID09
IG1fZGVzdGluYXRpb25PZmZzZXQpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVy
biBuZWVkVG9TY3JvbGw7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgU2Nyb2xsQW5pbWF0
aW9uU21vb3RoOjp1cGRhdGVTY3JvbGxFeHRlbnRzKCkKQEAgLTEwOCw3ICsxMTgsNyBAQCBib29s
IFNjcm9sbEFuaW1hdGlvblNtb290aDo6YW5pbWF0ZVNjcm9sbChNb25vdG9uaWNUaW1lIGN1cnJl
bnRUaW1lKQogICAgIGN1cnJlbnRUaW1lID0gc3RkOjptaW4oY3VycmVudFRpbWUsIGVuZFRpbWUp
OwogCiAgICAgZG91YmxlIGZyYWN0aW9uQ29tcGxldGUgPSAoY3VycmVudFRpbWUgLSBtX3N0YXJ0
VGltZSkgLyBtX2R1cmF0aW9uOwotICAgIGRvdWJsZSBwcm9ncmVzcyA9IG1fZWFzZUluT3V0VGlt
aW5nRnVuY3Rpb24tPnRyYW5zZm9ybVByb2dyZXNzKGZyYWN0aW9uQ29tcGxldGUsIG1fZHVyYXRp
b24udmFsdWUoKSk7CisgICAgZG91YmxlIHByb2dyZXNzID0gbV90aW1pbmdGdW5jdGlvbi0+dHJh
bnNmb3JtUHJvZ3Jlc3MoZnJhY3Rpb25Db21wbGV0ZSwgbV9kdXJhdGlvbi52YWx1ZSgpKTsKIAog
ICAgIG1fY3VycmVudE9mZnNldCA9IHsKICAgICAgICAgbGluZWFySW50ZXJwb2xhdGlvbihwcm9n
cmVzcywgbV9zdGFydE9mZnNldC54KCksIG1fZGVzdGluYXRpb25PZmZzZXQueCgpKSwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvblNtb290aC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uU21vb3RoLmgKaW5kZXggZmVm
MDQ4MWM2ZWIwYmNkM2I4YWFmZTQ2M2QwNjM2MjkwYWZlOWI1OS4uY2I5ZGQ2ODJhZGU3ZjA5ZTgw
OWQyNjExZTE0OTkwM2UzODUzODA3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsQW5pbWF0aW9uU21vb3RoLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsQW5pbWF0aW9uU21vb3RoLmgKQEAgLTQxLDEyICs0MSwxMCBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBzdGFydEFuaW1hdGVkU2Nyb2xsVG9EZXN0aW5hdGlvbihjb25zdCBGbG9hdFBvaW50JiBm
cm9tT2Zmc2V0LCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbk9mZnNldCk7CiAgICAgYm9v
bCByZXRhcmdldEFjdGl2ZUFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50JiBuZXdPZmZzZXQpIGZp
bmFsOwogCi0gICAgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb25PZmZzZXQoKSBjb25zdCB7
IHJldHVybiBtX2Rlc3RpbmF0aW9uT2Zmc2V0OyB9CisgICAgc3RkOjpvcHRpb25hbDxGbG9hdFBv
aW50PiBkZXN0aW5hdGlvbk9mZnNldCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZGVzdGluYXRp
b25PZmZzZXQ7IH0KIAogcHJpdmF0ZToKIAotICAgIGJvb2wgc3RhcnRPclJldGFyZ2V0QW5pbWF0
aW9uKGNvbnN0IFNjcm9sbEV4dGVudHMmLCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbk9m
ZnNldCk7Ci0KICAgICB2b2lkIHVwZGF0ZVNjcm9sbEV4dGVudHMoKSBmaW5hbDsKICAgICB2b2lk
IHNlcnZpY2VBbmltYXRpb24oTW9ub3RvbmljVGltZSkgZmluYWw7CiAKQEAgLTU5LDcgKzU3LDcg
QEAgcHJpdmF0ZToKICAgICBGbG9hdFBvaW50IG1fc3RhcnRPZmZzZXQ7CiAgICAgRmxvYXRQb2lu
dCBtX2Rlc3RpbmF0aW9uT2Zmc2V0OwogCi0gICAgUmVmUHRyPFRpbWluZ0Z1bmN0aW9uPiBtX2Vh
c2VJbk91dFRpbWluZ0Z1bmN0aW9uOworICAgIFJlZlB0cjxUaW1pbmdGdW5jdGlvbj4gbV90aW1p
bmdGdW5jdGlvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAppbmRleCA5MzdkOWFjN2I4OWFiN2IzNzRmM2Vh
OTZkM2JiNTFiMDAwY2M2NTEyLi4wN2M2YmYyNjY1OTU2ZWEzMDU1N2NmNzEzMzg0MTc4ZmMyOGQx
NGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCkBAIC04
OSw2ICs4OSw5IEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbChTY3JvbGxiYXJPcmllbnRh
dGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkKICAgICB9CiAKICAgICBpZiAobV9z
Y3JvbGxhYmxlQXJlYS5zY3JvbGxBbmltYXRvckVuYWJsZWQoKSAmJiBwbGF0Zm9ybUFsbG93c1Nj
cm9sbEFuaW1hdGlvbigpICYmICFiZWhhdmlvci5jb250YWlucyhTY3JvbGxCZWhhdmlvcjo6TmV2
ZXJBbmltYXRlKSkgeworICAgICAgICBpZiAobV9zY3JvbGxDb250cm9sbGVyLnJldGFyZ2V0QW5p
bWF0ZWRTY3JvbGxCeShkZWx0YSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKwogICAgICAg
ICBhdXRvIHN0YXJ0T2Zmc2V0ID0gb2Zmc2V0RnJvbVBvc2l0aW9uKG1fY3VycmVudFBvc2l0aW9u
KTsKICAgICAgICAgYXV0byBleHRlbnRzID0gc2Nyb2xsRXh0ZW50cygpOwogICAgICAgICBhdXRv
IGRlc3RpbmF0aW9uT2Zmc2V0ID0gKHN0YXJ0T2Zmc2V0ICsgZGVsdGEpLmNvbnN0cmFpbmVkQmV0
d2VlbihleHRlbnRzLm1pbmltdW1TY3JvbGxPZmZzZXQoKSwgZXh0ZW50cy5tYXhpbXVtU2Nyb2xs
T2Zmc2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsaW5n
RWZmZWN0c0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsaW5n
RWZmZWN0c0NvbnRyb2xsZXIuY3BwCmluZGV4IDA5NDQxYzQwYWQwM2I1OTI2ODExZGFjZTMwZmU3
OTdmZmYxNDYyNDguLmJmMDM4YmQ1ZmIyYWViYjdkMzYzMWM5NzI4ZGQ2MGZmM2FhYzhkZWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGluZ0VmZmVjdHNDb250cm9s
bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxpbmdFZmZlY3RzQ29u
dHJvbGxlci5jcHAKQEAgLTExOCw2ICsxMTgsMjAgQEAgYm9vbCBTY3JvbGxpbmdFZmZlY3RzQ29u
dHJvbGxlcjo6cmV0YXJnZXRBbmltYXRlZFNjcm9sbChGbG9hdFBvaW50IG5ld0Rlc3RpbmF0aW8K
ICAgICByZXR1cm4gZG93bmNhc3Q8U2Nyb2xsQW5pbWF0aW9uU21vb3RoPigqbV9jdXJyZW50QW5p
bWF0aW9uKS5yZXRhcmdldEFjdGl2ZUFuaW1hdGlvbihuZXdEZXN0aW5hdGlvbk9mZnNldCk7CiB9
CiAKK2Jvb2wgU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OnJldGFyZ2V0QW5pbWF0ZWRTY3Jv
bGxCeShGbG9hdFNpemUgb2Zmc2V0KQoreworICAgIGlmICghaXM8U2Nyb2xsQW5pbWF0aW9uU21v
b3RoPihtX2N1cnJlbnRBbmltYXRpb24uZ2V0KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsQW5pbWF0aW9ucywgc3RyZWFtIDw8ICJTY3JvbGxp
bmdFZmZlY3RzQ29udHJvbGxlciAiIDw8IHRoaXMgPDwgIiByZXRhcmdldEFuaW1hdGVkU2Nyb2xs
QnkgIiA8PCBvZmZzZXQpOworCisgICAgQVNTRVJUKG1fY3VycmVudEFuaW1hdGlvbi0+aXNBY3Rp
dmUoKSk7CisgICAgaWYgKGF1dG8gZGVzdGluYXRpb25PZmZzZXQgPSBtX2N1cnJlbnRBbmltYXRp
b24tPmRlc3RpbmF0aW9uT2Zmc2V0KCkpCisgICAgICAgIHJldHVybiBtX2N1cnJlbnRBbmltYXRp
b24tPnJldGFyZ2V0QWN0aXZlQW5pbWF0aW9uKCpkZXN0aW5hdGlvbk9mZnNldCArIG9mZnNldCk7
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHZvaWQgU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xs
ZXI6OnN0b3BBbmltYXRlZFNjcm9sbCgpCiB7CiAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbEFu
aW1hdGlvbnMsIHN0cmVhbSA8PCAiU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIgIiA8PCB0aGlz
IDw8ICIgc3RvcEFuaW1hdGVkU2Nyb2xsIik7CkBAIC0zNTEsMTAgKzM2NSw3IEBAIGJvb2wgU2Ny
b2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1X
aGVlbEV2ZW50JiB3aGVlCiAKICNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKICAgICBpZiAo
bV9jbGllbnQuc2Nyb2xsQW5pbWF0aW9uRW5hYmxlZCgpICYmICFtX2luU2Nyb2xsR2VzdHVyZSkg
ewotICAgICAgICBpZiAoaXM8U2Nyb2xsQW5pbWF0aW9uU21vb3RoPihtX2N1cnJlbnRBbmltYXRp
b24uZ2V0KCkpKSB7Ci0gICAgICAgICAgICBhdXRvIGxhc3REZXN0aW5hdGlvbk9mZnNldCA9IGRv
d25jYXN0PFNjcm9sbEFuaW1hdGlvblNtb290aD4oKm1fY3VycmVudEFuaW1hdGlvbikuZGVzdGlu
YXRpb25PZmZzZXQoKTsKLSAgICAgICAgICAgIHJldGFyZ2V0QW5pbWF0ZWRTY3JvbGwobGFzdERl
c3RpbmF0aW9uT2Zmc2V0ICsgRmxvYXRTaXplIHsgZGVsdGFYLCBkZWx0YVkgfSk7Ci0gICAgICAg
IH0gZWxzZQorICAgICAgICBpZiAoIXJldGFyZ2V0QW5pbWF0ZWRTY3JvbGxCeSh7IGRlbHRhWCwg
ZGVsdGFZIH0pKQogICAgICAgICAgICAgc3RhcnRBbmltYXRlZFNjcm9sbFRvRGVzdGluYXRpb24o
c2Nyb2xsT2Zmc2V0LCBzY3JvbGxPZmZzZXQgKyBGbG9hdFNpemUgeyBkZWx0YVgsIGRlbHRhWSB9
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyLmgKaW5kZXggNTBlZmNiNzgxNDM2
NTcyODAyN2Y0YTk4NTliODgyYmRjYjJlNDNmMS4uOWRkZmY4MDg5OWY4NmIxYTg5MWJlOWFiZjc0
ZTc2YjRlNDFlYTIwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
aW5nRWZmZWN0c0NvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxpbmdFZmZlY3RzQ29udHJvbGxlci5oCkBAIC0xMzUsNiArMTM1LDcgQEAgcHVibGljOgogCiAg
ICAgYm9vbCBzdGFydEFuaW1hdGVkU2Nyb2xsVG9EZXN0aW5hdGlvbihGbG9hdFBvaW50IHN0YXJ0
T2Zmc2V0LCBGbG9hdFBvaW50IGRlc3RpbmF0aW9uT2Zmc2V0KTsKICAgICBib29sIHJldGFyZ2V0
QW5pbWF0ZWRTY3JvbGwoRmxvYXRQb2ludCBuZXdEZXN0aW5hdGlvbk9mZnNldCk7CisgICAgYm9v
bCByZXRhcmdldEFuaW1hdGVkU2Nyb2xsQnkoRmxvYXRTaXplKTsKICAgICB2b2lkIHN0b3BBbmlt
YXRlZFNjcm9sbCgpOwogCiAgICAgdm9pZCBzdG9wS2V5Ym9hcmRTY3JvbGxpbmcoKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>