<?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>52988</bug_id>
          
          <creation_ts>2011-01-23 19:48:49 -0800</creation_ts>
          <short_desc>REGRESSION (r75555): Safari RSS sidebar jiggles when scrolling</short_desc>
          <delta_ts>2011-05-22 18:02:09 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, Regression</keywords>
          <priority>P1</priority>
          <bug_severity>Major</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>53049</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter>mitz</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aestes</cc>
    
    <cc>darin</cc>
    
    <cc>fishd</cc>
    
    <cc>hyatt</cc>
    
    <cc>jamesr</cc>
    
    <cc>mihaip</cc>
    
    <cc>mjs</cc>
    
    <cc>pkasting</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>338812</commentid>
    <comment_count>0</comment_count>
    <who name="">mitz</who>
    <bug_when>2011-01-23 19:48:49 -0800</bug_when>
    <thetext>&lt;rdar://problem/8905599&gt;

* STEPS TO REPRODUCE
1. Navigate to &lt;feed://images.apple.com/main/rss/hotnews/hotnews.rss&gt;
2. Drag the vertical scroller down

* RESULTS
The sidebar jiggles vertically as the content scrolls.

Caused by r75555 &lt;http://trac.webkit.org/changeset/75555&gt;, which made scroll events asynchronous. WebKit now lets the sidebar draw after scrolling and before the scroll event handler gets a chance to reposition it.

See also bug 52790.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338814</commentid>
    <comment_count>1</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-01-23 19:52:16 -0800</bug_when>
    <thetext>Getting the scroll event before repainting happens allows this class of user interface implementation. I hope there’s a way we can restore that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338815</commentid>
    <comment_count>2</comment_count>
    <who name="">mitz</who>
    <bug_when>2011-01-23 19:53:13 -0800</bug_when>
    <thetext>* NOTES
1. Safari RSS is also presenting the “doesn’t scroll far enough” symptoms from bug 52790.
2. The content workaround from bug 52790 is unlikely to help, since handling the scroll event synchronously is vital to avoiding jiggling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338822</commentid>
    <comment_count>3</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2011-01-23 21:24:59 -0800</bug_when>
    <thetext>This is unfortunate.

Is using position: fixed an alternative here? It looks like the code (slipDiffScroll) tries to be clever if the sidebar is taller than the viewport area, so a scroll event handler will be necessary regardless in those cases (where the sidebar needs to scroll).

Darin: any ideas how to handle this use-case while still keeping the scroll event async?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339018</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-01-24 08:10:59 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Darin: any ideas how to handle this use-case while still keeping the scroll event async?

I think that as long as the scroll event comes up before any repainting we’d be OK. It all depends what you mean by “async”. I believe the painting is also async, so the timing is what matters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339019</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-01-24 08:11:22 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Is using position: fixed an alternative here?

It’s not.

&gt; It looks like the code (slipDiffScroll) tries to be clever if the sidebar is taller than the viewport area, so a scroll event handler will be necessary regardless in those cases (where the sidebar needs to scroll).

That’s right. That’s why position: fixed is not suitable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339078</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-01-24 10:10:47 -0800</bug_when>
    <thetext>We should be able to fire the &quot;scroll&quot; event at next animation time, which happens just before painting.  (The &quot;animation time&quot; I&apos;m referring to is the time when requestAnimationFrame callbacks run.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339112</commentid>
    <comment_count>7</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-01-24 11:14:54 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #3)
&gt; &gt; Is using position: fixed an alternative here?
&gt; 
&gt; It’s not.
&gt; 
&gt; &gt; It looks like the code (slipDiffScroll) tries to be clever if the sidebar is taller than the viewport area, so a scroll event handler will be necessary regardless in those cases (where the sidebar needs to scroll).
&gt; 
&gt; That’s right. That’s why position: fixed is not suitable.

It looks like this layout is bimodal - either the sidebar takes its static position, or it acts as a position:fixed element.  The page would look a _lot_ better if the scroll listener was used to switch the element from being position:absolute to position:fixed when scrolling past the cutoff point, or when resizing the window.  That way there might be a hitch when switching between the two modes (but that looks jumpy anyway) but the scrolling will be synced up outside of that switch.

Longer-term this is a fairly common UI that CSS should be expanded to express declaratively.  It&apos;s just not going to work very well in script.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339119</commentid>
    <comment_count>8</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-01-24 11:22:23 -0800</bug_when>
    <thetext>See http://code.google.com/p/chromium/issues/detail?id=2 for an example of this.  Sadly the javascript is compressed, but the left-hand bar with id &quot;meta-float&quot; switches between position:relative and position:fixed depending on the scroll offset.  It looks much better than the rss page.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339151</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-01-24 11:50:19 -0800</bug_when>
    <thetext>Sure, it would be neat to re-implement Safari RSS with a new technique. But note that this code has been working well since Safari 2. I don’t agree that it is “not going to work very well in script”. It has worked fine. Yes, it might be more efficient and more elegant to do it in some modern way.

Lets separate the “it can be done better” issue from the “we incompatibly changed the semantics of the scroll event” issue. If we can do something that keeps the existing Safari RSS working that would be extremely helpful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339152</commentid>
    <comment_count>10</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-01-24 11:51:52 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Sure, it would be neat to re-implement Safari RSS with a new technique. But note that this code has been working well since Safari 2. I don’t agree that it is “not going to work very well in script”. It has worked fine. Yes, it might be more efficient and more elegant to do it in some modern way.
&gt; 
&gt; Lets separate the “it can be done better” issue from the “we incompatibly changed the semantics of the scroll event” issue. If we can do something that keeps the existing Safari RSS working that would be extremely helpful.

This may have worked in previous versions of Safari, but not in other browsers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339158</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-01-24 11:58:45 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; This may have worked in previous versions of Safari, but not in other browsers.

Yes, I understand.

Since it’s been working in WebKit for 8 years there is a chance there is some other content that depends on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339279</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-01-24 14:36:30 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Since it’s been working in WebKit for 8 years there is a chance there is some other content that depends on it.

That&apos;s right, but this is part of the calculated risk of trying to fix the scroll event to be more compatible with other browsers (and the spec).  The hope is that the marketshare of other browsers means that we&apos;ll have some insulation here.  So far the only reports of regressions have been with WebKit-specific HTML/JS, which makes sense, and fortunately &quot;we&quot; have the option to change that HTML/JS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339281</commentid>
    <comment_count>13</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-01-24 14:42:03 -0800</bug_when>
    <thetext>I think a superior implementation would both be asynchronous and ensure the event fires before a stale repaint.  Allowing stale repaints to happen is just poor behavior, and we shouldn&apos;t be using other browsers as an excuse for poor behavior.

Similarly, firing the event synchronously is also poor behavior.

I see no reason why we can&apos;t improve the implementation of asyc scrolling to keep these user interfaces working.

Keep in mind that some of the reason you don&apos;t see some of these nifty UI systems on the Web is that in other browsers have subpar (albeit async) onscroll implementations.

Let&apos;s fix this the right way and get the best of both worlds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339331</commentid>
    <comment_count>14</comment_count>
    <who name="">mitz</who>
    <bug_when>2011-01-24 15:52:25 -0800</bug_when>
    <thetext>From an API standpint, the “asynchronous” nature of scroll events only really manifests itself in programmatic scrolling, i.e. in whether a the scroll event handler is entered before the script that modified the scroll position returned. r75555 decoupled the scroll event dispatch from the scrolling in order to satisfy this asynchronicity requirement, which introduced some issues. I think we should instead consider something else that will satisfy the requirement, which is to make “scrolling” itself decoupled from setting the scroll position by script. What I’m proposing is that setting scrollX, scrollY etc. (or calling scrollTo, scrollBy) will not scroll synchrnously (and thus not trigger a repaint), but just enqueue the scrolling for after return from script. Of course, the DOM will report the new scroll position when asked. It’s just committing to the ScrollView (or RenderLayer), and the subsequent scroll events, that would be deferred.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339357</commentid>
    <comment_count>15</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2011-01-24 16:33:37 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; See http://code.google.com/p/chromium/issues/detail?id=2 for an example of this.  Sadly the javascript is compressed, but the left-hand bar with id &quot;meta-float&quot; switches between position:relative and position:fixed depending on the scroll offset.  It looks much better than the rss page.

I looked into implementing this approach, but I ran into 53049 (on code.google.com the whole document scrolls, on Safari RSS there&apos;s only a div with overflow: overlay).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339379</commentid>
    <comment_count>16</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2011-01-24 16:58:03 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; I think we should instead consider something else that will satisfy the requirement, which is to make “scrolling” itself decoupled from setting the scroll position by script.

While this would solve this particular problem, it doesn&apos;t help in other aspects:
- We would still have to execute scripts before able to paint the results of scrolls, which means that we&apos;re more likely to have jerky scrolling.
- We would have divergent behavior from Firefox and IE (the difference in behavior would be visible to pages, WebKit would repaint later when setting scrollTop than when setting other properties).

Perhaps the best compromise for now is to have a mode switch, so that web content gets async events, but other WebKit clients get the legacy behavior (I&apos;m not sure how easy it would be to get Safari RSS on the legacy codepath).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339429</commentid>
    <comment_count>17</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2011-01-24 18:18:46 -0800</bug_when>
    <thetext>Comment 13 sounds right to me.

For comment 14, consider the case of smooth scrolling by enabling the code in ScrollAnimatorWin, which breaks scrolls into multiple pieces.  These each trigger a separate onscroll event.  We need to ensure that we don&apos;t get any scary re-entrancy if we run script synchronously in response to these.  I don&apos;t know if we do or not, but Hyatt&apos;s comment 13 makes me feel less nervous.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339494</commentid>
    <comment_count>18</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-01-24 22:07:32 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; I think a superior implementation would both be asynchronous and ensure the event fires before a stale repaint.

Yeah, this is essentially what I meant by comment #6.

However, James pointed out that if we do that then we are necessarily putting script execution on the critical path for scrolling.  This means that it limits our ability to optimize scrolling (e.g., imagine a background thread performing the scroll animation).  Do we really want to give up this kind of optimization?  Maybe so.

Maybe the better answer is to address this use case with CSS as James mentions in comment #7.  If we had that, then we could make the scroll event less useful in exchange for better opportunities to optimize scrolling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352281</commentid>
    <comment_count>19</comment_count>
    <who name="">mitz</who>
    <bug_when>2011-02-16 13:02:53 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; This may have worked in previous versions of Safari, but not in other browsers.
&gt; 
&gt; Yes, I understand.
&gt; 
&gt; Since it’s been working in WebKit for 8 years there is a chance there is some other content that depends on it.

Here is an example from a major website:

1) Navigate to &lt;http://www.ibm.com/ibm100/us/en/?lnk=ibmhpls1/Corp/events/centennial_launch&gt;
2) Click “A message from Sam Palmisano”
3) Scroll the page

Result: Jiggling

Can we revert r75555 until we come up with a solution that doesn’t break existing content?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352284</commentid>
    <comment_count>20</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2011-02-16 13:08:51 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; 1) Navigate to &lt;http://www.ibm.com/ibm100/us/en/?lnk=ibmhpls1/Corp/events/centennial_launch&gt;
&gt; 2) Click “A message from Sam Palmisano”
&gt; 3) Scroll the page
&gt; 
&gt; Result: Jiggling
&gt; 
&gt; Can we revert r75555 until we come up with a solution that doesn’t break existing content?

The page has jiggling in Firefox 3.6 and IE 8, so I think the authors just didn&apos;t think of this problem (and if they had, they would have used position: fixed).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352287</commentid>
    <comment_count>21</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-02-16 13:12:29 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #11)
&gt; &gt; (In reply to comment #10)
&gt; &gt; &gt; This may have worked in previous versions of Safari, but not in other browsers.
&gt; &gt; 
&gt; &gt; Yes, I understand.
&gt; &gt; 
&gt; &gt; Since it’s been working in WebKit for 8 years there is a chance there is some other content that depends on it.
&gt; 
&gt; Here is an example from a major website:
&gt; 
&gt; 1) Navigate to &lt;http://www.ibm.com/ibm100/us/en/?lnk=ibmhpls1/Corp/events/centennial_launch&gt;
&gt; 2) Click “A message from Sam Palmisano”
&gt; 3) Scroll the page
&gt; 
&gt; Result: Jiggling
&gt; 
&gt; Can we revert r75555 until we come up with a solution that doesn’t break existing content?

I tried opening that in the latest Firefox build and it jiggles like crazy.  Seems like a site bug to me, not a WebKit one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352294</commentid>
    <comment_count>22</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2011-02-16 13:19:30 -0800</bug_when>
    <thetext>As far as how to solve this regression with Safari RSS&apos;s sidebar, using requestAnimationFrame (http://webstuff.nfshost.com/anim-timing/Overview.html) may be an option. That way you can invoke the custom sidebar sizing/moving logic before painting. In your scroll event handler you&apos;d just set a flag indicating that scrolling is happening, and start requesting callbacks before paintaing (this does mean that the first frame after scrolling starts will not have the new logic, but I doubt that&apos;s observable).

Something like:

var isScrolling = false;
var isScrollingTimeout = 0;

// scroller is the div with ID apple-rss-scroller, which currently has slipDiffScroll as its scroll event listener

scroller.onscroll = function() {
  if (!isScrolling) {
    isScrolling = true;
    window.requestAnimationFrame(slipDiffScroll, scroller);
  }
  
  if (isScrollingTimeout) {
    window.clearTimeout(isScrollingTimeout);
  }
  
  // Keep updating for some time after the scroll event was received, in the case of smooth scrolling and other scenarios where we don&apos;t fire a scroll event for every frame
  isScrollingTimeout = window.setTimeout(function() {
    isScrolling = false;
  }, 100);
};


function slipDiffScroll() {
  // Current implementation of slipDiffScroll
  
  if (isScrolling) {
    window.requestAnimationFrame(slipDiffScroll, scroller);
  }
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385491</commentid>
    <comment_count>23</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2011-04-13 21:04:38 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; As far as how to solve this regression with Safari RSS&apos;s sidebar, using requestAnimationFrame (http://webstuff.nfshost.com/anim-timing/Overview.html) may be an option. 

Apple&apos;s WebKit port doesn&apos;t enable REQUEST_ANIMATION_FRAME, and I&apos;m not sure this bug is sufficient justification for taking the risk of enabling it at this point.

The better approach is probably to add a quirk that dispatches ScrollEvent synchronously under certain circumstances.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385565</commentid>
    <comment_count>24</comment_count>
      <attachid>89544</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2011-04-14 00:22:21 -0700</bug_when>
    <thetext>Created attachment 89544
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385572</commentid>
    <comment_count>25</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2011-04-14 00:44:46 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; As far as how to solve this regression with Safari RSS&apos;s sidebar, using requestAnimationFrame (http://webstuff.nfshost.com/anim-timing/Overview.html) may be an option. That way you can invoke the custom sidebar sizing/moving logic before painting. 

So here&apos;s something I don&apos;t get. Why is running a requestAnimationFrame script callback before painting ok, but invoking the scroll event before painting would, per comment #18, be bad? If requestAnimationFrame is an acceptable API, then surely the right long-term fix is Hyatt&apos;s suggestion from comment #13.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385573</commentid>
    <comment_count>26</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-04-14 00:48:16 -0700</bug_when>
    <thetext>requestAnimationFrame does not provide any assurance that the callback will always run before painting (either before scrolling or after)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385575</commentid>
    <comment_count>27</comment_count>
      <attachid>89544</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2011-04-14 00:50:57 -0700</bug_when>
    <thetext>Comment on attachment 89544
Patch

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

&gt; Source/WebCore/dom/EventQueue.cpp:43
&gt; +    return applicationIsSafari() &amp;&amp; (document-&gt;url().protocolIs(&quot;feed&quot;) || document-&gt;url().protocolIs(&quot;feeds&quot;));

Maybe this would make more sense as a preference setting, then it could be customized per view. That would be a cleaner way to do the check, I think, and it would avoid the problem in applicationIsSafari cited below.

&gt; Source/WebCore/platform/RuntimeApplicationChecks.cpp:58
&gt; +    static bool isSafari = mainBundleIsEqualTo(&quot;com.apple.Safari&quot;) || mainBundleIsEqualTo(&quot;com.apple.WebProcess&quot;);

This should have a FIXME, because long-term, WebProcess will not be used only by Safari. Or perhaps there is a better way to check specifically for Safari&apos;s WebProcess, in which case maybe it would be wise to future-proof this now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385580</commentid>
    <comment_count>28</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2011-04-14 01:02:30 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; requestAnimationFrame does not provide any assurance that the callback will always run before painting (either before scrolling or after)

Then I guess using it wouldn&apos;t actually solve the problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385582</commentid>
    <comment_count>29</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2011-04-14 01:18:44 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; (From update of attachment 89544 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=89544&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/EventQueue.cpp:43
&gt; &gt; +    return applicationIsSafari() &amp;&amp; (document-&gt;url().protocolIs(&quot;feed&quot;) || document-&gt;url().protocolIs(&quot;feeds&quot;));
&gt; 
&gt; Maybe this would make more sense as a preference setting, then it could be customized per view. That would be a cleaner way to do the check, I think, and it would avoid the problem in applicationIsSafari cited below.

It looks like Safari RSS doesn&apos;t get its own view; the current view is navigated to the RSS page. This means that a Setting flag would have to be toggled on and off per navigation based on the URL scheme, which seems more difficult than the current approach.

&gt; 
&gt; &gt; Source/WebCore/platform/RuntimeApplicationChecks.cpp:58
&gt; &gt; +    static bool isSafari = mainBundleIsEqualTo(&quot;com.apple.Safari&quot;) || mainBundleIsEqualTo(&quot;com.apple.WebProcess&quot;);
&gt; 
&gt; This should have a FIXME, because long-term, WebProcess will not be used only by Safari. Or perhaps there is a better way to check specifically for Safari&apos;s WebProcess, in which case maybe it would be wise to future-proof this now.

I&apos;d be happy to do this, although I&apos;m not sure I know precisely how to check if it&apos;s Safari&apos;s WebProcess, at least not via CF API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385589</commentid>
    <comment_count>30</comment_count>
      <attachid>89544</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2011-04-14 01:52:37 -0700</bug_when>
    <thetext>Comment on attachment 89544
Patch

Since a setting won&apos;t work, r=me, but please add the suggested FIXME and follow up on finding a proper way to identify Safari&apos;s WebProcess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385623</commentid>
    <comment_count>31</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2011-04-14 03:46:41 -0700</bug_when>
    <thetext>Committed r83832</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407719</commentid>
    <comment_count>32</comment_count>
    <who name="">mitz</who>
    <bug_when>2011-05-22 17:45:49 -0700</bug_when>
    <thetext>I keep stumbling upon webpages broken by r75555. Here’s another one: &lt;http://www.howtobearetronaut.com/2011/03/stanley-kubricks-chicago-1949/&gt; when you click on a photo and a “lightbox” opens up, it jiggles when you scroll the page behind it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407720</commentid>
    <comment_count>33</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-05-22 18:00:08 -0700</bug_when>
    <thetext>(In reply to comment #32)
&gt; I keep stumbling upon webpages broken by r75555. Here’s another one: &lt;http://www.howtobearetronaut.com/2011/03/stanley-kubricks-chicago-1949/&gt; when you click on a photo and a “lightbox” opens up, it jiggles when you scroll the page behind it.

Are you also testing these pages in firefox and ie?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407721</commentid>
    <comment_count>34</comment_count>
    <who name="">mitz</who>
    <bug_when>2011-05-22 18:02:09 -0700</bug_when>
    <thetext>(In reply to comment #33)
&gt; (In reply to comment #32)
&gt; &gt; I keep stumbling upon webpages broken by r75555. Here’s another one: &lt;http://www.howtobearetronaut.com/2011/03/stanley-kubricks-chicago-1949/&gt; when you click on a photo and a “lightbox” opens up, it jiggles when you scroll the page behind it.
&gt; 
&gt; Are you also testing these pages in firefox and ie?

No, I test them in Safari 5.0.5.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89544</attachid>
            <date>2011-04-14 00:22:21 -0700</date>
            <delta_ts>2011-04-14 01:52:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52988-20110414002220.patch</filename>
            <type>text/plain</type>
            <size>27860</size>
            <attacher name="Andy Estes">aestes</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODM3NTcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Fu
ZHJvaWQubWsgYi9Tb3VyY2UvV2ViQ29yZS9BbmRyb2lkLm1rCmluZGV4IGJmYmYzMjAzMTg4ODgw
YmU5OGU4ODVjZTc3ODc0NzFiNTBlYWI4MjkuLjBhYWI2NThlOGIyMWY5NDdhNWQ1ZjA4OTFjYTk3
ZTRlMTJlYmRmNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0FuZHJvaWQubWsKKysrIGIv
U291cmNlL1dlYkNvcmUvQW5kcm9pZC5tawpAQCAtNDg2LDYgKzQ4Niw3IEBAIExPQ0FMX1NSQ19G
SUxFUyA6PSAkKExPQ0FMX1NSQ19GSUxFUykgXAogCXBsYXRmb3JtL0xpbmtIYXNoLmNwcCBcCiAJ
cGxhdGZvcm0vTG9nZ2luZy5jcHAgXAogCXBsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwIFwK
KwlwbGF0Zm9ybS9SdW50aW1lQXBwbGljYXRpb25DaGVja3MuY3BwIFwKIAlwbGF0Zm9ybS9TY3Jv
bGxWaWV3LmNwcCBcCiAJcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcCBcCiAJcGxhdGZvcm0vU2Nyb2xs
YmFyVGhlbWVDb21wb3NpdGUuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMmZjMTg5ZWVl
NWY3NzgyYjg2YTFlZTVkMWU0NTViMmZlMDk3OGI0Ny4uOTRlYWViZjRhNDQzZmQyNDhiZmQ3NmYw
MDRjMDE5ZWM3Y2RhOTRmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTEwNTQsNiArMTA1NCw3
IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9MaW5rSGFzaC5jcHAKICAgICBw
bGF0Zm9ybS9Mb2dnaW5nLmNwcAogICAgIHBsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwCisg
ICAgcGxhdGZvcm0vUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmNwcAogICAgIHBsYXRmb3JtL1Nj
cm9sbEFuaW1hdG9yLmNwcAogICAgIHBsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAogICAgIHBs
YXRmb3JtL1Njcm9sbGJhci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5OGE2ZDZiNmQzZjQ3ODk3YWQzMzRi
MGYyZjNkZjNjYTEzNTY5ZWEwLi42YzI0MjFhYTJhMmU0NDMwOTMzZDcwM2NkNTUwYTBiNmNiMjBk
MzAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTEtMDQtMTQgIEFuZHkgRXN0ZXMg
IDxhZXN0ZXNAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFJFR1JFU1NJT04gKHI3NTU1NSk6IFNhZmFyaSBSU1Mgc2lkZWJhciBqaWdn
bGVzIHdoZW4gc2Nyb2xsaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01Mjk4OAorICAgICAgICAKKyAgICAgICAgU2FmYXJpIFJTUyByZWxpZXMgb24g
c3luY2hyb25vdXMgZGlzcGF0Y2ggb2YgU2Nyb2xsRXZlbnQgdG8gdXBkYXRlIHRoZQorICAgICAg
ICBwb3NpdGlvbiBvZiBpdHMgc2lkZWJhciBkdXJpbmcgc2Nyb2xsaW5nIHdpdGhvdXQgcHJvZHVj
aW5nIGEgamlnZ2xpbmcKKyAgICAgICAgZWZmZWN0LiBEdWUgdG8gcjc1NTU1LCB0aGlzIGV2ZW50
IGlzIG5vIGxvbmdlciBkaXNwYXRjaGVkIHN5bmNocm9ub3VzbHkKKyAgICAgICAgd2hpY2ggcmVz
dWx0cyBpbiBzdGFsZSByZXBhaW50cyBiZWZvcmUgdGhlIG9uc2Nyb2xsIGhhbmRsZXIgZ2V0cyBh
CisgICAgICAgIGNoYW5jZSB0byB1cGRhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBzaWRlYmFyLgor
ICAgICAgICAKKyAgICAgICAgU2luY2UgaXQgaXMgaW1wcmFjdGljYWwgdG8gcmVzb2x2ZSB0aGlz
IGlzc3VlIGluIFNhZmFyaSBSU1MgaXRzZWxmLCBhZGQKKyAgICAgICAgYSBxdWlyayB0aGF0IHJl
c3RvcmVzIHN5bmNocm9ub3VzIFNjcm9sbEV2ZW50IGRpc3BhdGNoIGZvciBTYWZhcmkgUlNTLgor
ICAgICAgICAKKyAgICAgICAgTm8gdGVzdHMuIFRoaXMgaXMgYW4gYXBwLXNwZWNpZmljIGNoYW5n
ZSB0aGF0IGRvZXNuJ3QgYWZmZWN0IHdlYgorICAgICAgICBjb250ZW50LgorCisgICAgICAgICog
QW5kcm9pZC5tazogQWRkIHBsYXRmb3JtL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5bY3BwfGhd
CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6IERpdHRvLgorICAgICAgICAqIEdOVW1ha2VmaWxl
Lmxpc3QuYW06IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUuZ3lwaTogRGl0dG8uCisgICAgICAg
ICogV2ViQ29yZS5wcm86IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qOiBEaXR0by4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6IERpdHRvLgorICAgICAgICAqIGRvbS9FdmVudFF1ZXVlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnNob3VsZERpc3BhdGNoU2Nyb2xsRXZlbnRTeW5jaHJvbm91c2x5KTogU2VuZCBTY3JvbGxF
dmVudAorICAgICAgICBzeW5jaHJvbm91c2x5IGlmIHRoZSBlbWJlZGRpbmcgYXBwbGljYXRpb24g
aXMgU2FmYXJpIGFuZCB0aGUgZG9jdW1lbnQncworICAgICAgICBVUkwgc2NoZW1lIGlzICJmZWVk
IiBvciAiZmVlZHMiLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRRdWV1ZTo6ZW5xdWV1ZU9yRGlz
cGF0Y2hTY3JvbGxFdmVudCk6IERpc3BhdGNoCisgICAgICAgIFNjcm9sbEV2ZW50IHN5bmNocm9u
b3VzbHkgaWYgc2hvdWxkRGlzcGF0Y2hTY3JvbGxFdmVudFN5bmNocm9ub3VzbHkoKQorICAgICAg
ICByZXR1cm5zIHRydWUuCisgICAgICAgICogZG9tL0V2ZW50UXVldWUuaDoKKyAgICAgICAgKiBw
YWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNl
bmRTY3JvbGxFdmVudCk6IENhbGwgZW5xdWV1ZU9yRGlzcGF0Y2hTY3JvbGxFdmVudCgpLgorICAg
ICAgICAqIHBsYXRmb3JtL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6bWFpbkJ1bmRsZUlzRXF1YWxUbyk6IEFkZCBhIGhlbHBlciByb3V0aW5l
IGZvciBDRiBwbGF0Zm9ybXMKKyAgICAgICAgdGhhdCBjaGVja3MgaWYgdGhlIG1haW4gYnVuZGxl
J3MgaWRlbnRpZmllciBpcyBlcXVhbCB0byBhIGdpdmVuIHN0cmluZy4KKyAgICAgICAgVGhpcyBm
dW5jdGlvbiByZXR1cm5zIGZhbHNlIGZvciBub24tQ0YgcGxhdGZvcm1zLgorICAgICAgICAoV2Vi
Q29yZTo6YXBwbGljYXRpb25Jc1NhZmFyaSk6IENhbGwgbWFpbkJ1bmRsZUlzRXF1YWxUbygpLgor
ICAgICAgICAoV2ViQ29yZTo6YXBwbGljYXRpb25Jc0FwcGxlTWFpbCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6YXBwbGljYXRpb25Jc01pY3Jvc29mdE1lc3Nlbmdlcik6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6YXBwbGljYXRpb25Jc0Fkb2JlSW5zdGFsbGVyKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjphcHBsaWNhdGlvbklzQU9MSW5zdGFudE1lc3Nlbmdlcik6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6YXBwbGljYXRpb25Jc01pY3Jvc29mdE15RGF5KTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjphcHBsaWNhdGlvbklzTWljcm9zb2Z0T3V0bG9vayk6IERpdHRvLgor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9SdW50aW1lQXBwbGljYXRpb25DaGVja3MubW06IFJlbW92
ZWQuIEZ1bmN0aW9ucyBtb3ZlZCB0bworICAgICAgICBSdW50aW1lQXBwbGljYXRpb25DaGVja3Mu
Y3BwLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsVG8pOiBDYWxsIGVucXVldWVPckRpc3BhdGNoU2Nyb2xs
RXZlbnQoKS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpzY3JvbGxUbyk6IENhbGwgZW5xdWV1ZU9yRGlzcGF0
Y2hTY3JvbGxFdmVudCgpLgorCiAyMDExLTA0LTEzICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBs
ZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2F2aW4gQmFycmFjbG91Z2guCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBjMjE5MTYwMzI3YjZiZGE5YzgzNDdiMjk3MzM4ZDI4
MmE0NDkyZDRmLi5iYzZjNzUyMGRmYzIyNzBjNzYxMWE4ODMyMDcxN2RiMzIyZDk5NjE4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTI1NzIsNiArMjU3Miw4IEBAIHdlYmNvcmVf
c291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51U3R5bGUuaCBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUHVyZ2VhYmxlQnVmZmVyLmggXAogCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1B1cmdlUHJpb3JpdHkuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1NjaGVtZVJlZ2lzdHJ5LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2NoZW1lUmVn
aXN0cnkuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwIFwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQppbmRleCA3YzZmNTQzODIzNmE0NTE2MDdlMmI5YTM1ZDZhYjU1ZWMzODY0
NzkxLi5mMWUzZTQzZjdkMDg3OWE5YjZhOWM3YzkyNGVmMmM0MGE0MGU5N2RmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCkBAIC03NzAsNiArNzcwLDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9Qb3B1cE1l
bnVDbGllbnQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vUG9wdXBNZW51U3R5bGUuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vUHVyZ2VQcmlvcml0eS5oJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9SdW50aW1lQXBwbGljYXRpb25DaGVja3MuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
U2NoZW1lUmVnaXN0cnkuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xsVHlwZXMuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xsVmlldy5oJywKQEAgLTM1NTUsNiArMzU1Niw4
IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vUGxhdGZvcm1Ub3VjaFBvaW50LmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL1B1cmdlYWJsZUJ1ZmZlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9SdW5Mb29wVGltZXIuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vUnVudGltZUFwcGxpY2F0
aW9uQ2hlY2tzLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vUnVudGltZUFwcGxpY2F0aW9u
Q2hlY2tzLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1NTTEtleUdlbmVyYXRvci5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9TY2hlbWVSZWdpc3RyeS5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnBybyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDRiOTQwYWViOTcy
MzJmYzA3MzBiY2U3NTMyNWMzYTliM2I5YjcwZTAuLjBjZmJhMTAzZjQ0MTdhMWYzYTc5YTUzMzlk
OGI0Yjg5MjM1ZTI5ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0xMDMxLDYgKzEwMzEsNyBAQCBTT1VS
Q0VTICs9IFwKICAgICBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwIFwK
ICAgICBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmNwcCBcCiAgICAgcGxh
dGZvcm0vdGV4dC9SZWd1bGFyRXhwcmVzc2lvbi5jcHAgXAorICAgIHBsYXRmb3JtL1J1bnRpbWVB
cHBsaWNhdGlvbkNoZWNrcy5jcHAgXAogICAgIHBsYXRmb3JtL1NjaGVtZVJlZ2lzdHJ5LmNwcCBc
CiAgICAgcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwIFwKICAgICBwbGF0Zm9ybS9TY3JvbGxB
bmltYXRvci5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagppbmRleCA0MjIxZDY5NWJmODk2MWZhNjhlZmU2MGJlY2ZiNzU3ZTlhM2I2ZDE3Li40NWZh
MDMxMmFmOTY0MzYxZjUzZWQwODZkY2IwOWVhMzEzYWYwODNkIDEwMDc1NQotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtMjYxNzgsNiArMjYxNzgsMTQgQEAK
IAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZv
cm1cUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8
RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cUnVudGltZUFwcGxpY2F0aW9uQ2hl
Y2tzLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHBsYXRmb3JtXFNjaGVtZVJlZ2lzdHJ5LmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMTFi
MTVmOGUzY2U2OTFkMDdmN2E0ZGE5OTk0MzJmMDZjMmQyOGExMi4uNGY0MjIxMTAxZmUzNTM1ZjYx
MWQ0NWNhMTczMTBiYzNlNWZjZjE2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjU0LDYgKzY1NCw4IEBACiAJCTI1NDJGNERB
MTE2NkMyNUEwMEU4OUE4NiAvKiBVc2VyR2VzdHVyZUluZGljYXRvci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyRjREODExNjZDMjVBMDBFODlB
ODYgLyogVXNlckdlc3R1cmVJbmRpY2F0b3IuY3BwICovOyB9OwogCQkyNTQyRjREQjExNjZDMjVB
MDBFODlBODYgLyogVXNlckdlc3R1cmVJbmRpY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDJGNEQ5MTE2NkMyNUEwMEU4OUE4NiAvKiBVc2Vy
R2VzdHVyZUluZGljYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTI2RTk4QTEwMTMwQTlGQ0EwMDhFQjdCMiAvKiBUZXh0Q29kZWNBU0NJSUZh
c3RQYXRoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
NkU5OEEwRjEzMEE5RkNBMDA4RUI3QjIgLyogVGV4dENvZGVjQVNDSUlGYXN0UGF0aC5oICovOyB9
OworCQkyOTNFQUUxRjEzNTZCMkZFMDA2N0FDRjkgLyogUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOTNFQUUx
RTEzNTZCMkZFMDA2N0FDRjkgLyogUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmggKi87IH07CisJ
CTI5M0VBRTIxMTM1NkIzMkUwMDY3QUNGOSAvKiBSdW50aW1lQXBwbGljYXRpb25DaGVja3MuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjkzRUFFMjAx
MzU2QjMyRTAwNjdBQ0Y5IC8qIFJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5jcHAgKi87IH07CiAJ
CTI5NDg5RkM3MTJDMDBGMDMwMEQ4M0YwRiAvKiBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjk0ODlGQzUxMkMw
MEYwMzAwRDgzRjBGIC8qIEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmggKi87IH07CiAJCTI5QTgx
MjJCMEZCQjlDMUQwMDUxMDI5MyAvKiBBY2Nlc3NpYmlsaXR5VGFibGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5QTgxMjBEMEZCQjlDMUQwMDUxMDI5
MyAvKiBBY2Nlc3NpYmlsaXR5VGFibGUuaCAqLzsgfTsKIAkJMjlBODEyMkMwRkJCOUMxRDAwNTEw
MjkzIC8qIEFjY2Vzc2liaWxpdHlMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyOUE4MTIwRTBGQkI5QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0
eUxpc3QuaCAqLzsgfTsKQEAgLTEwMDgsOCArMTAxMCw2IEBACiAJCTQ0MzExQ0Q4MTJFNEUyNEIw
MDBBOEQxOSAvKiBET01Eb2N1bWVudFByaXZhdGUuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0MzExQ0Q1MTJFNEUyMkQwMDBB
OEQxOSAvKiBET01Eb2N1bWVudFByaXZhdGUuaCAqLzsgfTsKIAkJNDQzMTFDRDkxMkU0RTI1NzAw
MEE4RDE5IC8qIERPTURvY3VtZW50RnJhZ21lbnRQcml2YXRlLmggaW4gQ29weSBHZW5lcmF0ZWQg
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDMxMUNENDEyRTRF
MjJEMDAwQThEMTkgLyogRE9NRG9jdW1lbnRGcmFnbWVudFByaXZhdGUuaCAqLzsgfTsKIAkJNDQz
MTFGODIxMkU0RTY2QzAwMEE4RDE5IC8qIERPTURvY3VtZW50RnJhZ21lbnRJbnRlcm5hbC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODVFNzExNDUwQUM1
RDUzNDAwNTMyNzBGIC8qIERPTURvY3VtZW50RnJhZ21lbnRJbnRlcm5hbC5oICovOyB9OwotCQk0
NDdENjkwMzBGQTYyNjgxMDAxNUNDQjEgLyogUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDdENjkwMTBGQTYy
NjgxMDAxNUNDQjEgLyogUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNDQ3RDY5MDQwRkE2MjY4MTAwMTVD
Q0IxIC8qIFJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0N0Q2OTAyMEZBNjI2ODEwMDE1Q0NCMSAvKiBSdW50
aW1lQXBwbGljYXRpb25DaGVja3MubW0gKi87IH07CiAJCTQ0OEEyOUJGMEE0NkQ5Q0IwMDMwNzU5
RiAvKiBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDQ4QTI5QkQwQTQ2RDlDQjAwMzA3NTlGIC8qIEpTSFRNTE9w
dGlvbnNDb2xsZWN0aW9uLmggKi87IH07CiAJCTQ0OEEyOUMwMEE0NkQ5Q0IwMDMwNzU5RiAvKiBK
U0hUTUxPcHRpb25zQ29sbGVjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0NDhBMjlCRTBBNDZEOUNCMDAzMDc1OUYgLyogSlNIVE1MT3B0aW9u
c0NvbGxlY3Rpb24uY3BwICovOyB9OwogCQk0NDhBRDI3QzBBNDgxMzdBMDAyM0QxNzkgLyogSlNI
VE1MT3B0aW9uc0NvbGxlY3Rpb25DdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDQ4QUQyN0EwQTQ4MTM3OTAwMjNEMTc5IC8qIEpTSFRNTE9w
dGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNwcCAqLzsgfTsKQEAgLTcwOTEsNiArNzA5MSw4IEBACiAJ
CTI1NDJGNEQ4MTE2NkMyNUEwMEU4OUE4NiAvKiBVc2VyR2VzdHVyZUluZGljYXRvci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVc2VyR2VzdHVyZUluZGljYXRvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI1NDJGNEQ5MTE2NkMyNUEwMEU4OUE4
NiAvKiBVc2VyR2VzdHVyZUluZGljYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBVc2VyR2VzdHVyZUluZGljYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkyNkU5OEEwRjEzMEE5RkNBMDA4RUI3QjIgLyogVGV4dENvZGVjQVNDSUlGYXN0UGF0aC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0Q29kZWNBU0NJSUZhc3RQYXRoLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI5M0VBRTFFMTM1NkIyRkUwMDY3QUNGOSAv
KiBSdW50aW1lQXBwbGljYXRpb25DaGVja3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTI5M0VBRTIwMTM1NkIzMkUwMDY3QUNGOSAvKiBSdW50aW1lQXBwbGljYXRpb25DaGVj
a3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUnVudGltZUFwcGxp
Y2F0aW9uQ2hlY2tzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjk0ODlGQzUx
MkMwMEYwMzAwRDgzRjBGIC8qIEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI5ODFDQTlEMTMxODIyRUMwMEQxMkYyQSAvKiBBY2Nlc3Np
YmlsaXR5QVJJQUdyaWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWNjZXNzaWJpbGl0eUFSSUFH
cmlkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjk4MUNBOUUxMzE4MjJFQzAw
RDEyRjJBIC8qIEFjY2Vzc2liaWxpdHlBUklBR3JpZENlbGwuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC03NTE2LDggKzc1MTgsNiBAQAogCQk0NDI5QUIwNzBDQjg0RjgxMDA3NjQ3QzUgLyog
RE9NVGV4dEV2ZW50SW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERPTVRleHRFdmVudEludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0
MzExQ0Q0MTJFNEUyMkQwMDBBOEQxOSAvKiBET01Eb2N1bWVudEZyYWdtZW50UHJpdmF0ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01Eb2N1bWVudEZyYWdtZW50UHJpdmF0
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NDMxMUNENTEyRTRFMjJEMDAwQThE
MTkgLyogRE9NRG9jdW1lbnRQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERPTURvY3VtZW50UHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0
NDdENjkwMTBGQTYyNjgxMDAxNUNDQjEgLyogUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0NDdENjkwMjBGQTYyNjgxMDAxNUNDQjEg
LyogUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0NDhBMjlCRDBBNDZEOUNCMDAzMDc1OUYgLyogSlNIVE1MT3B0aW9u
c0NvbGxlY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSFRNTE9w
dGlvbnNDb2xsZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0OEEyOUJF
MEE0NkQ5Q0IwMDMwNzU5RiAvKiBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbi5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NDhBRDI3QTBBNDgxMzc5MDAyM0QxNzkg
LyogSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb25DdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb25DdXN0b20uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQxOTAsOCArMTQxOTAsNiBAQAogCQkJCUQzOUQw
MDZDMTFGOEUzMDgwMDYwNDFGMiAvKiBQb3B1cE1lbnVNYWMuaCAqLywKIAkJCQkwNjY4RTE4RTBB
REQ5NjQwMDA0MTI4RTAgLyogUG9wdXBNZW51TWFjLm1tICovLAogCQkJCUU0RDY4Nzc2MEVEN0FF
M0QwMDZFQTk3OCAvKiBQdXJnZWFibGVCdWZmZXJNYWMuY3BwICovLAotCQkJCTQ0N0Q2OTAxMEZB
NjI2ODEwMDE1Q0NCMSAvKiBSdW50aW1lQXBwbGljYXRpb25DaGVja3MuaCAqLywKLQkJCQk0NDdE
NjkwMjBGQTYyNjgxMDAxNUNDQjEgLyogUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLm1tICovLAog
CQkJCTFDRTI0Rjk2MEQ3Q0FGMEUwMDdFMDRDMiAvKiBTY2hlZHVsZVBhaXJNYWMubW0gKi8sCiAJ
CQkJQkNBRTFGQTUxMjkzOURCNzAwNENCMDI2IC8qIFNjcm9sbEFuaW1hdG9yTWFjLmggKi8sCiAJ
CQkJQkM1MTE1NkQxMkIxNzQ5QzAwQzk2NzU0IC8qIFNjcm9sbEFuaW1hdG9yTWFjLm1tICovLApA
QCAtMTg2NTgsNiArMTg2NTYsNyBAQAogCQkJCUU0RDY4Nzc4MEVEN0FFNEYwMDZFQTk3OCAvKiBQ
dXJnZWFibGVCdWZmZXIuaCAqLywKIAkJCQk3RTMzQ0QwMDEyN0YzNDBEMDBCRThGMTcgLyogUHVy
Z2VQcmlvcml0eS5oICovLAogCQkJCTFDNjNBMjQ2MEY3MTY0NjYwMEMwOUQ1QSAvKiBSdW5Mb29w
VGltZXIuaCAqLywKKwkJCQkyOTNFQUUxRTEzNTZCMkZFMDA2N0FDRjkgLyogUnVudGltZUFwcGxp
Y2F0aW9uQ2hlY2tzLmggKi8sCiAJCQkJNTE2MkM3RjIxMUY3N0VGQTAwNjEyRUZFIC8qIFNjaGVt
ZVJlZ2lzdHJ5LmNwcCAqLywKIAkJCQk1MTYyQzdGMzExRjc3RUZCMDA2MTJFRkUgLyogU2NoZW1l
UmVnaXN0cnkuaCAqLywKIAkJCQlCQzhBRTM0QzEyRUEwOTZBMDBFQjNBRTYgLyogU2Nyb2xsYWJs
ZUFyZWEuY3BwICovLApAQCAtMTg3MDAsNiArMTg2OTksNyBAQAogCQkJCTkzODBGNDcxMDlBMTFB
QjQwMDFGREIzNCAvKiBXaWRnZXQuY3BwICovLAogCQkJCTkzODBGNDcyMDlBMTFBQjQwMDFGREIz
NCAvKiBXaWRnZXQuaCAqLywKIAkJCQlFMUUxQkVGRjExNUZGNkZCMDA2RjUyQ0EgLyogV2luZG93
c0tleWJvYXJkQ29kZXMuaCAqLywKKwkJCQkyOTNFQUUyMDEzNTZCMzJFMDA2N0FDRjkgLyogUnVu
dGltZUFwcGxpY2F0aW9uQ2hlY2tzLmNwcCAqLywKIAkJCSk7CiAJCQlwYXRoID0gcGxhdGZvcm07
CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMjIyNTUsNyArMjIyNTUsNiBAQAogCQkJ
CTFBNTY5RDIxMEQ3RTJCODIwMDdDMzk4MyAvKiBydW50aW1lX21ldGhvZC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUE1NjlEMjMwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1bnRpbWVfb2JqZWN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQTU2OUQyNTBEN0UyQjgyMDA3QzM5ODMgLyogcnVudGltZV9yb290
LmggaW4gSGVhZGVycyAqLywKLQkJCQk0NDdENjkwMzBGQTYyNjgxMDAxNUNDQjEgLyogUnVudGlt
ZUFwcGxpY2F0aW9uQ2hlY2tzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4QzZFQTYxQTExRUY3RTA0
MDBGRDhFRTMgLyogUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NDlFOTExQ0IwRUY4NkQ0NzAwOUQwQ0FGIC8qIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1REZFOEY1NzBEMTY0NzdDMDA3NkU5MzcgLyogU2NoZWR1bGVkQWN0
aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTIyOTA2LDYgKzIyOTA1LDcgQEAKIAkJCQk5M0YxOTlF
RDA4MjQ1RTU5MDAxRTlBQkMgLyogWFNMVFByb2Nlc3Nvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RTFCRTUxMkUwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTc3RTJFMEYxMkYwRkM5QzAwQzEzMzc5IC8qIFhTU0ZpbHRlci5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMjkzRUFFMUYxMzU2QjJGRTAwNjdBQ0Y5IC8qIFJ1bnRpbWVBcHBsaWNhdGlv
bkNoZWNrcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yNTA4OCw3ICsyNTA4OCw2IEBACiAJCQkJMUE1
NjlEMjAwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1bnRpbWVfbWV0aG9kLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTFBNTY5RDIyMEQ3RTJCODIwMDdDMzk4MyAvKiBydW50aW1lX29iamVjdC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxQTU2OUQyNDBEN0UyQjgyMDA3QzM5ODMgLyogcnVudGltZV9yb290
LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ0N0Q2OTA0MEZBNjI2ODEwMDE1Q0NCMSAvKiBSdW50
aW1lQXBwbGljYXRpb25DaGVja3MubW0gaW4gU291cmNlcyAqLywKIAkJCQk4QzZFQTYxOTExRUY3
RTA0MDBGRDhFRTMgLyogUnVudGltZUVuYWJsZWRGZWF0dXJlcy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk0OUU5MTFDQTBFRjg2RDQ3MDA5RDBDQUYgLyogU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNURGRThGNTYwRDE2NDc3QjAwNzZFOTM3IC8qIFNjaGVk
dWxlZEFjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI1NjA0LDYgKzI1NjAzLDcgQEAKIAkJ
CQk5M0YxOUIwNTA4MjQ1RTU5MDAxRTlBQkMgLyogWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRTFCRTUxMkQwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2Rl
U29ydC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzdFMkUwRTEyRjBGQzlDMDBDMTMzNzkgLyog
WFNTRmlsdGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTI5M0VBRTIxMTM1NkIzMkUwMDY3QUNG
OSAvKiBSdW50aW1lQXBwbGljYXRpb25DaGVja3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwog
CQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRRdWV1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnRRdWV1ZS5jcHAKaW5kZXggNzdkYjc1MGRmZTZmZWVhZTI2YTI4NTgxODI1NjA2MTc2
MTI0NjgwNi4uOTBmM2U1ZGVkYzdjNThkOWYwMTYwNTUxOGEyMTgwNzEwMzdmN2I5YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UXVldWUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudFF1ZXVlLmNwcApAQCAtMjgsMTIgKzI4LDIwIEBACiAjaW5jbHVkZSAiRXZl
bnRRdWV1ZS5oIgogCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRl
ICJSdW50aW1lQXBwbGljYXRpb25DaGVja3MuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgiCiAjaW5jbHVkZSAiU3VzcGVuZGFibGVUaW1lci5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CisgICAgCitzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkRGlzcGF0Y2hTY3JvbGxFdmVu
dFN5bmNocm9ub3VzbHkoRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIEFTU0VSVF9BUkcoZG9j
dW1lbnQsIGRvY3VtZW50KTsKKyAgICByZXR1cm4gYXBwbGljYXRpb25Jc1NhZmFyaSgpICYmIChk
b2N1bWVudC0+dXJsKCkucHJvdG9jb2xJcygiZmVlZCIpIHx8IGRvY3VtZW50LT51cmwoKS5wcm90
b2NvbElzKCJmZWVkcyIpKTsKK30KIAogY2xhc3MgRXZlbnRRdWV1ZVRpbWVyIDogcHVibGljIFN1
c3BlbmRhYmxlVGltZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEV2ZW50UXVldWVUaW1l
cik7CkBAIC03MSwxNCArNzksMjAgQEAgdm9pZCBFdmVudFF1ZXVlOjplbnF1ZXVlRXZlbnQoUGFz
c1JlZlB0cjxFdmVudD4gZXZlbnQpCiAgICAgICAgIG1fcGVuZGluZ0V2ZW50VGltZXItPnN0YXJ0
T25lU2hvdCgwKTsKIH0KIAotdm9pZCBFdmVudFF1ZXVlOjplbnF1ZXVlU2Nyb2xsRXZlbnQoUGFz
c1JlZlB0cjxOb2RlPiB0YXJnZXQsIFNjcm9sbEV2ZW50VGFyZ2V0VHlwZSB0YXJnZXRUeXBlKQor
dm9pZCBFdmVudFF1ZXVlOjplbnF1ZXVlT3JEaXNwYXRjaFNjcm9sbEV2ZW50KFBhc3NSZWZQdHI8
Tm9kZT4gdGFyZ2V0LCBTY3JvbGxFdmVudFRhcmdldFR5cGUgdGFyZ2V0VHlwZSkKIHsKLSAgICBp
ZiAoIW1fbm9kZXNXaXRoUXVldWVkU2Nyb2xsRXZlbnRzLmFkZCh0YXJnZXQuZ2V0KCkpLnNlY29u
ZCkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgLy8gUGVyIHRoZSBXM0MgQ1NTT00gVmlldyBNb2R1
bGUsIHNjcm9sbCBldmVudHMgZmlyZWQgYXQgdGhlIGRvY3VtZW50IHNob3VsZCBidWJibGUsIG90
aGVycyBzaG91bGQgbm90LgogICAgIGJvb2wgY2FuQnViYmxlID0gdGFyZ2V0VHlwZSA9PSBTY3Jv
bGxFdmVudERvY3VtZW50VGFyZ2V0OwogICAgIFJlZlB0cjxFdmVudD4gc2Nyb2xsRXZlbnQgPSBF
dmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zY3JvbGxFdmVudCwgY2FuQnViYmxlLCBmYWxzZSAv
KiBub24gY2FuY2VsbGVhYmxlICovKTsKKyAgICAgCisgICAgaWYgKHNob3VsZERpc3BhdGNoU2Ny
b2xsRXZlbnRTeW5jaHJvbm91c2x5KHRhcmdldC0+ZG9jdW1lbnQoKSkpIHsKKyAgICAgICAgdGFy
Z2V0LT5kaXNwYXRjaEV2ZW50KHNjcm9sbEV2ZW50LnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoIW1fbm9kZXNXaXRoUXVldWVkU2Nyb2xsRXZlbnRzLmFkZCh0
YXJnZXQuZ2V0KCkpLnNlY29uZCkKKyAgICAgICAgcmV0dXJuOworCiAgICAgc2Nyb2xsRXZlbnQt
PnNldFRhcmdldCh0YXJnZXQpOwogICAgIGVucXVldWVFdmVudChzY3JvbGxFdmVudC5yZWxlYXNl
KCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UXVldWUuaCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FdmVudFF1ZXVlLmgKaW5kZXggZTY3YmE3MDRkNDY3YWU5OTVkNDVh
NTgzNTY4MmZlNWNiYTMwYjU2Ny4uMmNiMzhmNDkwZDAxZjBjOGUzMGQ3MTg5ODRkZmYxZGRkNzA0
NjBiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UXVldWUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRXZlbnRRdWV1ZS5oCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoK
ICAgICB+RXZlbnRRdWV1ZSgpOwogCiAgICAgdm9pZCBlbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxF
dmVudD4pOwotICAgIHZvaWQgZW5xdWV1ZVNjcm9sbEV2ZW50KFBhc3NSZWZQdHI8Tm9kZT4sIFNj
cm9sbEV2ZW50VGFyZ2V0VHlwZSk7CisgICAgdm9pZCBlbnF1ZXVlT3JEaXNwYXRjaFNjcm9sbEV2
ZW50KFBhc3NSZWZQdHI8Tm9kZT4sIFNjcm9sbEV2ZW50VGFyZ2V0VHlwZSk7CiAgICAgYm9vbCBj
YW5jZWxFdmVudChFdmVudCopOwogICAgIHZvaWQgY2FuY2VsUXVldWVkRXZlbnRzKCk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCA1MDE1ZmY5OWJiOTFlZDYwZjJmYWRi
YmZlNmY5MjFkNGE0MmI1MmMwLi40YjdiNjRmMWU2MjNlOWJmZmI2N2Q5Y2Y2NGM5ODY2ZjMzMWI0
ZmRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC0yOTY4LDcgKzI5Njgs
NyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6c2VuZFNjcm9sbEV2ZW50KCkKIHsKICAgICBzZXRGcmFt
ZVdhc1Njcm9sbGVkQnlVc2VyKCk7CiAgICAgaWYgKG1fZnJhbWUtPnZpZXcoKSAmJiBtX2ZyYW1l
LT5kb2N1bWVudCgpKQotICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5ldmVudFF1ZXVlKCkt
PmVucXVldWVTY3JvbGxFdmVudChtX2ZyYW1lLT5kb2N1bWVudCgpLCBFdmVudFF1ZXVlOjpTY3Jv
bGxFdmVudERvY3VtZW50VGFyZ2V0KTsKKyAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZXZl
bnRRdWV1ZSgpLT5lbnF1ZXVlT3JEaXNwYXRjaFNjcm9sbEV2ZW50KG1fZnJhbWUtPmRvY3VtZW50
KCksIEV2ZW50UXVldWU6OlNjcm9sbEV2ZW50RG9jdW1lbnRUYXJnZXQpOwogfQogCiB2b2lkIEV2
ZW50SGFuZGxlcjo6c2V0RnJhbWVXYXNTY3JvbGxlZEJ5VXNlcigpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9SdW50aW1lQXBwbGljYXRpb25DaGVja3MuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5iMDcwN2E0M2JhZmJlNzc0ZjJkZjliM2UzZDc3YzA1ODEzYzVlYjc3Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmNw
cApAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oIgorCisjaWYgVVNFKENGKQorI2luY2x1
ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworICAgIAorc3RhdGljIGJvb2wgbWFpbkJ1bmRsZUlzRXF1YWxUbyhj
b25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXJTdHJpbmcpCit7CisjaWYgVVNFKENGKQorICAg
IENGQnVuZGxlUmVmIG1haW5CdW5kbGUgPSBDRkJ1bmRsZUdldE1haW5CdW5kbGUoKTsKKyAgICBp
ZiAoIW1haW5CdW5kbGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIENGU3RyaW5nUmVm
IGJ1bmRsZUlkZW50aWZpZXIgPSBDRkJ1bmRsZUdldElkZW50aWZpZXIobWFpbkJ1bmRsZSk7Cisg
ICAgaWYgKCFidW5kbGVJZGVudGlmaWVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBS
ZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGJ1bmRsZUlkZW50aWZpZXJUb0NvbXBhcmUoQWRvcHRDRiwg
YnVuZGxlSWRlbnRpZmllclN0cmluZy5jcmVhdGVDRlN0cmluZygpKTsKKyAgICByZXR1cm4gQ0ZT
dHJpbmdDb21wYXJlKGJ1bmRsZUlkZW50aWZpZXIsIGJ1bmRsZUlkZW50aWZpZXJUb0NvbXBhcmUu
Z2V0KCksIDApID09IGtDRkNvbXBhcmVFcXVhbFRvOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7
CisjZW5kaWYKK30KKworYm9vbCBhcHBsaWNhdGlvbklzU2FmYXJpKCkKK3sKKyAgICBzdGF0aWMg
Ym9vbCBpc1NhZmFyaSA9IG1haW5CdW5kbGVJc0VxdWFsVG8oImNvbS5hcHBsZS5TYWZhcmkiKSB8
fCBtYWluQnVuZGxlSXNFcXVhbFRvKCJjb20uYXBwbGUuV2ViUHJvY2VzcyIpOworICAgIHJldHVy
biBpc1NhZmFyaTsKK30KKworYm9vbCBhcHBsaWNhdGlvbklzQXBwbGVNYWlsKCkKK3sKKyAgICBz
dGF0aWMgYm9vbCBpc0FwcGxlTWFpbCA9IG1haW5CdW5kbGVJc0VxdWFsVG8oImNvbS5hcHBsZS5t
YWlsIik7CisgICAgcmV0dXJuIGlzQXBwbGVNYWlsOworfQorCitib29sIGFwcGxpY2F0aW9uSXNN
aWNyb3NvZnRNZXNzZW5nZXIoKQoreworICAgIHN0YXRpYyBib29sIGlzTWljcm9zb2Z0TWVzc2Vu
Z2VyID0gbWFpbkJ1bmRsZUlzRXF1YWxUbygiY29tLm1pY3Jvc29mdC5NZXNzZW5nZXIiKTsKKyAg
ICByZXR1cm4gaXNNaWNyb3NvZnRNZXNzZW5nZXI7Cit9CisKK2Jvb2wgYXBwbGljYXRpb25Jc0Fk
b2JlSW5zdGFsbGVyKCkKK3sKKyAgICBzdGF0aWMgYm9vbCBpc0Fkb2JlSW5zdGFsbGVyID0gbWFp
bkJ1bmRsZUlzRXF1YWxUbygiY29tLmFkb2JlLkluc3RhbGxlcnMuU2V0dXAiKTsKKyAgICByZXR1
cm4gaXNBZG9iZUluc3RhbGxlcjsKK30KKworYm9vbCBhcHBsaWNhdGlvbklzQU9MSW5zdGFudE1l
c3NlbmdlcigpCit7CisgICAgc3RhdGljIGJvb2wgaXNBT0xJbnN0YW50TWVzc2VuZ2VyID0gbWFp
bkJ1bmRsZUlzRXF1YWxUbygiY29tLmFvbC5haW0uZGVza3RvcCIpOworICAgIHJldHVybiBpc0FP
TEluc3RhbnRNZXNzZW5nZXI7Cit9CisKK2Jvb2wgYXBwbGljYXRpb25Jc01pY3Jvc29mdE15RGF5
KCkKK3sKKyAgICBzdGF0aWMgYm9vbCBpc01pY3Jvc29mdE15RGF5ID0gbWFpbkJ1bmRsZUlzRXF1
YWxUbygiY29tLm1pY3Jvc29mdC5teWRheSIpOworICAgIHJldHVybiBpc01pY3Jvc29mdE15RGF5
OworfQorCitib29sIGFwcGxpY2F0aW9uSXNNaWNyb3NvZnRPdXRsb29rKCkKK3sKKyAgICBzdGF0
aWMgYm9vbCBpc01pY3Jvc29mdE91dGxvb2sgPSBtYWluQnVuZGxlSXNFcXVhbFRvKCJjb20ubWlj
cm9zb2Z0Lk91dGxvb2siKTsKKyAgICByZXR1cm4gaXNNaWNyb3NvZnRPdXRsb29rOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggM2FkNDVkYzE2N2FhY2FlZjBlNTk1NTgwOTNlYzJhNWI3OTYzYWY1NC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLm1tCisrKyAvZGV2L251bGwKQEAg
LTEsNzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
LSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQg
IlJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oIgotCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Ym9vbCBhcHBsaWNhdGlvbklzQXBwbGVNYWlsKCkKLXsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c0FwcGxlTWFpbCA9IFtbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdIGlz
RXF1YWxUb1N0cmluZzpAImNvbS5hcHBsZS5tYWlsIl07Ci0gICAgcmV0dXJuIGlzQXBwbGVNYWls
OwotfQotCi1ib29sIGFwcGxpY2F0aW9uSXNTYWZhcmkoKQotewotICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzU2FmYXJpID0gW1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0g
aXNFcXVhbFRvU3RyaW5nOkAiY29tLmFwcGxlLlNhZmFyaSJdOwotICAgIHJldHVybiBpc1NhZmFy
aTsKLX0KLQotYm9vbCBhcHBsaWNhdGlvbklzTWljcm9zb2Z0TWVzc2VuZ2VyKCkKLXsKLSAgICBz
dGF0aWMgYm9vbCBpc01pY3Jvc29mdE1lc3NlbmdlciA9IFtbW05TQnVuZGxlIG1haW5CdW5kbGVd
IGJ1bmRsZUlkZW50aWZpZXJdIGlzRXF1YWxUb1N0cmluZzpAImNvbS5taWNyb3NvZnQuTWVzc2Vu
Z2VyIl07Ci0gICAgcmV0dXJuIGlzTWljcm9zb2Z0TWVzc2VuZ2VyOwotfQotCi1ib29sIGFwcGxp
Y2F0aW9uSXNBZG9iZUluc3RhbGxlcigpCi17Ci0gICAgc3RhdGljIGJvb2wgaXNBZG9iZUluc3Rh
bGxlciA9IFtbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdIGlzRXF1YWxU
b1N0cmluZzpAImNvbS5hZG9iZS5JbnN0YWxsZXJzLlNldHVwIl07Ci0gICAgcmV0dXJuIGlzQWRv
YmVJbnN0YWxsZXI7Ci19Ci0gICAgCi1ib29sIGFwcGxpY2F0aW9uSXNBT0xJbnN0YW50TWVzc2Vu
Z2VyKCkKLXsKLSAgICBzdGF0aWMgYm9vbCBpc0FPTEluc3RhbnRNZXNzZW5nZXIgPSBbW1tOU0J1
bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXSBpc0VxdWFsVG9TdHJpbmc6QCJjb20u
YW9sLmFpbS5kZXNrdG9wIl07Ci0gICAgcmV0dXJuIGlzQU9MSW5zdGFudE1lc3NlbmdlcjsKLX0K
LQotYm9vbCBhcHBsaWNhdGlvbklzTWljcm9zb2Z0TXlEYXkoKQotewotICAgIHN0YXRpYyBib29s
IGlzTWljcm9zb2Z0TXlEYXkgPSBbW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlm
aWVyXSBpc0VxdWFsVG9TdHJpbmc6QCJjb20ubWljcm9zb2Z0Lm15ZGF5Il07Ci0gICAgcmV0dXJu
IGlzTWljcm9zb2Z0TXlEYXk7Ci19Ci0gICAgCi1ib29sIGFwcGxpY2F0aW9uSXNNaWNyb3NvZnRP
dXRsb29rKCkKLXsKLSAgICBzdGF0aWMgYm9vbCBpc01pY3Jvc29mdE91dGxvb2sgPSBbW1tOU0J1
bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXSBpc0VxdWFsVG9TdHJpbmc6QCJjb20u
bWljcm9zb2Z0Lk91dGxvb2siXTsKLSAgICByZXR1cm4gaXNNaWNyb3NvZnRPdXRsb29rOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmNwcAppbmRleCAzNmRjZmM0OWVkNzU1NDc4OGU2YjhiMzRjMzYxY2Y3ZDBjMmFlZTUyLi44
YzE3MjM1OTg0Zjg4ZjFmZGQ0NTMyYjk0YzJlZTk5OWVkY2YxMWYyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTE0MDQsNyArMTQwNCw3IEBAIHZvaWQgUmVu
ZGVyTGF5ZXI6OnNjcm9sbFRvKGludCB4LCBpbnQgeSkKICAgICAgICAgcmVuZGVyZXIoKS0+cmVw
YWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIHJlY3RGb3JSZXBhaW50KTsKIAog
ICAgIC8vIFNjaGVkdWxlIHRoZSBzY3JvbGwgRE9NIGV2ZW50LgotICAgIHJlbmRlcmVyKCktPm5v
ZGUoKS0+ZG9jdW1lbnQoKS0+ZXZlbnRRdWV1ZSgpLT5lbnF1ZXVlU2Nyb2xsRXZlbnQocmVuZGVy
ZXIoKS0+bm9kZSgpLCBFdmVudFF1ZXVlOjpTY3JvbGxFdmVudEVsZW1lbnRUYXJnZXQpOworICAg
IHJlbmRlcmVyKCktPm5vZGUoKS0+ZG9jdW1lbnQoKS0+ZXZlbnRRdWV1ZSgpLT5lbnF1ZXVlT3JE
aXNwYXRjaFNjcm9sbEV2ZW50KHJlbmRlcmVyKCktPm5vZGUoKSwgRXZlbnRRdWV1ZTo6U2Nyb2xs
RXZlbnRFbGVtZW50VGFyZ2V0KTsKIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsUmVjdFRv
VmlzaWJsZShjb25zdCBJbnRSZWN0JiByZWN0LCBib29sIHNjcm9sbFRvQW5jaG9yLCBjb25zdCBT
Y3JvbGxBbGlnbm1lbnQmIGFsaWduWCwgY29uc3QgU2Nyb2xsQWxpZ25tZW50JiBhbGlnblkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKaW5kZXggYWIzYTgzMmNh
MzUzODdjYmE2YTVmMGExZDY1OTg5NGE1MjYxZTgzYS4uYWQ3ZDkxNzk2ZjZkZjA1Y2Q3YTQwZTM3
YjE5MjhiNzdhZTliZDE3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxpc3RCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0
Qm94LmNwcApAQCAtNTk5LDcgKzU5OSw3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6c2Nyb2xsVG8o
aW50IG5ld09mZnNldCkKIAogICAgIG1faW5kZXhPZmZzZXQgPSBuZXdPZmZzZXQ7CiAgICAgcmVw
YWludCgpOwotICAgIG5vZGUoKS0+ZG9jdW1lbnQoKS0+ZXZlbnRRdWV1ZSgpLT5lbnF1ZXVlU2Ny
b2xsRXZlbnQobm9kZSgpLCBFdmVudFF1ZXVlOjpTY3JvbGxFdmVudEVsZW1lbnRUYXJnZXQpOwor
ICAgIG5vZGUoKS0+ZG9jdW1lbnQoKS0+ZXZlbnRRdWV1ZSgpLT5lbnF1ZXVlT3JEaXNwYXRjaFNj
cm9sbEV2ZW50KG5vZGUoKSwgRXZlbnRRdWV1ZTo6U2Nyb2xsRXZlbnRFbGVtZW50VGFyZ2V0KTsK
IH0KIAogaW50IFJlbmRlckxpc3RCb3g6Oml0ZW1IZWlnaHQoKSBjb25zdAo=
</data>
<flag name="review"
          id="82238"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>