<?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>207756</bug_id>
          
          <creation_ts>2020-02-14 04:34:11 -0800</creation_ts>
          <short_desc>[WPE][GTK] API for pause/resume rendering</short_desc>
          <delta_ts>2024-09-26 08:05:16 -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>WPE WebKit</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Philippe Normand">pnormand</reporter>
          <assigned_to name="Miguel Gomez">magomez</assigned_to>
          <cc>annulen</cc>
    
    <cc>aperez</cc>
    
    <cc>berto</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>calvaris</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>clopez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>cturner</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jer.noble</cc>
    
    <cc>luiz</cc>
    
    <cc>magomez</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>nekohayo</cc>
    
    <cc>noam</cc>
    
    <cc>philipj</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>youennf</cc>
    
    <cc>zeno</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1618937</commentid>
    <comment_count>0</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2020-02-14 04:34:11 -0800</bug_when>
    <thetext>This would be a new property in the webview. Optionally (if enabled at build-time) we could expose 2 POSIX signal handlers so that system users can send signals (with kill) to pause and resume rendering.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1618943</commentid>
    <comment_count>1</comment_count>
      <attachid>390757</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2020-02-14 05:34:58 -0800</bug_when>
    <thetext>Created attachment 390757
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1618944</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2020-02-14 05:35:52 -0800</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1618947</commentid>
    <comment_count>3</comment_count>
      <attachid>390757</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2020-02-14 06:09:56 -0800</bug_when>
    <thetext>Comment on attachment 390757
Patch

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

&gt; Source/WebCore/ChangeLog:10
&gt; +        Ever :)

What problem was that causing? I don&apos;t understand the change.

&gt; Source/WebCore/ChangeLog:14
&gt; +        media element is resumed.

Nice!

&gt; Source/WebCore/html/HTMLMediaElement.h:1215
&gt; +    bool m_shouldUnpauseOnResume { false };

m_shouldPlaybackOnResume ?

&gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:1056
&gt; +     * paused or not.

s/paused or not/paused/.

&gt; Source/cmake/OptionsWPE.cmake:82
&gt; +WEBKIT_OPTION_DEFINE(RENDERING_PAUSE_SIGNAL_ID &quot;number to use for rendering pause signal or &apos;OFF&apos;&quot; PRIVATE &quot;OFF&quot;)

Signal number used to pause rendering, or OFF.

&gt; Source/cmake/OptionsWPE.cmake:83
&gt; +WEBKIT_OPTION_DEFINE(RENDERING_RESUME_SIGNAL_ID &quot;number to use for rendering resume signal or &apos;OFF&apos;&quot; PRIVATE &quot;OFF&quot;)

Ditto.

&gt; ChangeLog:9
&gt; +        configure the background events simulation triggering with POSIX

Why is it beneficial to change these values at build time via CMake rather than as named constants in the source? I don&apos;t understand why someone would want RENDERING_PAUSE_SIGNAL=ON and RENDERING_RESUME_SIGNAL=OFF for example, perhaps a more user-friendly option like &quot;INSTALL_RENDERER_PAUSE_SIGNALS)&quot; would be better, rather than exposing two options that both must be set.
Also, &quot;background events simulation triggering&quot; is a tad awkward, I&apos;d be more consistent with your terminology and say &quot;.. to pause rendering of active DOM objects with POSIX signals.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1618954</commentid>
    <comment_count>4</comment_count>
      <attachid>390757</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2020-02-14 06:45:58 -0800</bug_when>
    <thetext>Comment on attachment 390757
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:10
&gt;&gt; +        Ever :)
&gt; 
&gt; What problem was that causing? I don&apos;t understand the change.

The task was scheduled but never triggered. I wonder why the build wasn&apos;t failing because of this issue, but I&apos;m not an expert in C++ templates.

&gt;&gt; ChangeLog:9
&gt;&gt; +        configure the background events simulation triggering with POSIX
&gt; 
&gt; Why is it beneficial to change these values at build time via CMake rather than as named constants in the source? I don&apos;t understand why someone would want RENDERING_PAUSE_SIGNAL=ON and RENDERING_RESUME_SIGNAL=OFF for example, perhaps a more user-friendly option like &quot;INSTALL_RENDERER_PAUSE_SIGNALS)&quot; would be better, rather than exposing two options that both must be set.
&gt; Also, &quot;background events simulation triggering&quot; is a tad awkward, I&apos;d be more consistent with your terminology and say &quot;.. to pause rendering of active DOM objects with POSIX signals.&quot;

There are 2 options so that the unix signal IDs for pause/resume can be configured.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1618994</commentid>
    <comment_count>5</comment_count>
      <attachid>390757</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2020-02-14 08:00:02 -0800</bug_when>
    <thetext>Comment on attachment 390757
Patch

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

&gt; Source/WebCore/html/HTMLMediaElement.cpp:5746
&gt; +        if (!m_pausedInternal) {
&gt; +            m_shouldUnpauseOnResume = true;
&gt; +            setPausedInternal(true);
&gt; +        }

I think it would be a good idea to not fall through here and break.

&gt; Source/WebCore/html/HTMLMediaElement.cpp:5765
&gt; +    if (m_shouldUnpauseOnResume) {
&gt; +        m_shouldUnpauseOnResume = false;
&gt; +        setPausedInternal(false);
&gt; +    }

Ditto

&gt;&gt; Source/WebCore/html/HTMLMediaElement.h:1215
&gt;&gt; +    bool m_shouldUnpauseOnResume { false };
&gt; 
&gt; m_shouldPlaybackOnResume ?

Bikeshedding a bit, for me it would be m_shouldPlayOnResume

&gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:742
&gt; +static gboolean s_sendPauseRenderingPending = FALSE;
&gt; +static gboolean s_sendResumeRenderingPending = FALSE;

I see no need in using gboolean instead of bool.

&gt;&gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:1056
&gt;&gt; +     * paused or not.
&gt; 
&gt; s/paused or not/paused/.

Yes, too many &quot;nots&quot;

&gt;&gt;&gt; ChangeLog:9
&gt;&gt;&gt; +        configure the background events simulation triggering with POSIX
&gt;&gt; 
&gt;&gt; Why is it beneficial to change these values at build time via CMake rather than as named constants in the source? I don&apos;t understand why someone would want RENDERING_PAUSE_SIGNAL=ON and RENDERING_RESUME_SIGNAL=OFF for example, perhaps a more user-friendly option like &quot;INSTALL_RENDERER_PAUSE_SIGNALS)&quot; would be better, rather than exposing two options that both must be set.
&gt;&gt; Also, &quot;background events simulation triggering&quot; is a tad awkward, I&apos;d be more consistent with your terminology and say &quot;.. to pause rendering of active DOM objects with POSIX signals.&quot;
&gt; 
&gt; There are 2 options so that the unix signal IDs for pause/resume can be configured.

Agree with Charlie here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1618998</commentid>
    <comment_count>6</comment_count>
      <attachid>390757</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2020-02-14 08:05:53 -0800</bug_when>
    <thetext>Comment on attachment 390757
Patch

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

&gt;&gt;&gt;&gt; ChangeLog:9
&gt;&gt;&gt;&gt; +        configure the background events simulation triggering with POSIX
&gt;&gt;&gt; 
&gt;&gt;&gt; Why is it beneficial to change these values at build time via CMake rather than as named constants in the source? I don&apos;t understand why someone would want RENDERING_PAUSE_SIGNAL=ON and RENDERING_RESUME_SIGNAL=OFF for example, perhaps a more user-friendly option like &quot;INSTALL_RENDERER_PAUSE_SIGNALS)&quot; would be better, rather than exposing two options that both must be set.
&gt;&gt;&gt; Also, &quot;background events simulation triggering&quot; is a tad awkward, I&apos;d be more consistent with your terminology and say &quot;.. to pause rendering of active DOM objects with POSIX signals.&quot;
&gt;&gt; 
&gt;&gt; There are 2 options so that the unix signal IDs for pause/resume can be configured.
&gt; 
&gt; Agree with Charlie here.

I suppose with some CMake magic a single option with a comma-separated value could be used, but it sounds harder to understand than, say, &quot;-DRENDERING_PAUSE_SIGNAL_ID=35 -DRENDERING_RESUME_SIGNAL_ID=36&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619005</commentid>
    <comment_count>7</comment_count>
      <attachid>390757</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2020-02-14 08:21:30 -0800</bug_when>
    <thetext>Comment on attachment 390757
Patch

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

&gt; Source/WebKit/UIProcess/API/wpe/WebKitWebViewWPE.cpp:231
&gt; + * Since: 2.28

As the 2.28 cycle is closing, it seems more prudent to wait 2.30 to enable this API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619261</commentid>
    <comment_count>8</comment_count>
      <attachid>390757</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-02-14 15:19:27 -0800</bug_when>
    <thetext>Comment on attachment 390757
Patch

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

&gt; Source/WebCore/html/HTMLMediaElement.h:962
&gt; +    DeferrableTask&lt;Timer&gt; m_updatePlayStateTask;

Can you split that change?
The goal here is to make sure that we use HTMLMediaElement::enqueueTaskForDispatcher which queues a task to the event loop.
I am not sure why this is not working for you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619501</commentid>
    <comment_count>9</comment_count>
      <attachid>390757</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-02-16 10:34:13 -0800</bug_when>
    <thetext>Comment on attachment 390757
Patch

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

Wouldn&apos;t it be nice to use D-Bus instead, or literally any imaginable form of IPC other than POSIX signals?

&gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:841
&gt; +#if HAVE_SIGNAL_H &amp;&amp; PLATFORM(WPE) &amp;&amp; defined(RENDERING_PAUSE_SIGNAL) &amp;&amp; defined(RENDERING_RESUME_SIGNAL)
&gt; +    void (*pauseHandler)(int) = signal(RENDERING_PAUSE_SIGNAL, wpeUIProcessSignalHandler);
&gt; +    if (pauseHandler != SIG_DFL)
&gt; +        signal(RENDERING_PAUSE_SIGNAL, pauseHandler);
&gt; +
&gt; +    void (*resumeHandler)(int) = signal(RENDERING_RESUME_SIGNAL, wpeUIProcessSignalHandler);
&gt; +    if (resumeHandler != SIG_DFL)
&gt; +        signal(RENDERING_RESUME_SIGNAL, resumeHandler);
&gt; +
&gt; +    priv-&gt;signalCheckSourceID = g_idle_add_full(G_PRIORITY_DEFAULT, wpeCheckSignals, g_object_ref(webView), g_object_unref);
&gt; +#endif

If you must use POSIX signals, please use g_unix_signal_source_new() so that that you can do your work in the &quot;signal handler&quot; without the need for s_sendPauseRenderingPending/s_sendResumeRenderingPending or worrying about async-signal safety, and so that you don&apos;t need this constantly-running idle source. (Doesn&apos;t the always-triggering idle source cause CPU churn?)

P.S. I&apos;m not sure if WPE has thread usage restrictions like GTK does? Since we&apos;re a library, it&apos;s better to manually attach your source to the thread-default main context. I checked all of WebKit/Source and we don&apos;t use g_idle_add() nor g_timeout_add() anywhere, so seems better not start now. That&apos;s why I did not suggest g_unix_signal_add().

&gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:1064
&gt; +            &quot;is-rendering-pause&quot;,

is-rendering-paused

&gt; Source/WebKit/UIProcess/API/wpe/WebKitWebView.h:562
&gt; +WEBKIT_API void
&gt; +webkit_web_view_set_is_rendering_paused              (WebKitWebView *web_view,
&gt; +                                                      gboolean value);
&gt; +
&gt; +WEBKIT_API gboolean
&gt; +webkit_web_view_is_rendering_paused                  (WebKitWebView *web_view);

Parameter alignment should follow GObject style

&gt;&gt; Source/cmake/OptionsWPE.cmake:83
&gt;&gt; +# iOS/Android backgrounding events simulation with POSIX signals.
&gt;&gt; +WEBKIT_OPTION_DEFINE(RENDERING_PAUSE_SIGNAL_ID &quot;number to use for rendering pause signal or &apos;OFF&apos;&quot; PRIVATE &quot;OFF&quot;)
&gt;&gt; +WEBKIT_OPTION_DEFINE(RENDERING_RESUME_SIGNAL_ID &quot;number to use for rendering resume signal or &apos;OFF&apos;&quot; PRIVATE &quot;OFF&quot;)
&gt; 
&gt; Ditto.

If I were picking signals to use here, I&apos;d pick SIGUSR1 and SIGUSR2 and would presumably stomp on JSC thread suspend/resume. Maybe fail the build if someone tries to use SIGUSR1?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619502</commentid>
    <comment_count>10</comment_count>
      <attachid>390757</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2020-02-16 10:53:01 -0800</bug_when>
    <thetext>Comment on attachment 390757
Patch

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

&gt;&gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:841
&gt;&gt; +#endif
&gt; 
&gt; If you must use POSIX signals, please use g_unix_signal_source_new() so that that you can do your work in the &quot;signal handler&quot; without the need for s_sendPauseRenderingPending/s_sendResumeRenderingPending or worrying about async-signal safety, and so that you don&apos;t need this constantly-running idle source. (Doesn&apos;t the always-triggering idle source cause CPU churn?)
&gt; 
&gt; P.S. I&apos;m not sure if WPE has thread usage restrictions like GTK does? Since we&apos;re a library, it&apos;s better to manually attach your source to the thread-default main context. I checked all of WebKit/Source and we don&apos;t use g_idle_add() nor g_timeout_add() anywhere, so seems better not start now. That&apos;s why I did not suggest g_unix_signal_add().

About g_unix_signal_source_new(), it&apos;s limited to a hardcoded set of signals, hence useless here. I don&apos;t think using SIGUSR would be wanted here. The use-case for these *opt-in at build-time* signals is that some application at the OS level would send user-defined signals to all running apps. This behavior is inspired by this SDL commit, https://hg.libsdl.org/SDL/rev/779b63fc4acb but I think other libs have a similar feature.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619618</commentid>
    <comment_count>11</comment_count>
      <attachid>390757</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2020-02-17 03:20:05 -0800</bug_when>
    <thetext>Comment on attachment 390757
Patch

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

&gt;&gt; Source/WebCore/html/HTMLMediaElement.h:962
&gt;&gt; +    DeferrableTask&lt;Timer&gt; m_updatePlayStateTask;
&gt; 
&gt; Can you split that change?
&gt; The goal here is to make sure that we use HTMLMediaElement::enqueueTaskForDispatcher which queues a task to the event loop.
&gt; I am not sure why this is not working for you.

Ok I understand now what&apos;s going on :) In EventLoop::run() the task is skipped because its group is flagged as suspended.
So instead of scheduling a task I wonder if I can directly pause playback from HTMLMediaElement::suspend().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619626</commentid>
    <comment_count>12</comment_count>
      <attachid>390757</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2020-02-17 04:10:50 -0800</bug_when>
    <thetext>Comment on attachment 390757
Patch

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

&gt;&gt; Source/WebCore/html/HTMLMediaElement.cpp:5765
&gt;&gt; +    }
&gt; 
&gt; Ditto

Ditto of? This is not a switch().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619627</commentid>
    <comment_count>13</comment_count>
      <attachid>390913</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2020-02-17 04:13:58 -0800</bug_when>
    <thetext>Created attachment 390913
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619629</commentid>
    <comment_count>14</comment_count>
      <attachid>390757</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2020-02-17 05:04:23 -0800</bug_when>
    <thetext>Comment on attachment 390757
Patch

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

&gt;&gt;&gt; Source/WebCore/html/HTMLMediaElement.cpp:5765
&gt;&gt;&gt; +    }
&gt;&gt; 
&gt;&gt; Ditto
&gt; 
&gt; Ditto of? This is not a switch().

Right!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619644</commentid>
    <comment_count>15</comment_count>
      <attachid>390913</attachid>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2020-02-17 07:53:48 -0800</bug_when>
    <thetext>Comment on attachment 390913
Patch

First of all, I really don&apos;t like using signals for this. Signals are
troublesome for many reasons (many of them outlined in the comments
below) and furthermore it is not the business of a library to decide
how a program will behave depending on how the library was built.

Now, on the positive side: I do truly believe that something along the
lines of this patch can be useful in many scenarios, and I would love
to see the functionality landed in WPE (and also the GTK port!) in some
form. Adding API to allow an application to suspend pages (= webviews)
is something that would allow for example to let browsers (like GNOME
Web, or Cog) to completely or partially suspend/throttle pages which
are inactive (for example: non visible browser tabs).

My preference regarding would be to see this patch in WebKit *without*
the signal handling parts. If any application needs to do it using
signals for whatever reason, it&apos;s the application where the code
belongs, and if the application cannot be modified, people are still
free to use a patched build of WebKit—but I am convinced that signal
handling must be avoided at all costs in upstream WebKit.

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

&gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:310
&gt; +    unsigned signalCheckSourceID { 0 };

It does not seem like a great idea to have one source per web view,
when signals are global things. I think it makes more sense to have
a singleton source, and register/unregister web views from a list
of web views to (un)suspend inside webkitWebViewConstructed() and
webkitWebViewDispose().

&gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:747
&gt; +    signal(sig, wpeUIProcessSignalHandler);

Why is this needed? Signal handlers are never reset automatically,
one has to explicitly call signal(signum, SIG_DFL) to go back to the
default signal handler.

&gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:752
&gt; +        s_sendResumeRenderingPending = true;

else
        UNREACHABLE();

&gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:831
&gt; +#if HAVE_SIGNAL_H &amp;&amp; PLATFORM(WPE) &amp;&amp; defined(RENDERING_PAUSE_SIGNAL) &amp;&amp; defined(RENDERING_RESUME_SIGNAL)

This could be as well be in the GTK port, I think we should not have
PLATFORM(WPE) guards here.

&gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:832
&gt; +    void (*pauseHandler)(int) = signal(RENDERING_PAUSE_SIGNAL, wpeUIProcessSignalHandler);

It&apos;s very unfortunate g_unix_signal_source_new() only allows a small
subset of all possible signal numbers—that is quite silly. At least
if we are going to do signal handling manually, please use sigaction()
because it&apos;s safer to than plain ol&apos; signal()... with sigaction() you
must set the SA_RESTART flag, so system calls which might have been
interrupted when the signal handler is called will be restarted—this
is unavailable with signal()—and also with sigaction() the signal being
delivered is temporarily added to the thread&apos;s signal mask to avoid
re-deliveries of the signal while the signal is being processed.

Even better would be to use signalfd() on Linux, and then handle that
file descriptor with a GSource created using g_unix_fd_source_new()
in the event loop—this completely bypasses the problem that there are
not that many signal-safe functions. JFTR, the equivalent for *BSD
would be to use kqueue() and an event type with EVFILT_SIGNAL.

I think at least changing the code to use sigaction() is a must.

(Yes, using Unix signals is a perilous affair. TL;DR: never do it
if you can avoid it.)

&gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:834
&gt; +        signal(RENDERING_PAUSE_SIGNAL, pauseHandler);

This code seems unnecessarily complicated to understand. Why do you even need
to do this? It looks like the idea is to try to use wpeUIProcessSignalHandler
but if there was some signal handler already registered, then configure it
back.

This seems like a terrible idea because if, let&apos;s say, a program accidentally
registers a handler for the resume signal, then it&apos;s possible to send a signal
to pause rendering, but it won&apos;t be possible to ever resume it!

If you want to keep existing signal handlers working, what you have to do
is keep a reference to them around, and invoke them from your handler in
turn. If you use a global handler as suggested, it&apos;s much easier to keep
a single sighandler_t value around for the existing handler, then do:

  static const sighandler_t s_existingSuspendSignalHandler = SIG_DFL;

  static void wpeUIProcessSignalHandler(int sig) {
      if (sig == RENDERING_PAUSE_SIGNAL) {
          s_sendPauseRenderingPending = true;
          if (s_existingSuspendSignalHandler != SIG_DFL)
              s_existingSuspendSignalHandler(sig);
      } else if (sig == RENDERING_RESUME_SIGNAL) {
          // Ditto for resuming.
      } else {
          UNREACHABLE();
      }
  }

Then, when registering the signal:

  s_existingSuspendSignalHandler = signal(REDNERING_SUSPEND_SIGNAL, wpeUIProcessSignalHandler);

This way you never need to play whack-a-mole with the installed signal
handlers, and previously existing handlers will be called without being
in a situation where one of the handlers is the WebKit-provided one and
another is the user-provided one.

Personally, I would go one step further, and use sigaction() passing
NULL as second parameter to obtain the current signal handler information
without changing it, and it is other than SIG_DFL for either signal, I
would just exit forcibly with an error: whoever thinks is a good idea to
use signals for this must let WebKit handle the signals.

&gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:998
&gt; +    }

You can change these for lines to just:

    g_clear_handle_id(&amp;webView-&gt;priv-&gt;signalCheckSourceID, g_source_remove);

&gt; Source/WebKit/UIProcess/API/wpe/WebKitWebViewWPE.cpp:244
&gt; +    }

Why is WebPage::setIsSuspended() not being used here? I would imagine that
one wants the whole page suspending, and not just media playback. If only
media playback suspension is desired in some cases, then wouldn&apos;t it be
better to use a tristate value here (Unpaused, Paused, MediaPaused)?
Then the property would be an “enum” instead of a bool/gboolean value.

&gt; Source/cmake/OptionsWPE.cmake:215
&gt; +    if (CMAKE_MATCH_1 LESS 32)

This check can fail for valid signals in the [SIGRTMIN, SIGRTMAX]
interval, which usually (but not always) has values &gt;32. I would
remove this check and instead only check that the values are:

 - Greater than zero (because zero is not a valid signal number).
 - Different than SIGKILL (because it cannot be handled).
 - Different than SIGBUS or SIGSEGV (because those are used for
   signaling invalid access to memory, we would rather have the
   default bahavior of coredump+abort for those).
 - Different from SIGABRT (because we want abort() calls to work).
 - Different from SIGFPE and SIGILL (similar reasoning as above).
 - Different from SIGTRAP (we want debuggers to always work).
 - Different from SIGALMR (which is used by JSC&apos;s profiler code).
 - Different from SIGCLD (used to watch for exited child processes).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619663</commentid>
    <comment_count>16</comment_count>
      <attachid>390913</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2020-02-17 08:36:52 -0800</bug_when>
    <thetext>Comment on attachment 390913
Patch

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

&gt;&gt; Source/WebKit/UIProcess/API/wpe/WebKitWebViewWPE.cpp:244
&gt;&gt; +    }
&gt; 
&gt; Why is WebPage::setIsSuspended() not being used here? I would imagine that
&gt; one wants the whole page suspending, and not just media playback. If only
&gt; media playback suspension is desired in some cases, then wouldn&apos;t it be
&gt; better to use a tristate value here (Unpaused, Paused, MediaPaused)?
&gt; Then the property would be an “enum” instead of a bool/gboolean value.

setIsSuspended() seems more related with PSON? Besides, I don&apos;t see it called by any component.
Also, this property is not only about media playback... Other things get suspended, such as animations and WebGL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619664</commentid>
    <comment_count>17</comment_count>
      <attachid>390922</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2020-02-17 08:37:53 -0800</bug_when>
    <thetext>Created attachment 390922
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619668</commentid>
    <comment_count>18</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-02-17 08:44:42 -0800</bug_when>
    <thetext>There are some existing mechanisms that might be worth piggy-backing.
See for instance WebPageProxy suspendAllMediaPlayback/resumeAllMediaPlayback.

That seems to align pretty well with your intent here, although you also want to resume/suspend other things.
Maybe a dedicated API or extending the current mechanism would be good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619673</commentid>
    <comment_count>19</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-02-17 08:46:40 -0800</bug_when>
    <thetext>(In reply to youenn fablet from comment #18)
&gt; There are some existing mechanisms that might be worth piggy-backing.
&gt; See for instance WebPageProxy suspendAllMediaPlayback/resumeAllMediaPlayback.
&gt; 
&gt; That seems to align pretty well with your intent here, although you also
&gt; want to resume/suspend other things.
&gt; Maybe a dedicated API or extending the current mechanism would be good.

I see that is what you are using in the latest patch, great!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619676</commentid>
    <comment_count>20</comment_count>
      <attachid>390922</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-02-17 08:49:39 -0800</bug_when>
    <thetext>Comment on attachment 390922
Patch

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

&gt; Source/WebCore/html/HTMLMediaElement.cpp:5772
&gt; +#endif

Do we still need these specific GStreamer changes now that we are using resumeAllMediaPlayback/suspendAllMediaPlayback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619680</commentid>
    <comment_count>21</comment_count>
      <attachid>390922</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2020-02-17 09:08:11 -0800</bug_when>
    <thetext>Comment on attachment 390922
Patch

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

&gt; Source/WebCore/html/HTMLMediaElement.cpp:5756
&gt;          // Do nothing, we don&apos;t pause media playback in these cases.

Highlight on this comment.

&gt;&gt; Source/WebCore/html/HTMLMediaElement.cpp:5772
&gt;&gt; +#endif
&gt; 
&gt; Do we still need these specific GStreamer changes now that we are using resumeAllMediaPlayback/suspendAllMediaPlayback

Yes, other ports don&apos;t do anything ^^</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619681</commentid>
    <comment_count>22</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2020-02-17 09:12:22 -0800</bug_when>
    <thetext>(In reply to youenn fablet from comment #19)
&gt; (In reply to youenn fablet from comment #18)
&gt; &gt; There are some existing mechanisms that might be worth piggy-backing.
&gt; &gt; See for instance WebPageProxy suspendAllMediaPlayback/resumeAllMediaPlayback.
&gt; &gt; 
&gt; &gt; That seems to align pretty well with your intent here, although you also
&gt; &gt; want to resume/suspend other things.
&gt; &gt; Maybe a dedicated API or extending the current mechanism would be good.
&gt; 
&gt; I see that is what you are using in the latest patch, great!

I was using it all along :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619711</commentid>
    <comment_count>23</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-02-17 10:24:47 -0800</bug_when>
    <thetext>&gt; &gt;&gt; Source/WebCore/html/HTMLMediaElement.cpp:5772
&gt; &gt;&gt; +#endif
&gt; &gt; 
&gt; &gt; Do we still need these specific GStreamer changes now that we are using resumeAllMediaPlayback/suspendAllMediaPlayback
&gt; 
&gt; Yes, other ports don&apos;t do anything ^^

Which part is missing there? Should it be implemented?

Looking at the code, most of it seems generic:
Document::suspendAllMediaPlayback -&gt; PlatformMediaSessionManager::suspendAllMediaPlaybackForDocument -&gt; PlatformMediaSession::beginInterruption -&gt; HTMLMediaElement::suspendPlayback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620632</commentid>
    <comment_count>24</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2020-02-19 06:24:47 -0800</bug_when>
    <thetext>(In reply to youenn fablet from comment #23)
&gt; &gt; &gt;&gt; Source/WebCore/html/HTMLMediaElement.cpp:5772
&gt; &gt; &gt;&gt; +#endif
&gt; &gt; &gt; 
&gt; &gt; &gt; Do we still need these specific GStreamer changes now that we are using resumeAllMediaPlayback/suspendAllMediaPlayback
&gt; &gt; 
&gt; &gt; Yes, other ports don&apos;t do anything ^^
&gt; 
&gt; Which part is missing there? 

Without my gst-specific changes, pause() is indeed called, but returns early:

Feb 19 14:16:40 ecto-1 WPEWebProcess[1858493]: HTMLMediaElement::pause(3A006CA22DCC0341)
Feb 19 14:16:40 ecto-1 WPEWebProcess[1858493]: MediaElementSession::playbackPermitted(3A006CA22DCC0341) Returning FALSE because element is suspended

&gt; Should it be implemented?
&gt; 

I wasn&apos;t sure what&apos;s the intended behavior on mac ports should be.

&gt; Looking at the code, most of it seems generic:
&gt; Document::suspendAllMediaPlayback -&gt;
&gt; PlatformMediaSessionManager::suspendAllMediaPlaybackForDocument -&gt;
&gt; PlatformMediaSession::beginInterruption -&gt; HTMLMediaElement::suspendPlayback

Does it work on mac?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620635</commentid>
    <comment_count>25</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2020-02-19 06:42:13 -0800</bug_when>
    <thetext>Stack trace btw:

Feb 19 14:41:12 ecto-1 WPEWebProcess[1869965]: 1   0x7f3c8aeb2665 WebCore::HTMLMediaElement::pause()
Feb 19 14:41:12 ecto-1 WPEWebProcess[1869965]: 2   0x7f3c8ae9762e WebCore::HTMLMediaElement::suspendPlayback()
Feb 19 14:41:12 ecto-1 WPEWebProcess[1869965]: 3   0x7f3c8b31d228 WebCore::PlatformMediaSession::beginInterruption(WebCore::PlatformMediaSession::InterruptionType)
Feb 19 14:41:12 ecto-1 WPEWebProcess[1869965]: 4   0x7f3c8b317e0b WebCore::PlatformMediaSessionManager::forEachMatchingSession(WTF::Function&lt;bool (WebCore::PlatformMediaSession const&amp;)&gt; const&amp;, WTF::Function&lt;vo&gt;
Feb 19 14:41:12 ecto-1 WPEWebProcess[1869965]: 5   0x7f3c8b317eda WebCore::PlatformMediaSessionManager::forEachDocumentSession(WTF::ObjectIdentifier&lt;WebCore::DocumentIdentifierType&gt;, WTF::Function&lt;void (WebCore&gt;
Feb 19 14:41:12 ecto-1 WPEWebProcess[1869965]: 6   0x7f3c8b317f96 WebCore::PlatformMediaSessionManager::suspendAllMediaPlaybackForDocument(WTF::ObjectIdentifier&lt;WebCore::DocumentIdentifierType&gt;)
Feb 19 14:41:12 ecto-1 WPEWebProcess[1869965]: 7   0x7f3c8b2217c9 WebCore::Page::forEachDocument(WTF::Function&lt;void (WebCore::Document&amp;)&gt; const&amp;) const
Feb 19 14:41:13 ecto-1 WPEWebProcess[1869965]: 8   0x7f3c8b2228ee WebCore::Page::suspendAllMediaPlayback()
Feb 19 14:41:13 ecto-1 WPEWebProcess[1869965]: 9   0x7f3c89ccdbb7 WebKit::WebPage::didReceiveWebPageMessage(IPC::Connection&amp;, IPC::Decoder&amp;)
Feb 19 14:41:13 ecto-1 WPEWebProcess[1869965]: 10  0x7f3c89dc87da IPC::MessageReceiverMap::dispatchMessage(IPC::Connection&amp;, IPC::Decoder&amp;)
Feb 19 14:41:13 ecto-1 WPEWebProcess[1869965]: 11  0x7f3c89ff3397 WebKit::WebProcess::didReceiveMessage(IPC::Connection&amp;, IPC::Decoder&amp;)
Feb 19 14:41:13 ecto-1 WPEWebProcess[1869965]: 12  0x7f3c89dc1668 IPC::Connection::dispatchMessage(IPC::Decoder&amp;)
Feb 19 14:41:13 ecto-1 WPEWebProcess[1869965]: 13  0x7f3c89dc2955 IPC::Connection::dispatchMessage(std::unique_ptr&lt;IPC::Decoder, std::default_delete&lt;IPC::Decoder&gt; &gt;)
Feb 19 14:41:13 ecto-1 WPEWebProcess[1869965]: 14  0x7f3c89dc3010 IPC::Connection::dispatchOneIncomingMessage()
Feb 19 14:41:13 ecto-1 WPEWebProcess[1869965]: 15  0x7f3c8cb56efc WTF::RunLoop::performWork()
Feb 19 14:41:13 ecto-1 WPEWebProcess[1869965]: 16  0x7f3c8cbbbd19
Feb 19 14:41:13 ecto-1 WPEWebProcess[1869965]: 17  0x7f3c8757b91f g_main_context_dispatch
Feb 19 14:41:13 ecto-1 WPEWebProcess[1869965]: 18  0x7f3c8757bcb0
Feb 19 14:41:13 ecto-1 WPEWebProcess[1869965]: 19  0x7f3c8757bfc3 g_main_loop_run
Feb 19 14:41:13 ecto-1 WPEWebProcess[1869965]: 20  0x7f3c8cbbc7e0 WTF::RunLoop::run()
Feb 19 14:41:13 ecto-1 WPEWebProcess[1869965]: 21  0x7f3c8a0dd627 WebKit::WebProcessMain(int, char**)
Feb 19 14:41:13 ecto-1 WPEWebProcess[1869965]: 22  0x7f3c8798cbbb __libc_start_main
Feb 19 14:41:13 ecto-1 WPEWebProcess[1869965]: 23  0x560de01ea7da</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620636</commentid>
    <comment_count>26</comment_count>
      <attachid>391155</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2020-02-19 06:55:26 -0800</bug_when>
    <thetext>Created attachment 391155
WIP

With this change I have suspend working without port-specific ifdefs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620714</commentid>
    <comment_count>27</comment_count>
      <attachid>390922</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-02-19 09:46:04 -0800</bug_when>
    <thetext>Comment on attachment 390922
Patch

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

&gt; Source/WebKit/UIProcess/API/wpe/WebKitWebViewWPE.cpp:240
&gt; +        page.suspendAllMediaPlayback();

So MediaElementSession::playbackPermitted() is probably returning false in your case.
What if you call suspendAllMediaPlayback first and suspendActiveDOMObjectsAndAnimations() second?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620731</commentid>
    <comment_count>28</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2020-02-19 10:35:54 -0800</bug_when>
    <thetext>(In reply to youenn fablet from comment #27)
&gt; Comment on attachment 390922 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=390922&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/wpe/WebKitWebViewWPE.cpp:240
&gt; &gt; +        page.suspendAllMediaPlayback();
&gt; 
&gt; So MediaElementSession::playbackPermitted() is probably returning false in
&gt; your case.
&gt; What if you call suspendAllMediaPlayback first and
&gt; suspendActiveDOMObjectsAndAnimations() second?

Well. Now that you mention it indeed :) Suspending media before the DOM objects clearly makes more sense. And resuming DOM objects before media perhaps. I&apos;ll check tomorrow. Thanks Youenn!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621150</commentid>
    <comment_count>29</comment_count>
      <attachid>391273</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2020-02-20 03:19:16 -0800</bug_when>
    <thetext>Created attachment 391273
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621598</commentid>
    <comment_count>30</comment_count>
      <attachid>391273</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-02-21 02:27:51 -0800</bug_when>
    <thetext>Comment on attachment 391273
Patch

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

&gt; Source/WebKit/UIProcess/API/wpe/WebKitWebViewWPE.cpp:240
&gt; +        page.suspendActiveDOMObjectsAndAnimations();

early return?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621623</commentid>
    <comment_count>31</comment_count>
      <attachid>391273</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2020-02-21 05:13:25 -0800</bug_when>
    <thetext>Comment on attachment 391273
Patch

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

Are the WPE port reviewers OK with this new API?

&gt;&gt; Source/WebKit/UIProcess/API/wpe/WebKitWebViewWPE.cpp:240
&gt;&gt; +        page.suspendActiveDOMObjectsAndAnimations();
&gt; 
&gt; early return?

No strong feelings either way. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621900</commentid>
    <comment_count>32</comment_count>
      <attachid>391273</attachid>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2020-02-22 14:41:42 -0800</bug_when>
    <thetext>Comment on attachment 391273
Patch

Patch looks fine, but needs updating the ChangeLog and I have a comment
regarding the public API; it would be great if Carlos García can confirm
that the property should be called “rendering-paused” for consistency,
hence the cq-

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

&gt; Source/WebKit/ChangeLog:14
&gt; +        (wpeCheckSignals):

Please update the ChangeLog entry, as these two functions are not
anymore in the patch :)

&gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:205
&gt; +#if PLATFORM(WPE)

Is there some reason why this cannot be done for the GTK port as well?

&gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:999
&gt; +     * WebKitWebView:is-rendering-paused:

Checking other boolean properties in GLib style APIs, they usually don&apos;t
have the “is-” prefix, so I would call this just “rendering-paused”.

&gt; Source/WebKit/UIProcess/API/wpe/WebKitWebView.h:562
&gt; +webkit_web_view_is_rendering_paused                  (WebKitWebView               *web_view);

Conversely: webkit_web_view_get_rendering_paused() and
webkit_web_view_set_rendering_paused().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622071</commentid>
    <comment_count>33</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-02-24 00:56:59 -0800</bug_when>
    <thetext>Sorry for the delay commenting about this, I have a several questions (not necessarily for phil, but also for youenn):

 - I find a bit confusing the different suspend methods we have in WebKit and WebCore layers:
  + WebPageProxy::suspendCurrentPageIfPossible: this is only for PSON, right? what&apos;s the effect in this case?
  + WebPageProxy::suspendActiveDOMObjectsAndAnimations: does this suspend the painting (layer flush) somehow?
  + WebPageProxy::suspendAllMediaPlayback: why is this separated from the active DOM objects and animations? Is this expected to be used to force a pause of the media instead of suspending the page?
  + WebPage::suspendAllMediaBuffering: do we want to suspend the networking too?
  + Page::suspendScriptedAnimations: this is what we call when suspending painting in the web process, what&apos;s the difference with Page::suspendActiveDOMObjectsAndAnimations?
 - We are already suspending the rendering when a page is hidden, what&apos;s the use case of this new API? Do we want to suspend pages even if they are currently visible? What&apos;s the effect in the web view, do we keep the last frame?

I need to understand the use case of this to review the new API, but I&apos;ll add some comments inline.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622075</commentid>
    <comment_count>34</comment_count>
      <attachid>391273</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-02-24 01:08:41 -0800</bug_when>
    <thetext>Comment on attachment 391273
Patch

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

Patches adding new API must include a unit test.

&gt; Source/WebKit/ChangeLog:10
&gt; +        A new property is added in the WebView to control the rendering
&gt; +        state. When this property is set to TRUE, all animations and media
&gt; +        playback will be paused.

A property is useful when you want to monitor it, to be notified when its value changes, but here you are not emitting the notify signal when it changes, and I don&apos;t even know if it&apos;s easy to do in this case.

&gt;&gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:999
&gt;&gt; +     * WebKitWebView:is-rendering-paused:
&gt; 
&gt; Checking other boolean properties in GLib style APIs, they usually don&apos;t
&gt; have the “is-” prefix, so I would call this just “rendering-paused”.

Yes, the name sounds more like a read-only property that you can monitor to get notified when the rendering has been pause, more than an action started by you. I wouldn&apos;t use a property in this case. I guess suspend/remove are balanced, so setting the property to TRUE twice would require setting it twice to FALSE, which is confusing for a property.

&gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:1002
&gt; +     * Whether or not rendering (including media playback, animations, WebGL) is
&gt; +     * paused.

Active DOM objects are not mentioned here, I guess not all active DOM objects are related to rendering, so I would avoid using rendering in the API.

&gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:1012
&gt; +            _(&quot;Indication of the WebView rendering state&quot;),

This is makes it sound more like a read-only prop to monitor a state.

&gt; Source/WebKit/UIProcess/API/wpe/WebKitWebViewWPE.cpp:229
&gt; + * Pause or resume DOM objects, animations and media playback.

So, what happens if called twice with the same value? I would use webkit_web_view_pause() (or webkit_web_view_suspend()) and webkit_web_view_resume().

&gt; Source/WebKit/UIProcess/API/wpe/WebKitWebViewWPE.cpp:260
&gt; +    return page.areActiveDOMObjectsAndAnimationsSuspended();

We only check active dom objects and animations but not media playback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622085</commentid>
    <comment_count>35</comment_count>
      <attachid>391273</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2020-02-24 01:38:25 -0800</bug_when>
    <thetext>Comment on attachment 391273
Patch

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

&gt;&gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:205
&gt;&gt; +#if PLATFORM(WPE)
&gt; 
&gt; Is there some reason why this cannot be done for the GTK port as well?

I suppose this would be doable in GTK too, but this patch is not about GTK :)

&gt;&gt;&gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:999
&gt;&gt;&gt; +     * WebKitWebView:is-rendering-paused:
&gt;&gt; 
&gt;&gt; Checking other boolean properties in GLib style APIs, they usually don&apos;t
&gt;&gt; have the “is-” prefix, so I would call this just “rendering-paused”.
&gt; 
&gt; Yes, the name sounds more like a read-only property that you can monitor to get notified when the rendering has been pause, more than an action started by you. I wouldn&apos;t use a property in this case. I guess suspend/remove are balanced, so setting the property to TRUE twice would require setting it twice to FALSE, which is confusing for a property.

Attempting to suspend an already suspended page has no effect.

&gt;&gt; Source/WebKit/UIProcess/API/wpe/WebKitWebViewWPE.cpp:229
&gt;&gt; + * Pause or resume DOM objects, animations and media playback.
&gt; 
&gt; So, what happens if called twice with the same value? I would use webkit_web_view_pause() (or webkit_web_view_suspend()) and webkit_web_view_resume().

As mentioned already, nothing happens if this is called twice with the same value.

&gt;&gt; Source/WebKit/UIProcess/API/wpe/WebKitWebViewWPE.cpp:260
&gt;&gt; +    return page.areActiveDOMObjectsAndAnimationsSuspended();
&gt; 
&gt; We only check active dom objects and animations but not media playback.

Right, but as media is suspended/resumed at the same time, I thought simply checking one was enough.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622124</commentid>
    <comment_count>36</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-02-24 06:06:21 -0800</bug_when>
    <thetext>&gt;  - I find a bit confusing the different suspend methods we have in WebKit
&gt; and WebCore layers:
&gt;   + WebPageProxy::suspendCurrentPageIfPossible: this is only for PSON,
&gt; right? what&apos;s the effect in this case?

Goal is support b/f cache even in case of process swap, hence different pages in different process.

&gt;   + WebPageProxy::suspendActiveDOMObjectsAndAnimations: does this suspend
&gt; the painting (layer flush) somehow?

I do not think so, though not working on rendering.

&gt;   + WebPageProxy::suspendAllMediaPlayback: why is this separated from the
&gt; active DOM objects and animations? Is this expected to be used to force a
&gt; pause of the media instead of suspending the page?

Right, we have some internal cases doing just that.
This is not a public API though.

&gt;   + WebPage::suspendAllMediaBuffering: do we want to suspend the networking
&gt; too?

It makes sense to me to suspend media buffering when suspending media playback.

&gt;   + Page::suspendScriptedAnimations: this is what we call when suspending
&gt; painting in the web process, what&apos;s the difference with
&gt; Page::suspendActiveDOMObjectsAndAnimations?

suspend/resume is an overloaded term in WebKit which makes things difficult to understand.
I believe suspendScriptedAnimations is mostly for RAF and should probably be called as part of/when suspendActiveDOMObjectsAndAnimations is called.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622227</commentid>
    <comment_count>37</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2020-02-24 10:30:11 -0800</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #33)
&gt;   + WebPage::suspendAllMediaBuffering: do we want to suspend the networking
&gt; too?

Sure!

&gt;   + Page::suspendScriptedAnimations: this is what we call when suspending
&gt; painting in the web process, what&apos;s the difference with
&gt; Page::suspendActiveDOMObjectsAndAnimations?
&gt;  - We are already suspending the rendering when a page is hidden, what&apos;s the
&gt; use case of this new API?

The use-case was mentioned in comment 10, though reviewers here seem to veto the use of signals, the use-case remains the same.

&gt; Do we want to suspend pages even if they are
&gt; currently visible?

By currently visible, what do you mean?

&gt; What&apos;s the effect in the web view, do we keep the last
&gt; frame?
&gt; 

Yes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622539</commentid>
    <comment_count>38</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-02-25 01:30:58 -0800</bug_when>
    <thetext>(In reply to Philippe Normand from comment #35)
&gt; Comment on attachment 391273 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=391273&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:205
&gt; &gt;&gt; +#if PLATFORM(WPE)
&gt; &gt; 
&gt; &gt; Is there some reason why this cannot be done for the GTK port as well?
&gt; 
&gt; I suppose this would be doable in GTK too, but this patch is not about GTK :)

This is adding new GLib API to expose cross-platform functionality, I don&apos;t see the reason to make this WPE specific either.

&gt; &gt;&gt;&gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:999
&gt; &gt;&gt;&gt; +     * WebKitWebView:is-rendering-paused:
&gt; &gt;&gt; 
&gt; &gt;&gt; Checking other boolean properties in GLib style APIs, they usually don&apos;t
&gt; &gt;&gt; have the “is-” prefix, so I would call this just “rendering-paused”.
&gt; &gt; 
&gt; &gt; Yes, the name sounds more like a read-only property that you can monitor to get notified when the rendering has been pause, more than an action started by you. I wouldn&apos;t use a property in this case. I guess suspend/remove are balanced, so setting the property to TRUE twice would require setting it twice to FALSE, which is confusing for a property.
&gt; 
&gt; Attempting to suspend an already suspended page has no effect.

I has the effect of requiting to set it to FALSE twice, that&apos;s not obvious to me when using a property, I alwasy expect to change its value when I set a different one.

&gt; &gt;&gt; Source/WebKit/UIProcess/API/wpe/WebKitWebViewWPE.cpp:229
&gt; &gt;&gt; + * Pause or resume DOM objects, animations and media playback.
&gt; &gt; 
&gt; &gt; So, what happens if called twice with the same value? I would use webkit_web_view_pause() (or webkit_web_view_suspend()) and webkit_web_view_resume().
&gt; 
&gt; As mentioned already, nothing happens if this is called twice with the same
&gt; value.
&gt; 
&gt; &gt;&gt; Source/WebKit/UIProcess/API/wpe/WebKitWebViewWPE.cpp:260
&gt; &gt;&gt; +    return page.areActiveDOMObjectsAndAnimationsSuspended();
&gt; &gt; 
&gt; &gt; We only check active dom objects and animations but not media playback.
&gt; 
&gt; Right, but as media is suspended/resumed at the same time, I thought simply
&gt; checking one was enough.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622543</commentid>
    <comment_count>39</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-02-25 01:37:20 -0800</bug_when>
    <thetext>(In reply to Philippe Normand from comment #37)
&gt; (In reply to Carlos Garcia Campos from comment #33)
&gt; &gt;   + WebPage::suspendAllMediaBuffering: do we want to suspend the networking
&gt; &gt; too?
&gt; 
&gt; Sure!
&gt; 
&gt; &gt;   + Page::suspendScriptedAnimations: this is what we call when suspending
&gt; &gt; painting in the web process, what&apos;s the difference with
&gt; &gt; Page::suspendActiveDOMObjectsAndAnimations?
&gt; &gt;  - We are already suspending the rendering when a page is hidden, what&apos;s the
&gt; &gt; use case of this new API?
&gt; 
&gt; The use-case was mentioned in comment 10, though reviewers here seem to veto
&gt; the use of signals, the use-case remains the same.

I don&apos;t see the use case explained there. The question is what and why, not how. I agree we shouldn&apos;t use signals for this, even more if we are adding new API, so apps are free to use signals or whatever. What I don&apos;t fully understand yet is why you want to suspend a web view using new API (rendering is already suspended when the web view is hidden, maybe we can just improve that by pausing the media, DOM objects etc, instead of just the scripted animations). And the other question is what do you want to achieve exactly, because I don&apos;t see how the rendering is paused in this case, there&apos;s no layer flush suspension nor threaded compositor.

&gt; &gt; Do we want to suspend pages even if they are
&gt; &gt; currently visible?
&gt; 
&gt; By currently visible, what do you mean?

A page that is not hidden, the currently visible tab in a browser.

&gt; &gt; What&apos;s the effect in the web view, do we keep the last
&gt; &gt; frame?
&gt; &gt; 
&gt; 
&gt; Yes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622556</commentid>
    <comment_count>40</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2020-02-25 02:34:55 -0800</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #39)
&gt; 
&gt; A page that is not hidden, the currently visible tab in a browser.
&gt; 

How is that supposed to work in a fullscreen, always visible browser like Cog?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622562</commentid>
    <comment_count>41</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-02-25 03:13:36 -0800</bug_when>
    <thetext>(In reply to Philippe Normand from comment #40)
&gt; (In reply to Carlos Garcia Campos from comment #39)
&gt; &gt; 
&gt; &gt; A page that is not hidden, the currently visible tab in a browser.
&gt; &gt; 
&gt; 
&gt; How is that supposed to work in a fullscreen, always visible browser like
&gt; Cog?

That&apos;s why I asked if the intention was to suspend visible we views too. I&apos;ve seen other projects removing the flag wpe_view_activity_state_in_window or wpe_view_activity_state_visible to pause the rendering, for example. I think       it&apos;s better to have API for that instead of pretending the web view is hidden when it&apos;s not, but the suspension mechanism should be shared with the hidden views, I guess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645174</commentid>
    <comment_count>42</comment_count>
      <attachid>397452</attachid>
    <who name="Miguel Gomez">magomez</who>
    <bug_when>2020-04-24 06:57:22 -0700</bug_when>
    <thetext>Created attachment 397452
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645176</commentid>
    <comment_count>43</comment_count>
    <who name="Miguel Gomez">magomez</who>
    <bug_when>2020-04-24 07:02:17 -0700</bug_when>
    <thetext>(In reply to Miguel Gomez from comment #42)
&gt; Created attachment 397452 [details]
&gt; Patch

I talked to cgarcia some things about phil&apos;s patch and how we should modify it. We agreed to keep this feature as a pause only, not trying to include here any feature to release resources. This use case is just intended to pause the WebView for a while, and enable it again as fast as possible. So, these are the changes I made:

- Removed the property as it&apos;s not needed
- Modified the API methods to pause/unpause so it&apos;s cleat they are related (could be changed if people are not happy with it though)
- Stop the compositor loop besides stopping the animations and media playback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645185</commentid>
    <comment_count>44</comment_count>
      <attachid>397456</attachid>
    <who name="Miguel Gomez">magomez</who>
    <bug_when>2020-04-24 07:17:01 -0700</bug_when>
    <thetext>Created attachment 397456
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667045</commentid>
    <comment_count>45</comment_count>
      <attachid>397456</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-06-29 03:07:50 -0700</bug_when>
    <thetext>Comment on attachment 397456
Patch

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

&gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:4555
&gt; + * Pause DOM objects, animations and media playback.

I think it should be clear in the docs that pause/unpause don&apos;t need to be balanced, if pause is called and it&apos;s already paused nothing happens, and if resume is called and it&apos;s not pause nothing happens either.

&gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:4584
&gt; +    page.resumeActiveDOMObjectsAndAnimations();
&gt; +    page.resumeAllMediaPlayback();
&gt; +    page.resumeRendering();

I see a problem here, these three have a different behavior:

 - ActiveDOMObjectsAndAnimations: pause/resume don&apos;t have any effect if the page doesn&apos;t have a running process.
 - AllMediaPlayback: if the page doesn&apos;t have a running process the value is saved and sent to the web process as WebPageCreationParameters.
 - Rendering: doesn&apos;t check its current state and crashes if called without a drawing area.

&gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:4600
&gt; +    return page.areActiveDOMObjectsAndAnimationsSuspended();

And we rely only on ActiveDOMObjectsAndAnimations to decided whether we are paused or not. If pause is called before the web process has been launched, this will return false, but media playback will be paused and rendering too (if we didn&apos;t crash).

&gt; Source/WebKit/UIProcess/gtk/WebPageProxyGtk.cpp:200
&gt; +    ASSERT(m_drawingArea);
&gt; +    m_drawingArea-&gt;suspendRendering();

I think we should save the value to return early if already suspended from the UI point of view. I think we should also return early if m_drawingArea is nullptr and suspend the rendering when the drawing area proxy is created if the saved value is still true.

&gt; Source/WebKit/UIProcess/gtk/WebPageProxyGtk.cpp:206
&gt; +    ASSERT(m_drawingArea);
&gt; +    m_drawingArea-&gt;resumeRendering();

Same here. That way we would behave like media playback.

&gt; Source/WebKit/UIProcess/wpe/WebPageProxyWPE.cpp:115
&gt; +void WebPageProxy::suspendRendering()
&gt; +{
&gt; +    ASSERT(m_drawingArea);
&gt; +    m_drawingArea-&gt;suspendRendering();
&gt; +}
&gt; +
&gt; +void WebPageProxy::resumeRendering()
&gt; +{
&gt; +    ASSERT(m_drawingArea);
&gt; +    m_drawingArea-&gt;resumeRendering();
&gt; +}

In this case I think it would be better to add ifdefs to WebPageProxy or add WebPageProxyGLib.cpp instead of duplicating the code.

&gt; Source/WebKit/WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp:481
&gt; +void DrawingAreaCoordinatedGraphics::suspendRendering()
&gt; +{
&gt; +    suspendPainting();
&gt; +}
&gt; +
&gt; +void DrawingAreaCoordinatedGraphics::resumeRendering()
&gt; +{
&gt; +    resumePainting();
&gt; +}

Can we just call the IPC messages SuspendPainting and ResumePainting? Then we don&apos;t even need this, I guess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2063271</commentid>
    <comment_count>46</comment_count>
    <who name="Jeff Fortin">nekohayo</who>
    <bug_when>2024-09-25 20:17:14 -0700</bug_when>
    <thetext>My Epiphany web apps are eating my CPU and keeping the laptop fan running all the time even though they are not in view... Is this what this ticket is about, or that is too specific and it would need to be a separate issue? The closest other thing I found on this bug tracker is bug #263286 in webkit itself...

While discussing with some folks around Epiphany, we thought maybe it was Mutter not emitting the signals WebKitGTK expect, but in https://gitlab.gnome.org/GNOME/mutter/-/issues/3634 ; it sounds like there is no bug in Mutter and that it is actually WebKitGTK that is not plugging into the right signals from the window manager to figure out when a window is obscured to suspend a page…</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2063383</commentid>
    <comment_count>47</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2024-09-26 08:05:16 -0700</bug_when>
    <thetext>No, this bug is unrelated. You want a new bug report.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390757</attachid>
            <date>2020-02-14 05:34:58 -0800</date>
            <delta_ts>2020-02-17 04:13:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207756-20200214133456.patch</filename>
            <type>text/plain</type>
            <size>16050</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2NTAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzljYzc5MDhlOTUyOWFj
YWRmOWRjNmVkOTFlZTQ0MzI5ODIxMmQzMy4uYWEzMDE3YjhkYjRlNGU1OTg4ODdmZDNmNjQxZTE4
ZTlhMGM2OTdlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDIwLTAyLTE0ICBQaGls
aXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbV1BFXSBBUEkg
Zm9yIHBhdXNlL3Jlc3VtZSByZW5kZXJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwNzc1NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEZpeCB0aGUgdXBkYXRlUGxheVN0YXRlIHRhc2sgZGVmaW5pdGlv
biwgaWYgaXQncyBub3QgYSBUaW1lcgorICAgICAgICBzcGVjaWFsaXphdGlvbiBvZiB0aGUgRGVm
ZXJyYWJsZVRhc2sgdGVtcGxhdGUsIGl0IHdvbid0IGJlIGZpcmVkLgorICAgICAgICBFdmVyIDop
CisKKyAgICAgICAgQWRkaXRpb25hbGx5LCBHU3RyZWFtZXIgcG9ydHMgd2lsbCBub3cgcGF1c2Ug
cGxheWJhY2sgd2hlbiB0aGUKKyAgICAgICAgbWVkaWEgZWxlbWVudCBpcyBzdXNwZW5kZWQuIFBs
YXliYWNrIHdpbGwgYmUgcmVzdW1lZCB3aGVuIHRoZQorICAgICAgICBtZWRpYSBlbGVtZW50IGlz
IHJlc3VtZWQuCisKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxlbWVudCk6CisgICAgICAg
ICogaHRtbC9IVE1MTWVkaWFFbGVtZW50Lmg6CisKIDIwMjAtMDItMTIgIFlvc2hpYWtpIEppdHN1
a2F3YSAgPHlvc2hpYWtpLmppdHN1a2F3YUBzb255LmNvbT4KIAogICAgICAgICBbV2ViQ3J5cHRv
XVtDb21tb25DcnlwdG9dIEluY29ycmVjdCBBRVMtQ1RSIHdpdGggY291bnRlckxlbmd0aCBsb25n
ZXIgdGhhbiA2NApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwppbmRleCAxZDZhYjEwNGY5MWE3M2FiYzMyNzIwYzE5MGNhZTY3YzE2
YzQyOTcwLi5iNTQxMWQyOTI3NDU3MzFlMTZhZWFjZWFjNjczZGUzYTc1MWUyYTdkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDI4IEBACisyMDIwLTAyLTE0ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1h
bmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbV1BFXSBBUEkgZm9yIHBhdXNlL3Jlc3VtZSByZW5k
ZXJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIw
Nzc1NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEEg
bmV3IHByb3BlcnR5IGlzIGFkZGVkIGluIHRoZSBXZWJWaWV3IHRvIGNvbnRyb2wgdGhlIHJlbmRl
cmluZworICAgICAgICBzdGF0ZS4gV2hlbiB0aGlzIHByb3BlcnR5IGlzIHNldCB0byBUUlVFLCBh
bGwgYW5pbWF0aW9ucyBhbmQgbWVkaWEKKyAgICAgICAgcGxheWJhY2sgd2lsbCBiZSBwYXVzZWQu
CisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlldy5jcHA6CisgICAg
ICAgICh3cGVVSVByb2Nlc3NTaWduYWxIYW5kbGVyKToKKyAgICAgICAgKHdwZUNoZWNrU2lnbmFs
cyk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3Q29uc3RydWN0ZWQpOgorICAgICAgICAod2Via2l0
V2ViVmlld1NldFByb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdHZXRQcm9wZXJ0eSk6
CisgICAgICAgICh3ZWJraXRXZWJWaWV3RGlzcG9zZSk6CisgICAgICAgICh3ZWJraXRfd2ViX3Zp
ZXdfY2xhc3NfaW5pdCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0V2ViVmll
dy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFdlYlZpZXdXUEUuY3BwOgor
ICAgICAgICAod2Via2l0X3dlYl92aWV3X3NldF9pc19yZW5kZXJpbmdfcGF1c2VkKToKKyAgICAg
ICAgKHdlYmtpdF93ZWJfdmlld19pc19yZW5kZXJpbmdfcGF1c2VkKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL3dwZS9kb2NzL3dwZS0xLjAtc2VjdGlvbnMudHh0OgorCiAyMDIwLTAyLTEyICBS
eWFuIEhhZGRhZCAgPHJ5YW5oYWRkYWRAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IHJvbGxpbmcgb3V0IHIyNTYwMTAuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxNZWRpYUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50
LmNwcAppbmRleCBhNzNiYzBiNGMyZmVlYjMxM2RmZTc3NWM4OGQ4ZWE5ZDA5OWEwYmY1Li4yNmUx
ZmJiNDBlZGI2MWE5N2JjYmNlMGI5MjA0NDNlMDk2NGM5ZGYyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKQEAgLTQxNyw3ICs0MTcsNiBAQCBIVE1MTWVkaWFFbGVt
ZW50OjpIVE1MTWVkaWFFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3Vt
ZW50JiBkb2N1bQogICAgICwgbV9zY2FuVGltZXIoKnRoaXMsICZIVE1MTWVkaWFFbGVtZW50Ojpz
Y2FuVGltZXJGaXJlZCkKICAgICAsIG1fcGxheWJhY2tDb250cm9sc01hbmFnZXJCZWhhdmlvclJl
c3RyaWN0aW9uc1RpbWVyKCp0aGlzLCAmSFRNTE1lZGlhRWxlbWVudDo6cGxheWJhY2tDb250cm9s
c01hbmFnZXJCZWhhdmlvclJlc3RyaWN0aW9uc1RpbWVyRmlyZWQpCiAgICAgLCBtX3NlZWtUb1Bs
YXliYWNrUG9zaXRpb25FbmRlZFRpbWVyKCp0aGlzLCAmSFRNTE1lZGlhRWxlbWVudDo6c2Vla1Rv
UGxheWJhY2tQb3NpdGlvbkVuZGVkVGltZXJGaXJlZCkKLSAgICAsIG1fdXBkYXRlUGxheVN0YXRl
VGFzaygqdGhpcykKICAgICAsIG1fYXN5bmNFdmVudFF1ZXVlKE1haW5UaHJlYWRHZW5lcmljRXZl
bnRRdWV1ZTo6Y3JlYXRlKCp0aGlzKSkKICAgICAsIG1fbGFzdFRpbWVVcGRhdGVFdmVudE1vdmll
VGltZShNZWRpYVRpbWU6OnBvc2l0aXZlSW5maW5pdGVUaW1lKCkpCiAgICAgLCBtX2ZpcnN0VGlt
ZVBsYXlpbmcodHJ1ZSkKQEAgLTU3NDAsNiArNTczOSwxMiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6OnN1c3BlbmQoUmVhc29uRm9yU3VzcGVuc2lvbiByZWFzb24pCiAgICAgICAgIG1fbWVkaWFT
ZXNzaW9uLT5hZGRCZWhhdmlvclJlc3RyaWN0aW9uKE1lZGlhRWxlbWVudFNlc3Npb246OlJlcXVp
cmVQYWdlQ29uc2VudFRvUmVzdW1lTWVkaWEpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFJl
YXNvbkZvclN1c3BlbnNpb246OlBhZ2VXaWxsQmVTdXNwZW5kZWQ6CisjaWYgVVNFKEdTVFJFQU1F
UikKKyAgICAgICAgaWYgKCFtX3BhdXNlZEludGVybmFsKSB7CisgICAgICAgICAgICBtX3Nob3Vs
ZFVucGF1c2VPblJlc3VtZSA9IHRydWU7CisgICAgICAgICAgICBzZXRQYXVzZWRJbnRlcm5hbCh0
cnVlKTsKKyAgICAgICAgfQorI2VuZGlmCiAgICAgY2FzZSBSZWFzb25Gb3JTdXNwZW5zaW9uOjpK
YXZhU2NyaXB0RGVidWdnZXJQYXVzZWQ6CiAgICAgY2FzZSBSZWFzb25Gb3JTdXNwZW5zaW9uOjpX
aWxsRGVmZXJMb2FkaW5nOgogICAgICAgICAvLyBEbyBub3RoaW5nLCB3ZSBkb24ndCBwYXVzZSBt
ZWRpYSBwbGF5YmFjayBpbiB0aGVzZSBjYXNlcy4KQEAgLTU3NTMsNiArNTc1OCwxMyBAQCB2b2lk
IEhUTUxNZWRpYUVsZW1lbnQ6OnJlc3VtZSgpCiAKICAgICBzZXRJbkFjdGl2ZURvY3VtZW50KHRy
dWUpOwogCisjaWYgVVNFKEdTVFJFQU1FUikKKyAgICBpZiAobV9zaG91bGRVbnBhdXNlT25SZXN1
bWUpIHsKKyAgICAgICAgbV9zaG91bGRVbnBhdXNlT25SZXN1bWUgPSBmYWxzZTsKKyAgICAgICAg
c2V0UGF1c2VkSW50ZXJuYWwoZmFsc2UpOworICAgIH0KKyNlbmRpZgorCiAgICAgaWYgKCFtX21l
ZGlhU2Vzc2lvbi0+cGFnZUFsbG93c1BsYXliYWNrQWZ0ZXJSZXN1bWluZygpKQogICAgICAgICBk
b2N1bWVudCgpLmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigqdGhpcyk7CiAgICAgZWxzZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAppbmRleCA1NTIyZjhjZTUyYTAzOTc3MDg2
ZWJkNjAzOTRiNmI5YTgxMmU1ODViLi4xZDQ2ZjcwOGE0YzY1Yjk2MTAxNTE0YjZiMWVmNTk2Yzlk
MmIxNjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaApAQCAtOTU5LDcg
Kzk1OSw3IEBAIHByaXZhdGU6CiAgICAgRGVmZXJyYWJsZVRhc2s8VGltZXI+IG1fY2hlY2tQbGF5
YmFja1RhcmdldENvbXBhdGFibGl0eVRhc2s7CiAgICAgRGVmZXJyYWJsZVRhc2s8VGltZXI+IG1f
dXBkYXRlTWVkaWFTdGF0ZVRhc2s7CiAgICAgRGVmZXJyYWJsZVRhc2s8VGltZXI+IG1fbWVkaWFF
bmdpbmVVcGRhdGVkVGFzazsKLSAgICBEZWZlcnJhYmxlVGFzazxIVE1MTWVkaWFFbGVtZW50PiBt
X3VwZGF0ZVBsYXlTdGF0ZVRhc2s7CisgICAgRGVmZXJyYWJsZVRhc2s8VGltZXI+IG1fdXBkYXRl
UGxheVN0YXRlVGFzazsKICAgICBEZWZlcnJhYmxlVGFzazxUaW1lcj4gbV9yZXN1bWVUYXNrUXVl
dWU7CiAgICAgRGVmZXJyYWJsZVRhc2s8VGltZXI+IG1fc2Vla1Rhc2tRdWV1ZTsKICAgICBEZWZl
cnJhYmxlVGFzazxUaW1lcj4gbV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlckJlaGF2aW9yUmVzdHJp
Y3Rpb25zUXVldWU7CkBAIC0xMjEwLDYgKzEyMTAsMTAgQEAgcHJpdmF0ZToKICAgICBib29sIG1f
aXNQbGF5aW5nVG9XaXJlbGVzc1RhcmdldCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3BsYXlpbmdP
blNlY29uZFNjcmVlbiB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3JlbW92ZWRCZWhhdmlvclJlc3Ry
aWN0aW9uc0FmdGVyRmlyc3RVc2VyR2VzdHVyZSB7IGZhbHNlIH07CisKKyNpZiBVU0UoR1NUUkVB
TUVSKQorICAgIGJvb2wgbV9zaG91bGRVbnBhdXNlT25SZXN1bWUgeyBmYWxzZSB9OworI2VuZGlm
CiB9OwogCiBTdHJpbmcgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcoSFRNTE1lZGlhRWxlbWVu
dDo6QXV0b3BsYXlFdmVudFBsYXliYWNrU3RhdGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3LmNwcAppbmRleCA5NjMzMjY5MDM5YWVkODVl
MTk5M2IyMzQ0NzM1MDliNGVjYjM5Yjc5Li4wODYzNTAxOGYxNTVlNzhkMTZjMzk1MjdhYjM3YjQ4
NWI0ZjZkMGIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9X
ZWJLaXRXZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9X
ZWJLaXRXZWJWaWV3LmNwcApAQCAtMjAwLDcgKzIwMCwxMSBAQCBlbnVtIHsKICAgICBQUk9QX0lT
X0NPTlRST0xMRURfQllfQVVUT01BVElPTiwKICAgICBQUk9QX0FVVE9NQVRJT05fUFJFU0VOVEFU
SU9OX1RZUEUsCiAgICAgUFJPUF9FRElUQUJMRSwKLSAgICBQUk9QX1BBR0VfSUQKKyAgICBQUk9Q
X1BBR0VfSUQsCisKKyNpZiBQTEFURk9STShXUEUpCisgICAgUFJPUF9JU19SRU5ERVJJTkdfUEFV
U0VELAorI2VuZGlmCiB9OwogCiB0eXBlZGVmIEhhc2hNYXA8dWludDY0X3QsIEdSZWZQdHI8V2Vi
S2l0V2ViUmVzb3VyY2U+ID4gTG9hZGluZ1Jlc291cmNlc01hcDsKQEAgLTMwMiw2ICszMDYsOCBA
QCBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdQcml2YXRlIHsKICAgICBHUmVmUHRyPFdlYktpdEF1dGhl
bnRpY2F0aW9uUmVxdWVzdD4gYXV0aGVudGljYXRpb25SZXF1ZXN0OwogCiAgICAgR1JlZlB0cjxX
ZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXI+IHdlYnNpdGVEYXRhTWFuYWdlcjsKKworICAgIHVuc2ln
bmVkIHNpZ25hbENoZWNrU291cmNlSUQgeyAwIH07CiB9OwogCiBzdGF0aWMgZ3VpbnQgc2lnbmFs
c1tMQVNUX1NJR05BTF0gPSB7IDAsIH07CkBAIC03MjksNiArNzM1LDQwIEBAIHN0YXRpYyBnYm9v
bGVhbiB3ZWJraXRXZWJWaWV3U2hvd05vdGlmaWNhdGlvbihXZWJLaXRXZWJWaWV3KiwgV2ViS2l0
Tm90aWZpY2F0aW9uCiAjZW5kaWYKIH0KIAorCisjaWYgSEFWRV9TSUdOQUxfSCAmJiBQTEFURk9S
TShXUEUpICYmIGRlZmluZWQoUkVOREVSSU5HX1BBVVNFX1NJR05BTCkgJiYgZGVmaW5lZChSRU5E
RVJJTkdfUkVTVU1FX1NJR05BTCkKKworc3RhdGljIGdib29sZWFuIHNfc2VuZFBhdXNlUmVuZGVy
aW5nUGVuZGluZyA9IEZBTFNFOworc3RhdGljIGdib29sZWFuIHNfc2VuZFJlc3VtZVJlbmRlcmlu
Z1BlbmRpbmcgPSBGQUxTRTsKKworc3RhdGljIHZvaWQgd3BlVUlQcm9jZXNzU2lnbmFsSGFuZGxl
cihpbnQgc2lnKQoreworICAgIC8vIFJlc2V0IHRoZSBzaWduYWwgaGFuZGxlci4KKyAgICBzaWdu
YWwoc2lnLCB3cGVVSVByb2Nlc3NTaWduYWxIYW5kbGVyKTsKKworICAgIGlmIChzaWcgPT0gUkVO
REVSSU5HX1BBVVNFX1NJR05BTCkKKyAgICAgICAgc19zZW5kUGF1c2VSZW5kZXJpbmdQZW5kaW5n
ID0gVFJVRTsKKyAgICBlbHNlIGlmIChzaWcgPT0gUkVOREVSSU5HX1JFU1VNRV9TSUdOQUwpCisg
ICAgICAgIHNfc2VuZFJlc3VtZVJlbmRlcmluZ1BlbmRpbmcgPSBUUlVFOworfQorCitzdGF0aWMg
Z2Jvb2xlYW4gd3BlQ2hlY2tTaWduYWxzKGdwb2ludGVyIGRhdGEpCit7CisgICAgV2ViS2l0V2Vi
Vmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyhkYXRhKTsKKworICAgIGlmIChzX3NlbmRQ
YXVzZVJlbmRlcmluZ1BlbmRpbmcpIHsKKyAgICAgICAgd2Via2l0X3dlYl92aWV3X3NldF9pc19y
ZW5kZXJpbmdfcGF1c2VkKHdlYlZpZXcsIFRSVUUpOworICAgICAgICBzX3NlbmRQYXVzZVJlbmRl
cmluZ1BlbmRpbmcgPSBGQUxTRTsKKyAgICB9CisKKyAgICBpZiAoc19zZW5kUmVzdW1lUmVuZGVy
aW5nUGVuZGluZykgeworICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X2lzX3JlbmRlcmluZ19w
YXVzZWQod2ViVmlldywgRkFMU0UpOworICAgICAgICBzX3NlbmRSZXN1bWVSZW5kZXJpbmdQZW5k
aW5nID0gRkFMU0U7CisgICAgfQorICAgIHJldHVybiBHX1NPVVJDRV9DT05USU5VRTsKK30KKyNl
bmRpZgorCiBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3Q29uc3RydWN0ZWQoR09iamVjdCogb2Jq
ZWN0KQogewogICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF93ZWJfdmlld19wYXJlbnRfY2xhc3Mp
LT5jb25zdHJ1Y3RlZChvYmplY3QpOwpAQCAtNzg2LDYgKzgyNiwxOSBAQCBzdGF0aWMgdm9pZCB3
ZWJraXRXZWJWaWV3Q29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQogCiAgICAgcHJpdi0+YmFj
a0ZvcndhcmRMaXN0ID0gYWRvcHRHUmVmKHdlYmtpdEJhY2tGb3J3YXJkTGlzdENyZWF0ZSgmZ2V0
UGFnZSh3ZWJWaWV3KS5iYWNrRm9yd2FyZExpc3QoKSkpOwogICAgIHByaXYtPndpbmRvd1Byb3Bl
cnRpZXMgPSBhZG9wdEdSZWYod2Via2l0V2luZG93UHJvcGVydGllc0NyZWF0ZSgpKTsKKworCisj
aWYgSEFWRV9TSUdOQUxfSCAmJiBQTEFURk9STShXUEUpICYmIGRlZmluZWQoUkVOREVSSU5HX1BB
VVNFX1NJR05BTCkgJiYgZGVmaW5lZChSRU5ERVJJTkdfUkVTVU1FX1NJR05BTCkKKyAgICB2b2lk
ICgqcGF1c2VIYW5kbGVyKShpbnQpID0gc2lnbmFsKFJFTkRFUklOR19QQVVTRV9TSUdOQUwsIHdw
ZVVJUHJvY2Vzc1NpZ25hbEhhbmRsZXIpOworICAgIGlmIChwYXVzZUhhbmRsZXIgIT0gU0lHX0RG
TCkKKyAgICAgICAgc2lnbmFsKFJFTkRFUklOR19QQVVTRV9TSUdOQUwsIHBhdXNlSGFuZGxlcik7
CisKKyAgICB2b2lkICgqcmVzdW1lSGFuZGxlcikoaW50KSA9IHNpZ25hbChSRU5ERVJJTkdfUkVT
VU1FX1NJR05BTCwgd3BlVUlQcm9jZXNzU2lnbmFsSGFuZGxlcik7CisgICAgaWYgKHJlc3VtZUhh
bmRsZXIgIT0gU0lHX0RGTCkKKyAgICAgICAgc2lnbmFsKFJFTkRFUklOR19SRVNVTUVfU0lHTkFM
LCByZXN1bWVIYW5kbGVyKTsKKworICAgIHByaXYtPnNpZ25hbENoZWNrU291cmNlSUQgPSBnX2lk
bGVfYWRkX2Z1bGwoR19QUklPUklUWV9ERUZBVUxULCB3cGVDaGVja1NpZ25hbHMsIGdfb2JqZWN0
X3JlZih3ZWJWaWV3KSwgZ19vYmplY3RfdW5yZWYpOworI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lk
IHdlYmtpdFdlYlZpZXdTZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJZCwg
Y29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQpAQCAtNzk5LDYgKzg1
Miw5IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdTZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmpl
Y3QsIGd1aW50IHByb3BJZCwgY29uc3QgR1ZhbHVlCiAgICAgICAgIHdlYlZpZXctPnByaXYtPmJh
Y2tlbmQgPSBiYWNrZW5kID8gYWRvcHRHUmVmKHN0YXRpY19jYXN0PFdlYktpdFdlYlZpZXdCYWNr
ZW5kKj4oYmFja2VuZCkpIDogbnVsbHB0cjsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIGNh
c2UgUFJPUF9JU19SRU5ERVJJTkdfUEFVU0VEOgorICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0
X2lzX3JlbmRlcmluZ19wYXVzZWQod2ViVmlldywgZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkp
OworICAgICAgICBicmVhazsKICNlbmRpZgogICAgIGNhc2UgUFJPUF9XRUJfQ09OVEVYVDogewog
ICAgICAgICBncG9pbnRlciB3ZWJDb250ZXh0ID0gZ192YWx1ZV9nZXRfb2JqZWN0KHZhbHVlKTsK
QEAgLTg0OSw2ICs5MDUsOSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3R2V0UHJvcGVydHko
R09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSWQsIEdWYWx1ZSogdmFsdQogICAgIGNhc2UgUFJP
UF9CQUNLRU5EOgogICAgICAgICBnX3ZhbHVlX3NldF9zdGF0aWNfYm94ZWQodmFsdWUsIHdlYlZp
ZXctPnByaXYtPmJhY2tlbmQuZ2V0KCkpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
SVNfUkVOREVSSU5HX1BBVVNFRDoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwg
d2Via2l0X3dlYl92aWV3X2lzX3JlbmRlcmluZ19wYXVzZWQod2ViVmlldykpOworICAgICAgICBi
cmVhazsKICNlbmRpZgogICAgIGNhc2UgUFJPUF9XRUJfQ09OVEVYVDoKICAgICAgICAgZ192YWx1
ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJWaWV3LT5wcml2LT5jb250ZXh0LmdldCgpKTsKQEAgLTkz
Myw2ICs5OTIsMTEgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Rpc3Bvc2UoR09iamVjdCog
b2JqZWN0KQogICAgICAgICBBU1NFUlQoIXdlYlZpZXctPnByaXYtPmN1cnJlbnRTY3JpcHREaWFs
b2cpOwogICAgIH0KIAorICAgIGlmICh3ZWJWaWV3LT5wcml2LT5zaWduYWxDaGVja1NvdXJjZUlE
KSB7CisgICAgICAgIGdfc291cmNlX3JlbW92ZSh3ZWJWaWV3LT5wcml2LT5zaWduYWxDaGVja1Nv
dXJjZUlEKTsKKyAgICAgICAgd2ViVmlldy0+cHJpdi0+c2lnbmFsQ2hlY2tTb3VyY2VJRCA9IDA7
CisgICAgfQorCiAjaWYgUExBVEZPUk0oV1BFKQogICAgIHdlYlZpZXctPnByaXYtPnZpZXctPmNs
b3NlKCk7CiAjZW5kaWYKQEAgLTk4NCw2ICsxMDQ4LDI0IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93
ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFzcyogd2ViVmlld0NsYXNzKQogICAg
ICAgICAgICAgXygiVGhlIGJhY2tlbmQgZm9yIHRoZSB3ZWIgdmlldyIpLAogICAgICAgICAgICAg
V0VCS0lUX1RZUEVfV0VCX1ZJRVdfQkFDS0VORCwKICAgICAgICAgICAgIHN0YXRpY19jYXN0PEdQ
YXJhbUZsYWdzPihXRUJLSVRfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05M
WSkpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFdlYlZpZXc6aXMtcmVuZGVyaW5nLXBhdXNl
ZDoKKyAgICAgKgorICAgICAqIFdoZXRoZXIgb3Igbm90IHJlbmRlcmluZyAoaW5jbHVkaW5nIG1l
ZGlhIHBsYXliYWNrLCBhbmltYXRpb25zLCBXZWJHTCkgaXMKKyAgICAgKiBwYXVzZWQgb3Igbm90
LgorICAgICAqCisgICAgICogc2luY2U6IDIuMjgKKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnT2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
QkFDS0VORCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAiaXMt
cmVuZGVyaW5nLXBhdXNlIiwKKyAgICAgICAgICAgIF8oIklzIFJlbmRlcmluZyBQYXVzZWQiKSwK
KyAgICAgICAgICAgIF8oIkZvbyIpLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CiAjZW5kaWYKIAogICAgIC8qKgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRXZWJWaWV3LmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFdlYlZpZXcuaAppbmRleCAyYjJkNzhkMWJi
NTNhMmZmZGI3MGMyYTRiZGJjODg0YWY2MDM2ZjYwLi5jN2E5OWJhYjc1NDFmNDk2ZTc4ZjdmNDU1
MDcwMzNhYTAzMzJkY2U2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
d3BlL1dlYktpdFdlYlZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3Bl
L1dlYktpdFdlYlZpZXcuaApAQCAtNTU0LDYgKzU1NCwxMyBAQCB3ZWJraXRfd2ViX3ZpZXdfc2V0
X2lucHV0X21ldGhvZF9jb250ZXh0ICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3CiBXRUJLSVRf
QVBJIFdlYktpdElucHV0TWV0aG9kQ29udGV4dCAqCiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2lucHV0
X21ldGhvZF9jb250ZXh0ICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICAg
KndlYl92aWV3KTsKIAorV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfd2ViX3ZpZXdfc2V0X2lzX3Jl
bmRlcmluZ19wYXVzZWQgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICp3ZWJfdmlldywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29s
ZWFuIHZhbHVlKTsKKworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X3dlYl92aWV3X2lzX3Jl
bmRlcmluZ19wYXVzZWQgICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAqd2ViX3ZpZXcp
OworCiBHX0VORF9ERUNMUwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS93cGUvV2ViS2l0V2ViVmlld1dQRS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvd3BlL1dlYktpdFdlYlZpZXdXUEUuY3BwCmluZGV4IDllNWNlNWMzODk2ZjgwOTdi
YjY1Y2MzMWYzZDkyZGIwMTA0YTYwM2IuLjA5NDkwYzA2ZDNmOWY3N2FjMTA3ODU0ZWI1N2Q5Mzc5
Y2VhNzRlZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2Vi
S2l0V2ViVmlld1dQRS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9X
ZWJLaXRXZWJWaWV3V1BFLmNwcApAQCAtMjIwLDMgKzIyMCw0MiBAQCB2b2lkIHdlYmtpdF93ZWJf
dmlld19nZXRfYmFja2dyb3VuZF9jb2xvcihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRD
b2xvciogYwogICAgIGF1dG8mIHdlYkNvcmVDb2xvciA9IHBhZ2UuYmFja2dyb3VuZENvbG9yKCk7
CiAgICAgd2Via2l0Q29sb3JGaWxsRnJvbVdlYkNvcmVDb2xvcih3ZWJDb3JlQ29sb3IudmFsdWVP
cihXZWJDb3JlOjpDb2xvcjo6d2hpdGUpLCBjb2xvcik7CiB9CisKKy8qKgorICogd2Via2l0X3dl
Yl92aWV3X3NldF9pc19yZW5kZXJpbmdfcGF1c2VkOgorICogQHdlYl92aWV3OiBhICNXZWJLaXRX
ZWJWaWV3CisgKiBAdmFsdWU6IGEgI2dib29sZWFuCisgKgorICogUGF1c2Ugb3IgcmVzdW1lIERP
TSBvYmplY3RzLCBhbmltYXRpb25zIGFuZCBtZWRpYSBwbGF5YmFjay4KKyAqCisgKiBTaW5jZTog
Mi4yOAorICovCit2b2lkIHdlYmtpdF93ZWJfdmlld19zZXRfaXNfcmVuZGVyaW5nX3BhdXNlZChX
ZWJLaXRXZWJWaWV3ICp3ZWJWaWV3LCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSk7CisgICAgYXV0byYgcGFnZSA9IHdl
YmtpdFdlYlZpZXdHZXRQYWdlKHdlYlZpZXcpOworCisgICAgaWYgKHZhbHVlKSB7CisgICAgICAg
IHBhZ2Uuc3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7CisgICAgICAgIHBh
Z2Uuc3VzcGVuZEFsbE1lZGlhUGxheWJhY2soKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwYWdl
LnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7CisgICAgICAgIHBhZ2UucmVz
dW1lQWxsTWVkaWFQbGF5YmFjaygpOworICAgIH0KK30KKworLyoqCisgKiB3ZWJraXRfd2ViX3Zp
ZXdfaXNfcmVuZGVyaW5nX3BhdXNlZDoKKyAqIEB3ZWJfdmlldzogYSAjV2ViS2l0V2ViVmlldwor
ICoKKyAqIFJldHVybnM6IGEgI2dib29sZWFuIGluZGljYXRpbmcgaWYgRE9NIG9iamVjdHMsIGFu
aW1hdGlvbnMgYW5kIG1lZGlhIHBsYXliYWNrCisgKiByZW5kZXJpbmcgaXMgZW5hYmxlZCBvciBu
b3QuCisgKgorICogU2luY2U6IDIuMjgKKyAqLworZ2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3X2lz
X3JlbmRlcmluZ19wYXVzZWQoV2ViS2l0V2ViVmlldyAqd2ViVmlldykKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldyksIEZBTFNFKTsKKyAgICBh
dXRvJiBwYWdlID0gd2Via2l0V2ViVmlld0dldFBhZ2Uod2ViVmlldyk7CisgICAgcmV0dXJuIHBh
Z2UuYXJlQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnNTdXNwZW5kZWQoKTsKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvZG9jcy93cGUtMS4wLXNlY3Rp
b25zLnR4dCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvZG9jcy93cGUtMS4wLXNl
Y3Rpb25zLnR4dAppbmRleCAwYzJkYzY1MTVjNjZiNzk1NzdhN2Q1ODA3Y2E0YTBmYmM1ZDA3NTM5
Li45YzdkZWYzZGY2Nzk1MGU2MWE2NTM1MWNiNzU3NTk2MDYxNjkwNTBlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL2RvY3Mvd3BlLTEuMC1zZWN0aW9ucy50eHQK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9kb2NzL3dwZS0xLjAtc2VjdGlv
bnMudHh0CkBAIC0yNTcsNiArMjU3LDggQEAgd2Via2l0X3dlYl92aWV3X3NlbmRfbWVzc2FnZV90
b19wYWdlCiB3ZWJraXRfd2ViX3ZpZXdfc2VuZF9tZXNzYWdlX3RvX3BhZ2VfZmluaXNoCiB3ZWJr
aXRfd2ViX3ZpZXdfc2V0X2lucHV0X21ldGhvZF9jb250ZXh0CiB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X2lucHV0X21ldGhvZF9jb250ZXh0Cit3ZWJraXRfd2ViX3ZpZXdfaXNfcmVuZGVyaW5nX3BhdXNl
ZAord2Via2l0X3dlYl92aWV3X3NldF9pc19yZW5kZXJpbmdfcGF1c2VkCiAKIDxTVUJTRUNUSU9O
IFdlYktpdEphdmFzY3JpcHRSZXN1bHQ+CiBXZWJLaXRKYXZhc2NyaXB0UmVzdWx0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc1dQRS5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25z
V1BFLmNtYWtlCmluZGV4IDkyNWM3OTc3ODQ5OGRmZDc2MjE0ZDgwYWQzN2I0Njc1MzY2NGE5Yzcu
LmYzZWFhMmUzMzA0NWE2Y2IyZGRhOWIyNGVjYjQ2MDEwODc0MWNlYWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9jbWFrZS9PcHRpb25zV1BFLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zV1BF
LmNtYWtlCkBAIC03OCw2ICs3OCwxMCBAQCBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfV1BF
X1FUX0FQSSAiV2hldGhlciB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIFF0NS9RTQogV0VCS0lU
X09QVElPTl9ERUZJTkUoVVNFX0dTVFJFQU1FUl9IT0xFUFVOQ0ggIldoZXRoZXIgdG8gZW5hYmxl
IEdTdHJlYW1lciBob2xlcHVuY2giIFBSSVZBVEUgT0ZGKQogV0VCS0lUX09QVElPTl9ERUZJTkUo
VVNFX0VYVEVSTkFMX0hPTEVQVU5DSCAiV2hldGhlciB0byBlbmFibGUgZXh0ZXJuYWwgaG9sZXB1
bmNoIiBQUklWQVRFIE9GRikKIAorIyBpT1MvQW5kcm9pZCBiYWNrZ3JvdW5kaW5nIGV2ZW50cyBz
aW11bGF0aW9uIHdpdGggUE9TSVggc2lnbmFscy4KK1dFQktJVF9PUFRJT05fREVGSU5FKFJFTkRF
UklOR19QQVVTRV9TSUdOQUxfSUQgIm51bWJlciB0byB1c2UgZm9yIHJlbmRlcmluZyBwYXVzZSBz
aWduYWwgb3IgJ09GRiciIFBSSVZBVEUgIk9GRiIpCitXRUJLSVRfT1BUSU9OX0RFRklORShSRU5E
RVJJTkdfUkVTVU1FX1NJR05BTF9JRCAibnVtYmVyIHRvIHVzZSBmb3IgcmVuZGVyaW5nIHJlc3Vt
ZSBzaWduYWwgb3IgJ09GRiciIFBSSVZBVEUgIk9GRiIpCisKIGlmIChDTUFLRV9TWVNURU1fTkFN
RSBNQVRDSEVTICJMaW51eCIpCiAgICAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUo
RU5BQkxFX01FTU9SWV9TQU1QTEVSIFBSSVZBVEUgT04pCiAgICAgV0VCS0lUX09QVElPTl9ERUZB
VUxUX1BPUlRfVkFMVUUoRU5BQkxFX1JFU09VUkNFX1VTQUdFIFBSSVZBVEUgT04pCkBAIC0yMDYs
NiArMjEwLDE0IEBAIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9USUxFRF9CQUNLSU5HX1NU
T1JFIFRSVUUpCiBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfQ09PUkRJTkFURURfR1JBUEhJ
Q1MgVFJVRSkKIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9OSUNPU0lBIFRSVUUpCiAKK2lm
IChOT1QgUkVOREVSSU5HX1BBVVNFX1NJR05BTF9JRCBTVFJFUVVBTCAiT0ZGIikKKyAgYWRkX2Rl
ZmluaXRpb25zKCItRFJFTkRFUklOR19QQVVTRV9TSUdOQUw9JHtSRU5ERVJJTkdfUEFVU0VfU0lH
TkFMX0lEfSIpCitlbmRpZiAoKQorCitpZiAoTk9UIFJFTkRFUklOR19SRVNVTUVfU0lHTkFMX0lE
IFNUUkVRVUFMICJPRkYiKQorICBhZGRfZGVmaW5pdGlvbnMoIi1EUkVOREVSSU5HX1JFU1VNRV9T
SUdOQUw9JHtSRU5ERVJJTkdfUkVTVU1FX1NJR05BTF9JRH0iKQorZW5kaWYgKCkKKwogIyBPdmVy
cmlkZSB0aGUgY2FjaGVkIHZhcmlhYmxlLCBndGstZG9jIGRvZXMgbm90IHJlYWxseSB3b3JrIHdo
ZW4gY3Jvc3MtYnVpbGRpbmcgb3IgYnVpbGRpbmcgb24gTWFjLgogaWYgKENNQUtFX0NST1NTQ09N
UElMSU5HIE9SIEFQUExFKQogICAgIHNldChFTkFCTEVfR1RLRE9DIE9GRikKZGlmZiAtLWdpdCBh
L0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA4ZTRjYjEyY2YxODUzMzg2OTQ1ODQ1ODczYjE5
MjgwMTA3YjAxMDllLi44MmY4Y2ZhNWRjY2UwN2M5ODE5NjE5OWQzMGJjNzY5ZmI1MzAzMDFkIDEw
MDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIw
MjAtMDItMTQgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgorCisgICAg
ICAgIFtXUEVdIEFQSSBmb3IgcGF1c2UvcmVzdW1lIHJlbmRlcmluZworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3NzU2CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc1dQ
RS5jbWFrZTogTmV3IENNYWtlIG9wdGlvbmFsIHZhcmlhYmxlcyB0bworICAgICAgICBjb25maWd1
cmUgdGhlIGJhY2tncm91bmQgZXZlbnRzIHNpbXVsYXRpb24gdHJpZ2dlcmluZyB3aXRoIFBPU0lY
CisgICAgICAgIHNpZ25hbHMuCisKIDIwMjAtMDItMTAgIE1pY2hhZWwgQ2F0YW56YXJvICA8bWNh
dGFuemFyb0Bnbm9tZS5vcmc+CiAKICAgICAgICAgW0NNYWtlXSBQcmVwZW5kIC1Xbm8tbm9leGNl
cHQtdHlwZSBvbmx5IHRvIGdsb2JhbCBDWFggZmxhZ3MK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390913</attachid>
            <date>2020-02-17 04:13:58 -0800</date>
            <delta_ts>2020-02-17 08:37:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207756-20200217121356.patch</filename>
            <type>text/plain</type>
            <size>15648</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2NzI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjdhMjM0YTY3MzZkYmUw
MjgxYjRhYmZlZjg4OWRlNmZjOTIzNjczNi4uOWY5MGExYTVmMzRmNDExNGFiOTQ0ODgwN2JiYWQ3
NGM2ZGU4OWQyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDIwLTAyLTE0ICBQaGls
aXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbV1BFXSBBUEkg
Zm9yIHBhdXNlL3Jlc3VtZSByZW5kZXJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwNzc1NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEdTdHJlYW1lciBwb3J0cyB3aWxsIG5vdyBwYXVzZSBwbGF5YmFj
ayB3aGVuIHRoZSBtZWRpYSBlbGVtZW50IGlzCisgICAgICAgIHN1c3BlbmRlZC4gUGxheWJhY2sg
d2lsbCBiZSByZXN1bWVkIHdoZW4gdGhlIG1lZGlhIGVsZW1lbnQgaXMKKyAgICAgICAgcmVzdW1l
ZC4KKworICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MTWVkaWFFbGVtZW50OjpIVE1MTWVkaWFFbGVtZW50KToKKyAgICAgICAgKiBodG1s
L0hUTUxNZWRpYUVsZW1lbnQuaDoKKwogMjAyMC0wMi0xNyAgQ2FybG9zIEdhcmNpYSBDYW1wb3Mg
IDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgU2VhcmNoIGNhbmNlbCBidXR0b24gYmVj
b21lcyB2aXNpYmxlIHdoZW4gdGhlcmUncyBhIGhvdmVyIGVmZmVjdCBpbiBDU1MKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5k
ZXggMDAxNDE0YTQwYTVmMDRiYjEzY2RjYzA3ZjVmYTE5MDFlNThhNmI4Mi4uY2FmY2MxNzBlMmVm
NDFlNmJhZGMzN2VhNTE4MDhiNzM4NWI1ODI4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAor
MjAyMC0wMi0xNCAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CisKKyAg
ICAgICAgW1dQRV0gQVBJIGZvciBwYXVzZS9yZXN1bWUgcmVuZGVyaW5nCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDc3NTYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBIG5ldyBwcm9wZXJ0eSBpcyBhZGRl
ZCBpbiB0aGUgV2ViVmlldyB0byBjb250cm9sIHRoZSByZW5kZXJpbmcKKyAgICAgICAgc3RhdGUu
IFdoZW4gdGhpcyBwcm9wZXJ0eSBpcyBzZXQgdG8gVFJVRSwgYWxsIGFuaW1hdGlvbnMgYW5kIG1l
ZGlhCisgICAgICAgIHBsYXliYWNrIHdpbGwgYmUgcGF1c2VkLgorCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXcuY3BwOgorICAgICAgICAod3BlVUlQcm9jZXNzU2ln
bmFsSGFuZGxlcik6CisgICAgICAgICh3cGVDaGVja1NpZ25hbHMpOgorICAgICAgICAod2Via2l0
V2ViVmlld0NvbnN0cnVjdGVkKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdTZXRQcm9wZXJ0eSk6
CisgICAgICAgICh3ZWJraXRXZWJWaWV3R2V0UHJvcGVydHkpOgorICAgICAgICAod2Via2l0V2Vi
Vmlld0Rpc3Bvc2UpOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFdlYlZpZXcuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL3dwZS9XZWJLaXRXZWJWaWV3V1BFLmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJf
dmlld19zZXRfaXNfcmVuZGVyaW5nX3BhdXNlZCk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdf
aXNfcmVuZGVyaW5nX3BhdXNlZCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvZG9jcy93
cGUtMS4wLXNlY3Rpb25zLnR4dDoKKwogMjAyMC0wMi0xNiAgRnVqaWkgSGlyb25vcmkgIDxIaXJv
bm9yaS5GdWppaUBzb255LmNvbT4KIAogICAgICAgICBSZW1vdmUgcmVtYWluaW5nIFdURl9FWFBP
UlQgYW5kIFdURl9JTVBPUlQgYnkgcmVwbGFjaW5nIHRoZW0gd2l0aCBXVEZfRVhQT1JUX0RFQ0xB
UkFUSU9OIGFuZCBXVEZfSU1QT1JUX0RFQ0xBUkFUSU9OCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
TWVkaWFFbGVtZW50LmNwcAppbmRleCBhNzNiYzBiNGMyZmVlYjMxM2RmZTc3NWM4OGQ4ZWE5ZDA5
OWEwYmY1Li40NTI4YjIxNWVjYzJiMjQ0NjhhMGVmNWVkYmVkZGY5M2UzNzM2NjNhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKQEAgLTU3NDAsNiArNTc0MCwxNyBA
QCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnN1c3BlbmQoUmVhc29uRm9yU3VzcGVuc2lvbiByZWFz
b24pCiAgICAgICAgIG1fbWVkaWFTZXNzaW9uLT5hZGRCZWhhdmlvclJlc3RyaWN0aW9uKE1lZGlh
RWxlbWVudFNlc3Npb246OlJlcXVpcmVQYWdlQ29uc2VudFRvUmVzdW1lTWVkaWEpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIFJlYXNvbkZvclN1c3BlbnNpb246OlBhZ2VXaWxsQmVTdXNwZW5k
ZWQ6CisjaWYgVVNFKEdTVFJFQU1FUikKKyAgICAgICAgaWYgKCFtX3BhdXNlZEludGVybmFsKSB7
CisgICAgICAgICAgICBtX3Nob3VsZFBsYXlPblJlc3VtZSA9IHRydWU7CisgICAgICAgICAgICAv
LyBzZXRQYXVzZWRJbnRlcm5hbCgpIGNhbid0IGJlIHVzZWQgaGVyZSBiZWNhdXNlIHRoZSB0YXNr
IGl0CisgICAgICAgICAgICAvLyBzY2hlZHVsZXMgaW4gdGhlIGV2ZW50IGxvb3AgbWlnaHQgYmUg
ZmlyZWQgYWZ0ZXIgc3VzcGVuc2lvbiB0b29rCisgICAgICAgICAgICAvLyBlZmZlY3QuCisgICAg
ICAgICAgICBtX3BhdXNlZEludGVybmFsID0gdHJ1ZTsKKyAgICAgICAgICAgIHVwZGF0ZVBsYXlT
dGF0ZSgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworI2VuZGlmCiAgICAgY2FzZSBSZWFz
b25Gb3JTdXNwZW5zaW9uOjpKYXZhU2NyaXB0RGVidWdnZXJQYXVzZWQ6CiAgICAgY2FzZSBSZWFz
b25Gb3JTdXNwZW5zaW9uOjpXaWxsRGVmZXJMb2FkaW5nOgogICAgICAgICAvLyBEbyBub3RoaW5n
LCB3ZSBkb24ndCBwYXVzZSBtZWRpYSBwbGF5YmFjayBpbiB0aGVzZSBjYXNlcy4KQEAgLTU3NTMs
NiArNTc2NCwxMyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnJlc3VtZSgpCiAKICAgICBzZXRJ
bkFjdGl2ZURvY3VtZW50KHRydWUpOwogCisjaWYgVVNFKEdTVFJFQU1FUikKKyAgICBpZiAobV9z
aG91bGRQbGF5T25SZXN1bWUpIHsKKyAgICAgICAgbV9zaG91bGRQbGF5T25SZXN1bWUgPSBmYWxz
ZTsKKyAgICAgICAgc2V0UGF1c2VkSW50ZXJuYWwoZmFsc2UpOworICAgIH0KKyNlbmRpZgorCiAg
ICAgaWYgKCFtX21lZGlhU2Vzc2lvbi0+cGFnZUFsbG93c1BsYXliYWNrQWZ0ZXJSZXN1bWluZygp
KQogICAgICAgICBkb2N1bWVudCgpLmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigqdGhpcyk7CiAg
ICAgZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAppbmRleCA1NTIyZjhj
ZTUyYTAzOTc3MDg2ZWJkNjAzOTRiNmI5YTgxMmU1ODViLi43ZWNjZjllZWIwZTQ4NzRhMDY0MmVh
ZWE2Njg1MzAzYmUwN2NiNmQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZWRpYUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQu
aApAQCAtMTIxMCw2ICsxMjEwLDEwIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzUGxheWluZ1Rv
V2lyZWxlc3NUYXJnZXQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9wbGF5aW5nT25TZWNvbmRTY3Jl
ZW4geyBmYWxzZSB9OwogICAgIGJvb2wgbV9yZW1vdmVkQmVoYXZpb3JSZXN0cmljdGlvbnNBZnRl
ckZpcnN0VXNlckdlc3R1cmUgeyBmYWxzZSB9OworCisjaWYgVVNFKEdTVFJFQU1FUikKKyAgICBi
b29sIG1fc2hvdWxkUGxheU9uUmVzdW1lIHsgZmFsc2UgfTsKKyNlbmRpZgogfTsKIAogU3RyaW5n
IGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKEhUTUxNZWRpYUVsZW1lbnQ6OkF1dG9wbGF5RXZl
bnRQbGF5YmFja1N0YXRlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9nbGliL1dlYktpdFdlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2ds
aWIvV2ViS2l0V2ViVmlldy5jcHAKaW5kZXggOTYzMzI2OTAzOWFlZDg1ZTE5OTNiMjM0NDczNTA5
YjRlY2IzOWI3OS4uYjljYTI5ZThmNmM3MTA1NzA3YWUwNzRjMTgwZTFkN2UyMGExYjhhMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlldy5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlldy5j
cHAKQEAgLTIwMCw3ICsyMDAsMTEgQEAgZW51bSB7CiAgICAgUFJPUF9JU19DT05UUk9MTEVEX0JZ
X0FVVE9NQVRJT04sCiAgICAgUFJPUF9BVVRPTUFUSU9OX1BSRVNFTlRBVElPTl9UWVBFLAogICAg
IFBST1BfRURJVEFCTEUsCi0gICAgUFJPUF9QQUdFX0lECisgICAgUFJPUF9QQUdFX0lELAorCisj
aWYgUExBVEZPUk0oV1BFKQorICAgIFBST1BfSVNfUkVOREVSSU5HX1BBVVNFRCwKKyNlbmRpZgog
fTsKIAogdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBHUmVmUHRyPFdlYktpdFdlYlJlc291cmNl
PiA+IExvYWRpbmdSZXNvdXJjZXNNYXA7CkBAIC0zMDIsNiArMzA2LDggQEAgc3RydWN0IF9XZWJL
aXRXZWJWaWV3UHJpdmF0ZSB7CiAgICAgR1JlZlB0cjxXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVl
c3Q+IGF1dGhlbnRpY2F0aW9uUmVxdWVzdDsKIAogICAgIEdSZWZQdHI8V2ViS2l0V2Vic2l0ZURh
dGFNYW5hZ2VyPiB3ZWJzaXRlRGF0YU1hbmFnZXI7CisKKyAgICB1bnNpZ25lZCBzaWduYWxDaGVj
a1NvdXJjZUlEIHsgMCB9OwogfTsKIAogc3RhdGljIGd1aW50IHNpZ25hbHNbTEFTVF9TSUdOQUxd
ID0geyAwLCB9OwpAQCAtNzI5LDYgKzczNSw0MCBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2Vi
Vmlld1Nob3dOb3RpZmljYXRpb24oV2ViS2l0V2ViVmlldyosIFdlYktpdE5vdGlmaWNhdGlvbgog
I2VuZGlmCiB9CiAKKworI2lmIEhBVkVfU0lHTkFMX0ggJiYgUExBVEZPUk0oV1BFKSAmJiBkZWZp
bmVkKFJFTkRFUklOR19QQVVTRV9TSUdOQUwpICYmIGRlZmluZWQoUkVOREVSSU5HX1JFU1VNRV9T
SUdOQUwpCisKK3N0YXRpYyBib29sIHNfc2VuZFBhdXNlUmVuZGVyaW5nUGVuZGluZyA9IHRydWU7
CitzdGF0aWMgYm9vbCBzX3NlbmRSZXN1bWVSZW5kZXJpbmdQZW5kaW5nID0gZmFsc2U7CisKK3N0
YXRpYyB2b2lkIHdwZVVJUHJvY2Vzc1NpZ25hbEhhbmRsZXIoaW50IHNpZykKK3sKKyAgICAvLyBS
ZXNldCB0aGUgc2lnbmFsIGhhbmRsZXIuCisgICAgc2lnbmFsKHNpZywgd3BlVUlQcm9jZXNzU2ln
bmFsSGFuZGxlcik7CisKKyAgICBpZiAoc2lnID09IFJFTkRFUklOR19QQVVTRV9TSUdOQUwpCisg
ICAgICAgIHNfc2VuZFBhdXNlUmVuZGVyaW5nUGVuZGluZyA9IHRydWU7CisgICAgZWxzZSBpZiAo
c2lnID09IFJFTkRFUklOR19SRVNVTUVfU0lHTkFMKQorICAgICAgICBzX3NlbmRSZXN1bWVSZW5k
ZXJpbmdQZW5kaW5nID0gdHJ1ZTsKK30KKworc3RhdGljIGdib29sZWFuIHdwZUNoZWNrU2lnbmFs
cyhncG9pbnRlciBkYXRhKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRf
V0VCX1ZJRVcoZGF0YSk7CisKKyAgICBpZiAoc19zZW5kUGF1c2VSZW5kZXJpbmdQZW5kaW5nKSB7
CisgICAgICAgIHdlYmtpdF93ZWJfdmlld19zZXRfaXNfcmVuZGVyaW5nX3BhdXNlZCh3ZWJWaWV3
LCB0cnVlKTsKKyAgICAgICAgc19zZW5kUGF1c2VSZW5kZXJpbmdQZW5kaW5nID0gZmFsc2U7Cisg
ICAgfQorCisgICAgaWYgKHNfc2VuZFJlc3VtZVJlbmRlcmluZ1BlbmRpbmcpIHsKKyAgICAgICAg
d2Via2l0X3dlYl92aWV3X3NldF9pc19yZW5kZXJpbmdfcGF1c2VkKHdlYlZpZXcsIGZhbHNlKTsK
KyAgICAgICAgc19zZW5kUmVzdW1lUmVuZGVyaW5nUGVuZGluZyA9IGZhbHNlOworICAgIH0KKyAg
ICByZXR1cm4gR19TT1VSQ0VfQ09OVElOVUU7Cit9CisjZW5kaWYKKwogc3RhdGljIHZvaWQgd2Vi
a2l0V2ViVmlld0NvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKIHsKICAgICBHX09CSkVDVF9D
TEFTUyh3ZWJraXRfd2ViX3ZpZXdfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0ZWQob2JqZWN0KTsK
QEAgLTc4Niw2ICs4MjYsMTkgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0NvbnN0cnVjdGVk
KEdPYmplY3QqIG9iamVjdCkKIAogICAgIHByaXYtPmJhY2tGb3J3YXJkTGlzdCA9IGFkb3B0R1Jl
Zih3ZWJraXRCYWNrRm9yd2FyZExpc3RDcmVhdGUoJmdldFBhZ2Uod2ViVmlldykuYmFja0Zvcndh
cmRMaXN0KCkpKTsKICAgICBwcml2LT53aW5kb3dQcm9wZXJ0aWVzID0gYWRvcHRHUmVmKHdlYmtp
dFdpbmRvd1Byb3BlcnRpZXNDcmVhdGUoKSk7CisKKworI2lmIEhBVkVfU0lHTkFMX0ggJiYgUExB
VEZPUk0oV1BFKSAmJiBkZWZpbmVkKFJFTkRFUklOR19QQVVTRV9TSUdOQUwpICYmIGRlZmluZWQo
UkVOREVSSU5HX1JFU1VNRV9TSUdOQUwpCisgICAgdm9pZCAoKnBhdXNlSGFuZGxlcikoaW50KSA9
IHNpZ25hbChSRU5ERVJJTkdfUEFVU0VfU0lHTkFMLCB3cGVVSVByb2Nlc3NTaWduYWxIYW5kbGVy
KTsKKyAgICBpZiAocGF1c2VIYW5kbGVyICE9IFNJR19ERkwpCisgICAgICAgIHNpZ25hbChSRU5E
RVJJTkdfUEFVU0VfU0lHTkFMLCBwYXVzZUhhbmRsZXIpOworCisgICAgdm9pZCAoKnJlc3VtZUhh
bmRsZXIpKGludCkgPSBzaWduYWwoUkVOREVSSU5HX1JFU1VNRV9TSUdOQUwsIHdwZVVJUHJvY2Vz
c1NpZ25hbEhhbmRsZXIpOworICAgIGlmIChyZXN1bWVIYW5kbGVyICE9IFNJR19ERkwpCisgICAg
ICAgIHNpZ25hbChSRU5ERVJJTkdfUkVTVU1FX1NJR05BTCwgcmVzdW1lSGFuZGxlcik7CisKKyAg
ICBwcml2LT5zaWduYWxDaGVja1NvdXJjZUlEID0gZ19pZGxlX2FkZF9mdWxsKEdfUFJJT1JJVFlf
REVGQVVMVCwgd3BlQ2hlY2tTaWduYWxzLCBnX29iamVjdF9yZWYod2ViVmlldyksIGdfb2JqZWN0
X3VucmVmKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3U2V0UHJvcGVy
dHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQ
YXJhbVNwZWMqIHBhcmFtU3BlYykKQEAgLTc5OSw2ICs4NTIsOSBAQCBzdGF0aWMgdm9pZCB3ZWJr
aXRXZWJWaWV3U2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSWQsIGNvbnN0
IEdWYWx1ZQogICAgICAgICB3ZWJWaWV3LT5wcml2LT5iYWNrZW5kID0gYmFja2VuZCA/IGFkb3B0
R1JlZihzdGF0aWNfY2FzdDxXZWJLaXRXZWJWaWV3QmFja2VuZCo+KGJhY2tlbmQpKSA6IG51bGxw
dHI7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICBjYXNlIFBST1BfSVNfUkVOREVSSU5HX1BB
VVNFRDoKKyAgICAgICAgd2Via2l0X3dlYl92aWV3X3NldF9pc19yZW5kZXJpbmdfcGF1c2VkKHdl
YlZpZXcsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CiAjZW5k
aWYKICAgICBjYXNlIFBST1BfV0VCX0NPTlRFWFQ6IHsKICAgICAgICAgZ3BvaW50ZXIgd2ViQ29u
dGV4dCA9IGdfdmFsdWVfZ2V0X29iamVjdCh2YWx1ZSk7CkBAIC04NDksNiArOTA1LDkgQEAgc3Rh
dGljIHZvaWQgd2Via2l0V2ViVmlld0dldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQg
cHJvcElkLCBHVmFsdWUqIHZhbHUKICAgICBjYXNlIFBST1BfQkFDS0VORDoKICAgICAgICAgZ192
YWx1ZV9zZXRfc3RhdGljX2JveGVkKHZhbHVlLCB3ZWJWaWV3LT5wcml2LT5iYWNrZW5kLmdldCgp
KTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0lTX1JFTkRFUklOR19QQVVTRUQ6Cisg
ICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF93ZWJfdmlld19pc19yZW5k
ZXJpbmdfcGF1c2VkKHdlYlZpZXcpKTsKKyAgICAgICAgYnJlYWs7CiAjZW5kaWYKICAgICBjYXNl
IFBST1BfV0VCX0NPTlRFWFQ6CiAgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Vi
Vmlldy0+cHJpdi0+Y29udGV4dC5nZXQoKSk7CkBAIC05MzMsNiArOTkyLDExIEBAIHN0YXRpYyB2
b2lkIHdlYmtpdFdlYlZpZXdEaXNwb3NlKEdPYmplY3QqIG9iamVjdCkKICAgICAgICAgQVNTRVJU
KCF3ZWJWaWV3LT5wcml2LT5jdXJyZW50U2NyaXB0RGlhbG9nKTsKICAgICB9CiAKKyAgICBpZiAo
d2ViVmlldy0+cHJpdi0+c2lnbmFsQ2hlY2tTb3VyY2VJRCkgeworICAgICAgICBnX3NvdXJjZV9y
ZW1vdmUod2ViVmlldy0+cHJpdi0+c2lnbmFsQ2hlY2tTb3VyY2VJRCk7CisgICAgICAgIHdlYlZp
ZXctPnByaXYtPnNpZ25hbENoZWNrU291cmNlSUQgPSAwOworICAgIH0KKwogI2lmIFBMQVRGT1JN
KFdQRSkKICAgICB3ZWJWaWV3LT5wcml2LT52aWV3LT5jbG9zZSgpOwogI2VuZGlmCkBAIC05ODQs
NiArMTA0OCwyNCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXZWJL
aXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICAgICAgICAgIF8oIlRoZSBiYWNrZW5k
IGZvciB0aGUgd2ViIHZpZXciKSwKICAgICAgICAgICAgIFdFQktJVF9UWVBFX1dFQl9WSUVXX0JB
Q0tFTkQsCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxHUGFyYW1GbGFncz4oV0VCS0lUX1BBUkFN
X1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKSk7CisKKyAgICAvKioKKyAgICAg
KiBXZWJLaXRXZWJWaWV3OmlzLXJlbmRlcmluZy1wYXVzZWQ6CisgICAgICoKKyAgICAgKiBXaGV0
aGVyIG9yIG5vdCByZW5kZXJpbmcgKGluY2x1ZGluZyBtZWRpYSBwbGF5YmFjaywgYW5pbWF0aW9u
cywgV2ViR0wpIGlzCisgICAgICogcGF1c2VkLgorICAgICAqCisgICAgICogU2luY2U6IDIuMzAK
KyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
T2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQkFDS0VORCwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X2Jvb2xlYW4oCisgICAgICAgICAgICAiaXMtcmVuZGVyaW5nLXBhdXNlZCIsCisgICAgICAgICAg
ICBfKCJJcyBSZW5kZXJpbmcgUGF1c2VkIiksCisgICAgICAgICAgICBfKCJJbmRpY2F0aW9uIG9m
IHRoZSBXZWJWaWV3IHJlbmRlcmluZyBzdGF0ZSIpLAorICAgICAgICAgICAgRkFMU0UsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CiAjZW5kaWYKIAogICAgIC8qKgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRXZWJWaWV3Lmgg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFdlYlZpZXcuaAppbmRleCAy
YjJkNzhkMWJiNTNhMmZmZGI3MGMyYTRiZGJjODg0YWY2MDM2ZjYwLi4yMDM1YWM4MGE4MjE3ODcw
M2U3ZTRjZDkzNGQ4MmU2NzczZjhhYTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvd3BlL1dlYktpdFdlYlZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvd3BlL1dlYktpdFdlYlZpZXcuaApAQCAtNTU0LDYgKzU1NCwxMyBAQCB3ZWJraXRfd2Vi
X3ZpZXdfc2V0X2lucHV0X21ldGhvZF9jb250ZXh0ICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3
CiBXRUJLSVRfQVBJIFdlYktpdElucHV0TWV0aG9kQ29udGV4dCAqCiB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X2lucHV0X21ldGhvZF9jb250ZXh0ICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAg
ICAgICAgICAgKndlYl92aWV3KTsKIAorV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfd2ViX3ZpZXdf
c2V0X2lzX3JlbmRlcmluZ19wYXVzZWQgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAg
ICAgICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gICAgICAgICAgICAgICAgICAgICB2YWx1ZSk7CisK
K1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF93ZWJfdmlld19pc19yZW5kZXJpbmdfcGF1c2Vk
ICAgICAgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgICAqd2ViX3ZpZXcp
OworCiBHX0VORF9ERUNMUwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS93cGUvV2ViS2l0V2ViVmlld1dQRS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvd3BlL1dlYktpdFdlYlZpZXdXUEUuY3BwCmluZGV4IDllNWNlNWMzODk2ZjgwOTdi
YjY1Y2MzMWYzZDkyZGIwMTA0YTYwM2IuLjE4MmYzZGE1Y2EzNTgwYWVlYTI3MTI1NDY1ZjA1NWNk
YjkzMjEwMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2Vi
S2l0V2ViVmlld1dQRS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9X
ZWJLaXRXZWJWaWV3V1BFLmNwcApAQCAtMjIwLDMgKzIyMCw0MiBAQCB2b2lkIHdlYmtpdF93ZWJf
dmlld19nZXRfYmFja2dyb3VuZF9jb2xvcihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRD
b2xvciogYwogICAgIGF1dG8mIHdlYkNvcmVDb2xvciA9IHBhZ2UuYmFja2dyb3VuZENvbG9yKCk7
CiAgICAgd2Via2l0Q29sb3JGaWxsRnJvbVdlYkNvcmVDb2xvcih3ZWJDb3JlQ29sb3IudmFsdWVP
cihXZWJDb3JlOjpDb2xvcjo6d2hpdGUpLCBjb2xvcik7CiB9CisKKy8qKgorICogd2Via2l0X3dl
Yl92aWV3X3NldF9pc19yZW5kZXJpbmdfcGF1c2VkOgorICogQHdlYl92aWV3OiBhICNXZWJLaXRX
ZWJWaWV3CisgKiBAdmFsdWU6IGEgI2dib29sZWFuCisgKgorICogUGF1c2Ugb3IgcmVzdW1lIERP
TSBvYmplY3RzLCBhbmltYXRpb25zIGFuZCBtZWRpYSBwbGF5YmFjay4KKyAqCisgKiBTaW5jZTog
Mi4zMAorICovCit2b2lkIHdlYmtpdF93ZWJfdmlld19zZXRfaXNfcmVuZGVyaW5nX3BhdXNlZChX
ZWJLaXRXZWJWaWV3ICp3ZWJWaWV3LCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSk7CisgICAgYXV0byYgcGFnZSA9IHdl
YmtpdFdlYlZpZXdHZXRQYWdlKHdlYlZpZXcpOworCisgICAgaWYgKHZhbHVlKSB7CisgICAgICAg
IHBhZ2Uuc3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7CisgICAgICAgIHBh
Z2Uuc3VzcGVuZEFsbE1lZGlhUGxheWJhY2soKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwYWdl
LnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7CisgICAgICAgIHBhZ2UucmVz
dW1lQWxsTWVkaWFQbGF5YmFjaygpOworICAgIH0KK30KKworLyoqCisgKiB3ZWJraXRfd2ViX3Zp
ZXdfaXNfcmVuZGVyaW5nX3BhdXNlZDoKKyAqIEB3ZWJfdmlldzogYSAjV2ViS2l0V2ViVmlldwor
ICoKKyAqIFJldHVybnM6IGEgI2dib29sZWFuIGluZGljYXRpbmcgaWYgRE9NIG9iamVjdHMsIGFu
aW1hdGlvbnMgYW5kIG1lZGlhIHBsYXliYWNrCisgKiByZW5kZXJpbmcgaXMgZW5hYmxlZCBvciBu
b3QuCisgKgorICogU2luY2U6IDIuMzAKKyAqLworZ2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3X2lz
X3JlbmRlcmluZ19wYXVzZWQoV2ViS2l0V2ViVmlldyAqd2ViVmlldykKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldyksIEZBTFNFKTsKKyAgICBh
dXRvJiBwYWdlID0gd2Via2l0V2ViVmlld0dldFBhZ2Uod2ViVmlldyk7CisgICAgcmV0dXJuIHBh
Z2UuYXJlQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnNTdXNwZW5kZWQoKTsKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvZG9jcy93cGUtMS4wLXNlY3Rp
b25zLnR4dCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvZG9jcy93cGUtMS4wLXNl
Y3Rpb25zLnR4dAppbmRleCAwYzJkYzY1MTVjNjZiNzk1NzdhN2Q1ODA3Y2E0YTBmYmM1ZDA3NTM5
Li45YzdkZWYzZGY2Nzk1MGU2MWE2NTM1MWNiNzU3NTk2MDYxNjkwNTBlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL2RvY3Mvd3BlLTEuMC1zZWN0aW9ucy50eHQK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9kb2NzL3dwZS0xLjAtc2VjdGlv
bnMudHh0CkBAIC0yNTcsNiArMjU3LDggQEAgd2Via2l0X3dlYl92aWV3X3NlbmRfbWVzc2FnZV90
b19wYWdlCiB3ZWJraXRfd2ViX3ZpZXdfc2VuZF9tZXNzYWdlX3RvX3BhZ2VfZmluaXNoCiB3ZWJr
aXRfd2ViX3ZpZXdfc2V0X2lucHV0X21ldGhvZF9jb250ZXh0CiB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X2lucHV0X21ldGhvZF9jb250ZXh0Cit3ZWJraXRfd2ViX3ZpZXdfaXNfcmVuZGVyaW5nX3BhdXNl
ZAord2Via2l0X3dlYl92aWV3X3NldF9pc19yZW5kZXJpbmdfcGF1c2VkCiAKIDxTVUJTRUNUSU9O
IFdlYktpdEphdmFzY3JpcHRSZXN1bHQ+CiBXZWJLaXRKYXZhc2NyaXB0UmVzdWx0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc1dQRS5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25z
V1BFLmNtYWtlCmluZGV4IDkyNWM3OTc3ODQ5OGRmZDc2MjE0ZDgwYWQzN2I0Njc1MzY2NGE5Yzcu
LmVkNTk2ZTVlMTEyMDY0N2M1ZmE0NWQxMDA3MTQ1MTA3NjUwOWUwN2IgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9jbWFrZS9PcHRpb25zV1BFLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zV1BF
LmNtYWtlCkBAIC03OCw2ICs3OCwxMCBAQCBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfV1BF
X1FUX0FQSSAiV2hldGhlciB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIFF0NS9RTQogV0VCS0lU
X09QVElPTl9ERUZJTkUoVVNFX0dTVFJFQU1FUl9IT0xFUFVOQ0ggIldoZXRoZXIgdG8gZW5hYmxl
IEdTdHJlYW1lciBob2xlcHVuY2giIFBSSVZBVEUgT0ZGKQogV0VCS0lUX09QVElPTl9ERUZJTkUo
VVNFX0VYVEVSTkFMX0hPTEVQVU5DSCAiV2hldGhlciB0byBlbmFibGUgZXh0ZXJuYWwgaG9sZXB1
bmNoIiBQUklWQVRFIE9GRikKIAorIyBpT1MvQW5kcm9pZCBiYWNrZ3JvdW5kaW5nIGV2ZW50cyBz
aW11bGF0aW9uIHdpdGggUE9TSVggc2lnbmFscy4KK1dFQktJVF9PUFRJT05fREVGSU5FKFJFTkRF
UklOR19QQVVTRV9TSUdOQUxfSUQgIlNpZ25hbCBudW1iZXIgdXNlZCB0byBwYXVzZSByZW5kZXJp
bmcsIG9yICdPRkYnIiBQUklWQVRFICJPRkYiKQorV0VCS0lUX09QVElPTl9ERUZJTkUoUkVOREVS
SU5HX1JFU1VNRV9TSUdOQUxfSUQgIlNpZ25hbCBudW1iZXIgdXNlZCB0byByZXN1bWUgcmVuZGVy
aW5nLCBvciAnT0ZGJyIgUFJJVkFURSAiT0ZGIikKKwogaWYgKENNQUtFX1NZU1RFTV9OQU1FIE1B
VENIRVMgIkxpbnV4IikKICAgICBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFC
TEVfTUVNT1JZX1NBTVBMRVIgUFJJVkFURSBPTikKICAgICBXRUJLSVRfT1BUSU9OX0RFRkFVTFRf
UE9SVF9WQUxVRShFTkFCTEVfUkVTT1VSQ0VfVVNBR0UgUFJJVkFURSBPTikKQEAgLTIwNiw2ICsy
MTAsMjIgQEAgU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX1RJTEVEX0JBQ0tJTkdfU1RPUkUg
VFJVRSkKIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9DT09SRElOQVRFRF9HUkFQSElDUyBU
UlVFKQogU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX05JQ09TSUEgVFJVRSkKIAoraWYgKE5P
VCBSRU5ERVJJTkdfUEFVU0VfU0lHTkFMX0lEIFNUUkVRVUFMICJPRkYiKQorICAgIHN0cmluZyhS
RUdFWCBNQVRDSCAiKFswLTldKykiIFJFTkRFUklOR19QQVVTRV9TSUdOQUxfSURfVkFMVUUgJHtS
RU5ERVJJTkdfUEFVU0VfU0lHTkFMX0lEfSkKKyAgICBpZiAoQ01BS0VfTUFUQ0hfMSBMRVNTIDMy
KQorICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJVc2Ugb2YgcmVzZXJ2ZWQgc2lnbmFsICR7
UkVOREVSSU5HX1BBVVNFX1NJR05BTF9JRH0gZm9yIHBhdXNpbmcgcmVuZGVyaW5nIGlzIG5vdCBh
bGxvd2VkIikKKyAgICBlbmRpZiAoKQorICAgIGFkZF9kZWZpbml0aW9ucygiLURSRU5ERVJJTkdf
UEFVU0VfU0lHTkFMPSR7UkVOREVSSU5HX1BBVVNFX1NJR05BTF9JRH0iKQorZW5kaWYgKCkKKwor
aWYgKE5PVCBSRU5ERVJJTkdfUkVTVU1FX1NJR05BTF9JRCBTVFJFUVVBTCAiT0ZGIikKKyAgICBz
dHJpbmcoUkVHRVggTUFUQ0ggIihbMC05XSspIiBSRU5ERVJJTkdfUkVTVU1FX1NJR05BTF9JRF9W
QUxVRSAke1JFTkRFUklOR19SRVNVTUVfU0lHTkFMX0lEfSkKKyAgICBpZiAoQ01BS0VfTUFUQ0hf
MSBMRVNTIDMyKQorICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJVc2Ugb2YgcmVzZXJ2ZWQg
c2lnbmFsICR7UkVOREVSSU5HX1JFU1VNRV9TSUdOQUxfSUR9IGZvciByZXN1bWluZyByZW5kZXJp
bmcgaXMgbm90IGFsbG93ZWQiKQorICAgIGVuZGlmICgpCisgICAgYWRkX2RlZmluaXRpb25zKCIt
RFJFTkRFUklOR19SRVNVTUVfU0lHTkFMPSR7UkVOREVSSU5HX1JFU1VNRV9TSUdOQUxfSUR9IikK
K2VuZGlmICgpCisKICMgT3ZlcnJpZGUgdGhlIGNhY2hlZCB2YXJpYWJsZSwgZ3RrLWRvYyBkb2Vz
IG5vdCByZWFsbHkgd29yayB3aGVuIGNyb3NzLWJ1aWxkaW5nIG9yIGJ1aWxkaW5nIG9uIE1hYy4K
IGlmIChDTUFLRV9DUk9TU0NPTVBJTElORyBPUiBBUFBMRSkKICAgICBzZXQoRU5BQkxFX0dUS0RP
QyBPRkYpCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggOGRmMDk4NDNi
ODU1NmUwOGI2MzA5YzMwOTJjNjM4NjJiYWRlOWVmOS4uZjczMjI3ZmFlMDhmYjk2NDVkMzAzNTE3
NDBiODg1OGQ2NTZjMDI4ZiAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE0IEBACisyMDIwLTAyLTE0ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRA
aWdhbGlhLmNvbT4KKworICAgICAgICBbV1BFXSBBUEkgZm9yIHBhdXNlL3Jlc3VtZSByZW5kZXJp
bmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzc1
NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU291
cmNlL2NtYWtlL09wdGlvbnNXUEUuY21ha2U6IE5ldyBDTWFrZSBvcHRpb25hbCB2YXJpYWJsZXMg
dG8KKyAgICAgICAgY29uZmlndXJlIHRoZSBiYWNrZ3JvdW5kIGV2ZW50cyBzaW11bGF0aW9uIHRy
aWdnZXJpbmcgd2l0aCBQT1NJWAorICAgICAgICBzaWduYWxzLgorCiAyMDIwLTAyLTE0ICBEb24g
T2xtc3RlYWQgIDxkb24ub2xtc3RlYWRAc29ueS5jb20+CiAKICAgICAgICAgW0NNYWtlXSBBZGQg
Rm9udGNvbmZpZzo6Rm9udGNvbmZpZyB0YXJnZXQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390922</attachid>
            <date>2020-02-17 08:37:53 -0800</date>
            <delta_ts>2020-02-20 03:19:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207756-20200217163751.patch</filename>
            <type>text/plain</type>
            <size>9852</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2NzMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDU5MGFmY2RjMWNjZmU0
MzcxZTZkZWE5OTgxMzM1ZjZiMjBlZGVkOC4uZDlhNWYxYjQ5YzExNmVhYWFjNDkwMTY1MmEwNjA4
YTUwMzgxNTBkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDIwLTAyLTE0ICBQaGls
aXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbV1BFXSBBUEkg
Zm9yIHBhdXNlL3Jlc3VtZSByZW5kZXJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwNzc1NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEdTdHJlYW1lciBwb3J0cyB3aWxsIG5vdyBwYXVzZSBwbGF5YmFj
ayB3aGVuIHRoZSBtZWRpYSBlbGVtZW50IGlzCisgICAgICAgIHN1c3BlbmRlZC4gUGxheWJhY2sg
d2lsbCBiZSByZXN1bWVkIHdoZW4gdGhlIG1lZGlhIGVsZW1lbnQgaXMKKyAgICAgICAgcmVzdW1l
ZC4KKworICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MTWVkaWFFbGVtZW50OjpIVE1MTWVkaWFFbGVtZW50KToKKyAgICAgICAgKiBodG1s
L0hUTUxNZWRpYUVsZW1lbnQuaDoKKwogMjAyMC0wMi0xNyAgWmFsYW4gQnVqdGFzICA8emFsYW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdIFRoZSBpbml0aWFsIGNvbnRhaW5pbmcgYmxvY2sg
ZG9lcyBub3QgbmVjZXNzYXJpbHkgaGF2ZSBpbi1mbG93IGNvbnRlbnQuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGNj
ZTdlN2ZjOWY1OWM5ZDhiMzZjMjYwNWY3YWNiZTRiZTY5MjY1YjUuLjRjNDczNWMwYWU0OTJjMmYz
YjQyMWUxMzRjNjIyNGQxMjMyNmQ1OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMjAt
MDItMTQgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgorCisgICAgICAg
IFtXUEVdIEFQSSBmb3IgcGF1c2UvcmVzdW1lIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3NzU2CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQSBuZXcgcHJvcGVydHkgaXMgYWRkZWQgaW4g
dGhlIFdlYlZpZXcgdG8gY29udHJvbCB0aGUgcmVuZGVyaW5nCisgICAgICAgIHN0YXRlLiBXaGVu
IHRoaXMgcHJvcGVydHkgaXMgc2V0IHRvIFRSVUUsIGFsbCBhbmltYXRpb25zIGFuZCBtZWRpYQor
ICAgICAgICBwbGF5YmFjayB3aWxsIGJlIHBhdXNlZC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZ2xpYi9XZWJLaXRXZWJWaWV3LmNwcDoKKyAgICAgICAgKHdwZVVJUHJvY2Vzc1NpZ25hbEhh
bmRsZXIpOgorICAgICAgICAod3BlQ2hlY2tTaWduYWxzKToKKyAgICAgICAgKHdlYmtpdFdlYlZp
ZXdDb25zdHJ1Y3RlZCk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3U2V0UHJvcGVydHkpOgorICAg
ICAgICAod2Via2l0V2ViVmlld0dldFByb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdE
aXNwb3NlKToKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRXZWJWaWV3Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS93cGUvV2ViS2l0V2ViVmlld1dQRS5jcHA6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdf
c2V0X2lzX3JlbmRlcmluZ19wYXVzZWQpOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2lzX3Jl
bmRlcmluZ19wYXVzZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvd3BlL2RvY3Mvd3BlLTEu
MC1zZWN0aW9ucy50eHQ6CisKIDIwMjAtMDItMTcgIERvbiBPbG1zdGVhZCAgPGRvbi5vbG1zdGVh
ZEBzb255LmNvbT4KIAogICAgICAgICBbQ01ha2VdIFVzZSBidWlsdGluIHRhcmdldHMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCmluZGV4IGE3M2JjMGI0YzJmZWViMzEz
ZGZlNzc1Yzg4ZDhlYTlkMDk5YTBiZjUuLjQ1MjhiMjE1ZWNjMmIyNDQ2OGEwZWY1ZWRiZWRkZjkz
ZTM3MzY2M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcApAQCAt
NTc0MCw2ICs1NzQwLDE3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c3VzcGVuZChSZWFzb25G
b3JTdXNwZW5zaW9uIHJlYXNvbikKICAgICAgICAgbV9tZWRpYVNlc3Npb24tPmFkZEJlaGF2aW9y
UmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVBhZ2VDb25zZW50VG9SZXN1
bWVNZWRpYSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUmVhc29uRm9yU3VzcGVuc2lvbjo6
UGFnZVdpbGxCZVN1c3BlbmRlZDoKKyNpZiBVU0UoR1NUUkVBTUVSKQorICAgICAgICBpZiAoIW1f
cGF1c2VkSW50ZXJuYWwpIHsKKyAgICAgICAgICAgIG1fc2hvdWxkUGxheU9uUmVzdW1lID0gdHJ1
ZTsKKyAgICAgICAgICAgIC8vIHNldFBhdXNlZEludGVybmFsKCkgY2FuJ3QgYmUgdXNlZCBoZXJl
IGJlY2F1c2UgdGhlIHRhc2sgaXQKKyAgICAgICAgICAgIC8vIHNjaGVkdWxlcyBpbiB0aGUgZXZl
bnQgbG9vcCBtaWdodCBiZSBmaXJlZCBhZnRlciBzdXNwZW5zaW9uIHRvb2sKKyAgICAgICAgICAg
IC8vIGVmZmVjdC4KKyAgICAgICAgICAgIG1fcGF1c2VkSW50ZXJuYWwgPSB0cnVlOworICAgICAg
ICAgICAgdXBkYXRlUGxheVN0YXRlKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisjZW5k
aWYKICAgICBjYXNlIFJlYXNvbkZvclN1c3BlbnNpb246OkphdmFTY3JpcHREZWJ1Z2dlclBhdXNl
ZDoKICAgICBjYXNlIFJlYXNvbkZvclN1c3BlbnNpb246OldpbGxEZWZlckxvYWRpbmc6CiAgICAg
ICAgIC8vIERvIG5vdGhpbmcsIHdlIGRvbid0IHBhdXNlIG1lZGlhIHBsYXliYWNrIGluIHRoZXNl
IGNhc2VzLgpAQCAtNTc1Myw2ICs1NzY0LDEzIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cmVz
dW1lKCkKIAogICAgIHNldEluQWN0aXZlRG9jdW1lbnQodHJ1ZSk7CiAKKyNpZiBVU0UoR1NUUkVB
TUVSKQorICAgIGlmIChtX3Nob3VsZFBsYXlPblJlc3VtZSkgeworICAgICAgICBtX3Nob3VsZFBs
YXlPblJlc3VtZSA9IGZhbHNlOworICAgICAgICBzZXRQYXVzZWRJbnRlcm5hbChmYWxzZSk7Cisg
ICAgfQorI2VuZGlmCisKICAgICBpZiAoIW1fbWVkaWFTZXNzaW9uLT5wYWdlQWxsb3dzUGxheWJh
Y2tBZnRlclJlc3VtaW5nKCkpCiAgICAgICAgIGRvY3VtZW50KCkuYWRkTWVkaWFDYW5TdGFydExp
c3RlbmVyKCp0aGlzKTsKICAgICBlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxNZWRpYUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVu
dC5oCmluZGV4IDU1MjJmOGNlNTJhMDM5NzcwODZlYmQ2MDM5NGI2YjlhODEyZTU4NWIuLjdlY2Nm
OWVlYjBlNDg3NGEwNjQyZWFlYTY2ODUzMDNiZTA3Y2I2ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1lZGlhRWxlbWVudC5oCkBAIC0xMjEwLDYgKzEyMTAsMTAgQEAgcHJpdmF0ZToKICAgICBi
b29sIG1faXNQbGF5aW5nVG9XaXJlbGVzc1RhcmdldCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3Bs
YXlpbmdPblNlY29uZFNjcmVlbiB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3JlbW92ZWRCZWhhdmlv
clJlc3RyaWN0aW9uc0FmdGVyRmlyc3RVc2VyR2VzdHVyZSB7IGZhbHNlIH07CisKKyNpZiBVU0Uo
R1NUUkVBTUVSKQorICAgIGJvb2wgbV9zaG91bGRQbGF5T25SZXN1bWUgeyBmYWxzZSB9OworI2Vu
ZGlmCiB9OwogCiBTdHJpbmcgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcoSFRNTE1lZGlhRWxl
bWVudDo6QXV0b3BsYXlFdmVudFBsYXliYWNrU3RhdGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3LmNwcAppbmRleCA5NjMzMjY5MDM5YWVk
ODVlMTk5M2IyMzQ0NzM1MDliNGVjYjM5Yjc5Li5jOWMzNDk0YWZmMTJkZDgyMGJiYzI0NTI4NjVm
OGJhZjMwZTIwYThhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xp
Yi9XZWJLaXRXZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xp
Yi9XZWJLaXRXZWJWaWV3LmNwcApAQCAtMjAwLDcgKzIwMCwxMSBAQCBlbnVtIHsKICAgICBQUk9Q
X0lTX0NPTlRST0xMRURfQllfQVVUT01BVElPTiwKICAgICBQUk9QX0FVVE9NQVRJT05fUFJFU0VO
VEFUSU9OX1RZUEUsCiAgICAgUFJPUF9FRElUQUJMRSwKLSAgICBQUk9QX1BBR0VfSUQKKyAgICBQ
Uk9QX1BBR0VfSUQsCisKKyNpZiBQTEFURk9STShXUEUpCisgICAgUFJPUF9JU19SRU5ERVJJTkdf
UEFVU0VELAorI2VuZGlmCiB9OwogCiB0eXBlZGVmIEhhc2hNYXA8dWludDY0X3QsIEdSZWZQdHI8
V2ViS2l0V2ViUmVzb3VyY2U+ID4gTG9hZGluZ1Jlc291cmNlc01hcDsKQEAgLTc5OSw2ICs4MDMs
OSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3U2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0
LCBndWludCBwcm9wSWQsIGNvbnN0IEdWYWx1ZQogICAgICAgICB3ZWJWaWV3LT5wcml2LT5iYWNr
ZW5kID0gYmFja2VuZCA/IGFkb3B0R1JlZihzdGF0aWNfY2FzdDxXZWJLaXRXZWJWaWV3QmFja2Vu
ZCo+KGJhY2tlbmQpKSA6IG51bGxwdHI7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICBjYXNl
IFBST1BfSVNfUkVOREVSSU5HX1BBVVNFRDoKKyAgICAgICAgd2Via2l0X3dlYl92aWV3X3NldF9p
c19yZW5kZXJpbmdfcGF1c2VkKHdlYlZpZXcsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsK
KyAgICAgICAgYnJlYWs7CiAjZW5kaWYKICAgICBjYXNlIFBST1BfV0VCX0NPTlRFWFQ6IHsKICAg
ICAgICAgZ3BvaW50ZXIgd2ViQ29udGV4dCA9IGdfdmFsdWVfZ2V0X29iamVjdCh2YWx1ZSk7CkBA
IC04NDksNiArODU2LDkgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0dldFByb3BlcnR5KEdP
YmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElkLCBHVmFsdWUqIHZhbHUKICAgICBjYXNlIFBST1Bf
QkFDS0VORDoKICAgICAgICAgZ192YWx1ZV9zZXRfc3RhdGljX2JveGVkKHZhbHVlLCB3ZWJWaWV3
LT5wcml2LT5iYWNrZW5kLmdldCgpKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0lT
X1JFTkRFUklOR19QQVVTRUQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdl
YmtpdF93ZWJfdmlld19pc19yZW5kZXJpbmdfcGF1c2VkKHdlYlZpZXcpKTsKKyAgICAgICAgYnJl
YWs7CiAjZW5kaWYKICAgICBjYXNlIFBST1BfV0VCX0NPTlRFWFQ6CiAgICAgICAgIGdfdmFsdWVf
c2V0X29iamVjdCh2YWx1ZSwgd2ViVmlldy0+cHJpdi0+Y29udGV4dC5nZXQoKSk7CkBAIC05ODQs
NiArOTk0LDI0IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFdlYktp
dFdlYlZpZXdDbGFzcyogd2ViVmlld0NsYXNzKQogICAgICAgICAgICAgXygiVGhlIGJhY2tlbmQg
Zm9yIHRoZSB3ZWIgdmlldyIpLAogICAgICAgICAgICAgV0VCS0lUX1RZUEVfV0VCX1ZJRVdfQkFD
S0VORCwKICAgICAgICAgICAgIHN0YXRpY19jYXN0PEdQYXJhbUZsYWdzPihXRUJLSVRfUEFSQU1f
UkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkpKTsKKworICAgIC8qKgorICAgICAq
IFdlYktpdFdlYlZpZXc6aXMtcmVuZGVyaW5nLXBhdXNlZDoKKyAgICAgKgorICAgICAqIFdoZXRo
ZXIgb3Igbm90IHJlbmRlcmluZyAoaW5jbHVkaW5nIG1lZGlhIHBsYXliYWNrLCBhbmltYXRpb25z
LCBXZWJHTCkgaXMKKyAgICAgKiBwYXVzZWQuCisgICAgICoKKyAgICAgKiBTaW5jZTogMi4zMAor
ICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdP
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9CQUNLRU5ELAorICAgICAgICBnX3BhcmFtX3NwZWNf
Ym9vbGVhbigKKyAgICAgICAgICAgICJpcy1yZW5kZXJpbmctcGF1c2VkIiwKKyAgICAgICAgICAg
IF8oIklzIFJlbmRlcmluZyBQYXVzZWQiKSwKKyAgICAgICAgICAgIF8oIkluZGljYXRpb24gb2Yg
dGhlIFdlYlZpZXcgcmVuZGVyaW5nIHN0YXRlIiksCisgICAgICAgICAgICBGQUxTRSwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKICNlbmRpZgogCiAgICAgLyoqCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFdlYlZpZXcuaCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0V2ViVmlldy5oCmluZGV4IDJi
MmQ3OGQxYmI1M2EyZmZkYjcwYzJhNGJkYmM4ODRhZjYwMzZmNjAuLjIwMzVhYzgwYTgyMTc4NzAz
ZTdlNGNkOTM0ZDgyZTY3NzNmOGFhMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS93cGUvV2ViS2l0V2ViVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS93cGUvV2ViS2l0V2ViVmlldy5oCkBAIC01NTQsNiArNTU0LDEzIEBAIHdlYmtpdF93ZWJf
dmlld19zZXRfaW5wdXRfbWV0aG9kX2NvbnRleHQgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcK
IFdFQktJVF9BUEkgV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0ICoKIHdlYmtpdF93ZWJfdmlld19n
ZXRfaW5wdXRfbWV0aG9kX2NvbnRleHQgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAg
ICAgICAgICAqd2ViX3ZpZXcpOwogCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJfdmlld19z
ZXRfaXNfcmVuZGVyaW5nX3BhdXNlZCAgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAg
ICAgICAgICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnYm9vbGVhbiAgICAgICAgICAgICAgICAgICAgIHZhbHVlKTsKKwor
V0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X3dlYl92aWV3X2lzX3JlbmRlcmluZ19wYXVzZWQg
ICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAgICp3ZWJfdmlldyk7
CisKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL3dwZS9XZWJLaXRXZWJWaWV3V1BFLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS93cGUvV2ViS2l0V2ViVmlld1dQRS5jcHAKaW5kZXggOWU1Y2U1YzM4OTZmODA5N2Ji
NjVjYzMxZjNkOTJkYjAxMDRhNjAzYi4uMTgyZjNkYTVjYTM1ODBhZWVhMjcxMjU0NjVmMDU1Y2Ri
OTMyMTAwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJL
aXRXZWJWaWV3V1BFLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dl
YktpdFdlYlZpZXdXUEUuY3BwCkBAIC0yMjAsMyArMjIwLDQyIEBAIHZvaWQgd2Via2l0X3dlYl92
aWV3X2dldF9iYWNrZ3JvdW5kX2NvbG9yKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdENv
bG9yKiBjCiAgICAgYXV0byYgd2ViQ29yZUNvbG9yID0gcGFnZS5iYWNrZ3JvdW5kQ29sb3IoKTsK
ICAgICB3ZWJraXRDb2xvckZpbGxGcm9tV2ViQ29yZUNvbG9yKHdlYkNvcmVDb2xvci52YWx1ZU9y
KFdlYkNvcmU6OkNvbG9yOjp3aGl0ZSksIGNvbG9yKTsKIH0KKworLyoqCisgKiB3ZWJraXRfd2Vi
X3ZpZXdfc2V0X2lzX3JlbmRlcmluZ19wYXVzZWQ6CisgKiBAd2ViX3ZpZXc6IGEgI1dlYktpdFdl
YlZpZXcKKyAqIEB2YWx1ZTogYSAjZ2Jvb2xlYW4KKyAqCisgKiBQYXVzZSBvciByZXN1bWUgRE9N
IG9iamVjdHMsIGFuaW1hdGlvbnMgYW5kIG1lZGlhIHBsYXliYWNrLgorICoKKyAqIFNpbmNlOiAy
LjMwCisgKi8KK3ZvaWQgd2Via2l0X3dlYl92aWV3X3NldF9pc19yZW5kZXJpbmdfcGF1c2VkKFdl
YktpdFdlYlZpZXcgKndlYlZpZXcsIGdib29sZWFuIHZhbHVlKQoreworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpKTsKKyAgICBhdXRvJiBwYWdlID0gd2Vi
a2l0V2ViVmlld0dldFBhZ2Uod2ViVmlldyk7CisKKyAgICBpZiAodmFsdWUpIHsKKyAgICAgICAg
cGFnZS5zdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKKyAgICAgICAgcGFn
ZS5zdXNwZW5kQWxsTWVkaWFQbGF5YmFjaygpOworICAgIH0gZWxzZSB7CisgICAgICAgIHBhZ2Uu
cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKKyAgICAgICAgcGFnZS5yZXN1
bWVBbGxNZWRpYVBsYXliYWNrKCk7CisgICAgfQorfQorCisvKioKKyAqIHdlYmtpdF93ZWJfdmll
d19pc19yZW5kZXJpbmdfcGF1c2VkOgorICogQHdlYl92aWV3OiBhICNXZWJLaXRXZWJWaWV3Cisg
KgorICogUmV0dXJuczogYSAjZ2Jvb2xlYW4gaW5kaWNhdGluZyBpZiBET00gb2JqZWN0cywgYW5p
bWF0aW9ucyBhbmQgbWVkaWEgcGxheWJhY2sKKyAqIHJlbmRlcmluZyBpcyBlbmFibGVkIG9yIG5v
dC4KKyAqCisgKiBTaW5jZTogMi4zMAorICovCitnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfaXNf
cmVuZGVyaW5nX3BhdXNlZChXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3KQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSwgRkFMU0UpOworICAgIGF1
dG8mIHBhZ2UgPSB3ZWJraXRXZWJWaWV3R2V0UGFnZSh3ZWJWaWV3KTsKKyAgICByZXR1cm4gcGFn
ZS5hcmVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9uc1N1c3BlbmRlZCgpOworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9kb2NzL3dwZS0xLjAtc2VjdGlv
bnMudHh0IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9kb2NzL3dwZS0xLjAtc2Vj
dGlvbnMudHh0CmluZGV4IDBjMmRjNjUxNWM2NmI3OTU3N2E3ZDU4MDdjYTRhMGZiYzVkMDc1Mzku
LjljN2RlZjNkZjY3OTUwZTYxYTY1MzUxY2I3NTc1OTYwNjE2OTA1MGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvZG9jcy93cGUtMS4wLXNlY3Rpb25zLnR4dAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL2RvY3Mvd3BlLTEuMC1zZWN0aW9u
cy50eHQKQEAgLTI1Nyw2ICsyNTcsOCBAQCB3ZWJraXRfd2ViX3ZpZXdfc2VuZF9tZXNzYWdlX3Rv
X3BhZ2UKIHdlYmtpdF93ZWJfdmlld19zZW5kX21lc3NhZ2VfdG9fcGFnZV9maW5pc2gKIHdlYmtp
dF93ZWJfdmlld19zZXRfaW5wdXRfbWV0aG9kX2NvbnRleHQKIHdlYmtpdF93ZWJfdmlld19nZXRf
aW5wdXRfbWV0aG9kX2NvbnRleHQKK3dlYmtpdF93ZWJfdmlld19pc19yZW5kZXJpbmdfcGF1c2Vk
Cit3ZWJraXRfd2ViX3ZpZXdfc2V0X2lzX3JlbmRlcmluZ19wYXVzZWQKIAogPFNVQlNFQ1RJT04g
V2ViS2l0SmF2YXNjcmlwdFJlc3VsdD4KIFdlYktpdEphdmFzY3JpcHRSZXN1bHQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391155</attachid>
            <date>2020-02-19 06:55:26 -0800</date>
            <delta_ts>2020-02-20 03:19:11 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>0001-HTMLMediaElement-Directly-internally-pause-upon-susp.patch</filename>
            <type>text/plain</type>
            <size>1203</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSAyZDRjMDVjNjM4ZDVlZjQ1OWU0OWQ1N2MyMmY2OTYwYmZhZDg5MTM2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBXZWQsIDE5IEZlYiAyMDIwIDE0OjUzOjA3ICswMDAwClN1YmplY3Q6IFtQQVRDSCB4
c2VydmVyXSBIVE1MTWVkaWFFbGVtZW50OiBEaXJlY3RseSBpbnRlcm5hbGx5IHBhdXNlIHVwb24K
IHN1c3BlbmQgcmVxdWVzdAoKLS0tCiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1l
bnQuY3BwIHwgNyArLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDYgZGVs
ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKaW5kZXgg
YTczYmMwYjRjMmZlLi4wZGUwNGI0NTVhNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVk
aWFFbGVtZW50LmNwcApAQCAtMzYxMSwxMSArMzYxMSw2IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVu
dDo6cGF1c2VJbnRlcm5hbCgpCiB7CiAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSKTsKIAot
ICAgIGlmIChpc1N1c3BlbmRlZCgpKSB7Ci0gICAgICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklF
UiwgInJldHVybmluZyBiZWNhdXNlIGNvbnRleHQgaXMgc3VzcGVuZGVkIik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KICAgICBpZiAoIWRvY3VtZW50KCkuaGFzQnJvd3NpbmdDb250ZXh0KCkp
IHsKICAgICAgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgInJldHVybmluZyBiZWNhdXNlIHRo
ZXJlIGlzIG5vIGJyb3dzaW5nIGNvbnRleHQiKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNzU5Myw3
ICs3NTg4LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzdXNwZW5kUGxheWJhY2soKQogewog
ICAgIElORk9fTE9HKExPR0lERU5USUZJRVIsICJwYXVzZWQgPSAiLCBwYXVzZWQoKSk7CiAgICAg
aWYgKCFwYXVzZWQoKSkKLSAgICAgICAgcGF1c2UoKTsKKyAgICAgICAgcGF1c2VJbnRlcm5hbCgp
OwogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnJlc3VtZUF1dG9wbGF5aW5nKCkKLS0gCjIu
MjUuMAoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391273</attachid>
            <date>2020-02-20 03:19:16 -0800</date>
            <delta_ts>2020-04-24 06:57:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207756-20200220111914.patch</filename>
            <type>text/plain</type>
            <size>6958</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3MDUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGMxOGQwOTM3MGQ3ZGMxZTUx
OTIyZDE3Y2EzYzZlNzk2M2E3MTRjOTYuLjA0MjJkNGJjYmUzZmE2ZWU4NThkZDg0ZjU1Y2ZjZDgy
N2Y0MjU1YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMjAtMDItMTQgIFBoaWxpcHBl
IE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtXUEVdIEFQSSBmb3Ig
cGF1c2UvcmVzdW1lIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjA3NzU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQSBuZXcgcHJvcGVydHkgaXMgYWRkZWQgaW4gdGhlIFdlYlZpZXcgdG8g
Y29udHJvbCB0aGUgcmVuZGVyaW5nCisgICAgICAgIHN0YXRlLiBXaGVuIHRoaXMgcHJvcGVydHkg
aXMgc2V0IHRvIFRSVUUsIGFsbCBhbmltYXRpb25zIGFuZCBtZWRpYQorICAgICAgICBwbGF5YmFj
ayB3aWxsIGJlIHBhdXNlZC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRX
ZWJWaWV3LmNwcDoKKyAgICAgICAgKHdwZVVJUHJvY2Vzc1NpZ25hbEhhbmRsZXIpOgorICAgICAg
ICAod3BlQ2hlY2tTaWduYWxzKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdDb25zdHJ1Y3RlZCk6
CisgICAgICAgICh3ZWJraXRXZWJWaWV3U2V0UHJvcGVydHkpOgorICAgICAgICAod2Via2l0V2Vi
Vmlld0dldFByb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdEaXNwb3NlKToKKyAgICAg
ICAgKHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L3dwZS9XZWJLaXRXZWJWaWV3Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0
V2ViVmlld1dQRS5jcHA6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfc2V0X2lzX3JlbmRlcmlu
Z19wYXVzZWQpOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2lzX3JlbmRlcmluZ19wYXVzZWQp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvd3BlL2RvY3Mvd3BlLTEuMC1zZWN0aW9ucy50eHQ6
CisKIDIwMjAtMDItMTkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZWdyZXNzaW9uKHIyNDYxODgpIFdlYlByb2Nlc3MgaXMgbGF1bmNoZWQgdG9vIGVhZ2VybHkg
d2hlbiBbV0tXZWJWaWV3IF9yZXN0b3JlU2Vzc2lvblN0YXRlXSBpcyBjYWxsZWQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXcuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlldy5jcHAKaW5kZXgg
OTYzMzI2OTAzOWFlZDg1ZTE5OTNiMjM0NDczNTA5YjRlY2IzOWI3OS4uYzljMzQ5NGFmZjEyZGQ4
MjBiYmMyNDUyODY1ZjhiYWYzMGUyMGE4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlldy5jcHAKQEAgLTIwMCw3ICsyMDAsMTEgQEAgZW51
bSB7CiAgICAgUFJPUF9JU19DT05UUk9MTEVEX0JZX0FVVE9NQVRJT04sCiAgICAgUFJPUF9BVVRP
TUFUSU9OX1BSRVNFTlRBVElPTl9UWVBFLAogICAgIFBST1BfRURJVEFCTEUsCi0gICAgUFJPUF9Q
QUdFX0lECisgICAgUFJPUF9QQUdFX0lELAorCisjaWYgUExBVEZPUk0oV1BFKQorICAgIFBST1Bf
SVNfUkVOREVSSU5HX1BBVVNFRCwKKyNlbmRpZgogfTsKIAogdHlwZWRlZiBIYXNoTWFwPHVpbnQ2
NF90LCBHUmVmUHRyPFdlYktpdFdlYlJlc291cmNlPiA+IExvYWRpbmdSZXNvdXJjZXNNYXA7CkBA
IC03OTksNiArODAzLDkgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld1NldFByb3BlcnR5KEdP
YmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElkLCBjb25zdCBHVmFsdWUKICAgICAgICAgd2ViVmll
dy0+cHJpdi0+YmFja2VuZCA9IGJhY2tlbmQgPyBhZG9wdEdSZWYoc3RhdGljX2Nhc3Q8V2ViS2l0
V2ViVmlld0JhY2tlbmQqPihiYWNrZW5kKSkgOiBudWxscHRyOwogICAgICAgICBicmVhazsKICAg
ICB9CisgICAgY2FzZSBQUk9QX0lTX1JFTkRFUklOR19QQVVTRUQ6CisgICAgICAgIHdlYmtpdF93
ZWJfdmlld19zZXRfaXNfcmVuZGVyaW5nX3BhdXNlZCh3ZWJWaWV3LCBnX3ZhbHVlX2dldF9ib29s
ZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAgY2FzZSBQUk9QX1dFQl9D
T05URVhUOiB7CiAgICAgICAgIGdwb2ludGVyIHdlYkNvbnRleHQgPSBnX3ZhbHVlX2dldF9vYmpl
Y3QodmFsdWUpOwpAQCAtODQ5LDYgKzg1Niw5IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdH
ZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJZCwgR1ZhbHVlKiB2YWx1CiAg
ICAgY2FzZSBQUk9QX0JBQ0tFTkQ6CiAgICAgICAgIGdfdmFsdWVfc2V0X3N0YXRpY19ib3hlZCh2
YWx1ZSwgd2ViVmlldy0+cHJpdi0+YmFja2VuZC5nZXQoKSk7CiAgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9JU19SRU5ERVJJTkdfUEFVU0VEOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29s
ZWFuKHZhbHVlLCB3ZWJraXRfd2ViX3ZpZXdfaXNfcmVuZGVyaW5nX3BhdXNlZCh3ZWJWaWV3KSk7
CisgICAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAgY2FzZSBQUk9QX1dFQl9DT05URVhUOgogICAg
ICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYlZpZXctPnByaXYtPmNvbnRleHQuZ2V0
KCkpOwpAQCAtOTg0LDYgKzk5NCwyNCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xh
c3NfaW5pdChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICAgICAgICAgIF8o
IlRoZSBiYWNrZW5kIGZvciB0aGUgd2ViIHZpZXciKSwKICAgICAgICAgICAgIFdFQktJVF9UWVBF
X1dFQl9WSUVXX0JBQ0tFTkQsCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxHUGFyYW1GbGFncz4o
V0VCS0lUX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKSk7CisKKyAg
ICAvKioKKyAgICAgKiBXZWJLaXRXZWJWaWV3OmlzLXJlbmRlcmluZy1wYXVzZWQ6CisgICAgICoK
KyAgICAgKiBXaGV0aGVyIG9yIG5vdCByZW5kZXJpbmcgKGluY2x1ZGluZyBtZWRpYSBwbGF5YmFj
aywgYW5pbWF0aW9ucywgV2ViR0wpIGlzCisgICAgICogcGF1c2VkLgorICAgICAqCisgICAgICog
U2luY2U6IDIuMzAKKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnT2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQkFDS0VORCwKKyAgICAgICAg
Z19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAiaXMtcmVuZGVyaW5nLXBhdXNlZCIs
CisgICAgICAgICAgICBfKCJJcyBSZW5kZXJpbmcgUGF1c2VkIiksCisgICAgICAgICAgICBfKCJJ
bmRpY2F0aW9uIG9mIHRoZSBXZWJWaWV3IHJlbmRlcmluZyBzdGF0ZSIpLAorICAgICAgICAgICAg
RkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CiAjZW5kaWYKIAog
ICAgIC8qKgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJL
aXRXZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFdlYlZp
ZXcuaAppbmRleCAyYjJkNzhkMWJiNTNhMmZmZGI3MGMyYTRiZGJjODg0YWY2MDM2ZjYwLi4yMDM1
YWM4MGE4MjE3ODcwM2U3ZTRjZDkzNGQ4MmU2NzczZjhhYTA2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFdlYlZpZXcuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFdlYlZpZXcuaApAQCAtNTU0LDYgKzU1NCwxMyBA
QCB3ZWJraXRfd2ViX3ZpZXdfc2V0X2lucHV0X21ldGhvZF9jb250ZXh0ICAgICAgICAgICAgIChX
ZWJLaXRXZWJWaWV3CiBXRUJLSVRfQVBJIFdlYktpdElucHV0TWV0aG9kQ29udGV4dCAqCiB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2lucHV0X21ldGhvZF9jb250ZXh0ICAgICAgICAgICAgIChXZWJLaXRX
ZWJWaWV3ICAgICAgICAgICAgICAgKndlYl92aWV3KTsKIAorV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfd2ViX3ZpZXdfc2V0X2lzX3JlbmRlcmluZ19wYXVzZWQgICAgICAgICAgICAgIChXZWJLaXRX
ZWJWaWV3ICAgICAgICAgICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gICAgICAgICAgICAgICAgICAg
ICB2YWx1ZSk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF93ZWJfdmlld19pc19yZW5k
ZXJpbmdfcGF1c2VkICAgICAgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAg
ICAqd2ViX3ZpZXcpOworCiBHX0VORF9ERUNMUwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0V2ViVmlld1dQRS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFdlYlZpZXdXUEUuY3BwCmluZGV4IDllNWNl
NWMzODk2ZjgwOTdiYjY1Y2MzMWYzZDkyZGIwMTA0YTYwM2IuLjIzMjcyMDU5ZTk3YjNjMDQzYzA4
Nzk5NTlmMTQ3ZmYxODhlMDM4ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS93cGUvV2ViS2l0V2ViVmlld1dQRS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL3dwZS9XZWJLaXRXZWJWaWV3V1BFLmNwcApAQCAtMjIwLDMgKzIyMCw0MiBAQCB2b2lk
IHdlYmtpdF93ZWJfdmlld19nZXRfYmFja2dyb3VuZF9jb2xvcihXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3LCBXZWJLaXRDb2xvciogYwogICAgIGF1dG8mIHdlYkNvcmVDb2xvciA9IHBhZ2UuYmFja2dy
b3VuZENvbG9yKCk7CiAgICAgd2Via2l0Q29sb3JGaWxsRnJvbVdlYkNvcmVDb2xvcih3ZWJDb3Jl
Q29sb3IudmFsdWVPcihXZWJDb3JlOjpDb2xvcjo6d2hpdGUpLCBjb2xvcik7CiB9CisKKy8qKgor
ICogd2Via2l0X3dlYl92aWV3X3NldF9pc19yZW5kZXJpbmdfcGF1c2VkOgorICogQHdlYl92aWV3
OiBhICNXZWJLaXRXZWJWaWV3CisgKiBAdmFsdWU6IGEgI2dib29sZWFuCisgKgorICogUGF1c2Ug
b3IgcmVzdW1lIERPTSBvYmplY3RzLCBhbmltYXRpb25zIGFuZCBtZWRpYSBwbGF5YmFjay4KKyAq
CisgKiBTaW5jZTogMi4zMAorICovCit2b2lkIHdlYmtpdF93ZWJfdmlld19zZXRfaXNfcmVuZGVy
aW5nX3BhdXNlZChXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3LCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSk7CisgICAgYXV0
byYgcGFnZSA9IHdlYmtpdFdlYlZpZXdHZXRQYWdlKHdlYlZpZXcpOworCisgICAgaWYgKHZhbHVl
KSB7CisgICAgICAgIHBhZ2Uuc3VzcGVuZEFsbE1lZGlhUGxheWJhY2soKTsKKyAgICAgICAgcGFn
ZS5zdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBwYWdlLnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7CisgICAg
ICAgIHBhZ2UucmVzdW1lQWxsTWVkaWFQbGF5YmFjaygpOworICAgIH0KK30KKworLyoqCisgKiB3
ZWJraXRfd2ViX3ZpZXdfaXNfcmVuZGVyaW5nX3BhdXNlZDoKKyAqIEB3ZWJfdmlldzogYSAjV2Vi
S2l0V2ViVmlldworICoKKyAqIFJldHVybnM6IGEgI2dib29sZWFuIGluZGljYXRpbmcgaWYgRE9N
IG9iamVjdHMsIGFuaW1hdGlvbnMgYW5kIG1lZGlhIHBsYXliYWNrCisgKiByZW5kZXJpbmcgaXMg
ZW5hYmxlZCBvciBub3QuCisgKgorICogU2luY2U6IDIuMzAKKyAqLworZ2Jvb2xlYW4gd2Via2l0
X3dlYl92aWV3X2lzX3JlbmRlcmluZ19wYXVzZWQoV2ViS2l0V2ViVmlldyAqd2ViVmlldykKK3sK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldyksIEZB
TFNFKTsKKyAgICBhdXRvJiBwYWdlID0gd2Via2l0V2ViVmlld0dldFBhZ2Uod2ViVmlldyk7Cisg
ICAgcmV0dXJuIHBhZ2UuYXJlQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnNTdXNwZW5kZWQo
KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvZG9jcy93
cGUtMS4wLXNlY3Rpb25zLnR4dCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvZG9j
cy93cGUtMS4wLXNlY3Rpb25zLnR4dAppbmRleCAwYzJkYzY1MTVjNjZiNzk1NzdhN2Q1ODA3Y2E0
YTBmYmM1ZDA3NTM5Li45YzdkZWYzZGY2Nzk1MGU2MWE2NTM1MWNiNzU3NTk2MDYxNjkwNTBlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL2RvY3Mvd3BlLTEuMC1z
ZWN0aW9ucy50eHQKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9kb2NzL3dw
ZS0xLjAtc2VjdGlvbnMudHh0CkBAIC0yNTcsNiArMjU3LDggQEAgd2Via2l0X3dlYl92aWV3X3Nl
bmRfbWVzc2FnZV90b19wYWdlCiB3ZWJraXRfd2ViX3ZpZXdfc2VuZF9tZXNzYWdlX3RvX3BhZ2Vf
ZmluaXNoCiB3ZWJraXRfd2ViX3ZpZXdfc2V0X2lucHV0X21ldGhvZF9jb250ZXh0CiB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X2lucHV0X21ldGhvZF9jb250ZXh0Cit3ZWJraXRfd2ViX3ZpZXdfaXNfcmVu
ZGVyaW5nX3BhdXNlZAord2Via2l0X3dlYl92aWV3X3NldF9pc19yZW5kZXJpbmdfcGF1c2VkCiAK
IDxTVUJTRUNUSU9OIFdlYktpdEphdmFzY3JpcHRSZXN1bHQ+CiBXZWJLaXRKYXZhc2NyaXB0UmVz
dWx0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397452</attachid>
            <date>2020-04-24 06:57:22 -0700</date>
            <delta_ts>2020-04-24 07:16:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207756-20200424155721.patch</filename>
            <type>text/plain</type>
            <size>15140</size>
            <attacher name="Miguel Gomez">magomez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwNjM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDRkZjI1MmYxMmVlZWU3MWM4
Yjc0ZjVlNWU4NjlhYzE1Zjc2MTc1ZWUuLmE5YmIwMDBiODI2NzE2YzhhMmRlOTBiNmE2NDU1MDQw
ZGI4YTBiZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDQgQEAKKzIwMjAtMDQtMjQgIE1pZ3VlbCBH
b21leiAgPG1hZ29tZXpAaWdhbGlhLmNvbT4KKworICAgICAgICBbV1BFXVtHVEtdIEFQSSBmb3Ig
cGF1c2UvcmVzdW1lIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjA3NzU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkIEFQSSB0byBwYXVzZSB0aGUgcmVuZGVyaW5nIG9mIHRoZSBXZWJW
aWV3LiBUaGlzIHdpbGwgcGF1c2UgbWVkaWEgcGxheWJhY2ssCisgICAgICAgIENTUyBhbmltYXRp
b25zIGFuZCByQUYgc2NyaXB0cywgYW5kIHN0b3AgdGhlIGNvbXBvc2l0b3IgbG9vcCB0byBwcm9j
ZXNzIGFueQorICAgICAgICByZXBhaW50cy4KKworICAgICAgICBCYXNlZCBvbiBwYXRjaCBjcmVh
dGVkIGJ5IFBoaWxpcHBlIE5vcm1hbmQgPHBub3JtYW5kQGlnYWxpYS5jb20+LgorCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXcuY3BwOgorICAgICAgICAod2Via2l0
X3dlYl92aWV3X2dldF9pbnB1dF9tZXRob2RfY29udGV4dCk6CisgICAgICAgICh3ZWJraXRfd2Vi
X3ZpZXdfcGF1c2UpOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X3VucGF1c2UpOgorICAgICAg
ICAod2Via2l0X3dlYl92aWV3X2lzX3BhdXNlZCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Vi
a2l0Mmd0ay00LjAtc2VjdGlvbnMudHh0OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvd3BlL1dl
YktpdFdlYlZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9kb2NzL3dwZS0xLjAt
c2VjdGlvbnMudHh0OgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Ry
YXdpbmdBcmVhUHJveHlDb29yZGluYXRlZEdyYXBoaWNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
RHJhd2luZ0FyZWFQcm94eUNvb3JkaW5hdGVkR3JhcGhpY3M6OnN1c3BlbmRSZW5kZXJpbmcpOgor
ICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5Q29vcmRpbmF0ZWRHcmFwaGljczo6cmVz
dW1lUmVuZGVyaW5nKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9E
cmF3aW5nQXJlYVByb3h5Q29vcmRpbmF0ZWRHcmFwaGljcy5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9EcmF3aW5nQXJlYVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpzdXNwZW5kUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpyZXN1bWVSZW5kZXJpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy93
cGUvV2ViUGFnZVByb3h5V1BFLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpz
dXNwZW5kUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZXN1bWVS
ZW5kZXJpbmcpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHA6CisgICAgICAgIChXZWJLaXQ6
OkRyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljczo6c3VzcGVuZFJlbmRlcmluZyk6CisgICAg
ICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljczo6cmVzdW1lUmVuZGVy
aW5nKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9E
cmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvRHJhd2luZ0FyZWEuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2lu
Z0FyZWEubWVzc2FnZXMuaW46CisKIDIwMjAtMDQtMjMgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZy
YXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgQm91bmNlIGRpc3BsYXlXYXNSZWZyZXNoZWQoKSB2
aWEgRXZlbnREaXNwYXRjaGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvZ2xpYi9XZWJLaXRXZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9n
bGliL1dlYktpdFdlYlZpZXcuY3BwCmluZGV4IGI3NDNhMGQzNDBiZTAzZjVmY2M1YzlhNTY2NTRj
MTU3NGQ2ZTc5NGYuLjk5YzFkNzI4MjdiMTNmZDlkZDkxZmZhN2VhNmZiYjljM2JmNzE0MzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXcu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXcu
Y3BwCkBAIC00NTQ2LDUgKzQ1NDYsNTYgQEAgV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0KiB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2lucHV0X21ldGhvZF9jb250ZXh0KFdlYktpdFdlYlZpZXcKICNlbGlm
IFBMQVRGT1JNKFdQRSkKICAgICByZXR1cm4gd2ViVmlldy0+cHJpdi0+dmlldy0+aW5wdXRNZXRo
b2RDb250ZXh0KCk7CiAjZW5kaWYKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfcGF1c2U6
CisgKiBAd2ViX3ZpZXc6IGEgI1dlYktpdFdlYlZpZXcKKyAqCisgKiBQYXVzZSBET00gb2JqZWN0
cywgYW5pbWF0aW9ucyBhbmQgbWVkaWEgcGxheWJhY2suCisgKgorICogU2luY2U6IDIuMzAKKyAq
Lwordm9pZCB3ZWJraXRfd2ViX3ZpZXdfcGF1c2UoV2ViS2l0V2ViVmlldyAqd2ViVmlldykKK3sK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSk7CisgICAg
YXV0byYgcGFnZSA9IHdlYmtpdFdlYlZpZXdHZXRQYWdlKHdlYlZpZXcpOworCisgICAgcGFnZS5z
dXNwZW5kQWxsTWVkaWFQbGF5YmFjaygpOworICAgIHBhZ2Uuc3VzcGVuZEFjdGl2ZURPTU9iamVj
dHNBbmRBbmltYXRpb25zKCk7CisgICAgcGFnZS5zdXNwZW5kUmVuZGVyaW5nKCk7Cit9CiAKKy8q
KgorICogd2Via2l0X3dlYl92aWV3X3VucGF1c2U6CisgKiBAd2ViX3ZpZXc6IGEgI1dlYktpdFdl
YlZpZXcKKyAqCisgKiBSZXN1bWUgRE9NIG9iamVjdHMsIGFuaW1hdGlvbnMgYW5kIG1lZGlhIHBs
YXliYWNrLgorICoKKyAqIFNpbmNlOiAyLjMwCisqLwordm9pZCB3ZWJraXRfd2ViX3ZpZXdfdW5w
YXVzZShXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpKTsKKyAgICBhdXRvJiBwYWdlID0gd2Via2l0V2ViVmll
d0dldFBhZ2Uod2ViVmlldyk7CisKKyAgICBwYWdlLnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRB
bmltYXRpb25zKCk7CisgICAgcGFnZS5yZXN1bWVBbGxNZWRpYVBsYXliYWNrKCk7CisgICAgcGFn
ZS5yZXN1bWVSZW5kZXJpbmcoKTsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfaXNfcGF1
c2VkOgorICogQHdlYl92aWV3OiBhICNXZWJLaXRXZWJWaWV3CisgKgorICogUmV0dXJuczogYSAj
Z2Jvb2xlYW4gaW5kaWNhdGluZyBpZiBET00gb2JqZWN0cywgYW5pbWF0aW9ucyBhbmQgbWVkaWEg
cGxheWJhY2sKKyAqIGFyZSBwYXVzZWQgb3Igbm90LgorICoKKyAqIFNpbmNlOiAyLjMwCisgKi8K
K2dib29sZWFuIHdlYmtpdF93ZWJfdmlld19pc19wYXVzZWQoV2ViS2l0V2ViVmlldyAqd2ViVmll
dykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmll
dyksIEZBTFNFKTsKKyAgICBhdXRvJiBwYWdlID0gd2Via2l0V2ViVmlld0dldFBhZ2Uod2ViVmll
dyk7CisgICAgcmV0dXJuIHBhZ2UuYXJlQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnNTdXNw
ZW5kZWQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViVmlldy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3LmgKaW5kZXggYzE1MzljYzI3ODllMGM5NGFhNGE1YjFmZDM4YjBlMTU1M2Q1ODExYy4u
YTE3NWRlNjBkNDU1ZjlhZWEyNDVmMWJjNjk4NTU0MmU3Y2RlNTY4NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKQEAgLTU3Nyw2ICs1Nzcs
MTUgQEAgd2Via2l0X3dlYl92aWV3X3NldF9pbnB1dF9tZXRob2RfY29udGV4dCAgICAgICAgICAg
ICAoV2ViS2l0V2ViVmlldwogV0VCS0lUX0FQSSBXZWJLaXRJbnB1dE1ldGhvZENvbnRleHQgKgog
d2Via2l0X3dlYl92aWV3X2dldF9pbnB1dF9tZXRob2RfY29udGV4dCAgICAgICAgICAgICAoV2Vi
S2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcpOwogCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF93ZWJfdmlld19wYXVzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFdlYktp
dFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfd2ViX3ZpZXdfdW5wYXVzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRX
ZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldyk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dl
YmtpdF93ZWJfdmlld19pc19wYXVzZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFdlYktp
dFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3KTsKKwogR19FTkRfREVDTFMKIAogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0
Mmd0ay00LjAtc2VjdGlvbnMudHh0IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9k
b2NzL3dlYmtpdDJndGstNC4wLXNlY3Rpb25zLnR4dAppbmRleCAxYmM0MjcwYzlmNDBlOGZiOGM0
ZmU2NmNlNmUzYmI1MGIzZmY5NzE3Li43ZGIzNmY1ZWE1MDdlYmVjYWFmMmU4YTk3Yjc1MDUyZWU0
MmMyYjM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mv
d2Via2l0Mmd0ay00LjAtc2VjdGlvbnMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQKQEAgLTI4NSw2ICsyODUs
OSBAQCB3ZWJraXRfd2ViX3ZpZXdfc2VuZF9tZXNzYWdlX3RvX3BhZ2UKIHdlYmtpdF93ZWJfdmll
d19zZW5kX21lc3NhZ2VfdG9fcGFnZV9maW5pc2gKIHdlYmtpdF93ZWJfdmlld19zZXRfaW5wdXRf
bWV0aG9kX2NvbnRleHQKIHdlYmtpdF93ZWJfdmlld19nZXRfaW5wdXRfbWV0aG9kX2NvbnRleHQK
K3dlYmtpdF93ZWJfdmlld19wYXVzZQord2Via2l0X3dlYl92aWV3X3VucGF1c2UKK3dlYmtpdF93
ZWJfdmlld19pc19wYXVzZWQKIAogPFNVQlNFQ1RJT04gV2ViS2l0SmF2YXNjcmlwdFJlc3VsdD4K
IFdlYktpdEphdmFzY3JpcHRSZXN1bHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS93cGUvV2ViS2l0V2ViVmlldy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L3dwZS9XZWJLaXRXZWJWaWV3LmgKaW5kZXggMmIyZDc4ZDFiYjUzYTJmZmRiNzBjMmE0YmRiYzg4
NGFmNjAzNmY2MC4uZTc0NjBlYjk3ODgxYmQyNTk3ZTVkMjI2YmRjYTk2NmNkZDU0OWQzNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRXZWJWaWV3LmgK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRXZWJWaWV3LmgKQEAg
LTU1NCw2ICs1NTQsMTUgQEAgd2Via2l0X3dlYl92aWV3X3NldF9pbnB1dF9tZXRob2RfY29udGV4
dCAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldwogV0VCS0lUX0FQSSBXZWJLaXRJbnB1dE1ldGhv
ZENvbnRleHQgKgogd2Via2l0X3dlYl92aWV3X2dldF9pbnB1dF9tZXRob2RfY29udGV4dCAgICAg
ICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAgICp3ZWJfdmlldyk7CiAKK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X3dlYl92aWV3X3BhdXNlICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAgICp3ZWJfdmlldyk7CisKK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X3dlYl92aWV3X3VucGF1c2UgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAgICp3ZWJfdmlldyk7CisKK1dFQktJ
VF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF93ZWJfdmlld19pc19wYXVzZWQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgICAqd2ViX3ZpZXcpOworCiBH
X0VORF9ERUNMUwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS93cGUvZG9jcy93cGUtMS4wLXNlY3Rpb25zLnR4dCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS93cGUvZG9jcy93cGUtMS4wLXNlY3Rpb25zLnR4dAppbmRleCAwYzJkYzY1MTVjNjZi
Nzk1NzdhN2Q1ODA3Y2E0YTBmYmM1ZDA3NTM5Li45NGI1ZWVkZjFlMjZiMjY4OGMxOTRjZDliNTc1
ODI3YTIyZTZiYzdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3Bl
L2RvY3Mvd3BlLTEuMC1zZWN0aW9ucy50eHQKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL3dwZS9kb2NzL3dwZS0xLjAtc2VjdGlvbnMudHh0CkBAIC0yNTcsNiArMjU3LDkgQEAgd2Vi
a2l0X3dlYl92aWV3X3NlbmRfbWVzc2FnZV90b19wYWdlCiB3ZWJraXRfd2ViX3ZpZXdfc2VuZF9t
ZXNzYWdlX3RvX3BhZ2VfZmluaXNoCiB3ZWJraXRfd2ViX3ZpZXdfc2V0X2lucHV0X21ldGhvZF9j
b250ZXh0CiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2lucHV0X21ldGhvZF9jb250ZXh0Cit3ZWJraXRf
d2ViX3ZpZXdfcGF1c2UKK3dlYmtpdF93ZWJfdmlld191bnBhdXNlCit3ZWJraXRfd2ViX3ZpZXdf
aXNfcGF1c2VkCiAKIDxTVUJTRUNUSU9OIFdlYktpdEphdmFzY3JpcHRSZXN1bHQ+CiBXZWJLaXRK
YXZhc2NyaXB0UmVzdWx0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhUHJveHlDb29yZGluYXRlZEdyYXBoaWNzLmNwcCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFQ
cm94eUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCmluZGV4IDZiYmQxY2FiZDI3YWUyODQ3NjQ4YThj
MmVkY2Y5YWNmY2Q1NTZmZjUuLmI1OTkyZTU0NWFmMDI4MzczNDA4ZmE2NWVlNzcyNWI1ZDNkNTg1
ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvRHJhd2luZ0FyZWFQcm94eUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFQcm94eUNvb3Jk
aW5hdGVkR3JhcGhpY3MuY3BwCkBAIC0xNTIsNiArMTUyLDE2IEBAIHZvaWQgRHJhd2luZ0FyZWFQ
cm94eUNvb3JkaW5hdGVkR3JhcGhpY3M6OnNldEJhY2tpbmdTdG9yZUlzRGlzY2FyZGFibGUoYm9v
bCBpc0JhCiAjZW5kaWYKIH0KIAordm9pZCBEcmF3aW5nQXJlYVByb3h5Q29vcmRpbmF0ZWRHcmFw
aGljczo6c3VzcGVuZFJlbmRlcmluZygpCit7CisgICAgc2VuZChNZXNzYWdlczo6RHJhd2luZ0Fy
ZWE6OlN1c3BlbmRSZW5kZXJpbmcoKSk7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFQcm94eUNvb3Jk
aW5hdGVkR3JhcGhpY3M6OnJlc3VtZVJlbmRlcmluZygpCit7CisgICAgc2VuZChNZXNzYWdlczo6
RHJhd2luZ0FyZWE6OlJlc3VtZVJlbmRlcmluZygpKTsKK30KKwogdm9pZCBEcmF3aW5nQXJlYVBy
b3h5Q29vcmRpbmF0ZWRHcmFwaGljczo6dXBkYXRlKHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRl
SUQsIGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCiB7CiAgICAgQVNTRVJUX0FSRyhiYWNr
aW5nU3RvcmVTdGF0ZUlELCBiYWNraW5nU3RvcmVTdGF0ZUlEIDw9IG1fY3VycmVudEJhY2tpbmdT
dG9yZVN0YXRlSUQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29vcmRp
bmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYVByb3h5Q29vcmRpbmF0ZWRHcmFwaGljcy5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYVByb3h5
Q29vcmRpbmF0ZWRHcmFwaGljcy5oCmluZGV4IGQ3Njk1MDg4ZTdjZmM0ZjYzOGYxNTczMzg3NTRm
OWYxNTc0ODk3NDkuLjRhMjZkYzY2MjdmZmUxZTkzMmM5M2FmZTBmYTMxMmY2NDA4NWZiNjYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJh
d2luZ0FyZWFQcm94eUNvb3JkaW5hdGVkR3JhcGhpY3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhUHJveHlDb29yZGluYXRlZEdy
YXBoaWNzLmgKQEAgLTU2LDYgKzU2LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGRldmljZVNjYWxl
RmFjdG9yRGlkQ2hhbmdlKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCB3YWl0Rm9yQmFja2luZ1N0b3Jl
VXBkYXRlT25OZXh0UGFpbnQoKSBvdmVycmlkZTsKICAgICB2b2lkIHNldEJhY2tpbmdTdG9yZUlz
RGlzY2FyZGFibGUoYm9vbCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzdXNwZW5kUmVuZGVyaW5nKCkg
b3ZlcnJpZGU7CisgICAgdm9pZCByZXN1bWVSZW5kZXJpbmcoKSBvdmVycmlkZTsKIAogICAgIC8v
IElQQyBtZXNzYWdlIGhhbmRsZXJzCiAgICAgdm9pZCB1cGRhdGUodWludDY0X3QgYmFja2luZ1N0
b3JlU3RhdGVJRCwgY29uc3QgVXBkYXRlSW5mbyYpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCmluZGV4IGIwYTg1NzE2NzlkNjZiYmRlMWYzODBh
MTE0Nzk3Yjg4YWIxZjQ0ZjguLmI5NzM2ZGZmYTNmOTg5Mzc5ZDU3NDY0NTcyMTU0YmMyNjBiYTUx
ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHku
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmgKQEAgLTEy
Miw2ICsxMjIsMTEgQEAgcHVibGljOgogICAgIFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcygpIHsg
cmV0dXJuIG1fcHJvY2Vzcy5nZXQoKTsgfQogICAgIGNvbnN0IFdlYlByb2Nlc3NQcm94eSYgcHJv
Y2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2Vzcy5nZXQoKTsgfQogCisjaWYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTKQorICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kUmVuZGVyaW5nKCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCByZXN1bWVSZW5kZXJpbmcoKSA9IDA7CisjZW5kaWYKKwogcHJv
dGVjdGVkOgogICAgIERyYXdpbmdBcmVhUHJveHkoRHJhd2luZ0FyZWFUeXBlLCBXZWJQYWdlUHJv
eHkmLCBXZWJQcm9jZXNzUHJveHkmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuaAppbmRleCA1YmZmMzQxZjVkN2ZlZWVmZDk2ZTlkMjVlNTZkYjlmOGE4OWEwYjRhLi40MGNk
Y2EzNjgxMzg4ZDE3YjZkNmQzNzI2YzU0MDNlMGExYjU4NThmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtODQzLDYgKzg0Myw5IEBAIHB1YmxpYzoKICAgICB2b2lk
IGRlbGV0ZVN1cnJvdW5kaW5nKGludDY0X3Qgb2Zmc2V0LCB1bnNpZ25lZCBjaGFyYWN0ZXJDb3Vu
dCk7CiAKICAgICB2b2lkIHNldElucHV0TWV0aG9kU3RhdGUoT3B0aW9uYWw8SW5wdXRNZXRob2RT
dGF0ZT4mJik7CisKKyAgICB2b2lkIHN1c3BlbmRSZW5kZXJpbmcoKTsKKyAgICB2b2lkIHJlc3Vt
ZVJlbmRlcmluZygpOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShHVEspCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwCmluZGV4IGU5OGIwNTIzNjE3
MDg3OWJhMjc3NTg1ODA3M2JiMGFlOTZiZDU4ZjMuLjUxNzgzMTZlYTBmY2M1NGUwNDBhY2UzNDI0
MWI4NzJkZmU5MDhkNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9X
ZWJQYWdlUHJveHlHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJQ
YWdlUHJveHlHdGsuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAKKyNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5Lmgi
CiAjaW5jbHVkZSAiSW5wdXRNZXRob2RTdGF0ZS5oIgogI2luY2x1ZGUgIlBhZ2VDbGllbnRJbXBs
LmgiCiAjaW5jbHVkZSAiV2ViS2l0VXNlck1lc3NhZ2UuaCIKQEAgLTE5Myw0ICsxOTQsMTYgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OnRoZW1lRGlkQ2hhbmdlKCkKICAgICBlZmZlY3RpdmVBcHBlYXJh
bmNlRGlkQ2hhbmdlKCk7CiB9CiAKK3ZvaWQgV2ViUGFnZVByb3h5OjpzdXNwZW5kUmVuZGVyaW5n
KCkKK3sKKyAgICBBU1NFUlQobV9kcmF3aW5nQXJlYSk7CisgICAgbV9kcmF3aW5nQXJlYS0+c3Vz
cGVuZFJlbmRlcmluZygpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6cmVzdW1lUmVuZGVyaW5n
KCkKK3sKKyAgICBBU1NFUlQobV9kcmF3aW5nQXJlYSk7CisgICAgbV9kcmF3aW5nQXJlYS0+cmVz
dW1lUmVuZGVyaW5nKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd3BlL1dlYlBhZ2VQcm94eVdQRS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy93cGUvV2ViUGFnZVByb3h5V1BFLmNwcAppbmRleCA4ZjY0MGRiZDgy
NTc5M2FhYzU4ZmExZGQyZDFlNGRiYmFmZWI3MTQyLi5jYzFiNTE2NWYzNDBhN2Q1ZWU4NTYyNjlk
MzhlMDA2NjA4ZTIwOGZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93cGUv
V2ViUGFnZVByb3h5V1BFLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93cGUvV2Vi
UGFnZVByb3h5V1BFLmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogCisjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eS5o
IgogI2luY2x1ZGUgIkVkaXRvclN0YXRlLmgiCiAjaW5jbHVkZSAiSW5wdXRNZXRob2RTdGF0ZS5o
IgogI2luY2x1ZGUgIlBhZ2VDbGllbnRJbXBsLmgiCkBAIC0xMDEsNCArMTAyLDE2IEBAIHZvaWQg
V2ViUGFnZVByb3h5OjpzZXRJbnB1dE1ldGhvZFN0YXRlKE9wdGlvbmFsPElucHV0TWV0aG9kU3Rh
dGU+JiYgc3RhdGUpCiAgICAgc3RhdGljX2Nhc3Q8UGFnZUNsaWVudEltcGwmPihwYWdlQ2xpZW50
KCkpLnNldElucHV0TWV0aG9kU3RhdGUoV1RGTW92ZShzdGF0ZSkpOwogfQogCit2b2lkIFdlYlBh
Z2VQcm94eTo6c3VzcGVuZFJlbmRlcmluZygpCit7CisgICAgQVNTRVJUKG1fZHJhd2luZ0FyZWEp
OworICAgIG1fZHJhd2luZ0FyZWEtPnN1c3BlbmRSZW5kZXJpbmcoKTsKK30KKwordm9pZCBXZWJQ
YWdlUHJveHk6OnJlc3VtZVJlbmRlcmluZygpCit7CisgICAgQVNTRVJUKG1fZHJhd2luZ0FyZWEp
OworICAgIG1fZHJhd2luZ0FyZWEtPnJlc3VtZVJlbmRlcmluZygpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJh
d2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcAppbmRleCBlZjFjOGNkYmJhZDJlZjVhZGEz
MjEyYzg1MWM2MmExNDlmOWZlYTBlLi42YjQ4NzgwMDY0NzkxY2U3MzhjYTk2YzJiYmRkNTU3MDlj
MzRlMDI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3
aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCkBAIC00NjksNiArNDY5LDE2IEBAIHZvaWQg
RHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzOjpkaWRVcGRhdGUoKQogICAgIGRpc3BsYXlU
aW1lckZpcmVkKCk7CiB9CiAKK3ZvaWQgRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzOjpz
dXNwZW5kUmVuZGVyaW5nKCkKK3sKKyAgICBzdXNwZW5kUGFpbnRpbmcoKTsKK30KKwordm9pZCBE
cmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3M6OnJlc3VtZVJlbmRlcmluZygpCit7CisgICAg
cmVzdW1lUGFpbnRpbmcoKTsKK30KKwogdm9pZCBEcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhp
Y3M6OnNlbmREaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSgpCiB7CiAgICAgQVNTRVJUKCFtX2lz
V2FpdGluZ0ZvckRpZFVwZGF0ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFw
aGljcy5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuaAppbmRleCA1MDc4ZWM0NmRjNTdk
MWEyOGVjYzRlMGYxZWQ2ZDAxYzQ3MmEwODEzLi4zYzk4NTFmY2QyY2E1ZjBkYjYxODUzNjg3NGI5
MzAxMjk2YTdhYWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
RHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzLmgKQEAgLTg2LDYgKzg2LDggQEAgcHJpdmF0
ZToKICAgICAvLyBJUEMgbWVzc2FnZSBoYW5kbGVycy4KICAgICB2b2lkIHVwZGF0ZUJhY2tpbmdT
dG9yZVN0YXRlKHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQsIGJvb2wgcmVzcG9uZEltbWVk
aWF0ZWx5LCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYs
IGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9mZnNldCkgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBkaWRVcGRhdGUoKSBvdmVycmlkZTsKKyAgICB2b2lkIHN1c3BlbmRSZW5kZXJpbmcoKSBvdmVy
cmlkZTsKKyAgICB2b2lkIHJlc3VtZVJlbmRlcmluZygpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBz
ZW5kRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKaW5kZXggMTE3NWE3NzYyMzU3ZDc0NzY0ZTkz
OTFmNjRmYjI3NWE4ZmY3ZjU0OC4uMTQwODMyODM1OTE5NzdiNWMwZTRjMjQyMGNjZjcyOWExOTcw
ZTAzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2lu
Z0FyZWEuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJl
YS5oCkBAIC0xODcsNiArMTg3LDExIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGFkZFRy
YW5zYWN0aW9uQ2FsbGJhY2tJRChXZWJLaXQ6OkNhbGxiYWNrSUQpIHsgQVNTRVJUX05PVF9SRUFD
SEVEKCk7IH0KICNlbmRpZgogCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIHZp
cnR1YWwgdm9pZCBzdXNwZW5kUmVuZGVyaW5nKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZXN1
bWVSZW5kZXJpbmcoKSA9IDA7CisjZW5kaWYKKwogICAgIGJvb2wgbV9oYXNSZW1vdmVkTWVzc2Fn
ZVJlY2VpdmVyIHsgZmFsc2UgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEubWVzc2FnZXMuaW4KaW5kZXggZjIwN2UxMDdl
OTUyNzBhN2Y5MTg5Y2JhOWFiNjc3NTM0YWEyMjc5Mi4uYzFmY2Y1M2E0MGVjYWFjMzI2ZDZiYTE1
OTBhYzUyZjA2MjA3MmMxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvRHJhd2luZ0FyZWEubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEubWVzc2FnZXMuaW4KQEAgLTQyLDQgKzQyLDEwIEBAIG1l
c3NhZ2VzIC0+IERyYXdpbmdBcmVhIE5vdFJlZkNvdW50ZWQgewogICAgIAogICAgIEFkZFRyYW5z
YWN0aW9uQ2FsbGJhY2tJRChXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkKICNlbmRpZgor
CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIFN1c3BlbmRSZW5kZXJpbmcoKQor
ICAgIFJlc3VtZVJlbmRlcmluZygpCisjZW5kaWYKKwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397456</attachid>
            <date>2020-04-24 07:17:01 -0700</date>
            <delta_ts>2020-06-29 03:07:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207756-20200424161700.patch</filename>
            <type>text/plain</type>
            <size>15333</size>
            <attacher name="Miguel Gomez">magomez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwNjM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDRkZjI1MmYxMmVlZWU3MWM4
Yjc0ZjVlNWU4NjlhYzE1Zjc2MTc1ZWUuLmE5YmIwMDBiODI2NzE2YzhhMmRlOTBiNmE2NDU1MDQw
ZGI4YTBiZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDQgQEAKKzIwMjAtMDQtMjQgIE1pZ3VlbCBH
b21leiAgPG1hZ29tZXpAaWdhbGlhLmNvbT4KKworICAgICAgICBbV1BFXVtHVEtdIEFQSSBmb3Ig
cGF1c2UvcmVzdW1lIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjA3NzU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkIEFQSSB0byBwYXVzZSB0aGUgcmVuZGVyaW5nIG9mIHRoZSBXZWJW
aWV3LiBUaGlzIHdpbGwgcGF1c2UgbWVkaWEgcGxheWJhY2ssCisgICAgICAgIENTUyBhbmltYXRp
b25zIGFuZCByQUYgc2NyaXB0cywgYW5kIHN0b3AgdGhlIGNvbXBvc2l0b3IgbG9vcCB0byBwcm9j
ZXNzIGFueQorICAgICAgICByZXBhaW50cy4KKworICAgICAgICBCYXNlZCBvbiBwYXRjaCBjcmVh
dGVkIGJ5IFBoaWxpcHBlIE5vcm1hbmQgPHBub3JtYW5kQGlnYWxpYS5jb20+LgorCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXcuY3BwOgorICAgICAgICAod2Via2l0
X3dlYl92aWV3X2dldF9pbnB1dF9tZXRob2RfY29udGV4dCk6CisgICAgICAgICh3ZWJraXRfd2Vi
X3ZpZXdfcGF1c2UpOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X3VucGF1c2UpOgorICAgICAg
ICAod2Via2l0X3dlYl92aWV3X2lzX3BhdXNlZCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Vi
a2l0Mmd0ay00LjAtc2VjdGlvbnMudHh0OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvd3BlL1dl
YktpdFdlYlZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9kb2NzL3dwZS0xLjAt
c2VjdGlvbnMudHh0OgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Ry
YXdpbmdBcmVhUHJveHlDb29yZGluYXRlZEdyYXBoaWNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
RHJhd2luZ0FyZWFQcm94eUNvb3JkaW5hdGVkR3JhcGhpY3M6OnN1c3BlbmRSZW5kZXJpbmcpOgor
ICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5Q29vcmRpbmF0ZWRHcmFwaGljczo6cmVz
dW1lUmVuZGVyaW5nKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9E
cmF3aW5nQXJlYVByb3h5Q29vcmRpbmF0ZWRHcmFwaGljcy5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9EcmF3aW5nQXJlYVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpzdXNwZW5kUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpyZXN1bWVSZW5kZXJpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy93
cGUvV2ViUGFnZVByb3h5V1BFLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpz
dXNwZW5kUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZXN1bWVS
ZW5kZXJpbmcpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHA6CisgICAgICAgIChXZWJLaXQ6
OkRyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljczo6c3VzcGVuZFJlbmRlcmluZyk6CisgICAg
ICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljczo6cmVzdW1lUmVuZGVy
aW5nKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9E
cmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvRHJhd2luZ0FyZWEuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2lu
Z0FyZWEubWVzc2FnZXMuaW46CisKIDIwMjAtMDQtMjMgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZy
YXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgQm91bmNlIGRpc3BsYXlXYXNSZWZyZXNoZWQoKSB2
aWEgRXZlbnREaXNwYXRjaGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvZ2xpYi9XZWJLaXRXZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9n
bGliL1dlYktpdFdlYlZpZXcuY3BwCmluZGV4IGI3NDNhMGQzNDBiZTAzZjVmY2M1YzlhNTY2NTRj
MTU3NGQ2ZTc5NGYuLjk5YzFkNzI4MjdiMTNmZDlkZDkxZmZhN2VhNmZiYjljM2JmNzE0MzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXcu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXcu
Y3BwCkBAIC00NTQ2LDUgKzQ1NDYsNTYgQEAgV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0KiB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2lucHV0X21ldGhvZF9jb250ZXh0KFdlYktpdFdlYlZpZXcKICNlbGlm
IFBMQVRGT1JNKFdQRSkKICAgICByZXR1cm4gd2ViVmlldy0+cHJpdi0+dmlldy0+aW5wdXRNZXRo
b2RDb250ZXh0KCk7CiAjZW5kaWYKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfcGF1c2U6
CisgKiBAd2ViX3ZpZXc6IGEgI1dlYktpdFdlYlZpZXcKKyAqCisgKiBQYXVzZSBET00gb2JqZWN0
cywgYW5pbWF0aW9ucyBhbmQgbWVkaWEgcGxheWJhY2suCisgKgorICogU2luY2U6IDIuMzAKKyAq
Lwordm9pZCB3ZWJraXRfd2ViX3ZpZXdfcGF1c2UoV2ViS2l0V2ViVmlldyAqd2ViVmlldykKK3sK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSk7CisgICAg
YXV0byYgcGFnZSA9IHdlYmtpdFdlYlZpZXdHZXRQYWdlKHdlYlZpZXcpOworCisgICAgcGFnZS5z
dXNwZW5kQWxsTWVkaWFQbGF5YmFjaygpOworICAgIHBhZ2Uuc3VzcGVuZEFjdGl2ZURPTU9iamVj
dHNBbmRBbmltYXRpb25zKCk7CisgICAgcGFnZS5zdXNwZW5kUmVuZGVyaW5nKCk7Cit9CiAKKy8q
KgorICogd2Via2l0X3dlYl92aWV3X3VucGF1c2U6CisgKiBAd2ViX3ZpZXc6IGEgI1dlYktpdFdl
YlZpZXcKKyAqCisgKiBSZXN1bWUgRE9NIG9iamVjdHMsIGFuaW1hdGlvbnMgYW5kIG1lZGlhIHBs
YXliYWNrLgorICoKKyAqIFNpbmNlOiAyLjMwCisqLwordm9pZCB3ZWJraXRfd2ViX3ZpZXdfdW5w
YXVzZShXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpKTsKKyAgICBhdXRvJiBwYWdlID0gd2Via2l0V2ViVmll
d0dldFBhZ2Uod2ViVmlldyk7CisKKyAgICBwYWdlLnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRB
bmltYXRpb25zKCk7CisgICAgcGFnZS5yZXN1bWVBbGxNZWRpYVBsYXliYWNrKCk7CisgICAgcGFn
ZS5yZXN1bWVSZW5kZXJpbmcoKTsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfaXNfcGF1
c2VkOgorICogQHdlYl92aWV3OiBhICNXZWJLaXRXZWJWaWV3CisgKgorICogUmV0dXJuczogYSAj
Z2Jvb2xlYW4gaW5kaWNhdGluZyBpZiBET00gb2JqZWN0cywgYW5pbWF0aW9ucyBhbmQgbWVkaWEg
cGxheWJhY2sKKyAqIGFyZSBwYXVzZWQgb3Igbm90LgorICoKKyAqIFNpbmNlOiAyLjMwCisgKi8K
K2dib29sZWFuIHdlYmtpdF93ZWJfdmlld19pc19wYXVzZWQoV2ViS2l0V2ViVmlldyAqd2ViVmll
dykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmll
dyksIEZBTFNFKTsKKyAgICBhdXRvJiBwYWdlID0gd2Via2l0V2ViVmlld0dldFBhZ2Uod2ViVmll
dyk7CisgICAgcmV0dXJuIHBhZ2UuYXJlQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnNTdXNw
ZW5kZWQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViVmlldy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3LmgKaW5kZXggYzE1MzljYzI3ODllMGM5NGFhNGE1YjFmZDM4YjBlMTU1M2Q1ODExYy4u
YTE3NWRlNjBkNDU1ZjlhZWEyNDVmMWJjNjk4NTU0MmU3Y2RlNTY4NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKQEAgLTU3Nyw2ICs1Nzcs
MTUgQEAgd2Via2l0X3dlYl92aWV3X3NldF9pbnB1dF9tZXRob2RfY29udGV4dCAgICAgICAgICAg
ICAoV2ViS2l0V2ViVmlldwogV0VCS0lUX0FQSSBXZWJLaXRJbnB1dE1ldGhvZENvbnRleHQgKgog
d2Via2l0X3dlYl92aWV3X2dldF9pbnB1dF9tZXRob2RfY29udGV4dCAgICAgICAgICAgICAoV2Vi
S2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcpOwogCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF93ZWJfdmlld19wYXVzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFdlYktp
dFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfd2ViX3ZpZXdfdW5wYXVzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRX
ZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldyk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dl
YmtpdF93ZWJfdmlld19pc19wYXVzZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFdlYktp
dFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3KTsKKwogR19FTkRfREVDTFMKIAogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0
Mmd0ay00LjAtc2VjdGlvbnMudHh0IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9k
b2NzL3dlYmtpdDJndGstNC4wLXNlY3Rpb25zLnR4dAppbmRleCAxYmM0MjcwYzlmNDBlOGZiOGM0
ZmU2NmNlNmUzYmI1MGIzZmY5NzE3Li43ZGIzNmY1ZWE1MDdlYmVjYWFmMmU4YTk3Yjc1MDUyZWU0
MmMyYjM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mv
d2Via2l0Mmd0ay00LjAtc2VjdGlvbnMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQKQEAgLTI4NSw2ICsyODUs
OSBAQCB3ZWJraXRfd2ViX3ZpZXdfc2VuZF9tZXNzYWdlX3RvX3BhZ2UKIHdlYmtpdF93ZWJfdmll
d19zZW5kX21lc3NhZ2VfdG9fcGFnZV9maW5pc2gKIHdlYmtpdF93ZWJfdmlld19zZXRfaW5wdXRf
bWV0aG9kX2NvbnRleHQKIHdlYmtpdF93ZWJfdmlld19nZXRfaW5wdXRfbWV0aG9kX2NvbnRleHQK
K3dlYmtpdF93ZWJfdmlld19wYXVzZQord2Via2l0X3dlYl92aWV3X3VucGF1c2UKK3dlYmtpdF93
ZWJfdmlld19pc19wYXVzZWQKIAogPFNVQlNFQ1RJT04gV2ViS2l0SmF2YXNjcmlwdFJlc3VsdD4K
IFdlYktpdEphdmFzY3JpcHRSZXN1bHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS93cGUvV2ViS2l0V2ViVmlldy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L3dwZS9XZWJLaXRXZWJWaWV3LmgKaW5kZXggMmIyZDc4ZDFiYjUzYTJmZmRiNzBjMmE0YmRiYzg4
NGFmNjAzNmY2MC4uZTc0NjBlYjk3ODgxYmQyNTk3ZTVkMjI2YmRjYTk2NmNkZDU0OWQzNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRXZWJWaWV3LmgK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRXZWJWaWV3LmgKQEAg
LTU1NCw2ICs1NTQsMTUgQEAgd2Via2l0X3dlYl92aWV3X3NldF9pbnB1dF9tZXRob2RfY29udGV4
dCAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldwogV0VCS0lUX0FQSSBXZWJLaXRJbnB1dE1ldGhv
ZENvbnRleHQgKgogd2Via2l0X3dlYl92aWV3X2dldF9pbnB1dF9tZXRob2RfY29udGV4dCAgICAg
ICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAgICp3ZWJfdmlldyk7CiAKK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X3dlYl92aWV3X3BhdXNlICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAgICp3ZWJfdmlldyk7CisKK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X3dlYl92aWV3X3VucGF1c2UgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAgICp3ZWJfdmlldyk7CisKK1dFQktJ
VF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF93ZWJfdmlld19pc19wYXVzZWQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgICAqd2ViX3ZpZXcpOworCiBH
X0VORF9ERUNMUwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS93cGUvZG9jcy93cGUtMS4wLXNlY3Rpb25zLnR4dCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS93cGUvZG9jcy93cGUtMS4wLXNlY3Rpb25zLnR4dAppbmRleCAwYzJkYzY1MTVjNjZi
Nzk1NzdhN2Q1ODA3Y2E0YTBmYmM1ZDA3NTM5Li45NGI1ZWVkZjFlMjZiMjY4OGMxOTRjZDliNTc1
ODI3YTIyZTZiYzdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3Bl
L2RvY3Mvd3BlLTEuMC1zZWN0aW9ucy50eHQKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL3dwZS9kb2NzL3dwZS0xLjAtc2VjdGlvbnMudHh0CkBAIC0yNTcsNiArMjU3LDkgQEAgd2Vi
a2l0X3dlYl92aWV3X3NlbmRfbWVzc2FnZV90b19wYWdlCiB3ZWJraXRfd2ViX3ZpZXdfc2VuZF9t
ZXNzYWdlX3RvX3BhZ2VfZmluaXNoCiB3ZWJraXRfd2ViX3ZpZXdfc2V0X2lucHV0X21ldGhvZF9j
b250ZXh0CiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2lucHV0X21ldGhvZF9jb250ZXh0Cit3ZWJraXRf
d2ViX3ZpZXdfcGF1c2UKK3dlYmtpdF93ZWJfdmlld191bnBhdXNlCit3ZWJraXRfd2ViX3ZpZXdf
aXNfcGF1c2VkCiAKIDxTVUJTRUNUSU9OIFdlYktpdEphdmFzY3JpcHRSZXN1bHQ+CiBXZWJLaXRK
YXZhc2NyaXB0UmVzdWx0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhUHJveHlDb29yZGluYXRlZEdyYXBoaWNzLmNwcCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFQ
cm94eUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCmluZGV4IDZiYmQxY2FiZDI3YWUyODQ3NjQ4YThj
MmVkY2Y5YWNmY2Q1NTZmZjUuLjM1NWZmMzczYTg0MTZhNmQ5YTk2MTgwNTJlNWY4MjU2NjVkZWQx
NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvRHJhd2luZ0FyZWFQcm94eUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFQcm94eUNvb3Jk
aW5hdGVkR3JhcGhpY3MuY3BwCkBAIC0xNTIsNiArMTUyLDE4IEBAIHZvaWQgRHJhd2luZ0FyZWFQ
cm94eUNvb3JkaW5hdGVkR3JhcGhpY3M6OnNldEJhY2tpbmdTdG9yZUlzRGlzY2FyZGFibGUoYm9v
bCBpc0JhCiAjZW5kaWYKIH0KIAorI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKQor
dm9pZCBEcmF3aW5nQXJlYVByb3h5Q29vcmRpbmF0ZWRHcmFwaGljczo6c3VzcGVuZFJlbmRlcmlu
ZygpCit7CisgICAgc2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWE6OlN1c3BlbmRSZW5kZXJpbmco
KSk7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFQcm94eUNvb3JkaW5hdGVkR3JhcGhpY3M6OnJlc3Vt
ZVJlbmRlcmluZygpCit7CisgICAgc2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWE6OlJlc3VtZVJl
bmRlcmluZygpKTsKK30KKyNlbmRpZgorCiB2b2lkIERyYXdpbmdBcmVhUHJveHlDb29yZGluYXRl
ZEdyYXBoaWNzOjp1cGRhdGUodWludDY0X3QgYmFja2luZ1N0b3JlU3RhdGVJRCwgY29uc3QgVXBk
YXRlSW5mbyYgdXBkYXRlSW5mbykKIHsKICAgICBBU1NFUlRfQVJHKGJhY2tpbmdTdG9yZVN0YXRl
SUQsIGJhY2tpbmdTdG9yZVN0YXRlSUQgPD0gbV9jdXJyZW50QmFja2luZ1N0b3JlU3RhdGVJRCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNz
L0RyYXdpbmdBcmVhUHJveHlDb29yZGluYXRlZEdyYXBoaWNzLmggYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhUHJveHlDb29yZGluYXRlZEdy
YXBoaWNzLmgKaW5kZXggZDc2OTUwODhlN2NmYzRmNjM4ZjE1NzMzODc1NGY5ZjE1NzQ4OTc0OS4u
MzliNmMwNDJlODdjMTRjYzg5Y2IzZmE1MmEzZTdiZjA0ZThhNTBiMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYVByb3h5
Q29vcmRpbmF0ZWRHcmFwaGljcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFQcm94eUNvb3JkaW5hdGVkR3JhcGhpY3MuaApAQCAt
NTYsNiArNTYsMTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRldmljZVNjYWxlRmFjdG9yRGlkQ2hh
bmdlKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCB3YWl0Rm9yQmFja2luZ1N0b3JlVXBkYXRlT25OZXh0
UGFpbnQoKSBvdmVycmlkZTsKICAgICB2b2lkIHNldEJhY2tpbmdTdG9yZUlzRGlzY2FyZGFibGUo
Ym9vbCkgb3ZlcnJpZGU7CisjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXUEUpCisgICAg
dm9pZCBzdXNwZW5kUmVuZGVyaW5nKCkgb3ZlcnJpZGU7CisgICAgdm9pZCByZXN1bWVSZW5kZXJp
bmcoKSBvdmVycmlkZTsKKyNlbmRpZgogCiAgICAgLy8gSVBDIG1lc3NhZ2UgaGFuZGxlcnMKICAg
ICB2b2lkIHVwZGF0ZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBjb25zdCBVcGRhdGVJ
bmZvJikgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9EcmF3
aW5nQXJlYVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5
LmgKaW5kZXggYjBhODU3MTY3OWQ2NmJiZGUxZjM4MGExMTQ3OTdiODhhYjFmNDRmOC4uZTkyYmYw
NjFhOWEzZjJmMDg1Zjc2MmYwOWFjNDlkMTU0MTM3YzA5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaApAQCAtMTIyLDYgKzEyMiwxMSBAQCBwdWJsaWM6CiAg
ICAgV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKCkgeyByZXR1cm4gbV9wcm9jZXNzLmdldCgpOyB9
CiAgICAgY29uc3QgV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKCkgY29uc3QgeyByZXR1cm4gbV9w
cm9jZXNzLmdldCgpOyB9CiAKKyNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdQRSkKKyAg
ICB2aXJ0dWFsIHZvaWQgc3VzcGVuZFJlbmRlcmluZygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVzdW1lUmVuZGVyaW5nKCkgPSAwOworI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICBEcmF3aW5n
QXJlYVByb3h5KERyYXdpbmdBcmVhVHlwZSwgV2ViUGFnZVByb3h5JiwgV2ViUHJvY2Vzc1Byb3h5
Jik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggNWJmZjM0MWY1
ZDdmZWVlZmQ5NmU5ZDI1ZTU2ZGI5ZjhhODlhMGI0YS4uNDBjZGNhMzY4MTM4OGQxN2I2ZDZkMzcy
NmM1NDAzZTBhMWI1ODU4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgK
QEAgLTg0Myw2ICs4NDMsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZWxldGVTdXJyb3VuZGluZyhp
bnQ2NF90IG9mZnNldCwgdW5zaWduZWQgY2hhcmFjdGVyQ291bnQpOwogCiAgICAgdm9pZCBzZXRJ
bnB1dE1ldGhvZFN0YXRlKE9wdGlvbmFsPElucHV0TWV0aG9kU3RhdGU+JiYpOworCisgICAgdm9p
ZCBzdXNwZW5kUmVuZGVyaW5nKCk7CisgICAgdm9pZCByZXN1bWVSZW5kZXJpbmcoKTsKICNlbmRp
ZgogCiAjaWYgUExBVEZPUk0oR1RLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvZ3RrL1dlYlBhZ2VQcm94eUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsv
V2ViUGFnZVByb3h5R3RrLmNwcAppbmRleCBlOThiMDUyMzYxNzA4NzliYTI3NzU4NTgwNzNiYjBh
ZTk2YmQ1OGYzLi41MTc4MzE2ZWEwZmNjNTRlMDQwYWNlMzQyNDFiODcyZGZlOTA4ZDRjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcApAQCAt
MjcsNiArMjcsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94
eS5oIgogCisjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eS5oIgogI2luY2x1ZGUgIklucHV0TWV0
aG9kU3RhdGUuaCIKICNpbmNsdWRlICJQYWdlQ2xpZW50SW1wbC5oIgogI2luY2x1ZGUgIldlYktp
dFVzZXJNZXNzYWdlLmgiCkBAIC0xOTMsNCArMTk0LDE2IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojp0
aGVtZURpZENoYW5nZSgpCiAgICAgZWZmZWN0aXZlQXBwZWFyYW5jZURpZENoYW5nZSgpOwogfQog
Cit2b2lkIFdlYlBhZ2VQcm94eTo6c3VzcGVuZFJlbmRlcmluZygpCit7CisgICAgQVNTRVJUKG1f
ZHJhd2luZ0FyZWEpOworICAgIG1fZHJhd2luZ0FyZWEtPnN1c3BlbmRSZW5kZXJpbmcoKTsKK30K
Kwordm9pZCBXZWJQYWdlUHJveHk6OnJlc3VtZVJlbmRlcmluZygpCit7CisgICAgQVNTRVJUKG1f
ZHJhd2luZ0FyZWEpOworICAgIG1fZHJhd2luZ0FyZWEtPnJlc3VtZVJlbmRlcmluZygpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL3dwZS9XZWJQYWdlUHJveHlXUEUuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd3Bl
L1dlYlBhZ2VQcm94eVdQRS5jcHAKaW5kZXggOGY2NDBkYmQ4MjU3OTNhYWM1OGZhMWRkMmQxZTRk
YmJhZmViNzE0Mi4uY2MxYjUxNjVmMzQwYTdkNWVlODU2MjY5ZDM4ZTAwNjYwOGUyMDhmZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd3BlL1dlYlBhZ2VQcm94eVdQRS5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd3BlL1dlYlBhZ2VQcm94eVdQRS5jcHAKQEAg
LTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJv
eHkuaCIKIAorI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHkuaCIKICNpbmNsdWRlICJFZGl0b3JT
dGF0ZS5oIgogI2luY2x1ZGUgIklucHV0TWV0aG9kU3RhdGUuaCIKICNpbmNsdWRlICJQYWdlQ2xp
ZW50SW1wbC5oIgpAQCAtMTAxLDQgKzEwMiwxNiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0SW5w
dXRNZXRob2RTdGF0ZShPcHRpb25hbDxJbnB1dE1ldGhvZFN0YXRlPiYmIHN0YXRlKQogICAgIHN0
YXRpY19jYXN0PFBhZ2VDbGllbnRJbXBsJj4ocGFnZUNsaWVudCgpKS5zZXRJbnB1dE1ldGhvZFN0
YXRlKFdURk1vdmUoc3RhdGUpKTsKIH0KIAordm9pZCBXZWJQYWdlUHJveHk6OnN1c3BlbmRSZW5k
ZXJpbmcoKQoreworICAgIEFTU0VSVChtX2RyYXdpbmdBcmVhKTsKKyAgICBtX2RyYXdpbmdBcmVh
LT5zdXNwZW5kUmVuZGVyaW5nKCk7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5OjpyZXN1bWVSZW5k
ZXJpbmcoKQoreworICAgIEFTU0VSVChtX2RyYXdpbmdBcmVhKTsKKyAgICBtX2RyYXdpbmdBcmVh
LT5yZXN1bWVSZW5kZXJpbmcoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRH
cmFwaGljcy5jcHAKaW5kZXggZWYxYzhjZGJiYWQyZWY1YWRhMzIxMmM4NTFjNjJhMTQ5ZjlmZWEw
ZS4uZGM1ZDU0MDBiNWU3OGRmMjRlZmNjMjBkYTFlNmQ1N2NlOWIyZDU3YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3
aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFDb29yZGluYXRlZEdy
YXBoaWNzLmNwcApAQCAtNDY5LDYgKzQ2OSwxOCBAQCB2b2lkIERyYXdpbmdBcmVhQ29vcmRpbmF0
ZWRHcmFwaGljczo6ZGlkVXBkYXRlKCkKICAgICBkaXNwbGF5VGltZXJGaXJlZCgpOwogfQogCisj
aWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXUEUpCit2b2lkIERyYXdpbmdBcmVhQ29vcmRp
bmF0ZWRHcmFwaGljczo6c3VzcGVuZFJlbmRlcmluZygpCit7CisgICAgc3VzcGVuZFBhaW50aW5n
KCk7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzOjpyZXN1bWVSZW5k
ZXJpbmcoKQoreworICAgIHJlc3VtZVBhaW50aW5nKCk7Cit9CisjZW5kaWYKKwogdm9pZCBEcmF3
aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3M6OnNlbmREaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0
ZSgpCiB7CiAgICAgQVNTRVJUKCFtX2lzV2FpdGluZ0ZvckRpZFVwZGF0ZSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Ry
YXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhp
Y3MuaAppbmRleCA1MDc4ZWM0NmRjNTdkMWEyOGVjYzRlMGYxZWQ2ZDAxYzQ3MmEwODEzLi5jM2Zm
MGQ4MGIzYjY3OWQyMTYwYjg1OTBmMzI5MDdkMjZmZTFhMDEzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVh
Q29vcmRpbmF0ZWRHcmFwaGljcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzLmgK
QEAgLTg2LDYgKzg2LDEwIEBAIHByaXZhdGU6CiAgICAgLy8gSVBDIG1lc3NhZ2UgaGFuZGxlcnMu
CiAgICAgdm9pZCB1cGRhdGVCYWNraW5nU3RvcmVTdGF0ZSh1aW50NjRfdCBiYWNraW5nU3RvcmVT
dGF0ZUlELCBib29sIHJlc3BvbmRJbW1lZGlhdGVseSwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3Is
IGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxP
ZmZzZXQpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkVXBkYXRlKCkgb3ZlcnJpZGU7CisjaWYgUExB
VEZPUk0oR1RLKSB8fCBQTEFURk9STShXUEUpCisgICAgdm9pZCBzdXNwZW5kUmVuZGVyaW5nKCkg
b3ZlcnJpZGU7CisgICAgdm9pZCByZXN1bWVSZW5kZXJpbmcoKSBvdmVycmlkZTsKKyNlbmRpZgog
CiAgICAgdm9pZCBzZW5kRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUoKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKaW5kZXggMTE3NWE3NzYy
MzU3ZDc0NzY0ZTkzOTFmNjRmYjI3NWE4ZmY3ZjU0OC4uNWUxOWU4MDdhNDkzMWViODgzODRhYjk4
OTc0ZDU5NzIzM2QwMjY2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvRHJhd2luZ0FyZWEuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9EcmF3aW5nQXJlYS5oCkBAIC0xODcsNiArMTg3LDExIEBAIHByaXZhdGU6CiAgICAgdmlydHVh
bCB2b2lkIGFkZFRyYW5zYWN0aW9uQ2FsbGJhY2tJRChXZWJLaXQ6OkNhbGxiYWNrSUQpIHsgQVNT
RVJUX05PVF9SRUFDSEVEKCk7IH0KICNlbmRpZgogCisjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFU
Rk9STShXUEUpCisgICAgdmlydHVhbCB2b2lkIHN1c3BlbmRSZW5kZXJpbmcoKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHJlc3VtZVJlbmRlcmluZygpID0gMDsKKyNlbmRpZgorCiAgICAgYm9vbCBt
X2hhc1JlbW92ZWRNZXNzYWdlUmVjZWl2ZXIgeyBmYWxzZSB9OwogfTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEubWVzc2FnZXMuaW4g
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5tZXNzYWdlcy5p
bgppbmRleCBmMjA3ZTEwN2U5NTI3MGE3ZjkxODljYmE5YWI2Nzc1MzRhYTIyNzkyLi43ODlkM2Rj
OGE5NzA2ZmI2ZDQ0M2Y1YWNjNmMzMTNjZTk3YzgyZTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5tZXNzYWdlcy5pbgorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5tZXNzYWdlcy5pbgpAQCAt
NDIsNCArNDIsMTAgQEAgbWVzc2FnZXMgLT4gRHJhd2luZ0FyZWEgTm90UmVmQ291bnRlZCB7CiAg
ICAgCiAgICAgQWRkVHJhbnNhY3Rpb25DYWxsYmFja0lEKFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxs
YmFja0lEKQogI2VuZGlmCisKKyNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdQRSkKKyAg
ICBTdXNwZW5kUmVuZGVyaW5nKCkKKyAgICBSZXN1bWVSZW5kZXJpbmcoKQorI2VuZGlmCisKIH0K
</data>
<flag name="review"
          id="412850"
          type_id="1"
          status="-"
          setter="cgarcia"
    />
          </attachment>
      

    </bug>

</bugzilla>