<?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>196062</bug_id>
          
          <creation_ts>2019-03-21 00:04:12 -0700</creation_ts>
          <short_desc>Certain WebProcesses should opt-out of the freezer</short_desc>
          <delta_ts>2019-03-22 10:02:56 -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>WebKit Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>196149</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>aestes</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>mjs</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1519519</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2019-03-21 00:04:12 -0700</bug_when>
    <thetext>Certain WebProcesses should opt-out of the freezer

These include:
-Prewarmed web processes
-Processes in the per-domain-process cache
-Processes in the back/forward cache list</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519521</commentid>
    <comment_count>1</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2019-03-21 00:05:15 -0700</bug_when>
    <thetext>(In reply to Brady Eidson from comment #0)
&gt; Certain WebProcesses should opt-out of the freezer
&gt; 
&gt; These include:
&gt; -Prewarmed web processes
&gt; -Processes in the per-domain-process cache
&gt; -Processes in the back/forward cache list

Actually that last one is not true. It&apos;s &quot;processes that *only host* pages in the back/forward cache list&quot; and such processes should also already be in the per-domain-process-cache.

Yay.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519630</commentid>
    <comment_count>2</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-03-21 08:12:24 -0700</bug_when>
    <thetext>(In reply to Brady Eidson from comment #1)
&gt; (In reply to Brady Eidson from comment #0)
&gt; &gt; Certain WebProcesses should opt-out of the freezer
&gt; &gt; 
&gt; &gt; These include:
&gt; &gt; -Prewarmed web processes
&gt; &gt; -Processes in the per-domain-process cache
&gt; &gt; -Processes in the back/forward cache list
&gt; 
&gt; Actually that last one is not true. It&apos;s &quot;processes that *only host* pages
&gt; in the back/forward cache list&quot; and such processes should also already be in
&gt; the per-domain-process-cache.
&gt; 
&gt; Yay.

Processes with suspended pages are NOT in the WebProcess cache, even when they have no WebPage on the WebProcess side. Also note that the WebProcess cache is currently not enabled on iOS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519881</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2019-03-21 13:33:47 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #2)
&gt; (In reply to Brady Eidson from comment #1)
&gt; &gt; (In reply to Brady Eidson from comment #0)
&gt; &gt; &gt; Certain WebProcesses should opt-out of the freezer
&gt; &gt; &gt; 
&gt; &gt; &gt; These include:
&gt; &gt; &gt; -Prewarmed web processes
&gt; &gt; &gt; -Processes in the per-domain-process cache
&gt; &gt; &gt; -Processes in the back/forward cache list
&gt; &gt; 
&gt; &gt; Actually that last one is not true. It&apos;s &quot;processes that *only host* pages
&gt; &gt; in the back/forward cache list&quot; and such processes should also already be in
&gt; &gt; the per-domain-process-cache.
&gt; &gt; 
&gt; &gt; Yay.
&gt; 
&gt; Processes with suspended pages are NOT in the WebProcess cache, even when
&gt; they have no WebPage on the WebProcess side.

This is confusing. You&apos;re saying a process that is hosting a suspended webkit.org page is not in the cache and therefore will not be chosen to host other webkit.org pages?

Why not?

&gt; Also note that the WebProcess cache is currently not enabled on iOS.

Yah, I know, and I also know it could be (and even probably will be) some day :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519882</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-03-21 13:38:20 -0700</bug_when>
    <thetext>(In reply to Brady Eidson from comment #3)
&gt; (In reply to Chris Dumez from comment #2)
&gt; &gt; (In reply to Brady Eidson from comment #1)
&gt; &gt; &gt; (In reply to Brady Eidson from comment #0)
&gt; &gt; &gt; &gt; Certain WebProcesses should opt-out of the freezer
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; These include:
&gt; &gt; &gt; &gt; -Prewarmed web processes
&gt; &gt; &gt; &gt; -Processes in the per-domain-process cache
&gt; &gt; &gt; &gt; -Processes in the back/forward cache list
&gt; &gt; &gt; 
&gt; &gt; &gt; Actually that last one is not true. It&apos;s &quot;processes that *only host* pages
&gt; &gt; &gt; in the back/forward cache list&quot; and such processes should also already be in
&gt; &gt; &gt; the per-domain-process-cache.
&gt; &gt; &gt; 
&gt; &gt; &gt; Yay.
&gt; &gt; 
&gt; &gt; Processes with suspended pages are NOT in the WebProcess cache, even when
&gt; &gt; they have no WebPage on the WebProcess side.
&gt; 
&gt; This is confusing. You&apos;re saying a process that is hosting a suspended
&gt; webkit.org page is not in the cache and therefore will not be chosen to host
&gt; other webkit.org pages?
&gt; 
&gt; Why not?

A suspended page processes may get used for navigations if their domain matches but they are not in the WebProcessCache. We check both suspended pages and the WebProcessCache to find a suitable process.
In the WebProcessCache, we currently only put processes that were about to shutdown (i.e. because they have no pages / suspendedPages).

&gt; 
&gt; &gt; Also note that the WebProcess cache is currently not enabled on iOS.
&gt; 
&gt; Yah, I know, and I also know it could be (and even probably will be) some
&gt; day :)

Maybe ^^</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519887</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-03-21 13:41:08 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #4)
&gt; (In reply to Brady Eidson from comment #3)
&gt; &gt; (In reply to Chris Dumez from comment #2)
&gt; &gt; &gt; (In reply to Brady Eidson from comment #1)
&gt; &gt; &gt; &gt; (In reply to Brady Eidson from comment #0)
&gt; &gt; &gt; &gt; &gt; Certain WebProcesses should opt-out of the freezer
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; These include:
&gt; &gt; &gt; &gt; &gt; -Prewarmed web processes
&gt; &gt; &gt; &gt; &gt; -Processes in the per-domain-process cache
&gt; &gt; &gt; &gt; &gt; -Processes in the back/forward cache list
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Actually that last one is not true. It&apos;s &quot;processes that *only host* pages
&gt; &gt; &gt; &gt; in the back/forward cache list&quot; and such processes should also already be in
&gt; &gt; &gt; &gt; the per-domain-process-cache.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Yay.
&gt; &gt; &gt; 
&gt; &gt; &gt; Processes with suspended pages are NOT in the WebProcess cache, even when
&gt; &gt; &gt; they have no WebPage on the WebProcess side.
&gt; &gt; 
&gt; &gt; This is confusing. You&apos;re saying a process that is hosting a suspended
&gt; &gt; webkit.org page is not in the cache and therefore will not be chosen to host
&gt; &gt; other webkit.org pages?
&gt; &gt; 
&gt; &gt; Why not?
&gt; 
&gt; A suspended page processes may get used for navigations if their domain
&gt; matches but they are not in the WebProcessCache. We check both suspended
&gt; pages and the WebProcessCache to find a suitable process.
&gt; In the WebProcessCache, we currently only put processes that were about to
&gt; shutdown (i.e. because they have no pages / suspendedPages).


Note that when we decide to use a suspended page&apos;s process for a forward navigation, we often have to destroy the suspended page, this is a destructive optimization.

It is not exactly the same thing as process caching IMO.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519901</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-03-21 13:48:33 -0700</bug_when>
    <thetext>(In reply to Brady Eidson from comment #1)
&gt; (In reply to Brady Eidson from comment #0)
&gt; &gt; Certain WebProcesses should opt-out of the freezer
&gt; &gt; 
&gt; &gt; These include:
&gt; &gt; -Prewarmed web processes
&gt; &gt; -Processes in the per-domain-process cache
&gt; &gt; -Processes in the back/forward cache list
&gt; 
&gt; Actually that last one is not true. It&apos;s &quot;processes that *only host* pages
&gt; in the back/forward cache list&quot; and such processes should also already be in
&gt; the per-domain-process-cache.
&gt; 
&gt; Yay.

Seems like we could generalize to:
if (m_pageMap.isEmpty() &amp;&amp; m_provisionalPages.isEmpty() &amp;&amp; !isServiceWorkerProcess())
  // Then no need for the freezer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1520018</commentid>
    <comment_count>7</comment_count>
      <attachid>365641</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2019-03-21 16:26:10 -0700</bug_when>
    <thetext>Created attachment 365641
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1520025</commentid>
    <comment_count>8</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2019-03-21 16:29:42 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #6)
&gt; (In reply to Brady Eidson from comment #1)
&gt; &gt; (In reply to Brady Eidson from comment #0)
&gt; &gt; &gt; Certain WebProcesses should opt-out of the freezer
&gt; &gt; &gt; 
&gt; &gt; &gt; These include:
&gt; &gt; &gt; -Prewarmed web processes
&gt; &gt; &gt; -Processes in the per-domain-process cache
&gt; &gt; &gt; -Processes in the back/forward cache list
&gt; &gt; 
&gt; &gt; Actually that last one is not true. It&apos;s &quot;processes that *only host* pages
&gt; &gt; in the back/forward cache list&quot; and such processes should also already be in
&gt; &gt; the per-domain-process-cache.
&gt; &gt; 
&gt; &gt; Yay.
&gt; 
&gt; Seems like we could generalize to:
&gt; if (m_pageMap.isEmpty() &amp;&amp; m_provisionalPages.isEmpty() &amp;&amp;
&gt; !isServiceWorkerProcess())
&gt;   // Then no need for the freezer.

I don&apos;t think the provisional page check is quite right.

Also, serviceWorkerProcesses host pages (right?), so that explicit check is also needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1520026</commentid>
    <comment_count>9</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2019-03-21 16:30:18 -0700</bug_when>
    <thetext>(In reply to Brady Eidson from comment #8)
&gt; 
&gt; Also, serviceWorkerProcesses host pages (right?), so that explicit check is
&gt; also needed.

I meant also *not* needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1520034</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-03-21 16:48:45 -0700</bug_when>
    <thetext>(In reply to Brady Eidson from comment #8)
&gt; (In reply to Chris Dumez from comment #6)
&gt; &gt; (In reply to Brady Eidson from comment #1)
&gt; &gt; &gt; (In reply to Brady Eidson from comment #0)
&gt; &gt; &gt; &gt; Certain WebProcesses should opt-out of the freezer
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; These include:
&gt; &gt; &gt; &gt; -Prewarmed web processes
&gt; &gt; &gt; &gt; -Processes in the per-domain-process cache
&gt; &gt; &gt; &gt; -Processes in the back/forward cache list
&gt; &gt; &gt; 
&gt; &gt; &gt; Actually that last one is not true. It&apos;s &quot;processes that *only host* pages
&gt; &gt; &gt; in the back/forward cache list&quot; and such processes should also already be in
&gt; &gt; &gt; the per-domain-process-cache.
&gt; &gt; &gt; 
&gt; &gt; &gt; Yay.
&gt; &gt; 
&gt; &gt; Seems like we could generalize to:
&gt; &gt; if (m_pageMap.isEmpty() &amp;&amp; m_provisionalPages.isEmpty() &amp;&amp;
&gt; &gt; !isServiceWorkerProcess())
&gt; &gt;   // Then no need for the freezer.
&gt; 
&gt; I don&apos;t think the provisional page check is quite right.

Can you elaborate? :)

&gt; 
&gt; Also, serviceWorkerProcesses host pages (right?), so that explicit check is
&gt; also needed.

serviceWorkerProcesses host pages? This is news to me but maybe Youenn added a dummy page in there to help with the networking?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1520039</commentid>
    <comment_count>11</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2019-03-21 16:54:05 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #10)
&gt; (In reply to Brady Eidson from comment #8)
&gt; &gt; (In reply to Chris Dumez from comment #6)
&gt; &gt; &gt; (In reply to Brady Eidson from comment #1)
&gt; &gt; &gt; &gt; (In reply to Brady Eidson from comment #0)
&gt; &gt; &gt; &gt; &gt; Certain WebProcesses should opt-out of the freezer
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; These include:
&gt; &gt; &gt; &gt; &gt; -Prewarmed web processes
&gt; &gt; &gt; &gt; &gt; -Processes in the per-domain-process cache
&gt; &gt; &gt; &gt; &gt; -Processes in the back/forward cache list
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Actually that last one is not true. It&apos;s &quot;processes that *only host* pages
&gt; &gt; &gt; &gt; in the back/forward cache list&quot; and such processes should also already be in
&gt; &gt; &gt; &gt; the per-domain-process-cache.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Yay.
&gt; &gt; &gt; 
&gt; &gt; &gt; Seems like we could generalize to:
&gt; &gt; &gt; if (m_pageMap.isEmpty() &amp;&amp; m_provisionalPages.isEmpty() &amp;&amp;
&gt; &gt; &gt; !isServiceWorkerProcess())
&gt; &gt; &gt;   // Then no need for the freezer.
&gt; &gt; 
&gt; &gt; I don&apos;t think the provisional page check is quite right.
&gt; 
&gt; Can you elaborate? :)

If a process *only* has a provisional page in it (e.g. it fails these other checks) there&apos;s no value to freezing it.

&gt; &gt; 
&gt; &gt; Also, serviceWorkerProcesses host pages (right?), so that explicit check is
&gt; &gt; also needed.
&gt; 
&gt; serviceWorkerProcesses host pages? This is news to me but maybe Youenn added
&gt; a dummy page in there to help with the networking?

It&apos;s got the dummy page id for messaging, but the dummy page itself has been removed. I&apos;ll add the isServiceWorker check</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1520040</commentid>
    <comment_count>12</comment_count>
      <attachid>365647</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2019-03-21 16:54:43 -0700</bug_when>
    <thetext>Created attachment 365647
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1520045</commentid>
    <comment_count>13</comment_count>
      <attachid>365647</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2019-03-21 17:03:59 -0700</bug_when>
    <thetext>Comment on attachment 365647
Patch

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

Assuming sufficient testing, r=me

&gt; Source/WebKit/UIProcess/WebProcessProxy.cpp:201
&gt; +void WebProcessProxy::validateFreezerStatus()
&gt; +{
&gt; +#if PLATFORM(IOS_FAMILY)
&gt; +    bool value = !m_isPrewarmed &amp;&amp; !m_isInProcessCache &amp;&amp; !m_pageMap.isEmpty() &amp;&amp; !isServiceWorkerProcess();
&gt; +    if (m_currentIsFreezableValue != WTF::nullopt &amp;&amp; m_currentIsFreezableValue == value)
&gt; +        return;
&gt; +
&gt; +    m_currentIsFreezableValue = value;
&gt; +    send(Messages::WebProcess::SetFreezable(value), 0);
&gt; +#endif
&gt; +}

Often, we do thinks like this by having platform-specific methods in a separate platform-specific file, rather than #ifefing whole method bodies. (Not a blocker for landing though.) Also, style nit: &quot;value&quot; is a very generic name for a variable. Might be better named isFreezable.

&gt; Source/WebKit/WebProcess/WebProcess.cpp:1879
&gt; +#if PLATFORM(IOS_FAMILY)
&gt; +    auto result = memorystatus_control(MEMORYSTATUS_CMD_SET_PROCESS_IS_FREEZABLE, getpid(), freezable ? 1 : 0, nullptr, 0);
&gt; +    ASSERT_UNUSED(result, !result);
&gt; +#endif

ditto the previous comment about fully ifdef&apos;d method bodies,</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1520094</commentid>
    <comment_count>14</comment_count>
      <attachid>365647</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-03-21 18:46:48 -0700</bug_when>
    <thetext>Comment on attachment 365647
Patch

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

&gt; Source/WebKit/UIProcess/WebProcessProxy.h:139
&gt; +    class WebPageProxyMap {

We do not really need this new Map type. Calls to validateFreezerStatus can simply be added to:
WebProcessProxy::addExistingWebPage() and WebProcessProxy::removeWebPage(). Those are already our choke points for adding / removing pages.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1520130</commentid>
    <comment_count>15</comment_count>
      <attachid>365647</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-03-21 20:00:50 -0700</bug_when>
    <thetext>Comment on attachment 365647
Patch

Clearing flags on attachment: 365647

Committed r243357: &lt;https://trac.webkit.org/changeset/243357&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1520131</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-03-21 20:00:51 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1520132</commentid>
    <comment_count>17</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-03-21 20:01:24 -0700</bug_when>
    <thetext>&lt;rdar://problem/49136842&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1520133</commentid>
    <comment_count>18</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2019-03-21 20:02:13 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #14)
&gt; Comment on attachment 365647 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=365647&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/UIProcess/WebProcessProxy.h:139
&gt; &gt; +    class WebPageProxyMap {
&gt; 
&gt; We do not really need this new Map type. Calls to validateFreezerStatus can
&gt; simply be added to:
&gt; WebProcessProxy::addExistingWebPage() and WebProcessProxy::removeWebPage().
&gt; Those are already our choke points for adding / removing pages.

Relying on users of maps as chokepoints is fragile.

What you say is true today but there’s no guarantee it will remain so.

I’ve had to implement this pattern twice recently and have a refactor in mind coming up soon to obviate the need for this custom class while still being truly reliable going forward</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1520138</commentid>
    <comment_count>19</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-03-21 20:20:01 -0700</bug_when>
    <thetext>(In reply to Brady Eidson from comment #18)
&gt; (In reply to Chris Dumez from comment #14)
&gt; &gt; Comment on attachment 365647 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=365647&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/UIProcess/WebProcessProxy.h:139
&gt; &gt; &gt; +    class WebPageProxyMap {
&gt; &gt; 
&gt; &gt; We do not really need this new Map type. Calls to validateFreezerStatus can
&gt; &gt; simply be added to:
&gt; &gt; WebProcessProxy::addExistingWebPage() and WebProcessProxy::removeWebPage().
&gt; &gt; Those are already our choke points for adding / removing pages.
&gt; 
&gt; Relying on users of maps as chokepoints is fragile.
&gt; 
&gt; What you say is true today but there’s no guarantee it will remain so.
&gt; 
&gt; I’ve had to implement this pattern twice recently and have a refactor in
&gt; mind coming up soon to obviate the need for this custom class while still
&gt; being truly reliable going forward

If you are going to add so much code, than at least move maybeShutDown() in there too, no? I’d argue it is more important than opting out of the freezer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1520339</commentid>
    <comment_count>20</comment_count>
      <attachid>365647</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-03-22 09:15:46 -0700</bug_when>
    <thetext>Comment on attachment 365647
Patch

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

&gt; Source/WebKit/WebProcess/WebProcess.messages.in:165
&gt; +    SetFreezable(bool freezable)

This looks fragile. How do we know for sure the WebProcess will receive this IPC *before* it gets suspended?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1520369</commentid>
    <comment_count>21</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2019-03-22 10:00:09 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #19)
&gt; (In reply to Brady Eidson from comment #18)
&gt; &gt; (In reply to Chris Dumez from comment #14)
&gt; &gt; &gt; Comment on attachment 365647 [details]
&gt; &gt; &gt; Patch
&gt; &gt; &gt; 
&gt; &gt; &gt; View in context:
&gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=365647&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebKit/UIProcess/WebProcessProxy.h:139
&gt; &gt; &gt; &gt; +    class WebPageProxyMap {
&gt; &gt; &gt; 
&gt; &gt; &gt; We do not really need this new Map type. Calls to validateFreezerStatus can
&gt; &gt; &gt; simply be added to:
&gt; &gt; &gt; WebProcessProxy::addExistingWebPage() and WebProcessProxy::removeWebPage().
&gt; &gt; &gt; Those are already our choke points for adding / removing pages.
&gt; &gt; 
&gt; &gt; Relying on users of maps as chokepoints is fragile.
&gt; &gt; 
&gt; &gt; What you say is true today but there’s no guarantee it will remain so.
&gt; &gt; 
&gt; &gt; I’ve had to implement this pattern twice recently and have a refactor in
&gt; &gt; mind coming up soon to obviate the need for this custom class while still
&gt; &gt; being truly reliable going forward
&gt; 
&gt; If you are going to add so much code, than at least move maybeShutDown() in
&gt; there too, no? I’d argue it is more important than opting out of the freezer.

Would be happy to do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1520375</commentid>
    <comment_count>22</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2019-03-22 10:02:56 -0700</bug_when>
    <thetext>Called this out on IRC, but this change caused iOS Simulator Debug tests to exit early due this assertion failure:

    ASSERTION FAILED: !result
    /Volumes/Data/slave/ios-simulator-12-debug/build/Source/WebKit/WebProcess/WebProcess.cpp(1882) : void WebKit::WebProcess::setFreezable(bool)
    1   0x5d3cdbe39 WTFCrash
    2   0x5c8099d8b WTFCrashWithInfo(int, char const*, char const*, int)
    3   0x5c8e48d6c WebKit::WebProcess::setFreezable(bool)
    4   0x5c936a842 void IPC::callMemberFunctionImpl&lt;WebKit::WebProcess, void (WebKit::WebProcess::*)(bool), std::__1::tuple&lt;bool&gt;, 0ul&gt;(WebKit::WebProcess*, void (WebKit::WebProcess::*)(bool), std::__1::tuple&lt;bool&gt;&amp;&amp;, std::__1::integer_sequence&lt;unsigned long, 0ul&gt;)
    5   0x5c936a790 void IPC::callMemberFunction&lt;WebKit::WebProcess, void (WebKit::WebProcess::*)(bool), std::__1::tuple&lt;bool&gt;, std::__1::integer_sequence&lt;unsigned long, 0ul&gt; &gt;(std::__1::tuple&lt;bool&gt;&amp;&amp;, WebKit::WebProcess*, void (WebKit::WebProcess::*)(bool))
    6   0x5c93677ae void IPC::handleMessage&lt;Messages::WebProcess::SetFreezable, WebKit::WebProcess, void (WebKit::WebProcess::*)(bool)&gt;(IPC::Decoder&amp;, WebKit::WebProcess*, void (WebKit::WebProcess::*)(bool))
    7   0x5c93616ce WebKit::WebProcess::didReceiveWebProcessMessage(IPC::Connection&amp;, IPC::Decoder&amp;)
    8   0x5c8e3de6b WebKit::WebProcess::didReceiveMessage(IPC::Connection&amp;, IPC::Decoder&amp;)
    9   0x5c80e201c IPC::Connection::dispatchMessage(IPC::Decoder&amp;)
    10  0x5c80d4601 IPC::Connection::dispatchMessage(std::__1::unique_ptr&lt;IPC::Decoder, std::__1::default_delete&lt;IPC::Decoder&gt; &gt;)
    11  0x5c80e2de7 IPC::Connection::dispatchOneIncomingMessage()
    12  0x5c8103a78 IPC::Connection::enqueueIncomingMessage(std::__1::unique_ptr&lt;IPC::Decoder, std::__1::default_delete&lt;IPC::Decoder&gt; &gt;)::$_14::operator()()
    13  0x5c8103989 WTF::Function&lt;void ()&gt;::CallableWrapper&lt;IPC::Connection::enqueueIncomingMessage(std::__1::unique_ptr&lt;IPC::Decoder, std::__1::default_delete&lt;IPC::Decoder&gt; &gt;)::$_14&gt;::call()
    14  0x5d3d0635d WTF::Function&lt;void ()&gt;::operator()() const
    15  0x5d3d65d0d WTF::RunLoop::performWork()
    16  0x5d3d665b4 WTF::RunLoop::performWork(void*)
    17  0x5ce455721 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__
    18  0x5ce454f93 __CFRunLoopDoSources0
    19  0x5ce44f63f __CFRunLoopRun
    20  0x5ce44ee11 CFRunLoopRunSpecific
    21  0x101eb4322 -[NSRunLoop(NSRunLoop) runMode:beforeDate:]
    22  0x101eb4492 -[NSRunLoop(NSRunLoop) run]
    23  0x5cfbb2812 _xpc_objc_main
    24  0x5cfbb4cbd xpc_main
    25  0x5c8599017 WebKit::XPCServiceMain(int, char const**)
    26  0x5c84ac0eb WKXPCServiceMain
    27  0x101dfda8e main
    28  0x5cf8e7575 start
    29  0x1

https://build.webkit.org/builders/Apple%20iOS%2012%20Simulator%20Debug%20WK2%20(Tests)/builds/2938</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>365641</attachid>
            <date>2019-03-21 16:26:10 -0700</date>
            <delta_ts>2019-03-21 16:54:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-196062-20190321162610.patch</filename>
            <type>text/plain</type>
            <size>13389</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQzMjQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGUzY2Y5NWVjOTNlYmI4MTg0
MDljZTM4NTFlYWYxYjFjNzY2NDMzNjkuLmQwOTdiN2VlODMzOGE3ZDhjNmVkZTE0YzUyZDE2ZjRm
NWM1NDA1MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIwMTktMDMtMjEgIEJyYWR5IEVp
ZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIENlcnRhaW4gV2ViUHJvY2Vzc2Vz
IHNob3VsZCBvcHQtb3V0IG9mIHRoZSBmcmVlemVyLgorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
NDI4NDYxMzk+IGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2
MDYyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2Vi
UHJvY2Vzc2VzIHNob3VsZCBvcHQtaW4gYW5kIG9wdC1vdXQgb2YgdGhlIGZyZWV6ZXIgYXMgaXMg
YXBwcm9wcmlhdGUuCisgICAgICAgIEJ5IGRlZmF1bHQgYSBXZWJQcm9jZXNzIGlzIGZyZWV6ZXIg
ZWxpZ2libGUuCisgICAgICAgIElmIGFueSBvZiB0aGUgZm9sbG93aW5nIGJlY29tZSB0cnVlIHRo
ZW4gaXQgc2hvdWxkIGJlY29tZSBpbmVsaWdpYmxlOgorICAgICAgICAtIFRoZSBXZWJQcm9jZXNz
IGlzIGEgcHJlLXdhcm1lZCBwcm9jZXNzLgorICAgICAgICAtIFRoZSBXZWJQcm9jZXNzIGlzIGlu
IHRoZSBwcm9jZXNzIGNhY2hlLgorICAgICAgICAtIFRoZSBXZWJQcm9jZXNzIGlzIG5vdCBhY3Rp
dmVseSBob3N0aW5nIGFueSB3ZWIgcGFnZXMgKGUuZy4gaXQgb25seSBoYXMgc3VzcGVuZGluZyB3
ZWIgcGFnZXMpCisKKyAgICAgICAgVGhlIG1vc3QgY29tcGxpY2F0ZWQgcGFydCBvZiB0aGUgYWJv
dmUgaXMgZ3VhcmFudGVlaW5nIHRoYXQgYW55IG9wZXJhdGlvbiB0aGF0IGNoYW5nZXMKKyAgICAg
ICAgdGhlIGFjdGl2ZSBwYWdlcyBob3N0ZWQgYnkgdGhlIHByb2Nlc3MgY2F1c2VzIGEgcmVjYWxj
dWxhdGlvbiBvZiB0aGUgZnJlZXplciBvcHQtaW4gc3RhdGUuCisKKyAgICAgICAgVG8gZG8gdGhh
dCB0aGlzIHJlcGxhY2VzIHRoZSBiYXNpYyBXZWJQYWdlUHJveHlNYXAgd2l0aCBhIGN1c3RvbSBj
bGFzcy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpnbG9iYWxQYWdlTWFwKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1By
b3h5OjpXZWJQcm9jZXNzUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6
OnZhbGlkYXRlRnJlZXplclN0YXR1cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94
eTo6c2V0SXNJblByb2Nlc3NDYWNoZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94
eTo6bWFya0lzTm9Mb25nZXJJblByZXdhcm1lZFBvb2wpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgICogVUlQcm9jZXNzL1dl
YlByb2Nlc3NQcm94eS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OldlYlBh
Z2VQcm94eU1hcDo6V2ViUGFnZVByb3h5TWFwKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Byb3h5OjpXZWJQYWdlUHJveHlNYXA6OnNpemUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUHJveHk6OldlYlBhZ2VQcm94eU1hcDo6dmFsdWVzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Byb3h5OjpXZWJQYWdlUHJveHlNYXA6OnZhbHVlcyBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6V2ViUGFnZVByb3h5TWFwOjpiZWdpbik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6V2ViUGFnZVByb3h5TWFwOjplbmQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OldlYlBhZ2VQcm94eU1hcDo6Z2V0KToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpXZWJQYWdlUHJveHlNYXA6OmNvbnRh
aW5zIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpXZWJQYWdlUHJv
eHlNYXA6OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6
OldlYlBhZ2VQcm94eU1hcDo6c2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5
OjpXZWJQYWdlUHJveHlNYXA6OnRha2UpOgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9j
ZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6c2V0RnJlZXphYmxlKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlByb2Nlc3MubWVzc2FnZXMuaW46CisKIDIwMTktMDMtMjAgIFlvdWVubiBGYWJsZXQgIDx5b3Vl
bm5AYXBwbGUuY29tPgogCiAgICAgICAgIEhhdmUgc21hbGxlciBkZWZhdWx0IHF1b3RhcyBmb3Ig
dGhpcmQgcGFydHkgZnJhbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvYm1hbGxvYy9DaGFuZ2VMb2cKaW5kZXggZDJmYmJjNGMxYmJhNjg2ZmVkOGRiMjA0
NDAyZTM0NDE2YzRkN2JhZi4uN2NhYzdjNGJjM2ViZTBlNmU2NTkzMGJiZDVjN2FmZWQ0OWExODEz
ZSAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9ibWFs
bG9jL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE5LTAzLTIxICBCcmFkeSBFaWRzb24g
IDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBDZXJ0YWluIFdlYlByb2Nlc3NlcyBzaG91
bGQgb3B0LW91dCBvZiB0aGUgZnJlZXplci4KKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQyODQ2
MTM5PiBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NjA2Mgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYm1hbGxv
Yy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJtYWxsb2MvZGFyd2luL01l
bW9yeVN0YXR1c1NQSS5oOgorCiAyMDE5LTAzLTE5ICBNaWNoYWVsIENhdGFuemFybyAgPG1jYXRh
bnphcm9AaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBmaXggLVdmb3JtYXQgd2Fy
bmluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5
LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKaW5kZXgg
MmY0NDhkYzY4NWRiNmRhZWU5N2Q2NTc0NjY3MWYxYTMxODA0YjUwYy4uYmZjZjA4ODJiMWZhZjhj
ZThjYzEyMjhmNmIxMDMzNGQ0NTM0OTA3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUHJveHkuY3BwCkBAIC0xMTUsMTAgKzExNSwxMCBAQCB1aW50NjRfdCBXZWJQcm9j
ZXNzUHJveHk6OmdlbmVyYXRlUGFnZUlEKCkKICAgICByZXR1cm4gKyt1bmlxdWVQYWdlSUQ7CiB9
CiAKLXN0YXRpYyBXZWJQcm9jZXNzUHJveHk6OldlYlBhZ2VQcm94eU1hcCYgZ2xvYmFsUGFnZU1h
cCgpCitzdGF0aWMgV2ViUHJvY2Vzc1Byb3h5OjpXZWJQYWdlUHJveHlNYXA6Ok1hcFR5cGUmIGds
b2JhbFBhZ2VNYXAoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWRPckNoZWNrRGlzYWJsZWQo
KSk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFdlYlByb2Nlc3NQcm94eTo6V2ViUGFnZVBy
b3h5TWFwPiBwYWdlTWFwOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxXZWJQcm9jZXNzUHJv
eHk6OldlYlBhZ2VQcm94eU1hcDo6TWFwVHlwZT4gcGFnZU1hcDsKICAgICByZXR1cm4gcGFnZU1h
cDsKIH0KIApAQCAtMTM2LDYgKzEzNiw3IEBAIFdlYlByb2Nlc3NQcm94eTo6V2ViUHJvY2Vzc1By
b3h5KFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCwgV2Vic2l0ZURhdGFTdG9yZSYKICAgICAs
IG1fYmFja2dyb3VuZFJlc3BvbnNpdmVuZXNzVGltZXIoKnRoaXMpCiAgICAgLCBtX3Byb2Nlc3NQ
b29sKHByb2Nlc3NQb29sLCBpc1ByZXdhcm1lZCA9PSBJc1ByZXdhcm1lZDo6WWVzID8gSXNXZWFr
OjpZZXMgOiBJc1dlYWs6Ok5vKQogICAgICwgbV9tYXlIYXZlVW5pdmVyc2FsRmlsZVJlYWRTYW5k
Ym94RXh0ZW5zaW9uKGZhbHNlKQorICAgICwgbV9wYWdlTWFwKCp0aGlzKQogICAgICwgbV9udW1i
ZXJPZlRpbWVzU3VkZGVuVGVybWluYXRpb25XYXNEaXNhYmxlZCgwKQogICAgICwgbV90aHJvdHRs
ZXIoKnRoaXMsIHByb2Nlc3NQb29sLnNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSkK
ICAgICAsIG1faXNSZXNwb25zaXZlKE5vT3JNYXliZTo6TWF5YmUpCkBAIC0xODcsNiArMTg4LDE4
IEBAIFdlYlByb2Nlc3NQcm94eTo6fldlYlByb2Nlc3NQcm94eSgpCiAjZW5kaWYKIH0KIAordm9p
ZCBXZWJQcm9jZXNzUHJveHk6OnZhbGlkYXRlRnJlZXplclN0YXR1cygpCit7CisjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKKyAgICBib29sIHZhbHVlID0gIW1faXNQcmV3YXJtZWQgJiYgIW1faXNJ
blByb2Nlc3NDYWNoZSAmJiAhbV9wYWdlTWFwLmlzRW1wdHkoKTsKKyAgICBpZiAobV9jdXJyZW50
SXNGcmVlemFibGVWYWx1ZSAhPSBXVEY6Om51bGxvcHQgJiYgbV9jdXJyZW50SXNGcmVlemFibGVW
YWx1ZSA9PSB2YWx1ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jdXJyZW50SXNGcmVlemFi
bGVWYWx1ZSA9IHZhbHVlOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNldEZyZWV6
YWJsZSh2YWx1ZSksIDApOworI2VuZGlmCit9CisKIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpzZXRJ
c0luUHJvY2Vzc0NhY2hlKGJvb2wgdmFsdWUpCiB7CiAgICAgQVNTRVJUKG1faXNJblByb2Nlc3ND
YWNoZSAhPSB2YWx1ZSk7CkBAIC0yMDIsNiArMjE1LDggQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6
OnNldElzSW5Qcm9jZXNzQ2FjaGUoYm9vbCB2YWx1ZSkKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bV9wcm9jZXNzUG9vbCk7CiAgICAgICAgIG1fcHJvY2Vzc1Bvb2wuc2V0SXNXZWFrKElzV2Vhazo6
Tm8pOwogICAgIH0KKyAgICAKKyAgICB2YWxpZGF0ZUZyZWV6ZXJTdGF0dXMoKTsKIH0KIAogdm9p
ZCBXZWJQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMoUHJvY2Vzc0xhdW5jaGVyOjpMYXVu
Y2hPcHRpb25zJiBsYXVuY2hPcHRpb25zKQpAQCAtMzc5LDYgKzM5NCw4IEBAIHZvaWQgV2ViUHJv
Y2Vzc1Byb3h5OjptYXJrSXNOb0xvbmdlckluUHJld2FybWVkUG9vbCgpCiAgICAgUkVMRUFTRV9B
U1NFUlQobV9wcm9jZXNzUG9vbCk7CiAgICAgbV9wcm9jZXNzUG9vbC5zZXRJc1dlYWsoSXNXZWFr
OjpObyk7CiAKKyAgICB2YWxpZGF0ZUZyZWV6ZXJTdGF0dXMoKTsKKwogICAgIHNlbmQoTWVzc2Fn
ZXM6OldlYlByb2Nlc3M6Ok1hcmtJc05vTG9uZ2VyUHJld2FybWVkKCksIDApOwogfQogCkBAIC03
NzIsNiArNzg5LDggQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyhQ
cm9jZXNzTGF1bmNoZXIqIGxhdW5jaGVyLCBJUEM6OkNvbm5lY3QKIAogICAgIHVuYmxvY2tBY2Nl
c3NpYmlsaXR5U2VydmVySWZOZWVkZWQoKTsKICNlbmRpZgorCisgICAgdmFsaWRhdGVGcmVlemVy
U3RhdHVzKCk7CiB9CiAKIFdlYkZyYW1lUHJveHkqIFdlYlByb2Nlc3NQcm94eTo6d2ViRnJhbWUo
dWludDY0X3QgZnJhbWVJRCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlByb2Nlc3NQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vz
c1Byb3h5LmgKaW5kZXggMjc2NDkwZGUzNmM5ZDhiYWFlOWI2ZDFlNzg4NGEzZGU0NDljNjk0Yi4u
NDc3ZWJhNWVlMWMyZmRlNTk2YWRhMDQ2NjI2MjE4M2RjOThiZjBlNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgKQEAgLTk2LDcgKzk2LDYgQEAgZW51bSBjbGFz
cyBBbGxvd1Byb2Nlc3NDYWNoaW5nIHsgTm8sIFllcyB9OwogY2xhc3MgV2ViUHJvY2Vzc1Byb3h5
IDogcHVibGljIEF1eGlsaWFyeVByb2Nlc3NQcm94eSwgcHVibGljIFJlc3BvbnNpdmVuZXNzVGlt
ZXI6OkNsaWVudCwgcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFdlYlByb2Nlc3NQcm94eT4s
IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxXZWJQcm9jZXNzUHJveHk+LCBwcml2YXRlIFByb2Nlc3NU
aHJvdHRsZXJDbGllbnQgewogcHVibGljOgogICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50NjRfdCwg
UmVmUHRyPFdlYkZyYW1lUHJveHk+PiBXZWJGcmFtZVByb3h5TWFwOwotICAgIHR5cGVkZWYgSGFz
aE1hcDx1aW50NjRfdCwgV2ViUGFnZVByb3h5Kj4gV2ViUGFnZVByb3h5TWFwOwogICAgIHR5cGVk
ZWYgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPEFQSTo6VXNlckluaXRpYXRlZEFjdGlvbj4+IFVz
ZXJJbml0aWF0ZWRBY3Rpb25NYXA7CiAKICAgICBlbnVtIGNsYXNzIElzUHJld2FybWVkIHsKQEAg
LTEzNyw2ICsxMzYsNDUgQEAgcHVibGljOgogICAgIHZvaWQgYWRkUHJvdmlzaW9uYWxQYWdlUHJv
eHkoUHJvdmlzaW9uYWxQYWdlUHJveHkmIHByb3Zpc2lvbmFsUGFnZSkgeyBBU1NFUlQoIW1fcHJv
dmlzaW9uYWxQYWdlcy5jb250YWlucygmcHJvdmlzaW9uYWxQYWdlKSk7IG1fcHJvdmlzaW9uYWxQ
YWdlcy5hZGQoJnByb3Zpc2lvbmFsUGFnZSk7IH0KICAgICB2b2lkIHJlbW92ZVByb3Zpc2lvbmFs
UGFnZVByb3h5KFByb3Zpc2lvbmFsUGFnZVByb3h5JiBwcm92aXNpb25hbFBhZ2UpIHsgQVNTRVJU
KG1fcHJvdmlzaW9uYWxQYWdlcy5jb250YWlucygmcHJvdmlzaW9uYWxQYWdlKSk7IG1fcHJvdmlz
aW9uYWxQYWdlcy5yZW1vdmUoJnByb3Zpc2lvbmFsUGFnZSk7IH0KIAorICAgIGNsYXNzIFdlYlBh
Z2VQcm94eU1hcCB7CisgICAgcHVibGljOgorICAgICAgICBXZWJQYWdlUHJveHlNYXAoV2ViUHJv
Y2Vzc1Byb3h5JiBwcm94eSkKKyAgICAgICAgICAgIDogbV9wcm94eShwcm94eSkKKyAgICAgICAg
eworICAgICAgICB9CisKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBXZWJQYWdl
UHJveHkqPiBNYXBUeXBlOworICAgICAgICB1c2luZyBWYWx1ZXNDb25zdEl0ZXJhdG9yUmFuZ2Ug
PSBNYXBUeXBlOjpWYWx1ZXNDb25zdEl0ZXJhdG9yUmFuZ2U7CisKKyAgICAgICAgYXV0byBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9CisgICAgICAgIGF1dG8gdmFsdWVzKCkg
eyByZXR1cm4gbV9tYXAudmFsdWVzKCk7IH0KKyAgICAgICAgYXV0byB2YWx1ZXMoKSBjb25zdCB7
IHJldHVybiBtX21hcC52YWx1ZXMoKTsgfQorICAgICAgICBhdXRvIGJlZ2luKCkgeyByZXR1cm4g
bV9tYXAuYmVnaW4oKTsgfQorICAgICAgICBhdXRvIGVuZCgpIHsgcmV0dXJuIG1fbWFwLmVuZCgp
OyB9CisgICAgICAgIGF1dG8gZ2V0KHVpbnQ2NF90IGtleSkgeyByZXR1cm4gbV9tYXAuZ2V0KGtl
eSk7IH0KKyAgICAgICAgYXV0byBjb250YWlucyh1aW50NjRfdCBrZXkpIGNvbnN0IHsgcmV0dXJu
IG1fbWFwLmNvbnRhaW5zKGtleSk7IH0KKyAgICAgICAgYXV0byBpc0VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXAuaXNFbXB0eSgpOyB9CisKKyAgICAgICAgYXV0byBzZXQodWludDY0X3Qga2V5
LCBXZWJQYWdlUHJveHkqIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvIHJlc3Vs
dCA9IG1fbWFwLnNldChrZXksIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcHJveHkudmFsaWRhdGVG
cmVlemVyU3RhdHVzKCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisK
KyAgICAgICAgYXV0byB0YWtlKHVpbnQ2NF90IGtleSkKKyAgICAgICAgeworICAgICAgICAgICAg
YXV0byByZXN1bHQgPSBtX21hcC50YWtlKGtleSk7CisgICAgICAgICAgICBtX3Byb3h5LnZhbGlk
YXRlRnJlZXplclN0YXR1cygpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
fQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgV2ViUHJvY2Vzc1Byb3h5JiBtX3Byb3h5OworICAg
ICAgICBNYXBUeXBlIG1fbWFwOworICAgIH07CisKKyAgICAKICAgICB0eXBlbmFtZSBXZWJQYWdl
UHJveHlNYXA6OlZhbHVlc0NvbnN0SXRlcmF0b3JSYW5nZSBwYWdlcygpIGNvbnN0IHsgcmV0dXJu
IG1fcGFnZU1hcC52YWx1ZXMoKTsgfQogICAgIHVuc2lnbmVkIHBhZ2VDb3VudCgpIGNvbnN0IHsg
cmV0dXJuIG1fcGFnZU1hcC5zaXplKCk7IH0KICAgICB1bnNpZ25lZCBwcm92aXNpb25hbFBhZ2VD
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvdmlzaW9uYWxQYWdlcy5zaXplKCk7IH0KQEAgLTMy
MSw2ICszNTksOCBAQCBwcm90ZWN0ZWQ6CiAKICAgICBib29sIGlzSklURW5hYmxlZCgpIGNvbnN0
IGZpbmFsOwogCisgICAgdm9pZCB2YWxpZGF0ZUZyZWV6ZXJTdGF0dXMoKTsKKwogcHJpdmF0ZToK
ICAgICAvLyBJUEMgbWVzc2FnZSBoYW5kbGVycy4KICAgICB2b2lkIHVwZGF0ZUJhY2tGb3J3YXJk
SXRlbShjb25zdCBCYWNrRm9yd2FyZExpc3RJdGVtU3RhdGUmKTsKQEAgLTQ2OSw2ICs1MDksNyBA
QCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fc3VzcGVuZGVkUGFnZUNvdW50IHsgMCB9OwogICAg
IGJvb2wgbV9oYXNDb21taXR0ZWRBbnlQcm92aXNpb25hbExvYWRzIHsgZmFsc2UgfTsKICAgICBi
b29sIG1faXNQcmV3YXJtZWQ7CisgICAgT3B0aW9uYWw8Ym9vbD4gbV9jdXJyZW50SXNGcmVlemFi
bGVWYWx1ZTsKIAogI2lmIFBMQVRGT1JNKFdBVENIT1MpCiAgICAgUHJvY2Vzc1Rocm90dGxlcjo6
QmFja2dyb3VuZEFjdGl2aXR5VG9rZW4gbV9iYWNrZ3JvdW5kQWN0aXZpdHlUb2tlbkZvckZ1bGxz
Y3JlZW5Gb3JtQ29udHJvbHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAK
aW5kZXggOWZkYmMwYjUwNWU0M2IwODdmOTIxZjY0MWRlOTVkYTIyZWUwOTRiYS4uN2UyNTk1MmNl
YTZiOTQ1MmU0NWI3ZmU2ZDg4YTNhNTM0OWJjY2M2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQcm9jZXNzLmNwcApAQCAtMTQ5LDYgKzE0OSwxMCBAQAogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL1JlbW90ZUluc3BlY3Rvci5oPgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQorI2luY2x1ZGUgPGJtYWxsb2MvTWVtb3J5U3RhdHVzU1BJLmg+CisjZW5kaWYKKwogLy8g
VGhpcyBzaG91bGQgYmUgbGVzcyB0aGFuIHBsdWdJbkF1dG9TdGFydEV4cGlyYXRpb25UaW1lVGhy
ZXNob2xkIGluIFBsdWdJbkF1dG9TdGFydFByb3ZpZGVyLgogc3RhdGljIGNvbnN0IFNlY29uZHMg
cGx1Z0luQXV0b1N0YXJ0RXhwaXJhdGlvblRpbWVVcGRhdGVUaHJlc2hvbGQgeyAyOSAqIDI0ICog
NjAgKiA2MCB9OwogCkBAIC0xODY3LDYgKzE4NzEsMTQgQEAgdm9pZCBXZWJQcm9jZXNzOjpjbGVh
ckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVzdGluZygpCiAgICAgUGxhdGZvcm1LZXlib2FyZEV2
ZW50OjpzZXRDdXJyZW50TW9kaWZpZXJTdGF0ZSh7IH0pOwogfQogCit2b2lkIFdlYlByb2Nlc3M6
OnNldEZyZWV6YWJsZShib29sIGZyZWV6YWJsZSkKK3sKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQorICAgIGF1dG8gcmVzdWx0ID0gbWVtb3J5c3RhdHVzX2NvbnRyb2woTUVNT1JZU1RBVFVTX0NN
RF9TRVRfUFJPQ0VTU19JU19GUkVFWkFCTEUsIGdldHBpZCgpLCBmcmVlemFibGUgPyAxIDogMCwg
bnVsbHB0ciwgMCk7CisgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsICFyZXN1bHQpOworI2VuZGlm
Cit9CisKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogdm9pZCBXZWJQcm9jZXNzOjp1bmJsb2Nr
QWNjZXNzaWJpbGl0eVNlcnZlcihjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmIGhhbmRs
ZSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCmluZGV4IDcyZmUyMTk1MDZl
YTU0OTZjYWJmNDBjZWQ5NTljYTY1MzQ3ZWVhM2EuLjAwNDNhNTU2NWQ0MDMwOTE3MTcxNDQxMzY1
MDY4MDhiMDA3OWZlZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
cm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaApAQCAt
NDI2LDYgKzQyNiw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgIHZvaWQgY2xlYXJDdXJyZW50
TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoKTsKKyAgICB2b2lkIHNldEZyZWV6YWJsZShib29sKTsK
IAogICAgIFJlZlB0cjxXZWJDb25uZWN0aW9uVG9VSVByb2Nlc3M+IG1fd2ViQ29ubmVjdGlvbjsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MubWVzc2Fn
ZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgpp
bmRleCA0NWZlZDQ2OWYyMDk5M2JjYzM2MmI0ZWNkZWE5Njc3ZThlMzU0NGY2Li44MDQ1MzkxYTA5
ZTIxNTljZDE5NDQ1NGQyYTk4NGE0M2IxZmQ3MzBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgpAQCAtMTYxLDQgKzE2MSw2IEBAIG1lc3Nh
Z2VzIC0+IFdlYlByb2Nlc3MgTGVnYWN5UmVjZWl2ZXIgewogI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCiAgICAgVW5ibG9ja0FjY2Vzc2liaWxpdHlTZXJ2ZXIoV2ViS2l0OjpTYW5kYm94RXh0ZW5z
aW9uOjpIYW5kbGUgaGFuZGxlKQogI2VuZGlmCisKKyAgICBTZXRGcmVlemFibGUoYm9vbCBmcmVl
emFibGUpCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggNTg0MGY1MzJjOTY4ZDhkMDRjZmU2NDZiMzVkOWZjNTI5MDMyODNmZS4u
MjMzODA2ZWYwMzQxN2EyYmNlM2FmNjZlNGRlZDg1ZmIwMjdiNWZhMCAxMDA2NDQKLS0tIGEvU291
cmNlL2JtYWxsb2MvYm1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTMxLDcgKzEz
MSw3IEBACiAJCTQ0MjZFMjgwMUM4MzhFRTAwMDhFQjA0MiAvKiBMb2dnaW5nLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0MjZFMjdFMUM4MzhFRTAw
MDhFQjA0MiAvKiBMb2dnaW5nLmNwcCAqLzsgfTsKIAkJNDQyNkUyODExQzgzOEVFMDAwOEVCMDQy
IC8qIExvZ2dpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQ0MjZFMjdGMUM4MzhFRTAwMDhFQjA0MiAvKiBMb2dnaW5nLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDQyNkUyODMxQzgzOTU0NzAwOEVC
MDQyIC8qIEJTb2Z0TGlua2luZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDQyNkUyODIxQzgzOTU0NzAwOEVCMDQyIC8qIEJTb2Z0TGlua2luZy5oICov
OyB9OwotCQk1MkY0NzI0OTIxMEJBMzAyMDBCNzMwQkIgLyogTWVtb3J5U3RhdHVzU1BJLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkY0NzI0ODIxMEJB
MkY1MDBCNzMwQkIgLyogTWVtb3J5U3RhdHVzU1BJLmggKi87IH07CisJCTUyRjQ3MjQ5MjEwQkEz
MDIwMEI3MzBCQiAvKiBNZW1vcnlTdGF0dXNTUEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjQ3MjQ4MjEwQkEyRjUwMEI3MzBCQiAvKiBNZW1vcnlT
dGF0dXNTUEkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk2NTQzRERCNDIwRUVBRUYzMDAzQjIzRDggLyogUGVyVGhyZWFkLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NDNEREIzMjBFRUFFRjMwMDNC
MjNEOCAvKiBQZXJUaHJlYWQuY3BwICovOyB9OwogCQk2NTk5QzVDQzFFQzNGMTU5MDBBMkY3QkIg
LyogQXZhaWxhYmxlTWVtb3J5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDY1OTlDNUNBMUVDM0YxNTkwMEEyRjdCQiAvKiBBdmFpbGFibGVNZW1vcnku
Y3BwICovOyB9OwogCQk2NTk5QzVDRDFFQzNGMTU5MDBBMkY3QkIgLyogQXZhaWxhYmxlTWVtb3J5
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTk5QzVD
QjFFQzNGMTU5MDBBMkY3QkIgLyogQXZhaWxhYmxlTWVtb3J5LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvZGFyd2luL01lbW9yeVN0YXR1c1NQSS5oIGIvU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9kYXJ3aW4vTWVtb3J5U3RhdHVzU1BJLmgKaW5kZXggNDY5ZmEwMzIyMWVmMDhiZGJhY2U5OGM2
MGZjNzk4NDc5ZWZlOTU2OC4uNjM4MzU0NGU5ODBlNWI5M2JiZTE4ODU2YjVhMTA1MWQzNzY5NDI3
MiAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9kYXJ3aW4vTWVtb3J5U3RhdHVz
U1BJLmgKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9kYXJ3aW4vTWVtb3J5U3RhdHVzU1BJ
LmgKQEAgLTQzLDYgKzQzLDggQEAgdHlwZWRlZiBzdHJ1Y3QgbWVtb3J5c3RhdHVzX21lbWxpbWl0
X3Byb3BlcnRpZXMgewogfSBtZW1vcnlzdGF0dXNfbWVtbGltaXRfcHJvcGVydGllc190OwogCiAj
ZGVmaW5lIE1FTU9SWVNUQVRVU19DTURfR0VUX01FTUxJTUlUX1BST1BFUlRJRVMgOAorI2RlZmlu
ZSBNRU1PUllTVEFUVVNfQ01EX1NFVF9QUk9DRVNTX0lTX0ZSRUVaQUJMRSAxOAorI2RlZmluZSBN
RU1PUllTVEFUVVNfQ01EX0dFVF9QUk9DRVNTX0lTX0ZSRUVaQUJMRSAxOQogCiB9CiAjZW5kaWYg
Ly8gX19oYXNfaW5jbHVkZSg8U3lzdGVtL3N5cy9rZXJuX21lbW9yeXN0YXR1cy5oPikK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>365647</attachid>
            <date>2019-03-21 16:54:43 -0700</date>
            <delta_ts>2019-03-21 20:00:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-196062-20190321165443.patch</filename>
            <type>text/plain</type>
            <size>13418</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQzMjQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGUzY2Y5NWVjOTNlYmI4MTg0
MDljZTM4NTFlYWYxYjFjNzY2NDMzNjkuLmQwOTdiN2VlODMzOGE3ZDhjNmVkZTE0YzUyZDE2ZjRm
NWM1NDA1MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIwMTktMDMtMjEgIEJyYWR5IEVp
ZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIENlcnRhaW4gV2ViUHJvY2Vzc2Vz
IHNob3VsZCBvcHQtb3V0IG9mIHRoZSBmcmVlemVyLgorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
NDI4NDYxMzk+IGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2
MDYyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2Vi
UHJvY2Vzc2VzIHNob3VsZCBvcHQtaW4gYW5kIG9wdC1vdXQgb2YgdGhlIGZyZWV6ZXIgYXMgaXMg
YXBwcm9wcmlhdGUuCisgICAgICAgIEJ5IGRlZmF1bHQgYSBXZWJQcm9jZXNzIGlzIGZyZWV6ZXIg
ZWxpZ2libGUuCisgICAgICAgIElmIGFueSBvZiB0aGUgZm9sbG93aW5nIGJlY29tZSB0cnVlIHRo
ZW4gaXQgc2hvdWxkIGJlY29tZSBpbmVsaWdpYmxlOgorICAgICAgICAtIFRoZSBXZWJQcm9jZXNz
IGlzIGEgcHJlLXdhcm1lZCBwcm9jZXNzLgorICAgICAgICAtIFRoZSBXZWJQcm9jZXNzIGlzIGlu
IHRoZSBwcm9jZXNzIGNhY2hlLgorICAgICAgICAtIFRoZSBXZWJQcm9jZXNzIGlzIG5vdCBhY3Rp
dmVseSBob3N0aW5nIGFueSB3ZWIgcGFnZXMgKGUuZy4gaXQgb25seSBoYXMgc3VzcGVuZGluZyB3
ZWIgcGFnZXMpCisKKyAgICAgICAgVGhlIG1vc3QgY29tcGxpY2F0ZWQgcGFydCBvZiB0aGUgYWJv
dmUgaXMgZ3VhcmFudGVlaW5nIHRoYXQgYW55IG9wZXJhdGlvbiB0aGF0IGNoYW5nZXMKKyAgICAg
ICAgdGhlIGFjdGl2ZSBwYWdlcyBob3N0ZWQgYnkgdGhlIHByb2Nlc3MgY2F1c2VzIGEgcmVjYWxj
dWxhdGlvbiBvZiB0aGUgZnJlZXplciBvcHQtaW4gc3RhdGUuCisKKyAgICAgICAgVG8gZG8gdGhh
dCB0aGlzIHJlcGxhY2VzIHRoZSBiYXNpYyBXZWJQYWdlUHJveHlNYXAgd2l0aCBhIGN1c3RvbSBj
bGFzcy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpnbG9iYWxQYWdlTWFwKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1By
b3h5OjpXZWJQcm9jZXNzUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6
OnZhbGlkYXRlRnJlZXplclN0YXR1cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94
eTo6c2V0SXNJblByb2Nlc3NDYWNoZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94
eTo6bWFya0lzTm9Mb25nZXJJblByZXdhcm1lZFBvb2wpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgICogVUlQcm9jZXNzL1dl
YlByb2Nlc3NQcm94eS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OldlYlBh
Z2VQcm94eU1hcDo6V2ViUGFnZVByb3h5TWFwKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Byb3h5OjpXZWJQYWdlUHJveHlNYXA6OnNpemUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUHJveHk6OldlYlBhZ2VQcm94eU1hcDo6dmFsdWVzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Byb3h5OjpXZWJQYWdlUHJveHlNYXA6OnZhbHVlcyBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6V2ViUGFnZVByb3h5TWFwOjpiZWdpbik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6V2ViUGFnZVByb3h5TWFwOjplbmQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OldlYlBhZ2VQcm94eU1hcDo6Z2V0KToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpXZWJQYWdlUHJveHlNYXA6OmNvbnRh
aW5zIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpXZWJQYWdlUHJv
eHlNYXA6OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6
OldlYlBhZ2VQcm94eU1hcDo6c2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5
OjpXZWJQYWdlUHJveHlNYXA6OnRha2UpOgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9j
ZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6c2V0RnJlZXphYmxlKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlByb2Nlc3MubWVzc2FnZXMuaW46CisKIDIwMTktMDMtMjAgIFlvdWVubiBGYWJsZXQgIDx5b3Vl
bm5AYXBwbGUuY29tPgogCiAgICAgICAgIEhhdmUgc21hbGxlciBkZWZhdWx0IHF1b3RhcyBmb3Ig
dGhpcmQgcGFydHkgZnJhbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvYm1hbGxvYy9DaGFuZ2VMb2cKaW5kZXggZDJmYmJjNGMxYmJhNjg2ZmVkOGRiMjA0
NDAyZTM0NDE2YzRkN2JhZi4uN2NhYzdjNGJjM2ViZTBlNmU2NTkzMGJiZDVjN2FmZWQ0OWExODEz
ZSAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9ibWFs
bG9jL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE5LTAzLTIxICBCcmFkeSBFaWRzb24g
IDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBDZXJ0YWluIFdlYlByb2Nlc3NlcyBzaG91
bGQgb3B0LW91dCBvZiB0aGUgZnJlZXplci4KKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQyODQ2
MTM5PiBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NjA2Mgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYm1hbGxv
Yy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJtYWxsb2MvZGFyd2luL01l
bW9yeVN0YXR1c1NQSS5oOgorCiAyMDE5LTAzLTE5ICBNaWNoYWVsIENhdGFuemFybyAgPG1jYXRh
bnphcm9AaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBmaXggLVdmb3JtYXQgd2Fy
bmluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5
LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKaW5kZXgg
MmY0NDhkYzY4NWRiNmRhZWU5N2Q2NTc0NjY3MWYxYTMxODA0YjUwYy4uZDRkOWY2OGQzNzVjMjc2
NmJkYmNkZmZiNWQ1ZTMwNTRlMzYxNzQyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUHJveHkuY3BwCkBAIC0xMTUsMTAgKzExNSwxMCBAQCB1aW50NjRfdCBXZWJQcm9j
ZXNzUHJveHk6OmdlbmVyYXRlUGFnZUlEKCkKICAgICByZXR1cm4gKyt1bmlxdWVQYWdlSUQ7CiB9
CiAKLXN0YXRpYyBXZWJQcm9jZXNzUHJveHk6OldlYlBhZ2VQcm94eU1hcCYgZ2xvYmFsUGFnZU1h
cCgpCitzdGF0aWMgV2ViUHJvY2Vzc1Byb3h5OjpXZWJQYWdlUHJveHlNYXA6Ok1hcFR5cGUmIGds
b2JhbFBhZ2VNYXAoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWRPckNoZWNrRGlzYWJsZWQo
KSk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFdlYlByb2Nlc3NQcm94eTo6V2ViUGFnZVBy
b3h5TWFwPiBwYWdlTWFwOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxXZWJQcm9jZXNzUHJv
eHk6OldlYlBhZ2VQcm94eU1hcDo6TWFwVHlwZT4gcGFnZU1hcDsKICAgICByZXR1cm4gcGFnZU1h
cDsKIH0KIApAQCAtMTM2LDYgKzEzNiw3IEBAIFdlYlByb2Nlc3NQcm94eTo6V2ViUHJvY2Vzc1By
b3h5KFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCwgV2Vic2l0ZURhdGFTdG9yZSYKICAgICAs
IG1fYmFja2dyb3VuZFJlc3BvbnNpdmVuZXNzVGltZXIoKnRoaXMpCiAgICAgLCBtX3Byb2Nlc3NQ
b29sKHByb2Nlc3NQb29sLCBpc1ByZXdhcm1lZCA9PSBJc1ByZXdhcm1lZDo6WWVzID8gSXNXZWFr
OjpZZXMgOiBJc1dlYWs6Ok5vKQogICAgICwgbV9tYXlIYXZlVW5pdmVyc2FsRmlsZVJlYWRTYW5k
Ym94RXh0ZW5zaW9uKGZhbHNlKQorICAgICwgbV9wYWdlTWFwKCp0aGlzKQogICAgICwgbV9udW1i
ZXJPZlRpbWVzU3VkZGVuVGVybWluYXRpb25XYXNEaXNhYmxlZCgwKQogICAgICwgbV90aHJvdHRs
ZXIoKnRoaXMsIHByb2Nlc3NQb29sLnNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSkK
ICAgICAsIG1faXNSZXNwb25zaXZlKE5vT3JNYXliZTo6TWF5YmUpCkBAIC0xODcsNiArMTg4LDE4
IEBAIFdlYlByb2Nlc3NQcm94eTo6fldlYlByb2Nlc3NQcm94eSgpCiAjZW5kaWYKIH0KIAordm9p
ZCBXZWJQcm9jZXNzUHJveHk6OnZhbGlkYXRlRnJlZXplclN0YXR1cygpCit7CisjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKKyAgICBib29sIHZhbHVlID0gIW1faXNQcmV3YXJtZWQgJiYgIW1faXNJ
blByb2Nlc3NDYWNoZSAmJiAhbV9wYWdlTWFwLmlzRW1wdHkoKSAmJiAhaXNTZXJ2aWNlV29ya2Vy
UHJvY2VzcygpOworICAgIGlmIChtX2N1cnJlbnRJc0ZyZWV6YWJsZVZhbHVlICE9IFdURjo6bnVs
bG9wdCAmJiBtX2N1cnJlbnRJc0ZyZWV6YWJsZVZhbHVlID09IHZhbHVlKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX2N1cnJlbnRJc0ZyZWV6YWJsZVZhbHVlID0gdmFsdWU7CisgICAgc2VuZChN
ZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0RnJlZXphYmxlKHZhbHVlKSwgMCk7CisjZW5kaWYKK30K
Kwogdm9pZCBXZWJQcm9jZXNzUHJveHk6OnNldElzSW5Qcm9jZXNzQ2FjaGUoYm9vbCB2YWx1ZSkK
IHsKICAgICBBU1NFUlQobV9pc0luUHJvY2Vzc0NhY2hlICE9IHZhbHVlKTsKQEAgLTIwMiw2ICsy
MTUsOCBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6c2V0SXNJblByb2Nlc3NDYWNoZShib29sIHZh
bHVlKQogICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3Byb2Nlc3NQb29sKTsKICAgICAgICAgbV9w
cm9jZXNzUG9vbC5zZXRJc1dlYWsoSXNXZWFrOjpObyk7CiAgICAgfQorICAgIAorICAgIHZhbGlk
YXRlRnJlZXplclN0YXR1cygpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQcm94eTo6Z2V0TGF1bmNo
T3B0aW9ucyhQcm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmIGxhdW5jaE9wdGlvbnMpCkBA
IC0zNzksNiArMzk0LDggQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6Om1hcmtJc05vTG9uZ2VySW5Q
cmV3YXJtZWRQb29sKCkKICAgICBSRUxFQVNFX0FTU0VSVChtX3Byb2Nlc3NQb29sKTsKICAgICBt
X3Byb2Nlc3NQb29sLnNldElzV2VhayhJc1dlYWs6Ok5vKTsKIAorICAgIHZhbGlkYXRlRnJlZXpl
clN0YXR1cygpOworCiAgICAgc2VuZChNZXNzYWdlczo6V2ViUHJvY2Vzczo6TWFya0lzTm9Mb25n
ZXJQcmV3YXJtZWQoKSwgMCk7CiB9CiAKQEAgLTc3Miw2ICs3ODksOCBAQCB2b2lkIFdlYlByb2Nl
c3NQcm94eTo6ZGlkRmluaXNoTGF1bmNoaW5nKFByb2Nlc3NMYXVuY2hlciogbGF1bmNoZXIsIElQ
Qzo6Q29ubmVjdAogCiAgICAgdW5ibG9ja0FjY2Vzc2liaWxpdHlTZXJ2ZXJJZk5lZWRlZCgpOwog
I2VuZGlmCisKKyAgICB2YWxpZGF0ZUZyZWV6ZXJTdGF0dXMoKTsKIH0KIAogV2ViRnJhbWVQcm94
eSogV2ViUHJvY2Vzc1Byb3h5Ojp3ZWJGcmFtZSh1aW50NjRfdCBmcmFtZUlEKSBjb25zdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaAppbmRleCAyNzY0OTBkZTM2Yzlk
OGJhYWU5YjZkMWU3ODg0YTNkZTQ0OWM2OTRiLi40NzdlYmE1ZWUxYzJmZGU1OTZhZGEwNDY2MjYy
MTgzZGM5OGJmMGU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9j
ZXNzUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHku
aApAQCAtOTYsNyArOTYsNiBAQCBlbnVtIGNsYXNzIEFsbG93UHJvY2Vzc0NhY2hpbmcgeyBObywg
WWVzIH07CiBjbGFzcyBXZWJQcm9jZXNzUHJveHkgOiBwdWJsaWMgQXV4aWxpYXJ5UHJvY2Vzc1By
b3h5LCBwdWJsaWMgUmVzcG9uc2l2ZW5lc3NUaW1lcjo6Q2xpZW50LCBwdWJsaWMgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQ8V2ViUHJvY2Vzc1Byb3h5PiwgcHVibGljIENhbk1ha2VXZWFrUHRyPFdlYlBy
b2Nlc3NQcm94eT4sIHByaXZhdGUgUHJvY2Vzc1Rocm90dGxlckNsaWVudCB7CiBwdWJsaWM6CiAg
ICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViRnJhbWVQcm94eT4+IFdlYkZy
YW1lUHJveHlNYXA7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBXZWJQYWdlUHJveHkq
PiBXZWJQYWdlUHJveHlNYXA7CiAgICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8
QVBJOjpVc2VySW5pdGlhdGVkQWN0aW9uPj4gVXNlckluaXRpYXRlZEFjdGlvbk1hcDsKIAogICAg
IGVudW0gY2xhc3MgSXNQcmV3YXJtZWQgewpAQCAtMTM3LDYgKzEzNiw0NSBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBhZGRQcm92aXNpb25hbFBhZ2VQcm94eShQcm92aXNpb25hbFBhZ2VQcm94eSYgcHJv
dmlzaW9uYWxQYWdlKSB7IEFTU0VSVCghbV9wcm92aXNpb25hbFBhZ2VzLmNvbnRhaW5zKCZwcm92
aXNpb25hbFBhZ2UpKTsgbV9wcm92aXNpb25hbFBhZ2VzLmFkZCgmcHJvdmlzaW9uYWxQYWdlKTsg
fQogICAgIHZvaWQgcmVtb3ZlUHJvdmlzaW9uYWxQYWdlUHJveHkoUHJvdmlzaW9uYWxQYWdlUHJv
eHkmIHByb3Zpc2lvbmFsUGFnZSkgeyBBU1NFUlQobV9wcm92aXNpb25hbFBhZ2VzLmNvbnRhaW5z
KCZwcm92aXNpb25hbFBhZ2UpKTsgbV9wcm92aXNpb25hbFBhZ2VzLnJlbW92ZSgmcHJvdmlzaW9u
YWxQYWdlKTsgfQogCisgICAgY2xhc3MgV2ViUGFnZVByb3h5TWFwIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIFdlYlBhZ2VQcm94eU1hcChXZWJQcm9jZXNzUHJveHkmIHByb3h5KQorICAgICAgICAg
ICAgOiBtX3Byb3h5KHByb3h5KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB0eXBl
ZGVmIEhhc2hNYXA8dWludDY0X3QsIFdlYlBhZ2VQcm94eSo+IE1hcFR5cGU7CisgICAgICAgIHVz
aW5nIFZhbHVlc0NvbnN0SXRlcmF0b3JSYW5nZSA9IE1hcFR5cGU6OlZhbHVlc0NvbnN0SXRlcmF0
b3JSYW5nZTsKKworICAgICAgICBhdXRvIHNpemUoKSBjb25zdCB7IHJldHVybiBtX21hcC5zaXpl
KCk7IH0KKyAgICAgICAgYXV0byB2YWx1ZXMoKSB7IHJldHVybiBtX21hcC52YWx1ZXMoKTsgfQor
ICAgICAgICBhdXRvIHZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLnZhbHVlcygpOyB9Cisg
ICAgICAgIGF1dG8gYmVnaW4oKSB7IHJldHVybiBtX21hcC5iZWdpbigpOyB9CisgICAgICAgIGF1
dG8gZW5kKCkgeyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KKyAgICAgICAgYXV0byBnZXQodWludDY0
X3Qga2V5KSB7IHJldHVybiBtX21hcC5nZXQoa2V5KTsgfQorICAgICAgICBhdXRvIGNvbnRhaW5z
KHVpbnQ2NF90IGtleSkgY29uc3QgeyByZXR1cm4gbV9tYXAuY29udGFpbnMoa2V5KTsgfQorICAg
ICAgICBhdXRvIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX21hcC5pc0VtcHR5KCk7IH0KKwor
ICAgICAgICBhdXRvIHNldCh1aW50NjRfdCBrZXksIFdlYlBhZ2VQcm94eSogdmFsdWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9tYXAuc2V0KGtleSwgdmFsdWUpOwor
ICAgICAgICAgICAgbV9wcm94eS52YWxpZGF0ZUZyZWV6ZXJTdGF0dXMoKTsKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICBhdXRvIHRha2UodWludDY0X3Qg
a2V5KQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG1fbWFwLnRha2Uoa2V5
KTsKKyAgICAgICAgICAgIG1fcHJveHkudmFsaWRhdGVGcmVlemVyU3RhdHVzKCk7CisgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBX
ZWJQcm9jZXNzUHJveHkmIG1fcHJveHk7CisgICAgICAgIE1hcFR5cGUgbV9tYXA7CisgICAgfTsK
KworICAgIAogICAgIHR5cGVuYW1lIFdlYlBhZ2VQcm94eU1hcDo6VmFsdWVzQ29uc3RJdGVyYXRv
clJhbmdlIHBhZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlTWFwLnZhbHVlcygpOyB9CiAgICAg
dW5zaWduZWQgcGFnZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9wYWdlTWFwLnNpemUoKTsgfQog
ICAgIHVuc2lnbmVkIHByb3Zpc2lvbmFsUGFnZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9wcm92
aXNpb25hbFBhZ2VzLnNpemUoKTsgfQpAQCAtMzIxLDYgKzM1OSw4IEBAIHByb3RlY3RlZDoKIAog
ICAgIGJvb2wgaXNKSVRFbmFibGVkKCkgY29uc3QgZmluYWw7CiAKKyAgICB2b2lkIHZhbGlkYXRl
RnJlZXplclN0YXR1cygpOworCiBwcml2YXRlOgogICAgIC8vIElQQyBtZXNzYWdlIGhhbmRsZXJz
LgogICAgIHZvaWQgdXBkYXRlQmFja0ZvcndhcmRJdGVtKGNvbnN0IEJhY2tGb3J3YXJkTGlzdEl0
ZW1TdGF0ZSYpOwpAQCAtNDY5LDYgKzUwOSw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9z
dXNwZW5kZWRQYWdlQ291bnQgeyAwIH07CiAgICAgYm9vbCBtX2hhc0NvbW1pdHRlZEFueVByb3Zp
c2lvbmFsTG9hZHMgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9pc1ByZXdhcm1lZDsKKyAgICBPcHRp
b25hbDxib29sPiBtX2N1cnJlbnRJc0ZyZWV6YWJsZVZhbHVlOwogCiAjaWYgUExBVEZPUk0oV0FU
Q0hPUykKICAgICBQcm9jZXNzVGhyb3R0bGVyOjpCYWNrZ3JvdW5kQWN0aXZpdHlUb2tlbiBtX2Jh
Y2tncm91bmRBY3Rpdml0eVRva2VuRm9yRnVsbHNjcmVlbkZvcm1Db250cm9sczsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAppbmRleCA5ZmRiYzBiNTA1ZTQzYjA4N2Y5MjFm
NjQxZGU5NWRhMjJlZTA5NGJhLi43ZTI1OTUyY2VhNmI5NDUyZTQ1YjdmZTZkODhhM2E1MzQ5YmNj
YzY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCkBAIC0xNDksNiAr
MTQ5LDEwIEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUmVtb3RlSW5zcGVjdG9yLmg+CiAj
ZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisjaW5jbHVkZSA8Ym1hbGxvYy9NZW1v
cnlTdGF0dXNTUEkuaD4KKyNlbmRpZgorCiAvLyBUaGlzIHNob3VsZCBiZSBsZXNzIHRoYW4gcGx1
Z0luQXV0b1N0YXJ0RXhwaXJhdGlvblRpbWVUaHJlc2hvbGQgaW4gUGx1Z0luQXV0b1N0YXJ0UHJv
dmlkZXIuCiBzdGF0aWMgY29uc3QgU2Vjb25kcyBwbHVnSW5BdXRvU3RhcnRFeHBpcmF0aW9uVGlt
ZVVwZGF0ZVRocmVzaG9sZCB7IDI5ICogMjQgKiA2MCAqIDYwIH07CiAKQEAgLTE4NjcsNiArMTg3
MSwxNCBAQCB2b2lkIFdlYlByb2Nlc3M6OmNsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0
aW5nKCkKICAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OnNldEN1cnJlbnRNb2RpZmllclN0YXRl
KHsgfSk7CiB9CiAKK3ZvaWQgV2ViUHJvY2Vzczo6c2V0RnJlZXphYmxlKGJvb2wgZnJlZXphYmxl
KQoreworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgYXV0byByZXN1bHQgPSBtZW1vcnlz
dGF0dXNfY29udHJvbChNRU1PUllTVEFUVVNfQ01EX1NFVF9QUk9DRVNTX0lTX0ZSRUVaQUJMRSwg
Z2V0cGlkKCksIGZyZWV6YWJsZSA/IDEgOiAwLCBudWxscHRyLCAwKTsKKyAgICBBU1NFUlRfVU5V
U0VEKHJlc3VsdCwgIXJlc3VsdCk7CisjZW5kaWYKK30KKwogI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCiB2b2lkIFdlYlByb2Nlc3M6OnVuYmxvY2tBY2Nlc3NpYmlsaXR5U2VydmVyKGNvbnN0IFNh
bmRib3hFeHRlbnNpb246OkhhbmRsZSYgaGFuZGxlKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQcm9jZXNzLmgKaW5kZXggNzJmZTIxOTUwNmVhNTQ5NmNhYmY0MGNlZDk1OWNhNjUzNDdlZWEz
YS4uMDA0M2E1NTY1ZDQwMzA5MTcxNzE0NDEzNjUwNjgwOGIwMDc5ZmVlMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCkBAIC00MjYsNiArNDI2LDcgQEAgcHJpdmF0ZToKICNl
bmRpZgogCiAgICAgdm9pZCBjbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVzdGluZygpOwor
ICAgIHZvaWQgc2V0RnJlZXphYmxlKGJvb2wpOwogCiAgICAgUmVmUHRyPFdlYkNvbm5lY3Rpb25U
b1VJUHJvY2Vzcz4gbV93ZWJDb25uZWN0aW9uOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCmluZGV4IDQ1ZmVkNDY5ZjIwOTkzYmNjMzYyYjRl
Y2RlYTk2NzdlOGUzNTQ0ZjYuLjgwNDUzOTFhMDllMjE1OWNkMTk0NDU0ZDJhOTg0YTQzYjFmZDcz
MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLm1lc3Nh
Z2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLm1lc3NhZ2Vz
LmluCkBAIC0xNjEsNCArMTYxLDYgQEAgbWVzc2FnZXMgLT4gV2ViUHJvY2VzcyBMZWdhY3lSZWNl
aXZlciB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBVbmJsb2NrQWNjZXNzaWJpbGl0
eVNlcnZlcihXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBoYW5kbGUpCiAjZW5kaWYK
KworICAgIFNldEZyZWV6YWJsZShib29sIGZyZWV6YWJsZSkKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9ibWFs
bG9jL2JtYWxsb2MueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA1ODQwZjUzMmM5Njhk
OGQwNGNmZTY0NmIzNWQ5ZmM1MjkwMzI4M2ZlLi4yMzM4MDZlZjAzNDE3YTJiY2UzYWY2NmU0ZGVk
ODVmYjAyN2I1ZmEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC0xMzEsNyArMTMxLDcgQEAKIAkJNDQyNkUyODAxQzgzOEVFMDAw
OEVCMDQyIC8qIExvZ2dpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDQyNkUyN0UxQzgzOEVFMDAwOEVCMDQyIC8qIExvZ2dpbmcuY3BwICovOyB9
OwogCQk0NDI2RTI4MTFDODM4RUUwMDA4RUIwNDIgLyogTG9nZ2luZy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQyNkUyN0YxQzgzOEVFMDAwOEVCMDQy
IC8qIExvZ2dpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk0NDI2RTI4MzFDODM5NTQ3MDA4RUIwNDIgLyogQlNvZnRMaW5raW5nLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDI2RTI4MjFDODM5NTQ3
MDA4RUIwNDIgLyogQlNvZnRMaW5raW5nLmggKi87IH07Ci0JCTUyRjQ3MjQ5MjEwQkEzMDIwMEI3
MzBCQiAvKiBNZW1vcnlTdGF0dXNTUEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUyRjQ3MjQ4MjEwQkEyRjUwMEI3MzBCQiAvKiBNZW1vcnlTdGF0dXNT
UEkuaCAqLzsgfTsKKwkJNTJGNDcyNDkyMTBCQTMwMjAwQjczMEJCIC8qIE1lbW9yeVN0YXR1c1NQ
SS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJGNDcy
NDgyMTBCQTJGNTAwQjczMEJCIC8qIE1lbW9yeVN0YXR1c1NQSS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTY1NDNEREI0MjBFRUFFRjMwMDNCMjNE
OCAvKiBQZXJUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNjU0M0REQjMyMEVFQUVGMzAwM0IyM0Q4IC8qIFBlclRocmVhZC5jcHAgKi87IH07
CiAJCTY1OTlDNUNDMUVDM0YxNTkwMEEyRjdCQiAvKiBBdmFpbGFibGVNZW1vcnkuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU5OUM1Q0ExRUMzRjE1
OTAwQTJGN0JCIC8qIEF2YWlsYWJsZU1lbW9yeS5jcHAgKi87IH07CiAJCTY1OTlDNUNEMUVDM0Yx
NTkwMEEyRjdCQiAvKiBBdmFpbGFibGVNZW1vcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1OTlDNUNCMUVDM0YxNTkwMEEyRjdCQiAvKiBBdmFpbGFi
bGVNZW1vcnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9kYXJ3aW4vTWVtb3J5U3RhdHVz
U1BJLmggYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL2Rhcndpbi9NZW1vcnlTdGF0dXNTUEkuaApp
bmRleCA0NjlmYTAzMjIxZWYwOGJkYmFjZTk4YzYwZmM3OTg0NzllZmU5NTY4Li42MzgzNTQ0ZTk4
MGU1YjkzYmJlMTg4NTZiNWExMDUxZDM3Njk0MjcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL2Rhcndpbi9NZW1vcnlTdGF0dXNTUEkuaAorKysgYi9Tb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL2Rhcndpbi9NZW1vcnlTdGF0dXNTUEkuaApAQCAtNDMsNiArNDMsOCBAQCB0eXBlZGVm
IHN0cnVjdCBtZW1vcnlzdGF0dXNfbWVtbGltaXRfcHJvcGVydGllcyB7CiB9IG1lbW9yeXN0YXR1
c19tZW1saW1pdF9wcm9wZXJ0aWVzX3Q7CiAKICNkZWZpbmUgTUVNT1JZU1RBVFVTX0NNRF9HRVRf
TUVNTElNSVRfUFJPUEVSVElFUyA4CisjZGVmaW5lIE1FTU9SWVNUQVRVU19DTURfU0VUX1BST0NF
U1NfSVNfRlJFRVpBQkxFIDE4CisjZGVmaW5lIE1FTU9SWVNUQVRVU19DTURfR0VUX1BST0NFU1Nf
SVNfRlJFRVpBQkxFIDE5CiAKIH0KICNlbmRpZiAvLyBfX2hhc19pbmNsdWRlKDxTeXN0ZW0vc3lz
L2tlcm5fbWVtb3J5c3RhdHVzLmg+KQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>