<?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>104276</bug_id>
          
          <creation_ts>2012-12-06 10:55:27 -0800</creation_ts>
          <short_desc>REGRESSION (r133807): Sticky-position review bar on bugzilla review page is jumpy</short_desc>
          <delta_ts>2013-02-11 14:59:35 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>https://bugs.webkit.org/attachment.cgi?id=177884&amp;action=review</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>105245</dependson>
    
    <dependson>106946</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>abarth</cc>
    
    <cc>bdakin</cc>
    
    <cc>mitz</cc>
    
    <cc>ojan</cc>
    
    <cc>rniwa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>tony</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>785049</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-12-06 10:55:27 -0800</bug_when>
    <thetext>Code review toolbar doesn&apos;t stick to the bottom while scrolling.

I suspect that this didn&apos;t start with &lt;http://trac.webkit.org/r133807&gt; immediately, but became observable with &lt;http://trac.webkit.org/r136587&gt;, because I first noticed this issue today.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785054</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-12-06 10:56:45 -0800</bug_when>
    <thetext>&lt;rdar://problem/12827187&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785072</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-12-06 11:23:28 -0800</bug_when>
    <thetext>Is this a bug in the code review tool or a bug with position:sticky in WebKit?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785106</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-12-06 11:47:43 -0800</bug_when>
    <thetext>It&apos;s definitely a bug (regression) in WebKit. But it can also be seen as a bug in the review tool that it uses a feature that&apos;s broken in WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785108</commentid>
    <comment_count>4</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-12-06 11:49:29 -0800</bug_when>
    <thetext>Alexey: Can you use inspector and see what the CSS value for &apos;position&apos; is on #toolbar?  Also, this is in Safari, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785163</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-12-06 12:50:23 -0800</bug_when>
    <thetext>The position:sticky element isn&apos;t getting a compositing layer, because I don&apos;t think we&apos;ve hooked that up yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785169</commentid>
    <comment_count>6</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-12-06 12:57:56 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; The position:sticky element isn&apos;t getting a compositing layer, because I don&apos;t think we&apos;ve hooked that up yet.

If the feature doesn&apos;t work, maybe it shouldn&apos;t be enabled? It works fine for me in my non-compositing enabled world.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785170</commentid>
    <comment_count>7</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-12-06 13:01:08 -0800</bug_when>
    <thetext>It&apos;s only jumpy on Mac in threaded scrolling mode. It&apos;s work in progress; no need to disable anything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785192</commentid>
    <comment_count>8</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-12-06 13:29:28 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; It&apos;s only jumpy on Mac in threaded scrolling mode. It&apos;s work in progress; no need to disable anything.

Is there a way to feature detect this?  Should I just leave it as is until the sticky bug gets fixed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785198</commentid>
    <comment_count>9</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-12-06 13:34:57 -0800</bug_when>
    <thetext>Ojan, have you actually seen the problem?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785210</commentid>
    <comment_count>10</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-12-06 13:42:17 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; It&apos;s only jumpy on Mac in threaded scrolling mode. It&apos;s work in progress; no need to disable anything.
&gt; 
&gt; Is there a way to feature detect this?  Should I just leave it as is until the sticky bug gets fixed?

There is not a way to feature detect this. And yes, I think you should leave it as it is.

The best way to resolve this will be to get position:sticky things scrolling on the scrolling thread. I&apos;m eager to do that anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785214</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-12-06 13:44:54 -0800</bug_when>
    <thetext>This is super annoying when reviewing patches. I hope that this can be addressed one way or another reasonably soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807507</commentid>
    <comment_count>12</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-01-15 11:32:26 -0800</bug_when>
    <thetext>This has been mostly fixed in bug 105245. One remaining case is jumpiness with rubberbanding, not sure what&apos;s the best way to track this. Is there a separate existing bug tracking the remaining issue?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807715</commentid>
    <comment_count>13</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-01-15 14:47:46 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; This has been mostly fixed in bug 105245. One remaining case is jumpiness with rubberbanding, not sure what&apos;s the best way to track this. Is there a separate existing bug tracking the remaining issue?

No. I filed bug 106946.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820716</commentid>
    <comment_count>14</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-01-30 15:44:17 -0800</bug_when>
    <thetext>The remaining issue is that the bar hops when you click on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822313</commentid>
    <comment_count>15</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-01-31 21:51:52 -0800</bug_when>
    <thetext>I think this is caused by the order of things when we commit new tree state. We first update the scroll position of the root node, but this triggers a scroll position change on the sticky node child:

* thread #13: tid = 0x3c03, 0x0000000104c2737b WebCore`WebCore::ScrollingTreeStickyNode::parentScrollPositionDidChange(WebCore::IntRect const&amp;, WebCore::FloatSize const&amp;) + 491 at ScrollingTreeStickyNode.mm:78, stop reason = step over
    frame #0: 0x0000000104c2737b WebCore`WebCore::ScrollingTreeStickyNode::parentScrollPositionDidChange(WebCore::IntRect const&amp;, WebCore::FloatSize const&amp;) + 491 at ScrollingTreeStickyNode.mm:78
    frame #1: 0x0000000104c2530f WebCore`WebCore::ScrollingTreeScrollingNodeMac::setScrollLayerPosition(WebCore::IntPoint const&amp;) + 927 at ScrollingTreeScrollingNodeMac.mm:311
    frame #2: 0x0000000104c24683 WebCore`WebCore::ScrollingTreeScrollingNodeMac::setScrollPositionWithoutContentEdgeConstraints(WebCore::IntPoint const&amp;) + 131 at ScrollingTreeScrollingNodeMac.mm:290
    frame #3: 0x0000000104c245c8 WebCore`WebCore::ScrollingTreeScrollingNodeMac::setScrollPosition(WebCore::IntPoint const&amp;) + 120 at ScrollingTreeScrollingNodeMac.mm:274
    frame #4: 0x0000000104c22e69 WebCore`WebCore::ScrollingTreeScrollingNodeMac::update(WebCore::ScrollingStateNode*) + 249 at ScrollingTreeScrollingNodeMac.mm:80
    frame #5: 0x0000000104c1bea3 WebCore`WebCore::ScrollingTree::updateTreeFromStateNode(WebCore::ScrollingStateNode*) + 243 at ScrollingTree.cpp:156
    frame #6: 0x0000000104c1bcca WebCore`WebCore::ScrollingTree::commitNewTreeState(WTF::PassOwnPtr&lt;WebCore::ScrollingStateTree&gt;) + 602 at ScrollingTree.cpp:145
    frame #7: 0x0000000104c0f9a6 WebCore`WTF::FunctionWrapper&lt;void (WebCore::ScrollingTree::*)(WTF::PassOwnPtr&lt;WebCore::ScrollingStateTree&gt;)&gt;::operator()(WebCore::ScrollingTree*, WTF::PassOwnPtr&lt;WebCore::ScrollingStateTree&gt;) + 150 at Functional.h:246
    frame #8: 0x0000000104c0f8d5 WebCore`WTF::BoundFunctionImpl&lt;WTF::FunctionWrapper&lt;void (WebCore::ScrollingTree::*)(WTF::PassOwnPtr&lt;WebCore::ScrollingStateTree&gt;)&gt;, void (WebCore::ScrollingTree*, WTF::PassOwnPtr&lt;WebCore::ScrollingStateTree&gt;)&gt;::operator()() + 101 at Functional.h:522
    frame #9: 0x0000000104ba07b9 WebCore`WTF::Function&lt;void ()&gt;::operator()() const + 137 at Functional.h:704
    frame #10: 0x0000000104c19fda WebCore`WebCore::ScrollingThread::dispatchFunctionsFromScrollingThread() + 218 at ScrollingThread.cpp:117
    frame #11: 0x0000000104c1b13a WebCore`WebCore::ScrollingThread::threadRunLoopSourceCallback() + 74 at ScrollingThreadMac.mm:67
    frame #12: 0x0000000104c1b095 WebCore`WebCore::ScrollingThread::threadRunLoopSourceCallback(void*) + 21 at ScrollingThreadMac.mm:61
    frame #13: 0x00007fff85bb3101 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
    frame #14: 0x00007fff85bb2a25 CoreFoundation`__CFRunLoopDoSources0 + 245
    frame #15: 0x00007fff85bd5dc5 CoreFoundation`__CFRunLoopRun + 789
    frame #16: 0x00007fff85bd56b2 CoreFoundation`CFRunLoopRunSpecific + 290
    frame #17: 0x00007fff85be4371 CoreFoundation`CFRunLoopRun + 97
    frame #18: 0x0000000104c1b037 WebCore`WebCore::ScrollingThread::initializeRunLoop() + 503 at ScrollingThreadMac.mm:50
    frame #19: 0x0000000104c19ef5 WebCore`WebCore::ScrollingThread::threadBody() + 21 at ScrollingThread.cpp:102
    frame #20: 0x0000000104c19ed5 WebCore`WebCore::ScrollingThread::threadCallback(void*) + 21 at ScrollingThread.cpp:97
    frame #21: 0x0000000102911200 JavaScriptCore`threadEntryPoint + 144 at Threading.cpp:69
    frame #22: 0x0000000102911bf8 JavaScriptCore`wtfThreadEntryPoint + 104 at ThreadingPthreads.cpp:196
    frame #23: 0x00007fff8715b742 libsystem_c.dylib`_pthread_start + 327
    frame #24: 0x00007fff87148181 libsystem_c.dylib`thread_start + 13

However at this point the sticky node has stale viewport constraints; those aren&apos;t updated until we&apos;re done updating the root node.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822346</commentid>
    <comment_count>16</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-01-31 22:51:15 -0800</bug_when>
    <thetext>Fixing the commit ordering fixes this. In general, I think a tree update should never end up touching layer properties; they should already be up-to-date because the main thread telling us that stuff changed.

So ScrollingTreeScrollingNodeMac::update() should updating the scroll position, not setting it, and this should not recur into children. It&apos;s unclear to me whether ScrollingTree&apos;s m_mainFrameScrollPosition needs to be updated (why is this on the tree and not the root node?).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822347</commentid>
    <comment_count>17</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-01-31 22:51:48 -0800</bug_when>
    <thetext>Hacky patch:

diff --git a/Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.mm b/Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.mm
index 300a12d28d13ab44ff47a5ad76d42bae9d25ae37..df0f1166f3d03c261acbf4cea4e116c98e06a8fa 100644
--- a/Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.mm
+++ b/Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.mm
@@ -440,6 +440,7 @@ void ScrollingCoordinatorMac::updateViewportConstrainedNode(ScrollingNodeID node
         break;
     }
     }
+    scheduleTreeStateCommit();
 }
 
 void ScrollingCoordinatorMac::scheduleTreeStateCommit()
diff --git a/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.h b/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.h
index fe1c2420b9109500d1fc4bbede85d3dc01cc482a..192e4207108be60b615f3d15a04e95af692b6f58 100644
--- a/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.h
+++ b/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.h
@@ -72,6 +72,7 @@ private:
     void scrollBy(const IntSize&amp;);
     void scrollByWithoutContentEdgeConstraints(const IntSize&amp;);
 
+    void updateScrollPosition(const IntPoint&amp;);
     void updateMainFramePinState(const IntPoint&amp; scrollPosition);
 
     void logExposedUnfilledArea();
diff --git a/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm b/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm
index 663c7341b68f8baf911f4620f61f172e59d0b291..8acddd12fbb54220291cf931fed58366c66d2675 100644
--- a/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm
+++ b/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm
@@ -77,7 +77,7 @@ void ScrollingTreeScrollingNodeMac::update(ScrollingStateNode* stateNode)
         m_counterScrollingLayer = state-&gt;counterScrollingPlatformLayer();
 
     if (state-&gt;changedProperties() &amp; ScrollingStateScrollingNode::RequestedScrollPosition)
-        setScrollPosition(state-&gt;requestedScrollPosition());
+        updateScrollPosition(state-&gt;requestedScrollPosition());
 
     if (state-&gt;scrollLayerDidChange() || state-&gt;changedProperties() &amp; (ScrollingStateScrollingNode::ContentsSize | ScrollingStateScrollingNode::ViewportRect))
         updateMainFramePinState(scrollPosition());
@@ -336,6 +336,20 @@ void ScrollingTreeScrollingNodeMac::scrollByWithoutContentEdgeConstraints(const
     setScrollPositionWithoutContentEdgeConstraints(scrollPosition() + offset);
 }
 
+void ScrollingTreeScrollingNodeMac::updateScrollPosition(const IntPoint&amp; scrollPosition)
+{
+    IntPoint newScrollPosition = scrollPosition;
+    newScrollPosition = newScrollPosition.shrunkTo(maximumScrollPosition());
+    newScrollPosition = newScrollPosition.expandedTo(minimumScrollPosition());
+
+    updateMainFramePinState(newScrollPosition);
+
+//    {
+//        MutexLocker lock(m_mutex);
+//        m_mainFrameScrollPosition = newScrollPosition;
+//    }
+}
+
 void ScrollingTreeScrollingNodeMac::updateMainFramePinState(const IntPoint&amp; scrollPosition)
 {
     bool pinnedToTheLeft = scrollPosition.x() &lt;= minimumScrollPosition().x();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828951</commentid>
    <comment_count>18</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-02-08 21:55:12 -0800</bug_when>
    <thetext>*** Bug 109347 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830158</commentid>
    <comment_count>19</comment_count>
      <attachid>187683</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-02-11 14:48:47 -0800</bug_when>
    <thetext>Created attachment 187683
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830162</commentid>
    <comment_count>20</comment_count>
      <attachid>187683</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-02-11 14:52:06 -0800</bug_when>
    <thetext>Comment on attachment 187683
Patch

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

&gt; Source/WebCore/ChangeLog:35
&gt; +        scroll position request, but if only the viewport constaints change, we also need

constraints.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830172</commentid>
    <comment_count>21</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-02-11 14:59:35 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/142520</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187683</attachid>
            <date>2013-02-11 14:48:47 -0800</date>
            <delta_ts>2013-02-11 14:52:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104276-20130211144519.patch</filename>
            <type>text/plain</type>
            <size>16219</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyNTA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWViZWQwYzYzYWExMTdi
NTUxMDk2YmQ1NzExZTczNmY2ZGFhZmMzOC4uNjMzNTFlYzJjMWJmNjIwOTE0ZDYxOWRlMzQ2ZDkz
MjIxNzc3NzQwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDU2IEBACiAyMDEzLTAyLTExICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCisgICAgICAgIFJFR1JFU1NJT04g
KHIxMzM4MDcpOiBTdGlja3ktcG9zaXRpb24gcmV2aWV3IGJhciBvbiBidWd6aWxsYSByZXZpZXcg
cGFnZSBpcyBqdW1weQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTA0Mjc2CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjgyNzE4Nz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIGNvbW1pdHRpbmcg
bmV3IHNjcm9sbGluZyB0cmVlIHN0YXRlLCBpZiB0aGUgcm9vdCBub2RlIGhhcyBhIHNjcm9sbAor
ICAgICAgICBwb3NpdGlvbiB1cGRhdGUsIHdlIHdvdWxkIGhhbmRsZSB0aGF0IGJlZm9yZSB1cGRh
dGluZyB0aGUgc3RhdGUgb2YgY2hpbGQKKyAgICAgICAgbm9kZXMgKHdpdGggcG9zc2libHkgbmV3
IHZpZXdwb3J0IGNvbnN0cmFpbnRzKS4gVGhhdCB3b3VsZCBjYXVzZSBpbmNvcnJlY3QKKyAgICAg
ICAgY2hpbGQgbGF5ZXIgdXBkYXRlcy4KKyAgICAgICAgCisgICAgICAgIEZpeCBieSBhZGRpbmcg
YSBzZWNvbmQgJ3VwZGF0ZScgcGhhc2UgdGhhdCBoYXBwZW5zIGFmdGVyIGNoaWxkIG5vZGVzLAor
ICAgICAgICBhbmQgbW92aW5nIHRoZSBzY3JvbGwgcG9zaXRpb24gdXBkYXRlIGludG8gdGhhdC4K
KworICAgICAgICBTY3JvbGxpbmcgdGVzdHMgb25seSBkdW1wIHRoZSBzdGF0ZSB0cmVlLCBzbyBj
YW5ub3QgdGVzdCB0aGUgYnVnLgorCisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpzZXRTY3JvbGxQb3NpdGlvbik6IElmIHRoZSBzY3Jv
bGwgcG9zaXRpb24gZGlkbid0CisgICAgICAgIGFjdHVhbGx5IGNoYW5nZSwgZG9uJ3QgcmVxdWVz
dCBhIHNjcm9sbCBwb3NpdGlvbiB1cGRhdGUgZnJvbSB0aGUgU2Nyb2xsaW5nQ29vcmRpbmF0b3Iu
CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxpbmdUcmVlOjp1cGRhdGVUcmVlRnJvbVN0YXRlTm9kZSk6IEtlZXAgdHJh
Y2sgb2YgdGhlIHNjcm9sbGluZyBub2RlIHNvCisgICAgICAgIHRoYXQgd2UgY2FuIGNhbGwgdXBk
YXRlQWZ0ZXJDaGlsZHJlbigpIG9uIGl0LgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ1RyZWVOb2RlLmg6CisgICAgICAgIChTY3JvbGxpbmdUcmVlTm9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxpbmdUcmVlTm9kZTo6dXBkYXRlQWZ0ZXJDaGlsZHJlbik6CisgICAgICAg
ICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6OnVwZGF0ZUJlZm9yZUNoaWxk
cmVuKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9k
ZS5oOgorICAgICAgICAoU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUpOgorICAgICAgICAqIHBh
Z2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGluYXRvck1hYy5tbToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjp1cGRhdGVWaWV3cG9ydENvbnN0cmFpbmVk
Tm9kZSk6CisgICAgICAgIEluIHRoZSBjdXJyZW50IGJ1ZyB0aGUgc2Nyb2xsaW5nIHRyZWUgd2Fz
IHNjaGVkdWxlZCBmb3IgY29tbWl0IGJlY2F1c2Ugb2YgYQorICAgICAgICBzY3JvbGwgcG9zaXRp
b24gcmVxdWVzdCwgYnV0IGlmIG9ubHkgdGhlIHZpZXdwb3J0IGNvbnN0YWludHMgY2hhbmdlLCB3
ZSBhbHNvIG5lZWQKKyAgICAgICAgdG8gY29tbWl0IHRoZSB0cmVlLgorICAgICAgICAqIHBhZ2Uv
c2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlRml4ZWROb2RlLmg6CisgICAgICAgIChTY3JvbGxp
bmdUcmVlRml4ZWROb2RlKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5n
VHJlZUZpeGVkTm9kZS5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGaXhlZE5v
ZGU6OnVwZGF0ZUJlZm9yZUNoaWxkcmVuKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMv
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMuaDoKKyAgICAgICAgKFNjcm9sbGluZ1RyZWVT
Y3JvbGxpbmdOb2RlTWFjKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVl
U2Nyb2xsaW5nTm9kZU1hYzo6dXBkYXRlQmVmb3JlQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWM6OnVwZGF0ZUFmdGVyQ2hpbGRyZW4pOiBN
b3ZlIGNvZGUgaGVyZQorICAgICAgICB0aGF0IHVwZGF0ZXMgdGhpbmdzIHRoYXQgaGF2ZSB0byBo
YXBwZW4gYWZ0ZXIgY2hpbGRyZW4uCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9s
bGluZ1RyZWVTdGlja3lOb2RlLmg6CisgICAgICAgIChTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZSk6
CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTdGlja3lOb2RlLm1t
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVN0aWNreU5vZGU6OnVwZGF0ZUJlZm9y
ZUNoaWxkcmVuKToKKworMjAxMy0wMi0xMSAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFw
cGxlLmNvbT4KKwogICAgICAgICBTY3JvbGxpbmdUcmVlIG5vZGUgbWFwcyBrZWVwIGdldHRpbmcg
bGFyZ2VyCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MDkzNDgKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IDMzY2NlYTYwZmM1NWRjMTU5
OGVhOWFhYzZiNDY2OTA2YmVhN2ZmOWIuLmFjMGU4Zjg1YmE1OGVjMjA0NDBhM2E4MzllZmZkMzE5
NGE5Y2FiZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTE3NzUsNiArMTc3NSw5
IEBAIHZvaWQgRnJhbWVWaWV3OjpzY3JvbGxFbGVtZW50VG9SZWN0KEVsZW1lbnQqIGVsZW1lbnQs
IGNvbnN0IEludFJlY3QmIHJlY3QpCiAKIHZvaWQgRnJhbWVWaWV3OjpzZXRTY3JvbGxQb3NpdGlv
bihjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9pbnQpCiB7CisgICAgaWYgKHNjcm9sbFBvaW50ID09
IHNjcm9sbFBvc2l0aW9uKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIFRlbXBvcmFyeUNoYW5n
ZTxib29sPiBjaGFuZ2VJblByb2dyYW1tYXRpY1Njcm9sbChtX2luUHJvZ3JhbW1hdGljU2Nyb2xs
LCB0cnVlKTsKICAgICBtX21haW50YWluU2Nyb2xsUG9zaXRpb25BbmNob3IgPSAwOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUuY3BwCmluZGV4IDBk
ODAzZDRhNzg4ZmI0YzU3ZDM4N2UxNjkyYjg5YjQwMDU5M2IwYzguLjIwNjE5ZGZjN2NkMTEzNDA2
OWUyOTE1ZjI1OGVjM2Y4MWQ1OTRkNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbGluZ1RyZWUuY3BwCkBAIC0xNTEsOSArMTUxLDEwIEBAIHZvaWQgU2Nyb2xs
aW5nVHJlZTo6dXBkYXRlVHJlZUZyb21TdGF0ZU5vZGUoU2Nyb2xsaW5nU3RhdGVOb2RlKiBzdGF0
ZU5vZGUpCiAgICAgLy8gRmluZCB0aGUgU2Nyb2xsaW5nVHJlZU5vZGUgYXNzb2NpYXRlZCB3aXRo
IHRoZSBjdXJyZW50IHN0YXRlTm9kZSB1c2luZyB0aGUgc2hhcmVkIElEIGFuZCBvdXIgSGFzaE1h
cC4KICAgICBTY3JvbGxpbmdUcmVlTm9kZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX25vZGVN
YXAuZmluZChzdGF0ZU5vZGUtPnNjcm9sbGluZ05vZGVJRCgpKTsKIAorICAgIFNjcm9sbGluZ1Ry
ZWVOb2RlKiBub2RlOwogICAgIGlmIChpdCAhPSBtX25vZGVNYXAuZW5kKCkpIHsKLSAgICAgICAg
U2Nyb2xsaW5nVHJlZU5vZGUqIG5vZGUgPSBpdC0+dmFsdWU7Ci0gICAgICAgIG5vZGUtPnVwZGF0
ZShzdGF0ZU5vZGUpOworICAgICAgICBub2RlID0gaXQtPnZhbHVlOworICAgICAgICBub2RlLT51
cGRhdGVCZWZvcmVDaGlsZHJlbihzdGF0ZU5vZGUpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8v
IElmIHRoZSBub2RlIGlzbid0IGZvdW5kLCBpdCdzIGVpdGhlciBuZXcgYW5kIG5lZWRzIHRvIGJl
IGFkZGVkIHRvIHRoZSB0cmVlLCBvciB0aGVyZSBpcyBhIG5ldyBJRCBmb3Igb3VyCiAgICAgICAg
IC8vIHJvb3Qgbm9kZS4KQEAgLTE2NCw3ICsxNjUsOCBAQCB2b2lkIFNjcm9sbGluZ1RyZWU6OnVw
ZGF0ZVRyZWVGcm9tU3RhdGVOb2RlKFNjcm9sbGluZ1N0YXRlTm9kZSogc3RhdGVOb2RlKQogCiAg
ICAgICAgICAgICBtX3Jvb3ROb2RlID0gU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6OmNyZWF0
ZSh0aGlzLCBub2RlSUQpOwogICAgICAgICAgICAgbV9ub2RlTWFwLnNldChub2RlSUQsIG1fcm9v
dE5vZGUuZ2V0KCkpOwotICAgICAgICAgICAgbV9yb290Tm9kZS0+dXBkYXRlKHN0YXRlTm9kZSk7
CisgICAgICAgICAgICBtX3Jvb3ROb2RlLT51cGRhdGVCZWZvcmVDaGlsZHJlbihzdGF0ZU5vZGUp
OworICAgICAgICAgICAgbm9kZSA9IG1fcm9vdE5vZGUuZ2V0KCk7CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICBPd25QdHI8U2Nyb2xsaW5nVHJlZU5vZGU+IG5ld05vZGU7CiAgICAgICAg
ICAgICBpZiAoc3RhdGVOb2RlLT5pc1Njcm9sbGluZ05vZGUoKSkKQEAgLTE3Niw4ICsxNzgsOCBA
QCB2b2lkIFNjcm9sbGluZ1RyZWU6OnVwZGF0ZVRyZWVGcm9tU3RhdGVOb2RlKFNjcm9sbGluZ1N0
YXRlTm9kZSogc3RhdGVOb2RlKQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogCi0gICAgICAgICAgICBTY3JvbGxpbmdUcmVlTm9kZSogbmV3
Tm9kZVJhd1B0ciA9IG5ld05vZGUuZ2V0KCk7Ci0gICAgICAgICAgICBtX25vZGVNYXAuc2V0KG5v
ZGVJRCwgbmV3Tm9kZVJhd1B0cik7CisgICAgICAgICAgICBub2RlID0gbmV3Tm9kZS5nZXQoKTsK
KyAgICAgICAgICAgIG1fbm9kZU1hcC5zZXQobm9kZUlELCBub2RlKTsKICAgICAgICAgICAgIFNj
cm9sbGluZ1RyZWVOb2RlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbm9kZU1hcC5maW5kKHN0
YXRlTm9kZS0+cGFyZW50KCktPnNjcm9sbGluZ05vZGVJRCgpKTsKICAgICAgICAgICAgIEFTU0VS
VChpdCAhPSBtX25vZGVNYXAuZW5kKCkpOwogICAgICAgICAgICAgaWYgKGl0ICE9IG1fbm9kZU1h
cC5lbmQoKSkgewpAQCAtMTg1LDcgKzE4Nyw3IEBAIHZvaWQgU2Nyb2xsaW5nVHJlZTo6dXBkYXRl
VHJlZUZyb21TdGF0ZU5vZGUoU2Nyb2xsaW5nU3RhdGVOb2RlKiBzdGF0ZU5vZGUpCiAgICAgICAg
ICAgICAgICAgbmV3Tm9kZS0+c2V0UGFyZW50KHBhcmVudCk7CiAgICAgICAgICAgICAgICAgcGFy
ZW50LT5hcHBlbmRDaGlsZChuZXdOb2RlLnJlbGVhc2UoKSk7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBuZXdOb2RlUmF3UHRyLT51cGRhdGUoc3RhdGVOb2RlKTsKKyAgICAgICAgICAgIG5v
ZGUtPnVwZGF0ZUJlZm9yZUNoaWxkcmVuKHN0YXRlTm9kZSk7CiAgICAgICAgIH0KICAgICB9CiAK
QEAgLTE5Nyw2ICsxOTksOCBAQCB2b2lkIFNjcm9sbGluZ1RyZWU6OnVwZGF0ZVRyZWVGcm9tU3Rh
dGVOb2RlKFNjcm9sbGluZ1N0YXRlTm9kZSogc3RhdGVOb2RlKQogICAgIHNpemVfdCBzaXplID0g
c3RhdGVOb2RlQ2hpbGRyZW4tPnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNp
emU7ICsraSkKICAgICAgICAgdXBkYXRlVHJlZUZyb21TdGF0ZU5vZGUoc3RhdGVOb2RlQ2hpbGRy
ZW4tPmF0KGkpLmdldCgpKTsKKyAgICAKKyAgICBub2RlLT51cGRhdGVBZnRlckNoaWxkcmVuKHN0
YXRlTm9kZSk7CiB9CiAKIHZvaWQgU2Nyb2xsaW5nVHJlZTo6cmVtb3ZlRGVzdHJveWVkTm9kZXMo
U2Nyb2xsaW5nU3RhdGVUcmVlKiBzdGF0ZVRyZWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZU5vZGUuaAppbmRleCAwMTQyNDRiNWNhZTE1MzZjOThk
MTI1YWVjNWNmMjA0MTM3MzFlYmY5Li41NmUxMDBkMGVmMDlmYjdlNTQxZjE3ZTg2YTgzODM4Yjkx
MmE2YzA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdUcmVlTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGlu
Z1RyZWVOb2RlLmgKQEAgLTQ0LDcgKzQ0LDggQEAgcHVibGljOgogICAgIGV4cGxpY2l0IFNjcm9s
bGluZ1RyZWVOb2RlKFNjcm9sbGluZ1RyZWUqLCBTY3JvbGxpbmdOb2RlSUQpOwogICAgIHZpcnR1
YWwgflNjcm9sbGluZ1RyZWVOb2RlKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlKFNjcm9s
bGluZ1N0YXRlTm9kZSopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQmVmb3JlQ2hpbGRy
ZW4oU2Nyb2xsaW5nU3RhdGVOb2RlKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVBZnRl
ckNoaWxkcmVuKFNjcm9sbGluZ1N0YXRlTm9kZSopIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIHBh
cmVudFNjcm9sbFBvc2l0aW9uRGlkQ2hhbmdlKGNvbnN0IEludFJlY3QmIHZpZXdwb3J0UmVjdCwg
Y29uc3QgRmxvYXRTaXplJiBjdW11bGF0aXZlRGVsdGEpID0gMDsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05v
ZGUuY3BwCmluZGV4IDU5MWVhMjUwZDNkNTliM2I4MjU1MzQ0OTNiN2EwZDI1ZDE1OTgwNzkuLjFm
MmM1ODMzZTg4ZDAyNmI2NzhjYjYwMTgwNTI5MjJhZGM4OGQ3NGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZS5jcHAKQEAgLTQ5LDcgKzQ5LDcgQEAgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6On5T
Y3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZSgpCiB7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nVHJlZVNj
cm9sbGluZ05vZGU6OnVwZGF0ZShTY3JvbGxpbmdTdGF0ZU5vZGUqIHN0YXRlTm9kZSkKK3ZvaWQg
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6OnVwZGF0ZUJlZm9yZUNoaWxkcmVuKFNjcm9sbGlu
Z1N0YXRlTm9kZSogc3RhdGVOb2RlKQogewogICAgIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9k
ZSogc3RhdGUgPSB0b1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZShzdGF0ZU5vZGUpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Ny
b2xsaW5nTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJl
ZVNjcm9sbGluZ05vZGUuaAppbmRleCBhNjkwMWY5YTA4YWExZmZiNmE0YWM5NDQwOTFhYjZjNmU5
MTczMzIzLi4wZjc5MTczN2M3MDk4YWMyM2U4OTJjOTBiNWU1NTM4ZTkxOGM5MzM0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVT
Y3JvbGxpbmdOb2RlLmgKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNz
T3duUHRyPFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlPiBjcmVhdGUoU2Nyb2xsaW5nVHJlZSos
IFNjcm9sbGluZ05vZGVJRCk7CiAgICAgdmlydHVhbCB+U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05v
ZGUoKTsKIAotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGUoU2Nyb2xsaW5nU3RhdGVOb2RlKikgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUJlZm9yZUNoaWxkcmVuKFNjcm9sbGluZ1N0
YXRlTm9kZSopIE9WRVJSSURFOwogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBpbXBsZW1lbnQg
dGhpcyB3aGVuIHdlIHN1cHBvcnQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVzIGFzIGNoaWxk
cmVuLgogICAgIHZpcnR1YWwgdm9pZCBwYXJlbnRTY3JvbGxQb3NpdGlvbkRpZENoYW5nZShjb25z
dCBJbnRSZWN0JiAvKnZpZXdwb3J0UmVjdCovLCBjb25zdCBGbG9hdFNpemUmIC8qY3VtdWxhdGl2
ZURlbHRhKi8pIE9WRVJSSURFIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvbWFjL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLm1tIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLm1tCmluZGV4IDkyMDM4
MTBmM2U0Y2Y0YmVhODY3YzY4MDI0MjFiNWJjMjExMmIzNTEuLjM4MTI3ZjMzZTg2NDUyYTE2OTBk
MDNjYWQ4YThjODczNWVlMmExMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGluYXRvck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMubW0KQEAgLTM2MSw2
ICszNjEsNyBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjp1cGRhdGVWaWV3cG9ydENv
bnN0cmFpbmVkTm9kZShTY3JvbGxpbmdOb2RlSUQgbm9kZQogICAgICAgICBicmVhazsKICAgICB9
CiAgICAgfQorICAgIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7CiB9CiAKIHZvaWQgU2Nyb2xs
aW5nQ29vcmRpbmF0b3JNYWM6OnNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlRml4ZWROb2Rl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZUZpeGVk
Tm9kZS5oCmluZGV4IDc5NzFjNWZkNTg4Njk2YzdmZTQ4MmZhMWViNjg0NGI3OGI0NjgzNGEuLjQw
NTdlNTU4NTRjYzU1M2IwMzdkMDM2N2UxMzI3NmE4ZTQ3NDQyMGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlRml4ZWROb2RlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVGaXhlZE5v
ZGUuaApAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNjcm9sbGluZ1Ry
ZWVGaXhlZE5vZGUoU2Nyb2xsaW5nVHJlZSosIFNjcm9sbGluZ05vZGVJRCk7CiAKLSAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlKFNjcm9sbGluZ1N0YXRlTm9kZSopIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVCZWZvcmVDaGlsZHJlbihTY3JvbGxpbmdTdGF0ZU5vZGUqKSBPVkVSUklE
RTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyZW50U2Nyb2xsUG9zaXRpb25EaWRDaGFuZ2UoY29uc3Qg
SW50UmVjdCYgdmlld3BvcnRSZWN0LCBjb25zdCBGbG9hdFNpemUmIGN1bXVsYXRpdmVEZWx0YSkg
T1ZFUlJJREU7CiAKICAgICBGaXhlZFBvc2l0aW9uVmlld3BvcnRDb25zdHJhaW50cyBtX2NvbnN0
cmFpbnRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Nj
cm9sbGluZ1RyZWVGaXhlZE5vZGUubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9t
YWMvU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZS5tbQppbmRleCBkMDQ2MzVmYTNkOGVjNmMyM2I0NGFi
YjRhMGM3OThlNWQ1ODEzZWRhLi5kOWU0Y2U1OTUzMzhlNjhlNjU2OWY2ODE3YmYwZGY0YmU4Y2Mz
MDNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xs
aW5nVHJlZUZpeGVkTm9kZS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9t
YWMvU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZS5tbQpAQCAtNDcsNyArNDcsNyBAQCBTY3JvbGxpbmdU
cmVlRml4ZWROb2RlOjp+U2Nyb2xsaW5nVHJlZUZpeGVkTm9kZSgpCiB7CiB9CiAKLXZvaWQgU2Ny
b2xsaW5nVHJlZUZpeGVkTm9kZTo6dXBkYXRlKFNjcm9sbGluZ1N0YXRlTm9kZSogc3RhdGVOb2Rl
KQordm9pZCBTY3JvbGxpbmdUcmVlRml4ZWROb2RlOjp1cGRhdGVCZWZvcmVDaGlsZHJlbihTY3Jv
bGxpbmdTdGF0ZU5vZGUqIHN0YXRlTm9kZSkKIHsKICAgICBTY3JvbGxpbmdTdGF0ZUZpeGVkTm9k
ZSogZml4ZWRTdGF0ZU5vZGUgPSB0b1Njcm9sbGluZ1N0YXRlRml4ZWROb2RlKHN0YXRlTm9kZSk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZU1hYy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
bWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjLmgKaW5kZXggMTE0MjY1ODc2MzY1NTJj
ODI1YTQyZWRjYWRhNzA0OTVmMmY5ODk4Yi4uMzlmYTk2OTk1MDliMzQ4YjM3NWU5ZmZmNzk0NjFm
NzY3NTliOGJkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFj
L1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjLmgKQEAgLTQzLDcg
KzQzLDggQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIC8vIFNjcm9sbGluZ1RyZWVOb2RlIG1l
bWJlciBmdW5jdGlvbnMuCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZShTY3JvbGxpbmdTdGF0ZU5v
ZGUqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQmVmb3JlQ2hpbGRyZW4oU2Ny
b2xsaW5nU3RhdGVOb2RlKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUFmdGVy
Q2hpbGRyZW4oU2Nyb2xsaW5nU3RhdGVOb2RlKikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lk
IGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgT1ZFUlJJREU7CiAK
ICAgICAvLyBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlciBtZW1iZXIgZnVuY3Rpb25zLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVT
Y3JvbGxpbmdOb2RlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Nj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjLm1tCmluZGV4IGU1ZDQ5YjAyNTlmYTI2MGUxYmRm
N2RiYjU4NWU4NTc0YzE2Zjc2ODguLjdjNzIyY2NhMzNmZTlmYjc1ODdkYzg2ZjMxNWUzYmQyMThh
ZDFiMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3Jv
bGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMubW0KQEAgLTY1LDkgKzY1
LDkgQEAgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWM6On5TY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZU1hYygpCiAgICAgICAgIENGUnVuTG9vcFRpbWVySW52YWxpZGF0ZShtX3NuYXBSdWJi
ZXJiYW5kVGltZXIuZ2V0KCkpOwogfQogCi12b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2Rl
TWFjOjp1cGRhdGUoU2Nyb2xsaW5nU3RhdGVOb2RlKiBzdGF0ZU5vZGUpCit2b2lkIFNjcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlTWFjOjp1cGRhdGVCZWZvcmVDaGlsZHJlbihTY3JvbGxpbmdTdGF0
ZU5vZGUqIHN0YXRlTm9kZSkKIHsKLSAgICBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZTo6dXBk
YXRlKHN0YXRlTm9kZSk7CisgICAgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6OnVwZGF0ZUJl
Zm9yZUNoaWxkcmVuKHN0YXRlTm9kZSk7CiAgICAgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rl
KiBzY3JvbGxpbmdTdGF0ZU5vZGUgPSB0b1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZShzdGF0
ZU5vZGUpOwogCiAgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS0+aGFzQ2hhbmdlZFByb3BlcnR5
KFNjcm9sbGluZ1N0YXRlTm9kZTo6U2Nyb2xsTGF5ZXIpKQpAQCAtNzYsMTIgKzc2LDYgQEAgdm9p
ZCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6dXBkYXRlKFNjcm9sbGluZ1N0YXRlTm9k
ZSogc3RhdGVOb2RlKQogICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUtPmhhc0NoYW5nZWRQcm9w
ZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OkNvdW50ZXJTY3JvbGxpbmdMYXllcikp
CiAgICAgICAgIG1fY291bnRlclNjcm9sbGluZ0xheWVyID0gc2Nyb2xsaW5nU3RhdGVOb2RlLT5j
b3VudGVyU2Nyb2xsaW5nUGxhdGZvcm1MYXllcigpOwogCi0gICAgaWYgKHNjcm9sbGluZ1N0YXRl
Tm9kZS0+aGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6UmVx
dWVzdGVkU2Nyb2xsUG9zaXRpb24pKQotICAgICAgICBzZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxp
bmdTdGF0ZU5vZGUtPnJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKCkpOwotCi0gICAgaWYgKHNjcm9s
bGluZ1N0YXRlTm9kZS0+aGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlTm9kZTo6U2Ny
b2xsTGF5ZXIpIHx8IHNjcm9sbGluZ1N0YXRlTm9kZS0+aGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9s
bGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6Q29udGVudHNTaXplKSB8fCBzY3JvbGxpbmdTdGF0ZU5v
ZGUtPmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlZpZXdw
b3J0UmVjdCkpCi0gICAgICAgIHVwZGF0ZU1haW5GcmFtZVBpblN0YXRlKHNjcm9sbFBvc2l0aW9u
KCkpOwotCiAgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS0+aGFzQ2hhbmdlZFByb3BlcnR5KFNj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlv
bk9uTWFpblRocmVhZCkpIHsKICAgICAgICAgdW5zaWduZWQgbWFpblRocmVhZFNjcm9sbGluZ1Jl
YXNvbnMgPSB0aGlzLT5zaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFk
KCk7CiAKQEAgLTEwNiw2ICsxMDAsMjAgQEAgdm9pZCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9k
ZU1hYzo6dXBkYXRlKFNjcm9sbGluZ1N0YXRlTm9kZSogc3RhdGVOb2RlKQogICAgIH0KIH0KIAor
dm9pZCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6dXBkYXRlQWZ0ZXJDaGlsZHJlbihT
Y3JvbGxpbmdTdGF0ZU5vZGUqIHN0YXRlTm9kZSkKK3sKKyAgICBTY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZTo6dXBkYXRlQWZ0ZXJDaGlsZHJlbihzdGF0ZU5vZGUpOworCisgICAgU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlKiBzY3JvbGxpbmdTdGF0ZU5vZGUgPSB0b1Njcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZShzdGF0ZU5vZGUpOworCisgICAgLy8gVXBkYXRlIHRoZSBzY3JvbGwgcG9z
aXRpb24gYWZ0ZXIgY2hpbGQgbm9kZXMgaGF2ZSBiZWVuIHVwZGF0ZWQsIGJlY2F1c2UgdGhleSBu
ZWVkIHRvIGhhdmUgdXBkYXRlZCB0aGVpciBjb25zdHJhaW50cyBiZWZvcmUgYW55IHNjcm9sbGlu
ZyBoYXBwZW5zLgorICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUtPmhhc0NoYW5nZWRQcm9wZXJ0
eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKSkK
KyAgICAgICAgc2V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsaW5nU3RhdGVOb2RlLT5yZXF1ZXN0ZWRT
Y3JvbGxQb3NpdGlvbigpKTsKKworICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUtPmhhc0NoYW5n
ZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZU5vZGU6OlNjcm9sbExheWVyKSB8fCBzY3JvbGxpbmdT
dGF0ZU5vZGUtPmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6
OkNvbnRlbnRzU2l6ZSkgfHwgc2Nyb2xsaW5nU3RhdGVOb2RlLT5oYXNDaGFuZ2VkUHJvcGVydHko
U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpWaWV3cG9ydFJlY3QpKQorICAgICAgICB1cGRh
dGVNYWluRnJhbWVQaW5TdGF0ZShzY3JvbGxQb3NpdGlvbigpKTsKK30KKwogdm9pZCBTY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdo
ZWVsRXZlbnQmIHdoZWVsRXZlbnQpCiB7CiAgICAgaWYgKCFjYW5IYXZlU2Nyb2xsYmFycygpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1Ry
ZWVTdGlja3lOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xs
aW5nVHJlZVN0aWNreU5vZGUuaAppbmRleCAzMzJiODVlNzg2ODk5Yzk2NTcyOWNmNzU0NGM2NWM0
Yzk4Mjc5ZGRmLi5mNTYwMDhmYTc3NjRjYWViN2Y0YjgyMjY3MDk2Zjk3NWQyYTRhZTk4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVN0
aWNreU5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xs
aW5nVHJlZVN0aWNreU5vZGUuaApAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIFNjcm9sbGluZ1RyZWVTdGlja3lOb2RlKFNjcm9sbGluZ1RyZWUqLCBTY3JvbGxpbmdOb2Rl
SUQpOwogCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZShTY3JvbGxpbmdTdGF0ZU5vZGUqKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQmVmb3JlQ2hpbGRyZW4oU2Nyb2xsaW5nU3Rh
dGVOb2RlKikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHBhcmVudFNjcm9sbFBvc2l0aW9u
RGlkQ2hhbmdlKGNvbnN0IEludFJlY3QmIHZpZXdwb3J0UmVjdCwgY29uc3QgRmxvYXRTaXplJiBj
dW11bGF0aXZlRGVsdGEpIE9WRVJSSURFOwogCiAgICAgU3RpY2t5UG9zaXRpb25WaWV3cG9ydENv
bnN0cmFpbnRzIG1fY29uc3RyYWludHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUubW0KaW5kZXggMTVi
Y2JiYzlkOWY0YWFiNTQ0MWFiMGI5MWI3OWJiYzJjYTA1ZDg0MS4uOTY3OGVjOGU0N2EyNjQ1NmVm
NDNjNGI2NTUzY2I3N2ZjNWNjOWIwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTdGlja3lOb2RlLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5tbQpAQCAtNDcs
NyArNDcsNyBAQCBTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZTo6flNjcm9sbGluZ1RyZWVTdGlja3lO
b2RlKCkKIHsKIH0KIAotdm9pZCBTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZTo6dXBkYXRlKFNjcm9s
bGluZ1N0YXRlTm9kZSogc3RhdGVOb2RlKQordm9pZCBTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZTo6
dXBkYXRlQmVmb3JlQ2hpbGRyZW4oU2Nyb2xsaW5nU3RhdGVOb2RlKiBzdGF0ZU5vZGUpCiB7CiAg
ICAgU2Nyb2xsaW5nU3RhdGVTdGlja3lOb2RlKiBzdGlja3lTdGF0ZU5vZGUgPSB0b1Njcm9sbGlu
Z1N0YXRlU3RpY2t5Tm9kZShzdGF0ZU5vZGUpOwogCg==
</data>
<flag name="review"
          id="207573"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
      

    </bug>

</bugzilla>