<?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>30004</bug_id>
          
          <creation_ts>2009-10-02 01:46:38 -0700</creation_ts>
          <short_desc>[GStreamer] Should handle BUFFERING messages</short_desc>
          <delta_ts>2010-02-17 00:39:33 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Media</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</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>
          <dependson>33889</dependson>
    
    <dependson>34881</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sebastian Dröge (slomo)">slomo</reporter>
          <assigned_to name="Philippe Normand">pnormand</assigned_to>
          <cc>bugzilla</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>pnormand</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>151795</commentid>
    <comment_count>0</comment_count>
    <who name="Sebastian Dröge (slomo)">slomo</who>
    <bug_when>2009-10-02 01:46:38 -0700</bug_when>
    <thetext>Hi,
currently there&apos;s no handling of BUFFERING messages. These say something about the current buffering state, i.e. if things are still being buffered, if enough is buffered, etc. This is probably quite interesting for Webkit ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151799</commentid>
    <comment_count>1</comment_count>
    <who name="Sebastian Dröge (slomo)">slomo</who>
    <bug_when>2009-10-02 01:58:51 -0700</bug_when>
    <thetext>This might be useful for the MediaPlayer::BytesLoaded() and to correctly set enoughData/futureData things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>173080</commentid>
    <comment_count>2</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2009-12-18 02:26:20 -0800</bug_when>
    <thetext>Maybe we could enable progressive downloading/on-disk buffering like Totem does now, what do you think slomo?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178040</commentid>
    <comment_count>3</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-01-07 00:02:23 -0800</bug_when>
    <thetext>Ping slomo :)

I actually wrote a patch for on-disk buffering, would you care to have a look? ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178198</commentid>
    <comment_count>4</comment_count>
      <attachid>46055</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-01-07 09:06:10 -0800</bug_when>
    <thetext>Created attachment 46055
initial support for on-disk buffering of videos</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178199</commentid>
    <comment_count>5</comment_count>
      <attachid>46056</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-01-07 09:06:39 -0800</bug_when>
    <thetext>Created attachment 46056
draw the buffering status in the media controls</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178201</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-07 09:09:15 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 46055 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178202</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-07 09:09:37 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 46056 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178670</commentid>
    <comment_count>8</comment_count>
    <who name="Sebastian Dröge (slomo)">slomo</who>
    <bug_when>2010-01-08 07:40:25 -0800</bug_when>
    <thetext>Why is there the 200ms timeout when receiving a buffering message instead of using a idle callback or a timeout of 0? Also async. bus signals/watches are always going through the main thread, no need to do a timeout just for GTK threading requirements.

When the duration changes after a buffering query, shouldn&apos;t you call durationChanged() to signal the change?

Apart from that it looks good (except some code style issues), but I don&apos;t know the media player API and if all this is the desired behaviour :)

Oh and one small thing... the queueing/buffering is done by playbin2, not decodebin2 as the comment says ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178671</commentid>
    <comment_count>9</comment_count>
    <who name="Sebastian Dröge (slomo)">slomo</who>
    <bug_when>2010-01-08 07:41:41 -0800</bug_when>
    <thetext>...and buffering also happens when no temp file name exists, for example when playing a random HTTP stream without a temporary file. In those cases you want to show the buffering state too I think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178979</commentid>
    <comment_count>10</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-01-09 05:31:54 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Why is there the 200ms timeout when receiving a buffering message instead of
&gt; using a idle callback or a timeout of 0? Also async. bus signals/watches are
&gt; always going through the main thread, no need to do a timeout just for GTK
&gt; threading requirements.
&gt; 

If I set the timeout to 0 the source is immediately removed because the stop value of the buffering range is -1.

&gt; When the duration changes after a buffering query, shouldn&apos;t you call
&gt; durationChanged() to signal the change?
&gt; 

yes :)

&gt; Apart from that it looks good (except some code style issues), but I don&apos;t know
&gt; the media player API and if all this is the desired behaviour :)
&gt; 

Well the style-bot didn&apos;t complain ;) But what is in your mind?

&gt; Oh and one small thing... the queueing/buffering is done by playbin2, not
&gt; decodebin2 as the comment says ;)

Oops right, I confused with uridecodebin in fact. The queue2 behavior is set there, as far as I could see in the code, right?

(In reply to comment #9)
&gt; ...and buffering also happens when no temp file name exists, for example when
&gt; playing a random HTTP stream without a temporary file. In those cases you want
&gt; to show the buffering state too I think.

Hm yes, so I guess I can rely on m_startedBuffering instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178982</commentid>
    <comment_count>11</comment_count>
      <attachid>46205</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-01-09 06:26:36 -0800</bug_when>
    <thetext>Created attachment 46205
initial support for on-disk buffering of videos</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178984</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-09 06:31:10 -0800</bug_when>
    <thetext>Attachment 46205 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:572:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:572:  Use 0 instead of NULL.  [readability/null] [5]
WebCore/platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:1091:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179297</commentid>
    <comment_count>13</comment_count>
      <attachid>46262</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-01-11 00:27:23 -0800</bug_when>
    <thetext>Created attachment 46262
initial support for on-disk buffering of videos</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182187</commentid>
    <comment_count>14</comment_count>
    <who name="Sebastian Dröge (slomo)">slomo</who>
    <bug_when>2010-01-19 02:52:40 -0800</bug_when>
    <thetext>Ok, it&apos;s all good then :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182323</commentid>
    <comment_count>15</comment_count>
      <attachid>46262</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-01-19 10:59:20 -0800</bug_when>
    <thetext>Comment on attachment 46262
initial support for on-disk buffering of videos

 605         // Update maxTimeLoaded only if the media duration is
 606         // available. Otherwise we can&apos;t compute it.

This comment seems misplaced. It should be above this, shouldn&apos;t it?:

 615         if (m_mediaDuration) {
 616             m_maxTimeLoaded = static_cast&lt;float&gt;((fillStatus * m_mediaDuration) / 100.0);
 617             LOG_VERBOSE(Media, &quot;Updated maxTimeLoaded: %f&quot;, m_maxTimeLoaded);
 618         }

 588 bool MediaPlayerPrivate::queryBufferingStats()
[...]
 625             // Media is now fully loaded. It will play even if network
 626             // connection is cut.
 627             m_networkState = MediaPlayer::Loaded;
 628             m_player-&gt;networkStateChanged();

I think this function is doing more than it should, and stepping into the updateStates function&apos;s resposibilities. Updating the states should be a monopoly of updateStates, and this function should just help track the information it needs to decide, and call it (notice that you end up duplicating some of this logic inside updateStates, though with less accuracy if you don&apos;t have the duration!).

 745     bool completelyLoaded = maxTimeLoaded() == duration();

This means you should probably use a member variable to track whether you are fully loaded, not something you calculate inside updateStates.

 1089     // Activate on-disk buffering and load the media uri.
 1090     g_object_set(m_playBin, &quot;uri&quot;, url.utf8().data(), &quot;flags&quot;, flags | GST_PLAY_FLAG_DOWNLOAD, NULL);

The MediaPlayer has an &apos;autobuffer&apos; property. You may want to look at what it is for, and how it affects this work. Also looking at this seems to be useful: http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html#attr-media-autobuffer

I am not sure we want to always enable buffering.The same goes for playRequired: I wrote a very dumb patch months ago that had similar behavior, but bdash was not sure it was the intended behavior, and wanted to know where in the spec the behavior was defined, which I think makes sense - we want to be compatible here; all such policy should already be encoded inside the element or the cross-platform media player.

 244     , m_mediaDuration(0.0)

I don&apos;t think we really need this. Is it just for caching the duration? Why not cache it using a static variable inside duration()? I feel having two sources for this information is wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182722</commentid>
    <comment_count>16</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-01-20 03:42:21 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 46262 [details])
&gt;  605         // Update maxTimeLoaded only if the media duration is
&gt;  606         // available. Otherwise we can&apos;t compute it.
&gt; 
&gt; This comment seems misplaced. It should be above this, shouldn&apos;t it?:
&gt; 
&gt;  615         if (m_mediaDuration) {
&gt;  616             m_maxTimeLoaded = static_cast&lt;float&gt;((fillStatus *
&gt; m_mediaDuration) / 100.0);
&gt;  617             LOG_VERBOSE(Media, &quot;Updated maxTimeLoaded: %f&quot;,
&gt; m_maxTimeLoaded);
&gt;  618         }
&gt; 

Right :)

&gt;  588 bool MediaPlayerPrivate::queryBufferingStats()
&gt; [...]
&gt;  625             // Media is now fully loaded. It will play even if network
&gt;  626             // connection is cut.
&gt;  627             m_networkState = MediaPlayer::Loaded;
&gt;  628             m_player-&gt;networkStateChanged();
&gt; 
&gt; I think this function is doing more than it should, and stepping into the
&gt; updateStates function&apos;s resposibilities. Updating the states should be a
&gt; monopoly of updateStates, and this function should just help track the
&gt; information it needs to decide, and call it (notice that you end up duplicating
&gt; some of this logic inside updateStates, though with less accuracy if you don&apos;t
&gt; have the duration!).
&gt; 

You are right on this too. 

&gt;  745     bool completelyLoaded = maxTimeLoaded() == duration();
&gt; 
&gt; This means you should probably use a member variable to track whether you are
&gt; fully loaded, not something you calculate inside updateStates.
&gt; 

Huh? If I did &quot;if (maxTimeLoaded() == duration())&quot; would you have ticked too? I think having a member variable is kinda overkill in this context ;)

&gt;  1089     // Activate on-disk buffering and load the media uri.
&gt;  1090     g_object_set(m_playBin, &quot;uri&quot;, url.utf8().data(), &quot;flags&quot;, flags |
&gt; GST_PLAY_FLAG_DOWNLOAD, NULL);
&gt; 
&gt; The MediaPlayer has an &apos;autobuffer&apos; property. You may want to look at what it
&gt; is for, and how it affects this work. Also looking at this seems to be useful:
&gt; http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html#attr-media-autobuffer
&gt; 

Absolutely right. So I implemented setAutobuffer() but it was never called, so I opened Bug 33889.

&gt; I am not sure we want to always enable buffering.The same goes for
&gt; playRequired: I wrote a very dumb patch months ago that had similar behavior,
&gt; but bdash was not sure it was the intended behavior, and wanted to know where
&gt; in the spec the behavior was defined, which I think makes sense - we want to be
&gt; compatible here; all such policy should already be encoded inside the element
&gt; or the cross-platform media player.
&gt; 

Yep I can remove that playRequired member variable. I added it in the first place because GStreamer will internally pause the pipeline at the beginning of on-disk buffering if not enough data has been pulled. So I think i can test both m_paused and the fillTimeoutId value.

&gt;  244     , m_mediaDuration(0.0)
&gt; 
&gt; I don&apos;t think we really need this. Is it just for caching the duration? Why not
&gt; cache it using a static variable inside duration()? I feel having two sources
&gt; for this information is wrong.

Inspiration for this one came from the QTKit media player which caches the duration too. I don&apos;t think I can store it as a static variable inside duration() because it is updated at other places of the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183556</commentid>
    <comment_count>17</comment_count>
      <attachid>46262</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-01-22 02:06:21 -0800</bug_when>
    <thetext>Comment on attachment 46262
initial support for on-disk buffering of videos

Just a few nitpicks on top of gustavo&apos;s comments.

&gt;+#include &lt;glib/gstdio.h&gt;

You should not include anything other than the toplevel glib header.

&gt; #include &lt;gst/gst.h&gt;
&gt; #include &lt;gst/interfaces/mixer.h&gt;
&gt; #include &lt;gst/interfaces/xoverlay.h&gt;
&gt;@@ -48,6 +49,18 @@
&gt; #include &lt;math.h&gt;
&gt; #include &lt;wtf/gtk/GOwnPtr.h&gt;
&gt; 

I have been informed that this stuff is not public and that you have to copy it like this in order to use it, but a comment saying just that would be good IMHO.

&gt;+// GstPlayFlags flags from playbin2
&gt;+typedef enum {
&gt;+    GST_PLAY_FLAG_VIDEO         = 0x01,
&gt;+    GST_PLAY_FLAG_AUDIO         = 0x02,
&gt;+    GST_PLAY_FLAG_TEXT          = 0x04,
&gt;+    GST_PLAY_FLAG_VIS           = 0x08,
&gt;+    GST_PLAY_FLAG_SOFT_VOLUME   = 0x10,
&gt;+    GST_PLAY_FLAG_NATIVE_AUDIO  = 0x20,
&gt;+    GST_PLAY_FLAG_NATIVE_VIDEO  = 0x40,
&gt;+    GST_PLAY_FLAG_DOWNLOAD      = 0x80
&gt;+} GstPlayFlags;
&gt;+



&gt;+void MediaPlayerPrivate::processBufferingStats(GstMessage* message)
&gt;+{
&gt;+    GstBufferingMode mode;
&gt;+
&gt;+    gst_message_parse_buffering_stats(message, &amp;mode, 0, 0, 0);
&gt;+    if (mode != GST_BUFFERING_DOWNLOAD)
&gt;+        return;
&gt;+
&gt;+    if (!m_startedBuffering) {
&gt;+        m_startedBuffering = true;
&gt;+
&gt;+        if (m_fillTimeoutId &gt; 0) {
&gt;+            g_source_remove(m_fillTimeoutId);
&gt;+            m_fillTimeoutId = 0;

I guess there&apos;s really no need to set the id to anything if you are going to write over it in the next line.

&gt;+        }
&gt;+
&gt;+        m_fillTimeoutId = g_timeout_add(200, (GSourceFunc) bufferingTimeoutCallback, this);
&gt;+    }
&gt;+}
&gt;+
&gt;+bool MediaPlayerPrivate::queryBufferingStats()
&gt;+{
&gt;+    GstQuery* query = gst_query_new_buffering(GST_FORMAT_PERCENT);
&gt;+
&gt;+    if (gst_element_query(m_playBin, query)) {
&gt;+        gint64 start, stop;
&gt;+        gdouble fillStatus;
&gt;+
&gt;+        gst_query_parse_buffering_range(query, 0, &amp;start, &amp;stop, 0);
&gt;+
&gt;+        if (stop != -1)
&gt;+            fillStatus = 100.0 * stop / GST_FORMAT_PERCENT_MAX;
&gt;+        else
&gt;+            fillStatus = 100.0;
&gt;+
&gt;+        LOG_VERBOSE(Media, &quot;Download buffer filled up to %f%%&quot;, fillStatus);
&gt;+
&gt;+        // Update maxTimeLoaded only if the media duration is
&gt;+        // available. Otherwise we can&apos;t compute it.
&gt;+        if (!m_mediaDuration) {
&gt;+            float newDuration = duration();
&gt;+            if (!isinf(newDuration)) {
&gt;+                m_mediaDuration = newDuration;
&gt;+                durationChanged();
&gt;+            }
&gt;+        }
&gt;+
&gt;+        if (m_mediaDuration) {
&gt;+            m_maxTimeLoaded = static_cast&lt;float&gt;((fillStatus * m_mediaDuration) / 100.0);
&gt;+            LOG_VERBOSE(Media, &quot;Updated maxTimeLoaded: %f&quot;, m_maxTimeLoaded);
&gt;+        }
&gt;+
&gt;+        if (fillStatus == 100.0) {
&gt;+            // Buffering is done, remove the fill source from the main loop.
&gt;+            m_fillTimeoutId = 0;

Unless I&apos;m missing something you are not actually removing any source here.


&gt;+            gst_query_unref(query);
&gt;+
&gt;+            // Media is now fully loaded. It will play even if network
&gt;+            // connection is cut.
&gt;+            m_networkState = MediaPlayer::Loaded;
&gt;+            m_player-&gt;networkStateChanged();
&gt;+
&gt;+            return FALSE;
&gt;+        }
&gt;+
&gt;+        if ((fillStatus &gt; 0) &amp;&amp; (m_readyState &lt; MediaPlayer::HaveFutureData)) {
&gt;+            // Buffering started, we should now have enough data to
&gt;+            // start playback if it was requested.
&gt;+            m_readyState = MediaPlayer::HaveFutureData;
&gt;+            m_player-&gt;readyStateChanged();
&gt;+            if (m_paused &amp;&amp; m_playRequired) {
&gt;+                m_playRequired = false;
&gt;+                gst_element_set_state(m_playBin, GST_STATE_PLAYING);
&gt;+            }
&gt;+        }
&gt;+    }
&gt;+
&gt;+    gst_query_unref(query);
&gt;+    return TRUE;
&gt;+}
&gt;+</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183576</commentid>
    <comment_count>18</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-01-22 02:43:44 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 46262 [details])
&gt; Just a few nitpicks on top of gustavo&apos;s comments.
&gt; 
&gt; &gt;+#include &lt;glib/gstdio.h&gt;
&gt; 
&gt; You should not include anything other than the toplevel glib header.
&gt; 

Right and in fact Bastien Nocera told me that I should not need to manually remove the temp file so this include should be removed in the next iteration of the patch :)

&gt; &gt; #include &lt;gst/gst.h&gt;
&gt; &gt; #include &lt;gst/interfaces/mixer.h&gt;
&gt; &gt; #include &lt;gst/interfaces/xoverlay.h&gt;
&gt; &gt;@@ -48,6 +49,18 @@
&gt; &gt; #include &lt;math.h&gt;
&gt; &gt; #include &lt;wtf/gtk/GOwnPtr.h&gt;
&gt; &gt; 
&gt; 
&gt; I have been informed that this stuff is not public and that you have to copy it
&gt; like this in order to use it, but a comment saying just that would be good
&gt; IMHO.
&gt; 

Yes sorry I will add a comment.

&gt; &gt;+// GstPlayFlags flags from playbin2
&gt; &gt;+typedef enum {
&gt; &gt;+    GST_PLAY_FLAG_VIDEO         = 0x01,
&gt; &gt;+    GST_PLAY_FLAG_AUDIO         = 0x02,
&gt; &gt;+    GST_PLAY_FLAG_TEXT          = 0x04,
&gt; &gt;+    GST_PLAY_FLAG_VIS           = 0x08,
&gt; &gt;+    GST_PLAY_FLAG_SOFT_VOLUME   = 0x10,
&gt; &gt;+    GST_PLAY_FLAG_NATIVE_AUDIO  = 0x20,
&gt; &gt;+    GST_PLAY_FLAG_NATIVE_VIDEO  = 0x40,
&gt; &gt;+    GST_PLAY_FLAG_DOWNLOAD      = 0x80
&gt; &gt;+} GstPlayFlags;
&gt; &gt;+
&gt; 
&gt; 
&gt; 
&gt; &gt;+void MediaPlayerPrivate::processBufferingStats(GstMessage* message)
&gt; &gt;+{
&gt; &gt;+    GstBufferingMode mode;
&gt; &gt;+
&gt; &gt;+    gst_message_parse_buffering_stats(message, &amp;mode, 0, 0, 0);
&gt; &gt;+    if (mode != GST_BUFFERING_DOWNLOAD)
&gt; &gt;+        return;
&gt; &gt;+
&gt; &gt;+    if (!m_startedBuffering) {
&gt; &gt;+        m_startedBuffering = true;
&gt; &gt;+
&gt; &gt;+        if (m_fillTimeoutId &gt; 0) {
&gt; &gt;+            g_source_remove(m_fillTimeoutId);
&gt; &gt;+            m_fillTimeoutId = 0;
&gt; 
&gt; I guess there&apos;s really no need to set the id to anything if you are going to
&gt; write over it in the next line.
&gt; 

I guess yes :)

&gt; &gt;+        }
&gt; &gt;+
&gt; &gt;+        m_fillTimeoutId = g_timeout_add(200, (GSourceFunc) bufferingTimeoutCallback, this);
&gt; &gt;+    }
&gt; &gt;+}
&gt; &gt;+
&gt; &gt;+bool MediaPlayerPrivate::queryBufferingStats()
&gt; &gt;+{
&gt; &gt;+    GstQuery* query = gst_query_new_buffering(GST_FORMAT_PERCENT);
&gt; &gt;+
&gt; &gt;+    if (gst_element_query(m_playBin, query)) {
&gt; &gt;+        gint64 start, stop;
&gt; &gt;+        gdouble fillStatus;
&gt; &gt;+
&gt; &gt;+        gst_query_parse_buffering_range(query, 0, &amp;start, &amp;stop, 0);
&gt; &gt;+
&gt; &gt;+        if (stop != -1)
&gt; &gt;+            fillStatus = 100.0 * stop / GST_FORMAT_PERCENT_MAX;
&gt; &gt;+        else
&gt; &gt;+            fillStatus = 100.0;
&gt; &gt;+
&gt; &gt;+        LOG_VERBOSE(Media, &quot;Download buffer filled up to %f%%&quot;, fillStatus);
&gt; &gt;+
&gt; &gt;+        // Update maxTimeLoaded only if the media duration is
&gt; &gt;+        // available. Otherwise we can&apos;t compute it.
&gt; &gt;+        if (!m_mediaDuration) {
&gt; &gt;+            float newDuration = duration();
&gt; &gt;+            if (!isinf(newDuration)) {
&gt; &gt;+                m_mediaDuration = newDuration;
&gt; &gt;+                durationChanged();
&gt; &gt;+            }
&gt; &gt;+        }
&gt; &gt;+
&gt; &gt;+        if (m_mediaDuration) {
&gt; &gt;+            m_maxTimeLoaded = static_cast&lt;float&gt;((fillStatus * m_mediaDuration) / 100.0);
&gt; &gt;+            LOG_VERBOSE(Media, &quot;Updated maxTimeLoaded: %f&quot;, m_maxTimeLoaded);
&gt; &gt;+        }
&gt; &gt;+
&gt; &gt;+        if (fillStatus == 100.0) {
&gt; &gt;+            // Buffering is done, remove the fill source from the main loop.
&gt; &gt;+            m_fillTimeoutId = 0;
&gt; 
&gt; Unless I&apos;m missing something you are not actually removing any source here.
&gt; 
&gt; 

if this callback returns FALSE (see few lines above) the source will be removed from the main loop.

&gt; &gt;+            gst_query_unref(query);
&gt; &gt;+
&gt; &gt;+            // Media is now fully loaded. It will play even if network
&gt; &gt;+            // connection is cut.
&gt; &gt;+            m_networkState = MediaPlayer::Loaded;
&gt; &gt;+            m_player-&gt;networkStateChanged();
&gt; &gt;+
&gt; &gt;+            return FALSE;
&gt; &gt;+        }
&gt; &gt;+
&gt; &gt;+        if ((fillStatus &gt; 0) &amp;&amp; (m_readyState &lt; MediaPlayer::HaveFutureData)) {
&gt; &gt;+            // Buffering started, we should now have enough data to
&gt; &gt;+            // start playback if it was requested.
&gt; &gt;+            m_readyState = MediaPlayer::HaveFutureData;
&gt; &gt;+            m_player-&gt;readyStateChanged();
&gt; &gt;+            if (m_paused &amp;&amp; m_playRequired) {
&gt; &gt;+                m_playRequired = false;
&gt; &gt;+                gst_element_set_state(m_playBin, GST_STATE_PLAYING);
&gt; &gt;+            }
&gt; &gt;+        }
&gt; &gt;+    }
&gt; &gt;+
&gt; &gt;+    gst_query_unref(query);
&gt; &gt;+    return TRUE;
&gt; &gt;+}
&gt; &gt;+</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183581</commentid>
    <comment_count>19</comment_count>
    <who name="Sebastian Dröge (slomo)">slomo</who>
    <bug_when>2010-01-22 03:29:17 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #17)
&gt; &gt; (From update of attachment 46262 [details] [details])
&gt; &gt; Just a few nitpicks on top of gustavo&apos;s comments.
&gt; &gt; 
&gt; &gt; &gt;+#include &lt;glib/gstdio.h&gt;
&gt; &gt; 
&gt; &gt; You should not include anything other than the toplevel glib header.
&gt; &gt; 
&gt; 
&gt; Right and in fact Bastien Nocera told me that I should not need to manually
&gt; remove the temp file so this include should be removed in the next iteration of
&gt; the patch :)

Actually queue2 is supposed to not remove that temporary file, see https://bugzilla.gnome.org/show_bug.cgi?id=607739</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184260</commentid>
    <comment_count>20</comment_count>
      <attachid>47342</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-01-25 06:01:24 -0800</bug_when>
    <thetext>Created attachment 47342
initial support for on-disk buffering of videos</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184262</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-25 06:13:55 -0800</bug_when>
    <thetext>Attachment 47342 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:617:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 1


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184996</commentid>
    <comment_count>22</comment_count>
      <attachid>47507</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-01-27 01:10:03 -0800</bug_when>
    <thetext>Created attachment 47507
initial support for on-disk buffering of videos</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186448</commentid>
    <comment_count>23</comment_count>
      <attachid>46056</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-02-01 08:43:31 -0800</bug_when>
    <thetext>Comment on attachment 46056
draw the buffering status in the media controls

 680     // Don&apos;t bother drawing an empty area.
 681     if (!bufferedRect.isEmpty()) {

This should be an early return for the true case instead.

7  Time: 2.2
 7 Time: 2.1

Why has this changed?

Patch looks good, overall, so just change the if to an early return, please, and add a comment regarding the change in drag-timebar.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186452</commentid>
    <comment_count>24</comment_count>
      <attachid>47507</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-02-01 09:04:24 -0800</bug_when>
    <thetext>Comment on attachment 47507
initial support for on-disk buffering of videos

 642     if (gst_element_query(m_playBin, query)) {
 643         gint64 start, stop;
 644 

I think this should become an early return. It will make the code more readable. This would also enable us to make the following code much more readable:

 664         if (m_fillStatus == 100.0) {
 665             // Buffering is done, remove the fill source from the main loop.
 666             m_fillTimeoutId = 0;
 667 
 668             // Media is now fully loaded. It will play even if network
 669             // connection is cut.
 670             updateStates();
 671 
 672             gst_query_unref(query);
 673             return FALSE;
 674         }
 675         updateStates();
 676     }
 677 
 678     gst_query_unref(query);
 679     return TRUE;

Maybe you will be able to call updateStates outside that if (the m_fillStatus == 100.0 one), since you are going to call it anyway, right? And you can also call gst_query_unref(query) before that if. And then you&apos;ll have a much more pleasant code flow, with a simple if that sets the variable, you will be able to unconditionaly return FALSE in the end, because the early return already handled the TRUE case.

 682 void MediaPlayerPrivate::updateDownloadLocation(gchar* location)
 683 {
 684     if (m_downloadFilename)
 685         g_free(m_downloadFilename);
 686     LOG_VERBOSE(Media, &quot;Download filename: %s&quot;, location);
 687     m_downloadFilename = location;
 688 }

I wonder if m_downloadFilename could be a GRefPtr. That would make the code a bit cleaner. Code looks quite good, except for the function I was talking about above. I&apos;ll say r- to see one more iteration of it before this lands. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186455</commentid>
    <comment_count>25</comment_count>
      <attachid>47849</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-02-01 09:34:11 -0800</bug_when>
    <thetext>Created attachment 47849
initial support for on-disk buffering of videos</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186477</commentid>
    <comment_count>26</comment_count>
      <attachid>47854</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-02-01 10:32:43 -0800</bug_when>
    <thetext>Created attachment 47854
initial support for on-disk buffering of videos

Now without the unused downloadFile code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186640</commentid>
    <comment_count>27</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-01 16:10:35 -0800</bug_when>
    <thetext>Attachment 46056 was posted by a committer and has review+, assigning to Philippe Normand for commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187420</commentid>
    <comment_count>28</comment_count>
      <attachid>47854</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-02-03 10:12:06 -0800</bug_when>
    <thetext>Comment on attachment 47854
initial support for on-disk buffering of videos

 722     bool continueStatsGathering = TRUE;
 723     // Media is now fully loaded. It will play even if network
 724     // connection is cut.
 725     if (m_fillStatus == 100.0) {
 726         // Buffering is done, remove the fill source from the main loop.
 727         m_fillTimeoutId = 0;
 728         continueStatsGathering = FALSE;
 729     }
 730 
 731     updateStates();
 732     return continueStatsGathering;

I was rather thinking of something along these lines, instead:

    if (m_fillStatus != 100.0) {
        updateStates();
        return TRUE;
    }

    m_fillTimeoutId = 0;
    updateStates();
    return FALSE;

 840         } else if (state == GST_STATE_PAUSED)
749841             m_paused = true;

So, will this only be true when GStreamer itself paused the stream because buffering is required? It doesn&apos;t look that we are regressing anything in our support of the spec here, but I&apos;d be more confident if we could get someone who actually understands the spec to check on the state changes. I&apos;ll try to get hold of Eric Carlson =D.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187750</commentid>
    <comment_count>29</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-02-04 05:18:03 -0800</bug_when>
    <thetext>(In reply to comment #28)
&gt; (From update of attachment 47854 [details])
&gt;  722     bool continueStatsGathering = TRUE;
&gt;  723     // Media is now fully loaded. It will play even if network
&gt;  724     // connection is cut.
&gt;  725     if (m_fillStatus == 100.0) {
&gt;  726         // Buffering is done, remove the fill source from the main loop.
&gt;  727         m_fillTimeoutId = 0;
&gt;  728         continueStatsGathering = FALSE;
&gt;  729     }
&gt;  730 
&gt;  731     updateStates();
&gt;  732     return continueStatsGathering;
&gt; 
&gt; I was rather thinking of something along these lines, instead:
&gt; 
&gt;     if (m_fillStatus != 100.0) {
&gt;         updateStates();
&gt;         return TRUE;
&gt;     }
&gt; 
&gt;     m_fillTimeoutId = 0;
&gt;     updateStates();
&gt;     return FALSE;

Looks much cleaner indeed ;)
&gt; 
&gt;  840         } else if (state == GST_STATE_PAUSED)
&gt; 749841             m_paused = true;
&gt; 

Well in current HEAD of the code m_paused is set to true when state is != GST_STATE_PLAYING. So, to be fully compliant with current behavior i can change the test to use &lt;= GST_STATE_PAUSED. What do you think?


&gt; So, will this only be true when GStreamer itself paused the stream because
&gt; buffering is required? It doesn&apos;t look that we are regressing anything in our
&gt; support of the spec here, but I&apos;d be more confident if we could get someone who
&gt; actually understands the spec to check on the state changes. I&apos;ll try to get
&gt; hold of Eric Carlson =D.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187751</commentid>
    <comment_count>30</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-02-04 05:37:01 -0800</bug_when>
    <thetext>(In reply to comment #29)
&gt; &gt;  840         } else if (state == GST_STATE_PAUSED)
&gt; &gt; 749841             m_paused = true;
&gt; &gt; 
&gt; 
&gt; Well in current HEAD of the code m_paused is set to true when state is !=
&gt; GST_STATE_PLAYING. So, to be fully compliant with current behavior i can change
&gt; the test to use &lt;= GST_STATE_PAUSED. What do you think?

This means the same as != GST_STATE_PLAYING, so I guess we could drop the change, then?

I talked to Eric Carlson about helping review the state changes, he said he&apos;d look, I&apos;ll add him in CC, so he knows what the bug number is =D.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187752</commentid>
    <comment_count>31</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-02-04 05:37:53 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; Attachment 46056 [details] was posted by a committer and has review+, assigning to
&gt; Philippe Normand for commit.

I am waiting the other patch in this bug gets approved so I can land both at
same time. They go together and were splitted in first place to ease the review
process.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187791</commentid>
    <comment_count>32</comment_count>
      <attachid>48142</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-02-04 07:50:08 -0800</bug_when>
    <thetext>Created attachment 48142
initial support for on-disk buffering of videos

Updated with latest kov&apos;s suggestions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187859</commentid>
    <comment_count>33</comment_count>
      <attachid>48142</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2010-02-04 10:47:43 -0800</bug_when>
    <thetext>Comment on attachment 48142
initial support for on-disk buffering of videos

+        [GStreamer] Should handle BUFFERING messages
+        https://bugs.webkit.org/show_bug.cgi?id=30004
+
+        Initial support for on-disk buffering of videos. This works only
+        for Quicktime and flv though.
+
+        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
+        (WebCore::mediaPlayerPrivateMessageCallback):
+        (WebCore::bufferingTimeoutCallback):
+        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
+        (WebCore::MediaPlayerPrivate::~MediaPlayerPrivate):
+        (WebCore::MediaPlayerPrivate::load):
+        (WebCore::MediaPlayerPrivate::duration):
+        (WebCore::MediaPlayerPrivate::processBufferingStats):
+        (WebCore::MediaPlayerPrivate::queryBufferingStats):
+        (WebCore::MediaPlayerPrivate::maxTimeSeekable):
+        (WebCore::MediaPlayerPrivate::maxTimeLoaded):
+        (WebCore::MediaPlayerPrivate::bytesLoaded):
+        (WebCore::MediaPlayerPrivate::totalBytes):
+        (WebCore::MediaPlayerPrivate::updateStates):
+        (WebCore::MediaPlayerPrivate::durationChanged):
+        (WebCore::MediaPlayerPrivate::setAutobuffer):
+        (WebCore::MediaPlayerPrivate::createGSTPlayBin):
+        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h:
+
It would be nice to have comments about what changed in each method.

 
+    , m_maxTimeLoaded(0.0)
+    , m_fillStatus(0.0)
+
&quot;.0&quot; shouldn&apos;t be necessary.

 
+void MediaPlayerPrivate::processBufferingStats(GstMessage* message)
+{
+    GstBufferingMode mode;
+
+    gst_message_parse_buffering_stats(message, &amp;mode, 0, 0, 0);
+    if (mode != GST_BUFFERING_DOWNLOAD)
+        return;

No need to do this if if m_startedBuffering is true, might as well return immediately.

+
+    if (!m_startedBuffering) {
+        m_startedBuffering = true;
+
+        if (m_fillTimeoutId &gt; 0)
+            g_source_remove(m_fillTimeoutId);

Is it legal for m_fillTimeoutId to be non-zero when m_startedBuffering is false? If not, maybe ASSERT(!m_fillTimeoutId).


+
+    bool continueStatsGathering = TRUE;
+    // Media is now fully loaded. It will play even if network
+    // connection is cut.
+    if (m_fillStatus == 100.0) {
+        // Buffering is done, remove the fill source from the main loop.
+        m_fillTimeoutId = 0;

No need to g_source_remove()? Does returning false from the callback automatically remove the source?


     // infinite duration means live stream
+    if (isinf(duration()))
+        return 0.0;
+
Don&apos;t you want to return infinity() here?

 
+            void setAutobuffer(bool);
+            void processBufferingStats(GstMessage* message);
+            bool queryBufferingStats();
+            void createGSTPlayBin();

Is there any reason these new methods, and all methods really, shouldn&apos;t be private?
 
Also noticed this in examining the source:

&gt; void MediaPlayerPrivate::didEnd()
&gt;     if (now &gt; 0)
&gt;         m_mediaDuration = now;
&gt;
If this changes m_mediaDuration, you should call durationChanged()


I know almost nothing about the gstreamer API so someone else should check to make sure the new code is OK, but but r=me on the other changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187988</commentid>
    <comment_count>34</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-04 15:58:40 -0800</bug_when>
    <thetext>One patch per bug is generally preferred as it can be hard to tell what has been landed and what has not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187989</commentid>
    <comment_count>35</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-04 15:59:19 -0800</bug_when>
    <thetext>I really mean &quot;one change per bug&quot;, which can end up needing several patches before the final one actually gets landed and the bug is closed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188619</commentid>
    <comment_count>36</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-02-08 06:02:26 -0800</bug_when>
    <thetext>(In reply to comment #33)
&gt; +    bool continueStatsGathering = TRUE;
&gt; +    // Media is now fully loaded. It will play even if network
&gt; +    // connection is cut.
&gt; +    if (m_fillStatus == 100.0) {
&gt; +        // Buffering is done, remove the fill source from the main loop.
&gt; +        m_fillTimeoutId = 0;
&gt; 
&gt; No need to g_source_remove()? Does returning false from the callback
&gt; automatically remove the source?

Yes =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188993</commentid>
    <comment_count>37</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-02-09 07:20:27 -0800</bug_when>
    <thetext>(In reply to comment #33)
&gt; (From update of attachment 48142 [details])
&gt; 
&gt; 
&gt; +void MediaPlayerPrivate::processBufferingStats(GstMessage* message)
&gt; +{
&gt; +    GstBufferingMode mode;
&gt; +
&gt; +    gst_message_parse_buffering_stats(message, &amp;mode, 0, 0, 0);
&gt; +    if (mode != GST_BUFFERING_DOWNLOAD)
&gt; +        return;
&gt; 
&gt; No need to do this if if m_startedBuffering is true, might as well return
&gt; immediately.
&gt; 

It is necessary because that method will be called even in the case where on-disk buffering is disabled. So before proceeding further we need to make sure the buffering message is of the correct type.

&gt; +
&gt; +    if (!m_startedBuffering) {
&gt; +        m_startedBuffering = true;
&gt; +
&gt; +        if (m_fillTimeoutId &gt; 0)
&gt; +            g_source_remove(m_fillTimeoutId);
&gt; 
&gt; Is it legal for m_fillTimeoutId to be non-zero when m_startedBuffering is
&gt; false? If not, maybe ASSERT(!m_fillTimeoutId).
&gt; 

Hum I realize we never set m_startedBuffering to false. I can do it at least when buffering ended. But I prefer to keep the cleanup of m_fillTimeoutId here.

&gt; 
&gt; +
&gt; +    bool continueStatsGathering = TRUE;
&gt; +    // Media is now fully loaded. It will play even if network
&gt; +    // connection is cut.
&gt; +    if (m_fillStatus == 100.0) {
&gt; +        // Buffering is done, remove the fill source from the main loop.
&gt; +        m_fillTimeoutId = 0;
&gt; 
&gt; No need to g_source_remove()? Does returning false from the callback
&gt; automatically remove the source?
&gt; 
&gt; 
&gt;      // infinite duration means live stream
&gt; +    if (isinf(duration()))
&gt; +        return 0.0;
&gt; +
&gt; Don&apos;t you want to return infinity() here?
&gt; 

Well it would at least break HTMLMediaElement::seekable() I think. Currently if maxTimeSeekable() returns 0 an empty time range is created. Also the mac private player has the same code ;)

&gt; 
&gt; +            void setAutobuffer(bool);
&gt; +            void processBufferingStats(GstMessage* message);
&gt; +            bool queryBufferingStats();
&gt; +            void createGSTPlayBin();
&gt; 
&gt; Is there any reason these new methods, and all methods really, shouldn&apos;t be
&gt; private?
&gt; 

createGSTPlayBin() is private already.
setAutobuffer() is public and used by MediaPlayer
queryBufferingStats() can be made private :)
processBufferingStats has to remain public I&apos;m afraid. It is called from the callback bufferingTimeoutCallback().

&gt; Also noticed this in examining the source:
&gt; 
&gt; &gt; void MediaPlayerPrivate::didEnd()
&gt; &gt;     if (now &gt; 0)
&gt; &gt;         m_mediaDuration = now;
&gt; &gt;
&gt; If this changes m_mediaDuration, you should call durationChanged()
&gt; 

no durationChanged(), it is explained in the comment:

    // EOS was reached but in case of reverse playback the position is
    // not always 0. So to not confuse the HTMLMediaElement we
    // synchronize position and duration values.

but I can call  m_player-&gt;durationChanged() though ;)

&gt; 
&gt; I know almost nothing about the gstreamer API so someone else should check to
&gt; make sure the new code is OK, but but r=me on the other changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189025</commentid>
    <comment_count>38</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-02-09 08:11:45 -0800</bug_when>
    <thetext>The merge of the new WebKit src gstreamer element uncovered a bug in appsrc making this patch unusable at the moment. See https://bugzilla.gnome.org/show_bug.cgi?id=609423</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189971</commentid>
    <comment_count>39</comment_count>
      <attachid>48630</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-02-12 00:57:18 -0800</bug_when>
    <thetext>Created attachment 48630
initial support for on-disk buffering of videos

updated after Eric&apos;s review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190055</commentid>
    <comment_count>40</comment_count>
      <attachid>48630</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2010-02-12 07:54:37 -0800</bug_when>
    <thetext>Comment on attachment 48630
initial support for on-disk buffering of videos

I am giving r+ assuming the GStreamer specific parts have been vetted by someone that understands it a lot more than I do ;-)

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190068</commentid>
    <comment_count>41</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-02-12 08:55:06 -0800</bug_when>
    <thetext>(In reply to comment #40)
&gt; (From update of attachment 48630 [details])
&gt; I am giving r+ assuming the GStreamer specific parts have been vetted by
&gt; someone that understands it a lot more than I do ;-)
&gt; 
&gt; r=me

Thanks all :) I will wait Bug 34881 to land this though:</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190413</commentid>
    <comment_count>42</comment_count>
      <attachid>48744</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-02-15 02:58:35 -0800</bug_when>
    <thetext>Created attachment 48744
initial support for on-disk buffering of videos

Rebased patch against master and bumped gst requirements to 0.10.25 as
discussed on friday with Gustavo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190492</commentid>
    <comment_count>43</comment_count>
      <attachid>48744</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-02-15 10:30:24 -0800</bug_when>
    <thetext>Comment on attachment 48744
initial support for on-disk buffering of videos

This review is just a renewal of Eric Carlson&apos;s, checking the version bump alone. Please commit the removal of the mistakenly committed redefine in a separate commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190920</commentid>
    <comment_count>44</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-02-17 00:39:33 -0800</bug_when>
    <thetext>Landed in r54878 :) Thanks all!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46055</attachid>
            <date>2010-01-07 09:06:10 -0800</date>
            <delta_ts>2010-01-09 06:26:36 -0800</delta_ts>
            <desc>initial support for on-disk buffering of videos</desc>
            <filename>initial-support-for-on-disk-buffering-of-videos.patch</filename>
            <type>text/plain</type>
            <size>15878</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSBjYzNlZDFmZTRmNDBjNGQyM2E2NjcxMGZhNjY5NTYzODM5N2UxODIxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBUdWUsIDUgSmFuIDIwMTAgMTY6Mjk6NTYgKzAxMDAKU3ViamVjdDogW1BBVENIXSBp
bml0aWFsIHN1cHBvcnQgZm9yIG9uLWRpc2sgYnVmZmVyaW5nIG9mIHZpZGVvcwoKLS0tCiBXZWJD
b3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzAgKysr
CiAuLi4vZ3JhcGhpY3MvZ3RrL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgICB8ICAy
MjAgKysrKysrKysrKysrKysrKystLS0KIC4uLi9ncmFwaGljcy9ndGsvTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyLmggICAgIHwgICAxMSArCiAzIGZpbGVzIGNoYW5nZWQsIDIzNCBpbnNlcnRp
b25zKCspLCAyNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBi
L1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGMzNzhkMzAuLjVlYmFkNGYgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAK
KzIwMTAtMDEtMDcgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHU3RyZWFtZXJd
IFNob3VsZCBoYW5kbGUgQlVGRkVSSU5HIG1lc3NhZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMDAwNAorCisgICAgICAgIEluaXRpYWwgc3VwcG9y
dCBmb3Igb24tZGlzayBidWZmZXJpbmcgb2YgdmlkZW9zLiBUaGlzIHdvcmtzIG9ubHkKKyAgICAg
ICAgZm9yIFF1aWNrdGltZSBhbmQgZmx2IHRob3VnaC4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2d0ay9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6bWVkaWFQbGF5ZXJQcml2YXRlTWVzc2FnZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6Om1lZGlhUGxheWVyUHJpdmF0ZVRlbXBMb2NhdGlvbkNoYW5nZWRDYWxsYmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpidWZmZXJpbmdUaW1lb3V0Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpNZWRpYVBsYXllclByaXZhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjp+TWVkaWFQbGF5ZXJQcml2YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6ZHVyYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpwcm9jZXNzQnVmZmVyaW5nU3RhdHMpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpxdWVyeUJ1ZmZlcmluZ1N0YXRzKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6dXBkYXRlRG93bmxvYWRMb2NhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6Om1heFRpbWVTZWVrYWJsZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6Om1heFRpbWVMb2FkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpieXRlc0xvYWRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnRvdGFsQnl0ZXMpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjp1cGRhdGVTdGF0ZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpkdXJhdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpzdXBwb3J0c1NhdmUpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGVHU1RQbGF5QmluKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9ndGsvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmg6CisKIDIwMTAt
MDEtMDcgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IE1hY2llaiBTdGFjaG93aWFrLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ndGsvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKaW5kZXgg
MDk4NGE0Ni4uYTM1OTcwYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
dGsvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC00MCw2ICs0
MCw3IEBACiAjaW5jbHVkZSAiVmlkZW9TaW5rR1N0cmVhbWVyLmgiCiAjaW5jbHVkZSAiV2lkZ2V0
LmgiCiAKKyNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgogI2luY2x1ZGUgPGdzdC9nc3QuaD4KICNp
bmNsdWRlIDxnc3QvaW50ZXJmYWNlcy9taXhlci5oPgogI2luY2x1ZGUgPGdzdC9pbnRlcmZhY2Vz
L3hvdmVybGF5Lmg+CkBAIC00OCw2ICs0OSwxOCBAQAogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNs
dWRlIDx3dGYvZ3RrL0dPd25QdHIuaD4KIAorLy8gR3N0UGxheUZsYWdzIGZsYWdzIGZyb20gcGxh
eWJpbjIKK3R5cGVkZWYgZW51bSB7CisgICAgR1NUX1BMQVlfRkxBR19WSURFTyAgICAgICAgID0g
MHgwMSwKKyAgICBHU1RfUExBWV9GTEFHX0FVRElPICAgICAgICAgPSAweDAyLAorICAgIEdTVF9Q
TEFZX0ZMQUdfVEVYVCAgICAgICAgICA9IDB4MDQsCisgICAgR1NUX1BMQVlfRkxBR19WSVMgICAg
ICAgICAgID0gMHgwOCwKKyAgICBHU1RfUExBWV9GTEFHX1NPRlRfVk9MVU1FICAgPSAweDEwLAor
ICAgIEdTVF9QTEFZX0ZMQUdfTkFUSVZFX0FVRElPICA9IDB4MjAsCisgICAgR1NUX1BMQVlfRkxB
R19OQVRJVkVfVklERU8gID0gMHg0MCwKKyAgICBHU1RfUExBWV9GTEFHX0RPV05MT0FEICAgICAg
PSAweDgwCit9IEdzdFBsYXlGbGFnczsKKwogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtNTgsNyArNzEsNiBAQCBnYm9vbGVhbiBtZWRpYVBsYXllclByaXZh
dGVNZXNzYWdlQ2FsbGJhY2soR3N0QnVzKiBidXMsIEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIGdwbwog
ICAgIEdPd25QdHI8Z2NoYXI+IGRlYnVnOwogICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUg
ZXJyb3I7CiAgICAgTWVkaWFQbGF5ZXJQcml2YXRlKiBtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8TWVk
aWFQbGF5ZXJQcml2YXRlKj4oZGF0YSk7Ci0gICAgZ2ludCBwZXJjZW50ID0gMDsKIAogICAgIHN3
aXRjaCAoR1NUX01FU1NBR0VfVFlQRShtZXNzYWdlKSkgewogICAgIGNhc2UgR1NUX01FU1NBR0Vf
RVJST1I6CkBAIC04OCw4ICsxMDAsNyBAQCBnYm9vbGVhbiBtZWRpYVBsYXllclByaXZhdGVNZXNz
YWdlQ2FsbGJhY2soR3N0QnVzKiBidXMsIEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIGdwbwogICAgICAg
ICBtcC0+dXBkYXRlU3RhdGVzKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR1NUX01FU1NB
R0VfQlVGRkVSSU5HOgotICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9idWZmZXJpbmcobWVzc2Fn
ZSwgJnBlcmNlbnQpOwotICAgICAgICBMT0dfVkVSQk9TRShNZWRpYSwgIkJ1ZmZlcmluZyAlZCIs
IHBlcmNlbnQpOworICAgICAgICBtcC0+cHJvY2Vzc0J1ZmZlcmluZ1N0YXRzKG1lc3NhZ2UpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIEdTVF9NRVNTQUdFX0RVUkFUSU9OOgogICAgICAgICBM
T0dfVkVSQk9TRShNZWRpYSwgIkR1cmF0aW9uIGNoYW5nZWQiKTsKQEAgLTEwMyw2ICsxMTQsMTkg
QEAgZ2Jvb2xlYW4gbWVkaWFQbGF5ZXJQcml2YXRlTWVzc2FnZUNhbGxiYWNrKEdzdEJ1cyogYnVz
LCBHc3RNZXNzYWdlKiBtZXNzYWdlLCBncG8KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBt
ZWRpYVBsYXllclByaXZhdGVUZW1wTG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2soR3N0T2JqZWN0KiBw
bGF5QmluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR3N0T2JqZWN0KiBxdWV1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdQYXJhbVNwZWMqIHByb3BlcnR5LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBn
Y2hhciogbG9jYXRpb247CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlKiBtcCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8TWVkaWFQbGF5ZXJQcml2YXRlKj4oZGF0YSk7CisKKyAgICBnX29iamVjdF9nZXQocXVl
dWUsICJ0ZW1wLWxvY2F0aW9uIiwgJmxvY2F0aW9uLCBOVUxMKTsKKyAgICBtcC0+dXBkYXRlRG93
bmxvYWRMb2NhdGlvbihsb2NhdGlvbik7CisgICAgZ19mcmVlKGxvY2F0aW9uKTsKK30KKwogdm9p
ZCBtZWRpYVBsYXllclByaXZhdGVWb2x1bWVDaGFuZ2VkQ2FsbGJhY2soR09iamVjdCAqZWxlbWVu
dCwgR1BhcmFtU3BlYyAqcHNwZWMsIGdwb2ludGVyIGRhdGEpCiB7CiAgICAgTWVkaWFQbGF5ZXJQ
cml2YXRlKiBtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8TWVkaWFQbGF5ZXJQcml2YXRlKj4oZGF0YSk7
CkBAIC0xMTUsNiArMTM5LDEyIEBAIGdib29sZWFuIG5vdGlmeVZvbHVtZUlkbGVDYWxsYmFjayhN
ZWRpYVBsYXllciogbXApCiAgICAgcmV0dXJuIEZBTFNFOwogfQogCitnYm9vbGVhbiBidWZmZXJp
bmdUaW1lb3V0Q2FsbGJhY2soZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBNZWRpYVBsYXllclByaXZh
dGUqIG1wID0gcmVpbnRlcnByZXRfY2FzdDxNZWRpYVBsYXllclByaXZhdGUqPihkYXRhKTsKKyAg
ICByZXR1cm4gbXAtPnF1ZXJ5QnVmZmVyaW5nU3RhdHMoKTsKK30KKwogc3RhdGljIGZsb2F0IHBs
YXliYWNrUG9zaXRpb24oR3N0RWxlbWVudCogcGxheWJpbikKIHsKIApAQCAtMjExLDEyICsyNDEs
MjkgQEAgTWVkaWFQbGF5ZXJQcml2YXRlOjpNZWRpYVBsYXllclByaXZhdGUoTWVkaWFQbGF5ZXIq
IHBsYXllcikKICAgICAsIG1fc2Vla2luZyhmYWxzZSkKICAgICAsIG1fZXJyb3JPY2N1cmVkKGZh
bHNlKQogICAgICwgbV92b2x1bWVJZGxlSWQoLTEpCisgICAgLCBtX21lZGlhRHVyYXRpb24oMC4w
KQorICAgICwgbV9zdGFydGVkQnVmZmVyaW5nKGZhbHNlKQorICAgICwgbV9wbGF5UmVxdWlyZWQo
dHJ1ZSkKKyAgICAsIG1fZmlsbFRpbWVvdXRJZCgtMSkKKyAgICAsIG1fbWF4VGltZUxvYWRlZCgw
LjApCisgICAgLCBtX2Rvd25sb2FkRmlsZW5hbWUoMCkKIHsKICAgICBkb0dzdEluaXQoKTsKIH0K
IAogTWVkaWFQbGF5ZXJQcml2YXRlOjp+TWVkaWFQbGF5ZXJQcml2YXRlKCkKIHsKKyAgICBpZiAo
bV9kb3dubG9hZEZpbGVuYW1lKSB7CisgICAgICAgIGdfcmVtb3ZlKG1fZG93bmxvYWRGaWxlbmFt
ZSk7CisgICAgICAgIGdfZnJlZShtX2Rvd25sb2FkRmlsZW5hbWUpOworICAgICAgICBtX2Rvd25s
b2FkRmlsZW5hbWUgPSAwOworICAgIH0KKworICAgIGlmIChtX2ZpbGxUaW1lb3V0SWQpIHsKKyAg
ICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1fZmlsbFRpbWVvdXRJZCk7CisgICAgICAgIG1fZmlsbFRp
bWVvdXRJZCA9IC0xOworICAgIH0KKwogICAgIGlmIChtX3ZvbHVtZUlkbGVJZCkgewogICAgICAg
ICBnX3NvdXJjZV9yZW1vdmUobV92b2x1bWVJZGxlSWQpOwogICAgICAgICBtX3ZvbHVtZUlkbGVJ
ZCA9IC0xOwpAQCAtMjkwLDYgKzMzNyw5IEBAIGZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZTo6ZHVy
YXRpb24oKSBjb25zdAogICAgIGlmIChtX2Vycm9yT2NjdXJlZCkKICAgICAgICAgcmV0dXJuIDAu
MDsKIAorICAgIGlmIChtX21lZGlhRHVyYXRpb24pCisgICAgICAgIHJldHVybiBtX21lZGlhRHVy
YXRpb247CisKICAgICBHc3RGb3JtYXQgdGltZUZvcm1hdCA9IEdTVF9GT1JNQVRfVElNRTsKICAg
ICBnaW50NjQgdGltZUxlbmd0aCA9IDA7CiAKQEAgLTUxNSwxNiArNTY1LDk1IEBAIFBhc3NSZWZQ
dHI8VGltZVJhbmdlcz4gTWVkaWFQbGF5ZXJQcml2YXRlOjpidWZmZXJlZCgpIGNvbnN0CiAgICAg
cmV0dXJuIHRpbWVSYW5nZXMucmVsZWFzZSgpOwogfQogCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZTo6cHJvY2Vzc0J1ZmZlcmluZ1N0YXRzKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCit7CisgICAgaWYg
KCFtX3N0YXJ0ZWRCdWZmZXJpbmcpIHsKKyAgICAgICAgbV9zdGFydGVkQnVmZmVyaW5nID0gdHJ1
ZTsKKworICAgICAgICBpZiAobV9maWxsVGltZW91dElkKSB7CisgICAgICAgICAgICBnX3NvdXJj
ZV9yZW1vdmUobV9maWxsVGltZW91dElkKTsKKyAgICAgICAgICAgIG1fZmlsbFRpbWVvdXRJZCA9
IDA7CisgICAgICAgIH0KKworICAgICAgICBtX2ZpbGxUaW1lb3V0SWQgPSBnX3RpbWVvdXRfYWRk
KDIwMCwgKEdTb3VyY2VGdW5jKSBidWZmZXJpbmdUaW1lb3V0Q2FsbGJhY2ssIHRoaXMpOworICAg
IH0KK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGU6OnF1ZXJ5QnVmZmVyaW5nU3RhdHMoKQor
eworICAgIEdzdFF1ZXJ5KiBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfYnVmZmVyaW5nKEdTVF9GT1JN
QVRfUEVSQ0VOVCk7CisKKyAgICBpZiAoZ3N0X2VsZW1lbnRfcXVlcnkobV9wbGF5QmluLCBxdWVy
eSkpIHsKKyAgICAgICAgZ2ludDY0IHN0YXJ0LCBzdG9wOworICAgICAgICBnZG91YmxlIGZpbGxT
dGF0dXM7CisKKyAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2J1ZmZlcmluZ19yYW5nZShxdWVyeSwg
MCwgJnN0YXJ0LCAmc3RvcCwgMCk7CisKKyAgICAgICAgaWYgKHN0b3AgIT0gLTEpCisgICAgICAg
ICAgICBmaWxsU3RhdHVzID0gMTAwLjAgKiBzdG9wIC8gR1NUX0ZPUk1BVF9QRVJDRU5UX01BWDsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgZmlsbFN0YXR1cyA9IDEwMC4wOworCisgICAgICAg
IExPR19WRVJCT1NFKE1lZGlhLCAiRG93bmxvYWQgYnVmZmVyIGZpbGxlZCB1cCB0byAlZiUlIiwg
ZmlsbFN0YXR1cyk7CisKKyAgICAgICAgLy8gVXBkYXRlIG1heFRpbWVMb2FkZWQgb25seSBpZiB0
aGUgbWVkaWEgZHVyYXRpb24gaXMKKyAgICAgICAgLy8gYXZhaWxhYmxlLiBPdGhlcndpc2Ugd2Ug
Y2FuJ3QgY29tcHV0ZSBpdC4KKyAgICAgICAgaWYgKCFtX21lZGlhRHVyYXRpb24pIHsKKyAgICAg
ICAgICAgIGZsb2F0IG5ld0R1cmF0aW9uID0gZHVyYXRpb24oKTsKKyAgICAgICAgICAgIGlmICgh
aXNpbmYobmV3RHVyYXRpb24pKQorICAgICAgICAgICAgICAgIG1fbWVkaWFEdXJhdGlvbiA9IG5l
d0R1cmF0aW9uOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fbWVkaWFEdXJhdGlvbikgewor
ICAgICAgICAgICAgbV9tYXhUaW1lTG9hZGVkID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KChmaWxsU3Rh
dHVzICogbV9tZWRpYUR1cmF0aW9uKSAvIDEwMC4wKTsKKyAgICAgICAgICAgIExPR19WRVJCT1NF
KE1lZGlhLCAiVXBkYXRlZCBtYXhUaW1lTG9hZGVkOiAlZiIsIG1fbWF4VGltZUxvYWRlZCk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoZmlsbFN0YXR1cyA9PSAxMDAuMCkgeworICAgICAgICAg
ICAgLy8gQnVmZmVyaW5nIGlzIGRvbmUsIHJlbW92ZSB0aGUgZmlsbCBzb3VyY2UgZnJvbSB0aGUg
bWFpbiBsb29wLgorICAgICAgICAgICAgbV9maWxsVGltZW91dElkID0gMDsKKyAgICAgICAgICAg
IGdzdF9xdWVyeV91bnJlZihxdWVyeSk7CisKKyAgICAgICAgICAgIC8vIE1lZGlhIGlzIG5vdyBm
dWxseSBsb2FkZWQuIEl0IHdpbGwgcGxheSBldmVuIGlmIG5ldHdvcmsKKyAgICAgICAgICAgIC8v
IGNvbm5lY3Rpb24gaXMgY3V0LgorICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBs
YXllcjo6TG9hZGVkOworICAgICAgICAgICAgbV9wbGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5nZWQo
KTsKKworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KChmaWxsU3RhdHVzID4gMCkgJiYgKG1fcmVhZHlTdGF0ZSA8IE1lZGlhUGxheWVyOjpIYXZlRnV0
dXJlRGF0YSkpIHsKKyAgICAgICAgICAgIC8vIEJ1ZmZlcmluZyBzdGFydGVkLCB3ZSBzaG91bGQg
bm93IGhhdmUgZW5vdWdoIGRhdGEgdG8KKyAgICAgICAgICAgIC8vIHN0YXJ0IHBsYXliYWNrIGlm
IGl0IHdhcyByZXF1ZXN0ZWQuCisgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXll
cjo6SGF2ZUZ1dHVyZURhdGE7CisgICAgICAgICAgICBtX3BsYXllci0+cmVhZHlTdGF0ZUNoYW5n
ZWQoKTsKKyAgICAgICAgICAgIGlmIChtX3BhdXNlZCAmJiBtX3BsYXlSZXF1aXJlZCkgeworICAg
ICAgICAgICAgICAgIG1fcGxheVJlcXVpcmVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZ3N0
X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGxheUJpbiwgR1NUX1NUQVRFX1BMQVlJTkcpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZ3N0X3F1ZXJ5X3VucmVmKHF1ZXJ5KTsK
KyAgICByZXR1cm4gVFJVRTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnVwZGF0ZURv
d25sb2FkTG9jYXRpb24oZ2NoYXIqIGxvY2F0aW9uKQoreworICAgIExPR19WRVJCT1NFKE1lZGlh
LCAiRG93bmxvYWQgZmlsZW5hbWU6ICVzIiwgbG9jYXRpb24pOworICAgIG1fZG93bmxvYWRGaWxl
bmFtZSA9IGxvY2F0aW9uOworfQorCiBmbG9hdCBNZWRpYVBsYXllclByaXZhdGU6Om1heFRpbWVT
ZWVrYWJsZSgpIGNvbnN0CiB7CiAgICAgaWYgKG1fZXJyb3JPY2N1cmVkKQogICAgICAgICByZXR1
cm4gMC4wOwogCi0gICAgLy8gVE9ETwogICAgIExPR19WRVJCT1NFKE1lZGlhLCAibWF4VGltZVNl
ZWthYmxlIik7Ci0gICAgaWYgKG1faXNTdHJlYW1pbmcpCi0gICAgICAgIHJldHVybiBudW1lcmlj
X2xpbWl0czxmbG9hdD46OmluZmluaXR5KCk7CiAgICAgLy8gaW5maW5pdGUgZHVyYXRpb24gbWVh
bnMgbGl2ZSBzdHJlYW0KKyAgICBpZiAoaXNpbmYoZHVyYXRpb24oKSkpCisgICAgICAgIHJldHVy
biAwLjA7CisKICAgICByZXR1cm4gbWF4VGltZUxvYWRlZCgpOwogfQogCkBAIC01MzMsMjQgKzY2
MiwyNCBAQCBmbG9hdCBNZWRpYVBsYXllclByaXZhdGU6Om1heFRpbWVMb2FkZWQoKSBjb25zdAog
ICAgIGlmIChtX2Vycm9yT2NjdXJlZCkKICAgICAgICAgcmV0dXJuIDAuMDsKIAotICAgIC8vIFRP
RE8KLSAgICBMT0dfVkVSQk9TRShNZWRpYSwgIm1heFRpbWVMb2FkZWQiKTsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiBkdXJhdGlvbigpOworICAgIGZsb2F0IGxvYWRlZCA9IG1f
bWF4VGltZUxvYWRlZDsKKyAgICBpZiAoIWxvYWRlZCAmJiAhbV9kb3dubG9hZEZpbGVuYW1lKQor
ICAgICAgICBsb2FkZWQgPSBkdXJhdGlvbigpOworICAgIExPR19WRVJCT1NFKE1lZGlhLCAibWF4
VGltZUxvYWRlZDogJWYiLCBsb2FkZWQpOworICAgIHJldHVybiBsb2FkZWQ7CiB9CiAKIHVuc2ln
bmVkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Ynl0ZXNMb2FkZWQoKSBjb25zdAogewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJieXRlc0xvYWRlZCIpOwotICAg
IC8qaWYgKCFtX3BsYXlCaW4pCisgICAgaWYgKCFtX3BsYXlCaW4pCiAgICAgICAgIHJldHVybiAw
OwotICAgIGZsb2F0IGR1ciA9IGR1cmF0aW9uKCk7Ci0gICAgZmxvYXQgbWF4VGltZSA9IG1heFRp
bWVMb2FkZWQoKTsKLSAgICBpZiAoIWR1cikKLSAgICAgICAgcmV0dXJuIDA7Ki8KIAotICAgIHJl
dHVybiAxOyAvLyB0b3RhbEJ5dGVzKCkgKiBtYXhUaW1lIC8gZHVyOworICAgIGlmICghbV9tZWRp
YUR1cmF0aW9uKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHVuc2lnbmVkIGxvYWRlZCA9IHRv
dGFsQnl0ZXMoKSAqIG1heFRpbWVMb2FkZWQoKSAvIG1fbWVkaWFEdXJhdGlvbjsKKyAgICBMT0df
VkVSQk9TRShNZWRpYSwgImJ5dGVzTG9hZGVkOiAlZCIsIGxvYWRlZCk7CisgICAgcmV0dXJuIGxv
YWRlZDsKIH0KIAogYm9vbCBNZWRpYVBsYXllclByaXZhdGU6OnRvdGFsQnl0ZXNLbm93bigpIGNv
bnN0CkBAIC01NjEsNyArNjkwLDYgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGU6OnRvdGFsQnl0
ZXNLbm93bigpIGNvbnN0CiAKIHVuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZTo6dG90YWxCeXRl
cygpIGNvbnN0CiB7Ci0gICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJ0b3RhbEJ5dGVzIik7CiAgICAg
aWYgKCFtX3NvdXJjZSkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTU3MSw2ICs2OTksNyBAQCB1
bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGU6OnRvdGFsQnl0ZXMoKSBjb25zdAogICAgIEdzdEZv
cm1hdCBmbXQgPSBHU1RfRk9STUFUX0JZVEVTOwogICAgIGdpbnQ2NCBsZW5ndGggPSAwOwogICAg
IGdzdF9lbGVtZW50X3F1ZXJ5X2R1cmF0aW9uKG1fc291cmNlLCAmZm10LCAmbGVuZ3RoKTsKKyAg
ICBMT0dfVkVSQk9TRShNZWRpYSwgInRvdGFsQnl0ZXMgJSIgR19HSU5UNjRfRk9STUFULCBsZW5n
dGgpOwogCiAgICAgcmV0dXJuIGxlbmd0aDsKIH0KQEAgLTYwNSwyMyArNzM0LDM3IEBAIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlOjp1cGRhdGVTdGF0ZXMoKQogICAgICAgICAmc3RhdGUsICZwZW5k
aW5nLCAyNTAgKiBHU1RfTlNFQ09ORCk7CiAKICAgICBib29sIHNob3VsZFVwZGF0ZUFmdGVyU2Vl
ayA9IGZhbHNlOworICAgIGJvb2wgY29tcGxldGVseUxvYWRlZCA9IG1heFRpbWVMb2FkZWQoKSA9
PSBkdXJhdGlvbigpOwogICAgIHN3aXRjaCAocmV0KSB7CiAgICAgY2FzZSBHU1RfU1RBVEVfQ0hB
TkdFX1NVQ0NFU1M6CiAgICAgICAgIExPR19WRVJCT1NFKE1lZGlhLCAiU3RhdGU6ICVzLCBwZW5k
aW5nOiAlcyIsCiAgICAgICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShzdGF0ZSks
CiAgICAgICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShwZW5kaW5nKSk7CiAKLSAg
ICAgICAgaWYgKHN0YXRlID09IEdTVF9TVEFURV9SRUFEWSkKLSAgICAgICAgICAgIG1fcmVhZHlT
dGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKLSAgICAgICAgZWxzZSBpZiAoc3RhdGUg
PT0gR1NUX1NUQVRFX1BBVVNFRCkKLSAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxh
eWVyOjpIYXZlRW5vdWdoRGF0YTsKLQogICAgICAgICBpZiAoc3RhdGUgPT0gR1NUX1NUQVRFX1BM
QVlJTkcpIHsKICAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlRW5v
dWdoRGF0YTsKICAgICAgICAgICAgIG1fcGF1c2VkID0gZmFsc2U7Ci0gICAgICAgIH0gZWxzZQor
ICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09IEdTVF9TVEFURV9QQVVTRUQpCiAgICAgICAgICAg
ICBtX3BhdXNlZCA9IHRydWU7CiAKKyAgICAgICAgLy8gSXMgb24tZGlzayBidWZmZXJpbmcgaW4g
cHJvZ3Jlc3M/CisgICAgICAgIGlmIChtX2Rvd25sb2FkRmlsZW5hbWUpCisgICAgICAgICAgICBt
X25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkZWQ7CisKKyAgICAgICAg
aWYgKGNvbXBsZXRlbHlMb2FkZWQpIHsKKyAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVk
aWFQbGF5ZXI6OkxvYWRlZDsKKyAgICAgICAgICAgIGlmIChzdGF0ZSA9PSBHU1RfU1RBVEVfUkVB
RFkpCisgICAgICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3Ro
aW5nOworICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRCkKKyAg
ICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7
CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgaWYgKHN0YXRlID09IEdTVF9TVEFURV9SRUFE
WSkKKyAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhp
bmc7CisgICAgICAgICAgICBlbHNlIGlmIChtX3BsYXlSZXF1aXJlZCkKKyAgICAgICAgICAgICAg
ICBtX3JlYWR5U3RhdGUgPSBjdXJyZW50VGltZSgpIDwgbWF4VGltZUxvYWRlZCgpID8gTWVkaWFQ
bGF5ZXI6OkhhdmVGdXR1cmVEYXRhIDogTWVkaWFQbGF5ZXI6OkhhdmVDdXJyZW50RGF0YTsKKwog
ICAgICAgICBpZiAobV9jaGFuZ2luZ1JhdGUpIHsKICAgICAgICAgICAgIG1fcGxheWVyLT5yYXRl
Q2hhbmdlZCgpOwogICAgICAgICAgICAgbV9jaGFuZ2luZ1JhdGUgPSBmYWxzZTsKQEAgLTYzMiw3
ICs3NzUsNiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6dXBkYXRlU3RhdGVzKCkKICAgICAg
ICAgICAgIG1fc2Vla2luZyA9IGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgbV9uZXR3b3Jr
U3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGVkOwogCiAgICAgICAgIGdfb2JqZWN0X2dldChtX3Bs
YXlCaW4sICJzb3VyY2UiLCAmbV9zb3VyY2UsIE5VTEwpOwogICAgICAgICBpZiAoIW1fc291cmNl
KQpAQCAtNzA4LDYgKzg1MCwxNCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6ZGlkRW5kKCkK
IAogdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmR1cmF0aW9uQ2hhbmdlZCgpCiB7CisgICAgLy8g
UmVzZXQgY2FjaGVkIG1lZGlhIGR1cmF0aW9uCisgICAgbV9tZWRpYUR1cmF0aW9uID0gMDsKKwor
ICAgIC8vIEFuZCByZS1jYWNoZSBpdCBpZiBwb3NzaWJsZS4KKyAgICBmbG9hdCBuZXdEdXJhdGlv
biA9IGR1cmF0aW9uKCk7CisgICAgaWYgKCFpc2luZihuZXdEdXJhdGlvbikpCisgICAgICAgIG1f
bWVkaWFEdXJhdGlvbiA9IG5ld0R1cmF0aW9uOworCiAgICAgbV9wbGF5ZXItPmR1cmF0aW9uQ2hh
bmdlZCgpOwogfQogCkBAIC05MTUsMTEgKzEwNjUsMjEgQEAgYm9vbCBNZWRpYVBsYXllclByaXZh
dGU6OnN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jv
b2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpzdXBwb3J0c1NhdmUoKSBjb25zdAoreworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxib29sPihtX2Rvd25sb2FkRmlsZW5hbWUpOworfQorCiB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZTo6Y3JlYXRlR1NUUGxheUJpbihTdHJpbmcgdXJsKQogewogICAgIEFTU0VS
VCghbV9wbGF5QmluKTsKICAgICBtX3BsYXlCaW4gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2Uo
InBsYXliaW4yIiwgInBsYXkiKTsKIAorICAgIC8vIEFjdGl2YXRlIG9uLWRpc2sgYnVmZmVyaW5n
LgorICAgIEdzdFBsYXlGbGFncyBmbGFnczsKKyAgICBnX29iamVjdF9nZXQobV9wbGF5QmluLCAi
ZmxhZ3MiLCAmZmxhZ3MsIE5VTEwpOworICAgIGdfb2JqZWN0X3NldChtX3BsYXlCaW4sICJmbGFn
cyIsIGZsYWdzIHwgR1NUX1BMQVlfRkxBR19ET1dOTE9BRCwgTlVMTCk7CisKICAgICBHc3RCdXMq
IGJ1cyA9IGdzdF9waXBlbGluZV9nZXRfYnVzKEdTVF9QSVBFTElORShtX3BsYXlCaW4pKTsKICAg
ICBnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2goYnVzKTsKICAgICBnX3NpZ25hbF9jb25uZWN0KGJ1
cywgIm1lc3NhZ2UiLCBHX0NBTExCQUNLKG1lZGlhUGxheWVyUHJpdmF0ZU1lc3NhZ2VDYWxsYmFj
ayksIHRoaXMpOwpAQCAtOTI3LDYgKzEwODcsMTIgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6
OmNyZWF0ZUdTVFBsYXlCaW4oU3RyaW5nIHVybCkKIAogICAgIGdfb2JqZWN0X3NldChtX3BsYXlC
aW4sICJ1cmkiLCB1cmwudXRmOCgpLmRhdGEoKSwgTlVMTCk7CiAKKyAgICAvLyB0ZW1wLWxvY2F0
aW9uIGlzIGEgcHJvcGVydHkgb2YgcXVldWUyLiBEZWNvZGViaW4yIHdpbGwKKyAgICAvLyBjb25m
aWd1cmUgaXQgaWYgdGhlIG1lZGlhIGNhbiBiZSBidWZmZXJlZCBpbiBkaXNrLgorICAgIGdfc2ln
bmFsX2Nvbm5lY3QobV9wbGF5QmluLCAiZGVlcC1ub3RpZnk6OnRlbXAtbG9jYXRpb24iLAorICAg
ICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhtZWRpYVBsYXllclByaXZhdGVUZW1wTG9jYXRp
b25DaGFuZ2VkQ2FsbGJhY2spLAorICAgICAgICAgICAgICAgICAgICAgdGhpcyk7CisKICAgICBn
X3NpZ25hbF9jb25uZWN0KG1fcGxheUJpbiwgIm5vdGlmeTo6dm9sdW1lIiwgR19DQUxMQkFDSyht
ZWRpYVBsYXllclByaXZhdGVWb2x1bWVDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKIAogICAgIG1f
dmlkZW9TaW5rID0gd2Via2l0X3ZpZGVvX3NpbmtfbmV3KCk7CkBAIC05NDMsNyArMTEwOSw3IEBA
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGVHU1RQbGF5QmluKFN0cmluZyB1cmwpCiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtX2Zwc1NpbmsgPSAwOwogICAgICAgICAgICAg
Z19vYmplY3Rfc2V0KG1fcGxheUJpbiwgInZpZGVvLXNpbmsiLCBtX3ZpZGVvU2luaywgTlVMTCk7
Ci0gICAgICAgICAgICBMT0coTWVkaWEsICJDYW4ndCBkaXNwbGF5IEZQUyBzdGF0aXN0aWNzLCB5
b3UgbmVlZCBnc3QtcGx1Z2lucy1iYWQgPj0gMC4xMC4xOCIpOworICAgICAgICAgICAgTE9HX1ZF
UkJPU0UoTWVkaWEsICJDYW4ndCBkaXNwbGF5IEZQUyBzdGF0aXN0aWNzLCB5b3UgbmVlZCBnc3Qt
cGx1Z2lucy1iYWQgPj0gMC4xMC4xOCIpOwogICAgICAgICB9CiAgICAgfSBlbHNlCiAgICAgICAg
IGdfb2JqZWN0X3NldChtX3BsYXlCaW4sICJ2aWRlby1zaW5rIiwgbV92aWRlb1NpbmssIE5VTEwp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9NZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXIuaAppbmRleCA0NzE3OTk5Li4yMGYyYjY5IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXIuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXIuaApAQCAtMTA0LDYgKzEwNCwxMSBAQCBjbGFzcyBNZWRpYVBsYXllclByaXZh
dGUgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlIHsKICAgICAgICAgICAgIGJv
b2wgaGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdDsKIAogICAgICAgICAgICAgYm9vbCBz
dXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25zdDsKKyAgICAgICAgICAgIGJvb2wgc3VwcG9ydHNTYXZl
KCkgY29uc3Q7CisKKyAgICAgICAgICAgIHZvaWQgcHJvY2Vzc0J1ZmZlcmluZ1N0YXRzKEdzdE1l
c3NhZ2UqIG1lc3NhZ2UpOworICAgICAgICAgICAgYm9vbCBxdWVyeUJ1ZmZlcmluZ1N0YXRzKCk7
CisgICAgICAgICAgICB2b2lkIHVwZGF0ZURvd25sb2FkTG9jYXRpb24oZ2NoYXIqKTsKIAogICAg
ICAgICBwcml2YXRlOgogICAgICAgICAgICAgTWVkaWFQbGF5ZXJQcml2YXRlKE1lZGlhUGxheWVy
Kik7CkBAIC0xNDIsNiArMTQ3LDEyIEBAIGNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZSA6IHB1Ymxp
YyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UgewogICAgICAgICAgICAgYm9vbCBtX3NlZWtp
bmc7CiAgICAgICAgICAgICBib29sIG1fZXJyb3JPY2N1cmVkOwogICAgICAgICAgICAgZ3VpbnQg
bV92b2x1bWVJZGxlSWQ7CisgICAgICAgICAgICBmbG9hdCBtX21lZGlhRHVyYXRpb247CisgICAg
ICAgICAgICBib29sIG1fc3RhcnRlZEJ1ZmZlcmluZzsKKyAgICAgICAgICAgIGJvb2wgbV9wbGF5
UmVxdWlyZWQ7CisgICAgICAgICAgICBndWludCBtX2ZpbGxUaW1lb3V0SWQ7CisgICAgICAgICAg
ICBmbG9hdCBtX21heFRpbWVMb2FkZWQ7CisgICAgICAgICAgICBnY2hhciogbV9kb3dubG9hZEZp
bGVuYW1lOwogICAgIH07CiB9CiAKLS0gCjEuNi4zLjM=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46056</attachid>
            <date>2010-01-07 09:06:39 -0800</date>
            <delta_ts>2010-02-01 08:43:30 -0800</delta_ts>
            <desc>draw the buffering status in the media controls</desc>
            <filename>draw-the-buffering-status-in-the-media-controls.patch</filename>
            <type>text/plain</type>
            <size>11781</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSBkYjI1YzEwZmUzZDc5M2EyNGFiZTIyY2NjNDdiZTRhMjI3YWU2NDUwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBUaHUsIDcgSmFuIDIwMTAgMTQ6MTE6NDEgKzAxMDAKU3ViamVjdDogW1BBVENIXSBk
cmF3IHRoZSBidWZmZXJpbmcgc3RhdHVzIGluIHRoZSBtZWRpYSBjb250cm9scwoKLS0tCiBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTYgKysr
KysrKwogLi4uL2d0ay9tZWRpYS9jb250cm9scy1hZnRlci1yZWxvYWQtZXhwZWN0ZWQudHh0ICAg
fCAgICA0ICstCiAuLi4vZ3RrL21lZGlhL2NvbnRyb2xzLWRyYWctdGltZWJhci1leHBlY3RlZC50
eHQgICB8ICAgIDIgKy0KIC4uLi9ndGsvbWVkaWEvY29udHJvbHMtc3RyaWN0LWV4cGVjdGVkLnR4
dCAgICAgICAgIHwgICAgNCArLQogLi4uL2d0ay9tZWRpYS9jb250cm9scy1zdHlsaW5nLWV4cGVj
dGVkLnR4dCAgICAgICAgfCAgICA4ICsrLS0KIC4uLi9tZWRpYS92aWRlby1jb250cm9scy1yZW5k
ZXJpbmctZXhwZWN0ZWQudHh0ICAgIHwgICAxMiArKystLS0KIFdlYkNvcmUvQ2hhbmdlTG9nICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMyArKysrKysKIFdlYkNvcmUvY3Nz
L21lZGlhQ29udHJvbHNHdGsuY3NzICAgICAgICAgICAgICAgICAgIHwgICAgMiArCiBXZWJDb3Jl
L3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAgICAgICAgICAgICB8ICAgNDQgKysrKysr
KysrKysrKysrKysrLQogOSBmaWxlcyBjaGFuZ2VkLCA4NyBpbnNlcnRpb25zKCspLCAxOCBkZWxl
dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggYzliZTQ4Ny4uZjU0MWJjNSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBA
CisyMDEwLTAxLTA3ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1N0cmVhbWVy
XSBTaG91bGQgaGFuZGxlIEJVRkZFUklORyBtZXNzYWdlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzAwMDQKKworICAgICAgICBEcmF3IHRoZSBidWZm
ZXJpbmcgc3RhdHVzIGluIHRoZSBtZWRpYSBjb250cm9scy4KKworICAgICAgICAqIHBsYXRmb3Jt
L2d0ay9tZWRpYS9jb250cm9scy1hZnRlci1yZWxvYWQtZXhwZWN0ZWQudHh0OgorICAgICAgICAq
IHBsYXRmb3JtL2d0ay9tZWRpYS9jb250cm9scy1kcmFnLXRpbWViYXItZXhwZWN0ZWQudHh0Ogor
ICAgICAgICAqIHBsYXRmb3JtL2d0ay9tZWRpYS9jb250cm9scy1zdHJpY3QtZXhwZWN0ZWQudHh0
OgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9tZWRpYS9jb250cm9scy1zdHlsaW5nLWV4cGVjdGVk
LnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvbWVkaWEvdmlkZW8tY29udHJvbHMtcmVuZGVy
aW5nLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgUmUtYmFzZWxpbmVkIGR1ZSB0byAxcHggbGVmdC9y
aWdodCBib3JkZXIgYWRkZWQgaW4gY29udHJvbHMgdGltZWxpbmUuCisKIDIwMTAtMDEtMDYgIE1P
UklUQSBIYWppbWUgIDxtb3JyaXRhQGdtYWlsLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBO
aWtvbGFzIFppbW1lcm1hbm4uCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsv
bWVkaWEvY29udHJvbHMtYWZ0ZXItcmVsb2FkLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3Bs
YXRmb3JtL2d0ay9tZWRpYS9jb250cm9scy1hZnRlci1yZWxvYWQtZXhwZWN0ZWQudHh0CmluZGV4
IDA4ZDljOTIuLjk4Yjg4MDQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9t
ZWRpYS9jb250cm9scy1hZnRlci1yZWxvYWQtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2d0ay9tZWRpYS9jb250cm9scy1hZnRlci1yZWxvYWQtZXhwZWN0ZWQudHh0CkBA
IC0xNyw4ICsxNyw4IEBAIGxheWVyIGF0ICg4LDQ0KSBzaXplIDMyMHgyNDAKIGxheWVyIGF0ICg4
LDI2NCkgc2l6ZSAzMjB4MjAKICAgUmVuZGVyRmxleGlibGVCb3ggKHBvc2l0aW9uZWQpIHtESVZ9
IGF0ICgwLDIyMCkgc2l6ZSAzMjB4MjAKICAgICBSZW5kZXJCdXR0b24ge0lOUFVUfSBhdCAoMCww
KSBzaXplIDIweDIwCi0gICAgUmVuZGVyRmxleGlibGVCb3gge0RJVn0gYXQgKDIwLDApIHNpemUg
MjQweDIwCi0gICAgICBSZW5kZXJTbGlkZXIge0lOUFVUfSBhdCAoMCwwKSBzaXplIDI0MHgyMAor
ICAgIFJlbmRlckZsZXhpYmxlQm94IHtESVZ9IGF0ICgyMCwwKSBzaXplIDI0MHgyMCBbYm9yZGVy
OiAoMXB4IHNvbGlkICNGRkZGRkYzMykgbm9uZSAoMXB4IHNvbGlkICNGRkZGRkYzMyldCisgICAg
ICBSZW5kZXJTbGlkZXIge0lOUFVUfSBhdCAoMSwwKSBzaXplIDIzOHgyMAogICAgICAgICBSZW5k
ZXJCbG9jayB7RElWfSBhdCAoMiw0KSBzaXplIDEyeDEyCiAgICAgUmVuZGVyQnV0dG9uIHtJTlBV
VH0gYXQgKDI2MCwwKSBzaXplIDIweDIwCiAgICAgUmVuZGVyQnV0dG9uIHtJTlBVVH0gYXQgKDI4
MCwwKSBzaXplIDIweDIwCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvbWVk
aWEvY29udHJvbHMtZHJhZy10aW1lYmFyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL2d0ay9tZWRpYS9jb250cm9scy1kcmFnLXRpbWViYXItZXhwZWN0ZWQudHh0CmluZGV4IDY4
OGI0NDkuLjY5MzZiZTQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9tZWRp
YS9jb250cm9scy1kcmFnLXRpbWViYXItZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3Bs
YXRmb3JtL2d0ay9tZWRpYS9jb250cm9scy1kcmFnLXRpbWViYXItZXhwZWN0ZWQudHh0CkBAIC00
LDcgKzQsNyBAQCBSVU4odmlkZW8uYXV0b3BsYXkgPSB0cnVlKQogUlVOKHZpZGVvLnNyYyA9ICdj
b250ZW50L3Rlc3QubXA0JykKIEVWRU5UKHBsYXlpbmcpCiBFVkVOVChzZWVrZWQpCi1UaW1lOiAy
LjIKK1RpbWU6IDIuMQogRVZFTlQoc2Vla2VkKQogVGltZTogMi43CiBFVkVOVChzZWVrZWQpCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvbWVkaWEvY29udHJvbHMtc3RyaWN0
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9tZWRpYS9jb250cm9scy1z
dHJpY3QtZXhwZWN0ZWQudHh0CmluZGV4IDI1MDhjMWMuLmYwNDAyM2UgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2d0ay9tZWRpYS9jb250cm9scy1zdHJpY3QtZXhwZWN0ZWQudHh0
CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9tZWRpYS9jb250cm9scy1zdHJpY3QtZXhw
ZWN0ZWQudHh0CkBAIC0xNyw4ICsxNyw4IEBAIGxheWVyIGF0ICg4LDUyKSBzaXplIDMyMHgyNDAK
IGxheWVyIGF0ICg4LDI3Mikgc2l6ZSAzMjB4MjAKICAgUmVuZGVyRmxleGlibGVCb3ggKHBvc2l0
aW9uZWQpIHtESVZ9IGF0ICgwLDIyMCkgc2l6ZSAzMjB4MjAKICAgICBSZW5kZXJCdXR0b24ge0lO
UFVUfSBhdCAoMCwwKSBzaXplIDIweDIwCi0gICAgUmVuZGVyRmxleGlibGVCb3gge0RJVn0gYXQg
KDIwLDApIHNpemUgMjQweDIwCi0gICAgICBSZW5kZXJTbGlkZXIge0lOUFVUfSBhdCAoMCwwKSBz
aXplIDI0MHgyMAorICAgIFJlbmRlckZsZXhpYmxlQm94IHtESVZ9IGF0ICgyMCwwKSBzaXplIDI0
MHgyMCBbYm9yZGVyOiAoMXB4IHNvbGlkICNGRkZGRkYzMykgbm9uZSAoMXB4IHNvbGlkICNGRkZG
RkYzMyldCisgICAgICBSZW5kZXJTbGlkZXIge0lOUFVUfSBhdCAoMSwwKSBzaXplIDIzOHgyMAog
ICAgICAgICBSZW5kZXJCbG9jayB7RElWfSBhdCAoMiw0KSBzaXplIDEyeDEyCiAgICAgUmVuZGVy
QnV0dG9uIHtJTlBVVH0gYXQgKDI2MCwwKSBzaXplIDIweDIwCiAgICAgUmVuZGVyQnV0dG9uIHtJ
TlBVVH0gYXQgKDI4MCwwKSBzaXplIDIweDIwCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9ndGsvbWVkaWEvY29udHJvbHMtc3R5bGluZy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9ndGsvbWVkaWEvY29udHJvbHMtc3R5bGluZy1leHBlY3RlZC50eHQKaW5kZXgg
N2I5NzE4My4uZjlkMTcwYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL21l
ZGlhL2NvbnRyb2xzLXN0eWxpbmctZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL2d0ay9tZWRpYS9jb250cm9scy1zdHlsaW5nLWV4cGVjdGVkLnR4dApAQCAtMjEsOCArMjEs
OCBAQCBsYXllciBhdCAoMTgsNDQpIHNpemUgMzIweDI0MAogbGF5ZXIgYXQgKDE4LDI2NCkgc2l6
ZSAzMjB4MjAKICAgUmVuZGVyRmxleGlibGVCb3ggKHBvc2l0aW9uZWQpIHtESVZ9IGF0ICgwLDIy
MCkgc2l6ZSAzMjB4MjAKICAgICBSZW5kZXJCdXR0b24ge0lOUFVUfSBhdCAoMCwwKSBzaXplIDIw
eDIwCi0gICAgUmVuZGVyRmxleGlibGVCb3gge0RJVn0gYXQgKDIwLDApIHNpemUgMjQweDIwCi0g
ICAgICBSZW5kZXJTbGlkZXIge0lOUFVUfSBhdCAoMCwwKSBzaXplIDI0MHgyMAorICAgIFJlbmRl
ckZsZXhpYmxlQm94IHtESVZ9IGF0ICgyMCwwKSBzaXplIDI0MHgyMCBbYm9yZGVyOiAoMXB4IHNv
bGlkICNGRkZGRkYzMykgbm9uZSAoMXB4IHNvbGlkICNGRkZGRkYzMyldCisgICAgICBSZW5kZXJT
bGlkZXIge0lOUFVUfSBhdCAoMSwwKSBzaXplIDIzOHgyMAogICAgICAgICBSZW5kZXJCbG9jayB7
RElWfSBhdCAoMiw0KSBzaXplIDEyeDEyCiAgICAgUmVuZGVyQnV0dG9uIHtJTlBVVH0gYXQgKDI2
MCwwKSBzaXplIDIweDIwCiAgICAgUmVuZGVyQnV0dG9uIHtJTlBVVH0gYXQgKDI4MCwwKSBzaXpl
IDIweDIwCkBAIC0zMiw4ICszMiw4IEBAIGxheWVyIGF0ICg4LDI4NCkgc2l6ZSAzMjB4MjQwCiBs
YXllciBhdCAoOCw1MDQpIHNpemUgMzIweDIwCiAgIFJlbmRlckZsZXhpYmxlQm94IChwb3NpdGlv
bmVkKSB7RElWfSBhdCAoMCwyMjApIHNpemUgMzIweDIwCiAgICAgUmVuZGVyQnV0dG9uIHtJTlBV
VH0gYXQgKDAsMCkgc2l6ZSAyMHgyMAotICAgIFJlbmRlckZsZXhpYmxlQm94IHtESVZ9IGF0ICgy
MCwwKSBzaXplIDI0MHgyMAotICAgICAgUmVuZGVyU2xpZGVyIHtJTlBVVH0gYXQgKDAsMCkgc2l6
ZSAyNDB4MjAKKyAgICBSZW5kZXJGbGV4aWJsZUJveCB7RElWfSBhdCAoMjAsMCkgc2l6ZSAyNDB4
MjAgW2JvcmRlcjogKDFweCBzb2xpZCAjRkZGRkZGMzMpIG5vbmUgKDFweCBzb2xpZCAjRkZGRkZG
MzMpXQorICAgICAgUmVuZGVyU2xpZGVyIHtJTlBVVH0gYXQgKDEsMCkgc2l6ZSAyMzh4MjAKICAg
ICAgICAgUmVuZGVyQmxvY2sge0RJVn0gYXQgKDIsNCkgc2l6ZSAxMngxMgogICAgIFJlbmRlckJ1
dHRvbiB7SU5QVVR9IGF0ICgyNjAsMCkgc2l6ZSAyMHgyMAogICAgIFJlbmRlckJ1dHRvbiB7SU5Q
VVR9IGF0ICgyODAsMCkgc2l6ZSAyMHgyMApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vZ3RrL21lZGlhL3ZpZGVvLWNvbnRyb2xzLXJlbmRlcmluZy1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9ndGsvbWVkaWEvdmlkZW8tY29udHJvbHMtcmVuZGVyaW5nLWV4cGVj
dGVkLnR4dAppbmRleCBhZGQyOWZlLi5lYzhjMTRmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9ndGsvbWVkaWEvdmlkZW8tY29udHJvbHMtcmVuZGVyaW5nLWV4cGVjdGVkLnR4dAor
KysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvbWVkaWEvdmlkZW8tY29udHJvbHMtcmVuZGVy
aW5nLWV4cGVjdGVkLnR4dApAQCAtMjAsOCArMjAsOCBAQCBsYXllciBhdCAoOCw0NCkgc2l6ZSAz
MjB4MjQwCiBsYXllciBhdCAoOCwyNjQpIHNpemUgMzIweDIwCiAgIFJlbmRlckZsZXhpYmxlQm94
IChwb3NpdGlvbmVkKSB7RElWfSBhdCAoMCwyMjApIHNpemUgMzIweDIwCiAgICAgUmVuZGVyQnV0
dG9uIHtJTlBVVH0gYXQgKDAsMCkgc2l6ZSAyMHgyMAotICAgIFJlbmRlckZsZXhpYmxlQm94IHtE
SVZ9IGF0ICgyMCwwKSBzaXplIDI0MHgyMAotICAgICAgUmVuZGVyU2xpZGVyIHtJTlBVVH0gYXQg
KDAsMCkgc2l6ZSAyNDB4MjAKKyAgICBSZW5kZXJGbGV4aWJsZUJveCB7RElWfSBhdCAoMjAsMCkg
c2l6ZSAyNDB4MjAgW2JvcmRlcjogKDFweCBzb2xpZCAjRkZGRkZGMzMpIG5vbmUgKDFweCBzb2xp
ZCAjRkZGRkZGMzMpXQorICAgICAgUmVuZGVyU2xpZGVyIHtJTlBVVH0gYXQgKDEsMCkgc2l6ZSAy
Mzh4MjAKICAgICAgICAgUmVuZGVyQmxvY2sge0RJVn0gYXQgKDIsNCkgc2l6ZSAxMngxMgogICAg
IFJlbmRlckJ1dHRvbiB7SU5QVVR9IGF0ICgyNjAsMCkgc2l6ZSAyMHgyMAogICAgIFJlbmRlckJ1
dHRvbiB7SU5QVVR9IGF0ICgyODAsMCkgc2l6ZSAyMHgyMApAQCAtMzEsOCArMzEsOCBAQCBsYXll
ciBhdCAoOCwyODQpIHNpemUgMzIweDI0MAogbGF5ZXIgYXQgKDgsNTA0KSBzaXplIDMyMHgyMAog
ICBSZW5kZXJGbGV4aWJsZUJveCAocG9zaXRpb25lZCkge0RJVn0gYXQgKDAsMjIwKSBzaXplIDMy
MHgyMAogICAgIFJlbmRlckJ1dHRvbiB7SU5QVVR9IGF0ICgwLDApIHNpemUgMjB4MjAKLSAgICBS
ZW5kZXJGbGV4aWJsZUJveCB7RElWfSBhdCAoMjAsMCkgc2l6ZSAyNDB4MjAKLSAgICAgIFJlbmRl
clNsaWRlciB7SU5QVVR9IGF0ICgwLDApIHNpemUgMjQweDIwCisgICAgUmVuZGVyRmxleGlibGVC
b3gge0RJVn0gYXQgKDIwLDApIHNpemUgMjQweDIwIFtib3JkZXI6ICgxcHggc29saWQgI0ZGRkZG
RjMzKSBub25lICgxcHggc29saWQgI0ZGRkZGRjMzKV0KKyAgICAgIFJlbmRlclNsaWRlciB7SU5Q
VVR9IGF0ICgxLDApIHNpemUgMjM4eDIwCiAgICAgICAgIFJlbmRlckJsb2NrIHtESVZ9IGF0ICgy
LDQpIHNpemUgMTJ4MTIKICAgICBSZW5kZXJCdXR0b24ge0lOUFVUfSBhdCAoMjYwLDApIHNpemUg
MjB4MjAKICAgICBSZW5kZXJCdXR0b24ge0lOUFVUfSBhdCAoMjgwLDApIHNpemUgMjB4MjAKQEAg
LTQ0LDggKzQ0LDggQEAgbGF5ZXIgYXQgKDgsNTI0KSBzaXplIDMyMHgyNDAKIGxheWVyIGF0ICg4
LDc0NCkgc2l6ZSAzMjB4MjAKICAgUmVuZGVyRmxleGlibGVCb3ggKHBvc2l0aW9uZWQpIHtESVZ9
IGF0ICgwLDIyMCkgc2l6ZSAzMjB4MjAKICAgICBSZW5kZXJCdXR0b24ge0lOUFVUfSBhdCAoMCww
KSBzaXplIDIweDIwCi0gICAgUmVuZGVyRmxleGlibGVCb3gge0RJVn0gYXQgKDIwLDApIHNpemUg
MjQweDIwCi0gICAgICBSZW5kZXJTbGlkZXIge0lOUFVUfSBhdCAoMCwwKSBzaXplIDI0MHgyMAor
ICAgIFJlbmRlckZsZXhpYmxlQm94IHtESVZ9IGF0ICgyMCwwKSBzaXplIDI0MHgyMCBbYm9yZGVy
OiAoMXB4IHNvbGlkICNGRkZGRkYzMykgbm9uZSAoMXB4IHNvbGlkICNGRkZGRkYzMyldCisgICAg
ICBSZW5kZXJTbGlkZXIge0lOUFVUfSBhdCAoMSwwKSBzaXplIDIzOHgyMAogICAgICAgICBSZW5k
ZXJCbG9jayB7RElWfSBhdCAoMiw0KSBzaXplIDEyeDEyCiAgICAgUmVuZGVyQnV0dG9uIHtJTlBV
VH0gYXQgKDI2MCwwKSBzaXplIDIweDIwCiAgICAgUmVuZGVyQnV0dG9uIHtJTlBVVH0gYXQgKDI4
MCwwKSBzaXplIDIweDIwCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUv
Q2hhbmdlTG9nCmluZGV4IDVlYmFkNGYuLmYzNDNjNWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC01LDYgKzUsMTkgQEAKICAgICAgICAg
W0dTdHJlYW1lcl0gU2hvdWxkIGhhbmRsZSBCVUZGRVJJTkcgbWVzc2FnZXMKICAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwMDA0CiAKKyAgICAgICAgRHJh
dyB0aGUgYnVmZmVyaW5nIHN0YXR1cyBpbiB0aGUgbWVkaWEgY29udHJvbHMuCisKKyAgICAgICAg
KiBjc3MvbWVkaWFDb250cm9sc0d0ay5jc3M6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1JlbmRl
clRoZW1lR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwYWludE1l
ZGlhU2xpZGVyVHJhY2spOgorCisyMDEwLTAxLTA3ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1h
bmRAaWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBbR1N0cmVhbWVyXSBTaG91bGQgaGFuZGxlIEJVRkZFUklORyBtZXNzYWdlcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzAwMDQKKwogICAg
ICAgICBJbml0aWFsIHN1cHBvcnQgZm9yIG9uLWRpc2sgYnVmZmVyaW5nIG9mIHZpZGVvcy4gVGhp
cyB3b3JrcyBvbmx5CiAgICAgICAgIGZvciBRdWlja3RpbWUgYW5kIGZsdiB0aG91Z2guCiAKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvY3NzL21lZGlhQ29udHJvbHNHdGsuY3NzIGIvV2ViQ29yZS9jc3Mv
bWVkaWFDb250cm9sc0d0ay5jc3MKaW5kZXggOGU5OGFiMS4uY2M2ZGExNCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9jc3MvbWVkaWFDb250cm9sc0d0ay5jc3MKKysrIGIvV2ViQ29yZS9jc3MvbWVkaWFD
b250cm9sc0d0ay5jc3MKQEAgLTQxLDYgKzQxLDggQEAgYXVkaW86Oi13ZWJraXQtbWVkaWEtY29u
dHJvbHMtcGxheS1idXR0b24sIHZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXBsYXktYnUK
IAogYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdGltZWxpbmUtY29udGFpbmVyLCB2aWRl
bzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lbGluZS1jb250YWluZXIgewogICAgIGhlaWdo
dDogMjBweDsKKyAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwg
MC4yKTsKKyAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAu
Mik7CiB9CiAKIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXRpbWVsaW5lLCB2aWRlbzo6
LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lbGluZSB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5k
ZXJUaGVtZUd0ay5jcHAKaW5kZXggODA5YWEyZi4uNDczNTc5OSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL1JlbmRlclRoZW1lR3RrLmNwcApAQCAtMjYsOSArMjYsMTEgQEAKIAogI2luY2x1ZGUgIkNT
dHJpbmcuaCIKICNpbmNsdWRlICJHT3duUHRyLmgiCisjaW5jbHVkZSAiR3JhZGllbnQuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVudHMu
aCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlJlbmRlckJveC5oIgog
I2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgpAQCAtNjU0LDkgKzY1Niw0NSBAQCBib29sIFJlbmRl
clRoZW1lR3RrOjpwYWludE1lZGlhU2Vla0ZvcndhcmRCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBSZW5kZXJPYgogCiBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2xpZGVyVHJh
Y2soUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByKQogewotICAgIHBhaW50SW5mby5jb250ZXh0LT5maWxsUmVj
dChGbG9hdFJlY3QociksIG1fcGFuZWxDb2xvciwgRGV2aWNlQ29sb3JTcGFjZSk7Ci0gICAgcGFp
bnRJbmZvLmNvbnRleHQtPmZpbGxSZWN0KEZsb2F0UmVjdChJbnRSZWN0KHIueCgpLCByLnkoKSAr
IChyLmhlaWdodCgpIC0gbV9tZWRpYVNsaWRlckhlaWdodCkgLyAyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLndpZHRoKCksIG1fbWVkaWFTbGlk
ZXJIZWlnaHQpKSwgbV9zbGlkZXJDb2xvciwgRGV2aWNlQ29sb3JTcGFjZSk7CisgICAgR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQ7CisKKyAgICBjb250ZXh0LT5m
aWxsUmVjdChGbG9hdFJlY3QociksIG1fcGFuZWxDb2xvciwgRGV2aWNlQ29sb3JTcGFjZSk7Cisg
ICAgY29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KEludFJlY3Qoci54KCksIHIueSgpICsgKHIu
aGVpZ2h0KCkgLSBtX21lZGlhU2xpZGVySGVpZ2h0KSAvIDIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgci53aWR0aCgpLCBtX21lZGlhU2xpZGVySGVpZ2h0KSksIG1f
c2xpZGVyQ29sb3IsIERldmljZUNvbG9yU3BhY2UpOworCisgICAgUmVuZGVyU3R5bGUqIHN0eWxl
ID0gby0+c3R5bGUoKTsKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSB0b1Bh
cmVudE1lZGlhRWxlbWVudChvKTsKKworICAgIGlmICghbWVkaWFFbGVtZW50KQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAvLyBEcmF3IHRoZSBidWZmZXJlZCByYW5nZXMuIFRoaXMgY29k
ZSBpcyBoaWdobHkgaW5zcGlyZWQgZnJvbQorICAgIC8vIENocm9tZS4KKyAgICAvLyBGSVhNRTog
RHJhdyBtdWx0aXBsZSByYW5nZXMgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGJ1ZmZlcmVkCisgICAg
Ly8gcmFuZ2VzLiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgcGxheWVyIGlzIGFs
d2F5cworICAgIC8vIGJ1ZmZlcmluZyBhIHNpbmdsZSByYW5nZSBhbnl3YXkuCisgICAgSW50UmVj
dCBidWZmZXJlZFJlY3QgPSByOworICAgIGJ1ZmZlcmVkUmVjdC5pbmZsYXRlKC1zdHlsZS0+Ym9y
ZGVyTGVmdFdpZHRoKCkpOworICAgIGJ1ZmZlcmVkUmVjdC5zZXRXaWR0aCgoYnVmZmVyZWRSZWN0
LndpZHRoKCkgKiBtZWRpYUVsZW1lbnQtPnBlcmNlbnRMb2FkZWQoKSkpOworCisgICAgLy8gRG9u
J3QgYm90aGVyIGRyYXdpbmcgYW4gZW1wdHkgYXJlYS4KKyAgICBpZiAoIWJ1ZmZlcmVkUmVjdC5p
c0VtcHR5KCkpIHsKKyAgICAgICAgSW50UG9pbnQgc2xpZGVyVG9wTGVmdCA9IGJ1ZmZlcmVkUmVj
dC5sb2NhdGlvbigpOworICAgICAgICBJbnRQb2ludCBzbGlkZXJUb3BSaWdodCA9IHNsaWRlclRv
cExlZnQ7CisgICAgICAgIHNsaWRlclRvcFJpZ2h0Lm1vdmUoMCwgYnVmZmVyZWRSZWN0LmhlaWdo
dCgpKTsKKworICAgICAgICBSZWZQdHI8R3JhZGllbnQ+IGdyYWRpZW50ID0gR3JhZGllbnQ6OmNy
ZWF0ZShzbGlkZXJUb3BMZWZ0LCBzbGlkZXJUb3BSaWdodCk7CisgICAgICAgIENvbG9yIHN0YXJ0
Q29sb3IgPSBtX3BhbmVsQ29sb3I7CisgICAgICAgIGdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC4w
LCBzdGFydENvbG9yKTsKKyAgICAgICAgZ3JhZGllbnQtPmFkZENvbG9yU3RvcCgxLjAsIENvbG9y
KHN0YXJ0Q29sb3IucmVkKCkgLyAyLCBzdGFydENvbG9yLmdyZWVuKCkgLyAyLCBzdGFydENvbG9y
LmJsdWUoKSAvIDIsIHN0YXJ0Q29sb3IuYWxwaGEoKSkpOworCisgICAgICAgIGNvbnRleHQtPnNh
dmUoKTsKKyAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoTm9TdHJva2UpOworICAgICAg
ICBjb250ZXh0LT5zZXRGaWxsR3JhZGllbnQoZ3JhZGllbnQpOworICAgICAgICBjb250ZXh0LT5m
aWxsUmVjdChidWZmZXJlZFJlY3QpOworICAgICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CisgICAg
fQorCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi0tIAoxLjYuMy4z
</data>
<flag name="review"
          id="28258"
          type_id="1"
          status="+"
          setter="gustavo"
    />
    <flag name="commit-queue"
          id="30394"
          type_id="3"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46205</attachid>
            <date>2010-01-09 06:26:36 -0800</date>
            <delta_ts>2010-01-11 00:27:23 -0800</delta_ts>
            <desc>initial support for on-disk buffering of videos</desc>
            <filename>initial-support-for-on-disk-buffering-of-videos.patch</filename>
            <type>text/plain</type>
            <size>15810</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSA3ZTY2YTc5MDgyN2UyN2NlMjI2MmVhYjNmOTU3OTZmNDJiMmI3ZTA2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBUdWUsIDUgSmFuIDIwMTAgMTY6Mjk6NTYgKzAxMDAKU3ViamVjdDogW1BBVENIXSBp
bml0aWFsIHN1cHBvcnQgZm9yIG9uLWRpc2sgYnVmZmVyaW5nIG9mIHZpZGVvcwoKLS0tCiBXZWJD
b3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjkgKysr
CiAuLi4vZ3JhcGhpY3MvZ3RrL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgICB8ICAy
MjUgKysrKysrKysrKysrKysrKystLS0KIC4uLi9ncmFwaGljcy9ndGsvTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyLmggICAgIHwgICAxMCArCiAzIGZpbGVzIGNoYW5nZWQsIDIzNiBpbnNlcnRp
b25zKCspLCAyOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBi
L1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDY4Mjc0MDguLjgzNzQ1ODAgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAK
KzIwMTAtMDEtMDcgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHU3RyZWFtZXJd
IFNob3VsZCBoYW5kbGUgQlVGRkVSSU5HIG1lc3NhZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMDAwNAorCisgICAgICAgIEluaXRpYWwgc3VwcG9y
dCBmb3Igb24tZGlzayBidWZmZXJpbmcgb2YgdmlkZW9zLiBUaGlzIHdvcmtzIG9ubHkKKyAgICAg
ICAgZm9yIFF1aWNrdGltZSBhbmQgZmx2IHRob3VnaC4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2d0ay9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6bWVkaWFQbGF5ZXJQcml2YXRlTWVzc2FnZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6Om1lZGlhUGxheWVyUHJpdmF0ZVRlbXBMb2NhdGlvbkNoYW5nZWRDYWxsYmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpidWZmZXJpbmdUaW1lb3V0Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpNZWRpYVBsYXllclByaXZhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjp+TWVkaWFQbGF5ZXJQcml2YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6ZHVyYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpwcm9jZXNzQnVmZmVyaW5nU3RhdHMpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpxdWVyeUJ1ZmZlcmluZ1N0YXRzKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6dXBkYXRlRG93bmxvYWRMb2NhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6Om1heFRpbWVTZWVrYWJsZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6Om1heFRpbWVMb2FkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpieXRlc0xvYWRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnRvdGFsQnl0ZXMpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjp1cGRhdGVTdGF0ZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpkdXJhdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGVHU1RQbGF5QmluKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9ndGsvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmg6CisKIDIw
MTAtMDEtMDcgIE1pa2UgQmVsc2hlICA8bWJlbHNoZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2d0ay9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ndGsvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAppbmRleCAw
OTg0YTQ2Li5kZDFhNThhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0
ay9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKQEAgLTQwLDYgKzQw
LDcgQEAKICNpbmNsdWRlICJWaWRlb1NpbmtHU3RyZWFtZXIuaCIKICNpbmNsdWRlICJXaWRnZXQu
aCIKIAorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CiAjaW5jbHVkZSA8Z3N0L2dzdC5oPgogI2lu
Y2x1ZGUgPGdzdC9pbnRlcmZhY2VzL21peGVyLmg+CiAjaW5jbHVkZSA8Z3N0L2ludGVyZmFjZXMv
eG92ZXJsYXkuaD4KQEAgLTQ4LDYgKzQ5LDE4IEBACiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1
ZGUgPHd0Zi9ndGsvR093blB0ci5oPgogCisvLyBHc3RQbGF5RmxhZ3MgZmxhZ3MgZnJvbSBwbGF5
YmluMgordHlwZWRlZiBlbnVtIHsKKyAgICBHU1RfUExBWV9GTEFHX1ZJREVPICAgICAgICAgPSAw
eDAxLAorICAgIEdTVF9QTEFZX0ZMQUdfQVVESU8gICAgICAgICA9IDB4MDIsCisgICAgR1NUX1BM
QVlfRkxBR19URVhUICAgICAgICAgID0gMHgwNCwKKyAgICBHU1RfUExBWV9GTEFHX1ZJUyAgICAg
ICAgICAgPSAweDA4LAorICAgIEdTVF9QTEFZX0ZMQUdfU09GVF9WT0xVTUUgICA9IDB4MTAsCisg
ICAgR1NUX1BMQVlfRkxBR19OQVRJVkVfQVVESU8gID0gMHgyMCwKKyAgICBHU1RfUExBWV9GTEFH
X05BVElWRV9WSURFTyAgPSAweDQwLAorICAgIEdTVF9QTEFZX0ZMQUdfRE9XTkxPQUQgICAgICA9
IDB4ODAKK30gR3N0UGxheUZsYWdzOworCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC01OCw3ICs3MSw2IEBAIGdib29sZWFuIG1lZGlhUGxheWVyUHJpdmF0
ZU1lc3NhZ2VDYWxsYmFjayhHc3RCdXMqIGJ1cywgR3N0TWVzc2FnZSogbWVzc2FnZSwgZ3BvCiAg
ICAgR093blB0cjxnY2hhcj4gZGVidWc7CiAgICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBl
cnJvcjsKICAgICBNZWRpYVBsYXllclByaXZhdGUqIG1wID0gcmVpbnRlcnByZXRfY2FzdDxNZWRp
YVBsYXllclByaXZhdGUqPihkYXRhKTsKLSAgICBnaW50IHBlcmNlbnQgPSAwOwogCiAgICAgc3dp
dGNoIChHU1RfTUVTU0FHRV9UWVBFKG1lc3NhZ2UpKSB7CiAgICAgY2FzZSBHU1RfTUVTU0FHRV9F
UlJPUjoKQEAgLTg4LDggKzEwMCw3IEBAIGdib29sZWFuIG1lZGlhUGxheWVyUHJpdmF0ZU1lc3Nh
Z2VDYWxsYmFjayhHc3RCdXMqIGJ1cywgR3N0TWVzc2FnZSogbWVzc2FnZSwgZ3BvCiAgICAgICAg
IG1wLT51cGRhdGVTdGF0ZXMoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHU1RfTUVTU0FH
RV9CVUZGRVJJTkc6Ci0gICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2J1ZmZlcmluZyhtZXNzYWdl
LCAmcGVyY2VudCk7Ci0gICAgICAgIExPR19WRVJCT1NFKE1lZGlhLCAiQnVmZmVyaW5nICVkIiwg
cGVyY2VudCk7CisgICAgICAgIG1wLT5wcm9jZXNzQnVmZmVyaW5nU3RhdHMobWVzc2FnZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgR1NUX01FU1NBR0VfRFVSQVRJT046CiAgICAgICAgIExP
R19WRVJCT1NFKE1lZGlhLCAiRHVyYXRpb24gY2hhbmdlZCIpOwpAQCAtMTAzLDYgKzExNCwxOSBA
QCBnYm9vbGVhbiBtZWRpYVBsYXllclByaXZhdGVNZXNzYWdlQ2FsbGJhY2soR3N0QnVzKiBidXMs
IEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIGdwbwogICAgIHJldHVybiB0cnVlOwogfQogCit2b2lkIG1l
ZGlhUGxheWVyUHJpdmF0ZVRlbXBMb2NhdGlvbkNoYW5nZWRDYWxsYmFjayhHc3RPYmplY3QqIHBs
YXlCaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHc3RPYmplY3QqIHF1ZXVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR1BhcmFtU3BlYyogcHJvcGVydHksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciBkYXRhKQoreworICAgIGdj
aGFyKiBsb2NhdGlvbjsKKyAgICBNZWRpYVBsYXllclByaXZhdGUqIG1wID0gcmVpbnRlcnByZXRf
Y2FzdDxNZWRpYVBsYXllclByaXZhdGUqPihkYXRhKTsKKworICAgIGdfb2JqZWN0X2dldChxdWV1
ZSwgInRlbXAtbG9jYXRpb24iLCAmbG9jYXRpb24sIE5VTEwpOworICAgIG1wLT51cGRhdGVEb3du
bG9hZExvY2F0aW9uKGxvY2F0aW9uKTsKKyAgICBnX2ZyZWUobG9jYXRpb24pOworfQorCiB2b2lk
IG1lZGlhUGxheWVyUHJpdmF0ZVZvbHVtZUNoYW5nZWRDYWxsYmFjayhHT2JqZWN0ICplbGVtZW50
LCBHUGFyYW1TcGVjICpwc3BlYywgZ3BvaW50ZXIgZGF0YSkKIHsKICAgICBNZWRpYVBsYXllclBy
aXZhdGUqIG1wID0gcmVpbnRlcnByZXRfY2FzdDxNZWRpYVBsYXllclByaXZhdGUqPihkYXRhKTsK
QEAgLTExNSw2ICsxMzksMTIgQEAgZ2Jvb2xlYW4gbm90aWZ5Vm9sdW1lSWRsZUNhbGxiYWNrKE1l
ZGlhUGxheWVyKiBtcCkKICAgICByZXR1cm4gRkFMU0U7CiB9CiAKK2dib29sZWFuIGJ1ZmZlcmlu
Z1RpbWVvdXRDYWxsYmFjayhncG9pbnRlciBkYXRhKQoreworICAgIE1lZGlhUGxheWVyUHJpdmF0
ZSogbXAgPSByZWludGVycHJldF9jYXN0PE1lZGlhUGxheWVyUHJpdmF0ZSo+KGRhdGEpOworICAg
IHJldHVybiBtcC0+cXVlcnlCdWZmZXJpbmdTdGF0cygpOworfQorCiBzdGF0aWMgZmxvYXQgcGxh
eWJhY2tQb3NpdGlvbihHc3RFbGVtZW50KiBwbGF5YmluKQogewogCkBAIC0yMTEsMTIgKzI0MSwy
OSBAQCBNZWRpYVBsYXllclByaXZhdGU6Ok1lZGlhUGxheWVyUHJpdmF0ZShNZWRpYVBsYXllciog
cGxheWVyKQogICAgICwgbV9zZWVraW5nKGZhbHNlKQogICAgICwgbV9lcnJvck9jY3VyZWQoZmFs
c2UpCiAgICAgLCBtX3ZvbHVtZUlkbGVJZCgtMSkKKyAgICAsIG1fbWVkaWFEdXJhdGlvbigwLjAp
CisgICAgLCBtX3N0YXJ0ZWRCdWZmZXJpbmcoZmFsc2UpCisgICAgLCBtX3BsYXlSZXF1aXJlZCh0
cnVlKQorICAgICwgbV9maWxsVGltZW91dElkKDApCisgICAgLCBtX21heFRpbWVMb2FkZWQoMC4w
KQorICAgICwgbV9kb3dubG9hZEZpbGVuYW1lKDApCiB7CiAgICAgZG9Hc3RJbml0KCk7CiB9CiAK
IE1lZGlhUGxheWVyUHJpdmF0ZTo6fk1lZGlhUGxheWVyUHJpdmF0ZSgpCiB7CisgICAgaWYgKG1f
ZG93bmxvYWRGaWxlbmFtZSkgeworICAgICAgICBnX3JlbW92ZShtX2Rvd25sb2FkRmlsZW5hbWUp
OworICAgICAgICBnX2ZyZWUobV9kb3dubG9hZEZpbGVuYW1lKTsKKyAgICAgICAgbV9kb3dubG9h
ZEZpbGVuYW1lID0gMDsKKyAgICB9CisKKyAgICBpZiAobV9maWxsVGltZW91dElkKSB7CisgICAg
ICAgIGdfc291cmNlX3JlbW92ZShtX2ZpbGxUaW1lb3V0SWQpOworICAgICAgICBtX2ZpbGxUaW1l
b3V0SWQgPSAwOworICAgIH0KKwogICAgIGlmIChtX3ZvbHVtZUlkbGVJZCkgewogICAgICAgICBn
X3NvdXJjZV9yZW1vdmUobV92b2x1bWVJZGxlSWQpOwogICAgICAgICBtX3ZvbHVtZUlkbGVJZCA9
IC0xOwpAQCAtMjkwLDYgKzMzNyw5IEBAIGZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZTo6ZHVyYXRp
b24oKSBjb25zdAogICAgIGlmIChtX2Vycm9yT2NjdXJlZCkKICAgICAgICAgcmV0dXJuIDAuMDsK
IAorICAgIGlmIChtX21lZGlhRHVyYXRpb24pCisgICAgICAgIHJldHVybiBtX21lZGlhRHVyYXRp
b247CisKICAgICBHc3RGb3JtYXQgdGltZUZvcm1hdCA9IEdTVF9GT1JNQVRfVElNRTsKICAgICBn
aW50NjQgdGltZUxlbmd0aCA9IDA7CiAKQEAgLTUxNSwxNiArNTY1LDEwMyBAQCBQYXNzUmVmUHRy
PFRpbWVSYW5nZXM+IE1lZGlhUGxheWVyUHJpdmF0ZTo6YnVmZmVyZWQoKSBjb25zdAogICAgIHJl
dHVybiB0aW1lUmFuZ2VzLnJlbGVhc2UoKTsKIH0KIAordm9pZCBNZWRpYVBsYXllclByaXZhdGU6
OnByb2Nlc3NCdWZmZXJpbmdTdGF0cyhHc3RNZXNzYWdlKiBtZXNzYWdlKQoreworICAgIEdzdEJ1
ZmZlcmluZ01vZGUgbW9kZTsKKworICAgIGdzdF9tZXNzYWdlX3BhcnNlX2J1ZmZlcmluZ19zdGF0
cyAobWVzc2FnZSwgJm1vZGUsIE5VTEwsIE5VTEwsIE5VTEwpOworICAgIGlmIChtb2RlICE9IEdT
VF9CVUZGRVJJTkdfRE9XTkxPQUQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9zdGFy
dGVkQnVmZmVyaW5nKSB7CisgICAgICAgIG1fc3RhcnRlZEJ1ZmZlcmluZyA9IHRydWU7CisKKyAg
ICAgICAgaWYgKG1fZmlsbFRpbWVvdXRJZCA+IDApIHsKKyAgICAgICAgICAgIGdfc291cmNlX3Jl
bW92ZShtX2ZpbGxUaW1lb3V0SWQpOworICAgICAgICAgICAgbV9maWxsVGltZW91dElkID0gMDsK
KyAgICAgICAgfQorCisgICAgICAgIG1fZmlsbFRpbWVvdXRJZCA9IGdfdGltZW91dF9hZGQoMjAw
LCAoR1NvdXJjZUZ1bmMpIGJ1ZmZlcmluZ1RpbWVvdXRDYWxsYmFjaywgdGhpcyk7CisgICAgfQor
fQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6cXVlcnlCdWZmZXJpbmdTdGF0cygpCit7Cisg
ICAgR3N0UXVlcnkqIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19idWZmZXJpbmcoR1NUX0ZPUk1BVF9Q
RVJDRU5UKTsKKworICAgIGlmIChnc3RfZWxlbWVudF9xdWVyeShtX3BsYXlCaW4sIHF1ZXJ5KSkg
eworICAgICAgICBnaW50NjQgc3RhcnQsIHN0b3A7CisgICAgICAgIGdkb3VibGUgZmlsbFN0YXR1
czsKKworICAgICAgICBnc3RfcXVlcnlfcGFyc2VfYnVmZmVyaW5nX3JhbmdlKHF1ZXJ5LCAwLCAm
c3RhcnQsICZzdG9wLCAwKTsKKworICAgICAgICBpZiAoc3RvcCAhPSAtMSkKKyAgICAgICAgICAg
IGZpbGxTdGF0dXMgPSAxMDAuMCAqIHN0b3AgLyBHU1RfRk9STUFUX1BFUkNFTlRfTUFYOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBmaWxsU3RhdHVzID0gMTAwLjA7CisKKyAgICAgICAgTE9H
X1ZFUkJPU0UoTWVkaWEsICJEb3dubG9hZCBidWZmZXIgZmlsbGVkIHVwIHRvICVmJSUiLCBmaWxs
U3RhdHVzKTsKKworICAgICAgICAvLyBVcGRhdGUgbWF4VGltZUxvYWRlZCBvbmx5IGlmIHRoZSBt
ZWRpYSBkdXJhdGlvbiBpcworICAgICAgICAvLyBhdmFpbGFibGUuIE90aGVyd2lzZSB3ZSBjYW4n
dCBjb21wdXRlIGl0LgorICAgICAgICBpZiAoIW1fbWVkaWFEdXJhdGlvbikgeworICAgICAgICAg
ICAgZmxvYXQgbmV3RHVyYXRpb24gPSBkdXJhdGlvbigpOworICAgICAgICAgICAgaWYgKCFpc2lu
ZihuZXdEdXJhdGlvbikpIHsKKyAgICAgICAgICAgICAgICBtX21lZGlhRHVyYXRpb24gPSBuZXdE
dXJhdGlvbjsKKyAgICAgICAgICAgICAgICBkdXJhdGlvbkNoYW5nZWQoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX21lZGlhRHVyYXRpb24pIHsKKyAgICAgICAg
ICAgIG1fbWF4VGltZUxvYWRlZCA9IHN0YXRpY19jYXN0PGZsb2F0PigoZmlsbFN0YXR1cyAqIG1f
bWVkaWFEdXJhdGlvbikgLyAxMDAuMCk7CisgICAgICAgICAgICBMT0dfVkVSQk9TRShNZWRpYSwg
IlVwZGF0ZWQgbWF4VGltZUxvYWRlZDogJWYiLCBtX21heFRpbWVMb2FkZWQpOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGZpbGxTdGF0dXMgPT0gMTAwLjApIHsKKyAgICAgICAgICAgIC8vIEJ1
ZmZlcmluZyBpcyBkb25lLCByZW1vdmUgdGhlIGZpbGwgc291cmNlIGZyb20gdGhlIG1haW4gbG9v
cC4KKyAgICAgICAgICAgIG1fZmlsbFRpbWVvdXRJZCA9IDA7CisgICAgICAgICAgICBnc3RfcXVl
cnlfdW5yZWYocXVlcnkpOworCisgICAgICAgICAgICAvLyBNZWRpYSBpcyBub3cgZnVsbHkgbG9h
ZGVkLiBJdCB3aWxsIHBsYXkgZXZlbiBpZiBuZXR3b3JrCisgICAgICAgICAgICAvLyBjb25uZWN0
aW9uIGlzIGN1dC4KKyAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6Okxv
YWRlZDsKKyAgICAgICAgICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CisKKyAg
ICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgoZmlsbFN0
YXR1cyA+IDApICYmIChtX3JlYWR5U3RhdGUgPCBNZWRpYVBsYXllcjo6SGF2ZUZ1dHVyZURhdGEp
KSB7CisgICAgICAgICAgICAvLyBCdWZmZXJpbmcgc3RhcnRlZCwgd2Ugc2hvdWxkIG5vdyBoYXZl
IGVub3VnaCBkYXRhIHRvCisgICAgICAgICAgICAvLyBzdGFydCBwbGF5YmFjayBpZiBpdCB3YXMg
cmVxdWVzdGVkLgorICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVG
dXR1cmVEYXRhOworICAgICAgICAgICAgbV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7Cisg
ICAgICAgICAgICBpZiAobV9wYXVzZWQgJiYgbV9wbGF5UmVxdWlyZWQpIHsKKyAgICAgICAgICAg
ICAgICBtX3BsYXlSZXF1aXJlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50
X3NldF9zdGF0ZShtX3BsYXlCaW4sIEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKworICAgIGdzdF9xdWVyeV91bnJlZihxdWVyeSk7CisgICAgcmV0
dXJuIFRSVUU7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjp1cGRhdGVEb3dubG9hZExv
Y2F0aW9uKGdjaGFyKiBsb2NhdGlvbikKK3sKKyAgICBMT0dfVkVSQk9TRShNZWRpYSwgIkRvd25s
b2FkIGZpbGVuYW1lOiAlcyIsIGxvY2F0aW9uKTsKKyAgICBtX2Rvd25sb2FkRmlsZW5hbWUgPSBs
b2NhdGlvbjsKK30KKwogZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjptYXhUaW1lU2Vla2FibGUo
KSBjb25zdAogewogICAgIGlmIChtX2Vycm9yT2NjdXJlZCkKICAgICAgICAgcmV0dXJuIDAuMDsK
IAotICAgIC8vIFRPRE8KICAgICBMT0dfVkVSQk9TRShNZWRpYSwgIm1heFRpbWVTZWVrYWJsZSIp
OwotICAgIGlmIChtX2lzU3RyZWFtaW5nKQotICAgICAgICByZXR1cm4gbnVtZXJpY19saW1pdHM8
ZmxvYXQ+OjppbmZpbml0eSgpOwogICAgIC8vIGluZmluaXRlIGR1cmF0aW9uIG1lYW5zIGxpdmUg
c3RyZWFtCisgICAgaWYgKGlzaW5mKGR1cmF0aW9uKCkpKQorICAgICAgICByZXR1cm4gMC4wOwor
CiAgICAgcmV0dXJuIG1heFRpbWVMb2FkZWQoKTsKIH0KIApAQCAtNTMzLDI0ICs2NzAsMjQgQEAg
ZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjptYXhUaW1lTG9hZGVkKCkgY29uc3QKICAgICBpZiAo
bV9lcnJvck9jY3VyZWQpCiAgICAgICAgIHJldHVybiAwLjA7CiAKLSAgICAvLyBUT0RPCi0gICAg
TE9HX1ZFUkJPU0UoTWVkaWEsICJtYXhUaW1lTG9hZGVkIik7Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLSAgICByZXR1cm4gZHVyYXRpb24oKTsKKyAgICBmbG9hdCBsb2FkZWQgPSBtX21heFRpbWVM
b2FkZWQ7CisgICAgaWYgKCFsb2FkZWQgJiYgIW1fZmlsbFRpbWVvdXRJZCkKKyAgICAgICAgbG9h
ZGVkID0gZHVyYXRpb24oKTsKKyAgICBMT0dfVkVSQk9TRShNZWRpYSwgIm1heFRpbWVMb2FkZWQ6
ICVmIiwgbG9hZGVkKTsKKyAgICByZXR1cm4gbG9hZGVkOwogfQogCiB1bnNpZ25lZCBNZWRpYVBs
YXllclByaXZhdGU6OmJ5dGVzTG9hZGVkKCkgY29uc3QKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIExPR19WRVJCT1NFKE1lZGlhLCAiYnl0ZXNMb2FkZWQiKTsKLSAgICAvKmlmICghbV9w
bGF5QmluKQorICAgIGlmICghbV9wbGF5QmluKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlm
ICghbV9tZWRpYUR1cmF0aW9uKQogICAgICAgICByZXR1cm4gMDsKLSAgICBmbG9hdCBkdXIgPSBk
dXJhdGlvbigpOwotICAgIGZsb2F0IG1heFRpbWUgPSBtYXhUaW1lTG9hZGVkKCk7Ci0gICAgaWYg
KCFkdXIpCi0gICAgICAgIHJldHVybiAwOyovCiAKLSAgICByZXR1cm4gMTsgLy8gdG90YWxCeXRl
cygpICogbWF4VGltZSAvIGR1cjsKKyAgICB1bnNpZ25lZCBsb2FkZWQgPSB0b3RhbEJ5dGVzKCkg
KiBtYXhUaW1lTG9hZGVkKCkgLyBtX21lZGlhRHVyYXRpb247CisgICAgTE9HX1ZFUkJPU0UoTWVk
aWEsICJieXRlc0xvYWRlZDogJWQiLCBsb2FkZWQpOworICAgIHJldHVybiBsb2FkZWQ7CiB9CiAK
IGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjp0b3RhbEJ5dGVzS25vd24oKSBjb25zdApAQCAtNTYx
LDcgKzY5OCw2IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjp0b3RhbEJ5dGVzS25vd24oKSBj
b25zdAogCiB1bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGU6OnRvdGFsQnl0ZXMoKSBjb25zdAog
ewotICAgIExPR19WRVJCT1NFKE1lZGlhLCAidG90YWxCeXRlcyIpOwogICAgIGlmICghbV9zb3Vy
Y2UpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC01NzEsNiArNzA3LDcgQEAgdW5zaWduZWQgTWVk
aWFQbGF5ZXJQcml2YXRlOjp0b3RhbEJ5dGVzKCkgY29uc3QKICAgICBHc3RGb3JtYXQgZm10ID0g
R1NUX0ZPUk1BVF9CWVRFUzsKICAgICBnaW50NjQgbGVuZ3RoID0gMDsKICAgICBnc3RfZWxlbWVu
dF9xdWVyeV9kdXJhdGlvbihtX3NvdXJjZSwgJmZtdCwgJmxlbmd0aCk7CisgICAgTE9HX1ZFUkJP
U0UoTWVkaWEsICJ0b3RhbEJ5dGVzICUiIEdfR0lOVDY0X0ZPUk1BVCwgbGVuZ3RoKTsKIAogICAg
IHJldHVybiBsZW5ndGg7CiB9CkBAIC02MDUsMjMgKzc0MiwzNyBAQCB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZTo6dXBkYXRlU3RhdGVzKCkKICAgICAgICAgJnN0YXRlLCAmcGVuZGluZywgMjUwICog
R1NUX05TRUNPTkQpOwogCiAgICAgYm9vbCBzaG91bGRVcGRhdGVBZnRlclNlZWsgPSBmYWxzZTsK
KyAgICBib29sIGNvbXBsZXRlbHlMb2FkZWQgPSBtYXhUaW1lTG9hZGVkKCkgPT0gZHVyYXRpb24o
KTsKICAgICBzd2l0Y2ggKHJldCkgewogICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNT
OgogICAgICAgICBMT0dfVkVSQk9TRShNZWRpYSwgIlN0YXRlOiAlcywgcGVuZGluZzogJXMiLAog
ICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoc3RhdGUpLAogICAgICAgICAg
ICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUocGVuZGluZykpOwogCi0gICAgICAgIGlmIChz
dGF0ZSA9PSBHU1RfU1RBVEVfUkVBRFkpCi0gICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRp
YVBsYXllcjo6SGF2ZU5vdGhpbmc7Ci0gICAgICAgIGVsc2UgaWYgKHN0YXRlID09IEdTVF9TVEFU
RV9QQVVTRUQpCi0gICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVu
b3VnaERhdGE7Ci0KICAgICAgICAgaWYgKHN0YXRlID09IEdTVF9TVEFURV9QTEFZSU5HKSB7CiAg
ICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7CiAg
ICAgICAgICAgICBtX3BhdXNlZCA9IGZhbHNlOwotICAgICAgICB9IGVsc2UKKyAgICAgICAgfSBl
bHNlIGlmIChzdGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VEKQogICAgICAgICAgICAgbV9wYXVzZWQg
PSB0cnVlOwogCisgICAgICAgIC8vIElzIG9uLWRpc2sgYnVmZmVyaW5nIGluIHByb2dyZXNzPwor
ICAgICAgICBpZiAobV9maWxsVGltZW91dElkKQorICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUg
PSBNZWRpYVBsYXllcjo6TG9hZGluZzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9uZXR3
b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGVkOworCisgICAgICAgIGlmIChjb21wbGV0ZWx5
TG9hZGVkKSB7CisgICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2Fk
ZWQ7CisgICAgICAgICAgICBpZiAoc3RhdGUgPT0gR1NUX1NUQVRFX1JFQURZKQorICAgICAgICAg
ICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKHN0YXRlID09IEdTVF9TVEFURV9QQVVTRUQpCisgICAgICAgICAgICAgICAg
bV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIGlmIChzdGF0ZSA9PSBHU1RfU1RBVEVfUkVBRFkpCisgICAgICAgICAg
ICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOworICAgICAgICAg
ICAgZWxzZSBpZiAobV9wbGF5UmVxdWlyZWQpCisgICAgICAgICAgICAgICAgbV9yZWFkeVN0YXRl
ID0gY3VycmVudFRpbWUoKSA8IG1heFRpbWVMb2FkZWQoKSA/IE1lZGlhUGxheWVyOjpIYXZlRnV0
dXJlRGF0YSA6IE1lZGlhUGxheWVyOjpIYXZlQ3VycmVudERhdGE7CisKICAgICAgICAgaWYgKG1f
Y2hhbmdpbmdSYXRlKSB7CiAgICAgICAgICAgICBtX3BsYXllci0+cmF0ZUNoYW5nZWQoKTsKICAg
ICAgICAgICAgIG1fY2hhbmdpbmdSYXRlID0gZmFsc2U7CkBAIC02MzIsNyArNzgzLDYgQEAgdm9p
ZCBNZWRpYVBsYXllclByaXZhdGU6OnVwZGF0ZVN0YXRlcygpCiAgICAgICAgICAgICBtX3NlZWtp
bmcgPSBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQ
bGF5ZXI6OkxvYWRlZDsKIAogICAgICAgICBnX29iamVjdF9nZXQobV9wbGF5QmluLCAic291cmNl
IiwgJm1fc291cmNlLCBOVUxMKTsKICAgICAgICAgaWYgKCFtX3NvdXJjZSkKQEAgLTcwOCw2ICs4
NTgsMTQgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmRpZEVuZCgpCiAKIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlOjpkdXJhdGlvbkNoYW5nZWQoKQogeworICAgIC8vIFJlc2V0IGNhY2hlZCBt
ZWRpYSBkdXJhdGlvbgorICAgIG1fbWVkaWFEdXJhdGlvbiA9IDA7CisKKyAgICAvLyBBbmQgcmUt
Y2FjaGUgaXQgaWYgcG9zc2libGUuCisgICAgZmxvYXQgbmV3RHVyYXRpb24gPSBkdXJhdGlvbigp
OworICAgIGlmICghaXNpbmYobmV3RHVyYXRpb24pKQorICAgICAgICBtX21lZGlhRHVyYXRpb24g
PSBuZXdEdXJhdGlvbjsKKwogICAgIG1fcGxheWVyLT5kdXJhdGlvbkNoYW5nZWQoKTsKIH0KIApA
QCAtOTIwLDEyICsxMDc4LDIzIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGVHU1RQ
bGF5QmluKFN0cmluZyB1cmwpCiAgICAgQVNTRVJUKCFtX3BsYXlCaW4pOwogICAgIG1fcGxheUJp
biA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgicGxheWJpbjIiLCAicGxheSIpOwogCisgICAg
R3N0UGxheUZsYWdzIGZsYWdzOworICAgIGdfb2JqZWN0X2dldChtX3BsYXlCaW4sICJmbGFncyIs
ICZmbGFncywgTlVMTCk7CisKICAgICBHc3RCdXMqIGJ1cyA9IGdzdF9waXBlbGluZV9nZXRfYnVz
KEdTVF9QSVBFTElORShtX3BsYXlCaW4pKTsKICAgICBnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2go
YnVzKTsKICAgICBnX3NpZ25hbF9jb25uZWN0KGJ1cywgIm1lc3NhZ2UiLCBHX0NBTExCQUNLKG1l
ZGlhUGxheWVyUHJpdmF0ZU1lc3NhZ2VDYWxsYmFjayksIHRoaXMpOwogICAgIGdzdF9vYmplY3Rf
dW5yZWYoYnVzKTsKIAotICAgIGdfb2JqZWN0X3NldChtX3BsYXlCaW4sICJ1cmkiLCB1cmwudXRm
OCgpLmRhdGEoKSwgTlVMTCk7CisgICAgLy8gQWN0aXZhdGUgb24tZGlzayBidWZmZXJpbmcgYW5k
IGxvYWQgdGhlIG1lZGlhIHVyaS4KKyAgICBnX29iamVjdF9zZXQobV9wbGF5QmluLCAidXJpIiwg
dXJsLnV0ZjgoKS5kYXRhKCksICJmbGFncyIsCisgICAgICAgICAgICAgICAgIGZsYWdzIHwgR1NU
X1BMQVlfRkxBR19ET1dOTE9BRCwgTlVMTCk7CisKKyAgICAvLyB0ZW1wLWxvY2F0aW9uIGlzIGEg
cHJvcGVydHkgb2YgcXVldWUyLiBQbGF5YmluMiB3aWxsCisgICAgLy8gY29uZmlndXJlIGl0IGlm
IHRoZSBtZWRpYSBjYW4gYmUgYnVmZmVyZWQgaW4gZGlzay4KKyAgICBnX3NpZ25hbF9jb25uZWN0
KG1fcGxheUJpbiwgImRlZXAtbm90aWZ5Ojp0ZW1wLWxvY2F0aW9uIiwKKyAgICAgICAgICAgICAg
ICAgICAgIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRlVGVtcExvY2F0aW9uQ2hhbmdlZENh
bGxiYWNrKSwKKyAgICAgICAgICAgICAgICAgICAgIHRoaXMpOwogCiAgICAgZ19zaWduYWxfY29u
bmVjdChtX3BsYXlCaW4sICJub3RpZnk6OnZvbHVtZSIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQ
cml2YXRlVm9sdW1lQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CiAKQEAgLTk0Myw3ICsxMTEyLDcg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmNyZWF0ZUdTVFBsYXlCaW4oU3RyaW5nIHVybCkK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1fZnBzU2luayA9IDA7CiAgICAgICAgICAg
ICBnX29iamVjdF9zZXQobV9wbGF5QmluLCAidmlkZW8tc2luayIsIG1fdmlkZW9TaW5rLCBOVUxM
KTsKLSAgICAgICAgICAgIExPRyhNZWRpYSwgIkNhbid0IGRpc3BsYXkgRlBTIHN0YXRpc3RpY3Ms
IHlvdSBuZWVkIGdzdC1wbHVnaW5zLWJhZCA+PSAwLjEwLjE4Iik7CisgICAgICAgICAgICBMT0df
VkVSQk9TRShNZWRpYSwgIkNhbid0IGRpc3BsYXkgRlBTIHN0YXRpc3RpY3MsIHlvdSBuZWVkIGdz
dC1wbHVnaW5zLWJhZCA+PSAwLjEwLjE4Iik7CiAgICAgICAgIH0KICAgICB9IGVsc2UKICAgICAg
ICAgZ19vYmplY3Rfc2V0KG1fcGxheUJpbiwgInZpZGVvLXNpbmsiLCBtX3ZpZGVvU2luaywgTlVM
TCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCmluZGV4IDQ3MTc5OTkuLmU5MTllOTcgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lci5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lci5oCkBAIC0xMDUsNiArMTA1LDEwIEBAIGNsYXNzIE1lZGlhUGxheWVyUHJp
dmF0ZSA6IHB1YmxpYyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UgewogCiAgICAgICAgICAg
ICBib29sIHN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0OwogCisgICAgICAgICAgICB2b2lkIHBy
b2Nlc3NCdWZmZXJpbmdTdGF0cyhHc3RNZXNzYWdlKiBtZXNzYWdlKTsKKyAgICAgICAgICAgIGJv
b2wgcXVlcnlCdWZmZXJpbmdTdGF0cygpOworICAgICAgICAgICAgdm9pZCB1cGRhdGVEb3dubG9h
ZExvY2F0aW9uKGdjaGFyKik7CisKICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgIE1lZGlh
UGxheWVyUHJpdmF0ZShNZWRpYVBsYXllciopOwogICAgICAgICAgICAgc3RhdGljIE1lZGlhUGxh
eWVyUHJpdmF0ZUludGVyZmFjZSogY3JlYXRlKE1lZGlhUGxheWVyKiBwbGF5ZXIpOwpAQCAtMTQy
LDYgKzE0NiwxMiBAQCBjbGFzcyBNZWRpYVBsYXllclByaXZhdGUgOiBwdWJsaWMgTWVkaWFQbGF5
ZXJQcml2YXRlSW50ZXJmYWNlIHsKICAgICAgICAgICAgIGJvb2wgbV9zZWVraW5nOwogICAgICAg
ICAgICAgYm9vbCBtX2Vycm9yT2NjdXJlZDsKICAgICAgICAgICAgIGd1aW50IG1fdm9sdW1lSWRs
ZUlkOworICAgICAgICAgICAgZmxvYXQgbV9tZWRpYUR1cmF0aW9uOworICAgICAgICAgICAgYm9v
bCBtX3N0YXJ0ZWRCdWZmZXJpbmc7CisgICAgICAgICAgICBib29sIG1fcGxheVJlcXVpcmVkOwor
ICAgICAgICAgICAgZ3VpbnQgbV9maWxsVGltZW91dElkOworICAgICAgICAgICAgZmxvYXQgbV9t
YXhUaW1lTG9hZGVkOworICAgICAgICAgICAgZ2NoYXIqIG1fZG93bmxvYWRGaWxlbmFtZTsKICAg
ICB9OwogfQogCi0tIAoxLjYuMy4z
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46262</attachid>
            <date>2010-01-11 00:27:23 -0800</date>
            <delta_ts>2010-01-25 06:01:24 -0800</delta_ts>
            <desc>initial support for on-disk buffering of videos</desc>
            <filename>initial-support-for-on-disk-buffering-of-videos.patch</filename>
            <type>text/plain</type>
            <size>15782</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSA5ZTA0YTI1M2E3Njc4ZjBlYjA5YWM4YjdlM2E2ZjUwOWQwNDA4MzMzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBUdWUsIDUgSmFuIDIwMTAgMTY6Mjk6NTYgKzAxMDAKU3ViamVjdDogW1BBVENIXSBp
bml0aWFsIHN1cHBvcnQgZm9yIG9uLWRpc2sgYnVmZmVyaW5nIG9mIHZpZGVvcwoKLS0tCiBXZWJD
b3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjkgKysr
CiAuLi4vZ3JhcGhpY3MvZ3RrL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgICB8ICAy
MjQgKysrKysrKysrKysrKysrKystLS0KIC4uLi9ncmFwaGljcy9ndGsvTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyLmggICAgIHwgICAxMCArCiAzIGZpbGVzIGNoYW5nZWQsIDIzNSBpbnNlcnRp
b25zKCspLCAyOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBi
L1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDY4Mjc0MDguLjgzNzQ1ODAgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAK
KzIwMTAtMDEtMDcgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHU3RyZWFtZXJd
IFNob3VsZCBoYW5kbGUgQlVGRkVSSU5HIG1lc3NhZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMDAwNAorCisgICAgICAgIEluaXRpYWwgc3VwcG9y
dCBmb3Igb24tZGlzayBidWZmZXJpbmcgb2YgdmlkZW9zLiBUaGlzIHdvcmtzIG9ubHkKKyAgICAg
ICAgZm9yIFF1aWNrdGltZSBhbmQgZmx2IHRob3VnaC4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2d0ay9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6bWVkaWFQbGF5ZXJQcml2YXRlTWVzc2FnZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6Om1lZGlhUGxheWVyUHJpdmF0ZVRlbXBMb2NhdGlvbkNoYW5nZWRDYWxsYmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpidWZmZXJpbmdUaW1lb3V0Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpNZWRpYVBsYXllclByaXZhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjp+TWVkaWFQbGF5ZXJQcml2YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6ZHVyYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpwcm9jZXNzQnVmZmVyaW5nU3RhdHMpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpxdWVyeUJ1ZmZlcmluZ1N0YXRzKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6dXBkYXRlRG93bmxvYWRMb2NhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6Om1heFRpbWVTZWVrYWJsZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6Om1heFRpbWVMb2FkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpieXRlc0xvYWRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnRvdGFsQnl0ZXMpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjp1cGRhdGVTdGF0ZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpkdXJhdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGVHU1RQbGF5QmluKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9ndGsvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmg6CisKIDIw
MTAtMDEtMDcgIE1pa2UgQmVsc2hlICA8bWJlbHNoZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2d0ay9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ndGsvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAppbmRleCAw
OTg0YTQ2Li42ZmFmNDY2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0
ay9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKQEAgLTQwLDYgKzQw
LDcgQEAKICNpbmNsdWRlICJWaWRlb1NpbmtHU3RyZWFtZXIuaCIKICNpbmNsdWRlICJXaWRnZXQu
aCIKIAorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CiAjaW5jbHVkZSA8Z3N0L2dzdC5oPgogI2lu
Y2x1ZGUgPGdzdC9pbnRlcmZhY2VzL21peGVyLmg+CiAjaW5jbHVkZSA8Z3N0L2ludGVyZmFjZXMv
eG92ZXJsYXkuaD4KQEAgLTQ4LDYgKzQ5LDE4IEBACiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1
ZGUgPHd0Zi9ndGsvR093blB0ci5oPgogCisvLyBHc3RQbGF5RmxhZ3MgZmxhZ3MgZnJvbSBwbGF5
YmluMgordHlwZWRlZiBlbnVtIHsKKyAgICBHU1RfUExBWV9GTEFHX1ZJREVPICAgICAgICAgPSAw
eDAxLAorICAgIEdTVF9QTEFZX0ZMQUdfQVVESU8gICAgICAgICA9IDB4MDIsCisgICAgR1NUX1BM
QVlfRkxBR19URVhUICAgICAgICAgID0gMHgwNCwKKyAgICBHU1RfUExBWV9GTEFHX1ZJUyAgICAg
ICAgICAgPSAweDA4LAorICAgIEdTVF9QTEFZX0ZMQUdfU09GVF9WT0xVTUUgICA9IDB4MTAsCisg
ICAgR1NUX1BMQVlfRkxBR19OQVRJVkVfQVVESU8gID0gMHgyMCwKKyAgICBHU1RfUExBWV9GTEFH
X05BVElWRV9WSURFTyAgPSAweDQwLAorICAgIEdTVF9QTEFZX0ZMQUdfRE9XTkxPQUQgICAgICA9
IDB4ODAKK30gR3N0UGxheUZsYWdzOworCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC01OCw3ICs3MSw2IEBAIGdib29sZWFuIG1lZGlhUGxheWVyUHJpdmF0
ZU1lc3NhZ2VDYWxsYmFjayhHc3RCdXMqIGJ1cywgR3N0TWVzc2FnZSogbWVzc2FnZSwgZ3BvCiAg
ICAgR093blB0cjxnY2hhcj4gZGVidWc7CiAgICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBl
cnJvcjsKICAgICBNZWRpYVBsYXllclByaXZhdGUqIG1wID0gcmVpbnRlcnByZXRfY2FzdDxNZWRp
YVBsYXllclByaXZhdGUqPihkYXRhKTsKLSAgICBnaW50IHBlcmNlbnQgPSAwOwogCiAgICAgc3dp
dGNoIChHU1RfTUVTU0FHRV9UWVBFKG1lc3NhZ2UpKSB7CiAgICAgY2FzZSBHU1RfTUVTU0FHRV9F
UlJPUjoKQEAgLTg4LDggKzEwMCw3IEBAIGdib29sZWFuIG1lZGlhUGxheWVyUHJpdmF0ZU1lc3Nh
Z2VDYWxsYmFjayhHc3RCdXMqIGJ1cywgR3N0TWVzc2FnZSogbWVzc2FnZSwgZ3BvCiAgICAgICAg
IG1wLT51cGRhdGVTdGF0ZXMoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHU1RfTUVTU0FH
RV9CVUZGRVJJTkc6Ci0gICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2J1ZmZlcmluZyhtZXNzYWdl
LCAmcGVyY2VudCk7Ci0gICAgICAgIExPR19WRVJCT1NFKE1lZGlhLCAiQnVmZmVyaW5nICVkIiwg
cGVyY2VudCk7CisgICAgICAgIG1wLT5wcm9jZXNzQnVmZmVyaW5nU3RhdHMobWVzc2FnZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgR1NUX01FU1NBR0VfRFVSQVRJT046CiAgICAgICAgIExP
R19WRVJCT1NFKE1lZGlhLCAiRHVyYXRpb24gY2hhbmdlZCIpOwpAQCAtMTAzLDYgKzExNCwxOSBA
QCBnYm9vbGVhbiBtZWRpYVBsYXllclByaXZhdGVNZXNzYWdlQ2FsbGJhY2soR3N0QnVzKiBidXMs
IEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIGdwbwogICAgIHJldHVybiB0cnVlOwogfQogCit2b2lkIG1l
ZGlhUGxheWVyUHJpdmF0ZVRlbXBMb2NhdGlvbkNoYW5nZWRDYWxsYmFjayhHc3RPYmplY3QqIHBs
YXlCaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHc3RPYmplY3QqIHF1ZXVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR1BhcmFtU3BlYyogcHJvcGVydHksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciBkYXRhKQoreworICAgIGdj
aGFyKiBsb2NhdGlvbjsKKyAgICBNZWRpYVBsYXllclByaXZhdGUqIG1wID0gcmVpbnRlcnByZXRf
Y2FzdDxNZWRpYVBsYXllclByaXZhdGUqPihkYXRhKTsKKworICAgIGdfb2JqZWN0X2dldChxdWV1
ZSwgInRlbXAtbG9jYXRpb24iLCAmbG9jYXRpb24sIE5VTEwpOworICAgIG1wLT51cGRhdGVEb3du
bG9hZExvY2F0aW9uKGxvY2F0aW9uKTsKKyAgICBnX2ZyZWUobG9jYXRpb24pOworfQorCiB2b2lk
IG1lZGlhUGxheWVyUHJpdmF0ZVZvbHVtZUNoYW5nZWRDYWxsYmFjayhHT2JqZWN0ICplbGVtZW50
LCBHUGFyYW1TcGVjICpwc3BlYywgZ3BvaW50ZXIgZGF0YSkKIHsKICAgICBNZWRpYVBsYXllclBy
aXZhdGUqIG1wID0gcmVpbnRlcnByZXRfY2FzdDxNZWRpYVBsYXllclByaXZhdGUqPihkYXRhKTsK
QEAgLTExNSw2ICsxMzksMTIgQEAgZ2Jvb2xlYW4gbm90aWZ5Vm9sdW1lSWRsZUNhbGxiYWNrKE1l
ZGlhUGxheWVyKiBtcCkKICAgICByZXR1cm4gRkFMU0U7CiB9CiAKK2dib29sZWFuIGJ1ZmZlcmlu
Z1RpbWVvdXRDYWxsYmFjayhncG9pbnRlciBkYXRhKQoreworICAgIE1lZGlhUGxheWVyUHJpdmF0
ZSogbXAgPSByZWludGVycHJldF9jYXN0PE1lZGlhUGxheWVyUHJpdmF0ZSo+KGRhdGEpOworICAg
IHJldHVybiBtcC0+cXVlcnlCdWZmZXJpbmdTdGF0cygpOworfQorCiBzdGF0aWMgZmxvYXQgcGxh
eWJhY2tQb3NpdGlvbihHc3RFbGVtZW50KiBwbGF5YmluKQogewogCkBAIC0yMTEsMTIgKzI0MSwy
OSBAQCBNZWRpYVBsYXllclByaXZhdGU6Ok1lZGlhUGxheWVyUHJpdmF0ZShNZWRpYVBsYXllciog
cGxheWVyKQogICAgICwgbV9zZWVraW5nKGZhbHNlKQogICAgICwgbV9lcnJvck9jY3VyZWQoZmFs
c2UpCiAgICAgLCBtX3ZvbHVtZUlkbGVJZCgtMSkKKyAgICAsIG1fbWVkaWFEdXJhdGlvbigwLjAp
CisgICAgLCBtX3N0YXJ0ZWRCdWZmZXJpbmcoZmFsc2UpCisgICAgLCBtX3BsYXlSZXF1aXJlZCh0
cnVlKQorICAgICwgbV9maWxsVGltZW91dElkKDApCisgICAgLCBtX21heFRpbWVMb2FkZWQoMC4w
KQorICAgICwgbV9kb3dubG9hZEZpbGVuYW1lKDApCiB7CiAgICAgZG9Hc3RJbml0KCk7CiB9CiAK
IE1lZGlhUGxheWVyUHJpdmF0ZTo6fk1lZGlhUGxheWVyUHJpdmF0ZSgpCiB7CisgICAgaWYgKG1f
ZG93bmxvYWRGaWxlbmFtZSkgeworICAgICAgICBnX3JlbW92ZShtX2Rvd25sb2FkRmlsZW5hbWUp
OworICAgICAgICBnX2ZyZWUobV9kb3dubG9hZEZpbGVuYW1lKTsKKyAgICAgICAgbV9kb3dubG9h
ZEZpbGVuYW1lID0gMDsKKyAgICB9CisKKyAgICBpZiAobV9maWxsVGltZW91dElkKSB7CisgICAg
ICAgIGdfc291cmNlX3JlbW92ZShtX2ZpbGxUaW1lb3V0SWQpOworICAgICAgICBtX2ZpbGxUaW1l
b3V0SWQgPSAwOworICAgIH0KKwogICAgIGlmIChtX3ZvbHVtZUlkbGVJZCkgewogICAgICAgICBn
X3NvdXJjZV9yZW1vdmUobV92b2x1bWVJZGxlSWQpOwogICAgICAgICBtX3ZvbHVtZUlkbGVJZCA9
IC0xOwpAQCAtMjkwLDYgKzMzNyw5IEBAIGZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZTo6ZHVyYXRp
b24oKSBjb25zdAogICAgIGlmIChtX2Vycm9yT2NjdXJlZCkKICAgICAgICAgcmV0dXJuIDAuMDsK
IAorICAgIGlmIChtX21lZGlhRHVyYXRpb24pCisgICAgICAgIHJldHVybiBtX21lZGlhRHVyYXRp
b247CisKICAgICBHc3RGb3JtYXQgdGltZUZvcm1hdCA9IEdTVF9GT1JNQVRfVElNRTsKICAgICBn
aW50NjQgdGltZUxlbmd0aCA9IDA7CiAKQEAgLTUxNSwxNiArNTY1LDEwMyBAQCBQYXNzUmVmUHRy
PFRpbWVSYW5nZXM+IE1lZGlhUGxheWVyUHJpdmF0ZTo6YnVmZmVyZWQoKSBjb25zdAogICAgIHJl
dHVybiB0aW1lUmFuZ2VzLnJlbGVhc2UoKTsKIH0KIAordm9pZCBNZWRpYVBsYXllclByaXZhdGU6
OnByb2Nlc3NCdWZmZXJpbmdTdGF0cyhHc3RNZXNzYWdlKiBtZXNzYWdlKQoreworICAgIEdzdEJ1
ZmZlcmluZ01vZGUgbW9kZTsKKworICAgIGdzdF9tZXNzYWdlX3BhcnNlX2J1ZmZlcmluZ19zdGF0
cyhtZXNzYWdlLCAmbW9kZSwgMCwgMCwgMCk7CisgICAgaWYgKG1vZGUgIT0gR1NUX0JVRkZFUklO
R19ET1dOTE9BRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3N0YXJ0ZWRCdWZmZXJp
bmcpIHsKKyAgICAgICAgbV9zdGFydGVkQnVmZmVyaW5nID0gdHJ1ZTsKKworICAgICAgICBpZiAo
bV9maWxsVGltZW91dElkID4gMCkgeworICAgICAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1fZmls
bFRpbWVvdXRJZCk7CisgICAgICAgICAgICBtX2ZpbGxUaW1lb3V0SWQgPSAwOworICAgICAgICB9
CisKKyAgICAgICAgbV9maWxsVGltZW91dElkID0gZ190aW1lb3V0X2FkZCgyMDAsIChHU291cmNl
RnVuYykgYnVmZmVyaW5nVGltZW91dENhbGxiYWNrLCB0aGlzKTsKKyAgICB9Cit9CisKK2Jvb2wg
TWVkaWFQbGF5ZXJQcml2YXRlOjpxdWVyeUJ1ZmZlcmluZ1N0YXRzKCkKK3sKKyAgICBHc3RRdWVy
eSogcXVlcnkgPSBnc3RfcXVlcnlfbmV3X2J1ZmZlcmluZyhHU1RfRk9STUFUX1BFUkNFTlQpOwor
CisgICAgaWYgKGdzdF9lbGVtZW50X3F1ZXJ5KG1fcGxheUJpbiwgcXVlcnkpKSB7CisgICAgICAg
IGdpbnQ2NCBzdGFydCwgc3RvcDsKKyAgICAgICAgZ2RvdWJsZSBmaWxsU3RhdHVzOworCisgICAg
ICAgIGdzdF9xdWVyeV9wYXJzZV9idWZmZXJpbmdfcmFuZ2UocXVlcnksIDAsICZzdGFydCwgJnN0
b3AsIDApOworCisgICAgICAgIGlmIChzdG9wICE9IC0xKQorICAgICAgICAgICAgZmlsbFN0YXR1
cyA9IDEwMC4wICogc3RvcCAvIEdTVF9GT1JNQVRfUEVSQ0VOVF9NQVg7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGZpbGxTdGF0dXMgPSAxMDAuMDsKKworICAgICAgICBMT0dfVkVSQk9TRShN
ZWRpYSwgIkRvd25sb2FkIGJ1ZmZlciBmaWxsZWQgdXAgdG8gJWYlJSIsIGZpbGxTdGF0dXMpOwor
CisgICAgICAgIC8vIFVwZGF0ZSBtYXhUaW1lTG9hZGVkIG9ubHkgaWYgdGhlIG1lZGlhIGR1cmF0
aW9uIGlzCisgICAgICAgIC8vIGF2YWlsYWJsZS4gT3RoZXJ3aXNlIHdlIGNhbid0IGNvbXB1dGUg
aXQuCisgICAgICAgIGlmICghbV9tZWRpYUR1cmF0aW9uKSB7CisgICAgICAgICAgICBmbG9hdCBu
ZXdEdXJhdGlvbiA9IGR1cmF0aW9uKCk7CisgICAgICAgICAgICBpZiAoIWlzaW5mKG5ld0R1cmF0
aW9uKSkgeworICAgICAgICAgICAgICAgIG1fbWVkaWFEdXJhdGlvbiA9IG5ld0R1cmF0aW9uOwor
ICAgICAgICAgICAgICAgIGR1cmF0aW9uQ2hhbmdlZCgpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgaWYgKG1fbWVkaWFEdXJhdGlvbikgeworICAgICAgICAgICAgbV9tYXhU
aW1lTG9hZGVkID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KChmaWxsU3RhdHVzICogbV9tZWRpYUR1cmF0
aW9uKSAvIDEwMC4wKTsKKyAgICAgICAgICAgIExPR19WRVJCT1NFKE1lZGlhLCAiVXBkYXRlZCBt
YXhUaW1lTG9hZGVkOiAlZiIsIG1fbWF4VGltZUxvYWRlZCk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoZmlsbFN0YXR1cyA9PSAxMDAuMCkgeworICAgICAgICAgICAgLy8gQnVmZmVyaW5nIGlz
IGRvbmUsIHJlbW92ZSB0aGUgZmlsbCBzb3VyY2UgZnJvbSB0aGUgbWFpbiBsb29wLgorICAgICAg
ICAgICAgbV9maWxsVGltZW91dElkID0gMDsKKyAgICAgICAgICAgIGdzdF9xdWVyeV91bnJlZihx
dWVyeSk7CisKKyAgICAgICAgICAgIC8vIE1lZGlhIGlzIG5vdyBmdWxseSBsb2FkZWQuIEl0IHdp
bGwgcGxheSBldmVuIGlmIG5ldHdvcmsKKyAgICAgICAgICAgIC8vIGNvbm5lY3Rpb24gaXMgY3V0
LgorICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGVkOworICAg
ICAgICAgICAgbV9wbGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsKKworICAgICAgICAgICAg
cmV0dXJuIEZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChmaWxsU3RhdHVzID4gMCkg
JiYgKG1fcmVhZHlTdGF0ZSA8IE1lZGlhUGxheWVyOjpIYXZlRnV0dXJlRGF0YSkpIHsKKyAgICAg
ICAgICAgIC8vIEJ1ZmZlcmluZyBzdGFydGVkLCB3ZSBzaG91bGQgbm93IGhhdmUgZW5vdWdoIGRh
dGEgdG8KKyAgICAgICAgICAgIC8vIHN0YXJ0IHBsYXliYWNrIGlmIGl0IHdhcyByZXF1ZXN0ZWQu
CisgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUZ1dHVyZURhdGE7
CisgICAgICAgICAgICBtX3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKKyAgICAgICAgICAg
IGlmIChtX3BhdXNlZCAmJiBtX3BsYXlSZXF1aXJlZCkgeworICAgICAgICAgICAgICAgIG1fcGxh
eVJlcXVpcmVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRl
KG1fcGxheUJpbiwgR1NUX1NUQVRFX1BMQVlJTkcpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorCisgICAgZ3N0X3F1ZXJ5X3VucmVmKHF1ZXJ5KTsKKyAgICByZXR1cm4gVFJVRTsK
K30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnVwZGF0ZURvd25sb2FkTG9jYXRpb24oZ2No
YXIqIGxvY2F0aW9uKQoreworICAgIExPR19WRVJCT1NFKE1lZGlhLCAiRG93bmxvYWQgZmlsZW5h
bWU6ICVzIiwgbG9jYXRpb24pOworICAgIG1fZG93bmxvYWRGaWxlbmFtZSA9IGxvY2F0aW9uOwor
fQorCiBmbG9hdCBNZWRpYVBsYXllclByaXZhdGU6Om1heFRpbWVTZWVrYWJsZSgpIGNvbnN0CiB7
CiAgICAgaWYgKG1fZXJyb3JPY2N1cmVkKQogICAgICAgICByZXR1cm4gMC4wOwogCi0gICAgLy8g
VE9ETwogICAgIExPR19WRVJCT1NFKE1lZGlhLCAibWF4VGltZVNlZWthYmxlIik7Ci0gICAgaWYg
KG1faXNTdHJlYW1pbmcpCi0gICAgICAgIHJldHVybiBudW1lcmljX2xpbWl0czxmbG9hdD46Omlu
ZmluaXR5KCk7CiAgICAgLy8gaW5maW5pdGUgZHVyYXRpb24gbWVhbnMgbGl2ZSBzdHJlYW0KKyAg
ICBpZiAoaXNpbmYoZHVyYXRpb24oKSkpCisgICAgICAgIHJldHVybiAwLjA7CisKICAgICByZXR1
cm4gbWF4VGltZUxvYWRlZCgpOwogfQogCkBAIC01MzMsMjQgKzY3MCwyNCBAQCBmbG9hdCBNZWRp
YVBsYXllclByaXZhdGU6Om1heFRpbWVMb2FkZWQoKSBjb25zdAogICAgIGlmIChtX2Vycm9yT2Nj
dXJlZCkKICAgICAgICAgcmV0dXJuIDAuMDsKIAotICAgIC8vIFRPRE8KLSAgICBMT0dfVkVSQk9T
RShNZWRpYSwgIm1heFRpbWVMb2FkZWQiKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiBkdXJhdGlvbigpOworICAgIGZsb2F0IGxvYWRlZCA9IG1fbWF4VGltZUxvYWRlZDsKKyAg
ICBpZiAoIWxvYWRlZCAmJiAhbV9maWxsVGltZW91dElkKQorICAgICAgICBsb2FkZWQgPSBkdXJh
dGlvbigpOworICAgIExPR19WRVJCT1NFKE1lZGlhLCAibWF4VGltZUxvYWRlZDogJWYiLCBsb2Fk
ZWQpOworICAgIHJldHVybiBsb2FkZWQ7CiB9CiAKIHVuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0
ZTo6Ynl0ZXNMb2FkZWQoKSBjb25zdAogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgTE9H
X1ZFUkJPU0UoTWVkaWEsICJieXRlc0xvYWRlZCIpOwotICAgIC8qaWYgKCFtX3BsYXlCaW4pCisg
ICAgaWYgKCFtX3BsYXlCaW4pCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCFtX21lZGlh
RHVyYXRpb24pCiAgICAgICAgIHJldHVybiAwOwotICAgIGZsb2F0IGR1ciA9IGR1cmF0aW9uKCk7
Ci0gICAgZmxvYXQgbWF4VGltZSA9IG1heFRpbWVMb2FkZWQoKTsKLSAgICBpZiAoIWR1cikKLSAg
ICAgICAgcmV0dXJuIDA7Ki8KIAotICAgIHJldHVybiAxOyAvLyB0b3RhbEJ5dGVzKCkgKiBtYXhU
aW1lIC8gZHVyOworICAgIHVuc2lnbmVkIGxvYWRlZCA9IHRvdGFsQnl0ZXMoKSAqIG1heFRpbWVM
b2FkZWQoKSAvIG1fbWVkaWFEdXJhdGlvbjsKKyAgICBMT0dfVkVSQk9TRShNZWRpYSwgImJ5dGVz
TG9hZGVkOiAlZCIsIGxvYWRlZCk7CisgICAgcmV0dXJuIGxvYWRlZDsKIH0KIAogYm9vbCBNZWRp
YVBsYXllclByaXZhdGU6OnRvdGFsQnl0ZXNLbm93bigpIGNvbnN0CkBAIC01NjEsNyArNjk4LDYg
QEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGU6OnRvdGFsQnl0ZXNLbm93bigpIGNvbnN0CiAKIHVu
c2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZTo6dG90YWxCeXRlcygpIGNvbnN0CiB7Ci0gICAgTE9H
X1ZFUkJPU0UoTWVkaWEsICJ0b3RhbEJ5dGVzIik7CiAgICAgaWYgKCFtX3NvdXJjZSkKICAgICAg
ICAgcmV0dXJuIDA7CiAKQEAgLTU3MSw2ICs3MDcsNyBAQCB1bnNpZ25lZCBNZWRpYVBsYXllclBy
aXZhdGU6OnRvdGFsQnl0ZXMoKSBjb25zdAogICAgIEdzdEZvcm1hdCBmbXQgPSBHU1RfRk9STUFU
X0JZVEVTOwogICAgIGdpbnQ2NCBsZW5ndGggPSAwOwogICAgIGdzdF9lbGVtZW50X3F1ZXJ5X2R1
cmF0aW9uKG1fc291cmNlLCAmZm10LCAmbGVuZ3RoKTsKKyAgICBMT0dfVkVSQk9TRShNZWRpYSwg
InRvdGFsQnl0ZXMgJSIgR19HSU5UNjRfRk9STUFULCBsZW5ndGgpOwogCiAgICAgcmV0dXJuIGxl
bmd0aDsKIH0KQEAgLTYwNSwyMyArNzQyLDM3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjp1
cGRhdGVTdGF0ZXMoKQogICAgICAgICAmc3RhdGUsICZwZW5kaW5nLCAyNTAgKiBHU1RfTlNFQ09O
RCk7CiAKICAgICBib29sIHNob3VsZFVwZGF0ZUFmdGVyU2VlayA9IGZhbHNlOworICAgIGJvb2wg
Y29tcGxldGVseUxvYWRlZCA9IG1heFRpbWVMb2FkZWQoKSA9PSBkdXJhdGlvbigpOwogICAgIHN3
aXRjaCAocmV0KSB7CiAgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M6CiAgICAgICAg
IExPR19WRVJCT1NFKE1lZGlhLCAiU3RhdGU6ICVzLCBwZW5kaW5nOiAlcyIsCiAgICAgICAgICAg
ICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShzdGF0ZSksCiAgICAgICAgICAgICBnc3RfZWxl
bWVudF9zdGF0ZV9nZXRfbmFtZShwZW5kaW5nKSk7CiAKLSAgICAgICAgaWYgKHN0YXRlID09IEdT
VF9TVEFURV9SRUFEWSkKLSAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpI
YXZlTm90aGluZzsKLSAgICAgICAgZWxzZSBpZiAoc3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRCkK
LSAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlRW5vdWdoRGF0YTsK
LQogICAgICAgICBpZiAoc3RhdGUgPT0gR1NUX1NUQVRFX1BMQVlJTkcpIHsKICAgICAgICAgICAg
IG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlRW5vdWdoRGF0YTsKICAgICAgICAgICAg
IG1fcGF1c2VkID0gZmFsc2U7Ci0gICAgICAgIH0gZWxzZQorICAgICAgICB9IGVsc2UgaWYgKHN0
YXRlID09IEdTVF9TVEFURV9QQVVTRUQpCiAgICAgICAgICAgICBtX3BhdXNlZCA9IHRydWU7CiAK
KyAgICAgICAgLy8gSXMgb24tZGlzayBidWZmZXJpbmcgaW4gcHJvZ3Jlc3M/CisgICAgICAgIGlm
IChtX2ZpbGxUaW1lb3V0SWQpCisgICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxh
eWVyOjpMb2FkaW5nOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9
IE1lZGlhUGxheWVyOjpMb2FkZWQ7CisKKyAgICAgICAgaWYgKGNvbXBsZXRlbHlMb2FkZWQpIHsK
KyAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRlZDsKKyAgICAg
ICAgICAgIGlmIChzdGF0ZSA9PSBHU1RfU1RBVEVfUkVBRFkpCisgICAgICAgICAgICAgICAgbV9y
ZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOworICAgICAgICAgICAgZWxzZSBp
ZiAoc3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRCkKKyAgICAgICAgICAgICAgICBtX3JlYWR5U3Rh
dGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgaWYgKHN0YXRlID09IEdTVF9TVEFURV9SRUFEWSkKKyAgICAgICAgICAgICAgICBtX3Jl
YWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7CisgICAgICAgICAgICBlbHNlIGlm
IChtX3BsYXlSZXF1aXJlZCkKKyAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBjdXJyZW50
VGltZSgpIDwgbWF4VGltZUxvYWRlZCgpID8gTWVkaWFQbGF5ZXI6OkhhdmVGdXR1cmVEYXRhIDog
TWVkaWFQbGF5ZXI6OkhhdmVDdXJyZW50RGF0YTsKKwogICAgICAgICBpZiAobV9jaGFuZ2luZ1Jh
dGUpIHsKICAgICAgICAgICAgIG1fcGxheWVyLT5yYXRlQ2hhbmdlZCgpOwogICAgICAgICAgICAg
bV9jaGFuZ2luZ1JhdGUgPSBmYWxzZTsKQEAgLTYzMiw3ICs3ODMsNiBAQCB2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZTo6dXBkYXRlU3RhdGVzKCkKICAgICAgICAgICAgIG1fc2Vla2luZyA9IGZhbHNl
OwogICAgICAgICB9CiAKLSAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9h
ZGVkOwogCiAgICAgICAgIGdfb2JqZWN0X2dldChtX3BsYXlCaW4sICJzb3VyY2UiLCAmbV9zb3Vy
Y2UsIE5VTEwpOwogICAgICAgICBpZiAoIW1fc291cmNlKQpAQCAtNzA4LDYgKzg1OCwxNCBAQCB2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6ZGlkRW5kKCkKIAogdm9pZCBNZWRpYVBsYXllclByaXZh
dGU6OmR1cmF0aW9uQ2hhbmdlZCgpCiB7CisgICAgLy8gUmVzZXQgY2FjaGVkIG1lZGlhIGR1cmF0
aW9uCisgICAgbV9tZWRpYUR1cmF0aW9uID0gMDsKKworICAgIC8vIEFuZCByZS1jYWNoZSBpdCBp
ZiBwb3NzaWJsZS4KKyAgICBmbG9hdCBuZXdEdXJhdGlvbiA9IGR1cmF0aW9uKCk7CisgICAgaWYg
KCFpc2luZihuZXdEdXJhdGlvbikpCisgICAgICAgIG1fbWVkaWFEdXJhdGlvbiA9IG5ld0R1cmF0
aW9uOworCiAgICAgbV9wbGF5ZXItPmR1cmF0aW9uQ2hhbmdlZCgpOwogfQogCkBAIC05MjAsMTIg
KzEwNzgsMjIgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmNyZWF0ZUdTVFBsYXlCaW4oU3Ry
aW5nIHVybCkKICAgICBBU1NFUlQoIW1fcGxheUJpbik7CiAgICAgbV9wbGF5QmluID0gZ3N0X2Vs
ZW1lbnRfZmFjdG9yeV9tYWtlKCJwbGF5YmluMiIsICJwbGF5Iik7CiAKKyAgICBHc3RQbGF5Rmxh
Z3MgZmxhZ3M7CisgICAgZ19vYmplY3RfZ2V0KG1fcGxheUJpbiwgImZsYWdzIiwgJmZsYWdzLCBO
VUxMKTsKKwogICAgIEdzdEJ1cyogYnVzID0gZ3N0X3BpcGVsaW5lX2dldF9idXMoR1NUX1BJUEVM
SU5FKG1fcGxheUJpbikpOwogICAgIGdzdF9idXNfYWRkX3NpZ25hbF93YXRjaChidXMpOwogICAg
IGdfc2lnbmFsX2Nvbm5lY3QoYnVzLCAibWVzc2FnZSIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQ
cml2YXRlTWVzc2FnZUNhbGxiYWNrKSwgdGhpcyk7CiAgICAgZ3N0X29iamVjdF91bnJlZihidXMp
OwogCi0gICAgZ19vYmplY3Rfc2V0KG1fcGxheUJpbiwgInVyaSIsIHVybC51dGY4KCkuZGF0YSgp
LCBOVUxMKTsKKyAgICAvLyBBY3RpdmF0ZSBvbi1kaXNrIGJ1ZmZlcmluZyBhbmQgbG9hZCB0aGUg
bWVkaWEgdXJpLgorICAgIGdfb2JqZWN0X3NldChtX3BsYXlCaW4sICJ1cmkiLCB1cmwudXRmOCgp
LmRhdGEoKSwgImZsYWdzIiwgZmxhZ3MgfCBHU1RfUExBWV9GTEFHX0RPV05MT0FELCBOVUxMKTsK
KworICAgIC8vIHRlbXAtbG9jYXRpb24gaXMgYSBwcm9wZXJ0eSBvZiBxdWV1ZTIuIFBsYXliaW4y
IHdpbGwKKyAgICAvLyBjb25maWd1cmUgaXQgaWYgdGhlIG1lZGlhIGNhbiBiZSBidWZmZXJlZCBp
biBkaXNrLgorICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9wbGF5QmluLCAiZGVlcC1ub3RpZnk6OnRl
bXAtbG9jYXRpb24iLAorICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhtZWRpYVBsYXll
clByaXZhdGVUZW1wTG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2spLAorICAgICAgICAgICAgICAgICAg
ICAgdGhpcyk7CiAKICAgICBnX3NpZ25hbF9jb25uZWN0KG1fcGxheUJpbiwgIm5vdGlmeTo6dm9s
dW1lIiwgR19DQUxMQkFDSyhtZWRpYVBsYXllclByaXZhdGVWb2x1bWVDaGFuZ2VkQ2FsbGJhY2sp
LCB0aGlzKTsKIApAQCAtOTQzLDcgKzExMTEsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6
Y3JlYXRlR1NUUGxheUJpbihTdHJpbmcgdXJsKQogICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgbV9mcHNTaW5rID0gMDsKICAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX3BsYXlCaW4sICJ2
aWRlby1zaW5rIiwgbV92aWRlb1NpbmssIE5VTEwpOwotICAgICAgICAgICAgTE9HKE1lZGlhLCAi
Q2FuJ3QgZGlzcGxheSBGUFMgc3RhdGlzdGljcywgeW91IG5lZWQgZ3N0LXBsdWdpbnMtYmFkID49
IDAuMTAuMTgiKTsKKyAgICAgICAgICAgIExPR19WRVJCT1NFKE1lZGlhLCAiQ2FuJ3QgZGlzcGxh
eSBGUFMgc3RhdGlzdGljcywgeW91IG5lZWQgZ3N0LXBsdWdpbnMtYmFkID49IDAuMTAuMTgiKTsK
ICAgICAgICAgfQogICAgIH0gZWxzZQogICAgICAgICBnX29iamVjdF9zZXQobV9wbGF5QmluLCAi
dmlkZW8tc2luayIsIG1fdmlkZW9TaW5rLCBOVUxMKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKaW5k
ZXggNDcxNzk5OS4uZTkxOWU5NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ndGsvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKQEAgLTEwNSw2ICsx
MDUsMTAgQEAgY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlIDogcHVibGljIE1lZGlhUGxheWVyUHJp
dmF0ZUludGVyZmFjZSB7CiAKICAgICAgICAgICAgIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuKCkg
Y29uc3Q7CiAKKyAgICAgICAgICAgIHZvaWQgcHJvY2Vzc0J1ZmZlcmluZ1N0YXRzKEdzdE1lc3Nh
Z2UqIG1lc3NhZ2UpOworICAgICAgICAgICAgYm9vbCBxdWVyeUJ1ZmZlcmluZ1N0YXRzKCk7Cisg
ICAgICAgICAgICB2b2lkIHVwZGF0ZURvd25sb2FkTG9jYXRpb24oZ2NoYXIqKTsKKwogICAgICAg
ICBwcml2YXRlOgogICAgICAgICAgICAgTWVkaWFQbGF5ZXJQcml2YXRlKE1lZGlhUGxheWVyKik7
CiAgICAgICAgICAgICBzdGF0aWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlKiBjcmVhdGUo
TWVkaWFQbGF5ZXIqIHBsYXllcik7CkBAIC0xNDIsNiArMTQ2LDEyIEBAIGNsYXNzIE1lZGlhUGxh
eWVyUHJpdmF0ZSA6IHB1YmxpYyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UgewogICAgICAg
ICAgICAgYm9vbCBtX3NlZWtpbmc7CiAgICAgICAgICAgICBib29sIG1fZXJyb3JPY2N1cmVkOwog
ICAgICAgICAgICAgZ3VpbnQgbV92b2x1bWVJZGxlSWQ7CisgICAgICAgICAgICBmbG9hdCBtX21l
ZGlhRHVyYXRpb247CisgICAgICAgICAgICBib29sIG1fc3RhcnRlZEJ1ZmZlcmluZzsKKyAgICAg
ICAgICAgIGJvb2wgbV9wbGF5UmVxdWlyZWQ7CisgICAgICAgICAgICBndWludCBtX2ZpbGxUaW1l
b3V0SWQ7CisgICAgICAgICAgICBmbG9hdCBtX21heFRpbWVMb2FkZWQ7CisgICAgICAgICAgICBn
Y2hhciogbV9kb3dubG9hZEZpbGVuYW1lOwogICAgIH07CiB9CiAKLS0gCjEuNi4zLjM=
</data>
<flag name="review"
          id="28500"
          type_id="1"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47342</attachid>
            <date>2010-01-25 06:01:24 -0800</date>
            <delta_ts>2010-01-27 01:10:03 -0800</delta_ts>
            <desc>initial support for on-disk buffering of videos</desc>
            <filename>initial-support-for-on-disk-buffering-of-videos.patch</filename>
            <type>text/plain</type>
            <size>15701</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSBiNDdjMzMwYzgxMjZmYTk4YmY1YzM1ZjI2YWNhZGYyMjViMTE5NzRmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBUdWUsIDUgSmFuIDIwMTAgMTY6Mjk6NTYgKzAxMDAKU3ViamVjdDogW1BBVENIXSBp
bml0aWFsIHN1cHBvcnQgZm9yIG9uLWRpc2sgYnVmZmVyaW5nIG9mIHZpZGVvcwoKLS0tCiBXZWJD
b3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzEgKysr
CiAuLi4vZ3JhcGhpY3MvZ3RrL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgICB8ICAy
MjAgKysrKysrKysrKysrKysrKysrLS0KIC4uLi9ncmFwaGljcy9ndGsvTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyLmggICAgIHwgICAxMSArCiAzIGZpbGVzIGNoYW5nZWQsIDI0MCBpbnNlcnRp
b25zKCspLCAyMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBi
L1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGM1ZjY3ZWIuLjVkMTk1OWIgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAK
KzIwMTAtMDEtMDcgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHU3RyZWFtZXJd
IFNob3VsZCBoYW5kbGUgQlVGRkVSSU5HIG1lc3NhZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMDAwNAorCisgICAgICAgIEluaXRpYWwgc3VwcG9y
dCBmb3Igb24tZGlzayBidWZmZXJpbmcgb2YgdmlkZW9zLiBUaGlzIHdvcmtzIG9ubHkKKyAgICAg
ICAgZm9yIFF1aWNrdGltZSBhbmQgZmx2IHRob3VnaC4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2d0ay9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6bWVkaWFQbGF5ZXJQcml2YXRlTWVzc2FnZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6Om1lZGlhUGxheWVyUHJpdmF0ZVRlbXBMb2NhdGlvbkNoYW5nZWRDYWxsYmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpidWZmZXJpbmdUaW1lb3V0Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpNZWRpYVBsYXllclByaXZhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjp+TWVkaWFQbGF5ZXJQcml2YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6bG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGU6OmR1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZTo6cHJvY2Vzc0J1ZmZlcmluZ1N0YXRzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZTo6cXVlcnlCdWZmZXJpbmdTdGF0cyk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGU6OnVwZGF0ZURvd25sb2FkTG9jYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjptYXhUaW1lU2Vla2FibGUpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjptYXhUaW1lTG9hZGVkKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6Ynl0ZXNMb2FkZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjp0b3RhbEJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZTo6dXBkYXRlU3RhdGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZTo6ZHVyYXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZTo6c2V0QXV0b2J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGU6OmNyZWF0ZUdTVFBsYXlCaW4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2d0ay9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaDoKKwogMjAxMC0wMS0yNCAgRXJp
YyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBEYW4gQmVybnN0ZWluLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
dGsvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3RrL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKaW5kZXggZmFjZjczOC4u
ZjhiOTdiNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2d0ay9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC00OSw2ICs0OSwyMSBAQAog
I2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDx3dGYvZ3RrL0dPd25QdHIuaD4KIAorLy8gR3N0
UGxheUZsYWdzIGZsYWdzIGZyb20gcGxheWJpbjIuIEl0IGlzIHRoZSBwb2xpY3kgb2YgR1N0cmVh
bWVyIHRvCisvLyBub3QgcHVibGljbHkgZXhwb3NlIGVsZW1lbnQtc3BlY2lmaWMgZW51bXMuIFRo
YXQncyB3aHkgdGhpcworLy8gR3N0UGxheUZsYWdzIGVudW0gaGFzIGJlZW4gY29waWVkIGhlcmUu
Cit0eXBlZGVmIGVudW0geworICAgIEdTVF9QTEFZX0ZMQUdfVklERU8gICAgICAgICA9IDB4MDAw
MDAwMDEsCisgICAgR1NUX1BMQVlfRkxBR19BVURJTyAgICAgICAgID0gMHgwMDAwMDAwMiwKKyAg
ICBHU1RfUExBWV9GTEFHX1RFWFQgICAgICAgICAgPSAweDAwMDAwMDA0LAorICAgIEdTVF9QTEFZ
X0ZMQUdfVklTICAgICAgICAgICA9IDB4MDAwMDAwMDgsCisgICAgR1NUX1BMQVlfRkxBR19TT0ZU
X1ZPTFVNRSAgID0gMHgwMDAwMDAxMCwKKyAgICBHU1RfUExBWV9GTEFHX05BVElWRV9BVURJTyAg
PSAweDAwMDAwMDIwLAorICAgIEdTVF9QTEFZX0ZMQUdfTkFUSVZFX1ZJREVPICA9IDB4MDAwMDAw
NDAsCisgICAgR1NUX1BMQVlfRkxBR19ET1dOTE9BRCAgICAgID0gMHgwMDAwMDA4MCwKKyAgICBH
U1RfUExBWV9GTEFHX0JVRkZFUklORyAgICAgPSAweDAwMDAwMDEwMAorfSBHc3RQbGF5RmxhZ3M7
CisKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU5LDcg
Kzc0LDYgQEAgZ2Jvb2xlYW4gbWVkaWFQbGF5ZXJQcml2YXRlTWVzc2FnZUNhbGxiYWNrKEdzdEJ1
cyogYnVzLCBHc3RNZXNzYWdlKiBtZXNzYWdlLCBncG8KICAgICBHT3duUHRyPGdjaGFyPiBkZWJ1
ZzsKICAgICBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIGVycm9yOwogICAgIE1lZGlhUGxheWVy
UHJpdmF0ZSogbXAgPSByZWludGVycHJldF9jYXN0PE1lZGlhUGxheWVyUHJpdmF0ZSo+KGRhdGEp
OwotICAgIGdpbnQgcGVyY2VudCA9IDA7CiAgICAgYm9vbCBpc3N1ZUVycm9yID0gdHJ1ZTsKICAg
ICBib29sIGF0dGVtcHROZXh0TG9jYXRpb24gPSBmYWxzZTsKIApAQCAtMTA5LDggKzEyMyw3IEBA
IGdib29sZWFuIG1lZGlhUGxheWVyUHJpdmF0ZU1lc3NhZ2VDYWxsYmFjayhHc3RCdXMqIGJ1cywg
R3N0TWVzc2FnZSogbWVzc2FnZSwgZ3BvCiAgICAgICAgIG1wLT51cGRhdGVTdGF0ZXMoKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBHU1RfTUVTU0FHRV9CVUZGRVJJTkc6Ci0gICAgICAgIGdz
dF9tZXNzYWdlX3BhcnNlX2J1ZmZlcmluZyhtZXNzYWdlLCAmcGVyY2VudCk7Ci0gICAgICAgIExP
R19WRVJCT1NFKE1lZGlhLCAiQnVmZmVyaW5nICVkIiwgcGVyY2VudCk7CisgICAgICAgIG1wLT5w
cm9jZXNzQnVmZmVyaW5nU3RhdHMobWVzc2FnZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
R1NUX01FU1NBR0VfRFVSQVRJT046CiAgICAgICAgIExPR19WRVJCT1NFKE1lZGlhLCAiRHVyYXRp
b24gY2hhbmdlZCIpOwpAQCAtMTI0LDYgKzEzNywxOCBAQCBnYm9vbGVhbiBtZWRpYVBsYXllclBy
aXZhdGVNZXNzYWdlQ2FsbGJhY2soR3N0QnVzKiBidXMsIEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIGdw
bwogICAgIHJldHVybiB0cnVlOwogfQogCit2b2lkIG1lZGlhUGxheWVyUHJpdmF0ZVRlbXBMb2Nh
dGlvbkNoYW5nZWRDYWxsYmFjayhHc3RPYmplY3QqIHBsYXlCaW4sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RPYmplY3QqIHF1ZXVlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BhcmFtU3Bl
YyogcHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBncG9pbnRlciBkYXRhKQoreworICAgIGdjaGFyKiBsb2NhdGlvbjsKKyAgICBNZWRp
YVBsYXllclByaXZhdGUqIG1wID0gcmVpbnRlcnByZXRfY2FzdDxNZWRpYVBsYXllclByaXZhdGUq
PihkYXRhKTsKKworICAgIGdfb2JqZWN0X2dldChxdWV1ZSwgInRlbXAtbG9jYXRpb24iLCAmbG9j
YXRpb24sIE5VTEwpOworICAgIG1wLT51cGRhdGVEb3dubG9hZExvY2F0aW9uKGxvY2F0aW9uKTsK
K30KKwogdm9pZCBtZWRpYVBsYXllclByaXZhdGVWb2x1bWVDaGFuZ2VkQ2FsbGJhY2soR09iamVj
dCAqZWxlbWVudCwgR1BhcmFtU3BlYyAqcHNwZWMsIGdwb2ludGVyIGRhdGEpCiB7CiAgICAgTWVk
aWFQbGF5ZXJQcml2YXRlKiBtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8TWVkaWFQbGF5ZXJQcml2YXRl
Kj4oZGF0YSk7CkBAIC0xMzYsNiArMTYxLDEyIEBAIGdib29sZWFuIG5vdGlmeVZvbHVtZUlkbGVD
YWxsYmFjayhNZWRpYVBsYXllciogbXApCiAgICAgcmV0dXJuIEZBTFNFOwogfQogCitnYm9vbGVh
biBidWZmZXJpbmdUaW1lb3V0Q2FsbGJhY2soZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBNZWRpYVBs
YXllclByaXZhdGUqIG1wID0gcmVpbnRlcnByZXRfY2FzdDxNZWRpYVBsYXllclByaXZhdGUqPihk
YXRhKTsKKyAgICByZXR1cm4gbXAtPnF1ZXJ5QnVmZmVyaW5nU3RhdHMoKTsKK30KKwogc3RhdGlj
IGZsb2F0IHBsYXliYWNrUG9zaXRpb24oR3N0RWxlbWVudCogcGxheWJpbikKIHsKIApAQCAtMjM3
LDEyICsyNjgsMjggQEAgTWVkaWFQbGF5ZXJQcml2YXRlOjpNZWRpYVBsYXllclByaXZhdGUoTWVk
aWFQbGF5ZXIqIHBsYXllcikKICAgICAsIG1fcGxheWJhY2tSYXRlKDEpCiAgICAgLCBtX2Vycm9y
T2NjdXJlZChmYWxzZSkKICAgICAsIG1fdm9sdW1lSWRsZUlkKC0xKQorICAgICwgbV9tZWRpYUR1
cmF0aW9uKDAuMCkKKyAgICAsIG1fc3RhcnRlZEJ1ZmZlcmluZyhmYWxzZSkKKyAgICAsIG1fZmls
bFRpbWVvdXRJZCgwKQorICAgICwgbV9tYXhUaW1lTG9hZGVkKDAuMCkKKyAgICAsIG1fZG93bmxv
YWRGaWxlbmFtZSgwKQorICAgICwgbV9maWxsU3RhdHVzKDAuMCkKIHsKICAgICBkb0dzdEluaXQo
KTsKIH0KIAogTWVkaWFQbGF5ZXJQcml2YXRlOjp+TWVkaWFQbGF5ZXJQcml2YXRlKCkKIHsKKyAg
ICBpZiAobV9kb3dubG9hZEZpbGVuYW1lKSB7CisgICAgICAgIGdfZnJlZShtX2Rvd25sb2FkRmls
ZW5hbWUpOworICAgICAgICBtX2Rvd25sb2FkRmlsZW5hbWUgPSAwOworICAgIH0KKworICAgIGlm
IChtX2ZpbGxUaW1lb3V0SWQpIHsKKyAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1fZmlsbFRpbWVv
dXRJZCk7CisgICAgICAgIG1fZmlsbFRpbWVvdXRJZCA9IDA7CisgICAgfQorCiAgICAgaWYgKG1f
dm9sdW1lSWRsZUlkKSB7CiAgICAgICAgIGdfc291cmNlX3JlbW92ZShtX3ZvbHVtZUlkbGVJZCk7
CiAgICAgICAgIG1fdm9sdW1lSWRsZUlkID0gLTE7CkBAIC0yODcsNiArMzM0LDcgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGU6OmxvYWQoY29uc3QgU3RyaW5nJiB1cmwpCiAKICAgICBjcmVhdGVH
U1RQbGF5QmluKHVybCk7CiAgICAgcGF1c2UoKTsKKwogfQogCiBib29sIE1lZGlhUGxheWVyUHJp
dmF0ZTo6Y2hhbmdlUGlwZWxpbmVTdGF0ZShHc3RTdGF0ZSBuZXdTdGF0ZSkKQEAgLTMyOCw2ICsz
NzYsOSBAQCBmbG9hdCBNZWRpYVBsYXllclByaXZhdGU6OmR1cmF0aW9uKCkgY29uc3QKICAgICBp
ZiAobV9lcnJvck9jY3VyZWQpCiAgICAgICAgIHJldHVybiAwLjA7CiAKKyAgICBpZiAobV9tZWRp
YUR1cmF0aW9uKQorICAgICAgICByZXR1cm4gbV9tZWRpYUR1cmF0aW9uOworCiAgICAgR3N0Rm9y
bWF0IHRpbWVGb3JtYXQgPSBHU1RfRk9STUFUX1RJTUU7CiAgICAgZ2ludDY0IHRpbWVMZW5ndGgg
PSAwOwogCkBAIC01NTAsMTYgKzYwMSw4NyBAQCBQYXNzUmVmUHRyPFRpbWVSYW5nZXM+IE1lZGlh
UGxheWVyUHJpdmF0ZTo6YnVmZmVyZWQoKSBjb25zdAogICAgIHJldHVybiB0aW1lUmFuZ2VzLnJl
bGVhc2UoKTsKIH0KIAordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnByb2Nlc3NCdWZmZXJpbmdT
dGF0cyhHc3RNZXNzYWdlKiBtZXNzYWdlKQoreworICAgIEdzdEJ1ZmZlcmluZ01vZGUgbW9kZTsK
KworICAgIGdzdF9tZXNzYWdlX3BhcnNlX2J1ZmZlcmluZ19zdGF0cyhtZXNzYWdlLCAmbW9kZSwg
MCwgMCwgMCk7CisgICAgaWYgKG1vZGUgIT0gR1NUX0JVRkZFUklOR19ET1dOTE9BRCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKCFtX3N0YXJ0ZWRCdWZmZXJpbmcpIHsKKyAgICAgICAgbV9z
dGFydGVkQnVmZmVyaW5nID0gdHJ1ZTsKKworICAgICAgICBpZiAobV9maWxsVGltZW91dElkID4g
MCkgeworICAgICAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1fZmlsbFRpbWVvdXRJZCk7CisgICAg
ICAgIH0KKworICAgICAgICBtX2ZpbGxUaW1lb3V0SWQgPSBnX3RpbWVvdXRfYWRkKDIwMCwgKEdT
b3VyY2VGdW5jKSBidWZmZXJpbmdUaW1lb3V0Q2FsbGJhY2ssIHRoaXMpOworICAgIH0KK30KKwor
Ym9vbCBNZWRpYVBsYXllclByaXZhdGU6OnF1ZXJ5QnVmZmVyaW5nU3RhdHMoKQoreworICAgIEdz
dFF1ZXJ5KiBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfYnVmZmVyaW5nKEdTVF9GT1JNQVRfUEVSQ0VO
VCk7CisKKyAgICBpZiAoZ3N0X2VsZW1lbnRfcXVlcnkobV9wbGF5QmluLCBxdWVyeSkpIHsKKyAg
ICAgICAgZ2ludDY0IHN0YXJ0LCBzdG9wOworCisgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9idWZm
ZXJpbmdfcmFuZ2UocXVlcnksIDAsICZzdGFydCwgJnN0b3AsIDApOworCisgICAgICAgIGlmIChz
dG9wICE9IC0xKQorICAgICAgICAgICAgbV9maWxsU3RhdHVzID0gMTAwLjAgKiBzdG9wIC8gR1NU
X0ZPUk1BVF9QRVJDRU5UX01BWDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9maWxsU3Rh
dHVzID0gMTAwLjA7CisKKyAgICAgICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJEb3dubG9hZCBidWZm
ZXIgZmlsbGVkIHVwIHRvICVmJSUiLCBtX2ZpbGxTdGF0dXMpOworCisgICAgICAgIGlmICghbV9t
ZWRpYUR1cmF0aW9uKQorICAgICAgICAgICAgZHVyYXRpb25DaGFuZ2VkKCk7CisKKyAgICAgICAg
Ly8gVXBkYXRlIG1heFRpbWVMb2FkZWQgb25seSBpZiB0aGUgbWVkaWEgZHVyYXRpb24gaXMKKyAg
ICAgICAgLy8gYXZhaWxhYmxlLiBPdGhlcndpc2Ugd2UgY2FuJ3QgY29tcHV0ZSBpdC4KKyAgICAg
ICAgaWYgKG1fbWVkaWFEdXJhdGlvbikgeworICAgICAgICAgICAgbV9tYXhUaW1lTG9hZGVkID0g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KChtX2ZpbGxTdGF0dXMgKiBtX21lZGlhRHVyYXRpb24pIC8gMTAw
LjApOworICAgICAgICAgICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJVcGRhdGVkIG1heFRpbWVMb2Fk
ZWQ6ICVmIiwgbV9tYXhUaW1lTG9hZGVkKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX2Zp
bGxTdGF0dXMgPT0gMTAwLjApIHsKKyAgICAgICAgICAgIC8vIEJ1ZmZlcmluZyBpcyBkb25lLCBy
ZW1vdmUgdGhlIGZpbGwgc291cmNlIGZyb20gdGhlIG1haW4gbG9vcC4KKyAgICAgICAgICAgIG1f
ZmlsbFRpbWVvdXRJZCA9IDA7CisKKyAgICAgICAgICAgIC8vIE1lZGlhIGlzIG5vdyBmdWxseSBs
b2FkZWQuIEl0IHdpbGwgcGxheSBldmVuIGlmIG5ldHdvcmsKKyAgICAgICAgICAgIC8vIGNvbm5l
Y3Rpb24gaXMgY3V0LgorICAgICAgICAgICAgdXBkYXRlU3RhdGVzKCk7CisKKyAgICAgICAgICAg
IGdzdF9xdWVyeV91bnJlZihxdWVyeSk7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAg
ICAgIH0KKyAgICAgICAgdXBkYXRlU3RhdGVzKCk7CisgICAgfQorCisgICAgZ3N0X3F1ZXJ5X3Vu
cmVmKHF1ZXJ5KTsKKyAgICByZXR1cm4gVFJVRTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZh
dGU6OnVwZGF0ZURvd25sb2FkTG9jYXRpb24oZ2NoYXIqIGxvY2F0aW9uKQoreworICAgIGlmICht
X2Rvd25sb2FkRmlsZW5hbWUpCisgICAgICAgIGdfZnJlZShtX2Rvd25sb2FkRmlsZW5hbWUpOwor
ICAgIExPR19WRVJCT1NFKE1lZGlhLCAiRG93bmxvYWQgZmlsZW5hbWU6ICVzIiwgbG9jYXRpb24p
OworICAgIG1fZG93bmxvYWRGaWxlbmFtZSA9IGxvY2F0aW9uOworfQorCiBmbG9hdCBNZWRpYVBs
YXllclByaXZhdGU6Om1heFRpbWVTZWVrYWJsZSgpIGNvbnN0CiB7CiAgICAgaWYgKG1fZXJyb3JP
Y2N1cmVkKQogICAgICAgICByZXR1cm4gMC4wOwogCi0gICAgLy8gVE9ETwogICAgIExPR19WRVJC
T1NFKE1lZGlhLCAibWF4VGltZVNlZWthYmxlIik7Ci0gICAgaWYgKG1faXNTdHJlYW1pbmcpCi0g
ICAgICAgIHJldHVybiBudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCk7CiAgICAgLy8g
aW5maW5pdGUgZHVyYXRpb24gbWVhbnMgbGl2ZSBzdHJlYW0KKyAgICBpZiAoaXNpbmYoZHVyYXRp
b24oKSkpCisgICAgICAgIHJldHVybiAwLjA7CisKICAgICByZXR1cm4gbWF4VGltZUxvYWRlZCgp
OwogfQogCkBAIC01NjgsMjkgKzY5MCwyOCBAQCBmbG9hdCBNZWRpYVBsYXllclByaXZhdGU6Om1h
eFRpbWVMb2FkZWQoKSBjb25zdAogICAgIGlmIChtX2Vycm9yT2NjdXJlZCkKICAgICAgICAgcmV0
dXJuIDAuMDsKIAotICAgIC8vIFRPRE8KLSAgICBMT0dfVkVSQk9TRShNZWRpYSwgIm1heFRpbWVM
b2FkZWQiKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBkdXJhdGlvbigpOwor
ICAgIGZsb2F0IGxvYWRlZCA9IG1fbWF4VGltZUxvYWRlZDsKKyAgICBpZiAoIWxvYWRlZCAmJiAh
bV9maWxsVGltZW91dElkKQorICAgICAgICBsb2FkZWQgPSBkdXJhdGlvbigpOworICAgIExPR19W
RVJCT1NFKE1lZGlhLCAibWF4VGltZUxvYWRlZDogJWYiLCBsb2FkZWQpOworICAgIHJldHVybiBs
b2FkZWQ7CiB9CiAKIHVuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Ynl0ZXNMb2FkZWQoKSBj
b25zdAogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJi
eXRlc0xvYWRlZCIpOwotICAgIC8qaWYgKCFtX3BsYXlCaW4pCisgICAgaWYgKCFtX3BsYXlCaW4p
CisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCFtX21lZGlhRHVyYXRpb24pCiAgICAgICAg
IHJldHVybiAwOwotICAgIGZsb2F0IGR1ciA9IGR1cmF0aW9uKCk7Ci0gICAgZmxvYXQgbWF4VGlt
ZSA9IG1heFRpbWVMb2FkZWQoKTsKLSAgICBpZiAoIWR1cikKLSAgICAgICAgcmV0dXJuIDA7Ki8K
IAotICAgIHJldHVybiAxOyAvLyB0b3RhbEJ5dGVzKCkgKiBtYXhUaW1lIC8gZHVyOworICAgIHVu
c2lnbmVkIGxvYWRlZCA9IHRvdGFsQnl0ZXMoKSAqIG1heFRpbWVMb2FkZWQoKSAvIG1fbWVkaWFE
dXJhdGlvbjsKKyAgICBMT0dfVkVSQk9TRShNZWRpYSwgImJ5dGVzTG9hZGVkOiAlZCIsIGxvYWRl
ZCk7CisgICAgcmV0dXJuIGxvYWRlZDsKIH0KIAogdW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRl
Ojp0b3RhbEJ5dGVzKCkgY29uc3QKIHsKLSAgICBMT0dfVkVSQk9TRShNZWRpYSwgInRvdGFsQnl0
ZXMiKTsKICAgICBpZiAoIW1fc291cmNlKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtNjAwLDYg
KzcyMSw3IEBAIHVuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZTo6dG90YWxCeXRlcygpIGNvbnN0
CiAgICAgR3N0Rm9ybWF0IGZtdCA9IEdTVF9GT1JNQVRfQllURVM7CiAgICAgZ2ludDY0IGxlbmd0
aCA9IDA7CiAgICAgZ3N0X2VsZW1lbnRfcXVlcnlfZHVyYXRpb24obV9zb3VyY2UsICZmbXQsICZs
ZW5ndGgpOworICAgIExPR19WRVJCT1NFKE1lZGlhLCAidG90YWxCeXRlcyAlIiBHX0dJTlQ2NF9G
T1JNQVQsIGxlbmd0aCk7CiAKICAgICByZXR1cm4gbGVuZ3RoOwogfQpAQCAtNjUwLDkgKzc3Miwz
MyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6dXBkYXRlU3RhdGVzKCkKICAgICAgICAgaWYg
KHN0YXRlID09IEdTVF9TVEFURV9QTEFZSU5HKSB7CiAgICAgICAgICAgICBtX3JlYWR5U3RhdGUg
PSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7CiAgICAgICAgICAgICBtX3BhdXNlZCA9IGZh
bHNlOwotICAgICAgICB9IGVsc2UKKyAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSBHU1RfU1RB
VEVfUEFVU0VEKQogICAgICAgICAgICAgbV9wYXVzZWQgPSB0cnVlOwogCisgICAgICAgIC8vIElz
IG9uLWRpc2sgYnVmZmVyaW5nIGluIHByb2dyZXNzPworICAgICAgICBpZiAobV9maWxsVGltZW91
dElkKSB7CisgICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5n
OworICAgICAgICAgICAgaWYgKChtX2ZpbGxTdGF0dXMgPiAwKSAmJiAobV9yZWFkeVN0YXRlIDwg
TWVkaWFQbGF5ZXI6OkhhdmVGdXR1cmVEYXRhKSkgeworICAgICAgICAgICAgICAgIC8vIEJ1ZmZl
cmluZyBoYXMganVzdCBzdGFydGVkLCB3ZSBzaG91bGQgbm93IGhhdmUgZW5vdWdoIGRhdGEgdG8K
KyAgICAgICAgICAgICAgICAvLyByZXN0YXJ0IHBsYXliYWNrIGlmIGl0IHdhcyBpbnRlcm5hbGx5
IHBhdXNlZCBieSBHU3RyZWFtZXIKKyAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRp
YVBsYXllcjo6SGF2ZUZ1dHVyZURhdGE7CisgICAgICAgICAgICAgICAgaWYgKG1fcGF1c2VkKQor
ICAgICAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9wbGF5QmluLCBHU1Rf
U1RBVEVfUExBWUlORyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAo
bWF4VGltZUxvYWRlZCgpID09IGR1cmF0aW9uKCkpIHsKKyAgICAgICAgICAgIG1fbmV0d29ya1N0
YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRlZDsKKyAgICAgICAgICAgIGlmIChzdGF0ZSA9PSBHU1Rf
U1RBVEVfUkVBRFkpCisgICAgICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6
OkhhdmVOb3RoaW5nOworICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGUgPT0gR1NUX1NUQVRFX1BB
VVNFRCkKKyAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVu
b3VnaERhdGE7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgaWYgKHN0YXRlID09IEdTVF9T
VEFURV9SRUFEWSkKKyAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6
SGF2ZU5vdGhpbmc7CisgICAgICAgICAgICBlbHNlIGlmIChtX3BhdXNlZCkKKyAgICAgICAgICAg
ICAgICBtX3JlYWR5U3RhdGUgPSBjdXJyZW50VGltZSgpIDwgbWF4VGltZUxvYWRlZCgpID8gTWVk
aWFQbGF5ZXI6OkhhdmVGdXR1cmVEYXRhIDogTWVkaWFQbGF5ZXI6OkhhdmVDdXJyZW50RGF0YTsK
KwogICAgICAgICBpZiAobV9jaGFuZ2luZ1JhdGUpIHsKICAgICAgICAgICAgIG1fcGxheWVyLT5y
YXRlQ2hhbmdlZCgpOwogICAgICAgICAgICAgbV9jaGFuZ2luZ1JhdGUgPSBmYWxzZTsKQEAgLTY2
Myw3ICs4MDksNiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6dXBkYXRlU3RhdGVzKCkKICAg
ICAgICAgICAgIG1fc2Vla2luZyA9IGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgbV9uZXR3
b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGVkOwogCiAgICAgICAgIGdfb2JqZWN0X2dldCht
X3BsYXlCaW4sICJzb3VyY2UiLCAmbV9zb3VyY2UsIE5VTEwpOwogICAgICAgICBpZiAoIW1fc291
cmNlKQpAQCAtODM4LDYgKzk4MywxNCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6ZGlkRW5k
KCkKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmR1cmF0aW9uQ2hhbmdlZCgpCiB7CisgICAg
Ly8gUmVzZXQgY2FjaGVkIG1lZGlhIGR1cmF0aW9uCisgICAgbV9tZWRpYUR1cmF0aW9uID0gMDsK
KworICAgIC8vIEFuZCByZS1jYWNoZSBpdCBpZiBwb3NzaWJsZS4KKyAgICBmbG9hdCBuZXdEdXJh
dGlvbiA9IGR1cmF0aW9uKCk7CisgICAgaWYgKCFpc2luZihuZXdEdXJhdGlvbikpCisgICAgICAg
IG1fbWVkaWFEdXJhdGlvbiA9IG5ld0R1cmF0aW9uOworCiAgICAgbV9wbGF5ZXItPmR1cmF0aW9u
Q2hhbmdlZCgpOwogfQogCkBAIC0xMDQ1LDYgKzExOTgsMjEgQEAgYm9vbCBNZWRpYVBsYXllclBy
aXZhdGU6OnN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRBdXRvYnVmZmVyKGJvb2wgYXV0b0J1ZmZlcikK
K3sKKyAgICBpZiAoIW1fcGxheUJpbikgeworICAgICAgICBMT0dfVkVSQk9TRShNZWRpYSwgIlBs
YXliaW4gZWxlbWVudCBub3QgY3JlYXRlZCB5ZXQsIGF1dG9idWZmZXIgY29uZmlndXJhdGlvbiBk
ZWZlcnJlZCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgR3N0UGxheUZsYWdzIGZs
YWdzOworICAgIGdfb2JqZWN0X2dldChtX3BsYXlCaW4sICJmbGFncyIsICZmbGFncywgTlVMTCk7
CisgICAgaWYgKGF1dG9CdWZmZXIpCisgICAgICAgIGdfb2JqZWN0X3NldChtX3BsYXlCaW4sICJm
bGFncyIsIGZsYWdzIHwgR1NUX1BMQVlfRkxBR19ET1dOTE9BRCwgTlVMTCk7CisgICAgZWxzZQor
ICAgICAgICBnX29iamVjdF9zZXQobV9wbGF5QmluLCAiZmxhZ3MiLCBmbGFncyAmIH5HU1RfUExB
WV9GTEFHX0RPV05MT0FELCBOVUxMKTsKK30KKwogdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmNy
ZWF0ZUdTVFBsYXlCaW4oU3RyaW5nIHVybCkKIHsKICAgICBBU1NFUlQoIW1fcGxheUJpbik7CkBA
IC0xMDU1LDggKzEyMjMsMTYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmNyZWF0ZUdTVFBs
YXlCaW4oU3RyaW5nIHVybCkKICAgICBnX3NpZ25hbF9jb25uZWN0KGJ1cywgIm1lc3NhZ2UiLCBH
X0NBTExCQUNLKG1lZGlhUGxheWVyUHJpdmF0ZU1lc3NhZ2VDYWxsYmFjayksIHRoaXMpOwogICAg
IGdzdF9vYmplY3RfdW5yZWYoYnVzKTsKIAorICAgIHNldEF1dG9idWZmZXIobV9wbGF5ZXItPmF1
dG9idWZmZXIoKSk7CisKICAgICBnX29iamVjdF9zZXQobV9wbGF5QmluLCAidXJpIiwgdXJsLnV0
ZjgoKS5kYXRhKCksIE5VTEwpOwogCisgICAgLy8gdGVtcC1sb2NhdGlvbiBpcyBhIHByb3BlcnR5
IG9mIHF1ZXVlMi4gUGxheWJpbjIgd2lsbAorICAgIC8vIGNvbmZpZ3VyZSBpdCBpZiB0aGUgbWVk
aWEgY2FuIGJlIGJ1ZmZlcmVkIGluIGRpc2suCisgICAgZ19zaWduYWxfY29ubmVjdChtX3BsYXlC
aW4sICJkZWVwLW5vdGlmeTo6dGVtcC1sb2NhdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICBH
X0NBTExCQUNLKG1lZGlhUGxheWVyUHJpdmF0ZVRlbXBMb2NhdGlvbkNoYW5nZWRDYWxsYmFjayks
CisgICAgICAgICAgICAgICAgICAgICB0aGlzKTsKKwogICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9w
bGF5QmluLCAibm90aWZ5Ojp2b2x1bWUiLCBHX0NBTExCQUNLKG1lZGlhUGxheWVyUHJpdmF0ZVZv
bHVtZUNoYW5nZWRDYWxsYmFjayksIHRoaXMpOwogCiAgICAgbV92aWRlb1NpbmsgPSB3ZWJraXRf
dmlkZW9fc2lua19uZXcoKTsKQEAgLTEwNzMsNyArMTI0OSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpjcmVhdGVHU1RQbGF5QmluKFN0cmluZyB1cmwpCiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICBtX2Zwc1NpbmsgPSAwOwogICAgICAgICAgICAgZ19vYmplY3Rfc2V0KG1fcGxh
eUJpbiwgInZpZGVvLXNpbmsiLCBtX3ZpZGVvU2luaywgTlVMTCk7Ci0gICAgICAgICAgICBMT0co
TWVkaWEsICJDYW4ndCBkaXNwbGF5IEZQUyBzdGF0aXN0aWNzLCB5b3UgbmVlZCBnc3QtcGx1Z2lu
cy1iYWQgPj0gMC4xMC4xOCIpOworICAgICAgICAgICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJDYW4n
dCBkaXNwbGF5IEZQUyBzdGF0aXN0aWNzLCB5b3UgbmVlZCBnc3QtcGx1Z2lucy1iYWQgPj0gMC4x
MC4xOCIpOwogICAgICAgICB9CiAgICAgfSBlbHNlCiAgICAgICAgIGdfb2JqZWN0X3NldChtX3Bs
YXlCaW4sICJ2aWRlby1zaW5rIiwgbV92aWRlb1NpbmssIE5VTEwpOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXIuaAppbmRleCAyNzhiZDFjLi42MGJhMGY3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaApAQCAt
NzcsNiArNzcsOCBAQCBjbGFzcyBNZWRpYVBsYXllclByaXZhdGUgOiBwdWJsaWMgTWVkaWFQbGF5
ZXJQcml2YXRlSW50ZXJmYWNlIHsKICAgICAgICAgICAgIHZvaWQgc2V0Vm9sdW1lKGZsb2F0KTsK
ICAgICAgICAgICAgIHZvaWQgdm9sdW1lQ2hhbmdlZCgpOwogCisgICAgICAgICAgICB2b2lkIHNl
dEF1dG9idWZmZXIoYm9vbCk7CisKICAgICAgICAgICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3Rh
dGUgbmV0d29ya1N0YXRlKCkgY29uc3Q7CiAgICAgICAgICAgICBNZWRpYVBsYXllcjo6UmVhZHlT
dGF0ZSByZWFkeVN0YXRlKCkgY29uc3Q7CiAKQEAgLTEwNCw2ICsxMDYsOSBAQCBjbGFzcyBNZWRp
YVBsYXllclByaXZhdGUgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlIHsKICAg
ICAgICAgICAgIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuKCkgY29uc3Q7CiAKICAgICAgICAgICAg
IGJvb2wgcGlwZWxpbmVSZXNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzZXRQaXBlbGluZTsgfQor
ICAgICAgICAgICAgdm9pZCBwcm9jZXNzQnVmZmVyaW5nU3RhdHMoR3N0TWVzc2FnZSogbWVzc2Fn
ZSk7CisgICAgICAgICAgICBib29sIHF1ZXJ5QnVmZmVyaW5nU3RhdHMoKTsKKyAgICAgICAgICAg
IHZvaWQgdXBkYXRlRG93bmxvYWRMb2NhdGlvbihnY2hhciopOwogCiAgICAgICAgIHByaXZhdGU6
CiAgICAgICAgICAgICBNZWRpYVBsYXllclByaXZhdGUoTWVkaWFQbGF5ZXIqKTsKQEAgLTE0Niw2
ICsxNTEsMTIgQEAgY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlIDogcHVibGljIE1lZGlhUGxheWVy
UHJpdmF0ZUludGVyZmFjZSB7CiAgICAgICAgICAgICBmbG9hdCBtX3BsYXliYWNrUmF0ZTsKICAg
ICAgICAgICAgIGJvb2wgbV9lcnJvck9jY3VyZWQ7CiAgICAgICAgICAgICBndWludCBtX3ZvbHVt
ZUlkbGVJZDsKKyAgICAgICAgICAgIGZsb2F0IG1fbWVkaWFEdXJhdGlvbjsKKyAgICAgICAgICAg
IGJvb2wgbV9zdGFydGVkQnVmZmVyaW5nOworICAgICAgICAgICAgZ3VpbnQgbV9maWxsVGltZW91
dElkOworICAgICAgICAgICAgZmxvYXQgbV9tYXhUaW1lTG9hZGVkOworICAgICAgICAgICAgZ2No
YXIqIG1fZG93bmxvYWRGaWxlbmFtZTsKKyAgICAgICAgICAgIGdkb3VibGUgbV9maWxsU3RhdHVz
OwogICAgIH07CiB9CiAKLS0gCjEuNi4zLjM=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47507</attachid>
            <date>2010-01-27 01:10:03 -0800</date>
            <delta_ts>2010-02-01 09:34:11 -0800</delta_ts>
            <desc>initial support for on-disk buffering of videos</desc>
            <filename>initial-support-for-on-disk-buffering-of-videos.patch</filename>
            <type>text/plain</type>
            <size>16201</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSBhNDY1MmRkOWUyNjc5MGQ3MmU3Y2Y1NTU3NWZhNGZjYTQ4NzBhZDIyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBUdWUsIDUgSmFuIDIwMTAgMTY6Mjk6NTYgKzAxMDAKU3ViamVjdDogW1BBVENIXSBp
bml0aWFsIHN1cHBvcnQgZm9yIG9uLWRpc2sgYnVmZmVyaW5nIG9mIHZpZGVvcwoKLS0tCiBXZWJD
b3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzEgKysr
CiAuLi4vZ3JhcGhpY3MvZ3RrL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgICB8ICAy
MDkgKysrKysrKysrKysrKysrKystLS0KIC4uLi9ncmFwaGljcy9ndGsvTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyLmggICAgIHwgICAxMyArKy0KIDMgZmlsZXMgY2hhbmdlZCwgMjI2IGluc2Vy
dGlvbnMoKyksIDI3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9n
IGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzVlZGVjNC4uYjBlYzIyYyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNCBA
QAorMjAxMC0wMS0wNyAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dTdHJlYW1l
cl0gU2hvdWxkIGhhbmRsZSBCVUZGRVJJTkcgbWVzc2FnZXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwMDA0CisKKyAgICAgICAgSW5pdGlhbCBzdXBw
b3J0IGZvciBvbi1kaXNrIGJ1ZmZlcmluZyBvZiB2aWRlb3MuIFRoaXMgd29ya3Mgb25seQorICAg
ICAgICBmb3IgUXVpY2t0aW1lIGFuZCBmbHYgdGhvdWdoLgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjptZWRpYVBsYXllclByaXZhdGVNZXNzYWdlQ2FsbGJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6bWVkaWFQbGF5ZXJQcml2YXRlVGVtcExvY2F0aW9uQ2hhbmdlZENhbGxiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OmJ1ZmZlcmluZ1RpbWVvdXRDYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGU6Ok1lZGlhUGxheWVyUHJpdmF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6On5NZWRpYVBsYXllclByaXZhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZTo6ZHVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlOjpwcm9jZXNzQnVmZmVyaW5nU3RhdHMpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlOjpxdWVyeUJ1ZmZlcmluZ1N0YXRzKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6dXBkYXRlRG93bmxvYWRMb2NhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6Om1heFRpbWVTZWVrYWJsZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6Om1heFRpbWVMb2FkZWQpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpieXRlc0xvYWRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnRvdGFsQnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlOjp1cGRhdGVTdGF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlOjpkdXJhdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlOjpzZXRBdXRvYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZTo6Y3JlYXRlR1NUUGxheUJpbik6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3RrL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oOgorCiAyMDEwLTAxLTI1ICBQ
aGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBFcmljIFNlaWRlbC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3RrL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2d0ay9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCmluZGV4IGVhMzUxOTYu
LjI4MmVkZDYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtMyw2ICszLDcgQEAKICAq
IENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgogICogQ29w
eXJpZ2h0IChDKSAyMDA5IEd1c3Rhdm8gTm9yb25oYSBTaWx2YSA8Z25zQGdub21lLm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBJZ2FsaWEgUy5MCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTQ5LDYgKzUwLDIxIEBACiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHd0Zi9ndGsv
R093blB0ci5oPgogCisvLyBHc3RQbGF5RmxhZ3MgZmxhZ3MgZnJvbSBwbGF5YmluMi4gSXQgaXMg
dGhlIHBvbGljeSBvZiBHU3RyZWFtZXIgdG8KKy8vIG5vdCBwdWJsaWNseSBleHBvc2UgZWxlbWVu
dC1zcGVjaWZpYyBlbnVtcy4gVGhhdCdzIHdoeSB0aGlzCisvLyBHc3RQbGF5RmxhZ3MgZW51bSBo
YXMgYmVlbiBjb3BpZWQgaGVyZS4KK3R5cGVkZWYgZW51bSB7CisgICAgR1NUX1BMQVlfRkxBR19W
SURFTyAgICAgICAgID0gMHgwMDAwMDAwMSwKKyAgICBHU1RfUExBWV9GTEFHX0FVRElPICAgICAg
ICAgPSAweDAwMDAwMDAyLAorICAgIEdTVF9QTEFZX0ZMQUdfVEVYVCAgICAgICAgICA9IDB4MDAw
MDAwMDQsCisgICAgR1NUX1BMQVlfRkxBR19WSVMgICAgICAgICAgID0gMHgwMDAwMDAwOCwKKyAg
ICBHU1RfUExBWV9GTEFHX1NPRlRfVk9MVU1FICAgPSAweDAwMDAwMDEwLAorICAgIEdTVF9QTEFZ
X0ZMQUdfTkFUSVZFX0FVRElPICA9IDB4MDAwMDAwMjAsCisgICAgR1NUX1BMQVlfRkxBR19OQVRJ
VkVfVklERU8gID0gMHgwMDAwMDA0MCwKKyAgICBHU1RfUExBWV9GTEFHX0RPV05MT0FEICAgICAg
PSAweDAwMDAwMDgwLAorICAgIEdTVF9QTEFZX0ZMQUdfQlVGRkVSSU5HICAgICA9IDB4MDAwMDAw
MTAwCit9IEdzdFBsYXlGbGFnczsKKwogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtNTksNyArNzUsNiBAQCBnYm9vbGVhbiBtZWRpYVBsYXllclByaXZhdGVN
ZXNzYWdlQ2FsbGJhY2soR3N0QnVzKiBidXMsIEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIGdwbwogICAg
IEdPd25QdHI8Z2NoYXI+IGRlYnVnOwogICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgZXJy
b3I7CiAgICAgTWVkaWFQbGF5ZXJQcml2YXRlKiBtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8TWVkaWFQ
bGF5ZXJQcml2YXRlKj4oZGF0YSk7Ci0gICAgZ2ludCBwZXJjZW50ID0gMDsKICAgICBib29sIGlz
c3VlRXJyb3IgPSB0cnVlOwogICAgIGJvb2wgYXR0ZW1wdE5leHRMb2NhdGlvbiA9IGZhbHNlOwog
CkBAIC0xMDksOCArMTI0LDcgQEAgZ2Jvb2xlYW4gbWVkaWFQbGF5ZXJQcml2YXRlTWVzc2FnZUNh
bGxiYWNrKEdzdEJ1cyogYnVzLCBHc3RNZXNzYWdlKiBtZXNzYWdlLCBncG8KICAgICAgICAgbXAt
PnVwZGF0ZVN0YXRlcygpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEdTVF9NRVNTQUdFX0JV
RkZFUklORzoKLSAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfYnVmZmVyaW5nKG1lc3NhZ2UsICZw
ZXJjZW50KTsKLSAgICAgICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJCdWZmZXJpbmcgJWQiLCBwZXJj
ZW50KTsKKyAgICAgICAgbXAtPnByb2Nlc3NCdWZmZXJpbmdTdGF0cyhtZXNzYWdlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBHU1RfTUVTU0FHRV9EVVJBVElPTjoKICAgICAgICAgTE9HX1ZF
UkJPU0UoTWVkaWEsICJEdXJhdGlvbiBjaGFuZ2VkIik7CkBAIC0xMzQsNiArMTQ4LDE4IEBAIHZv
aWQgbWVkaWFQbGF5ZXJQcml2YXRlU291cmNlQ2hhbmdlZENhbGxiYWNrKEdPYmplY3QgKm9iamVj
dCwgR1BhcmFtU3BlYyAqcHNwZWMsCiAgICAgZ3N0X29iamVjdF91bnJlZihlbGVtZW50KTsKIH0K
IAordm9pZCBtZWRpYVBsYXllclByaXZhdGVUZW1wTG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2soR3N0
T2JqZWN0KiBwbGF5QmluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR3N0T2JqZWN0KiBxdWV1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdQYXJhbVNwZWMqIHByb3BlcnR5LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgZGF0YSkK
K3sKKyAgICBnY2hhciogbG9jYXRpb247CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlKiBtcCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8TWVkaWFQbGF5ZXJQcml2YXRlKj4oZGF0YSk7CisKKyAgICBnX29iamVj
dF9nZXQocXVldWUsICJ0ZW1wLWxvY2F0aW9uIiwgJmxvY2F0aW9uLCBOVUxMKTsKKyAgICBtcC0+
dXBkYXRlRG93bmxvYWRMb2NhdGlvbihsb2NhdGlvbik7Cit9CisKIHZvaWQgbWVkaWFQbGF5ZXJQ
cml2YXRlVm9sdW1lQ2hhbmdlZENhbGxiYWNrKEdPYmplY3QgKmVsZW1lbnQsIEdQYXJhbVNwZWMg
KnBzcGVjLCBncG9pbnRlciBkYXRhKQogewogICAgIE1lZGlhUGxheWVyUHJpdmF0ZSogbXAgPSBy
ZWludGVycHJldF9jYXN0PE1lZGlhUGxheWVyUHJpdmF0ZSo+KGRhdGEpOwpAQCAtMTQ2LDYgKzE3
MiwxMiBAQCBnYm9vbGVhbiBub3RpZnlWb2x1bWVJZGxlQ2FsbGJhY2soTWVkaWFQbGF5ZXIqIG1w
KQogICAgIHJldHVybiBGQUxTRTsKIH0KIAorZ2Jvb2xlYW4gYnVmZmVyaW5nVGltZW91dENhbGxi
YWNrKGdwb2ludGVyIGRhdGEpCit7CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlKiBtcCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8TWVkaWFQbGF5ZXJQcml2YXRlKj4oZGF0YSk7CisgICAgcmV0dXJuIG1wLT5x
dWVyeUJ1ZmZlcmluZ1N0YXRzKCk7Cit9CisKIHN0YXRpYyBmbG9hdCBwbGF5YmFja1Bvc2l0aW9u
KEdzdEVsZW1lbnQqIHBsYXliaW4pCiB7CiAKQEAgLTI0OCwxMiArMjgwLDI4IEBAIE1lZGlhUGxh
eWVyUHJpdmF0ZTo6TWVkaWFQbGF5ZXJQcml2YXRlKE1lZGlhUGxheWVyKiBwbGF5ZXIpCiAgICAg
LCBtX2Vycm9yT2NjdXJlZChmYWxzZSkKICAgICAsIG1fdm9sdW1lSWRsZUlkKC0xKQogICAgICwg
bV9tZWRpYUR1cmF0aW9uKDAuMCkKKyAgICAsIG1fc3RhcnRlZEJ1ZmZlcmluZyhmYWxzZSkKKyAg
ICAsIG1fZmlsbFRpbWVvdXRJZCgwKQorICAgICwgbV9tYXhUaW1lTG9hZGVkKDAuMCkKKyAgICAs
IG1fZG93bmxvYWRGaWxlbmFtZSgwKQorICAgICwgbV9maWxsU3RhdHVzKDAuMCkKIHsKLSAgICBk
b0dzdEluaXQoKTsKKyAgICBpZiAoZG9Hc3RJbml0KCkpCisgICAgICAgIGNyZWF0ZUdTVFBsYXlC
aW4oKTsKIH0KIAogTWVkaWFQbGF5ZXJQcml2YXRlOjp+TWVkaWFQbGF5ZXJQcml2YXRlKCkKIHsK
KyAgICBpZiAobV9kb3dubG9hZEZpbGVuYW1lKSB7CisgICAgICAgIGdfZnJlZShtX2Rvd25sb2Fk
RmlsZW5hbWUpOworICAgICAgICBtX2Rvd25sb2FkRmlsZW5hbWUgPSAwOworICAgIH0KKworICAg
IGlmIChtX2ZpbGxUaW1lb3V0SWQpIHsKKyAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1fZmlsbFRp
bWVvdXRJZCk7CisgICAgICAgIG1fZmlsbFRpbWVvdXRJZCA9IDA7CisgICAgfQorCiAgICAgaWYg
KG1fdm9sdW1lSWRsZUlkKSB7CiAgICAgICAgIGdfc291cmNlX3JlbW92ZShtX3ZvbHVtZUlkbGVJ
ZCk7CiAgICAgICAgIG1fdm9sdW1lSWRsZUlkID0gLTE7CkBAIC0zMDEsNyArMzQ5LDcgQEAgdm9p
ZCBNZWRpYVBsYXllclByaXZhdGU6OmxvYWQoY29uc3QgU3RyaW5nJiB1cmwpCiAgICAgICAgIG1f
cGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOwogICAgIH0KIAotICAgIGNyZWF0ZUdTVFBsYXlC
aW4odXJsKTsKKyAgICBnX29iamVjdF9zZXQobV9wbGF5QmluLCAidXJpIiwgdXJsLnV0ZjgoKS5k
YXRhKCksIE5VTEwpOwogICAgIHBhdXNlKCk7CiB9CiAKQEAgLTU2OSwxNiArNjE3LDg2IEBAIFBh
c3NSZWZQdHI8VGltZVJhbmdlcz4gTWVkaWFQbGF5ZXJQcml2YXRlOjpidWZmZXJlZCgpIGNvbnN0
CiAgICAgcmV0dXJuIHRpbWVSYW5nZXMucmVsZWFzZSgpOwogfQogCit2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZTo6cHJvY2Vzc0J1ZmZlcmluZ1N0YXRzKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCit7Cisg
ICAgR3N0QnVmZmVyaW5nTW9kZSBtb2RlOworCisgICAgZ3N0X21lc3NhZ2VfcGFyc2VfYnVmZmVy
aW5nX3N0YXRzKG1lc3NhZ2UsICZtb2RlLCAwLCAwLCAwKTsKKyAgICBpZiAobW9kZSAhPSBHU1Rf
QlVGRkVSSU5HX0RPV05MT0FEKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fc3RhcnRl
ZEJ1ZmZlcmluZykgeworICAgICAgICBtX3N0YXJ0ZWRCdWZmZXJpbmcgPSB0cnVlOworCisgICAg
ICAgIGlmIChtX2ZpbGxUaW1lb3V0SWQgPiAwKQorICAgICAgICAgICAgZ19zb3VyY2VfcmVtb3Zl
KG1fZmlsbFRpbWVvdXRJZCk7CisKKyAgICAgICAgbV9maWxsVGltZW91dElkID0gZ190aW1lb3V0
X2FkZCgyMDAsIChHU291cmNlRnVuYykgYnVmZmVyaW5nVGltZW91dENhbGxiYWNrLCB0aGlzKTsK
KyAgICB9Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpxdWVyeUJ1ZmZlcmluZ1N0YXRz
KCkKK3sKKyAgICBHc3RRdWVyeSogcXVlcnkgPSBnc3RfcXVlcnlfbmV3X2J1ZmZlcmluZyhHU1Rf
Rk9STUFUX1BFUkNFTlQpOworCisgICAgaWYgKGdzdF9lbGVtZW50X3F1ZXJ5KG1fcGxheUJpbiwg
cXVlcnkpKSB7CisgICAgICAgIGdpbnQ2NCBzdGFydCwgc3RvcDsKKworICAgICAgICBnc3RfcXVl
cnlfcGFyc2VfYnVmZmVyaW5nX3JhbmdlKHF1ZXJ5LCAwLCAmc3RhcnQsICZzdG9wLCAwKTsKKwor
ICAgICAgICBpZiAoc3RvcCAhPSAtMSkKKyAgICAgICAgICAgIG1fZmlsbFN0YXR1cyA9IDEwMC4w
ICogc3RvcCAvIEdTVF9GT1JNQVRfUEVSQ0VOVF9NQVg7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIG1fZmlsbFN0YXR1cyA9IDEwMC4wOworCisgICAgICAgIExPR19WRVJCT1NFKE1lZGlhLCAi
RG93bmxvYWQgYnVmZmVyIGZpbGxlZCB1cCB0byAlZiUlIiwgbV9maWxsU3RhdHVzKTsKKworICAg
ICAgICBpZiAoIW1fbWVkaWFEdXJhdGlvbikKKyAgICAgICAgICAgIGR1cmF0aW9uQ2hhbmdlZCgp
OworCisgICAgICAgIC8vIFVwZGF0ZSBtYXhUaW1lTG9hZGVkIG9ubHkgaWYgdGhlIG1lZGlhIGR1
cmF0aW9uIGlzCisgICAgICAgIC8vIGF2YWlsYWJsZS4gT3RoZXJ3aXNlIHdlIGNhbid0IGNvbXB1
dGUgaXQuCisgICAgICAgIGlmIChtX21lZGlhRHVyYXRpb24pIHsKKyAgICAgICAgICAgIG1fbWF4
VGltZUxvYWRlZCA9IHN0YXRpY19jYXN0PGZsb2F0PigobV9maWxsU3RhdHVzICogbV9tZWRpYUR1
cmF0aW9uKSAvIDEwMC4wKTsKKyAgICAgICAgICAgIExPR19WRVJCT1NFKE1lZGlhLCAiVXBkYXRl
ZCBtYXhUaW1lTG9hZGVkOiAlZiIsIG1fbWF4VGltZUxvYWRlZCk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAobV9maWxsU3RhdHVzID09IDEwMC4wKSB7CisgICAgICAgICAgICAvLyBCdWZmZXJp
bmcgaXMgZG9uZSwgcmVtb3ZlIHRoZSBmaWxsIHNvdXJjZSBmcm9tIHRoZSBtYWluIGxvb3AuCisg
ICAgICAgICAgICBtX2ZpbGxUaW1lb3V0SWQgPSAwOworCisgICAgICAgICAgICAvLyBNZWRpYSBp
cyBub3cgZnVsbHkgbG9hZGVkLiBJdCB3aWxsIHBsYXkgZXZlbiBpZiBuZXR3b3JrCisgICAgICAg
ICAgICAvLyBjb25uZWN0aW9uIGlzIGN1dC4KKyAgICAgICAgICAgIHVwZGF0ZVN0YXRlcygpOwor
CisgICAgICAgICAgICBnc3RfcXVlcnlfdW5yZWYocXVlcnkpOworICAgICAgICAgICAgcmV0dXJu
IEZBTFNFOworICAgICAgICB9CisgICAgICAgIHVwZGF0ZVN0YXRlcygpOworICAgIH0KKworICAg
IGdzdF9xdWVyeV91bnJlZihxdWVyeSk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlOjp1cGRhdGVEb3dubG9hZExvY2F0aW9uKGdjaGFyKiBsb2NhdGlvbikK
K3sKKyAgICBpZiAobV9kb3dubG9hZEZpbGVuYW1lKQorICAgICAgICBnX2ZyZWUobV9kb3dubG9h
ZEZpbGVuYW1lKTsKKyAgICBMT0dfVkVSQk9TRShNZWRpYSwgIkRvd25sb2FkIGZpbGVuYW1lOiAl
cyIsIGxvY2F0aW9uKTsKKyAgICBtX2Rvd25sb2FkRmlsZW5hbWUgPSBsb2NhdGlvbjsKK30KKwog
ZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjptYXhUaW1lU2Vla2FibGUoKSBjb25zdAogewogICAg
IGlmIChtX2Vycm9yT2NjdXJlZCkKICAgICAgICAgcmV0dXJuIDAuMDsKIAotICAgIC8vIFRPRE8K
ICAgICBMT0dfVkVSQk9TRShNZWRpYSwgIm1heFRpbWVTZWVrYWJsZSIpOwotICAgIGlmIChtX2lz
U3RyZWFtaW5nKQotICAgICAgICByZXR1cm4gbnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0
eSgpOwogICAgIC8vIGluZmluaXRlIGR1cmF0aW9uIG1lYW5zIGxpdmUgc3RyZWFtCisgICAgaWYg
KGlzaW5mKGR1cmF0aW9uKCkpKQorICAgICAgICByZXR1cm4gMC4wOworCiAgICAgcmV0dXJuIG1h
eFRpbWVMb2FkZWQoKTsKIH0KIApAQCAtNTg3LDI5ICs3MDUsMjggQEAgZmxvYXQgTWVkaWFQbGF5
ZXJQcml2YXRlOjptYXhUaW1lTG9hZGVkKCkgY29uc3QKICAgICBpZiAobV9lcnJvck9jY3VyZWQp
CiAgICAgICAgIHJldHVybiAwLjA7CiAKLSAgICAvLyBUT0RPCi0gICAgTE9HX1ZFUkJPU0UoTWVk
aWEsICJtYXhUaW1lTG9hZGVkIik7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
ZHVyYXRpb24oKTsKKyAgICBmbG9hdCBsb2FkZWQgPSBtX21heFRpbWVMb2FkZWQ7CisgICAgaWYg
KCFsb2FkZWQgJiYgIW1fZmlsbFRpbWVvdXRJZCkKKyAgICAgICAgbG9hZGVkID0gZHVyYXRpb24o
KTsKKyAgICBMT0dfVkVSQk9TRShNZWRpYSwgIm1heFRpbWVMb2FkZWQ6ICVmIiwgbG9hZGVkKTsK
KyAgICByZXR1cm4gbG9hZGVkOwogfQogCiB1bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGU6OmJ5
dGVzTG9hZGVkKCkgY29uc3QKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIExPR19WRVJC
T1NFKE1lZGlhLCAiYnl0ZXNMb2FkZWQiKTsKLSAgICAvKmlmICghbV9wbGF5QmluKQorICAgIGlm
ICghbV9wbGF5QmluKQogICAgICAgICByZXR1cm4gMDsKLSAgICBmbG9hdCBkdXIgPSBkdXJhdGlv
bigpOwotICAgIGZsb2F0IG1heFRpbWUgPSBtYXhUaW1lTG9hZGVkKCk7Ci0gICAgaWYgKCFkdXIp
Ci0gICAgICAgIHJldHVybiAwOyovCiAKLSAgICByZXR1cm4gMTsgLy8gdG90YWxCeXRlcygpICog
bWF4VGltZSAvIGR1cjsKKyAgICBpZiAoIW1fbWVkaWFEdXJhdGlvbikKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICB1bnNpZ25lZCBsb2FkZWQgPSB0b3RhbEJ5dGVzKCkgKiBtYXhUaW1lTG9hZGVk
KCkgLyBtX21lZGlhRHVyYXRpb247CisgICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJieXRlc0xvYWRl
ZDogJWQiLCBsb2FkZWQpOworICAgIHJldHVybiBsb2FkZWQ7CiB9CiAKIHVuc2lnbmVkIE1lZGlh
UGxheWVyUHJpdmF0ZTo6dG90YWxCeXRlcygpIGNvbnN0CiB7Ci0gICAgTE9HX1ZFUkJPU0UoTWVk
aWEsICJ0b3RhbEJ5dGVzIik7CiAgICAgaWYgKCFtX3NvdXJjZSkKICAgICAgICAgcmV0dXJuIDA7
CiAKQEAgLTYxOSw2ICs3MzYsNyBAQCB1bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGU6OnRvdGFs
Qnl0ZXMoKSBjb25zdAogICAgIEdzdEZvcm1hdCBmbXQgPSBHU1RfRk9STUFUX0JZVEVTOwogICAg
IGdpbnQ2NCBsZW5ndGggPSAwOwogICAgIGdzdF9lbGVtZW50X3F1ZXJ5X2R1cmF0aW9uKG1fc291
cmNlLCAmZm10LCAmbGVuZ3RoKTsKKyAgICBMT0dfVkVSQk9TRShNZWRpYSwgInRvdGFsQnl0ZXMg
JSIgR19HSU5UNjRfRk9STUFULCBsZW5ndGgpOwogCiAgICAgcmV0dXJuIGxlbmd0aDsKIH0KQEAg
LTY3NCw5ICs3OTIsMzMgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnVwZGF0ZVN0YXRlcygp
CiAgICAgICAgICAgICAgICAgaWYgKCFpc2luZihuZXdEdXJhdGlvbikpCiAgICAgICAgICAgICAg
ICAgICAgIG1fbWVkaWFEdXJhdGlvbiA9IG5ld0R1cmF0aW9uOwogICAgICAgICAgICAgfQotICAg
ICAgICB9IGVsc2UKKyAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VE
KQogICAgICAgICAgICAgbV9wYXVzZWQgPSB0cnVlOwogCisgICAgICAgIC8vIElzIG9uLWRpc2sg
YnVmZmVyaW5nIGluIHByb2dyZXNzPworICAgICAgICBpZiAobV9maWxsVGltZW91dElkKSB7Cisg
ICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOworICAgICAg
ICAgICAgaWYgKChtX2ZpbGxTdGF0dXMgPiAwKSAmJiAobV9yZWFkeVN0YXRlIDwgTWVkaWFQbGF5
ZXI6OkhhdmVGdXR1cmVEYXRhKSkgeworICAgICAgICAgICAgICAgIC8vIEJ1ZmZlcmluZyBoYXMg
anVzdCBzdGFydGVkLCB3ZSBzaG91bGQgbm93IGhhdmUgZW5vdWdoIGRhdGEgdG8KKyAgICAgICAg
ICAgICAgICAvLyByZXN0YXJ0IHBsYXliYWNrIGlmIGl0IHdhcyBpbnRlcm5hbGx5IHBhdXNlZCBi
eSBHU3RyZWFtZXIKKyAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6
SGF2ZUZ1dHVyZURhdGE7CisgICAgICAgICAgICAgICAgaWYgKG1fcGF1c2VkKQorICAgICAgICAg
ICAgICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9wbGF5QmluLCBHU1RfU1RBVEVfUExB
WUlORyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAobWF4VGltZUxv
YWRlZCgpID09IGR1cmF0aW9uKCkpIHsKKyAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVk
aWFQbGF5ZXI6OkxvYWRlZDsKKyAgICAgICAgICAgIGlmIChzdGF0ZSA9PSBHU1RfU1RBVEVfUkVB
RFkpCisgICAgICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3Ro
aW5nOworICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRCkKKyAg
ICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7
CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgaWYgKHN0YXRlID09IEdTVF9TVEFURV9SRUFE
WSkKKyAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhp
bmc7CisgICAgICAgICAgICBlbHNlIGlmIChtX3BhdXNlZCkKKyAgICAgICAgICAgICAgICBtX3Jl
YWR5U3RhdGUgPSBjdXJyZW50VGltZSgpIDwgbWF4VGltZUxvYWRlZCgpID8gTWVkaWFQbGF5ZXI6
OkhhdmVGdXR1cmVEYXRhIDogTWVkaWFQbGF5ZXI6OkhhdmVDdXJyZW50RGF0YTsKKwogICAgICAg
ICBpZiAobV9jaGFuZ2luZ1JhdGUpIHsKICAgICAgICAgICAgIG1fcGxheWVyLT5yYXRlQ2hhbmdl
ZCgpOwogICAgICAgICAgICAgbV9jaGFuZ2luZ1JhdGUgPSBmYWxzZTsKQEAgLTY4Nyw3ICs4Mjks
NiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6dXBkYXRlU3RhdGVzKCkKICAgICAgICAgICAg
IG1fc2Vla2luZyA9IGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgbV9uZXR3b3JrU3RhdGUg
PSBNZWRpYVBsYXllcjo6TG9hZGVkOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEdTVF9TVEFU
RV9DSEFOR0VfQVNZTkM6CiAgICAgICAgIExPR19WRVJCT1NFKE1lZGlhLCAiQXN5bmM6IFN0YXRl
OiAlcywgcGVuZGluZzogJXMiLApAQCAtMTA4MSw3ICsxMjIyLDE5IEBAIGJvb2wgTWVkaWFQbGF5
ZXJQcml2YXRlOjpzdXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25zdAogICAgIHJldHVybiB0cnVlOwog
fQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Y3JlYXRlR1NUUGxheUJpbihTdHJpbmcgdXJs
KQordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldEF1dG9idWZmZXIoYm9vbCBhdXRvQnVmZmVy
KQoreworICAgIEFTU0VSVChtX3BsYXlCaW4pOworCisgICAgR3N0UGxheUZsYWdzIGZsYWdzOwor
ICAgIGdfb2JqZWN0X2dldChtX3BsYXlCaW4sICJmbGFncyIsICZmbGFncywgTlVMTCk7CisgICAg
aWYgKGF1dG9CdWZmZXIpCisgICAgICAgIGdfb2JqZWN0X3NldChtX3BsYXlCaW4sICJmbGFncyIs
IGZsYWdzIHwgR1NUX1BMQVlfRkxBR19ET1dOTE9BRCwgTlVMTCk7CisgICAgZWxzZQorICAgICAg
ICBnX29iamVjdF9zZXQobV9wbGF5QmluLCAiZmxhZ3MiLCBmbGFncyAmIH5HU1RfUExBWV9GTEFH
X0RPV05MT0FELCBOVUxMKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmNyZWF0ZUdT
VFBsYXlCaW4oKQogewogICAgIEFTU0VSVCghbV9wbGF5QmluKTsKICAgICBtX3BsYXlCaW4gPSBn
c3RfZWxlbWVudF9mYWN0b3J5X21ha2UoInBsYXliaW4yIiwgInBsYXkiKTsKQEAgLTEwOTEsNyAr
MTI0NCwxMSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Y3JlYXRlR1NUUGxheUJpbihTdHJp
bmcgdXJsKQogICAgIGdfc2lnbmFsX2Nvbm5lY3QoYnVzLCAibWVzc2FnZSIsIEdfQ0FMTEJBQ0so
bWVkaWFQbGF5ZXJQcml2YXRlTWVzc2FnZUNhbGxiYWNrKSwgdGhpcyk7CiAgICAgZ3N0X29iamVj
dF91bnJlZihidXMpOwogCi0gICAgZ19vYmplY3Rfc2V0KG1fcGxheUJpbiwgInVyaSIsIHVybC51
dGY4KCkuZGF0YSgpLCBOVUxMKTsKKyAgICAvLyB0ZW1wLWxvY2F0aW9uIGlzIGEgcHJvcGVydHkg
b2YgcXVldWUyLiBQbGF5YmluMiB3aWxsCisgICAgLy8gY29uZmlndXJlIGl0IGlmIHRoZSBtZWRp
YSBjYW4gYmUgYnVmZmVyZWQgaW4gZGlzay4KKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fcGxheUJp
biwgImRlZXAtbm90aWZ5Ojp0ZW1wLWxvY2F0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgIEdf
Q0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRlVGVtcExvY2F0aW9uQ2hhbmdlZENhbGxiYWNrKSwK
KyAgICAgICAgICAgICAgICAgICAgIHRoaXMpOwogCiAgICAgZ19zaWduYWxfY29ubmVjdChtX3Bs
YXlCaW4sICJub3RpZnk6OnZvbHVtZSIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRlVm9s
dW1lQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CiAgICAgZ19zaWduYWxfY29ubmVjdChtX3BsYXlC
aW4sICJub3RpZnk6OnNvdXJjZSIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRlU291cmNl
Q2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CkBAIC0xMTEwLDcgKzEyNjcsNyBAQCB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZTo6Y3JlYXRlR1NUUGxheUJpbihTdHJpbmcgdXJsKQogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgbV9mcHNTaW5rID0gMDsKICAgICAgICAgICAgIGdfb2JqZWN0X3Nl
dChtX3BsYXlCaW4sICJ2aWRlby1zaW5rIiwgbV92aWRlb1NpbmssIE5VTEwpOwotICAgICAgICAg
ICAgTE9HKE1lZGlhLCAiQ2FuJ3QgZGlzcGxheSBGUFMgc3RhdGlzdGljcywgeW91IG5lZWQgZ3N0
LXBsdWdpbnMtYmFkID49IDAuMTAuMTgiKTsKKyAgICAgICAgICAgIExPR19WRVJCT1NFKE1lZGlh
LCAiQ2FuJ3QgZGlzcGxheSBGUFMgc3RhdGlzdGljcywgeW91IG5lZWQgZ3N0LXBsdWdpbnMtYmFk
ID49IDAuMTAuMTgiKTsKICAgICAgICAgfQogICAgIH0gZWxzZQogICAgICAgICBnX29iamVjdF9z
ZXQobV9wbGF5QmluLCAidmlkZW8tc2luayIsIG1fdmlkZW9TaW5rLCBOVUxMKTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyLmgKaW5kZXggZWM1NWIyOS4uYzFhOGJlZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ndGsvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
LmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDkgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEg
THRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tl
ciA8YWxwQGF0b2tlci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgSWdhbGlhIFMu
TAogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC03OSw2ICs4MCw4IEBAIGNsYXNzIE1lZGlhUGxheWVy
UHJpdmF0ZSA6IHB1YmxpYyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UgewogICAgICAgICAg
ICAgdm9pZCBzZXRWb2x1bWUoZmxvYXQpOwogICAgICAgICAgICAgdm9pZCB2b2x1bWVDaGFuZ2Vk
KCk7CiAKKyAgICAgICAgICAgIHZvaWQgc2V0QXV0b2J1ZmZlcihib29sKTsKKwogICAgICAgICAg
ICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBuZXR3b3JrU3RhdGUoKSBjb25zdDsKICAgICAg
ICAgICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdDsKIApAQCAt
MTA2LDYgKzEwOSw5IEBAIGNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZSA6IHB1YmxpYyBNZWRpYVBs
YXllclByaXZhdGVJbnRlcmZhY2UgewogICAgICAgICAgICAgYm9vbCBzdXBwb3J0c0Z1bGxzY3Jl
ZW4oKSBjb25zdDsKIAogICAgICAgICAgICAgYm9vbCBwaXBlbGluZVJlc2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9yZXNldFBpcGVsaW5lOyB9CisgICAgICAgICAgICB2b2lkIHByb2Nlc3NCdWZmZXJp
bmdTdGF0cyhHc3RNZXNzYWdlKiBtZXNzYWdlKTsKKyAgICAgICAgICAgIGJvb2wgcXVlcnlCdWZm
ZXJpbmdTdGF0cygpOworICAgICAgICAgICAgdm9pZCB1cGRhdGVEb3dubG9hZExvY2F0aW9uKGdj
aGFyKik7CiAKICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgIE1lZGlhUGxheWVyUHJpdmF0
ZShNZWRpYVBsYXllciopOwpAQCAtMTIxLDcgKzEyNyw3IEBAIGNsYXNzIE1lZGlhUGxheWVyUHJp
dmF0ZSA6IHB1YmxpYyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UgewogICAgICAgICAgICAg
ZmxvYXQgbWF4VGltZUxvYWRlZCgpIGNvbnN0OwogICAgICAgICAgICAgdm9pZCBzdGFydEVuZFBv
aW50VGltZXJJZk5lZWRlZCgpOwogCi0gICAgICAgICAgICB2b2lkIGNyZWF0ZUdTVFBsYXlCaW4o
U3RyaW5nIHVybCk7CisgICAgICAgICAgICB2b2lkIGNyZWF0ZUdTVFBsYXlCaW4oKTsKICAgICAg
ICAgICAgIGJvb2wgY2hhbmdlUGlwZWxpbmVTdGF0ZShHc3RTdGF0ZSBzdGF0ZSk7CiAKICAgICAg
ICAgcHJpdmF0ZToKQEAgLTE0OSw2ICsxNTUsMTEgQEAgY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRl
IDogcHVibGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSB7CiAgICAgICAgICAgICBib29s
IG1fZXJyb3JPY2N1cmVkOwogICAgICAgICAgICAgZ3VpbnQgbV92b2x1bWVJZGxlSWQ7CiAgICAg
ICAgICAgICBnZmxvYXQgbV9tZWRpYUR1cmF0aW9uOworICAgICAgICAgICAgYm9vbCBtX3N0YXJ0
ZWRCdWZmZXJpbmc7CisgICAgICAgICAgICBndWludCBtX2ZpbGxUaW1lb3V0SWQ7CisgICAgICAg
ICAgICBmbG9hdCBtX21heFRpbWVMb2FkZWQ7CisgICAgICAgICAgICBnY2hhciogbV9kb3dubG9h
ZEZpbGVuYW1lOworICAgICAgICAgICAgZ2RvdWJsZSBtX2ZpbGxTdGF0dXM7CiAgICAgfTsKIH0K
IAotLSAKMS42LjMuMw==
</data>
<flag name="review"
          id="29956"
          type_id="1"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47849</attachid>
            <date>2010-02-01 09:34:11 -0800</date>
            <delta_ts>2010-02-01 10:32:43 -0800</delta_ts>
            <desc>initial support for on-disk buffering of videos</desc>
            <filename>initial-support-for-on-disk-buffering-of-videos.patch</filename>
            <type>text/plain</type>
            <size>16170</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSBkYTYwN2IyYjNiMDBjYzAwYzY1ZTBmZjUwNjY1NjBlNDdmMzZkNTBhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBUdWUsIDUgSmFuIDIwMTAgMTY6Mjk6NTYgKzAxMDAKU3ViamVjdDogW1BBVENIXSBp
bml0aWFsIHN1cHBvcnQgZm9yIG9uLWRpc2sgYnVmZmVyaW5nIG9mIHZpZGVvcwoKLS0tCiBXZWJD
b3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzEgKysr
CiAuLi4vZ3JhcGhpY3MvZ3RrL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgICB8ICAy
MDkgKysrKysrKysrKysrKysrKystLS0KIC4uLi9ncmFwaGljcy9ndGsvTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyLmggICAgIHwgICAxMyArKy0KIDMgZmlsZXMgY2hhbmdlZCwgMjI2IGluc2Vy
dGlvbnMoKyksIDI3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9n
IGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzFiMjdmMy4uMDBhNGU4MyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNCBA
QAorMjAxMC0wMS0wNyAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dTdHJlYW1l
cl0gU2hvdWxkIGhhbmRsZSBCVUZGRVJJTkcgbWVzc2FnZXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwMDA0CisKKyAgICAgICAgSW5pdGlhbCBzdXBw
b3J0IGZvciBvbi1kaXNrIGJ1ZmZlcmluZyBvZiB2aWRlb3MuIFRoaXMgd29ya3Mgb25seQorICAg
ICAgICBmb3IgUXVpY2t0aW1lIGFuZCBmbHYgdGhvdWdoLgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjptZWRpYVBsYXllclByaXZhdGVNZXNzYWdlQ2FsbGJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6bWVkaWFQbGF5ZXJQcml2YXRlVGVtcExvY2F0aW9uQ2hhbmdlZENhbGxiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OmJ1ZmZlcmluZ1RpbWVvdXRDYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGU6Ok1lZGlhUGxheWVyUHJpdmF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6On5NZWRpYVBsYXllclByaXZhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZTo6ZHVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlOjpwcm9jZXNzQnVmZmVyaW5nU3RhdHMpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlOjpxdWVyeUJ1ZmZlcmluZ1N0YXRzKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6dXBkYXRlRG93bmxvYWRMb2NhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6Om1heFRpbWVTZWVrYWJsZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6Om1heFRpbWVMb2FkZWQpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpieXRlc0xvYWRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnRvdGFsQnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlOjp1cGRhdGVTdGF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlOjpkdXJhdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlOjpzZXRBdXRvYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZTo6Y3JlYXRlR1NUUGxheUJpbik6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3RrL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oOgorCiAyMDEwLTAxLTI5ICBQ
aGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBFcmljIENhcmxzb24uCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2d0ay9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ndGsvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAppbmRleCBkOTZjMWUz
Li44NGEyYTMwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3RrL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKQEAgLTMsNiArMyw3IEBACiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDcgQ29sbGFib3JhIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KICAqIENv
cHlyaWdodCAoQykgMjAwOSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgSWdhbGlhIFMuTAogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC01Myw2ICs1NCwyMSBAQAogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJ2aWV3Lmg+CiAj
aW5jbHVkZSA8d3RmL2d0ay9HT3duUHRyLmg+CiAKKy8vIEdzdFBsYXlGbGFncyBmbGFncyBmcm9t
IHBsYXliaW4yLiBJdCBpcyB0aGUgcG9saWN5IG9mIEdTdHJlYW1lciB0bworLy8gbm90IHB1Ymxp
Y2x5IGV4cG9zZSBlbGVtZW50LXNwZWNpZmljIGVudW1zLiBUaGF0J3Mgd2h5IHRoaXMKKy8vIEdz
dFBsYXlGbGFncyBlbnVtIGhhcyBiZWVuIGNvcGllZCBoZXJlLgordHlwZWRlZiBlbnVtIHsKKyAg
ICBHU1RfUExBWV9GTEFHX1ZJREVPICAgICAgICAgPSAweDAwMDAwMDAxLAorICAgIEdTVF9QTEFZ
X0ZMQUdfQVVESU8gICAgICAgICA9IDB4MDAwMDAwMDIsCisgICAgR1NUX1BMQVlfRkxBR19URVhU
ICAgICAgICAgID0gMHgwMDAwMDAwNCwKKyAgICBHU1RfUExBWV9GTEFHX1ZJUyAgICAgICAgICAg
PSAweDAwMDAwMDA4LAorICAgIEdTVF9QTEFZX0ZMQUdfU09GVF9WT0xVTUUgICA9IDB4MDAwMDAw
MTAsCisgICAgR1NUX1BMQVlfRkxBR19OQVRJVkVfQVVESU8gID0gMHgwMDAwMDAyMCwKKyAgICBH
U1RfUExBWV9GTEFHX05BVElWRV9WSURFTyAgPSAweDAwMDAwMDQwLAorICAgIEdTVF9QTEFZX0ZM
QUdfRE9XTkxPQUQgICAgICA9IDB4MDAwMDAwODAsCisgICAgR1NUX1BMQVlfRkxBR19CVUZGRVJJ
TkcgICAgID0gMHgwMDAwMDAxMDAKK30gR3N0UGxheUZsYWdzOworCiB1c2luZyBuYW1lc3BhY2Ug
c3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02Myw3ICs3OSw2IEBAIGdib29sZWFuIG1l
ZGlhUGxheWVyUHJpdmF0ZU1lc3NhZ2VDYWxsYmFjayhHc3RCdXMqIGJ1cywgR3N0TWVzc2FnZSog
bWVzc2FnZSwgZ3BvCiAgICAgR093blB0cjxnY2hhcj4gZGVidWc7CiAgICAgTWVkaWFQbGF5ZXI6
Ok5ldHdvcmtTdGF0ZSBlcnJvcjsKICAgICBNZWRpYVBsYXllclByaXZhdGUqIG1wID0gcmVpbnRl
cnByZXRfY2FzdDxNZWRpYVBsYXllclByaXZhdGUqPihkYXRhKTsKLSAgICBnaW50IHBlcmNlbnQg
PSAwOwogICAgIGJvb2wgaXNzdWVFcnJvciA9IHRydWU7CiAgICAgYm9vbCBhdHRlbXB0TmV4dExv
Y2F0aW9uID0gZmFsc2U7CiAKQEAgLTExMyw4ICsxMjgsNyBAQCBnYm9vbGVhbiBtZWRpYVBsYXll
clByaXZhdGVNZXNzYWdlQ2FsbGJhY2soR3N0QnVzKiBidXMsIEdzdE1lc3NhZ2UqIG1lc3NhZ2Us
IGdwbwogICAgICAgICBtcC0+dXBkYXRlU3RhdGVzKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgR1NUX01FU1NBR0VfQlVGRkVSSU5HOgotICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9idWZm
ZXJpbmcobWVzc2FnZSwgJnBlcmNlbnQpOwotICAgICAgICBMT0dfVkVSQk9TRShNZWRpYSwgIkJ1
ZmZlcmluZyAlZCIsIHBlcmNlbnQpOworICAgICAgICBtcC0+cHJvY2Vzc0J1ZmZlcmluZ1N0YXRz
KG1lc3NhZ2UpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEdTVF9NRVNTQUdFX0RVUkFUSU9O
OgogICAgICAgICBMT0dfVkVSQk9TRShNZWRpYSwgIkR1cmF0aW9uIGNoYW5nZWQiKTsKQEAgLTE3
OSw2ICsxOTMsMTggQEAgdm9pZCBtZWRpYVBsYXllclByaXZhdGVTb3VyY2VDaGFuZ2VkQ2FsbGJh
Y2soR09iamVjdCAqb2JqZWN0LCBHUGFyYW1TcGVjICpwc3BlYywKICAgICBnc3Rfb2JqZWN0X3Vu
cmVmKGVsZW1lbnQpOwogfQogCit2b2lkIG1lZGlhUGxheWVyUHJpdmF0ZVRlbXBMb2NhdGlvbkNo
YW5nZWRDYWxsYmFjayhHc3RPYmplY3QqIHBsYXlCaW4sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RPYmplY3QqIHF1ZXVlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BhcmFtU3BlYyogcHJv
cGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBncG9pbnRlciBkYXRhKQoreworICAgIGdjaGFyKiBsb2NhdGlvbjsKKyAgICBNZWRpYVBsYXll
clByaXZhdGUqIG1wID0gcmVpbnRlcnByZXRfY2FzdDxNZWRpYVBsYXllclByaXZhdGUqPihkYXRh
KTsKKworICAgIGdfb2JqZWN0X2dldChxdWV1ZSwgInRlbXAtbG9jYXRpb24iLCAmbG9jYXRpb24s
IE5VTEwpOworICAgIG1wLT51cGRhdGVEb3dubG9hZExvY2F0aW9uKGxvY2F0aW9uKTsKK30KKwog
dm9pZCBtZWRpYVBsYXllclByaXZhdGVWb2x1bWVDaGFuZ2VkQ2FsbGJhY2soR09iamVjdCAqZWxl
bWVudCwgR1BhcmFtU3BlYyAqcHNwZWMsIGdwb2ludGVyIGRhdGEpCiB7CiAgICAgLy8gVGhpcyBp
cyBjYWxsZWQgd2hlbiBwbGF5YmluIHJlY2VpdmVzIHRoZSBub3RpZnk6OnZvbHVtZSBzaWduYWwu
CkBAIC0yMDcsNiArMjMzLDEyIEBAIGdib29sZWFuIG5vdGlmeU11dGVJZGxlQ2FsbGJhY2soZ3Bv
aW50ZXIgZGF0YSkKICAgICByZXR1cm4gRkFMU0U7CiB9CiAKK2dib29sZWFuIGJ1ZmZlcmluZ1Rp
bWVvdXRDYWxsYmFjayhncG9pbnRlciBkYXRhKQoreworICAgIE1lZGlhUGxheWVyUHJpdmF0ZSog
bXAgPSByZWludGVycHJldF9jYXN0PE1lZGlhUGxheWVyUHJpdmF0ZSo+KGRhdGEpOworICAgIHJl
dHVybiBtcC0+cXVlcnlCdWZmZXJpbmdTdGF0cygpOworfQorCiBzdGF0aWMgZmxvYXQgcGxheWJh
Y2tQb3NpdGlvbihHc3RFbGVtZW50KiBwbGF5YmluKQogewogCkBAIC0zMTAsMTIgKzM0MiwyOCBA
QCBNZWRpYVBsYXllclByaXZhdGU6Ok1lZGlhUGxheWVyUHJpdmF0ZShNZWRpYVBsYXllciogcGxh
eWVyKQogICAgICwgbV92b2x1bWVJZGxlSWQoMCkKICAgICAsIG1fbWVkaWFEdXJhdGlvbigwLjAp
CiAgICAgLCBtX211dGVJZGxlSWQoMCkKKyAgICAsIG1fc3RhcnRlZEJ1ZmZlcmluZyhmYWxzZSkK
KyAgICAsIG1fZmlsbFRpbWVvdXRJZCgwKQorICAgICwgbV9tYXhUaW1lTG9hZGVkKDAuMCkKKyAg
ICAsIG1fZG93bmxvYWRGaWxlbmFtZSgwKQorICAgICwgbV9maWxsU3RhdHVzKDAuMCkKIHsKLSAg
ICBkb0dzdEluaXQoKTsKKyAgICBpZiAoZG9Hc3RJbml0KCkpCisgICAgICAgIGNyZWF0ZUdTVFBs
YXlCaW4oKTsKIH0KIAogTWVkaWFQbGF5ZXJQcml2YXRlOjp+TWVkaWFQbGF5ZXJQcml2YXRlKCkK
IHsKKyAgICBpZiAobV9kb3dubG9hZEZpbGVuYW1lKSB7CisgICAgICAgIGdfZnJlZShtX2Rvd25s
b2FkRmlsZW5hbWUpOworICAgICAgICBtX2Rvd25sb2FkRmlsZW5hbWUgPSAwOworICAgIH0KKwor
ICAgIGlmIChtX2ZpbGxUaW1lb3V0SWQpIHsKKyAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1fZmls
bFRpbWVvdXRJZCk7CisgICAgICAgIG1fZmlsbFRpbWVvdXRJZCA9IDA7CisgICAgfQorCiAgICAg
aWYgKG1fdm9sdW1lSWRsZUlkKSB7CiAgICAgICAgIGdfc291cmNlX3JlbW92ZShtX3ZvbHVtZUlk
bGVJZCk7CiAgICAgICAgIG1fdm9sdW1lSWRsZUlkID0gMDsKQEAgLTM2OCw3ICs0MTYsNyBAQCB2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6bG9hZChjb25zdCBTdHJpbmcmIHVybCkKICAgICAgICAg
bV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7CiAgICAgfQogCi0gICAgY3JlYXRlR1NUUGxh
eUJpbih1cmwpOworICAgIGdfb2JqZWN0X3NldChtX3BsYXlCaW4sICJ1cmkiLCB1cmwudXRmOCgp
LmRhdGEoKSwgTlVMTCk7CiAgICAgcGF1c2UoKTsKIH0KIApAQCAtNjQwLDE2ICs2ODgsODYgQEAg
UGFzc1JlZlB0cjxUaW1lUmFuZ2VzPiBNZWRpYVBsYXllclByaXZhdGU6OmJ1ZmZlcmVkKCkgY29u
c3QKICAgICByZXR1cm4gdGltZVJhbmdlcy5yZWxlYXNlKCk7CiB9CiAKK3ZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlOjpwcm9jZXNzQnVmZmVyaW5nU3RhdHMoR3N0TWVzc2FnZSogbWVzc2FnZSkKK3sK
KyAgICBHc3RCdWZmZXJpbmdNb2RlIG1vZGU7CisKKyAgICBnc3RfbWVzc2FnZV9wYXJzZV9idWZm
ZXJpbmdfc3RhdHMobWVzc2FnZSwgJm1vZGUsIDAsIDAsIDApOworICAgIGlmIChtb2RlICE9IEdT
VF9CVUZGRVJJTkdfRE9XTkxPQUQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9zdGFy
dGVkQnVmZmVyaW5nKSB7CisgICAgICAgIG1fc3RhcnRlZEJ1ZmZlcmluZyA9IHRydWU7CisKKyAg
ICAgICAgaWYgKG1fZmlsbFRpbWVvdXRJZCA+IDApCisgICAgICAgICAgICBnX3NvdXJjZV9yZW1v
dmUobV9maWxsVGltZW91dElkKTsKKworICAgICAgICBtX2ZpbGxUaW1lb3V0SWQgPSBnX3RpbWVv
dXRfYWRkKDIwMCwgKEdTb3VyY2VGdW5jKSBidWZmZXJpbmdUaW1lb3V0Q2FsbGJhY2ssIHRoaXMp
OworICAgIH0KK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGU6OnF1ZXJ5QnVmZmVyaW5nU3Rh
dHMoKQoreworICAgIEdzdFF1ZXJ5KiBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfYnVmZmVyaW5nKEdT
VF9GT1JNQVRfUEVSQ0VOVCk7CisKKyAgICBpZiAoIWdzdF9lbGVtZW50X3F1ZXJ5KG1fcGxheUJp
biwgcXVlcnkpKSB7CisgICAgICAgIGdzdF9xdWVyeV91bnJlZihxdWVyeSk7CisgICAgICAgIHJl
dHVybiBUUlVFOworICAgIH0KKworICAgIGdpbnQ2NCBzdGFydCwgc3RvcDsKKworICAgIGdzdF9x
dWVyeV9wYXJzZV9idWZmZXJpbmdfcmFuZ2UocXVlcnksIDAsICZzdGFydCwgJnN0b3AsIDApOwor
ICAgIGdzdF9xdWVyeV91bnJlZihxdWVyeSk7CisKKyAgICBpZiAoc3RvcCAhPSAtMSkKKyAgICAg
ICAgbV9maWxsU3RhdHVzID0gMTAwLjAgKiBzdG9wIC8gR1NUX0ZPUk1BVF9QRVJDRU5UX01BWDsK
KyAgICBlbHNlCisgICAgICAgIG1fZmlsbFN0YXR1cyA9IDEwMC4wOworCisgICAgTE9HX1ZFUkJP
U0UoTWVkaWEsICJEb3dubG9hZCBidWZmZXIgZmlsbGVkIHVwIHRvICVmJSUiLCBtX2ZpbGxTdGF0
dXMpOworCisgICAgaWYgKCFtX21lZGlhRHVyYXRpb24pCisgICAgICAgIGR1cmF0aW9uQ2hhbmdl
ZCgpOworCisgICAgLy8gVXBkYXRlIG1heFRpbWVMb2FkZWQgb25seSBpZiB0aGUgbWVkaWEgZHVy
YXRpb24gaXMKKyAgICAvLyBhdmFpbGFibGUuIE90aGVyd2lzZSB3ZSBjYW4ndCBjb21wdXRlIGl0
LgorICAgIGlmIChtX21lZGlhRHVyYXRpb24pIHsKKyAgICAgICAgbV9tYXhUaW1lTG9hZGVkID0g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KChtX2ZpbGxTdGF0dXMgKiBtX21lZGlhRHVyYXRpb24pIC8gMTAw
LjApOworICAgICAgICBMT0dfVkVSQk9TRShNZWRpYSwgIlVwZGF0ZWQgbWF4VGltZUxvYWRlZDog
JWYiLCBtX21heFRpbWVMb2FkZWQpOworICAgIH0KKworICAgIGJvb2wgY29udGludWVTdGF0c0dh
dGhlcmluZyA9IFRSVUU7CisgICAgLy8gTWVkaWEgaXMgbm93IGZ1bGx5IGxvYWRlZC4gSXQgd2ls
bCBwbGF5IGV2ZW4gaWYgbmV0d29yaworICAgIC8vIGNvbm5lY3Rpb24gaXMgY3V0LgorICAgIGlm
IChtX2ZpbGxTdGF0dXMgPT0gMTAwLjApIHsKKyAgICAgICAgLy8gQnVmZmVyaW5nIGlzIGRvbmUs
IHJlbW92ZSB0aGUgZmlsbCBzb3VyY2UgZnJvbSB0aGUgbWFpbiBsb29wLgorICAgICAgICBtX2Zp
bGxUaW1lb3V0SWQgPSAwOworICAgICAgICBjb250aW51ZVN0YXRzR2F0aGVyaW5nID0gRkFMU0U7
CisgICAgfQorCisgICAgdXBkYXRlU3RhdGVzKCk7CisgICAgcmV0dXJuIGNvbnRpbnVlU3RhdHNH
YXRoZXJpbmc7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjp1cGRhdGVEb3dubG9hZExv
Y2F0aW9uKGdjaGFyKiBsb2NhdGlvbikKK3sKKyAgICBpZiAobV9kb3dubG9hZEZpbGVuYW1lKQor
ICAgICAgICBnX2ZyZWUobV9kb3dubG9hZEZpbGVuYW1lKTsKKyAgICBMT0dfVkVSQk9TRShNZWRp
YSwgIkRvd25sb2FkIGZpbGVuYW1lOiAlcyIsIGxvY2F0aW9uKTsKKyAgICBtX2Rvd25sb2FkRmls
ZW5hbWUgPSBsb2NhdGlvbjsKK30KKwogZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjptYXhUaW1l
U2Vla2FibGUoKSBjb25zdAogewogICAgIGlmIChtX2Vycm9yT2NjdXJlZCkKICAgICAgICAgcmV0
dXJuIDAuMDsKIAotICAgIC8vIFRPRE8KICAgICBMT0dfVkVSQk9TRShNZWRpYSwgIm1heFRpbWVT
ZWVrYWJsZSIpOwotICAgIGlmIChtX2lzU3RyZWFtaW5nKQotICAgICAgICByZXR1cm4gbnVtZXJp
Y19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpOwogICAgIC8vIGluZmluaXRlIGR1cmF0aW9uIG1l
YW5zIGxpdmUgc3RyZWFtCisgICAgaWYgKGlzaW5mKGR1cmF0aW9uKCkpKQorICAgICAgICByZXR1
cm4gMC4wOworCiAgICAgcmV0dXJuIG1heFRpbWVMb2FkZWQoKTsKIH0KIApAQCAtNjU4LDI5ICs3
NzYsMjggQEAgZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjptYXhUaW1lTG9hZGVkKCkgY29uc3QK
ICAgICBpZiAobV9lcnJvck9jY3VyZWQpCiAgICAgICAgIHJldHVybiAwLjA7CiAKLSAgICAvLyBU
T0RPCi0gICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJtYXhUaW1lTG9hZGVkIik7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZHVyYXRpb24oKTsKKyAgICBmbG9hdCBsb2FkZWQgPSBt
X21heFRpbWVMb2FkZWQ7CisgICAgaWYgKCFsb2FkZWQgJiYgIW1fZmlsbFRpbWVvdXRJZCkKKyAg
ICAgICAgbG9hZGVkID0gZHVyYXRpb24oKTsKKyAgICBMT0dfVkVSQk9TRShNZWRpYSwgIm1heFRp
bWVMb2FkZWQ6ICVmIiwgbG9hZGVkKTsKKyAgICByZXR1cm4gbG9hZGVkOwogfQogCiB1bnNpZ25l
ZCBNZWRpYVBsYXllclByaXZhdGU6OmJ5dGVzTG9hZGVkKCkgY29uc3QKIHsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIExPR19WRVJCT1NFKE1lZGlhLCAiYnl0ZXNMb2FkZWQiKTsKLSAgICAv
KmlmICghbV9wbGF5QmluKQorICAgIGlmICghbV9wbGF5QmluKQogICAgICAgICByZXR1cm4gMDsK
LSAgICBmbG9hdCBkdXIgPSBkdXJhdGlvbigpOwotICAgIGZsb2F0IG1heFRpbWUgPSBtYXhUaW1l
TG9hZGVkKCk7Ci0gICAgaWYgKCFkdXIpCi0gICAgICAgIHJldHVybiAwOyovCiAKLSAgICByZXR1
cm4gMTsgLy8gdG90YWxCeXRlcygpICogbWF4VGltZSAvIGR1cjsKKyAgICBpZiAoIW1fbWVkaWFE
dXJhdGlvbikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICB1bnNpZ25lZCBsb2FkZWQgPSB0b3Rh
bEJ5dGVzKCkgKiBtYXhUaW1lTG9hZGVkKCkgLyBtX21lZGlhRHVyYXRpb247CisgICAgTE9HX1ZF
UkJPU0UoTWVkaWEsICJieXRlc0xvYWRlZDogJWQiLCBsb2FkZWQpOworICAgIHJldHVybiBsb2Fk
ZWQ7CiB9CiAKIHVuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZTo6dG90YWxCeXRlcygpIGNvbnN0
CiB7Ci0gICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJ0b3RhbEJ5dGVzIik7CiAgICAgaWYgKCFtX3Nv
dXJjZSkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTY5MCw2ICs4MDcsNyBAQCB1bnNpZ25lZCBN
ZWRpYVBsYXllclByaXZhdGU6OnRvdGFsQnl0ZXMoKSBjb25zdAogICAgIEdzdEZvcm1hdCBmbXQg
PSBHU1RfRk9STUFUX0JZVEVTOwogICAgIGdpbnQ2NCBsZW5ndGggPSAwOwogICAgIGdzdF9lbGVt
ZW50X3F1ZXJ5X2R1cmF0aW9uKG1fc291cmNlLCAmZm10LCAmbGVuZ3RoKTsKKyAgICBMT0dfVkVS
Qk9TRShNZWRpYSwgInRvdGFsQnl0ZXMgJSIgR19HSU5UNjRfRk9STUFULCBsZW5ndGgpOwogCiAg
ICAgcmV0dXJuIGxlbmd0aDsKIH0KQEAgLTc0NSw5ICs4NjMsMzMgQEAgdm9pZCBNZWRpYVBsYXll
clByaXZhdGU6OnVwZGF0ZVN0YXRlcygpCiAgICAgICAgICAgICAgICAgaWYgKCFpc2luZihuZXdE
dXJhdGlvbikpCiAgICAgICAgICAgICAgICAgICAgIG1fbWVkaWFEdXJhdGlvbiA9IG5ld0R1cmF0
aW9uOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKKyAgICAgICAgfSBlbHNlIGlmIChz
dGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VEKQogICAgICAgICAgICAgbV9wYXVzZWQgPSB0cnVlOwog
CisgICAgICAgIC8vIElzIG9uLWRpc2sgYnVmZmVyaW5nIGluIHByb2dyZXNzPworICAgICAgICBp
ZiAobV9maWxsVGltZW91dElkKSB7CisgICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlh
UGxheWVyOjpMb2FkaW5nOworICAgICAgICAgICAgaWYgKChtX2ZpbGxTdGF0dXMgPiAwKSAmJiAo
bV9yZWFkeVN0YXRlIDwgTWVkaWFQbGF5ZXI6OkhhdmVGdXR1cmVEYXRhKSkgeworICAgICAgICAg
ICAgICAgIC8vIEJ1ZmZlcmluZyBoYXMganVzdCBzdGFydGVkLCB3ZSBzaG91bGQgbm93IGhhdmUg
ZW5vdWdoIGRhdGEgdG8KKyAgICAgICAgICAgICAgICAvLyByZXN0YXJ0IHBsYXliYWNrIGlmIGl0
IHdhcyBpbnRlcm5hbGx5IHBhdXNlZCBieSBHU3RyZWFtZXIKKyAgICAgICAgICAgICAgICBtX3Jl
YWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUZ1dHVyZURhdGE7CisgICAgICAgICAgICAgICAg
aWYgKG1fcGF1c2VkKQorICAgICAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUo
bV9wbGF5QmluLCBHU1RfU1RBVEVfUExBWUlORyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBpZiAobWF4VGltZUxvYWRlZCgpID09IGR1cmF0aW9uKCkpIHsKKyAgICAgICAg
ICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRlZDsKKyAgICAgICAgICAgIGlm
IChzdGF0ZSA9PSBHU1RfU1RBVEVfUkVBRFkpCisgICAgICAgICAgICAgICAgbV9yZWFkeVN0YXRl
ID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOworICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGUg
PT0gR1NUX1NUQVRFX1BBVVNFRCkKKyAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRp
YVBsYXllcjo6SGF2ZUVub3VnaERhdGE7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgaWYg
KHN0YXRlID09IEdTVF9TVEFURV9SRUFEWSkKKyAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUg
PSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7CisgICAgICAgICAgICBlbHNlIGlmIChtX3BhdXNl
ZCkKKyAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBjdXJyZW50VGltZSgpIDwgbWF4VGlt
ZUxvYWRlZCgpID8gTWVkaWFQbGF5ZXI6OkhhdmVGdXR1cmVEYXRhIDogTWVkaWFQbGF5ZXI6Okhh
dmVDdXJyZW50RGF0YTsKKwogICAgICAgICBpZiAobV9jaGFuZ2luZ1JhdGUpIHsKICAgICAgICAg
ICAgIG1fcGxheWVyLT5yYXRlQ2hhbmdlZCgpOwogICAgICAgICAgICAgbV9jaGFuZ2luZ1JhdGUg
PSBmYWxzZTsKQEAgLTc1OCw3ICs5MDAsNiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6dXBk
YXRlU3RhdGVzKCkKICAgICAgICAgICAgIG1fc2Vla2luZyA9IGZhbHNlOwogICAgICAgICB9CiAK
LSAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGVkOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfQVNZTkM6CiAgICAgICAgIExPR19WRVJC
T1NFKE1lZGlhLCAiQXN5bmM6IFN0YXRlOiAlcywgcGVuZGluZzogJXMiLApAQCAtMTE4MCw3ICsx
MzIxLDE5IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpzdXBwb3J0c0Z1bGxzY3JlZW4oKSBj
b25zdAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Y3Jl
YXRlR1NUUGxheUJpbihTdHJpbmcgdXJsKQordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldEF1
dG9idWZmZXIoYm9vbCBhdXRvQnVmZmVyKQoreworICAgIEFTU0VSVChtX3BsYXlCaW4pOworCisg
ICAgR3N0UGxheUZsYWdzIGZsYWdzOworICAgIGdfb2JqZWN0X2dldChtX3BsYXlCaW4sICJmbGFn
cyIsICZmbGFncywgTlVMTCk7CisgICAgaWYgKGF1dG9CdWZmZXIpCisgICAgICAgIGdfb2JqZWN0
X3NldChtX3BsYXlCaW4sICJmbGFncyIsIGZsYWdzIHwgR1NUX1BMQVlfRkxBR19ET1dOTE9BRCwg
TlVMTCk7CisgICAgZWxzZQorICAgICAgICBnX29iamVjdF9zZXQobV9wbGF5QmluLCAiZmxhZ3Mi
LCBmbGFncyAmIH5HU1RfUExBWV9GTEFHX0RPV05MT0FELCBOVUxMKTsKK30KKwordm9pZCBNZWRp
YVBsYXllclByaXZhdGU6OmNyZWF0ZUdTVFBsYXlCaW4oKQogewogICAgIEFTU0VSVCghbV9wbGF5
QmluKTsKICAgICBtX3BsYXlCaW4gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoInBsYXliaW4y
IiwgInBsYXkiKTsKQEAgLTExOTAsNyArMTM0MywxMSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZTo6Y3JlYXRlR1NUUGxheUJpbihTdHJpbmcgdXJsKQogICAgIGdfc2lnbmFsX2Nvbm5lY3QoYnVz
LCAibWVzc2FnZSIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRlTWVzc2FnZUNhbGxiYWNr
KSwgdGhpcyk7CiAgICAgZ3N0X29iamVjdF91bnJlZihidXMpOwogCi0gICAgZ19vYmplY3Rfc2V0
KG1fcGxheUJpbiwgInVyaSIsIHVybC51dGY4KCkuZGF0YSgpLCBOVUxMKTsKKyAgICAvLyB0ZW1w
LWxvY2F0aW9uIGlzIGEgcHJvcGVydHkgb2YgcXVldWUyLiBQbGF5YmluMiB3aWxsCisgICAgLy8g
Y29uZmlndXJlIGl0IGlmIHRoZSBtZWRpYSBjYW4gYmUgYnVmZmVyZWQgaW4gZGlzay4KKyAgICBn
X3NpZ25hbF9jb25uZWN0KG1fcGxheUJpbiwgImRlZXAtbm90aWZ5Ojp0ZW1wLWxvY2F0aW9uIiwK
KyAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRlVGVtcExv
Y2F0aW9uQ2hhbmdlZENhbGxiYWNrKSwKKyAgICAgICAgICAgICAgICAgICAgIHRoaXMpOwogCiAg
ICAgZ19zaWduYWxfY29ubmVjdChtX3BsYXlCaW4sICJub3RpZnk6OnZvbHVtZSIsIEdfQ0FMTEJB
Q0sobWVkaWFQbGF5ZXJQcml2YXRlVm9sdW1lQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CiAgICAg
Z19zaWduYWxfY29ubmVjdChtX3BsYXlCaW4sICJub3RpZnk6OnNvdXJjZSIsIEdfQ0FMTEJBQ0so
bWVkaWFQbGF5ZXJQcml2YXRlU291cmNlQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CkBAIC0xMjEw
LDcgKzEzNjcsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Y3JlYXRlR1NUUGxheUJpbihT
dHJpbmcgdXJsKQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV9mcHNTaW5rID0gMDsK
ICAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX3BsYXlCaW4sICJ2aWRlby1zaW5rIiwgbV92aWRl
b1NpbmssIE5VTEwpOwotICAgICAgICAgICAgTE9HKE1lZGlhLCAiQ2FuJ3QgZGlzcGxheSBGUFMg
c3RhdGlzdGljcywgeW91IG5lZWQgZ3N0LXBsdWdpbnMtYmFkID49IDAuMTAuMTgiKTsKKyAgICAg
ICAgICAgIExPR19WRVJCT1NFKE1lZGlhLCAiQ2FuJ3QgZGlzcGxheSBGUFMgc3RhdGlzdGljcywg
eW91IG5lZWQgZ3N0LXBsdWdpbnMtYmFkID49IDAuMTAuMTgiKTsKICAgICAgICAgfQogICAgIH0g
ZWxzZQogICAgICAgICBnX29iamVjdF9zZXQobV9wbGF5QmluLCAidmlkZW8tc2luayIsIG1fdmlk
ZW9TaW5rLCBOVUxMKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3Rr
L01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKaW5kZXggMzQyNTdjYS4uYTA4Mzgz
ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDcsIDIwMDkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAwNyBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29w
eXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDksIDIwMTAgSWdhbGlhIFMuTAogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC04Niw2ICs4
Nyw4IEBAIGNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZSA6IHB1YmxpYyBNZWRpYVBsYXllclByaXZh
dGVJbnRlcmZhY2UgewogICAgICAgICAgICAgdm9pZCBtdXRlQ2hhbmdlZCgpOwogICAgICAgICAg
ICAgdm9pZCBtdXRlQ2hhbmdlZENhbGxiYWNrKCk7CiAKKyAgICAgICAgICAgIHZvaWQgc2V0QXV0
b2J1ZmZlcihib29sKTsKKwogICAgICAgICAgICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBu
ZXR3b3JrU3RhdGUoKSBjb25zdDsKICAgICAgICAgICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRl
IHJlYWR5U3RhdGUoKSBjb25zdDsKIApAQCAtMTEzLDYgKzExNiw5IEBAIGNsYXNzIE1lZGlhUGxh
eWVyUHJpdmF0ZSA6IHB1YmxpYyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UgewogICAgICAg
ICAgICAgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25zdDsKIAogICAgICAgICAgICAgYm9v
bCBwaXBlbGluZVJlc2V0KCkgY29uc3QgeyByZXR1cm4gbV9yZXNldFBpcGVsaW5lOyB9CisgICAg
ICAgICAgICB2b2lkIHByb2Nlc3NCdWZmZXJpbmdTdGF0cyhHc3RNZXNzYWdlKiBtZXNzYWdlKTsK
KyAgICAgICAgICAgIGJvb2wgcXVlcnlCdWZmZXJpbmdTdGF0cygpOworICAgICAgICAgICAgdm9p
ZCB1cGRhdGVEb3dubG9hZExvY2F0aW9uKGdjaGFyKik7CiAKICAgICAgICAgcHJpdmF0ZToKICAg
ICAgICAgICAgIE1lZGlhUGxheWVyUHJpdmF0ZShNZWRpYVBsYXllciopOwpAQCAtMTI4LDcgKzEz
NCw3IEBAIGNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZSA6IHB1YmxpYyBNZWRpYVBsYXllclByaXZh
dGVJbnRlcmZhY2UgewogICAgICAgICAgICAgZmxvYXQgbWF4VGltZUxvYWRlZCgpIGNvbnN0Owog
ICAgICAgICAgICAgdm9pZCBzdGFydEVuZFBvaW50VGltZXJJZk5lZWRlZCgpOwogCi0gICAgICAg
ICAgICB2b2lkIGNyZWF0ZUdTVFBsYXlCaW4oU3RyaW5nIHVybCk7CisgICAgICAgICAgICB2b2lk
IGNyZWF0ZUdTVFBsYXlCaW4oKTsKICAgICAgICAgICAgIGJvb2wgY2hhbmdlUGlwZWxpbmVTdGF0
ZShHc3RTdGF0ZSBzdGF0ZSk7CiAKICAgICAgICAgcHJpdmF0ZToKQEAgLTE1Nyw2ICsxNjMsMTEg
QEAgY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlIDogcHVibGljIE1lZGlhUGxheWVyUHJpdmF0ZUlu
dGVyZmFjZSB7CiAgICAgICAgICAgICBndWludCBtX3ZvbHVtZUlkbGVJZDsKICAgICAgICAgICAg
IGdmbG9hdCBtX21lZGlhRHVyYXRpb247CiAgICAgICAgICAgICBndWludCBtX211dGVJZGxlSWQ7
CisgICAgICAgICAgICBib29sIG1fc3RhcnRlZEJ1ZmZlcmluZzsKKyAgICAgICAgICAgIGd1aW50
IG1fZmlsbFRpbWVvdXRJZDsKKyAgICAgICAgICAgIGZsb2F0IG1fbWF4VGltZUxvYWRlZDsKKyAg
ICAgICAgICAgIGdjaGFyKiBtX2Rvd25sb2FkRmlsZW5hbWU7CisgICAgICAgICAgICBnZG91Ymxl
IG1fZmlsbFN0YXR1czsKICAgICB9OwogfQogCi0tIAoxLjYuMy4z
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47854</attachid>
            <date>2010-02-01 10:32:43 -0800</date>
            <delta_ts>2010-02-04 07:50:08 -0800</delta_ts>
            <desc>initial support for on-disk buffering of videos</desc>
            <filename>initial-support-for-on-disk-buffering-of-videos.patch</filename>
            <type>text/plain</type>
            <size>14581</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSA4ZmRlZDg3YzQ0MWUxNWUzMjBlN2Y0MzY4MWYxMzkzMjAwNmE1MGY2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBUdWUsIDUgSmFuIDIwMTAgMTY6Mjk6NTYgKzAxMDAKU3ViamVjdDogW1BBVENIXSBp
bml0aWFsIHN1cHBvcnQgZm9yIG9uLWRpc2sgYnVmZmVyaW5nIG9mIHZpZGVvcwoKLS0tCiBXZWJD
b3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjkgKysr
CiAuLi4vZ3JhcGhpY3MvZ3RrL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgICB8ICAx
NzkgKysrKysrKysrKysrKysrKystLS0KIC4uLi9ncmFwaGljcy9ndGsvTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyLmggICAgIHwgICAxMSArLQogMyBmaWxlcyBjaGFuZ2VkLCAxOTEgaW5zZXJ0
aW9ucygrKSwgMjggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cg
Yi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjMWIyN2YzLi44MDg3ODM0IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBA
CisyMDEwLTAxLTA3ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1N0cmVhbWVy
XSBTaG91bGQgaGFuZGxlIEJVRkZFUklORyBtZXNzYWdlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzAwMDQKKworICAgICAgICBJbml0aWFsIHN1cHBv
cnQgZm9yIG9uLWRpc2sgYnVmZmVyaW5nIG9mIHZpZGVvcy4gVGhpcyB3b3JrcyBvbmx5CisgICAg
ICAgIGZvciBRdWlja3RpbWUgYW5kIGZsdiB0aG91Z2guCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9ndGsvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Om1lZGlhUGxheWVyUHJpdmF0ZU1lc3NhZ2VDYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpidWZmZXJpbmdUaW1lb3V0Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlOjpNZWRpYVBsYXllclByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlOjp+TWVkaWFQbGF5ZXJQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZTo6bG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGU6OmR1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZTo6cHJvY2Vzc0J1ZmZlcmluZ1N0YXRzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZTo6cXVlcnlCdWZmZXJpbmdTdGF0cyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGU6Om1heFRpbWVTZWVrYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGU6Om1heFRpbWVMb2FkZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlOjpieXRlc0xvYWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGU6OnRvdGFsQnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
Ojp1cGRhdGVTdGF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpk
dXJhdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpz
ZXRBdXRvYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6Y3Jl
YXRlR1NUUGxheUJpbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL01lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lci5oOgorCiAyMDEwLTAxLTI5ICBQaGlsaXBwZSBOb3JtYW5kICA8
cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIENhcmxzb24u
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAppbmRleCBkOTZjMWUzLi5jNTQ2ZTFhIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXIuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL01lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lci5jcHAKQEAgLTMsNiArMyw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgQ29sbGFib3JhIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwOSBH
dXN0YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDksIDIwMTAgSWdhbGlhIFMuTAogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC01Myw2ICs1NCwyMSBA
QAogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJ2aWV3Lmg+CiAjaW5jbHVkZSA8d3RmL2d0ay9H
T3duUHRyLmg+CiAKKy8vIEdzdFBsYXlGbGFncyBmbGFncyBmcm9tIHBsYXliaW4yLiBJdCBpcyB0
aGUgcG9saWN5IG9mIEdTdHJlYW1lciB0bworLy8gbm90IHB1YmxpY2x5IGV4cG9zZSBlbGVtZW50
LXNwZWNpZmljIGVudW1zLiBUaGF0J3Mgd2h5IHRoaXMKKy8vIEdzdFBsYXlGbGFncyBlbnVtIGhh
cyBiZWVuIGNvcGllZCBoZXJlLgordHlwZWRlZiBlbnVtIHsKKyAgICBHU1RfUExBWV9GTEFHX1ZJ
REVPICAgICAgICAgPSAweDAwMDAwMDAxLAorICAgIEdTVF9QTEFZX0ZMQUdfQVVESU8gICAgICAg
ICA9IDB4MDAwMDAwMDIsCisgICAgR1NUX1BMQVlfRkxBR19URVhUICAgICAgICAgID0gMHgwMDAw
MDAwNCwKKyAgICBHU1RfUExBWV9GTEFHX1ZJUyAgICAgICAgICAgPSAweDAwMDAwMDA4LAorICAg
IEdTVF9QTEFZX0ZMQUdfU09GVF9WT0xVTUUgICA9IDB4MDAwMDAwMTAsCisgICAgR1NUX1BMQVlf
RkxBR19OQVRJVkVfQVVESU8gID0gMHgwMDAwMDAyMCwKKyAgICBHU1RfUExBWV9GTEFHX05BVElW
RV9WSURFTyAgPSAweDAwMDAwMDQwLAorICAgIEdTVF9QTEFZX0ZMQUdfRE9XTkxPQUQgICAgICA9
IDB4MDAwMDAwODAsCisgICAgR1NUX1BMQVlfRkxBR19CVUZGRVJJTkcgICAgID0gMHgwMDAwMDAx
MDAKK30gR3N0UGxheUZsYWdzOworCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC02Myw3ICs3OSw2IEBAIGdib29sZWFuIG1lZGlhUGxheWVyUHJpdmF0ZU1l
c3NhZ2VDYWxsYmFjayhHc3RCdXMqIGJ1cywgR3N0TWVzc2FnZSogbWVzc2FnZSwgZ3BvCiAgICAg
R093blB0cjxnY2hhcj4gZGVidWc7CiAgICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBlcnJv
cjsKICAgICBNZWRpYVBsYXllclByaXZhdGUqIG1wID0gcmVpbnRlcnByZXRfY2FzdDxNZWRpYVBs
YXllclByaXZhdGUqPihkYXRhKTsKLSAgICBnaW50IHBlcmNlbnQgPSAwOwogICAgIGJvb2wgaXNz
dWVFcnJvciA9IHRydWU7CiAgICAgYm9vbCBhdHRlbXB0TmV4dExvY2F0aW9uID0gZmFsc2U7CiAK
QEAgLTExMyw4ICsxMjgsNyBAQCBnYm9vbGVhbiBtZWRpYVBsYXllclByaXZhdGVNZXNzYWdlQ2Fs
bGJhY2soR3N0QnVzKiBidXMsIEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIGdwbwogICAgICAgICBtcC0+
dXBkYXRlU3RhdGVzKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR1NUX01FU1NBR0VfQlVG
RkVSSU5HOgotICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9idWZmZXJpbmcobWVzc2FnZSwgJnBl
cmNlbnQpOwotICAgICAgICBMT0dfVkVSQk9TRShNZWRpYSwgIkJ1ZmZlcmluZyAlZCIsIHBlcmNl
bnQpOworICAgICAgICBtcC0+cHJvY2Vzc0J1ZmZlcmluZ1N0YXRzKG1lc3NhZ2UpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEdTVF9NRVNTQUdFX0RVUkFUSU9OOgogICAgICAgICBMT0dfVkVS
Qk9TRShNZWRpYSwgIkR1cmF0aW9uIGNoYW5nZWQiKTsKQEAgLTIwNyw2ICsyMjEsMTIgQEAgZ2Jv
b2xlYW4gbm90aWZ5TXV0ZUlkbGVDYWxsYmFjayhncG9pbnRlciBkYXRhKQogICAgIHJldHVybiBG
QUxTRTsKIH0KIAorZ2Jvb2xlYW4gYnVmZmVyaW5nVGltZW91dENhbGxiYWNrKGdwb2ludGVyIGRh
dGEpCit7CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlKiBtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8TWVk
aWFQbGF5ZXJQcml2YXRlKj4oZGF0YSk7CisgICAgcmV0dXJuIG1wLT5xdWVyeUJ1ZmZlcmluZ1N0
YXRzKCk7Cit9CisKIHN0YXRpYyBmbG9hdCBwbGF5YmFja1Bvc2l0aW9uKEdzdEVsZW1lbnQqIHBs
YXliaW4pCiB7CiAKQEAgLTMxMCwxMiArMzMwLDIyIEBAIE1lZGlhUGxheWVyUHJpdmF0ZTo6TWVk
aWFQbGF5ZXJQcml2YXRlKE1lZGlhUGxheWVyKiBwbGF5ZXIpCiAgICAgLCBtX3ZvbHVtZUlkbGVJ
ZCgwKQogICAgICwgbV9tZWRpYUR1cmF0aW9uKDAuMCkKICAgICAsIG1fbXV0ZUlkbGVJZCgwKQor
ICAgICwgbV9zdGFydGVkQnVmZmVyaW5nKGZhbHNlKQorICAgICwgbV9maWxsVGltZW91dElkKDAp
CisgICAgLCBtX21heFRpbWVMb2FkZWQoMC4wKQorICAgICwgbV9maWxsU3RhdHVzKDAuMCkKIHsK
LSAgICBkb0dzdEluaXQoKTsKKyAgICBpZiAoZG9Hc3RJbml0KCkpCisgICAgICAgIGNyZWF0ZUdT
VFBsYXlCaW4oKTsKIH0KIAogTWVkaWFQbGF5ZXJQcml2YXRlOjp+TWVkaWFQbGF5ZXJQcml2YXRl
KCkKIHsKKyAgICBpZiAobV9maWxsVGltZW91dElkKSB7CisgICAgICAgIGdfc291cmNlX3JlbW92
ZShtX2ZpbGxUaW1lb3V0SWQpOworICAgICAgICBtX2ZpbGxUaW1lb3V0SWQgPSAwOworICAgIH0K
KwogICAgIGlmIChtX3ZvbHVtZUlkbGVJZCkgewogICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV92
b2x1bWVJZGxlSWQpOwogICAgICAgICBtX3ZvbHVtZUlkbGVJZCA9IDA7CkBAIC0zNjgsNyArMzk4
LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmxvYWQoY29uc3QgU3RyaW5nJiB1cmwpCiAg
ICAgICAgIG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOwogICAgIH0KIAotICAgIGNyZWF0
ZUdTVFBsYXlCaW4odXJsKTsKKyAgICBnX29iamVjdF9zZXQobV9wbGF5QmluLCAidXJpIiwgdXJs
LnV0ZjgoKS5kYXRhKCksIE5VTEwpOwogICAgIHBhdXNlKCk7CiB9CiAKQEAgLTY0MCwxNiArNjcw
LDc4IEBAIFBhc3NSZWZQdHI8VGltZVJhbmdlcz4gTWVkaWFQbGF5ZXJQcml2YXRlOjpidWZmZXJl
ZCgpIGNvbnN0CiAgICAgcmV0dXJuIHRpbWVSYW5nZXMucmVsZWFzZSgpOwogfQogCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZTo6cHJvY2Vzc0J1ZmZlcmluZ1N0YXRzKEdzdE1lc3NhZ2UqIG1lc3Nh
Z2UpCit7CisgICAgR3N0QnVmZmVyaW5nTW9kZSBtb2RlOworCisgICAgZ3N0X21lc3NhZ2VfcGFy
c2VfYnVmZmVyaW5nX3N0YXRzKG1lc3NhZ2UsICZtb2RlLCAwLCAwLCAwKTsKKyAgICBpZiAobW9k
ZSAhPSBHU1RfQlVGRkVSSU5HX0RPV05MT0FEKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
IW1fc3RhcnRlZEJ1ZmZlcmluZykgeworICAgICAgICBtX3N0YXJ0ZWRCdWZmZXJpbmcgPSB0cnVl
OworCisgICAgICAgIGlmIChtX2ZpbGxUaW1lb3V0SWQgPiAwKQorICAgICAgICAgICAgZ19zb3Vy
Y2VfcmVtb3ZlKG1fZmlsbFRpbWVvdXRJZCk7CisKKyAgICAgICAgbV9maWxsVGltZW91dElkID0g
Z190aW1lb3V0X2FkZCgyMDAsIChHU291cmNlRnVuYykgYnVmZmVyaW5nVGltZW91dENhbGxiYWNr
LCB0aGlzKTsKKyAgICB9Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpxdWVyeUJ1ZmZl
cmluZ1N0YXRzKCkKK3sKKyAgICBHc3RRdWVyeSogcXVlcnkgPSBnc3RfcXVlcnlfbmV3X2J1ZmZl
cmluZyhHU1RfRk9STUFUX1BFUkNFTlQpOworCisgICAgaWYgKCFnc3RfZWxlbWVudF9xdWVyeSht
X3BsYXlCaW4sIHF1ZXJ5KSkgeworICAgICAgICBnc3RfcXVlcnlfdW5yZWYocXVlcnkpOworICAg
ICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICBnaW50NjQgc3RhcnQsIHN0b3A7CisKKyAg
ICBnc3RfcXVlcnlfcGFyc2VfYnVmZmVyaW5nX3JhbmdlKHF1ZXJ5LCAwLCAmc3RhcnQsICZzdG9w
LCAwKTsKKyAgICBnc3RfcXVlcnlfdW5yZWYocXVlcnkpOworCisgICAgaWYgKHN0b3AgIT0gLTEp
CisgICAgICAgIG1fZmlsbFN0YXR1cyA9IDEwMC4wICogc3RvcCAvIEdTVF9GT1JNQVRfUEVSQ0VO
VF9NQVg7CisgICAgZWxzZQorICAgICAgICBtX2ZpbGxTdGF0dXMgPSAxMDAuMDsKKworICAgIExP
R19WRVJCT1NFKE1lZGlhLCAiRG93bmxvYWQgYnVmZmVyIGZpbGxlZCB1cCB0byAlZiUlIiwgbV9m
aWxsU3RhdHVzKTsKKworICAgIGlmICghbV9tZWRpYUR1cmF0aW9uKQorICAgICAgICBkdXJhdGlv
bkNoYW5nZWQoKTsKKworICAgIC8vIFVwZGF0ZSBtYXhUaW1lTG9hZGVkIG9ubHkgaWYgdGhlIG1l
ZGlhIGR1cmF0aW9uIGlzCisgICAgLy8gYXZhaWxhYmxlLiBPdGhlcndpc2Ugd2UgY2FuJ3QgY29t
cHV0ZSBpdC4KKyAgICBpZiAobV9tZWRpYUR1cmF0aW9uKSB7CisgICAgICAgIG1fbWF4VGltZUxv
YWRlZCA9IHN0YXRpY19jYXN0PGZsb2F0PigobV9maWxsU3RhdHVzICogbV9tZWRpYUR1cmF0aW9u
KSAvIDEwMC4wKTsKKyAgICAgICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJVcGRhdGVkIG1heFRpbWVM
b2FkZWQ6ICVmIiwgbV9tYXhUaW1lTG9hZGVkKTsKKyAgICB9CisKKyAgICBib29sIGNvbnRpbnVl
U3RhdHNHYXRoZXJpbmcgPSBUUlVFOworICAgIC8vIE1lZGlhIGlzIG5vdyBmdWxseSBsb2FkZWQu
IEl0IHdpbGwgcGxheSBldmVuIGlmIG5ldHdvcmsKKyAgICAvLyBjb25uZWN0aW9uIGlzIGN1dC4K
KyAgICBpZiAobV9maWxsU3RhdHVzID09IDEwMC4wKSB7CisgICAgICAgIC8vIEJ1ZmZlcmluZyBp
cyBkb25lLCByZW1vdmUgdGhlIGZpbGwgc291cmNlIGZyb20gdGhlIG1haW4gbG9vcC4KKyAgICAg
ICAgbV9maWxsVGltZW91dElkID0gMDsKKyAgICAgICAgY29udGludWVTdGF0c0dhdGhlcmluZyA9
IEZBTFNFOworICAgIH0KKworICAgIHVwZGF0ZVN0YXRlcygpOworICAgIHJldHVybiBjb250aW51
ZVN0YXRzR2F0aGVyaW5nOworfQorCiBmbG9hdCBNZWRpYVBsYXllclByaXZhdGU6Om1heFRpbWVT
ZWVrYWJsZSgpIGNvbnN0CiB7CiAgICAgaWYgKG1fZXJyb3JPY2N1cmVkKQogICAgICAgICByZXR1
cm4gMC4wOwogCi0gICAgLy8gVE9ETwogICAgIExPR19WRVJCT1NFKE1lZGlhLCAibWF4VGltZVNl
ZWthYmxlIik7Ci0gICAgaWYgKG1faXNTdHJlYW1pbmcpCi0gICAgICAgIHJldHVybiBudW1lcmlj
X2xpbWl0czxmbG9hdD46OmluZmluaXR5KCk7CiAgICAgLy8gaW5maW5pdGUgZHVyYXRpb24gbWVh
bnMgbGl2ZSBzdHJlYW0KKyAgICBpZiAoaXNpbmYoZHVyYXRpb24oKSkpCisgICAgICAgIHJldHVy
biAwLjA7CisKICAgICByZXR1cm4gbWF4VGltZUxvYWRlZCgpOwogfQogCkBAIC02NTgsMjkgKzc1
MCwyOCBAQCBmbG9hdCBNZWRpYVBsYXllclByaXZhdGU6Om1heFRpbWVMb2FkZWQoKSBjb25zdAog
ICAgIGlmIChtX2Vycm9yT2NjdXJlZCkKICAgICAgICAgcmV0dXJuIDAuMDsKIAotICAgIC8vIFRP
RE8KLSAgICBMT0dfVkVSQk9TRShNZWRpYSwgIm1heFRpbWVMb2FkZWQiKTsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiBkdXJhdGlvbigpOworICAgIGZsb2F0IGxvYWRlZCA9IG1f
bWF4VGltZUxvYWRlZDsKKyAgICBpZiAoIWxvYWRlZCAmJiAhbV9maWxsVGltZW91dElkKQorICAg
ICAgICBsb2FkZWQgPSBkdXJhdGlvbigpOworICAgIExPR19WRVJCT1NFKE1lZGlhLCAibWF4VGlt
ZUxvYWRlZDogJWYiLCBsb2FkZWQpOworICAgIHJldHVybiBsb2FkZWQ7CiB9CiAKIHVuc2lnbmVk
IE1lZGlhUGxheWVyUHJpdmF0ZTo6Ynl0ZXNMb2FkZWQoKSBjb25zdAogewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJieXRlc0xvYWRlZCIpOwotICAgIC8q
aWYgKCFtX3BsYXlCaW4pCisgICAgaWYgKCFtX3BsYXlCaW4pCisgICAgICAgIHJldHVybiAwOwor
CisgICAgaWYgKCFtX21lZGlhRHVyYXRpb24pCiAgICAgICAgIHJldHVybiAwOwotICAgIGZsb2F0
IGR1ciA9IGR1cmF0aW9uKCk7Ci0gICAgZmxvYXQgbWF4VGltZSA9IG1heFRpbWVMb2FkZWQoKTsK
LSAgICBpZiAoIWR1cikKLSAgICAgICAgcmV0dXJuIDA7Ki8KIAotICAgIHJldHVybiAxOyAvLyB0
b3RhbEJ5dGVzKCkgKiBtYXhUaW1lIC8gZHVyOworICAgIHVuc2lnbmVkIGxvYWRlZCA9IHRvdGFs
Qnl0ZXMoKSAqIG1heFRpbWVMb2FkZWQoKSAvIG1fbWVkaWFEdXJhdGlvbjsKKyAgICBMT0dfVkVS
Qk9TRShNZWRpYSwgImJ5dGVzTG9hZGVkOiAlZCIsIGxvYWRlZCk7CisgICAgcmV0dXJuIGxvYWRl
ZDsKIH0KIAogdW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlOjp0b3RhbEJ5dGVzKCkgY29uc3QK
IHsKLSAgICBMT0dfVkVSQk9TRShNZWRpYSwgInRvdGFsQnl0ZXMiKTsKICAgICBpZiAoIW1fc291
cmNlKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtNjkwLDYgKzc4MSw3IEBAIHVuc2lnbmVkIE1l
ZGlhUGxheWVyUHJpdmF0ZTo6dG90YWxCeXRlcygpIGNvbnN0CiAgICAgR3N0Rm9ybWF0IGZtdCA9
IEdTVF9GT1JNQVRfQllURVM7CiAgICAgZ2ludDY0IGxlbmd0aCA9IDA7CiAgICAgZ3N0X2VsZW1l
bnRfcXVlcnlfZHVyYXRpb24obV9zb3VyY2UsICZmbXQsICZsZW5ndGgpOworICAgIExPR19WRVJC
T1NFKE1lZGlhLCAidG90YWxCeXRlcyAlIiBHX0dJTlQ2NF9GT1JNQVQsIGxlbmd0aCk7CiAKICAg
ICByZXR1cm4gbGVuZ3RoOwogfQpAQCAtNzQ1LDkgKzgzNywzMyBAQCB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZTo6dXBkYXRlU3RhdGVzKCkKICAgICAgICAgICAgICAgICBpZiAoIWlzaW5mKG5ld0R1
cmF0aW9uKSkKICAgICAgICAgICAgICAgICAgICAgbV9tZWRpYUR1cmF0aW9uID0gbmV3RHVyYXRp
b247CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQorICAgICAgICB9IGVsc2UgaWYgKHN0
YXRlID09IEdTVF9TVEFURV9QQVVTRUQpCiAgICAgICAgICAgICBtX3BhdXNlZCA9IHRydWU7CiAK
KyAgICAgICAgLy8gSXMgb24tZGlzayBidWZmZXJpbmcgaW4gcHJvZ3Jlc3M/CisgICAgICAgIGlm
IChtX2ZpbGxUaW1lb3V0SWQpIHsKKyAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQ
bGF5ZXI6OkxvYWRpbmc7CisgICAgICAgICAgICBpZiAoKG1fZmlsbFN0YXR1cyA+IDApICYmICht
X3JlYWR5U3RhdGUgPCBNZWRpYVBsYXllcjo6SGF2ZUZ1dHVyZURhdGEpKSB7CisgICAgICAgICAg
ICAgICAgLy8gQnVmZmVyaW5nIGhhcyBqdXN0IHN0YXJ0ZWQsIHdlIHNob3VsZCBub3cgaGF2ZSBl
bm91Z2ggZGF0YSB0bworICAgICAgICAgICAgICAgIC8vIHJlc3RhcnQgcGxheWJhY2sgaWYgaXQg
d2FzIGludGVybmFsbHkgcGF1c2VkIGJ5IEdTdHJlYW1lcgorICAgICAgICAgICAgICAgIG1fcmVh
ZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlRnV0dXJlRGF0YTsKKyAgICAgICAgICAgICAgICBp
ZiAobV9wYXVzZWQpCisgICAgICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSht
X3BsYXlCaW4sIEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIGlmIChtYXhUaW1lTG9hZGVkKCkgPT0gZHVyYXRpb24oKSkgeworICAgICAgICAg
ICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGVkOworICAgICAgICAgICAgaWYg
KHN0YXRlID09IEdTVF9TVEFURV9SRUFEWSkKKyAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUg
PSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7CisgICAgICAgICAgICBlbHNlIGlmIChzdGF0ZSA9
PSBHU1RfU1RBVEVfUEFVU0VEKQorICAgICAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlh
UGxheWVyOjpIYXZlRW5vdWdoRGF0YTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBpZiAo
c3RhdGUgPT0gR1NUX1NUQVRFX1JFQURZKQorICAgICAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9
IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKKyAgICAgICAgICAgIGVsc2UgaWYgKG1fcGF1c2Vk
KQorICAgICAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IGN1cnJlbnRUaW1lKCkgPCBtYXhUaW1l
TG9hZGVkKCkgPyBNZWRpYVBsYXllcjo6SGF2ZUZ1dHVyZURhdGEgOiBNZWRpYVBsYXllcjo6SGF2
ZUN1cnJlbnREYXRhOworCiAgICAgICAgIGlmIChtX2NoYW5naW5nUmF0ZSkgewogICAgICAgICAg
ICAgbV9wbGF5ZXItPnJhdGVDaGFuZ2VkKCk7CiAgICAgICAgICAgICBtX2NoYW5naW5nUmF0ZSA9
IGZhbHNlOwpAQCAtNzU4LDcgKzg3NCw2IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjp1cGRh
dGVTdGF0ZXMoKQogICAgICAgICAgICAgbV9zZWVraW5nID0gZmFsc2U7CiAgICAgICAgIH0KIAot
ICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkZWQ7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9BU1lOQzoKICAgICAgICAgTE9HX1ZFUkJP
U0UoTWVkaWEsICJBc3luYzogU3RhdGU6ICVzLCBwZW5kaW5nOiAlcyIsCkBAIC0xMTgwLDcgKzEy
OTUsMTkgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGU6OnN1cHBvcnRzRnVsbHNjcmVlbigpIGNv
bnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVh
dGVHU1RQbGF5QmluKFN0cmluZyB1cmwpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0QXV0
b2J1ZmZlcihib29sIGF1dG9CdWZmZXIpCit7CisgICAgQVNTRVJUKG1fcGxheUJpbik7CisKKyAg
ICBHc3RQbGF5RmxhZ3MgZmxhZ3M7CisgICAgZ19vYmplY3RfZ2V0KG1fcGxheUJpbiwgImZsYWdz
IiwgJmZsYWdzLCBOVUxMKTsKKyAgICBpZiAoYXV0b0J1ZmZlcikKKyAgICAgICAgZ19vYmplY3Rf
c2V0KG1fcGxheUJpbiwgImZsYWdzIiwgZmxhZ3MgfCBHU1RfUExBWV9GTEFHX0RPV05MT0FELCBO
VUxMKTsKKyAgICBlbHNlCisgICAgICAgIGdfb2JqZWN0X3NldChtX3BsYXlCaW4sICJmbGFncyIs
IGZsYWdzICYgfkdTVF9QTEFZX0ZMQUdfRE9XTkxPQUQsIE5VTEwpOworfQorCit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZTo6Y3JlYXRlR1NUUGxheUJpbigpCiB7CiAgICAgQVNTRVJUKCFtX3BsYXlC
aW4pOwogICAgIG1fcGxheUJpbiA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgicGxheWJpbjIi
LCAicGxheSIpOwpAQCAtMTE5MCw4ICsxMzE3LDYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6
OmNyZWF0ZUdTVFBsYXlCaW4oU3RyaW5nIHVybCkKICAgICBnX3NpZ25hbF9jb25uZWN0KGJ1cywg
Im1lc3NhZ2UiLCBHX0NBTExCQUNLKG1lZGlhUGxheWVyUHJpdmF0ZU1lc3NhZ2VDYWxsYmFjayks
IHRoaXMpOwogICAgIGdzdF9vYmplY3RfdW5yZWYoYnVzKTsKIAotICAgIGdfb2JqZWN0X3NldCht
X3BsYXlCaW4sICJ1cmkiLCB1cmwudXRmOCgpLmRhdGEoKSwgTlVMTCk7Ci0KICAgICBnX3NpZ25h
bF9jb25uZWN0KG1fcGxheUJpbiwgIm5vdGlmeTo6dm9sdW1lIiwgR19DQUxMQkFDSyhtZWRpYVBs
YXllclByaXZhdGVWb2x1bWVDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKICAgICBnX3NpZ25hbF9j
b25uZWN0KG1fcGxheUJpbiwgIm5vdGlmeTo6c291cmNlIiwgR19DQUxMQkFDSyhtZWRpYVBsYXll
clByaXZhdGVTb3VyY2VDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKICAgICBnX3NpZ25hbF9jb25u
ZWN0KG1fcGxheUJpbiwgIm5vdGlmeTo6bXV0ZSIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2
YXRlTXV0ZUNoYW5nZWRDYWxsYmFjayksIHRoaXMpOwpAQCAtMTIxMCw3ICsxMzM1LDcgQEAgdm9p
ZCBNZWRpYVBsYXllclByaXZhdGU6OmNyZWF0ZUdTVFBsYXlCaW4oU3RyaW5nIHVybCkKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1fZnBzU2luayA9IDA7CiAgICAgICAgICAgICBnX29i
amVjdF9zZXQobV9wbGF5QmluLCAidmlkZW8tc2luayIsIG1fdmlkZW9TaW5rLCBOVUxMKTsKLSAg
ICAgICAgICAgIExPRyhNZWRpYSwgIkNhbid0IGRpc3BsYXkgRlBTIHN0YXRpc3RpY3MsIHlvdSBu
ZWVkIGdzdC1wbHVnaW5zLWJhZCA+PSAwLjEwLjE4Iik7CisgICAgICAgICAgICBMT0dfVkVSQk9T
RShNZWRpYSwgIkNhbid0IGRpc3BsYXkgRlBTIHN0YXRpc3RpY3MsIHlvdSBuZWVkIGdzdC1wbHVn
aW5zLWJhZCA+PSAwLjEwLjE4Iik7CiAgICAgICAgIH0KICAgICB9IGVsc2UKICAgICAgICAgZ19v
YmplY3Rfc2V0KG1fcGxheUJpbiwgInZpZGVvLXNpbmsiLCBtX3ZpZGVvU2luaywgTlVMTCk7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL01lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lci5oCmluZGV4IDM0MjU3Y2EuLjAwZGRjNGIgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5o
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL01lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lci5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ29s
bGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBB
bHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIEln
YWxpYSBTLkwKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtODYsNiArODcsOCBAQCBjbGFzcyBNZWRp
YVBsYXllclByaXZhdGUgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlIHsKICAg
ICAgICAgICAgIHZvaWQgbXV0ZUNoYW5nZWQoKTsKICAgICAgICAgICAgIHZvaWQgbXV0ZUNoYW5n
ZWRDYWxsYmFjaygpOwogCisgICAgICAgICAgICB2b2lkIHNldEF1dG9idWZmZXIoYm9vbCk7CisK
ICAgICAgICAgICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKCkgY29u
c3Q7CiAgICAgICAgICAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkgY29u
c3Q7CiAKQEAgLTExMyw2ICsxMTYsOCBAQCBjbGFzcyBNZWRpYVBsYXllclByaXZhdGUgOiBwdWJs
aWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlIHsKICAgICAgICAgICAgIGJvb2wgc3VwcG9y
dHNGdWxsc2NyZWVuKCkgY29uc3Q7CiAKICAgICAgICAgICAgIGJvb2wgcGlwZWxpbmVSZXNldCgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVzZXRQaXBlbGluZTsgfQorICAgICAgICAgICAgdm9pZCBwcm9j
ZXNzQnVmZmVyaW5nU3RhdHMoR3N0TWVzc2FnZSogbWVzc2FnZSk7CisgICAgICAgICAgICBib29s
IHF1ZXJ5QnVmZmVyaW5nU3RhdHMoKTsKIAogICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAg
TWVkaWFQbGF5ZXJQcml2YXRlKE1lZGlhUGxheWVyKik7CkBAIC0xMjgsNyArMTMzLDcgQEAgY2xh
c3MgTWVkaWFQbGF5ZXJQcml2YXRlIDogcHVibGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFj
ZSB7CiAgICAgICAgICAgICBmbG9hdCBtYXhUaW1lTG9hZGVkKCkgY29uc3Q7CiAgICAgICAgICAg
ICB2b2lkIHN0YXJ0RW5kUG9pbnRUaW1lcklmTmVlZGVkKCk7CiAKLSAgICAgICAgICAgIHZvaWQg
Y3JlYXRlR1NUUGxheUJpbihTdHJpbmcgdXJsKTsKKyAgICAgICAgICAgIHZvaWQgY3JlYXRlR1NU
UGxheUJpbigpOwogICAgICAgICAgICAgYm9vbCBjaGFuZ2VQaXBlbGluZVN0YXRlKEdzdFN0YXRl
IHN0YXRlKTsKIAogICAgICAgICBwcml2YXRlOgpAQCAtMTU3LDYgKzE2MiwxMCBAQCBjbGFzcyBN
ZWRpYVBsYXllclByaXZhdGUgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlIHsK
ICAgICAgICAgICAgIGd1aW50IG1fdm9sdW1lSWRsZUlkOwogICAgICAgICAgICAgZ2Zsb2F0IG1f
bWVkaWFEdXJhdGlvbjsKICAgICAgICAgICAgIGd1aW50IG1fbXV0ZUlkbGVJZDsKKyAgICAgICAg
ICAgIGJvb2wgbV9zdGFydGVkQnVmZmVyaW5nOworICAgICAgICAgICAgZ3VpbnQgbV9maWxsVGlt
ZW91dElkOworICAgICAgICAgICAgZmxvYXQgbV9tYXhUaW1lTG9hZGVkOworICAgICAgICAgICAg
Z2RvdWJsZSBtX2ZpbGxTdGF0dXM7CiAgICAgfTsKIH0KIAotLSAKMS42LjMuMw==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48142</attachid>
            <date>2010-02-04 07:50:08 -0800</date>
            <delta_ts>2010-02-12 00:57:18 -0800</delta_ts>
            <desc>initial support for on-disk buffering of videos</desc>
            <filename>initial-support-for-on-disk-buffering-of-videos.patch</filename>
            <type>text/plain</type>
            <size>14359</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSAzN2MyMzFjZWZiN2RiYjEzZTlhYTRmZGY1ZWY3NDFhNDA5MWViNTRkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBUdWUsIDUgSmFuIDIwMTAgMTY6Mjk6NTYgKzAxMDAKU3ViamVjdDogW1BBVENIXSBp
bml0aWFsIHN1cHBvcnQgZm9yIG9uLWRpc2sgYnVmZmVyaW5nIG9mIHZpZGVvcwoKLS0tCiBXZWJD
b3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjkgKysr
KwogLi4uL2dyYXBoaWNzL2d0ay9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwICAgfCAg
MTc3ICsrKysrKysrKysrKysrKysrLS0tCiAuLi4vZ3JhcGhpY3MvZ3RrL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lci5oICAgICB8ICAgMTEgKy0KIDMgZmlsZXMgY2hhbmdlZCwgMTkwIGluc2Vy
dGlvbnMoKyksIDI3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9n
IGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzZmZDE3Mi4uNTJiN2E0MiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBA
QAorMjAxMC0wMS0wNyAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dTdHJlYW1l
cl0gU2hvdWxkIGhhbmRsZSBCVUZGRVJJTkcgbWVzc2FnZXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwMDA0CisKKyAgICAgICAgSW5pdGlhbCBzdXBw
b3J0IGZvciBvbi1kaXNrIGJ1ZmZlcmluZyBvZiB2aWRlb3MuIFRoaXMgd29ya3Mgb25seQorICAg
ICAgICBmb3IgUXVpY2t0aW1lIGFuZCBmbHYgdGhvdWdoLgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjptZWRpYVBsYXllclByaXZhdGVNZXNzYWdlQ2FsbGJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6YnVmZmVyaW5nVGltZW91dENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZTo6TWVkaWFQbGF5ZXJQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZTo6fk1lZGlhUGxheWVyUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGU6OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlOjpkdXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGU6OnByb2Nlc3NCdWZmZXJpbmdTdGF0cyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGU6OnF1ZXJ5QnVmZmVyaW5nU3RhdHMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlOjptYXhUaW1lU2Vla2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlOjptYXhUaW1lTG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZTo6Ynl0ZXNMb2FkZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlOjp0b3RhbEJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZTo6dXBkYXRlU3RhdGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6
ZHVyYXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6
c2V0QXV0b2J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OmNy
ZWF0ZUdTVFBsYXlCaW4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9NZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXIuaDoKKwogMjAxMC0wMi0wNCAgQW50b24gTXVoaW4gIDxhbnRv
bm1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9NZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXIuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyLmNwcAppbmRleCAwMzcyMDIxLi4wYjA2OTY4IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIu
Y3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL01lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lci5jcHAKQEAgLTMsNiArMyw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ29s
bGFib3JhIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
QWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwOSBHdXN0YXZv
IE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIw
MTAgSWdhbGlhIFMuTAogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC01NCw2ICs1NSwyMSBAQAogI2lu
Y2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJ2aWV3Lmg+CiAjaW5jbHVkZSA8d3RmL2d0ay9HT3duUHRy
Lmg+CiAKKy8vIEdzdFBsYXlGbGFncyBmbGFncyBmcm9tIHBsYXliaW4yLiBJdCBpcyB0aGUgcG9s
aWN5IG9mIEdTdHJlYW1lciB0bworLy8gbm90IHB1YmxpY2x5IGV4cG9zZSBlbGVtZW50LXNwZWNp
ZmljIGVudW1zLiBUaGF0J3Mgd2h5IHRoaXMKKy8vIEdzdFBsYXlGbGFncyBlbnVtIGhhcyBiZWVu
IGNvcGllZCBoZXJlLgordHlwZWRlZiBlbnVtIHsKKyAgICBHU1RfUExBWV9GTEFHX1ZJREVPICAg
ICAgICAgPSAweDAwMDAwMDAxLAorICAgIEdTVF9QTEFZX0ZMQUdfQVVESU8gICAgICAgICA9IDB4
MDAwMDAwMDIsCisgICAgR1NUX1BMQVlfRkxBR19URVhUICAgICAgICAgID0gMHgwMDAwMDAwNCwK
KyAgICBHU1RfUExBWV9GTEFHX1ZJUyAgICAgICAgICAgPSAweDAwMDAwMDA4LAorICAgIEdTVF9Q
TEFZX0ZMQUdfU09GVF9WT0xVTUUgICA9IDB4MDAwMDAwMTAsCisgICAgR1NUX1BMQVlfRkxBR19O
QVRJVkVfQVVESU8gID0gMHgwMDAwMDAyMCwKKyAgICBHU1RfUExBWV9GTEFHX05BVElWRV9WSURF
TyAgPSAweDAwMDAwMDQwLAorICAgIEdTVF9QTEFZX0ZMQUdfRE9XTkxPQUQgICAgICA9IDB4MDAw
MDAwODAsCisgICAgR1NUX1BMQVlfRkxBR19CVUZGRVJJTkcgICAgID0gMHgwMDAwMDAxMDAKK30g
R3N0UGxheUZsYWdzOworCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC02NCw3ICs4MCw2IEBAIGdib29sZWFuIG1lZGlhUGxheWVyUHJpdmF0ZU1lc3NhZ2VD
YWxsYmFjayhHc3RCdXMqIGJ1cywgR3N0TWVzc2FnZSogbWVzc2FnZSwgZ3BvCiAgICAgR093blB0
cjxnY2hhcj4gZGVidWc7CiAgICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBlcnJvcjsKICAg
ICBNZWRpYVBsYXllclByaXZhdGUqIG1wID0gcmVpbnRlcnByZXRfY2FzdDxNZWRpYVBsYXllclBy
aXZhdGUqPihkYXRhKTsKLSAgICBnaW50IHBlcmNlbnQgPSAwOwogICAgIGJvb2wgaXNzdWVFcnJv
ciA9IHRydWU7CiAgICAgYm9vbCBhdHRlbXB0TmV4dExvY2F0aW9uID0gZmFsc2U7CiAKQEAgLTEx
NCw4ICsxMjksNyBAQCBnYm9vbGVhbiBtZWRpYVBsYXllclByaXZhdGVNZXNzYWdlQ2FsbGJhY2so
R3N0QnVzKiBidXMsIEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIGdwbwogICAgICAgICBtcC0+dXBkYXRl
U3RhdGVzKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR1NUX01FU1NBR0VfQlVGRkVSSU5H
OgotICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9idWZmZXJpbmcobWVzc2FnZSwgJnBlcmNlbnQp
OwotICAgICAgICBMT0dfVkVSQk9TRShNZWRpYSwgIkJ1ZmZlcmluZyAlZCIsIHBlcmNlbnQpOwor
ICAgICAgICBtcC0+cHJvY2Vzc0J1ZmZlcmluZ1N0YXRzKG1lc3NhZ2UpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEdTVF9NRVNTQUdFX0RVUkFUSU9OOgogICAgICAgICBMT0dfVkVSQk9TRShN
ZWRpYSwgIkR1cmF0aW9uIGNoYW5nZWQiKTsKQEAgLTIxNiw2ICsyMzAsMTIgQEAgZ2Jvb2xlYW4g
bm90aWZ5TXV0ZUlkbGVDYWxsYmFjayhncG9pbnRlciBkYXRhKQogICAgIHJldHVybiBGQUxTRTsK
IH0KIAorZ2Jvb2xlYW4gYnVmZmVyaW5nVGltZW91dENhbGxiYWNrKGdwb2ludGVyIGRhdGEpCit7
CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlKiBtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8TWVkaWFQbGF5
ZXJQcml2YXRlKj4oZGF0YSk7CisgICAgcmV0dXJuIG1wLT5xdWVyeUJ1ZmZlcmluZ1N0YXRzKCk7
Cit9CisKIHN0YXRpYyBmbG9hdCBwbGF5YmFja1Bvc2l0aW9uKEdzdEVsZW1lbnQqIHBsYXliaW4p
CiB7CiAKQEAgLTMxOSwxMiArMzM5LDIyIEBAIE1lZGlhUGxheWVyUHJpdmF0ZTo6TWVkaWFQbGF5
ZXJQcml2YXRlKE1lZGlhUGxheWVyKiBwbGF5ZXIpCiAgICAgLCBtX3ZvbHVtZUlkbGVJZCgwKQog
ICAgICwgbV9tZWRpYUR1cmF0aW9uKDAuMCkKICAgICAsIG1fbXV0ZUlkbGVJZCgwKQorICAgICwg
bV9zdGFydGVkQnVmZmVyaW5nKGZhbHNlKQorICAgICwgbV9maWxsVGltZW91dElkKDApCisgICAg
LCBtX21heFRpbWVMb2FkZWQoMC4wKQorICAgICwgbV9maWxsU3RhdHVzKDAuMCkKIHsKLSAgICBk
b0dzdEluaXQoKTsKKyAgICBpZiAoZG9Hc3RJbml0KCkpCisgICAgICAgIGNyZWF0ZUdTVFBsYXlC
aW4oKTsKIH0KIAogTWVkaWFQbGF5ZXJQcml2YXRlOjp+TWVkaWFQbGF5ZXJQcml2YXRlKCkKIHsK
KyAgICBpZiAobV9maWxsVGltZW91dElkKSB7CisgICAgICAgIGdfc291cmNlX3JlbW92ZShtX2Zp
bGxUaW1lb3V0SWQpOworICAgICAgICBtX2ZpbGxUaW1lb3V0SWQgPSAwOworICAgIH0KKwogICAg
IGlmIChtX3ZvbHVtZUlkbGVJZCkgewogICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV92b2x1bWVJ
ZGxlSWQpOwogICAgICAgICBtX3ZvbHVtZUlkbGVJZCA9IDA7CkBAIC0zNzcsNyArNDA3LDcgQEAg
dm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmxvYWQoY29uc3QgU3RyaW5nJiB1cmwpCiAgICAgICAg
IG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOwogICAgIH0KIAotICAgIGNyZWF0ZUdTVFBs
YXlCaW4odXJsKTsKKyAgICBnX29iamVjdF9zZXQobV9wbGF5QmluLCAidXJpIiwgdXJsLnV0Zjgo
KS5kYXRhKCksIE5VTEwpOwogICAgIHBhdXNlKCk7CiB9CiAKQEAgLTY0OSwxNiArNjc5LDc4IEBA
IFBhc3NSZWZQdHI8VGltZVJhbmdlcz4gTWVkaWFQbGF5ZXJQcml2YXRlOjpidWZmZXJlZCgpIGNv
bnN0CiAgICAgcmV0dXJuIHRpbWVSYW5nZXMucmVsZWFzZSgpOwogfQogCit2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZTo6cHJvY2Vzc0J1ZmZlcmluZ1N0YXRzKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCit7
CisgICAgR3N0QnVmZmVyaW5nTW9kZSBtb2RlOworCisgICAgZ3N0X21lc3NhZ2VfcGFyc2VfYnVm
ZmVyaW5nX3N0YXRzKG1lc3NhZ2UsICZtb2RlLCAwLCAwLCAwKTsKKyAgICBpZiAobW9kZSAhPSBH
U1RfQlVGRkVSSU5HX0RPV05MT0FEKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fc3Rh
cnRlZEJ1ZmZlcmluZykgeworICAgICAgICBtX3N0YXJ0ZWRCdWZmZXJpbmcgPSB0cnVlOworCisg
ICAgICAgIGlmIChtX2ZpbGxUaW1lb3V0SWQgPiAwKQorICAgICAgICAgICAgZ19zb3VyY2VfcmVt
b3ZlKG1fZmlsbFRpbWVvdXRJZCk7CisKKyAgICAgICAgbV9maWxsVGltZW91dElkID0gZ190aW1l
b3V0X2FkZCgyMDAsIChHU291cmNlRnVuYykgYnVmZmVyaW5nVGltZW91dENhbGxiYWNrLCB0aGlz
KTsKKyAgICB9Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpxdWVyeUJ1ZmZlcmluZ1N0
YXRzKCkKK3sKKyAgICBHc3RRdWVyeSogcXVlcnkgPSBnc3RfcXVlcnlfbmV3X2J1ZmZlcmluZyhH
U1RfRk9STUFUX1BFUkNFTlQpOworCisgICAgaWYgKCFnc3RfZWxlbWVudF9xdWVyeShtX3BsYXlC
aW4sIHF1ZXJ5KSkgeworICAgICAgICBnc3RfcXVlcnlfdW5yZWYocXVlcnkpOworICAgICAgICBy
ZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICBnaW50NjQgc3RhcnQsIHN0b3A7CisKKyAgICBnc3Rf
cXVlcnlfcGFyc2VfYnVmZmVyaW5nX3JhbmdlKHF1ZXJ5LCAwLCAmc3RhcnQsICZzdG9wLCAwKTsK
KyAgICBnc3RfcXVlcnlfdW5yZWYocXVlcnkpOworCisgICAgaWYgKHN0b3AgIT0gLTEpCisgICAg
ICAgIG1fZmlsbFN0YXR1cyA9IDEwMC4wICogc3RvcCAvIEdTVF9GT1JNQVRfUEVSQ0VOVF9NQVg7
CisgICAgZWxzZQorICAgICAgICBtX2ZpbGxTdGF0dXMgPSAxMDAuMDsKKworICAgIExPR19WRVJC
T1NFKE1lZGlhLCAiRG93bmxvYWQgYnVmZmVyIGZpbGxlZCB1cCB0byAlZiUlIiwgbV9maWxsU3Rh
dHVzKTsKKworICAgIGlmICghbV9tZWRpYUR1cmF0aW9uKQorICAgICAgICBkdXJhdGlvbkNoYW5n
ZWQoKTsKKworICAgIC8vIFVwZGF0ZSBtYXhUaW1lTG9hZGVkIG9ubHkgaWYgdGhlIG1lZGlhIGR1
cmF0aW9uIGlzCisgICAgLy8gYXZhaWxhYmxlLiBPdGhlcndpc2Ugd2UgY2FuJ3QgY29tcHV0ZSBp
dC4KKyAgICBpZiAobV9tZWRpYUR1cmF0aW9uKSB7CisgICAgICAgIG1fbWF4VGltZUxvYWRlZCA9
IHN0YXRpY19jYXN0PGZsb2F0PigobV9maWxsU3RhdHVzICogbV9tZWRpYUR1cmF0aW9uKSAvIDEw
MC4wKTsKKyAgICAgICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJVcGRhdGVkIG1heFRpbWVMb2FkZWQ6
ICVmIiwgbV9tYXhUaW1lTG9hZGVkKTsKKyAgICB9CisKKyAgICBpZiAobV9maWxsU3RhdHVzICE9
IDEwMC4wKSB7CisgICAgICAgIHVwZGF0ZVN0YXRlcygpOworICAgICAgICByZXR1cm4gVFJVRTsK
KyAgICB9CisKKyAgICAvLyBNZWRpYSBpcyBub3cgZnVsbHkgbG9hZGVkLiBJdCB3aWxsIHBsYXkg
ZXZlbiBpZiBuZXR3b3JrCisgICAgLy8gY29ubmVjdGlvbiBpcyBjdXQuIEJ1ZmZlcmluZyBpcyBk
b25lLCByZW1vdmUgdGhlIGZpbGwgc291cmNlCisgICAgLy8gZnJvbSB0aGUgbWFpbiBsb29wLgor
ICAgIG1fZmlsbFRpbWVvdXRJZCA9IDA7CisgICAgdXBkYXRlU3RhdGVzKCk7CisgICAgcmV0dXJu
IEZBTFNFOworfQorCiBmbG9hdCBNZWRpYVBsYXllclByaXZhdGU6Om1heFRpbWVTZWVrYWJsZSgp
IGNvbnN0CiB7CiAgICAgaWYgKG1fZXJyb3JPY2N1cmVkKQogICAgICAgICByZXR1cm4gMC4wOwog
Ci0gICAgLy8gVE9ETwogICAgIExPR19WRVJCT1NFKE1lZGlhLCAibWF4VGltZVNlZWthYmxlIik7
Ci0gICAgaWYgKG1faXNTdHJlYW1pbmcpCi0gICAgICAgIHJldHVybiBudW1lcmljX2xpbWl0czxm
bG9hdD46OmluZmluaXR5KCk7CiAgICAgLy8gaW5maW5pdGUgZHVyYXRpb24gbWVhbnMgbGl2ZSBz
dHJlYW0KKyAgICBpZiAoaXNpbmYoZHVyYXRpb24oKSkpCisgICAgICAgIHJldHVybiAwLjA7CisK
ICAgICByZXR1cm4gbWF4VGltZUxvYWRlZCgpOwogfQogCkBAIC02NjcsMjkgKzc1OSwyOCBAQCBm
bG9hdCBNZWRpYVBsYXllclByaXZhdGU6Om1heFRpbWVMb2FkZWQoKSBjb25zdAogICAgIGlmICht
X2Vycm9yT2NjdXJlZCkKICAgICAgICAgcmV0dXJuIDAuMDsKIAotICAgIC8vIFRPRE8KLSAgICBM
T0dfVkVSQk9TRShNZWRpYSwgIm1heFRpbWVMb2FkZWQiKTsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiBkdXJhdGlvbigpOworICAgIGZsb2F0IGxvYWRlZCA9IG1fbWF4VGltZUxv
YWRlZDsKKyAgICBpZiAoIWxvYWRlZCAmJiAhbV9maWxsVGltZW91dElkKQorICAgICAgICBsb2Fk
ZWQgPSBkdXJhdGlvbigpOworICAgIExPR19WRVJCT1NFKE1lZGlhLCAibWF4VGltZUxvYWRlZDog
JWYiLCBsb2FkZWQpOworICAgIHJldHVybiBsb2FkZWQ7CiB9CiAKIHVuc2lnbmVkIE1lZGlhUGxh
eWVyUHJpdmF0ZTo6Ynl0ZXNMb2FkZWQoKSBjb25zdAogewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJieXRlc0xvYWRlZCIpOwotICAgIC8qaWYgKCFtX3Bs
YXlCaW4pCisgICAgaWYgKCFtX3BsYXlCaW4pCiAgICAgICAgIHJldHVybiAwOwotICAgIGZsb2F0
IGR1ciA9IGR1cmF0aW9uKCk7Ci0gICAgZmxvYXQgbWF4VGltZSA9IG1heFRpbWVMb2FkZWQoKTsK
LSAgICBpZiAoIWR1cikKLSAgICAgICAgcmV0dXJuIDA7Ki8KIAotICAgIHJldHVybiAxOyAvLyB0
b3RhbEJ5dGVzKCkgKiBtYXhUaW1lIC8gZHVyOworICAgIGlmICghbV9tZWRpYUR1cmF0aW9uKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIHVuc2lnbmVkIGxvYWRlZCA9IHRvdGFsQnl0ZXMoKSAq
IG1heFRpbWVMb2FkZWQoKSAvIG1fbWVkaWFEdXJhdGlvbjsKKyAgICBMT0dfVkVSQk9TRShNZWRp
YSwgImJ5dGVzTG9hZGVkOiAlZCIsIGxvYWRlZCk7CisgICAgcmV0dXJuIGxvYWRlZDsKIH0KIAog
dW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlOjp0b3RhbEJ5dGVzKCkgY29uc3QKIHsKLSAgICBM
T0dfVkVSQk9TRShNZWRpYSwgInRvdGFsQnl0ZXMiKTsKICAgICBpZiAoIW1fc291cmNlKQogICAg
ICAgICByZXR1cm4gMDsKIApAQCAtNjk5LDYgKzc5MCw3IEBAIHVuc2lnbmVkIE1lZGlhUGxheWVy
UHJpdmF0ZTo6dG90YWxCeXRlcygpIGNvbnN0CiAgICAgR3N0Rm9ybWF0IGZtdCA9IEdTVF9GT1JN
QVRfQllURVM7CiAgICAgZ2ludDY0IGxlbmd0aCA9IDA7CiAgICAgZ3N0X2VsZW1lbnRfcXVlcnlf
ZHVyYXRpb24obV9zb3VyY2UsICZmbXQsICZsZW5ndGgpOworICAgIExPR19WRVJCT1NFKE1lZGlh
LCAidG90YWxCeXRlcyAlIiBHX0dJTlQ2NF9GT1JNQVQsIGxlbmd0aCk7CiAKICAgICByZXR1cm4g
bGVuZ3RoOwogfQpAQCAtNzU3LDYgKzg0OSwzMCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6
dXBkYXRlU3RhdGVzKCkKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBtX3BhdXNlZCA9IHRy
dWU7CiAKKyAgICAgICAgLy8gSXMgb24tZGlzayBidWZmZXJpbmcgaW4gcHJvZ3Jlc3M/CisgICAg
ICAgIGlmIChtX2ZpbGxUaW1lb3V0SWQpIHsKKyAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0g
TWVkaWFQbGF5ZXI6OkxvYWRpbmc7CisgICAgICAgICAgICBpZiAoKG1fZmlsbFN0YXR1cyA+IDAp
ICYmIChtX3JlYWR5U3RhdGUgPCBNZWRpYVBsYXllcjo6SGF2ZUZ1dHVyZURhdGEpKSB7CisgICAg
ICAgICAgICAgICAgLy8gQnVmZmVyaW5nIGhhcyBqdXN0IHN0YXJ0ZWQsIHdlIHNob3VsZCBub3cg
aGF2ZSBlbm91Z2ggZGF0YSB0bworICAgICAgICAgICAgICAgIC8vIHJlc3RhcnQgcGxheWJhY2sg
aWYgaXQgd2FzIGludGVybmFsbHkgcGF1c2VkIGJ5IEdTdHJlYW1lcgorICAgICAgICAgICAgICAg
IG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlRnV0dXJlRGF0YTsKKyAgICAgICAgICAg
ICAgICBpZiAobV9wYXVzZWQpCisgICAgICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X3NldF9z
dGF0ZShtX3BsYXlCaW4sIEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChtYXhUaW1lTG9hZGVkKCkgPT0gZHVyYXRpb24oKSkgeworICAg
ICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGVkOworICAgICAgICAg
ICAgaWYgKHN0YXRlID09IEdTVF9TVEFURV9SRUFEWSkKKyAgICAgICAgICAgICAgICBtX3JlYWR5
U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7CisgICAgICAgICAgICBlbHNlIGlmIChz
dGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VEKQorICAgICAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9
IE1lZGlhUGxheWVyOjpIYXZlRW5vdWdoRGF0YTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBpZiAoc3RhdGUgPT0gR1NUX1NUQVRFX1JFQURZKQorICAgICAgICAgICAgICAgIG1fcmVhZHlT
dGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKKyAgICAgICAgICAgIGVsc2UgaWYgKG1f
cGF1c2VkKQorICAgICAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IGN1cnJlbnRUaW1lKCkgPCBt
YXhUaW1lTG9hZGVkKCkgPyBNZWRpYVBsYXllcjo6SGF2ZUZ1dHVyZURhdGEgOiBNZWRpYVBsYXll
cjo6SGF2ZUN1cnJlbnREYXRhOworCiAgICAgICAgIGlmIChtX2NoYW5naW5nUmF0ZSkgewogICAg
ICAgICAgICAgbV9wbGF5ZXItPnJhdGVDaGFuZ2VkKCk7CiAgICAgICAgICAgICBtX2NoYW5naW5n
UmF0ZSA9IGZhbHNlOwpAQCAtNzY3LDcgKzg4Myw2IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
Ojp1cGRhdGVTdGF0ZXMoKQogICAgICAgICAgICAgbV9zZWVraW5nID0gZmFsc2U7CiAgICAgICAg
IH0KIAotICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkZWQ7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9BU1lOQzoKICAgICAgICAgTE9H
X1ZFUkJPU0UoTWVkaWEsICJBc3luYzogU3RhdGU6ICVzLCBwZW5kaW5nOiAlcyIsCkBAIC0xMTg5
LDcgKzEzMDQsMTkgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGU6OnN1cHBvcnRzRnVsbHNjcmVl
bigpIGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
OjpjcmVhdGVHU1RQbGF5QmluKFN0cmluZyB1cmwpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6
c2V0QXV0b2J1ZmZlcihib29sIGF1dG9CdWZmZXIpCit7CisgICAgQVNTRVJUKG1fcGxheUJpbik7
CisKKyAgICBHc3RQbGF5RmxhZ3MgZmxhZ3M7CisgICAgZ19vYmplY3RfZ2V0KG1fcGxheUJpbiwg
ImZsYWdzIiwgJmZsYWdzLCBOVUxMKTsKKyAgICBpZiAoYXV0b0J1ZmZlcikKKyAgICAgICAgZ19v
YmplY3Rfc2V0KG1fcGxheUJpbiwgImZsYWdzIiwgZmxhZ3MgfCBHU1RfUExBWV9GTEFHX0RPV05M
T0FELCBOVUxMKTsKKyAgICBlbHNlCisgICAgICAgIGdfb2JqZWN0X3NldChtX3BsYXlCaW4sICJm
bGFncyIsIGZsYWdzICYgfkdTVF9QTEFZX0ZMQUdfRE9XTkxPQUQsIE5VTEwpOworfQorCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZTo6Y3JlYXRlR1NUUGxheUJpbigpCiB7CiAgICAgQVNTRVJUKCFt
X3BsYXlCaW4pOwogICAgIG1fcGxheUJpbiA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgicGxh
eWJpbjIiLCAicGxheSIpOwpAQCAtMTE5OSw4ICsxMzI2LDYgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGU6OmNyZWF0ZUdTVFBsYXlCaW4oU3RyaW5nIHVybCkKICAgICBnX3NpZ25hbF9jb25uZWN0
KGJ1cywgIm1lc3NhZ2UiLCBHX0NBTExCQUNLKG1lZGlhUGxheWVyUHJpdmF0ZU1lc3NhZ2VDYWxs
YmFjayksIHRoaXMpOwogICAgIGdzdF9vYmplY3RfdW5yZWYoYnVzKTsKIAotICAgIGdfb2JqZWN0
X3NldChtX3BsYXlCaW4sICJ1cmkiLCB1cmwudXRmOCgpLmRhdGEoKSwgTlVMTCk7Ci0KICAgICBn
X3NpZ25hbF9jb25uZWN0KG1fcGxheUJpbiwgIm5vdGlmeTo6dm9sdW1lIiwgR19DQUxMQkFDSyht
ZWRpYVBsYXllclByaXZhdGVWb2x1bWVDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKICAgICBnX3Np
Z25hbF9jb25uZWN0KG1fcGxheUJpbiwgIm5vdGlmeTo6c291cmNlIiwgR19DQUxMQkFDSyhtZWRp
YVBsYXllclByaXZhdGVTb3VyY2VDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKICAgICBnX3NpZ25h
bF9jb25uZWN0KG1fcGxheUJpbiwgIm5vdGlmeTo6bXV0ZSIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5
ZXJQcml2YXRlTXV0ZUNoYW5nZWRDYWxsYmFjayksIHRoaXMpOwpAQCAtMTIxOSw3ICsxMzQ0LDcg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmNyZWF0ZUdTVFBsYXlCaW4oU3RyaW5nIHVybCkK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1fZnBzU2luayA9IDA7CiAgICAgICAgICAg
ICBnX29iamVjdF9zZXQobV9wbGF5QmluLCAidmlkZW8tc2luayIsIG1fdmlkZW9TaW5rLCBOVUxM
KTsKLSAgICAgICAgICAgIExPRyhNZWRpYSwgIkNhbid0IGRpc3BsYXkgRlBTIHN0YXRpc3RpY3Ms
IHlvdSBuZWVkIGdzdC1wbHVnaW5zLWJhZCA+PSAwLjEwLjE4Iik7CisgICAgICAgICAgICBMT0df
VkVSQk9TRShNZWRpYSwgIkNhbid0IGRpc3BsYXkgRlBTIHN0YXRpc3RpY3MsIHlvdSBuZWVkIGdz
dC1wbHVnaW5zLWJhZCA+PSAwLjEwLjE4Iik7CiAgICAgICAgIH0KICAgICB9IGVsc2UKICAgICAg
ICAgZ19vYmplY3Rfc2V0KG1fcGxheUJpbiwgInZpZGVvLXNpbmsiLCBtX3ZpZGVvU2luaywgTlVM
TCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCmluZGV4IDM0MjU3Y2EuLjAwZGRjNGIgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lci5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lci5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA3LCAy
MDA5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykg
MjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAy
MDEwIElnYWxpYSBTLkwKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtODYsNiArODcsOCBAQCBjbGFz
cyBNZWRpYVBsYXllclByaXZhdGUgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNl
IHsKICAgICAgICAgICAgIHZvaWQgbXV0ZUNoYW5nZWQoKTsKICAgICAgICAgICAgIHZvaWQgbXV0
ZUNoYW5nZWRDYWxsYmFjaygpOwogCisgICAgICAgICAgICB2b2lkIHNldEF1dG9idWZmZXIoYm9v
bCk7CisKICAgICAgICAgICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRl
KCkgY29uc3Q7CiAgICAgICAgICAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRl
KCkgY29uc3Q7CiAKQEAgLTExMyw2ICsxMTYsOCBAQCBjbGFzcyBNZWRpYVBsYXllclByaXZhdGUg
OiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlIHsKICAgICAgICAgICAgIGJvb2wg
c3VwcG9ydHNGdWxsc2NyZWVuKCkgY29uc3Q7CiAKICAgICAgICAgICAgIGJvb2wgcGlwZWxpbmVS
ZXNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzZXRQaXBlbGluZTsgfQorICAgICAgICAgICAgdm9p
ZCBwcm9jZXNzQnVmZmVyaW5nU3RhdHMoR3N0TWVzc2FnZSogbWVzc2FnZSk7CisgICAgICAgICAg
ICBib29sIHF1ZXJ5QnVmZmVyaW5nU3RhdHMoKTsKIAogICAgICAgICBwcml2YXRlOgogICAgICAg
ICAgICAgTWVkaWFQbGF5ZXJQcml2YXRlKE1lZGlhUGxheWVyKik7CkBAIC0xMjgsNyArMTMzLDcg
QEAgY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlIDogcHVibGljIE1lZGlhUGxheWVyUHJpdmF0ZUlu
dGVyZmFjZSB7CiAgICAgICAgICAgICBmbG9hdCBtYXhUaW1lTG9hZGVkKCkgY29uc3Q7CiAgICAg
ICAgICAgICB2b2lkIHN0YXJ0RW5kUG9pbnRUaW1lcklmTmVlZGVkKCk7CiAKLSAgICAgICAgICAg
IHZvaWQgY3JlYXRlR1NUUGxheUJpbihTdHJpbmcgdXJsKTsKKyAgICAgICAgICAgIHZvaWQgY3Jl
YXRlR1NUUGxheUJpbigpOwogICAgICAgICAgICAgYm9vbCBjaGFuZ2VQaXBlbGluZVN0YXRlKEdz
dFN0YXRlIHN0YXRlKTsKIAogICAgICAgICBwcml2YXRlOgpAQCAtMTU3LDYgKzE2MiwxMCBAQCBj
bGFzcyBNZWRpYVBsYXllclByaXZhdGUgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJm
YWNlIHsKICAgICAgICAgICAgIGd1aW50IG1fdm9sdW1lSWRsZUlkOwogICAgICAgICAgICAgZ2Zs
b2F0IG1fbWVkaWFEdXJhdGlvbjsKICAgICAgICAgICAgIGd1aW50IG1fbXV0ZUlkbGVJZDsKKyAg
ICAgICAgICAgIGJvb2wgbV9zdGFydGVkQnVmZmVyaW5nOworICAgICAgICAgICAgZ3VpbnQgbV9m
aWxsVGltZW91dElkOworICAgICAgICAgICAgZmxvYXQgbV9tYXhUaW1lTG9hZGVkOworICAgICAg
ICAgICAgZ2RvdWJsZSBtX2ZpbGxTdGF0dXM7CiAgICAgfTsKIH0KIAotLSAKMS42LjMuMw==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48630</attachid>
            <date>2010-02-12 00:57:18 -0800</date>
            <delta_ts>2010-02-15 02:58:35 -0800</delta_ts>
            <desc>initial support for on-disk buffering of videos</desc>
            <filename>initial-support-for-on-disk-buffering-of-videos.patch</filename>
            <type>text/plain</type>
            <size>15859</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSA3NzczMDRhMmExYTYyN2VhYTkzYjAwNTFkOWI4ZjExNTQ3NjEwMTk2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBUdWUsIDUgSmFuIDIwMTAgMTY6Mjk6NTYgKzAxMDAKU3ViamVjdDogW1BBVENIXSBp
bml0aWFsIHN1cHBvcnQgZm9yIG9uLWRpc2sgYnVmZmVyaW5nIG9mIHZpZGVvcwoKLS0tCiBXZWJD
b3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNDMgKysr
KysKIC4uLi9ncmFwaGljcy9ndGsvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCAgIHwg
IDE4NCArKysrKysrKysrKysrKysrKy0tLQogLi4uL2dyYXBoaWNzL2d0ay9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIuaCAgICAgfCAgIDEyICsrLQogMyBmaWxlcyBjaGFuZ2VkLCAyMTAgaW5z
ZXJ0aW9ucygrKSwgMjkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VM
b2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5ZmRmMmNmLi5hOWU1MmU3IDEwMDY0NAotLS0g
YS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2
IEBACisyMDEwLTAxLTA3ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1N0cmVh
bWVyXSBTaG91bGQgaGFuZGxlIEJVRkZFUklORyBtZXNzYWdlcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzAwMDQKKworICAgICAgICBJbml0aWFsIHN1
cHBvcnQgZm9yIG9uLWRpc2sgYnVmZmVyaW5nIG9mIHZpZGVvcy4gVGhpcyB3b3JrcyBvbmx5Cisg
ICAgICAgIGZvciBRdWlja3RpbWUgYW5kIGZsdiB0aG91Z2guCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9ndGsvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Om1lZGlhUGxheWVyUHJpdmF0ZU1lc3NhZ2VDYWxsYmFjayk6IERlZmVyIGJ1ZmZl
cmluZworICAgICAgICBtZXNzYWdlcyBoYW5kbGluZyB0byBwcm9jZXNzQnVmZmVyaW5nU3RhdHMo
KS4KKyAgICAgICAgKFdlYkNvcmU6OmJ1ZmZlcmluZ1RpbWVvdXRDYWxsYmFjayk6IENsb3N1cmUg
Y2FsbGVkIHBlcmlvZGljYWxseQorICAgICAgICBkdXJpbmcgdGhlIG9uLWRpc2sgYnVmZmVyaW5n
IHByb2Nlc3MuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZSk6IE5ldyBpbnN0YW5jZQorICAgICAgICB2YXJpYWJsZXMgYW5kIGNyZWF0ZSBw
bGF5YmluMiBoZXJlIGluc3RlYWQgb2YgZG9pbmcgaXQgaW4gbG9hZCgpLgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjp+TWVkaWFQbGF5ZXJQcml2YXRlKTogTmV3IGluc3Rh
bmNlCisgICAgICAgIHZhcmlhYmxlcy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZTo6bG9hZCk6IFNpbXBseSBzZXQgdXJpIG9uIHBsYXliaW4yCisgICAgICAgIGluc3RlYWQg
b2YgY3JlYXRpbmcgdGhlIHBpcGVsaW5lIGFuZCBzZXR0aW5nIHVyaSBhbGwgdG9nZXRoZXIuCisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnByb2Nlc3NCdWZmZXJpbmdTdGF0
cyk6IFN0YXJ0IGEgbmV3CisgICAgICAgIHRpbWVvdXQgc291cmNlIGlmIHRoZSBwbGF5ZXIgaXMg
c3RhcnRpbmcgb24tZGlzayBidWZmZXJpbmcuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGU6OnF1ZXJ5QnVmZmVyaW5nU3RhdHMpOiBNZXRob2QgY2FsbGVkCisgICAgICAgIDIw
MG1zIGR1cmluZyBvbi1kaXNrIGJ1ZmZlcmluZyB0byB1cGRhdGUgdGhlIG1heFRpbWVMb2FkZWQg
YW5kIGZldworICAgICAgICBvdGhlciBwcml2YXRlIHZhcmlhYmxlcy4KKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6bWF4VGltZVNlZWthYmxlKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6bWF4VGltZUxvYWRlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGU6OmJ5dGVzTG9hZGVkKTogRml4ZWQgaW1wbGVtZW50YXRpb25z
CisgICAgICAgIHJlZ2FyZGluZyBidWZmZXJpbmcuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGU6OnRvdGFsQnl0ZXMpOiBJbXByb3ZlZCBsb2dnaW5nLgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjp1cGRhdGVTdGF0ZXMpOiBTdGFydCBwbGF5YmFjayBp
ZiBpdAorICAgICAgICB3YXMgaW50ZXJuYWxseSBwYXVzZWQgYXQgYmVnaW5uaW5nIG9mIG9uLWRp
c2sgYnVmZmVyaW5nIGFuZCBzZXQKKyAgICAgICAgcmVhZHkvbmV0d29yayBzdGF0ZXMgZGVwZW5k
aW5nIG9uIHRoZSBzdGF0ZSBvZiB0aGUgb24tZGlzaworICAgICAgICBidWZmZXJpbmcgcHJvY2Vz
cy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6ZGlkRW5kKTogRW1pdCBk
dXJhdGlvbkNoYW5nZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnNl
dEF1dG9idWZmZXIpOiBFZGl0IHBsYXliaW4yIGZsYWdzCisgICAgICAgIHByb3BlcnR5IGRlcGVu
ZGluZyBvbiBhdXRvQnVmZmVyIHZhbHVlLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlOjpjcmVhdGVHU1RQbGF5QmluKTogRG9uJ3Qgc2V0IHVyaQorICAgICAgICB0aGVyZSwg
aXQgaXMgbm93IGRvbmUgaW4gbG9hZCgpLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0
ay9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaDogTmV3IG1ldGhvZHMKKyAgICAgICAgYW5k
IGluc3RhbmNlIHZhcmlhYmxlcy4KKwogMjAxMC0wMi0wOCAgRG9taW5pYyBDb29uZXkgIDxkb21p
bmljY0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9NZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXIuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyLmNwcAppbmRleCAxODY2YzM2Li5lYTJhMDEzIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIu
Y3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL01lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lci5jcHAKQEAgLTMsNiArMyw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ29s
bGFib3JhIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
QWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwOSBHdXN0YXZv
IE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIw
MTAgSWdhbGlhIFMuTAogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC01NSw2ICs1NiwyMSBAQAogI2lu
Y2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJ2aWV3Lmg+CiAjaW5jbHVkZSA8d3RmL2d0ay9HT3duUHRy
Lmg+CiAKKy8vIEdzdFBsYXlGbGFncyBmbGFncyBmcm9tIHBsYXliaW4yLiBJdCBpcyB0aGUgcG9s
aWN5IG9mIEdTdHJlYW1lciB0bworLy8gbm90IHB1YmxpY2x5IGV4cG9zZSBlbGVtZW50LXNwZWNp
ZmljIGVudW1zLiBUaGF0J3Mgd2h5IHRoaXMKKy8vIEdzdFBsYXlGbGFncyBlbnVtIGhhcyBiZWVu
IGNvcGllZCBoZXJlLgordHlwZWRlZiBlbnVtIHsKKyAgICBHU1RfUExBWV9GTEFHX1ZJREVPICAg
ICAgICAgPSAweDAwMDAwMDAxLAorICAgIEdTVF9QTEFZX0ZMQUdfQVVESU8gICAgICAgICA9IDB4
MDAwMDAwMDIsCisgICAgR1NUX1BMQVlfRkxBR19URVhUICAgICAgICAgID0gMHgwMDAwMDAwNCwK
KyAgICBHU1RfUExBWV9GTEFHX1ZJUyAgICAgICAgICAgPSAweDAwMDAwMDA4LAorICAgIEdTVF9Q
TEFZX0ZMQUdfU09GVF9WT0xVTUUgICA9IDB4MDAwMDAwMTAsCisgICAgR1NUX1BMQVlfRkxBR19O
QVRJVkVfQVVESU8gID0gMHgwMDAwMDAyMCwKKyAgICBHU1RfUExBWV9GTEFHX05BVElWRV9WSURF
TyAgPSAweDAwMDAwMDQwLAorICAgIEdTVF9QTEFZX0ZMQUdfRE9XTkxPQUQgICAgICA9IDB4MDAw
MDAwODAsCisgICAgR1NUX1BMQVlfRkxBR19CVUZGRVJJTkcgICAgID0gMHgwMDAwMDAxMDAKK30g
R3N0UGxheUZsYWdzOworCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC02NSw3ICs4MSw2IEBAIGdib29sZWFuIG1lZGlhUGxheWVyUHJpdmF0ZU1lc3NhZ2VD
YWxsYmFjayhHc3RCdXMqIGJ1cywgR3N0TWVzc2FnZSogbWVzc2FnZSwgZ3BvCiAgICAgR093blB0
cjxnY2hhcj4gZGVidWc7CiAgICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBlcnJvcjsKICAg
ICBNZWRpYVBsYXllclByaXZhdGUqIG1wID0gcmVpbnRlcnByZXRfY2FzdDxNZWRpYVBsYXllclBy
aXZhdGUqPihkYXRhKTsKLSAgICBnaW50IHBlcmNlbnQgPSAwOwogICAgIGJvb2wgaXNzdWVFcnJv
ciA9IHRydWU7CiAgICAgYm9vbCBhdHRlbXB0TmV4dExvY2F0aW9uID0gZmFsc2U7CiAKQEAgLTEx
NSw4ICsxMzAsNyBAQCBnYm9vbGVhbiBtZWRpYVBsYXllclByaXZhdGVNZXNzYWdlQ2FsbGJhY2so
R3N0QnVzKiBidXMsIEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIGdwbwogICAgICAgICBtcC0+dXBkYXRl
U3RhdGVzKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR1NUX01FU1NBR0VfQlVGRkVSSU5H
OgotICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9idWZmZXJpbmcobWVzc2FnZSwgJnBlcmNlbnQp
OwotICAgICAgICBMT0dfVkVSQk9TRShNZWRpYSwgIkJ1ZmZlcmluZyAlZCIsIHBlcmNlbnQpOwor
ICAgICAgICBtcC0+cHJvY2Vzc0J1ZmZlcmluZ1N0YXRzKG1lc3NhZ2UpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEdTVF9NRVNTQUdFX0RVUkFUSU9OOgogICAgICAgICBMT0dfVkVSQk9TRShN
ZWRpYSwgIkR1cmF0aW9uIGNoYW5nZWQiKTsKQEAgLTE3NCw2ICsxODgsMTIgQEAgZ2Jvb2xlYW4g
bm90aWZ5TXV0ZUlkbGVDYWxsYmFjayhncG9pbnRlciBkYXRhKQogICAgIHJldHVybiBGQUxTRTsK
IH0KIAorZ2Jvb2xlYW4gYnVmZmVyaW5nVGltZW91dENhbGxiYWNrKGdwb2ludGVyIGRhdGEpCit7
CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlKiBtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8TWVkaWFQbGF5
ZXJQcml2YXRlKj4oZGF0YSk7CisgICAgcmV0dXJuIG1wLT5xdWVyeUJ1ZmZlcmluZ1N0YXRzKCk7
Cit9CisKIHN0YXRpYyBmbG9hdCBwbGF5YmFja1Bvc2l0aW9uKEdzdEVsZW1lbnQqIHBsYXliaW4p
CiB7CiAKQEAgLTI3OCwxNCArMjk4LDI0IEBAIE1lZGlhUGxheWVyUHJpdmF0ZTo6TWVkaWFQbGF5
ZXJQcml2YXRlKE1lZGlhUGxheWVyKiBwbGF5ZXIpCiAgICAgLCBtX3BsYXliYWNrUmF0ZSgxKQog
ICAgICwgbV9lcnJvck9jY3VyZWQoZmFsc2UpCiAgICAgLCBtX3ZvbHVtZUlkbGVJZCgwKQotICAg
ICwgbV9tZWRpYUR1cmF0aW9uKDAuMCkKKyAgICAsIG1fbWVkaWFEdXJhdGlvbigwKQogICAgICwg
bV9tdXRlSWRsZUlkKDApCisgICAgLCBtX3N0YXJ0ZWRCdWZmZXJpbmcoZmFsc2UpCisgICAgLCBt
X2ZpbGxUaW1lb3V0SWQoMCkKKyAgICAsIG1fbWF4VGltZUxvYWRlZCgwKQorICAgICwgbV9maWxs
U3RhdHVzKDApCiB7Ci0gICAgZG9Hc3RJbml0KCk7CisgICAgaWYgKGRvR3N0SW5pdCgpKQorICAg
ICAgICBjcmVhdGVHU1RQbGF5QmluKCk7CiB9CiAKIE1lZGlhUGxheWVyUHJpdmF0ZTo6fk1lZGlh
UGxheWVyUHJpdmF0ZSgpCiB7CisgICAgaWYgKG1fZmlsbFRpbWVvdXRJZCkgeworICAgICAgICBn
X3NvdXJjZV9yZW1vdmUobV9maWxsVGltZW91dElkKTsKKyAgICAgICAgbV9maWxsVGltZW91dElk
ID0gMDsKKyAgICB9CisKICAgICBpZiAobV92b2x1bWVJZGxlSWQpIHsKICAgICAgICAgZ19zb3Vy
Y2VfcmVtb3ZlKG1fdm9sdW1lSWRsZUlkKTsKICAgICAgICAgbV92b2x1bWVJZGxlSWQgPSAwOwpA
QCAtMzM4LDcgKzM2OCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpsb2FkKGNvbnN0IFN0
cmluZyYgdXJsKQogICAgICAgICBtX3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKICAgICB9
CiAKLSAgICBjcmVhdGVHU1RQbGF5QmluKHVybCk7CisgICAgZ19vYmplY3Rfc2V0KG1fcGxheUJp
biwgInVyaSIsIHVybC51dGY4KCkuZGF0YSgpLCBOVUxMKTsKICAgICBwYXVzZSgpOwogfQogCkBA
IC02MTAsMTYgKzY0MCw3OSBAQCBQYXNzUmVmUHRyPFRpbWVSYW5nZXM+IE1lZGlhUGxheWVyUHJp
dmF0ZTo6YnVmZmVyZWQoKSBjb25zdAogICAgIHJldHVybiB0aW1lUmFuZ2VzLnJlbGVhc2UoKTsK
IH0KIAordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnByb2Nlc3NCdWZmZXJpbmdTdGF0cyhHc3RN
ZXNzYWdlKiBtZXNzYWdlKQoreworICAgIEdzdEJ1ZmZlcmluZ01vZGUgbW9kZTsKKworICAgIGdz
dF9tZXNzYWdlX3BhcnNlX2J1ZmZlcmluZ19zdGF0cyhtZXNzYWdlLCAmbW9kZSwgMCwgMCwgMCk7
CisgICAgaWYgKG1vZGUgIT0gR1NUX0JVRkZFUklOR19ET1dOTE9BRCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKCFtX3N0YXJ0ZWRCdWZmZXJpbmcpIHsKKyAgICAgICAgbV9zdGFydGVkQnVm
ZmVyaW5nID0gdHJ1ZTsKKworICAgICAgICBpZiAobV9maWxsVGltZW91dElkID4gMCkKKyAgICAg
ICAgICAgIGdfc291cmNlX3JlbW92ZShtX2ZpbGxUaW1lb3V0SWQpOworCisgICAgICAgIG1fZmls
bFRpbWVvdXRJZCA9IGdfdGltZW91dF9hZGQoMjAwLCAoR1NvdXJjZUZ1bmMpIGJ1ZmZlcmluZ1Rp
bWVvdXRDYWxsYmFjaywgdGhpcyk7CisgICAgfQorfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0
ZTo6cXVlcnlCdWZmZXJpbmdTdGF0cygpCit7CisgICAgR3N0UXVlcnkqIHF1ZXJ5ID0gZ3N0X3F1
ZXJ5X25ld19idWZmZXJpbmcoR1NUX0ZPUk1BVF9QRVJDRU5UKTsKKworICAgIGlmICghZ3N0X2Vs
ZW1lbnRfcXVlcnkobV9wbGF5QmluLCBxdWVyeSkpIHsKKyAgICAgICAgZ3N0X3F1ZXJ5X3VucmVm
KHF1ZXJ5KTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgZ2ludDY0IHN0YXJ0
LCBzdG9wOworCisgICAgZ3N0X3F1ZXJ5X3BhcnNlX2J1ZmZlcmluZ19yYW5nZShxdWVyeSwgMCwg
JnN0YXJ0LCAmc3RvcCwgMCk7CisgICAgZ3N0X3F1ZXJ5X3VucmVmKHF1ZXJ5KTsKKworICAgIGlm
IChzdG9wICE9IC0xKQorICAgICAgICBtX2ZpbGxTdGF0dXMgPSAxMDAuMCAqIHN0b3AgLyBHU1Rf
Rk9STUFUX1BFUkNFTlRfTUFYOworICAgIGVsc2UKKyAgICAgICAgbV9maWxsU3RhdHVzID0gMTAw
LjA7CisKKyAgICBMT0dfVkVSQk9TRShNZWRpYSwgIkRvd25sb2FkIGJ1ZmZlciBmaWxsZWQgdXAg
dG8gJWYlJSIsIG1fZmlsbFN0YXR1cyk7CisKKyAgICBpZiAoIW1fbWVkaWFEdXJhdGlvbikKKyAg
ICAgICAgZHVyYXRpb25DaGFuZ2VkKCk7CisKKyAgICAvLyBVcGRhdGUgbWF4VGltZUxvYWRlZCBv
bmx5IGlmIHRoZSBtZWRpYSBkdXJhdGlvbiBpcworICAgIC8vIGF2YWlsYWJsZS4gT3RoZXJ3aXNl
IHdlIGNhbid0IGNvbXB1dGUgaXQuCisgICAgaWYgKG1fbWVkaWFEdXJhdGlvbikgeworICAgICAg
ICBtX21heFRpbWVMb2FkZWQgPSBzdGF0aWNfY2FzdDxmbG9hdD4oKG1fZmlsbFN0YXR1cyAqIG1f
bWVkaWFEdXJhdGlvbikgLyAxMDAuMCk7CisgICAgICAgIExPR19WRVJCT1NFKE1lZGlhLCAiVXBk
YXRlZCBtYXhUaW1lTG9hZGVkOiAlZiIsIG1fbWF4VGltZUxvYWRlZCk7CisgICAgfQorCisgICAg
aWYgKG1fZmlsbFN0YXR1cyAhPSAxMDAuMCkgeworICAgICAgICB1cGRhdGVTdGF0ZXMoKTsKKyAg
ICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgLy8gTWVkaWEgaXMgbm93IGZ1bGx5IGxv
YWRlZC4gSXQgd2lsbCBwbGF5IGV2ZW4gaWYgbmV0d29yaworICAgIC8vIGNvbm5lY3Rpb24gaXMg
Y3V0LiBCdWZmZXJpbmcgaXMgZG9uZSwgcmVtb3ZlIHRoZSBmaWxsIHNvdXJjZQorICAgIC8vIGZy
b20gdGhlIG1haW4gbG9vcC4KKyAgICBtX2ZpbGxUaW1lb3V0SWQgPSAwOworICAgIG1fc3RhcnRl
ZEJ1ZmZlcmluZyA9IGZhbHNlOworICAgIHVwZGF0ZVN0YXRlcygpOworICAgIHJldHVybiBGQUxT
RTsKK30KKwogZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjptYXhUaW1lU2Vla2FibGUoKSBjb25z
dAogewogICAgIGlmIChtX2Vycm9yT2NjdXJlZCkKICAgICAgICAgcmV0dXJuIDAuMDsKIAotICAg
IC8vIFRPRE8KICAgICBMT0dfVkVSQk9TRShNZWRpYSwgIm1heFRpbWVTZWVrYWJsZSIpOwotICAg
IGlmIChtX2lzU3RyZWFtaW5nKQotICAgICAgICByZXR1cm4gbnVtZXJpY19saW1pdHM8ZmxvYXQ+
OjppbmZpbml0eSgpOwogICAgIC8vIGluZmluaXRlIGR1cmF0aW9uIG1lYW5zIGxpdmUgc3RyZWFt
CisgICAgaWYgKGlzaW5mKGR1cmF0aW9uKCkpKQorICAgICAgICByZXR1cm4gMC4wOworCiAgICAg
cmV0dXJuIG1heFRpbWVMb2FkZWQoKTsKIH0KIApAQCAtNjI4LDI5ICs3MjEsMjggQEAgZmxvYXQg
TWVkaWFQbGF5ZXJQcml2YXRlOjptYXhUaW1lTG9hZGVkKCkgY29uc3QKICAgICBpZiAobV9lcnJv
ck9jY3VyZWQpCiAgICAgICAgIHJldHVybiAwLjA7CiAKLSAgICAvLyBUT0RPCi0gICAgTE9HX1ZF
UkJPU0UoTWVkaWEsICJtYXhUaW1lTG9hZGVkIik7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gZHVyYXRpb24oKTsKKyAgICBmbG9hdCBsb2FkZWQgPSBtX21heFRpbWVMb2FkZWQ7
CisgICAgaWYgKCFsb2FkZWQgJiYgIW1fZmlsbFRpbWVvdXRJZCkKKyAgICAgICAgbG9hZGVkID0g
ZHVyYXRpb24oKTsKKyAgICBMT0dfVkVSQk9TRShNZWRpYSwgIm1heFRpbWVMb2FkZWQ6ICVmIiwg
bG9hZGVkKTsKKyAgICByZXR1cm4gbG9hZGVkOwogfQogCiB1bnNpZ25lZCBNZWRpYVBsYXllclBy
aXZhdGU6OmJ5dGVzTG9hZGVkKCkgY29uc3QKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IExPR19WRVJCT1NFKE1lZGlhLCAiYnl0ZXNMb2FkZWQiKTsKLSAgICAvKmlmICghbV9wbGF5Qmlu
KQorICAgIGlmICghbV9wbGF5QmluKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICghbV9t
ZWRpYUR1cmF0aW9uKQogICAgICAgICByZXR1cm4gMDsKLSAgICBmbG9hdCBkdXIgPSBkdXJhdGlv
bigpOwotICAgIGZsb2F0IG1heFRpbWUgPSBtYXhUaW1lTG9hZGVkKCk7Ci0gICAgaWYgKCFkdXIp
Ci0gICAgICAgIHJldHVybiAwOyovCiAKLSAgICByZXR1cm4gMTsgLy8gdG90YWxCeXRlcygpICog
bWF4VGltZSAvIGR1cjsKKyAgICB1bnNpZ25lZCBsb2FkZWQgPSB0b3RhbEJ5dGVzKCkgKiBtYXhU
aW1lTG9hZGVkKCkgLyBtX21lZGlhRHVyYXRpb247CisgICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJi
eXRlc0xvYWRlZDogJWQiLCBsb2FkZWQpOworICAgIHJldHVybiBsb2FkZWQ7CiB9CiAKIHVuc2ln
bmVkIE1lZGlhUGxheWVyUHJpdmF0ZTo6dG90YWxCeXRlcygpIGNvbnN0CiB7Ci0gICAgTE9HX1ZF
UkJPU0UoTWVkaWEsICJ0b3RhbEJ5dGVzIik7CiAgICAgaWYgKCFtX3NvdXJjZSkKICAgICAgICAg
cmV0dXJuIDA7CiAKQEAgLTY2MCw2ICs3NTIsNyBAQCB1bnNpZ25lZCBNZWRpYVBsYXllclByaXZh
dGU6OnRvdGFsQnl0ZXMoKSBjb25zdAogICAgIEdzdEZvcm1hdCBmbXQgPSBHU1RfRk9STUFUX0JZ
VEVTOwogICAgIGdpbnQ2NCBsZW5ndGggPSAwOwogICAgIGdzdF9lbGVtZW50X3F1ZXJ5X2R1cmF0
aW9uKG1fc291cmNlLCAmZm10LCAmbGVuZ3RoKTsKKyAgICBMT0dfVkVSQk9TRShNZWRpYSwgInRv
dGFsQnl0ZXMgJSIgR19HSU5UNjRfRk9STUFULCBsZW5ndGgpOwogCiAgICAgcmV0dXJuIGxlbmd0
aDsKIH0KQEAgLTcxMCw2ICs4MDMsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6dXBkYXRl
U3RhdGVzKCkKICAgICAgICAgaWYgKHN0YXRlID09IEdTVF9TVEFURV9QTEFZSU5HKSB7CiAgICAg
ICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7CiAgICAg
ICAgICAgICBtX3BhdXNlZCA9IGZhbHNlOworICAgICAgICAgICAgbV9zdGFydGVkUGxheWluZyA9
IHRydWU7CiAgICAgICAgICAgICBpZiAoIW1fbWVkaWFEdXJhdGlvbikgewogICAgICAgICAgICAg
ICAgIGZsb2F0IG5ld0R1cmF0aW9uID0gZHVyYXRpb24oKTsKICAgICAgICAgICAgICAgICBpZiAo
IWlzaW5mKG5ld0R1cmF0aW9uKSkKQEAgLTcxOCw2ICs4MTIsMjggQEAgdm9pZCBNZWRpYVBsYXll
clByaXZhdGU6OnVwZGF0ZVN0YXRlcygpCiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbV9w
YXVzZWQgPSB0cnVlOwogCisgICAgICAgIC8vIElzIG9uLWRpc2sgYnVmZmVyaW5nIGluIHByb2dy
ZXNzPworICAgICAgICBpZiAobV9maWxsVGltZW91dElkKSB7CisgICAgICAgICAgICBtX25ldHdv
cmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOworICAgICAgICAgICAgLy8gQnVmZmVyaW5n
IGhhcyBqdXN0IHN0YXJ0ZWQsIHdlIHNob3VsZCBub3cgaGF2ZSBlbm91Z2gKKyAgICAgICAgICAg
IC8vIGRhdGEgdG8gcmVzdGFydCBwbGF5YmFjayBpZiBpdCB3YXMgaW50ZXJuYWxseSBwYXVzZWQg
YnkKKyAgICAgICAgICAgIC8vIEdTdHJlYW1lci4KKyAgICAgICAgICAgIGlmIChtX3BhdXNlZCAm
JiAhbV9zdGFydGVkUGxheWluZykKKyAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3Rh
dGUobV9wbGF5QmluLCBHU1RfU1RBVEVfUExBWUlORyk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAobWF4VGltZUxvYWRlZCgpID09IGR1cmF0aW9uKCkpIHsKKyAgICAgICAgICAgIG1fbmV0d29y
a1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRlZDsKKyAgICAgICAgICAgIGlmIChzdGF0ZSA9PSBH
U1RfU1RBVEVfUkVBRFkpCisgICAgICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5
ZXI6OkhhdmVOb3RoaW5nOworICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGUgPT0gR1NUX1NUQVRF
X1BBVVNFRCkKKyAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2
ZUVub3VnaERhdGE7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgaWYgKHN0YXRlID09IEdT
VF9TVEFURV9SRUFEWSkKKyAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXll
cjo6SGF2ZU5vdGhpbmc7CisgICAgICAgICAgICBlbHNlIGlmIChtX3BhdXNlZCkKKyAgICAgICAg
ICAgICAgICBtX3JlYWR5U3RhdGUgPSBjdXJyZW50VGltZSgpIDwgbWF4VGltZUxvYWRlZCgpID8g
TWVkaWFQbGF5ZXI6OkhhdmVGdXR1cmVEYXRhIDogTWVkaWFQbGF5ZXI6OkhhdmVDdXJyZW50RGF0
YTsKKwogICAgICAgICBpZiAobV9jaGFuZ2luZ1JhdGUpIHsKICAgICAgICAgICAgIG1fcGxheWVy
LT5yYXRlQ2hhbmdlZCgpOwogICAgICAgICAgICAgbV9jaGFuZ2luZ1JhdGUgPSBmYWxzZTsKQEAg
LTcyOCw3ICs4NDQsNiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6dXBkYXRlU3RhdGVzKCkK
ICAgICAgICAgICAgIG1fc2Vla2luZyA9IGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgbV9u
ZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGVkOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIEdTVF9TVEFURV9DSEFOR0VfQVNZTkM6CiAgICAgICAgIExPR19WRVJCT1NFKE1lZGlhLCAi
QXN5bmM6IFN0YXRlOiAlcywgcGVuZGluZzogJXMiLApAQCAtODk4LDggKzEwMTMsMTEgQEAgdm9p
ZCBNZWRpYVBsYXllclByaXZhdGU6OmRpZEVuZCgpCiAgICAgLy8gbm90IGFsd2F5cyAwLiBTbyB0
byBub3QgY29uZnVzZSB0aGUgSFRNTE1lZGlhRWxlbWVudCB3ZQogICAgIC8vIHN5bmNocm9uaXpl
IHBvc2l0aW9uIGFuZCBkdXJhdGlvbiB2YWx1ZXMuCiAgICAgZmxvYXQgbm93ID0gY3VycmVudFRp
bWUoKTsKLSAgICBpZiAobm93ID4gMCkKKyAgICBpZiAobm93ID4gMCkgewogICAgICAgICBtX21l
ZGlhRHVyYXRpb24gPSBub3c7CisgICAgICAgIG1fcGxheWVyLT5kdXJhdGlvbkNoYW5nZWQoKTsK
KyAgICB9CisKICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9wbGF5QmluLCBHU1RfU1RBVEVf
UEFVU0VEKTsKIAogICAgIHRpbWVDaGFuZ2VkKCk7CkBAIC0xMTUwLDcgKzEyNjgsMTkgQEAgYm9v
bCBNZWRpYVBsYXllclByaXZhdGU6OnN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGVHU1RQbGF5Qmlu
KFN0cmluZyB1cmwpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0QXV0b2J1ZmZlcihib29s
IGF1dG9CdWZmZXIpCit7CisgICAgQVNTRVJUKG1fcGxheUJpbik7CisKKyAgICBHc3RQbGF5Rmxh
Z3MgZmxhZ3M7CisgICAgZ19vYmplY3RfZ2V0KG1fcGxheUJpbiwgImZsYWdzIiwgJmZsYWdzLCBO
VUxMKTsKKyAgICBpZiAoYXV0b0J1ZmZlcikKKyAgICAgICAgZ19vYmplY3Rfc2V0KG1fcGxheUJp
biwgImZsYWdzIiwgZmxhZ3MgfCBHU1RfUExBWV9GTEFHX0RPV05MT0FELCBOVUxMKTsKKyAgICBl
bHNlCisgICAgICAgIGdfb2JqZWN0X3NldChtX3BsYXlCaW4sICJmbGFncyIsIGZsYWdzICYgfkdT
VF9QTEFZX0ZMQUdfRE9XTkxPQUQsIE5VTEwpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZTo6Y3JlYXRlR1NUUGxheUJpbigpCiB7CiAgICAgQVNTRVJUKCFtX3BsYXlCaW4pOwogICAgIG1f
cGxheUJpbiA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgicGxheWJpbjIiLCAicGxheSIpOwpA
QCAtMTE2MCw4ICsxMjkwLDYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmNyZWF0ZUdTVFBs
YXlCaW4oU3RyaW5nIHVybCkKICAgICBnX3NpZ25hbF9jb25uZWN0KGJ1cywgIm1lc3NhZ2UiLCBH
X0NBTExCQUNLKG1lZGlhUGxheWVyUHJpdmF0ZU1lc3NhZ2VDYWxsYmFjayksIHRoaXMpOwogICAg
IGdzdF9vYmplY3RfdW5yZWYoYnVzKTsKIAotICAgIGdfb2JqZWN0X3NldChtX3BsYXlCaW4sICJ1
cmkiLCB1cmwudXRmOCgpLmRhdGEoKSwgTlVMTCk7Ci0KICAgICBnX3NpZ25hbF9jb25uZWN0KG1f
cGxheUJpbiwgIm5vdGlmeTo6dm9sdW1lIiwgR19DQUxMQkFDSyhtZWRpYVBsYXllclByaXZhdGVW
b2x1bWVDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKICAgICBnX3NpZ25hbF9jb25uZWN0KG1fcGxh
eUJpbiwgIm5vdGlmeTo6c291cmNlIiwgR19DQUxMQkFDSyhtZWRpYVBsYXllclByaXZhdGVTb3Vy
Y2VDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKICAgICBnX3NpZ25hbF9jb25uZWN0KG1fcGxheUJp
biwgIm5vdGlmeTo6bXV0ZSIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRlTXV0ZUNoYW5n
ZWRDYWxsYmFjayksIHRoaXMpOwpAQCAtMTE4MCw3ICsxMzA4LDcgQEAgdm9pZCBNZWRpYVBsYXll
clByaXZhdGU6OmNyZWF0ZUdTVFBsYXlCaW4oU3RyaW5nIHVybCkKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIG1fZnBzU2luayA9IDA7CiAgICAgICAgICAgICBnX29iamVjdF9zZXQobV9w
bGF5QmluLCAidmlkZW8tc2luayIsIG1fdmlkZW9TaW5rLCBOVUxMKTsKLSAgICAgICAgICAgIExP
RyhNZWRpYSwgIkNhbid0IGRpc3BsYXkgRlBTIHN0YXRpc3RpY3MsIHlvdSBuZWVkIGdzdC1wbHVn
aW5zLWJhZCA+PSAwLjEwLjE4Iik7CisgICAgICAgICAgICBMT0dfVkVSQk9TRShNZWRpYSwgIkNh
bid0IGRpc3BsYXkgRlBTIHN0YXRpc3RpY3MsIHlvdSBuZWVkIGdzdC1wbHVnaW5zLWJhZCA+PSAw
LjEwLjE4Iik7CiAgICAgICAgIH0KICAgICB9IGVsc2UKICAgICAgICAgZ19vYmplY3Rfc2V0KG1f
cGxheUJpbiwgInZpZGVvLXNpbmsiLCBtX3ZpZGVvU2luaywgTlVMTCk7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIu
aCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lci5oCmluZGV4IDM0MjU3Y2EuLmUxOWI2ODYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCkBA
IC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5IEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ29sbGFib3JhIEx0ZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFs
cEBhdG9rZXIuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIElnYWxpYSBTLkwKICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtODYsNiArODcsOSBAQCBjbGFzcyBNZWRpYVBsYXllclByaXZh
dGUgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlIHsKICAgICAgICAgICAgIHZv
aWQgbXV0ZUNoYW5nZWQoKTsKICAgICAgICAgICAgIHZvaWQgbXV0ZUNoYW5nZWRDYWxsYmFjaygp
OwogCisgICAgICAgICAgICB2b2lkIHNldEF1dG9idWZmZXIoYm9vbCk7CisgICAgICAgICAgICBi
b29sIHF1ZXJ5QnVmZmVyaW5nU3RhdHMoKTsKKwogICAgICAgICAgICAgTWVkaWFQbGF5ZXI6Ok5l
dHdvcmtTdGF0ZSBuZXR3b3JrU3RhdGUoKSBjb25zdDsKICAgICAgICAgICAgIE1lZGlhUGxheWVy
OjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdDsKIApAQCAtMTI4LDkgKzEzMiwxMSBAQCBj
bGFzcyBNZWRpYVBsYXllclByaXZhdGUgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJm
YWNlIHsKICAgICAgICAgICAgIGZsb2F0IG1heFRpbWVMb2FkZWQoKSBjb25zdDsKICAgICAgICAg
ICAgIHZvaWQgc3RhcnRFbmRQb2ludFRpbWVySWZOZWVkZWQoKTsKIAotICAgICAgICAgICAgdm9p
ZCBjcmVhdGVHU1RQbGF5QmluKFN0cmluZyB1cmwpOworICAgICAgICAgICAgdm9pZCBjcmVhdGVH
U1RQbGF5QmluKCk7CiAgICAgICAgICAgICBib29sIGNoYW5nZVBpcGVsaW5lU3RhdGUoR3N0U3Rh
dGUgc3RhdGUpOwogCisgICAgICAgICAgICB2b2lkIHByb2Nlc3NCdWZmZXJpbmdTdGF0cyhHc3RN
ZXNzYWdlKiBtZXNzYWdlKTsKKwogICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgTWVkaWFQ
bGF5ZXIqIG1fcGxheWVyOwogICAgICAgICAgICAgR3N0RWxlbWVudCogbV9wbGF5QmluOwpAQCAt
MTU3LDYgKzE2MywxMCBAQCBjbGFzcyBNZWRpYVBsYXllclByaXZhdGUgOiBwdWJsaWMgTWVkaWFQ
bGF5ZXJQcml2YXRlSW50ZXJmYWNlIHsKICAgICAgICAgICAgIGd1aW50IG1fdm9sdW1lSWRsZUlk
OwogICAgICAgICAgICAgZ2Zsb2F0IG1fbWVkaWFEdXJhdGlvbjsKICAgICAgICAgICAgIGd1aW50
IG1fbXV0ZUlkbGVJZDsKKyAgICAgICAgICAgIGJvb2wgbV9zdGFydGVkQnVmZmVyaW5nOworICAg
ICAgICAgICAgZ3VpbnQgbV9maWxsVGltZW91dElkOworICAgICAgICAgICAgZmxvYXQgbV9tYXhU
aW1lTG9hZGVkOworICAgICAgICAgICAgZ2RvdWJsZSBtX2ZpbGxTdGF0dXM7CiAgICAgfTsKIH0K
IAotLSAKMS42LjMuMw==
</data>
<flag name="review"
          id="31342"
          type_id="1"
          status="+"
          setter="eric.carlson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48744</attachid>
            <date>2010-02-15 02:58:35 -0800</date>
            <delta_ts>2010-02-15 10:30:23 -0800</delta_ts>
            <desc>initial support for on-disk buffering of videos</desc>
            <filename>initial-support-for-on-disk-buffering-of-videos.patch</filename>
            <type>text/plain</type>
            <size>17024</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSBmYmQ4YTdlNmI1YmE1MmZhZmRhZWVhY2RjMWI0MzZiMjYxNzlhZmVkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBUdWUsIDUgSmFuIDIwMTAgMTY6Mjk6NTYgKzAxMDAKU3ViamVjdDogW1BBVENIXSBp
bml0aWFsIHN1cHBvcnQgZm9yIG9uLWRpc2sgYnVmZmVyaW5nIG9mIHZpZGVvcwoKLS0tCiBDaGFu
Z2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTAgKwog
V2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQz
ICsrKysrCiAuLi4vZ3JhcGhpY3MvZ3RrL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAg
ICB8ICAxODQgKysrKysrKysrKysrKysrKy0tLQogLi4uL2dyYXBoaWNzL2d0ay9NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIuaCAgICAgfCAgIDEyICsrLQogY29uZmlndXJlLmFjICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICstCiA1IGZpbGVzIGNoYW5nZWQs
IDIyMCBpbnNlcnRpb25zKCspLCAzMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9DaGFuZ2VM
b2cgYi9DaGFuZ2VMb2cKaW5kZXggMDQ2MTg4Yy4uNTE3MzE3YSAxMDA2NDQKLS0tIGEvQ2hhbmdl
TG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEwLTAyLTE1ICBQaGlsaXBw
ZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1N0cmVhbWVyXSBTaG91bGQgaGFuZGxlIEJVRkZF
UklORyBtZXNzYWdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MzAwMDQKKworICAgICAgICAqIGNvbmZpZ3VyZS5hYzogQnVtcCBnc3RyZWFtZXIgLWNv
cmUvLXBsdWdpbnMtYmFzZSByZXF1aXJlbWVudHMgdG8KKyAgICAgICAgMC4xMC4yNSB3aGljaCBp
cyB0aGUgbWluaW11bSByZXF1aXJlZCB2ZXJzaW9uIGZvciBvbi1kaXNrIGJ1ZmZlcmluZy4KKwog
MjAxMC0wMi0xMiAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBub2tpYS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgSG9sZ2VyIEZyZXl0aGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiYzQwNzEyLi5hMGI4MjAyIDEw
MDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQ2IEBACisyMDEwLTAxLTA3ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdh
bGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBbR1N0cmVhbWVyXSBTaG91bGQgaGFuZGxlIEJVRkZFUklORyBtZXNzYWdlcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzAwMDQKKworICAgICAgICBJ
bml0aWFsIHN1cHBvcnQgZm9yIG9uLWRpc2sgYnVmZmVyaW5nIG9mIHZpZGVvcy4gVGhpcyB3b3Jr
cyBvbmx5CisgICAgICAgIGZvciBRdWlja3RpbWUgYW5kIGZsdiB0aG91Z2guCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Om1lZGlhUGxheWVyUHJpdmF0ZU1lc3NhZ2VDYWxsYmFjayk6IERl
ZmVyIGJ1ZmZlcmluZworICAgICAgICBtZXNzYWdlcyBoYW5kbGluZyB0byBwcm9jZXNzQnVmZmVy
aW5nU3RhdHMoKS4KKyAgICAgICAgKFdlYkNvcmU6OmJ1ZmZlcmluZ1RpbWVvdXRDYWxsYmFjayk6
IENsb3N1cmUgY2FsbGVkIHBlcmlvZGljYWxseQorICAgICAgICBkdXJpbmcgdGhlIG9uLWRpc2sg
YnVmZmVyaW5nIHByb2Nlc3MuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6
Ok1lZGlhUGxheWVyUHJpdmF0ZSk6IE5ldyBpbnN0YW5jZQorICAgICAgICB2YXJpYWJsZXMgYW5k
IGNyZWF0ZSBwbGF5YmluMiBoZXJlIGluc3RlYWQgb2YgZG9pbmcgaXQgaW4gbG9hZCgpLgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjp+TWVkaWFQbGF5ZXJQcml2YXRlKTog
TmV3IGluc3RhbmNlCisgICAgICAgIHZhcmlhYmxlcy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZTo6bG9hZCk6IFNpbXBseSBzZXQgdXJpIG9uIHBsYXliaW4yCisgICAgICAg
IGluc3RlYWQgb2YgY3JlYXRpbmcgdGhlIHBpcGVsaW5lIGFuZCBzZXR0aW5nIHVyaSBhbGwgdG9n
ZXRoZXIuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnByb2Nlc3NCdWZm
ZXJpbmdTdGF0cyk6IFN0YXJ0IGEgbmV3CisgICAgICAgIHRpbWVvdXQgc291cmNlIGlmIHRoZSBw
bGF5ZXIgaXMgc3RhcnRpbmcgb24tZGlzayBidWZmZXJpbmcuCisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGU6OnF1ZXJ5QnVmZmVyaW5nU3RhdHMpOiBNZXRob2QgY2FsbGVkCisg
ICAgICAgIDIwMG1zIGR1cmluZyBvbi1kaXNrIGJ1ZmZlcmluZyB0byB1cGRhdGUgdGhlIG1heFRp
bWVMb2FkZWQgYW5kIGZldworICAgICAgICBvdGhlciBwcml2YXRlIHZhcmlhYmxlcy4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6bWF4VGltZVNlZWthYmxlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6bWF4VGltZUxvYWRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OmJ5dGVzTG9hZGVkKTogRml4ZWQgaW1wbGVt
ZW50YXRpb25zCisgICAgICAgIHJlZ2FyZGluZyBidWZmZXJpbmcuCisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGU6OnRvdGFsQnl0ZXMpOiBJbXByb3ZlZCBsb2dnaW5nLgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjp1cGRhdGVTdGF0ZXMpOiBTdGFydCBw
bGF5YmFjayBpZiBpdAorICAgICAgICB3YXMgaW50ZXJuYWxseSBwYXVzZWQgYXQgYmVnaW5uaW5n
IG9mIG9uLWRpc2sgYnVmZmVyaW5nIGFuZCBzZXQKKyAgICAgICAgcmVhZHkvbmV0d29yayBzdGF0
ZXMgZGVwZW5kaW5nIG9uIHRoZSBzdGF0ZSBvZiB0aGUgb24tZGlzaworICAgICAgICBidWZmZXJp
bmcgcHJvY2Vzcy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6ZGlkRW5k
KTogRW1pdCBkdXJhdGlvbkNoYW5nZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGU6OnNldEF1dG9idWZmZXIpOiBFZGl0IHBsYXliaW4yIGZsYWdzCisgICAgICAgIHByb3Bl
cnR5IGRlcGVuZGluZyBvbiBhdXRvQnVmZmVyIHZhbHVlLgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlOjpjcmVhdGVHU1RQbGF5QmluKTogRG9uJ3Qgc2V0IHVyaQorICAgICAg
ICB0aGVyZSwgaXQgaXMgbm93IGRvbmUgaW4gbG9hZCgpLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2d0ay9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaDogTmV3IG1ldGhvZHMKKyAg
ICAgICAgYW5kIGluc3RhbmNlIHZhcmlhYmxlcy4KKwogMjAxMC0wMi0xMCAgUGhpbGlwcGUgTm9y
bWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR3VzdGF2
byBOb3JvbmhhIFNpbHZhLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
dGsvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3RrL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKaW5kZXggOTY1YmFjZC4u
Y2JjNjRhMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2d0ay9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC0zLDYgKzMsNyBAQAogICog
Q29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR3VzdGF2byBOb3JvbmhhIFNpbHZhIDxnbnNAZ25vbWUub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIElnYWxpYSBTLkwKICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtNTUsNyArNTYsMjAgQEAKICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2Vidmlldy5oPgogI2lu
Y2x1ZGUgPHd0Zi9ndGsvR093blB0ci5oPgogCi0jZGVmaW5lIExPR19WRVJCT1NFKGNoYW5uZWws
IGZtdCwgYXJncy4uLikgZ19wcmludGVycihmbXQgIlxuIiwgIyNhcmdzKQorLy8gR3N0UGxheUZs
YWdzIGZsYWdzIGZyb20gcGxheWJpbjIuIEl0IGlzIHRoZSBwb2xpY3kgb2YgR1N0cmVhbWVyIHRv
CisvLyBub3QgcHVibGljbHkgZXhwb3NlIGVsZW1lbnQtc3BlY2lmaWMgZW51bXMuIFRoYXQncyB3
aHkgdGhpcworLy8gR3N0UGxheUZsYWdzIGVudW0gaGFzIGJlZW4gY29waWVkIGhlcmUuCit0eXBl
ZGVmIGVudW0geworICAgIEdTVF9QTEFZX0ZMQUdfVklERU8gICAgICAgICA9IDB4MDAwMDAwMDEs
CisgICAgR1NUX1BMQVlfRkxBR19BVURJTyAgICAgICAgID0gMHgwMDAwMDAwMiwKKyAgICBHU1Rf
UExBWV9GTEFHX1RFWFQgICAgICAgICAgPSAweDAwMDAwMDA0LAorICAgIEdTVF9QTEFZX0ZMQUdf
VklTICAgICAgICAgICA9IDB4MDAwMDAwMDgsCisgICAgR1NUX1BMQVlfRkxBR19TT0ZUX1ZPTFVN
RSAgID0gMHgwMDAwMDAxMCwKKyAgICBHU1RfUExBWV9GTEFHX05BVElWRV9BVURJTyAgPSAweDAw
MDAwMDIwLAorICAgIEdTVF9QTEFZX0ZMQUdfTkFUSVZFX1ZJREVPICA9IDB4MDAwMDAwNDAsCisg
ICAgR1NUX1BMQVlfRkxBR19ET1dOTE9BRCAgICAgID0gMHgwMDAwMDA4MCwKKyAgICBHU1RfUExB
WV9GTEFHX0JVRkZFUklORyAgICAgPSAweDAwMDAwMDEwMAorfSBHc3RQbGF5RmxhZ3M7CiAKIHVz
aW5nIG5hbWVzcGFjZSBzdGQ7CiAKQEAgLTc4LDcgKzkyLDYgQEAgZ2Jvb2xlYW4gbWVkaWFQbGF5
ZXJQcml2YXRlTWVzc2FnZUNhbGxiYWNrKEdzdEJ1cyogYnVzLCBHc3RNZXNzYWdlKiBtZXNzYWdl
LCBncG8KICAgICBHT3duUHRyPGdjaGFyPiBkZWJ1ZzsKICAgICBNZWRpYVBsYXllcjo6TmV0d29y
a1N0YXRlIGVycm9yOwogICAgIE1lZGlhUGxheWVyUHJpdmF0ZSogbXAgPSByZWludGVycHJldF9j
YXN0PE1lZGlhUGxheWVyUHJpdmF0ZSo+KGRhdGEpOwotICAgIGdpbnQgcGVyY2VudCA9IDA7CiAg
ICAgYm9vbCBpc3N1ZUVycm9yID0gdHJ1ZTsKICAgICBib29sIGF0dGVtcHROZXh0TG9jYXRpb24g
PSBmYWxzZTsKIApAQCAtMTI4LDggKzE0MSw3IEBAIGdib29sZWFuIG1lZGlhUGxheWVyUHJpdmF0
ZU1lc3NhZ2VDYWxsYmFjayhHc3RCdXMqIGJ1cywgR3N0TWVzc2FnZSogbWVzc2FnZSwgZ3BvCiAg
ICAgICAgIG1wLT51cGRhdGVTdGF0ZXMoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHU1Rf
TUVTU0FHRV9CVUZGRVJJTkc6Ci0gICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2J1ZmZlcmluZyht
ZXNzYWdlLCAmcGVyY2VudCk7Ci0gICAgICAgIExPR19WRVJCT1NFKE1lZGlhLCAiQnVmZmVyaW5n
ICVkIiwgcGVyY2VudCk7CisgICAgICAgIG1wLT5wcm9jZXNzQnVmZmVyaW5nU3RhdHMobWVzc2Fn
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR1NUX01FU1NBR0VfRFVSQVRJT046CiAgICAg
ICAgIExPR19WRVJCT1NFKE1lZGlhLCAiRHVyYXRpb24gY2hhbmdlZCIpOwpAQCAtMTg3LDYgKzE5
OSwxMiBAQCBnYm9vbGVhbiBub3RpZnlNdXRlSWRsZUNhbGxiYWNrKGdwb2ludGVyIGRhdGEpCiAg
ICAgcmV0dXJuIEZBTFNFOwogfQogCitnYm9vbGVhbiBidWZmZXJpbmdUaW1lb3V0Q2FsbGJhY2so
Z3BvaW50ZXIgZGF0YSkKK3sKKyAgICBNZWRpYVBsYXllclByaXZhdGUqIG1wID0gcmVpbnRlcnBy
ZXRfY2FzdDxNZWRpYVBsYXllclByaXZhdGUqPihkYXRhKTsKKyAgICByZXR1cm4gbXAtPnF1ZXJ5
QnVmZmVyaW5nU3RhdHMoKTsKK30KKwogc3RhdGljIGZsb2F0IHBsYXliYWNrUG9zaXRpb24oR3N0
RWxlbWVudCogcGxheWJpbikKIHsKIApAQCAtMjkxLDE0ICszMDksMjQgQEAgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpNZWRpYVBsYXllclByaXZhdGUoTWVkaWFQbGF5ZXIqIHBsYXllcikKICAgICAsIG1f
cGxheWJhY2tSYXRlKDEpCiAgICAgLCBtX2Vycm9yT2NjdXJlZChmYWxzZSkKICAgICAsIG1fdm9s
dW1lSWRsZUlkKDApCi0gICAgLCBtX21lZGlhRHVyYXRpb24oMC4wKQorICAgICwgbV9tZWRpYUR1
cmF0aW9uKDApCiAgICAgLCBtX211dGVJZGxlSWQoMCkKKyAgICAsIG1fc3RhcnRlZEJ1ZmZlcmlu
ZyhmYWxzZSkKKyAgICAsIG1fZmlsbFRpbWVvdXRJZCgwKQorICAgICwgbV9tYXhUaW1lTG9hZGVk
KDApCisgICAgLCBtX2ZpbGxTdGF0dXMoMCkKIHsKLSAgICBkb0dzdEluaXQoKTsKKyAgICBpZiAo
ZG9Hc3RJbml0KCkpCisgICAgICAgIGNyZWF0ZUdTVFBsYXlCaW4oKTsKIH0KIAogTWVkaWFQbGF5
ZXJQcml2YXRlOjp+TWVkaWFQbGF5ZXJQcml2YXRlKCkKIHsKKyAgICBpZiAobV9maWxsVGltZW91
dElkKSB7CisgICAgICAgIGdfc291cmNlX3JlbW92ZShtX2ZpbGxUaW1lb3V0SWQpOworICAgICAg
ICBtX2ZpbGxUaW1lb3V0SWQgPSAwOworICAgIH0KKwogICAgIGlmIChtX3ZvbHVtZUlkbGVJZCkg
ewogICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV92b2x1bWVJZGxlSWQpOwogICAgICAgICBtX3Zv
bHVtZUlkbGVJZCA9IDA7CkBAIC0zNTEsNyArMzc5LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZh
dGU6OmxvYWQoY29uc3QgU3RyaW5nJiB1cmwpCiAgICAgICAgIG1fcGxheWVyLT5yZWFkeVN0YXRl
Q2hhbmdlZCgpOwogICAgIH0KIAotICAgIGNyZWF0ZUdTVFBsYXlCaW4odXJsKTsKKyAgICBnX29i
amVjdF9zZXQobV9wbGF5QmluLCAidXJpIiwgdXJsLnV0ZjgoKS5kYXRhKCksIE5VTEwpOwogICAg
IHBhdXNlKCk7CiB9CiAKQEAgLTY1MywxNiArNjgxLDc5IEBAIFBhc3NSZWZQdHI8VGltZVJhbmdl
cz4gTWVkaWFQbGF5ZXJQcml2YXRlOjpidWZmZXJlZCgpIGNvbnN0CiAgICAgcmV0dXJuIHRpbWVS
YW5nZXMucmVsZWFzZSgpOwogfQogCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cHJvY2Vzc0J1
ZmZlcmluZ1N0YXRzKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCit7CisgICAgR3N0QnVmZmVyaW5nTW9k
ZSBtb2RlOworCisgICAgZ3N0X21lc3NhZ2VfcGFyc2VfYnVmZmVyaW5nX3N0YXRzKG1lc3NhZ2Us
ICZtb2RlLCAwLCAwLCAwKTsKKyAgICBpZiAobW9kZSAhPSBHU1RfQlVGRkVSSU5HX0RPV05MT0FE
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fc3RhcnRlZEJ1ZmZlcmluZykgeworICAg
ICAgICBtX3N0YXJ0ZWRCdWZmZXJpbmcgPSB0cnVlOworCisgICAgICAgIGlmIChtX2ZpbGxUaW1l
b3V0SWQgPiAwKQorICAgICAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1fZmlsbFRpbWVvdXRJZCk7
CisKKyAgICAgICAgbV9maWxsVGltZW91dElkID0gZ190aW1lb3V0X2FkZCgyMDAsIChHU291cmNl
RnVuYykgYnVmZmVyaW5nVGltZW91dENhbGxiYWNrLCB0aGlzKTsKKyAgICB9Cit9CisKK2Jvb2wg
TWVkaWFQbGF5ZXJQcml2YXRlOjpxdWVyeUJ1ZmZlcmluZ1N0YXRzKCkKK3sKKyAgICBHc3RRdWVy
eSogcXVlcnkgPSBnc3RfcXVlcnlfbmV3X2J1ZmZlcmluZyhHU1RfRk9STUFUX1BFUkNFTlQpOwor
CisgICAgaWYgKCFnc3RfZWxlbWVudF9xdWVyeShtX3BsYXlCaW4sIHF1ZXJ5KSkgeworICAgICAg
ICBnc3RfcXVlcnlfdW5yZWYocXVlcnkpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisK
KyAgICBnaW50NjQgc3RhcnQsIHN0b3A7CisKKyAgICBnc3RfcXVlcnlfcGFyc2VfYnVmZmVyaW5n
X3JhbmdlKHF1ZXJ5LCAwLCAmc3RhcnQsICZzdG9wLCAwKTsKKyAgICBnc3RfcXVlcnlfdW5yZWYo
cXVlcnkpOworCisgICAgaWYgKHN0b3AgIT0gLTEpCisgICAgICAgIG1fZmlsbFN0YXR1cyA9IDEw
MC4wICogc3RvcCAvIEdTVF9GT1JNQVRfUEVSQ0VOVF9NQVg7CisgICAgZWxzZQorICAgICAgICBt
X2ZpbGxTdGF0dXMgPSAxMDAuMDsKKworICAgIExPR19WRVJCT1NFKE1lZGlhLCAiRG93bmxvYWQg
YnVmZmVyIGZpbGxlZCB1cCB0byAlZiUlIiwgbV9maWxsU3RhdHVzKTsKKworICAgIGlmICghbV9t
ZWRpYUR1cmF0aW9uKQorICAgICAgICBkdXJhdGlvbkNoYW5nZWQoKTsKKworICAgIC8vIFVwZGF0
ZSBtYXhUaW1lTG9hZGVkIG9ubHkgaWYgdGhlIG1lZGlhIGR1cmF0aW9uIGlzCisgICAgLy8gYXZh
aWxhYmxlLiBPdGhlcndpc2Ugd2UgY2FuJ3QgY29tcHV0ZSBpdC4KKyAgICBpZiAobV9tZWRpYUR1
cmF0aW9uKSB7CisgICAgICAgIG1fbWF4VGltZUxvYWRlZCA9IHN0YXRpY19jYXN0PGZsb2F0Pigo
bV9maWxsU3RhdHVzICogbV9tZWRpYUR1cmF0aW9uKSAvIDEwMC4wKTsKKyAgICAgICAgTE9HX1ZF
UkJPU0UoTWVkaWEsICJVcGRhdGVkIG1heFRpbWVMb2FkZWQ6ICVmIiwgbV9tYXhUaW1lTG9hZGVk
KTsKKyAgICB9CisKKyAgICBpZiAobV9maWxsU3RhdHVzICE9IDEwMC4wKSB7CisgICAgICAgIHVw
ZGF0ZVN0YXRlcygpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICAvLyBNZWRp
YSBpcyBub3cgZnVsbHkgbG9hZGVkLiBJdCB3aWxsIHBsYXkgZXZlbiBpZiBuZXR3b3JrCisgICAg
Ly8gY29ubmVjdGlvbiBpcyBjdXQuIEJ1ZmZlcmluZyBpcyBkb25lLCByZW1vdmUgdGhlIGZpbGwg
c291cmNlCisgICAgLy8gZnJvbSB0aGUgbWFpbiBsb29wLgorICAgIG1fZmlsbFRpbWVvdXRJZCA9
IDA7CisgICAgbV9zdGFydGVkQnVmZmVyaW5nID0gZmFsc2U7CisgICAgdXBkYXRlU3RhdGVzKCk7
CisgICAgcmV0dXJuIEZBTFNFOworfQorCiBmbG9hdCBNZWRpYVBsYXllclByaXZhdGU6Om1heFRp
bWVTZWVrYWJsZSgpIGNvbnN0CiB7CiAgICAgaWYgKG1fZXJyb3JPY2N1cmVkKQogICAgICAgICBy
ZXR1cm4gMC4wOwogCi0gICAgLy8gVE9ETwogICAgIExPR19WRVJCT1NFKE1lZGlhLCAibWF4VGlt
ZVNlZWthYmxlIik7Ci0gICAgaWYgKG1faXNTdHJlYW1pbmcpCi0gICAgICAgIHJldHVybiBudW1l
cmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCk7CiAgICAgLy8gaW5maW5pdGUgZHVyYXRpb24g
bWVhbnMgbGl2ZSBzdHJlYW0KKyAgICBpZiAoaXNpbmYoZHVyYXRpb24oKSkpCisgICAgICAgIHJl
dHVybiAwLjA7CisKICAgICByZXR1cm4gbWF4VGltZUxvYWRlZCgpOwogfQogCkBAIC02NzEsMjkg
Kzc2MiwyOCBAQCBmbG9hdCBNZWRpYVBsYXllclByaXZhdGU6Om1heFRpbWVMb2FkZWQoKSBjb25z
dAogICAgIGlmIChtX2Vycm9yT2NjdXJlZCkKICAgICAgICAgcmV0dXJuIDAuMDsKIAotICAgIC8v
IFRPRE8KLSAgICBMT0dfVkVSQk9TRShNZWRpYSwgIm1heFRpbWVMb2FkZWQiKTsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBkdXJhdGlvbigpOworICAgIGZsb2F0IGxvYWRlZCA9
IG1fbWF4VGltZUxvYWRlZDsKKyAgICBpZiAoIWxvYWRlZCAmJiAhbV9maWxsVGltZW91dElkKQor
ICAgICAgICBsb2FkZWQgPSBkdXJhdGlvbigpOworICAgIExPR19WRVJCT1NFKE1lZGlhLCAibWF4
VGltZUxvYWRlZDogJWYiLCBsb2FkZWQpOworICAgIHJldHVybiBsb2FkZWQ7CiB9CiAKIHVuc2ln
bmVkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Ynl0ZXNMb2FkZWQoKSBjb25zdAogewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJieXRlc0xvYWRlZCIpOwotICAg
IC8qaWYgKCFtX3BsYXlCaW4pCisgICAgaWYgKCFtX3BsYXlCaW4pCisgICAgICAgIHJldHVybiAw
OworCisgICAgaWYgKCFtX21lZGlhRHVyYXRpb24pCiAgICAgICAgIHJldHVybiAwOwotICAgIGZs
b2F0IGR1ciA9IGR1cmF0aW9uKCk7Ci0gICAgZmxvYXQgbWF4VGltZSA9IG1heFRpbWVMb2FkZWQo
KTsKLSAgICBpZiAoIWR1cikKLSAgICAgICAgcmV0dXJuIDA7Ki8KIAotICAgIHJldHVybiAxOyAv
LyB0b3RhbEJ5dGVzKCkgKiBtYXhUaW1lIC8gZHVyOworICAgIHVuc2lnbmVkIGxvYWRlZCA9IHRv
dGFsQnl0ZXMoKSAqIG1heFRpbWVMb2FkZWQoKSAvIG1fbWVkaWFEdXJhdGlvbjsKKyAgICBMT0df
VkVSQk9TRShNZWRpYSwgImJ5dGVzTG9hZGVkOiAlZCIsIGxvYWRlZCk7CisgICAgcmV0dXJuIGxv
YWRlZDsKIH0KIAogdW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlOjp0b3RhbEJ5dGVzKCkgY29u
c3QKIHsKLSAgICBMT0dfVkVSQk9TRShNZWRpYSwgInRvdGFsQnl0ZXMiKTsKICAgICBpZiAoIW1f
c291cmNlKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtNzAzLDYgKzc5Myw3IEBAIHVuc2lnbmVk
IE1lZGlhUGxheWVyUHJpdmF0ZTo6dG90YWxCeXRlcygpIGNvbnN0CiAgICAgR3N0Rm9ybWF0IGZt
dCA9IEdTVF9GT1JNQVRfQllURVM7CiAgICAgZ2ludDY0IGxlbmd0aCA9IDA7CiAgICAgZ3N0X2Vs
ZW1lbnRfcXVlcnlfZHVyYXRpb24obV9zb3VyY2UsICZmbXQsICZsZW5ndGgpOworICAgIExPR19W
RVJCT1NFKE1lZGlhLCAidG90YWxCeXRlcyAlIiBHX0dJTlQ2NF9GT1JNQVQsIGxlbmd0aCk7CiAK
ICAgICByZXR1cm4gbGVuZ3RoOwogfQpAQCAtNzUzLDYgKzg0NCw3IEBAIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlOjp1cGRhdGVTdGF0ZXMoKQogICAgICAgICBpZiAoc3RhdGUgPT0gR1NUX1NUQVRF
X1BMQVlJTkcpIHsKICAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZl
RW5vdWdoRGF0YTsKICAgICAgICAgICAgIG1fcGF1c2VkID0gZmFsc2U7CisgICAgICAgICAgICBt
X3N0YXJ0ZWRQbGF5aW5nID0gdHJ1ZTsKICAgICAgICAgICAgIGlmICghbV9tZWRpYUR1cmF0aW9u
KSB7CiAgICAgICAgICAgICAgICAgZmxvYXQgbmV3RHVyYXRpb24gPSBkdXJhdGlvbigpOwogICAg
ICAgICAgICAgICAgIGlmICghaXNpbmYobmV3RHVyYXRpb24pKQpAQCAtNzYxLDYgKzg1MywyOCBA
QCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6dXBkYXRlU3RhdGVzKCkKICAgICAgICAgfSBlbHNl
CiAgICAgICAgICAgICBtX3BhdXNlZCA9IHRydWU7CiAKKyAgICAgICAgLy8gSXMgb24tZGlzayBi
dWZmZXJpbmcgaW4gcHJvZ3Jlc3M/CisgICAgICAgIGlmIChtX2ZpbGxUaW1lb3V0SWQpIHsKKyAg
ICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRpbmc7CisgICAgICAg
ICAgICAvLyBCdWZmZXJpbmcgaGFzIGp1c3Qgc3RhcnRlZCwgd2Ugc2hvdWxkIG5vdyBoYXZlIGVu
b3VnaAorICAgICAgICAgICAgLy8gZGF0YSB0byByZXN0YXJ0IHBsYXliYWNrIGlmIGl0IHdhcyBp
bnRlcm5hbGx5IHBhdXNlZCBieQorICAgICAgICAgICAgLy8gR1N0cmVhbWVyLgorICAgICAgICAg
ICAgaWYgKG1fcGF1c2VkICYmICFtX3N0YXJ0ZWRQbGF5aW5nKQorICAgICAgICAgICAgICAgIGdz
dF9lbGVtZW50X3NldF9zdGF0ZShtX3BsYXlCaW4sIEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChtYXhUaW1lTG9hZGVkKCkgPT0gZHVyYXRpb24oKSkgeworICAg
ICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGVkOworICAgICAgICAg
ICAgaWYgKHN0YXRlID09IEdTVF9TVEFURV9SRUFEWSkKKyAgICAgICAgICAgICAgICBtX3JlYWR5
U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7CisgICAgICAgICAgICBlbHNlIGlmIChz
dGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VEKQorICAgICAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9
IE1lZGlhUGxheWVyOjpIYXZlRW5vdWdoRGF0YTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBpZiAoc3RhdGUgPT0gR1NUX1NUQVRFX1JFQURZKQorICAgICAgICAgICAgICAgIG1fcmVhZHlT
dGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKKyAgICAgICAgICAgIGVsc2UgaWYgKG1f
cGF1c2VkKQorICAgICAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IGN1cnJlbnRUaW1lKCkgPCBt
YXhUaW1lTG9hZGVkKCkgPyBNZWRpYVBsYXllcjo6SGF2ZUZ1dHVyZURhdGEgOiBNZWRpYVBsYXll
cjo6SGF2ZUN1cnJlbnREYXRhOworCiAgICAgICAgIGlmIChtX2NoYW5naW5nUmF0ZSkgewogICAg
ICAgICAgICAgbV9wbGF5ZXItPnJhdGVDaGFuZ2VkKCk7CiAgICAgICAgICAgICBtX2NoYW5naW5n
UmF0ZSA9IGZhbHNlOwpAQCAtNzcxLDcgKzg4NSw2IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
Ojp1cGRhdGVTdGF0ZXMoKQogICAgICAgICAgICAgbV9zZWVraW5nID0gZmFsc2U7CiAgICAgICAg
IH0KIAotICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkZWQ7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9BU1lOQzoKICAgICAgICAgTE9H
X1ZFUkJPU0UoTWVkaWEsICJBc3luYzogU3RhdGU6ICVzLCBwZW5kaW5nOiAlcyIsCkBAIC05NDEs
OCArMTA1NCwxMSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6ZGlkRW5kKCkKICAgICAvLyBu
b3QgYWx3YXlzIDAuIFNvIHRvIG5vdCBjb25mdXNlIHRoZSBIVE1MTWVkaWFFbGVtZW50IHdlCiAg
ICAgLy8gc3luY2hyb25pemUgcG9zaXRpb24gYW5kIGR1cmF0aW9uIHZhbHVlcy4KICAgICBmbG9h
dCBub3cgPSBjdXJyZW50VGltZSgpOwotICAgIGlmIChub3cgPiAwKQorICAgIGlmIChub3cgPiAw
KSB7CiAgICAgICAgIG1fbWVkaWFEdXJhdGlvbiA9IG5vdzsKKyAgICAgICAgbV9wbGF5ZXItPmR1
cmF0aW9uQ2hhbmdlZCgpOworICAgIH0KKwogICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3Bs
YXlCaW4sIEdTVF9TVEFURV9QQVVTRUQpOwogCiAgICAgdGltZUNoYW5nZWQoKTsKQEAgLTExOTMs
NyArMTMwOSwxOSBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6c3VwcG9ydHNGdWxsc2NyZWVu
KCkgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6
OmNyZWF0ZUdTVFBsYXlCaW4oU3RyaW5nIHVybCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpz
ZXRBdXRvYnVmZmVyKGJvb2wgYXV0b0J1ZmZlcikKK3sKKyAgICBBU1NFUlQobV9wbGF5QmluKTsK
KworICAgIEdzdFBsYXlGbGFncyBmbGFnczsKKyAgICBnX29iamVjdF9nZXQobV9wbGF5QmluLCAi
ZmxhZ3MiLCAmZmxhZ3MsIE5VTEwpOworICAgIGlmIChhdXRvQnVmZmVyKQorICAgICAgICBnX29i
amVjdF9zZXQobV9wbGF5QmluLCAiZmxhZ3MiLCBmbGFncyB8IEdTVF9QTEFZX0ZMQUdfRE9XTkxP
QUQsIE5VTEwpOworICAgIGVsc2UKKyAgICAgICAgZ19vYmplY3Rfc2V0KG1fcGxheUJpbiwgImZs
YWdzIiwgZmxhZ3MgJiB+R1NUX1BMQVlfRkxBR19ET1dOTE9BRCwgTlVMTCk7Cit9CisKK3ZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGVHU1RQbGF5QmluKCkKIHsKICAgICBBU1NFUlQoIW1f
cGxheUJpbik7CiAgICAgbV9wbGF5QmluID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJwbGF5
YmluMiIsICJwbGF5Iik7CkBAIC0xMjAzLDggKzEzMzEsNiBAQCB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZTo6Y3JlYXRlR1NUUGxheUJpbihTdHJpbmcgdXJsKQogICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
YnVzLCAibWVzc2FnZSIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRlTWVzc2FnZUNhbGxi
YWNrKSwgdGhpcyk7CiAgICAgZ3N0X29iamVjdF91bnJlZihidXMpOwogCi0gICAgZ19vYmplY3Rf
c2V0KG1fcGxheUJpbiwgInVyaSIsIHVybC51dGY4KCkuZGF0YSgpLCBOVUxMKTsKLQogICAgIGdf
c2lnbmFsX2Nvbm5lY3QobV9wbGF5QmluLCAibm90aWZ5Ojp2b2x1bWUiLCBHX0NBTExCQUNLKG1l
ZGlhUGxheWVyUHJpdmF0ZVZvbHVtZUNoYW5nZWRDYWxsYmFjayksIHRoaXMpOwogICAgIGdfc2ln
bmFsX2Nvbm5lY3QobV9wbGF5QmluLCAibm90aWZ5Ojpzb3VyY2UiLCBHX0NBTExCQUNLKG1lZGlh
UGxheWVyUHJpdmF0ZVNvdXJjZUNoYW5nZWRDYWxsYmFjayksIHRoaXMpOwogICAgIGdfc2lnbmFs
X2Nvbm5lY3QobV9wbGF5QmluLCAibm90aWZ5OjptdXRlIiwgR19DQUxMQkFDSyhtZWRpYVBsYXll
clByaXZhdGVNdXRlQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CkBAIC0xMjIzLDcgKzEzNDksNyBA
QCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Y3JlYXRlR1NUUGxheUJpbihTdHJpbmcgdXJsKQog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV9mcHNTaW5rID0gMDsKICAgICAgICAgICAg
IGdfb2JqZWN0X3NldChtX3BsYXlCaW4sICJ2aWRlby1zaW5rIiwgbV92aWRlb1NpbmssIE5VTEwp
OwotICAgICAgICAgICAgTE9HKE1lZGlhLCAiQ2FuJ3QgZGlzcGxheSBGUFMgc3RhdGlzdGljcywg
eW91IG5lZWQgZ3N0LXBsdWdpbnMtYmFkID49IDAuMTAuMTgiKTsKKyAgICAgICAgICAgIExPR19W
RVJCT1NFKE1lZGlhLCAiQ2FuJ3QgZGlzcGxheSBGUFMgc3RhdGlzdGljcywgeW91IG5lZWQgZ3N0
LXBsdWdpbnMtYmFkID49IDAuMTAuMTgiKTsKICAgICAgICAgfQogICAgIH0gZWxzZQogICAgICAg
ICBnX29iamVjdF9zZXQobV9wbGF5QmluLCAidmlkZW8tc2luayIsIG1fdmlkZW9TaW5rLCBOVUxM
KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL01lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKaW5kZXggMzQyNTdjYS4uZTE5YjY4NiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIw
MDkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAw
NyBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAy
MDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIw
MTAgSWdhbGlhIFMuTAogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC04Niw2ICs4Nyw5IEBAIGNsYXNz
IE1lZGlhUGxheWVyUHJpdmF0ZSA6IHB1YmxpYyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2Ug
ewogICAgICAgICAgICAgdm9pZCBtdXRlQ2hhbmdlZCgpOwogICAgICAgICAgICAgdm9pZCBtdXRl
Q2hhbmdlZENhbGxiYWNrKCk7CiAKKyAgICAgICAgICAgIHZvaWQgc2V0QXV0b2J1ZmZlcihib29s
KTsKKyAgICAgICAgICAgIGJvb2wgcXVlcnlCdWZmZXJpbmdTdGF0cygpOworCiAgICAgICAgICAg
ICBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG5ldHdvcmtTdGF0ZSgpIGNvbnN0OwogICAgICAg
ICAgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0OwogCkBAIC0x
MjgsOSArMTMyLDExIEBAIGNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZSA6IHB1YmxpYyBNZWRpYVBs
YXllclByaXZhdGVJbnRlcmZhY2UgewogICAgICAgICAgICAgZmxvYXQgbWF4VGltZUxvYWRlZCgp
IGNvbnN0OwogICAgICAgICAgICAgdm9pZCBzdGFydEVuZFBvaW50VGltZXJJZk5lZWRlZCgpOwog
Ci0gICAgICAgICAgICB2b2lkIGNyZWF0ZUdTVFBsYXlCaW4oU3RyaW5nIHVybCk7CisgICAgICAg
ICAgICB2b2lkIGNyZWF0ZUdTVFBsYXlCaW4oKTsKICAgICAgICAgICAgIGJvb2wgY2hhbmdlUGlw
ZWxpbmVTdGF0ZShHc3RTdGF0ZSBzdGF0ZSk7CiAKKyAgICAgICAgICAgIHZvaWQgcHJvY2Vzc0J1
ZmZlcmluZ1N0YXRzKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpOworCiAgICAgICAgIHByaXZhdGU6CiAg
ICAgICAgICAgICBNZWRpYVBsYXllciogbV9wbGF5ZXI7CiAgICAgICAgICAgICBHc3RFbGVtZW50
KiBtX3BsYXlCaW47CkBAIC0xNTcsNiArMTYzLDEwIEBAIGNsYXNzIE1lZGlhUGxheWVyUHJpdmF0
ZSA6IHB1YmxpYyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UgewogICAgICAgICAgICAgZ3Vp
bnQgbV92b2x1bWVJZGxlSWQ7CiAgICAgICAgICAgICBnZmxvYXQgbV9tZWRpYUR1cmF0aW9uOwog
ICAgICAgICAgICAgZ3VpbnQgbV9tdXRlSWRsZUlkOworICAgICAgICAgICAgYm9vbCBtX3N0YXJ0
ZWRCdWZmZXJpbmc7CisgICAgICAgICAgICBndWludCBtX2ZpbGxUaW1lb3V0SWQ7CisgICAgICAg
ICAgICBmbG9hdCBtX21heFRpbWVMb2FkZWQ7CisgICAgICAgICAgICBnZG91YmxlIG1fZmlsbFN0
YXR1czsKICAgICB9OwogfQogCmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUu
YWMKaW5kZXggZDQ2ZGEyNC4uNjZlNDFjYyAxMDA2NDQKLS0tIGEvY29uZmlndXJlLmFjCisrKyBi
L2NvbmZpZ3VyZS5hYwpAQCAtMjExLDcgKzIxMSw3IEBAIEdUS19SRVFVSVJFRF9WRVJTSU9OPTIu
MTAKIExJQlhTTFRfUkVRVUlSRURfVkVSU0lPTj0xLjEuNwogU1FMSVRFX1JFUVVJUkVEX1ZFUlNJ
T049My4wCiBHU1RSRUFNRVJfUkVRVUlSRURfVkVSU0lPTj0wLjEwCi1HU1RSRUFNRVJfUExVR0lO
U19CQVNFX1JFUVVJUkVEX1ZFUlNJT049MC4xMC4yMworR1NUUkVBTUVSX1BMVUdJTlNfQkFTRV9S
RVFVSVJFRF9WRVJTSU9OPTAuMTAuMjUKIEVOQ0hBTlRfUkVRVUlSRURfVkVSU0lPTj0wLjIyCiBH
QUlMX1JFUVVJUkVEX1ZFUlNJT049MS44CiAKLS0gCjEuNi4zLjM=
</data>
<flag name="review"
          id="31465"
          type_id="1"
          status="+"
          setter="gustavo"
    />
    <flag name="commit-queue"
          id="31486"
          type_id="3"
          status="-"
          setter="gustavo"
    />
          </attachment>
      

    </bug>

</bugzilla>