<?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>33222</bug_id>
          
          <creation_ts>2010-01-05 11:11:32 -0800</creation_ts>
          <short_desc>Make text decoders and resource loaders read from segmented SharedBuffer</short_desc>
          <delta_ts>2010-03-16 18:40:37 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yong Li">yong.li.webkit</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>177256</commentid>
    <comment_count>0</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-01-05 11:11:32 -0800</bug_when>
    <thetext>Make CachedScript, CSS Style Sheet, XSL Style Sheet and loaders work with segmented SharedBuffer

See bug 33178

patch is coming</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177265</commentid>
    <comment_count>1</comment_count>
      <attachid>45914</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-01-05 11:32:54 -0800</bug_when>
    <thetext>Created attachment 45914
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177267</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-05 11:36:09 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 45914 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177291</commentid>
    <comment_count>3</comment_count>
      <attachid>45914</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-01-05 12:16:23 -0800</bug_when>
    <thetext>Comment on attachment 45914
the patch

I think it woudl be better to write two new functions.  One which does this loop and calls didRecievData on a passed in subresourceloader, and the other which does the loop and calls decode on a passed in decoder and returns the final string.  That saves us from any copy/paste code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177294</commentid>
    <comment_count>4</comment_count>
      <attachid>45914</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-05 12:17:40 -0800</bug_when>
    <thetext>Comment on attachment 45914
the patch

&gt; -    String sheetText = m_decoder-&gt;decode(m_data-&gt;data(), m_data-&gt;size());
&gt; +    String sheetText;
&gt; +    const char* segment;
&gt; +    unsigned pos = 0;

Could you avoid the abbreviation &quot;pos&quot; here? I like &quot;offset&quot; for this, myself.

&gt; +    while (unsigned length = m_data-&gt;getSomeData(segment, pos)) {

It&apos;s unfortunate this operation is O(n log n) in the number of segments, having to find the data segment each time based on the passed-in offset, walking the list of segments. I wish the API of SharedBuffer didn&apos;t force this, although it&apos;s probably not a real concern.

Rather than repeating this decoding idiom over and over again, could you put a helper function somewhere that encapsulates the process of decoding a SharedBuffer into a String.

Appending to a String is a slow operation that requires reallocating the buffer each time. Instead we should append to a Vector&lt;UChar&gt; and convert to a String only at the end. Making a single function for this will help us make sure it works in a way that&apos;s optimal.

Another good optimization would be estimating the decoded size based on the size of the SharedBuffer to keep the number of reallocations to a minimum. This should be straightforward. We could start by assuming that each byte encodes an average of about one character.


&gt; -            loader-&gt;didReceiveData(data-&gt;data(), data-&gt;size(), data-&gt;size(), true);
&gt; +            const char* segment;
&gt; +            unsigned pos = 0;
&gt; +            int received = 0;
&gt; +            while (unsigned length = data-&gt;getSomeData(segment, pos)) {
&gt; +                pos += length;
&gt; +                loader-&gt;didReceiveData(segment, length, pos, false);
&gt; +            }

After this patch, is there any code anywhere passing true for the last argument to didReceiveData? If not, then we should remove that argument and the dead code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177342</commentid>
    <comment_count>5</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-01-05 13:16:40 -0800</bug_when>
    <thetext>Thanks, Eric, Darin, I&apos;ll try to improve it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177600</commentid>
    <comment_count>6</comment_count>
      <attachid>45965</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-01-06 09:13:34 -0800</bug_when>
    <thetext>Created attachment 45965
Make TextResourceDecoder read from segmented SharedBuffer

How about this one?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177602</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-06 09:15:21 -0800</bug_when>
    <thetext>Attachment 45965 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
Traceback (most recent call last):
  File &quot;WebKitTools/Scripts/check-webkit-style&quot;, line 98, in &lt;module&gt;
    main()
  File &quot;WebKitTools/Scripts/check-webkit-style&quot;, line 62, in main
    defaults = style.ArgumentDefaults(style.DEFAULT_OUTPUT_FORMAT,
AttributeError: &apos;module&apos; object has no attribute &apos;ArgumentDefaults&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177613</commentid>
    <comment_count>8</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-01-06 09:31:12 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Attachment 45965 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
&gt; Traceback (most recent call last):
&gt;   File &quot;WebKitTools/Scripts/check-webkit-style&quot;, line 98, in &lt;module&gt;
&gt;     main()
&gt;   File &quot;WebKitTools/Scripts/check-webkit-style&quot;, line 62, in main
&gt;     defaults = style.ArgumentDefaults(style.DEFAULT_OUTPUT_FORMAT,
&gt; AttributeError: &apos;module&apos; object has no attribute &apos;ArgumentDefaults&apos;

??? confused</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177622</commentid>
    <comment_count>9</comment_count>
      <attachid>45966</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-01-06 09:45:18 -0800</bug_when>
    <thetext>Created attachment 45966
Let ResourceLoader delivery segmented data

Let ResourceLoader delivery segmented data when loading data from an existing SharedBuffer object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177623</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-06 09:46:44 -0800</bug_when>
    <thetext>Attachment 45966 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
Traceback (most recent call last):
  File &quot;WebKitTools/Scripts/check-webkit-style&quot;, line 98, in &lt;module&gt;
    main()
  File &quot;WebKitTools/Scripts/check-webkit-style&quot;, line 62, in main
    defaults = style.ArgumentDefaults(style.DEFAULT_OUTPUT_FORMAT,
AttributeError: &apos;module&apos; object has no attribute &apos;ArgumentDefaults&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177624</commentid>
    <comment_count>11</comment_count>
      <attachid>45965</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-06 09:47:08 -0800</bug_when>
    <thetext>Comment on attachment 45965
Make TextResourceDecoder read from segmented SharedBuffer

&gt; +String TextResourceDecoder::decode(const SharedBuffer&amp; data)
&gt; +{
&gt; +    String result;
&gt; +    const char* segment;
&gt; +    unsigned offset = 0;
&gt; +    while (unsigned length = data.getSomeData(segment, offset)) {
&gt; +        result += decode(segment, length);
&gt; +        offset += length;
&gt; +    }
&gt; +    return result;
&gt; +}

It&apos;s great factoring to make use a function like this instead of spreading the code around.

I also note that all the clients who use this function also do the flushing, so in the future might want to make this helper function include the flush and have some name like &quot;decodeAll&quot; rather than just being cleanly parallel to the virtual decode function.

This is still a quite-inefficient algorithm for creating a string out of multiple decoded chunks; any loop that appends to a String is suboptimal because making a new String by appending two strings *always* involves allocating a fresh buffer each time and copying all the data; this inefficiency might make some real world cases pathologically worse if we find ourselves with multiple segments. It might actually be more efficient to do the dumb thing the old code was doing, and concatenate them all, just because the decoded data would be dealt with all at once even though the encoded data ends up being copied.

I think at some point we will want to change this. Even now I think we could do better with Vector&lt;UChar&gt;.

Maybe we want to get rid of the use of String in the interface to decoders eventually?

I am conflicted about the patch. It seems like a good idea in theory, but in practice it seems that this patch claiming to speed things up might always end up slowing things down instead. And might cause us to use more memory too.

&gt; +    String decode(const SharedBuffer&amp; data);

I don&apos;t think the argument name is needed for clarity here so normally we would leave it out.

I am going to say r=me but I do have serious reservations. I&apos;d like to hear more concrete evidence about why this is a helpful change to make.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177625</commentid>
    <comment_count>12</comment_count>
      <attachid>45966</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-06 09:48:28 -0800</bug_when>
    <thetext>Comment on attachment 45966
Let ResourceLoader delivery segmented data

&gt; +        didReceiveData(segment, static_cast&lt;int&gt;(length), offset, false);

Why is this cast needed? I think it&apos;s not helpful with any compiler.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177631</commentid>
    <comment_count>13</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-01-06 10:04:16 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 45966 [details])
&gt; &gt; +        didReceiveData(segment, static_cast&lt;int&gt;(length), offset, false);
&gt; 
&gt; Why is this cast needed? I think it&apos;s not helpful with any compiler.
&gt; 
&gt; r=me

MVSC can give warning for unsigned-&gt;int conversion. But seems they have turned this warning off by default. don&apos;t know if any other compiler will complain this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177633</commentid>
    <comment_count>14</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-01-06 10:15:07 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; 
&gt; This is still a quite-inefficient algorithm for creating a string out of
&gt; multiple decoded chunks; any loop that appends to a String is suboptimal
&gt; because making a new String by appending two strings *always* involves
&gt; allocating a fresh buffer each time and copying all the data; this inefficiency
&gt; might make some real world cases pathologically worse if we find ourselves with
&gt; multiple segments. It might actually be more efficient to do the dumb thing the
&gt; old code was doing, and concatenate them all, just because the decoded data
&gt; would be dealt with all at once even though the encoded data ends up being
&gt; copied.
&gt; 
&gt; I think at some point we will want to change this. Even now I think we could do
&gt; better with Vector&lt;UChar&gt;.
&gt; 
&gt; Maybe we want to get rid of the use of String in the interface to decoders
&gt; eventually?
&gt; 
&gt; I am conflicted about the patch. It seems like a good idea in theory, but in
&gt; practice it seems that this patch claiming to speed things up might always end
&gt; up slowing things down instead. And might cause us to use more memory too.
&gt; 
&gt; &gt; +    String decode(const SharedBuffer&amp; data);
&gt; 
&gt; I don&apos;t think the argument name is needed for clarity here so normally we would
&gt; leave it out.
&gt; 
&gt; I am going to say r=me but I do have serious reservations. I&apos;d like to hear
&gt; more concrete evidence about why this is a helpful change to make.

You&apos;re right, this patch is probably not helpful at all. I&apos;ll leave it here. I don&apos;t like the way that webkit uses String to store and parse scripts. SegmentedString is a good concept, but only html parser is using it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177683</commentid>
    <comment_count>15</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-01-06 11:59:55 -0800</bug_when>
    <thetext>bugzilla-tool had trouble reopening the bug, but this was rolled out in r52860.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177687</commentid>
    <comment_count>16</comment_count>
      <attachid>45965</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-01-06 12:01:02 -0800</bug_when>
    <thetext>Comment on attachment 45965
Make TextResourceDecoder read from segmented SharedBuffer

Clearing Darin&apos;s r+ since this has been landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177688</commentid>
    <comment_count>17</comment_count>
      <attachid>45966</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-01-06 12:01:44 -0800</bug_when>
    <thetext>Comment on attachment 45966
Let ResourceLoader delivery segmented data

Marking r- since this was rolled out in http://trac.webkit.org/changeset/52860.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179353</commentid>
    <comment_count>18</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-01-11 07:13:32 -0800</bug_when>
    <thetext>My second patch (for ResourceLoader) is buggy for sure. The reason is didReceiveData() can cancel the request. We could fix it by checking if the job is cancelled in each loop. But I think it is probably better to let SharedBuffer merge all segments into one in this case. For the similar reason, the first patch is also not needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200559</commentid>
    <comment_count>19</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-03-16 18:40:37 -0700</bug_when>
    <thetext>never mind. I can load the webarchive with safari.

I guess there&apos;s a bug in SharedBuffer::createWithContentsOfFile()

Are you using http://trac.webkit.org/browser/trunk/WebCore/platform/win/SharedBufferWin.cpp?

If not, please note you have to set &quot;m_size&quot;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45914</attachid>
            <date>2010-01-05 11:32:54 -0800</date>
            <delta_ts>2010-01-06 09:13:34 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>33222.patch</filename>
            <type>text/plain</type>
            <size>8166</size>
            <attacher name="Yong Li">yong.li.webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZGNlMWVlOS4uM2RiNmZhNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxMC0wMS0wNSAgWW9uZyBMaSAgPHlv
bmcubGlAdG9yY2htb2JpbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFN1cHBvcnQgc2VnbWVudGVkIFNoYXJlZEJ1ZmZlciBpbiBtb3JlIGNh
c2VzIChzZWUgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMpCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzIyMgorCisgICAgICAgICogbG9hZGVyL0NhY2hl
ZENTU1N0eWxlU2hlZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkQ1NTU3R5bGVTaGVl
dDo6c2hlZXRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZENTU1N0eWxlU2hlZXQ6OmRh
dGEpOgorICAgICAgICAqIGxvYWRlci9DYWNoZWRTY3JpcHQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FjaGVkU2NyaXB0OjpzY3JpcHQpOgorICAgICAgICAqIGxvYWRlci9DYWNoZWRYU0xTdHls
ZVNoZWV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFhTTFN0eWxlU2hlZXQ6OmRhdGEp
OgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVudExvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudExvYWRlcjo6c3Vic3RpdHV0ZVJlc291cmNlRGVsaXZlcnlUaW1lckZpcmVkKToK
KyAgICAgICAgKiBsb2FkZXIvTWFpblJlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok1haW5SZXNvdXJjZUxvYWRlcjo6Y29udGludWVBZnRlckNvbnRlbnRQb2xpY3kpOgorICAg
ICAgICAqIGxvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
dWJyZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKiBwYWdlL1Bh
Z2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6dXNlclN0eWxlU2hlZXQpOgorCiAyMDEw
LTAxLTA1ICBZb25nIExpICA8eW9saUByaW0uY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvQ2FjaGVkQ1NTU3R5bGVT
aGVldC5jcHAgYi9XZWJDb3JlL2xvYWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcAppbmRleCA4
MmIzNTUxLi5jNWE2NjUxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9DYWNoZWRDU1NTdHls
ZVNoZWV0LmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcApA
QCAtODIsNyArODIsMTMgQEAgY29uc3QgU3RyaW5nIENhY2hlZENTU1N0eWxlU2hlZXQ6OnNoZWV0
VGV4dChib29sIGVuZm9yY2VNSU1FVHlwZSwgYm9vbCogaGFzVmFsaWQKICAgICAgICAgcmV0dXJu
IG1fZGVjb2RlZFNoZWV0VGV4dDsKICAgICAKICAgICAvLyBEb24ndCBjYWNoZSB0aGUgZGVjb2Rl
ZCB0ZXh0LCByZWdlbmVyYXRpbmcgaXMgY2hlYXAgYW5kIGl0IGNhbiB1c2UgcXVpdGUgYSBiaXQg
b2YgbWVtb3J5Ci0gICAgU3RyaW5nIHNoZWV0VGV4dCA9IG1fZGVjb2Rlci0+ZGVjb2RlKG1fZGF0
YS0+ZGF0YSgpLCBtX2RhdGEtPnNpemUoKSk7CisgICAgU3RyaW5nIHNoZWV0VGV4dDsKKyAgICBj
b25zdCBjaGFyKiBzZWdtZW50OworICAgIHVuc2lnbmVkIHBvcyA9IDA7CisgICAgd2hpbGUgKHVu
c2lnbmVkIGxlbmd0aCA9IG1fZGF0YS0+Z2V0U29tZURhdGEoc2VnbWVudCwgcG9zKSkgeworICAg
ICAgICBzaGVldFRleHQgKz0gbV9kZWNvZGVyLT5kZWNvZGUoc2VnbWVudCwgbGVuZ3RoKTsKKyAg
ICAgICAgcG9zICs9IGxlbmd0aDsKKyAgICB9CiAgICAgc2hlZXRUZXh0ICs9IG1fZGVjb2Rlci0+
Zmx1c2goKTsKICAgICByZXR1cm4gc2hlZXRUZXh0OwogfQpAQCAtOTYsNyArMTAyLDEzIEBAIHZv
aWQgQ2FjaGVkQ1NTU3R5bGVTaGVldDo6ZGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0
YSwgYm9vbCBhbGxEYXRhUmVjZWl2CiAgICAgc2V0RW5jb2RlZFNpemUobV9kYXRhLmdldCgpID8g
bV9kYXRhLT5zaXplKCkgOiAwKTsKICAgICAvLyBEZWNvZGUgdGhlIGRhdGEgdG8gZmluZCBvdXQg
dGhlIGVuY29kaW5nIGFuZCBrZWVwIHRoZSBzaGVldCB0ZXh0IGFyb3VuZCBkdXJpbmcgY2hlY2tO
b3RpZnkoKQogICAgIGlmIChtX2RhdGEpIHsKLSAgICAgICAgbV9kZWNvZGVkU2hlZXRUZXh0ID0g
bV9kZWNvZGVyLT5kZWNvZGUobV9kYXRhLT5kYXRhKCksIG1fZGF0YS0+c2l6ZSgpKTsKKyAgICAg
ICAgbV9kZWNvZGVkU2hlZXRUZXh0ID0gU3RyaW5nKCk7CisgICAgICAgIGNvbnN0IGNoYXIqIHNl
Z21lbnQ7CisgICAgICAgIHVuc2lnbmVkIHBvcyA9IDA7CisgICAgICAgIHdoaWxlICh1bnNpZ25l
ZCBsZW5ndGggPSBtX2RhdGEtPmdldFNvbWVEYXRhKHNlZ21lbnQsIHBvcykpIHsKKyAgICAgICAg
ICAgIG1fZGVjb2RlZFNoZWV0VGV4dCArPSBtX2RlY29kZXItPmRlY29kZShzZWdtZW50LCBsZW5n
dGgpOworICAgICAgICAgICAgcG9zICs9IGxlbmd0aDsKKyAgICAgICAgfQogICAgICAgICBtX2Rl
Y29kZWRTaGVldFRleHQgKz0gbV9kZWNvZGVyLT5mbHVzaCgpOwogICAgIH0KICAgICBtX2xvYWRp
bmcgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL0NhY2hlZFNjcmlwdC5jcHAg
Yi9XZWJDb3JlL2xvYWRlci9DYWNoZWRTY3JpcHQuY3BwCmluZGV4IDMxNDgzZDYuLjk4MjZhOWIg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL0NhY2hlZFNjcmlwdC5jcHAKKysrIGIvV2ViQ29y
ZS9sb2FkZXIvQ2FjaGVkU2NyaXB0LmNwcApAQCAtNzUsNyArNzUsMTIgQEAgY29uc3QgU3RyaW5n
JiBDYWNoZWRTY3JpcHQ6OnNjcmlwdCgpCiAgICAgQVNTRVJUKCFpc1B1cmdlYWJsZSgpKTsKIAog
ICAgIGlmICghbV9zY3JpcHQgJiYgbV9kYXRhKSB7Ci0gICAgICAgIG1fc2NyaXB0ID0gbV9kZWNv
ZGVyLT5kZWNvZGUobV9kYXRhLT5kYXRhKCksIGVuY29kZWRTaXplKCkpOworICAgICAgICBjb25z
dCBjaGFyKiBzZWdtZW50OworICAgICAgICB1bnNpZ25lZCBwb3MgPSAwOworICAgICAgICB3aGls
ZSAodW5zaWduZWQgbGVuZ3RoID0gbV9kYXRhLT5nZXRTb21lRGF0YShzZWdtZW50LCBwb3MpKSB7
CisgICAgICAgICAgICBtX3NjcmlwdCArPSBtX2RlY29kZXItPmRlY29kZShzZWdtZW50LCBsZW5n
dGgpOworICAgICAgICAgICAgcG9zICs9IGxlbmd0aDsKKyAgICAgICAgfQogICAgICAgICBtX3Nj
cmlwdCArPSBtX2RlY29kZXItPmZsdXNoKCk7CiAgICAgICAgIHNldERlY29kZWRTaXplKG1fc2Ny
aXB0Lmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9sb2FkZXIvQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAgYi9XZWJDb3JlL2xvYWRlci9DYWNoZWRY
U0xTdHlsZVNoZWV0LmNwcAppbmRleCA1ZGEwYWJmLi4xMjFjN2U0IDEwMDY0NAotLS0gYS9XZWJD
b3JlL2xvYWRlci9DYWNoZWRYU0xTdHlsZVNoZWV0LmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9D
YWNoZWRYU0xTdHlsZVNoZWV0LmNwcApAQCAtNjksNyArNjksMTMgQEAgdm9pZCBDYWNoZWRYU0xT
dHlsZVNoZWV0OjpkYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBib29sIGFsbERh
dGFSZWNlaXYKICAgICBtX2RhdGEgPSBkYXRhOyAgICAgCiAgICAgc2V0RW5jb2RlZFNpemUobV9k
YXRhLmdldCgpID8gbV9kYXRhLT5zaXplKCkgOiAwKTsKICAgICBpZiAobV9kYXRhLmdldCgpKSB7
Ci0gICAgICAgIG1fc2hlZXQgPSBTdHJpbmcobV9kZWNvZGVyLT5kZWNvZGUobV9kYXRhLT5kYXRh
KCksIGVuY29kZWRTaXplKCkpKTsKKyAgICAgICAgbV9zaGVldCA9IFN0cmluZygpOworICAgICAg
ICBjb25zdCBjaGFyKiBzZWdtZW50OworICAgICAgICB1bnNpZ25lZCBwb3MgPSAwOworICAgICAg
ICB3aGlsZSAodW5zaWduZWQgbGVuZ3RoID0gbV9kYXRhLT5nZXRTb21lRGF0YShzZWdtZW50LCBw
b3MpKSB7CisgICAgICAgICAgICBtX3NoZWV0ICs9IG1fZGVjb2Rlci0+ZGVjb2RlKHNlZ21lbnQs
IGxlbmd0aCk7CisgICAgICAgICAgICBwb3MgKz0gbGVuZ3RoOworICAgICAgICB9CiAgICAgICAg
IG1fc2hlZXQgKz0gbV9kZWNvZGVyLT5mbHVzaCgpOwogICAgIH0KICAgICBtX2xvYWRpbmcgPSBm
YWxzZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcCBiL1dl
YkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAppbmRleCAxNTA3ZmU5Li5kNjg1NGFlIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKKysrIGIvV2ViQ29y
ZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCkBAIC01OTksNyArNTk5LDEzIEBAIHZvaWQgRG9j
dW1lbnRMb2FkZXI6OnN1YnN0aXR1dGVSZXNvdXJjZURlbGl2ZXJ5VGltZXJGaXJlZChUaW1lcjxE
b2N1bWVudExvYWRlcj4qCiAgICAgICAgICAgICBTaGFyZWRCdWZmZXIqIGRhdGEgPSByZXNvdXJj
ZS0+ZGF0YSgpOwogICAgICAgICAKICAgICAgICAgICAgIGxvYWRlci0+ZGlkUmVjZWl2ZVJlc3Bv
bnNlKHJlc291cmNlLT5yZXNwb25zZSgpKTsKLSAgICAgICAgICAgIGxvYWRlci0+ZGlkUmVjZWl2
ZURhdGEoZGF0YS0+ZGF0YSgpLCBkYXRhLT5zaXplKCksIGRhdGEtPnNpemUoKSwgdHJ1ZSk7Cisg
ICAgICAgICAgICBjb25zdCBjaGFyKiBzZWdtZW50OworICAgICAgICAgICAgdW5zaWduZWQgcG9z
ID0gMDsKKyAgICAgICAgICAgIGludCByZWNlaXZlZCA9IDA7CisgICAgICAgICAgICB3aGlsZSAo
dW5zaWduZWQgbGVuZ3RoID0gZGF0YS0+Z2V0U29tZURhdGEoc2VnbWVudCwgcG9zKSkgeworICAg
ICAgICAgICAgICAgIHBvcyArPSBsZW5ndGg7CisgICAgICAgICAgICAgICAgbG9hZGVyLT5kaWRS
ZWNlaXZlRGF0YShzZWdtZW50LCBsZW5ndGgsIHBvcywgZmFsc2UpOworICAgICAgICAgICAgfQog
ICAgICAgICAgICAgbG9hZGVyLT5kaWRGaW5pc2hMb2FkaW5nKCk7CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAvLyBBIG51bGwgcmVzb3VyY2UgbWVhbnMgdGhhdCB3ZSBzaG91bGQgZmFp
bCB0aGUgbG9hZC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRl
ci5jcHAgYi9XZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwCmluZGV4IDNlNzU4
ODAuLjMzNjM4YTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRl
ci5jcHAKKysrIGIvV2ViQ29yZS9sb2FkZXIvTWFpblJlc291cmNlTG9hZGVyLmNwcApAQCAtMjU5
LDggKzI1OSwxNSBAQCB2b2lkIE1haW5SZXNvdXJjZUxvYWRlcjo6Y29udGludWVBZnRlckNvbnRl
bnRQb2xpY3koUG9saWN5QWN0aW9uIGNvbnRlbnRQb2xpY3ksCiAKICAgICBpZiAoZnJhbWVMb2Fk
ZXIoKSAmJiAhZnJhbWVMb2FkZXIoKS0+aXNTdG9wcGluZygpKSB7CiAgICAgICAgIGlmIChtX3N1
YnN0aXR1dGVEYXRhLmlzVmFsaWQoKSkgewotICAgICAgICAgICAgaWYgKG1fc3Vic3RpdHV0ZURh
dGEuY29udGVudCgpLT5zaXplKCkpCi0gICAgICAgICAgICAgICAgZGlkUmVjZWl2ZURhdGEobV9z
dWJzdGl0dXRlRGF0YS5jb250ZW50KCktPmRhdGEoKSwgbV9zdWJzdGl0dXRlRGF0YS5jb250ZW50
KCktPnNpemUoKSwgbV9zdWJzdGl0dXRlRGF0YS5jb250ZW50KCktPnNpemUoKSwgdHJ1ZSk7Cisg
ICAgICAgICAgICBpZiAobV9zdWJzdGl0dXRlRGF0YS5jb250ZW50KCktPnNpemUoKSkgeworICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHNlZ21lbnQ7CisgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgcG9zID0gMDsKKyAgICAgICAgICAgICAgICBpbnQgcmVjZWl2ZWQgPSAwOworICAgICAgICAg
ICAgICAgIHdoaWxlICh1bnNpZ25lZCBsZW5ndGggPSBtX3N1YnN0aXR1dGVEYXRhLmNvbnRlbnQo
KS0+Z2V0U29tZURhdGEoc2VnbWVudCwgcG9zKSkgeworICAgICAgICAgICAgICAgICAgICBwb3Mg
Kz0gbGVuZ3RoOworICAgICAgICAgICAgICAgICAgICBkaWRSZWNlaXZlRGF0YShzZWdtZW50LCBs
ZW5ndGgsIHBvcywgZmFsc2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGlmIChmcmFtZUxvYWRlcigpICYmICFmcmFtZUxvYWRlcigpLT5pc1N0b3BwaW5n
KCkpIAogICAgICAgICAgICAgICAgIGRpZEZpbmlzaExvYWRpbmcoKTsKICAgICAgICAgfSBlbHNl
IGlmIChzaG91bGRMb2FkQXNFbXB0eURvY3VtZW50KHVybCkgfHwgZnJhbWVMb2FkZXIoKS0+cmVw
cmVzZW50YXRpb25FeGlzdHNGb3JVUkxTY2hlbWUodXJsLnByb3RvY29sKCkpKQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwIGIvV2ViQ29yZS9sb2FkZXIv
U3VicmVzb3VyY2VMb2FkZXIuY3BwCmluZGV4IGY5MmEwNzQuLjNkN2ZjZTEgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcAorKysgYi9XZWJDb3JlL2xvYWRl
ci9TdWJyZXNvdXJjZUxvYWRlci5jcHAKQEAgLTE0Nyw4ICsxNDcsMTQgQEAgdm9pZCBTdWJyZXNv
dXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHIp
CiAgICAgICAgIC8vIFNpbmNlIGEgc3VicmVzb3VyY2UgbG9hZGVyIGRvZXMgbm90IGxvYWQgbXVs
dGlwYXJ0IHNlY3Rpb25zIHByb2dyZXNzaXZlbHksCiAgICAgICAgIC8vIGRlbGl2ZXIgdGhlIHBy
ZXZpb3VzbHkgcmVjZWl2ZWQgZGF0YSB0byB0aGUgbG9hZGVyIGFsbCBhdCBvbmNlIG5vdy4KICAg
ICAgICAgLy8gVGhlbiBjbGVhciB0aGUgZGF0YSB0byBtYWtlIHdheSBmb3IgdGhlIG5leHQgbXVs
dGlwYXJ0IHNlY3Rpb24uCi0gICAgICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgICAgIG1fY2xp
ZW50LT5kaWRSZWNlaXZlRGF0YSh0aGlzLCBidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCkp
OworICAgICAgICBpZiAobV9jbGllbnQpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIHNlZ21l
bnQ7CisgICAgICAgICAgICB1bnNpZ25lZCBwb3MgPSAwOworICAgICAgICAgICAgd2hpbGUgKHVu
c2lnbmVkIGxlbmd0aCA9IGJ1ZmZlci0+Z2V0U29tZURhdGEoc2VnbWVudCwgcG9zKSkgeworICAg
ICAgICAgICAgICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlRGF0YSh0aGlzLCBzZWdtZW50LCBsZW5n
dGgpOworICAgICAgICAgICAgICAgIHBvcyArPSBsZW5ndGg7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KICAgICAgICAgY2xlYXJSZXNvdXJjZURhdGEoKTsKICAgICAgICAgCiAgICAgICAgIC8v
IEFmdGVyIHRoZSBmaXJzdCBtdWx0aXBhcnQgc2VjdGlvbiBpcyBjb21wbGV0ZSwgc2lnbmFsIHRv
IGRlbGVnYXRlcyB0aGF0IHRoaXMgbG9hZCBpcyAiZmluaXNoZWQiIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wYWdlL1BhZ2UuY3BwIGIvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDFhMDM1YTUu
LmM5NjdmZmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9XZWJDb3Jl
L3BhZ2UvUGFnZS5jcHAKQEAgLTYwOCw3ICs2MDgsMTMgQEAgY29uc3QgU3RyaW5nJiBQYWdlOjp1
c2VyU3R5bGVTaGVldCgpIGNvbnN0CiAgICAgICAgIHJldHVybiBtX3VzZXJTdHlsZVNoZWV0Owog
CiAgICAgUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IGRlY29kZXIgPSBUZXh0UmVzb3VyY2VE
ZWNvZGVyOjpjcmVhdGUoInRleHQvY3NzIik7Ci0gICAgbV91c2VyU3R5bGVTaGVldCA9IGRlY29k
ZXItPmRlY29kZShkYXRhLT5kYXRhKCksIGRhdGEtPnNpemUoKSk7CisgICAgbV91c2VyU3R5bGVT
aGVldCA9IFN0cmluZygpOworICAgIGNvbnN0IGNoYXIqIHNlZ21lbnQ7CisgICAgdW5zaWduZWQg
cG9zID0gMDsKKyAgICB3aGlsZSAodW5zaWduZWQgbGVuZ3RoID0gZGF0YS0+Z2V0U29tZURhdGEo
c2VnbWVudCwgcG9zKSkgeworICAgICAgICBtX3VzZXJTdHlsZVNoZWV0ICs9IGRlY29kZXItPmRl
Y29kZShzZWdtZW50LCBsZW5ndGgpOworICAgICAgICBwb3MgKz0gbGVuZ3RoOworICAgIH0KICAg
ICBtX3VzZXJTdHlsZVNoZWV0ICs9IGRlY29kZXItPmZsdXNoKCk7CiAKICAgICByZXR1cm4gbV91
c2VyU3R5bGVTaGVldDsK
</data>
<flag name="review"
          id="28077"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45965</attachid>
            <date>2010-01-06 09:13:34 -0800</date>
            <delta_ts>2010-01-06 12:01:02 -0800</delta_ts>
            <desc>Make TextResourceDecoder read from segmented SharedBuffer</desc>
            <filename>33222.patch</filename>
            <type>text/plain</type>
            <size>5846</size>
            <attacher name="Yong Li">yong.li.webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NDBkOGEwYy4uYzJkMjAzYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwyNSBAQAogMjAxMC0wMS0wNSAgWW9uZyBMaSAgPHlv
bGlAcmltLmNvbT4KIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBNYWtlIFRleHRSZXNvdXJjZURlY29kZXIgd29yayB3aXRoIHNlZ21lbnRlZCBTaGFyZWRC
dWZmZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMz
MjIyCisKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDYWNoZWRDU1NTdHlsZVNoZWV0OjpzaGVldFRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FjaGVkQ1NTU3R5bGVTaGVldDo6ZGF0YSk6CisgICAgICAgICogbG9hZGVyL0NhY2hl
ZFNjcmlwdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRTY3JpcHQ6OnNjcmlwdCk6Cisg
ICAgICAgICogbG9hZGVyL0NhY2hlZFhTTFN0eWxlU2hlZXQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FjaGVkWFNMU3R5bGVTaGVldDo6ZGF0YSk6CisgICAgICAgICogbG9hZGVyL1RleHRSZXNv
dXJjZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJlc291cmNlRGVjb2Rlcjo6
ZGVjb2RlKToKKyAgICAgICAgKiBsb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5oOgorICAgICAg
ICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjp1c2VyU3R5bGVTaGVl
dCk6CisKKzIwMTAtMDEtMDUgIFlvbmcgTGkgIDx5b2xpQHJpbS5jb20+CisKICAgICAgICAgUmV2
aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCiAKICAgICAgICAgTWFrZSBQTkcgaW1hZ2UgZGVjb2RlciB3
b3JrIHdpdGggc2VnbWVudGVkIFNoYXJlZEJ1ZmZlcgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2Fk
ZXIvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHAgYi9XZWJDb3JlL2xvYWRlci9DYWNoZWRDU1NTdHls
ZVNoZWV0LmNwcAppbmRleCA4MmIzNTUxLi44NGEwNTA5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2xv
YWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9DYWNoZWRD
U1NTdHlsZVNoZWV0LmNwcApAQCAtODIsNyArODIsNyBAQCBjb25zdCBTdHJpbmcgQ2FjaGVkQ1NT
U3R5bGVTaGVldDo6c2hlZXRUZXh0KGJvb2wgZW5mb3JjZU1JTUVUeXBlLCBib29sKiBoYXNWYWxp
ZAogICAgICAgICByZXR1cm4gbV9kZWNvZGVkU2hlZXRUZXh0OwogICAgIAogICAgIC8vIERvbid0
IGNhY2hlIHRoZSBkZWNvZGVkIHRleHQsIHJlZ2VuZXJhdGluZyBpcyBjaGVhcCBhbmQgaXQgY2Fu
IHVzZSBxdWl0ZSBhIGJpdCBvZiBtZW1vcnkKLSAgICBTdHJpbmcgc2hlZXRUZXh0ID0gbV9kZWNv
ZGVyLT5kZWNvZGUobV9kYXRhLT5kYXRhKCksIG1fZGF0YS0+c2l6ZSgpKTsKKyAgICBTdHJpbmcg
c2hlZXRUZXh0ID0gbV9kZWNvZGVyLT5kZWNvZGUoKm1fZGF0YSk7CiAgICAgc2hlZXRUZXh0ICs9
IG1fZGVjb2Rlci0+Zmx1c2goKTsKICAgICByZXR1cm4gc2hlZXRUZXh0OwogfQpAQCAtOTYsNyAr
OTYsNyBAQCB2b2lkIENhY2hlZENTU1N0eWxlU2hlZXQ6OmRhdGEoUGFzc1JlZlB0cjxTaGFyZWRC
dWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdgogICAgIHNldEVuY29kZWRTaXplKG1fZGF0
YS5nZXQoKSA/IG1fZGF0YS0+c2l6ZSgpIDogMCk7CiAgICAgLy8gRGVjb2RlIHRoZSBkYXRhIHRv
IGZpbmQgb3V0IHRoZSBlbmNvZGluZyBhbmQga2VlcCB0aGUgc2hlZXQgdGV4dCBhcm91bmQgZHVy
aW5nIGNoZWNrTm90aWZ5KCkKICAgICBpZiAobV9kYXRhKSB7Ci0gICAgICAgIG1fZGVjb2RlZFNo
ZWV0VGV4dCA9IG1fZGVjb2Rlci0+ZGVjb2RlKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPnNpemUo
KSk7CisgICAgICAgIG1fZGVjb2RlZFNoZWV0VGV4dCA9IG1fZGVjb2Rlci0+ZGVjb2RlKCptX2Rh
dGEpOwogICAgICAgICBtX2RlY29kZWRTaGVldFRleHQgKz0gbV9kZWNvZGVyLT5mbHVzaCgpOwog
ICAgIH0KICAgICBtX2xvYWRpbmcgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVy
L0NhY2hlZFNjcmlwdC5jcHAgYi9XZWJDb3JlL2xvYWRlci9DYWNoZWRTY3JpcHQuY3BwCmluZGV4
IDMxNDgzZDYuLmE1YTI4OWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL0NhY2hlZFNjcmlw
dC5jcHAKKysrIGIvV2ViQ29yZS9sb2FkZXIvQ2FjaGVkU2NyaXB0LmNwcApAQCAtNzUsNyArNzUs
NyBAQCBjb25zdCBTdHJpbmcmIENhY2hlZFNjcmlwdDo6c2NyaXB0KCkKICAgICBBU1NFUlQoIWlz
UHVyZ2VhYmxlKCkpOwogCiAgICAgaWYgKCFtX3NjcmlwdCAmJiBtX2RhdGEpIHsKLSAgICAgICAg
bV9zY3JpcHQgPSBtX2RlY29kZXItPmRlY29kZShtX2RhdGEtPmRhdGEoKSwgZW5jb2RlZFNpemUo
KSk7CisgICAgICAgIG1fc2NyaXB0ID0gbV9kZWNvZGVyLT5kZWNvZGUoKm1fZGF0YSk7CiAgICAg
ICAgIG1fc2NyaXB0ICs9IG1fZGVjb2Rlci0+Zmx1c2goKTsKICAgICAgICAgc2V0RGVjb2RlZFNp
emUobV9zY3JpcHQubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpKTsKICAgICB9CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2xvYWRlci9DYWNoZWRYU0xTdHlsZVNoZWV0LmNwcCBiL1dlYkNvcmUvbG9hZGVy
L0NhY2hlZFhTTFN0eWxlU2hlZXQuY3BwCmluZGV4IDVkYTBhYmYuLmJhMzQ5YzQgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvbG9hZGVyL0NhY2hlZFhTTFN0eWxlU2hlZXQuY3BwCisrKyBiL1dlYkNvcmUv
bG9hZGVyL0NhY2hlZFhTTFN0eWxlU2hlZXQuY3BwCkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgQ2Fj
aGVkWFNMU3R5bGVTaGVldDo6ZGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgYm9v
bCBhbGxEYXRhUmVjZWl2CiAgICAgbV9kYXRhID0gZGF0YTsgICAgIAogICAgIHNldEVuY29kZWRT
aXplKG1fZGF0YS5nZXQoKSA/IG1fZGF0YS0+c2l6ZSgpIDogMCk7CiAgICAgaWYgKG1fZGF0YS5n
ZXQoKSkgewotICAgICAgICBtX3NoZWV0ID0gU3RyaW5nKG1fZGVjb2Rlci0+ZGVjb2RlKG1fZGF0
YS0+ZGF0YSgpLCBlbmNvZGVkU2l6ZSgpKSk7CisgICAgICAgIG1fc2hlZXQgPSBtX2RlY29kZXIt
PmRlY29kZSgqbV9kYXRhKTsKICAgICAgICAgbV9zaGVldCArPSBtX2RlY29kZXItPmZsdXNoKCk7
CiAgICAgfQogICAgIG1fbG9hZGluZyA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2Fk
ZXIvVGV4dFJlc291cmNlRGVjb2Rlci5jcHAgYi9XZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VE
ZWNvZGVyLmNwcAppbmRleCA2ZGRkNjA0Li41NTcwYzc0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2xv
YWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9UZXh0UmVz
b3VyY2VEZWNvZGVyLmNwcApAQCAtMiw2ICsyLDcgQEAKICAgICBDb3B5cmlnaHQgKEMpIDE5OTkg
TGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKICAgICBDb3B5cmlnaHQgKEMpIDIwMDMs
IDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICAgIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNyBBbGV4ZXkgUHJv
c2t1cnlha292IChhcEBueXBvcC5jb20pCisgICAgQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBN
b3Rpb24gTGltaXRlZCAyMDA5LTIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAgICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTI1LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgIkRPTUltcGxlbWVudGF0aW9u
LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAj
aW5jbHVkZSAiVGV4dENvZGVjLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCiAjaW5jbHVk
ZSAiVGV4dEVuY29kaW5nRGV0ZWN0b3IuaCIKQEAgLTgyOCw2ICs4MzAsMTggQEAgU3RyaW5nIFRl
eHRSZXNvdXJjZURlY29kZXI6OmRlY29kZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuKQog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK1N0cmluZyBUZXh0UmVzb3VyY2VEZWNvZGVyOjpkZWNv
ZGUoY29uc3QgU2hhcmVkQnVmZmVyJiBkYXRhKQoreworICAgIFN0cmluZyByZXN1bHQ7CisgICAg
Y29uc3QgY2hhciogc2VnbWVudDsKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSAwOworICAgIHdoaWxl
ICh1bnNpZ25lZCBsZW5ndGggPSBkYXRhLmdldFNvbWVEYXRhKHNlZ21lbnQsIG9mZnNldCkpIHsK
KyAgICAgICAgcmVzdWx0ICs9IGRlY29kZShzZWdtZW50LCBsZW5ndGgpOworICAgICAgICBvZmZz
ZXQgKz0gbGVuZ3RoOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBTdHJpbmcgVGV4
dFJlc291cmNlRGVjb2Rlcjo6Zmx1c2goKQogewogICAgLy8gSWYgd2UgY2FuIG5vdCBpZGVudGlm
eSB0aGUgZW5jb2RpbmcgZXZlbiBhZnRlciBhIGRvY3VtZW50IGlzIGNvbXBsZXRlbHkKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuaCBiL1dlYkNvcmUvbG9h
ZGVyL1RleHRSZXNvdXJjZURlY29kZXIuaAppbmRleCBmYjc1NWM5Li4wYTI0MWM5IDEwMDY0NAot
LS0gYS9XZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmgKKysrIGIvV2ViQ29yZS9s
b2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5oCkBAIC0yNyw2ICsyNyw4IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorY2xhc3MgU2hhcmVkQnVmZmVyOworCiBjbGFzcyBUZXh0UmVzb3VyY2VE
ZWNvZGVyIDogcHVibGljIFJlZkNvdW50ZWQ8VGV4dFJlc291cmNlRGVjb2Rlcj4gewogcHVibGlj
OgogICAgIGVudW0gRW5jb2RpbmdTb3VyY2UgewpAQCAtNTAsNiArNTIsNyBAQCBwdWJsaWM6CiAg
ICAgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZW5jb2Rp
bmc7IH0KIAogICAgIFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0
aCk7CisgICAgU3RyaW5nIGRlY29kZShjb25zdCBTaGFyZWRCdWZmZXImIGRhdGEpOwogICAgIFN0
cmluZyBmbHVzaCgpOwogCiAgICAgdm9pZCBzZXRIaW50RW5jb2RpbmcoY29uc3QgVGV4dFJlc291
cmNlRGVjb2RlciogaGludERlY29kZXIpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvUGFnZS5j
cHAgYi9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKaW5kZXggMWEwMzVhNS4uNGJjODNiNSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApA
QCAtNjA4LDcgKzYwOCw3IEBAIGNvbnN0IFN0cmluZyYgUGFnZTo6dXNlclN0eWxlU2hlZXQoKSBj
b25zdAogICAgICAgICByZXR1cm4gbV91c2VyU3R5bGVTaGVldDsKIAogICAgIFJlZlB0cjxUZXh0
UmVzb3VyY2VEZWNvZGVyPiBkZWNvZGVyID0gVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJ0
ZXh0L2NzcyIpOwotICAgIG1fdXNlclN0eWxlU2hlZXQgPSBkZWNvZGVyLT5kZWNvZGUoZGF0YS0+
ZGF0YSgpLCBkYXRhLT5zaXplKCkpOworICAgIG1fdXNlclN0eWxlU2hlZXQgPSBkZWNvZGVyLT5k
ZWNvZGUoKmRhdGEpOwogICAgIG1fdXNlclN0eWxlU2hlZXQgKz0gZGVjb2Rlci0+Zmx1c2goKTsK
IAogICAgIHJldHVybiBtX3VzZXJTdHlsZVNoZWV0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45966</attachid>
            <date>2010-01-06 09:45:18 -0800</date>
            <delta_ts>2010-01-06 12:01:43 -0800</delta_ts>
            <desc>Let ResourceLoader delivery segmented data</desc>
            <filename>33222-resourceloader.patch</filename>
            <type>text/plain</type>
            <size>4375</size>
            <attacher name="Yong Li">yong.li.webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YzJkMjAzYy4uYjA1NjM5MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxMC0wMS0wNiAgWW9uZyBMaSAgPHlv
bGlAcmltLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBMZXQgUmVvdXJjZUxvYWRlciByZWFkIHNlZ21lbnRlZCBkYXRhCisgICAgICAgIHdoZW4g
bG9hZGluZyByZXNvdXJjZSBmcm9tIGEgU2hhcmVkQnVmZmVyIG9iamVjdC4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMzMjIyCisKKyAgICAgICAgKiBs
b2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2Fk
ZXI6OnN1YnN0aXR1dGVSZXNvdXJjZURlbGl2ZXJ5VGltZXJGaXJlZCk6CisgICAgICAgICogbG9h
ZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNYWluUmVzb3Vy
Y2VMb2FkZXI6OmNvbnRpbnVlQWZ0ZXJDb250ZW50UG9saWN5KToKKyAgICAgICAgKiBsb2FkZXIv
UmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6OmRp
ZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkZXIuaDoKKwogMjAx
MC0wMS0wNSAgWW9uZyBMaSAgPHlvbGlAcmltLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVy
LmNwcCBiL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAppbmRleCAxNTA3ZmU5Li5l
YmVjZGYwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKKysr
IGIvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCkBAIC01OTYsMTAgKzU5Niw4IEBA
IHZvaWQgRG9jdW1lbnRMb2FkZXI6OnN1YnN0aXR1dGVSZXNvdXJjZURlbGl2ZXJ5VGltZXJGaXJl
ZChUaW1lcjxEb2N1bWVudExvYWRlcj4qCiAgICAgICAgIFN1YnN0aXR1dGVSZXNvdXJjZSogcmVz
b3VyY2UgPSBpdC0+c2Vjb25kLmdldCgpOwogICAgICAgICAKICAgICAgICAgaWYgKHJlc291cmNl
KSB7Ci0gICAgICAgICAgICBTaGFyZWRCdWZmZXIqIGRhdGEgPSByZXNvdXJjZS0+ZGF0YSgpOwot
ICAgICAgICAKICAgICAgICAgICAgIGxvYWRlci0+ZGlkUmVjZWl2ZVJlc3BvbnNlKHJlc291cmNl
LT5yZXNwb25zZSgpKTsKLSAgICAgICAgICAgIGxvYWRlci0+ZGlkUmVjZWl2ZURhdGEoZGF0YS0+
ZGF0YSgpLCBkYXRhLT5zaXplKCksIGRhdGEtPnNpemUoKSwgdHJ1ZSk7CisgICAgICAgICAgICBs
b2FkZXItPmRpZFJlY2VpdmVEYXRhKCpyZXNvdXJjZS0+ZGF0YSgpKTsKICAgICAgICAgICAgIGxv
YWRlci0+ZGlkRmluaXNoTG9hZGluZygpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
Ly8gQSBudWxsIHJlc291cmNlIG1lYW5zIHRoYXQgd2Ugc2hvdWxkIGZhaWwgdGhlIGxvYWQuCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwIGIvV2ViQ29y
ZS9sb2FkZXIvTWFpblJlc291cmNlTG9hZGVyLmNwcAppbmRleCAzZTc1ODgwLi4zOGY5NGJjIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwCisrKyBiL1dl
YkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAKQEAgLTI2MCw3ICsyNjAsNyBAQCB2
b2lkIE1haW5SZXNvdXJjZUxvYWRlcjo6Y29udGludWVBZnRlckNvbnRlbnRQb2xpY3koUG9saWN5
QWN0aW9uIGNvbnRlbnRQb2xpY3ksCiAgICAgaWYgKGZyYW1lTG9hZGVyKCkgJiYgIWZyYW1lTG9h
ZGVyKCktPmlzU3RvcHBpbmcoKSkgewogICAgICAgICBpZiAobV9zdWJzdGl0dXRlRGF0YS5pc1Zh
bGlkKCkpIHsKICAgICAgICAgICAgIGlmIChtX3N1YnN0aXR1dGVEYXRhLmNvbnRlbnQoKS0+c2l6
ZSgpKQotICAgICAgICAgICAgICAgIGRpZFJlY2VpdmVEYXRhKG1fc3Vic3RpdHV0ZURhdGEuY29u
dGVudCgpLT5kYXRhKCksIG1fc3Vic3RpdHV0ZURhdGEuY29udGVudCgpLT5zaXplKCksIG1fc3Vi
c3RpdHV0ZURhdGEuY29udGVudCgpLT5zaXplKCksIHRydWUpOworICAgICAgICAgICAgICAgIFJl
c291cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YSgqbV9zdWJzdGl0dXRlRGF0YS5jb250ZW50KCkp
OwogICAgICAgICAgICAgaWYgKGZyYW1lTG9hZGVyKCkgJiYgIWZyYW1lTG9hZGVyKCktPmlzU3Rv
cHBpbmcoKSkgCiAgICAgICAgICAgICAgICAgZGlkRmluaXNoTG9hZGluZygpOwogICAgICAgICB9
IGVsc2UgaWYgKHNob3VsZExvYWRBc0VtcHR5RG9jdW1lbnQodXJsKSB8fCBmcmFtZUxvYWRlcigp
LT5yZXByZXNlbnRhdGlvbkV4aXN0c0ZvclVSTFNjaGVtZSh1cmwucHJvdG9jb2woKSkpCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAgYi9XZWJDb3JlL2xvYWRl
ci9SZXNvdXJjZUxvYWRlci5jcHAKaW5kZXggOTI0NGNmMC4uODNlZjVlOSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwCisrKyBiL1dlYkNvcmUvbG9hZGVyL1Jl
c291cmNlTG9hZGVyLmNwcApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogICAgICAgICAgIChD
KSAyMDA3IEdyYWhhbSBEZW5uaXMgKGdyYWhhbS5kZW5uaXNAZ21haWwuY29tKQorICogQ29weXJp
Z2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDA5LTIwMTAuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1Myw2ICsyNTQs
MTYgQEAgdm9pZCBSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0
YSwgaW50IGxlbmd0aCwgbG9uZyBsb25nIGxlbmcKICAgICAgICAgZnJhbWVMb2FkZXIoKS0+bm90
aWZpZXIoKS0+ZGlkUmVjZWl2ZURhdGEodGhpcywgZGF0YSwgbGVuZ3RoLCBzdGF0aWNfY2FzdDxp
bnQ+KGxlbmd0aFJlY2VpdmVkKSk7CiB9CiAKK3ZvaWQgUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2Vp
dmVEYXRhKGNvbnN0IFNoYXJlZEJ1ZmZlciYgZGF0YSkKK3sKKyAgICBjb25zdCBjaGFyKiBzZWdt
ZW50OworICAgIHVuc2lnbmVkIG9mZnNldCA9IDA7CisgICAgd2hpbGUgKHVuc2lnbmVkIGxlbmd0
aCA9IGRhdGEuZ2V0U29tZURhdGEoc2VnbWVudCwgb2Zmc2V0KSkgeworICAgICAgICBvZmZzZXQg
Kz0gbGVuZ3RoOworICAgICAgICBkaWRSZWNlaXZlRGF0YShzZWdtZW50LCBzdGF0aWNfY2FzdDxp
bnQ+KGxlbmd0aCksIG9mZnNldCwgZmFsc2UpOworICAgIH0KK30KKwogdm9pZCBSZXNvdXJjZUxv
YWRlcjo6d2lsbFN0b3BCdWZmZXJpbmdEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgp
CiB7CiAgICAgaWYgKCFtX3Nob3VsZEJ1ZmZlckRhdGEpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2xv
YWRlci9SZXNvdXJjZUxvYWRlci5oIGIvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuaApp
bmRleCA1MjM5Mjg5Li5lZGNiODFjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9SZXNvdXJj
ZUxvYWRlci5oCisrKyBiL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmgKQEAgLTc5LDYg
Kzc5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkU2Vu
ZERhdGEodW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRv
dGFsQnl0ZXNUb0JlU2VudCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9u
c2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
ZWl2ZURhdGEoY29uc3QgY2hhciosIGludCwgbG9uZyBsb25nIGxlbmd0aFJlY2VpdmVkLCBib29s
IGFsbEF0T25jZSk7CisgICAgICAgIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgU2hhcmVkQnVm
ZmVyJik7CiAgICAgICAgIHZvaWQgd2lsbFN0b3BCdWZmZXJpbmdEYXRhKGNvbnN0IGNoYXIqLCBp
bnQpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZygpOwogICAgICAgICB2
aXJ0dWFsIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJik7Cg==
</data>
<flag name="review"
          id="28152"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>