<?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>49072</bug_id>
          
          <creation_ts>2010-11-05 09:51:38 -0700</creation_ts>
          <short_desc>Loader cleanup : Simplify FrameLoader/DocumentLoader setupForReplace()</short_desc>
          <delta_ts>2012-10-08 10:08:38 -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>PC</rep_platform>
          <op_sys>OS X 10.5</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nate Chapin">japhet</reporter>
          <assigned_to name="Nate Chapin">japhet</assigned_to>
          <cc>abarth</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>305320</commentid>
    <comment_count>0</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-11-05 09:51:38 -0700</bug_when>
    <thetext>Cut down on the back-and-forth function calls between FrameLoader and DocumentLoader when configuring them for multipart content. Move a few lines from DocumentLoader to FrameLoader (the ones that were calling stuff on FrameLoader anyway).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305323</commentid>
    <comment_count>1</comment_count>
      <attachid>73074</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-11-05 09:54:05 -0700</bug_when>
    <thetext>Created attachment 73074
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305352</commentid>
    <comment_count>2</comment_count>
      <attachid>73074</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-11-05 10:29:12 -0700</bug_when>
    <thetext>Comment on attachment 73074
patch

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

&gt; WebCore/loader/FrameLoader.cpp:1224
&gt; +    writer()-&gt;end();

writer() should eventually move to DocumentLoader (because it&apos;s scoped to a document rather than to a frame).  I&apos;m not sure how that impacts your thinking about this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305356</commentid>
    <comment_count>3</comment_count>
      <attachid>73080</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-11-05 10:40:49 -0700</bug_when>
    <thetext>Created attachment 73080
Move DocumentWriter call back to DocumentLoader</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305359</commentid>
    <comment_count>4</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-11-05 10:41:22 -0700</bug_when>
    <thetext>
(In reply to comment #2)
&gt; (From update of attachment 73074 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=73074&amp;action=review
&gt; 
&gt; &gt; WebCore/loader/FrameLoader.cpp:1224
&gt; &gt; +    writer()-&gt;end();
&gt; 
&gt; writer() should eventually move to DocumentLoader (because it&apos;s scoped to a document rather than to a frame).  I&apos;m not sure how that impacts your thinking about this patch.

It changes one line :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305367</commentid>
    <comment_count>5</comment_count>
      <attachid>73080</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-11-05 10:47:07 -0700</bug_when>
    <thetext>Comment on attachment 73080
Move DocumentWriter call back to DocumentLoader

Wow, the old code is so confusing I&apos;m having trouble tracking it even in this patch.  In any case, the minus lines seem to have it.  Thanks.  (Can I convince you to move DocumentWriter to DocumentLoader next?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305376</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-11-05 10:53:39 -0700</bug_when>
    <thetext>I like the idea of this patch, and looked it over earlier today. But I wanted to verify this does not change behavior, which requires understanding thinks like the fact that m_response on the active document loader will always be the same as the response in the local variable named r in MainResourceLoader::didReceiveResponse.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305386</commentid>
    <comment_count>7</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-11-05 11:01:28 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; I like the idea of this patch, and looked it over earlier today. But I wanted to verify this does not change behavior, which requires understanding thinks like the fact that m_response on the active document loader will always be the same as the response in the local variable named r in MainResourceLoader::didReceiveResponse.

The only behavior that I know that I changed is that this patch causes us to always revert the DocumentLoader back to provisional state.  Previously, we were not doing so if the old content was loaded progressive and the new content wasn&apos;t.  So I believe the only thing that&apos;s changing is whether the active document loader is the provisional or committed loader.

I can hold of on cq if you&apos;d like me to look into this more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305396</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-11-05 11:14:35 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; The only behavior that I know that I changed is that this patch causes us to always revert the DocumentLoader back to provisional state.

What effect does that have?

&gt;Previously, we were not doing so if the old content was loaded progressive and the new content wasn&apos;t.  So I believe the only thing that&apos;s changing is whether the active document loader is the provisional or committed loader.

I don’t understand that sentence well enough. The provisional state is used before we commit. It would be a problem if we got stuck in the provisional state.

&gt; I can hold of on cq if you&apos;d like me to look into this more.

I don’t have any specific requests, but I do want to understand how you proved to yourself this was safe, and make sure you did some testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305407</commentid>
    <comment_count>9</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-11-05 11:27:22 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; The only behavior that I know that I changed is that this patch causes us to always revert the DocumentLoader back to provisional state.
&gt; 
&gt; What effect does that have?
&gt; 
&gt; &gt;Previously, we were not doing so if the old content was loaded progressive and the new content wasn&apos;t.  So I believe the only thing that&apos;s changing is whether the active document loader is the provisional or committed loader.
&gt; 
&gt; I don’t understand that sentence well enough. The provisional state is used before we commit. It would be a problem if we got stuck in the provisional state.
&gt; 
&gt; &gt; I can hold of on cq if you&apos;d like me to look into this more.
&gt; 
&gt; I don’t have any specific requests, but I do want to understand how you proved to yourself this was safe, and make sure you did some testing.

I went ahead and cleared cq for now.  I confirmed all the layout tests still pass, but I didn&apos;t do much testing beyond that (suggestions welcome).

I&apos;ll post some more detail about what I think I&apos;m changing a little later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305505</commentid>
    <comment_count>10</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-11-05 14:02:09 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; The only behavior that I know that I changed is that this patch causes us to always revert the DocumentLoader back to provisional state.
&gt; 
&gt; What effect does that have?
&gt; 
&gt; &gt;Previously, we were not doing so if the old content was loaded progressive and the new content wasn&apos;t.  So I believe the only thing that&apos;s changing is whether the active document loader is the provisional or committed loader.
&gt; 
&gt; I don’t understand that sentence well enough. The provisional state is used before we commit. It would be a problem if we got stuck in the provisional state.

I don&apos;t think we should ever get stuck in the provisional state, because we will commit in DocumentLoader::finishedLoading() if we haven&apos;t already (this is called indirectly from MainResourceLoader::didFinishLoading()).

It appears what&apos;s happening in the original code is that multipart content is handled in a special way from other main resources.  Normally, we just commit the load as soon as we receive the first byte.  The  multipart content logic, on the other hand, is sufficiently complex that I had to write myself some pseudocode to make sense of it:

if (this is the first part)
    load normally
else if (the mime type is text/html)
    revert to provisional and load normally
else {
    leave committed;

    if (this is the last part)
        ??? I can&apos;t find where we commit the data.
    else {
        wait until we receive a response for the
        next part, then revert to provisional and
        immediately commit all of this part&apos;s data
    }   
}

Hopefully this is easier to follow than my last explanation.

I can&apos;t immediately see a reason for this for this discrepancy between handling regular and multipart content, but I&apos;m probably missing something.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305511</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-11-05 14:06:45 -0700</bug_when>
    <thetext>Did you test multi-part content?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305540</commentid>
    <comment_count>12</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-11-05 14:48:53 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Did you test multi-part content?

Only in layout test form.  I will happily accept suggestions for good multipart content to test manually :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305605</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-11-05 16:03:59 -0700</bug_when>
    <thetext>To find examples, you need to search for multipart/x-mixed-replace on the web. I’m looking now for test cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321813</commentid>
    <comment_count>14</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-14 01:46:07 -0800</bug_when>
    <thetext>Curious what the status is here, nate?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322302</commentid>
    <comment_count>15</comment_count>
      <attachid>76585</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-12-14 15:43:12 -0800</bug_when>
    <thetext>Created attachment 76585
Swap calls to writer()-&gt;end() and setupForReplace() in DocumentLoader

Eric pointed me at some good resources for testing this content at http://www.opentopia.com/hiddencam.php, which revealed a consistent crash.

writer()-&gt;end() needs to be before the call to setupForReplace(), because setupForReplace() reverts the FrameLoader to provisional state, and writer()-&gt;end() is assuming that the FrameLoader is committed.

Note that to trigger this codepath, you need to open one of the webcam feeds in its own tab (i.e., as a main resource).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322313</commentid>
    <comment_count>16</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-14 15:56:00 -0800</bug_when>
    <thetext>That link isn&apos;t nearly as shady as it sounds. :)  It just happened to be one of the top hits when searching for public webcam. :)  IIRC networkable webcams commonly use multi-part mixed replace.  Clearly we need more testing coverage here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322314</commentid>
    <comment_count>17</comment_count>
      <attachid>76585</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-14 15:56:31 -0800</bug_when>
    <thetext>Comment on attachment 76585
Swap calls to writer()-&gt;end() and setupForReplace() in DocumentLoader

If you found a crash, we need to test that crash.  The tests are more important than code changes in most case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324044</commentid>
    <comment_count>18</comment_count>
      <attachid>73080</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-17 16:39:53 -0800</bug_when>
    <thetext>Comment on attachment 73080
Move DocumentWriter call back to DocumentLoader

Cleared Adam Barth&apos;s review+ from obsolete attachment 73080 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720941</commentid>
    <comment_count>19</comment_count>
      <attachid>164191</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2012-09-14 10:52:08 -0700</bug_when>
    <thetext>Created attachment 164191
patch + test

This patch is in the same theme of the one I wrote 2 years ago, but the low hanging fruit in the referenced functions has changed almost completely since then.

See WebCore/ChangeLog for a full list of the changes, but note that this does modify behavior in the case of text/html multipart pieces.  Our behavior in that case appears to date back to WebKit&apos;s initial multipart/x-mixed-replace support in trac.webkit.org/changeset/10489, but I can&apos;t find a rationale for it.  The behavior of this patch seems better to me (i.e., the document isn&apos;t blank).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>732965</commentid>
    <comment_count>20</comment_count>
      <attachid>164191</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-02 12:45:36 -0700</bug_when>
    <thetext>Comment on attachment 164191
patch + test

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

OK.  I&apos;ve highlighted all the code changes below.  The rest looks like just shuffling lines but no functional change.  If you could explain those in greater detail (again?) that will make this easier to review.  Thanks.

&gt; Source/WebCore/loader/DocumentLoader.cpp:335
&gt; -        if (!m_mainResourceLoader || !m_mainResourceLoader-&gt;isLoadingMultipartContent() || !frameLoader()-&gt;isReplacing())
&gt; +        // for multipart loads, and FrameLoader::isReplacing() will be true after the first time.
&gt; +        if (!isMultipartReplacingLoad())

Why is removing !m_mainResourceLoader OK here?  Was it a no-op?

&gt; Source/WebCore/loader/DocumentLoader.cpp:381
&gt; -    if (doesProgressiveLoad(m_response.mimeType()))
&gt; +    if (!isMultipartReplacingLoad())

Previously this could happen even when loading multipart content, correct?  But now this if doesn&apos;t allow that?

&gt; Source/WebCore/loader/DocumentLoader.cpp:-420
&gt; -    if (doesProgressiveLoad(newMIMEType)) {
&gt; -        frameLoader()-&gt;client()-&gt;revertToProvisionalState(this);
&gt; -        setupForReplace();
&gt; -    }
&gt; -    

Could you explain this removal?  Is this a functional change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>732987</commentid>
    <comment_count>21</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2012-10-02 13:05:04 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 164191 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=164191&amp;action=review
&gt; 
&gt; OK.  I&apos;ve highlighted all the code changes below.  The rest looks like just shuffling lines but no functional change.  If you could explain those in greater detail (again?) that will make this easier to review.  Thanks.
&gt; 
&gt; &gt; Source/WebCore/loader/DocumentLoader.cpp:335
&gt; &gt; -        if (!m_mainResourceLoader || !m_mainResourceLoader-&gt;isLoadingMultipartContent() || !frameLoader()-&gt;isReplacing())
&gt; &gt; +        // for multipart loads, and FrameLoader::isReplacing() will be true after the first time.
&gt; &gt; +        if (!isMultipartReplacingLoad())
&gt; 
&gt; Why is removing !m_mainResourceLoader OK here?  Was it a no-op?

isMultipartReplacingLoad() calls DocumentLoader:isLoadingMultipartContent(), rather than directly calling MainResourceLoader:isLoadingMultipartContent(). The DocumentLoader helper null-checks m_mainResourceLoader.

&gt; 
&gt; &gt; Source/WebCore/loader/DocumentLoader.cpp:381
&gt; &gt; -    if (doesProgressiveLoad(m_response.mimeType()))
&gt; &gt; +    if (!isMultipartReplacingLoad())
&gt; 
&gt; Previously this could happen even when loading multipart content, correct?  But now this if doesn&apos;t allow that?

If I understand this comment correctly...
Per the ChangeLog, this is the known functional change. Previously, multipart loads would only be treated as progressive if they were loading text/html. I removed the text/html special case, which makes doesProgressiveLoad() equivalent to !frameLoader()-&gt;isReplacing().

However, it&apos;s not *quite* that easy. Chromium will, for error pages, occasionally force a non-multipart load to be replacing. In this case, it still wants progressive loading, hence the multipart AND replacing.

The inverse case, multipart and not replacing, also happens for the first part of a multipart resource, as setReplacing() is not called until the second response is received for the multipart load. I&apos;m not sure this case particularly matters whether it&apos;s loaded progressively or not, but I can look more into it.


&gt; 
&gt; &gt; Source/WebCore/loader/DocumentLoader.cpp:-420
&gt; &gt; -    if (doesProgressiveLoad(newMIMEType)) {
&gt; &gt; -        frameLoader()-&gt;client()-&gt;revertToProvisionalState(this);
&gt; &gt; -        setupForReplace();
&gt; &gt; -    }
&gt; &gt; -    
&gt; 
&gt; Could you explain this removal?  Is this a functional change?

Remember that, because text/html is no long special-cased as progressive,  doesProgressiveLoad() is synonymous with !isReplacing(). We just called setReplacing() 2 lines above this point and !isReplacing() is therefore guaranteed to be false here, so this if statement should never be called.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>732989</commentid>
    <comment_count>22</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2012-10-02 13:08:23 -0700</bug_when>
    <thetext>In case it&apos;s helpful, here&apos;s a summary of what each browser does in the case of multipart/x-mixed-replace resources with text/html part:

IE9: Appends each text/html part to the document, no formatting or parsing at all, no replacing happens.
Opera: Doesn&apos;t navigate to the multipart resource, remains on previous page.
FF: Replaces, displays content as text/html properly.
WebKit: Navigates to multipart resource, but shows a blank page.

WebKit&apos;s behavior matches FF after this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>732990</commentid>
    <comment_count>23</comment_count>
      <attachid>164191</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-02 13:08:32 -0700</bug_when>
    <thetext>Comment on attachment 164191
patch + test

Thank you.  This LGTM.  You may wish to wait 24 hrs for other reviewers to offer their thoughts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733217</commentid>
    <comment_count>24</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-10-02 16:42:05 -0700</bug_when>
    <thetext>How did you test these changes? Did you test them in Chromium only, or on other platforms too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733220</commentid>
    <comment_count>25</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2012-10-02 16:45:58 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; How did you test these changes? Did you test them in Chromium only, or on other platforms too?

I&apos;m pretty sure I tested it on safari mac as well, but that was a couple weeks ago. I&apos;ll double check tomorrow before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735956</commentid>
    <comment_count>26</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2012-10-05 14:27:46 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; (In reply to comment #24)
&gt; &gt; How did you test these changes? Did you test them in Chromium only, or on other platforms too?
&gt; 
&gt; I&apos;m pretty sure I tested it on safari mac as well, but that was a couple weeks ago. I&apos;ll double check tomorrow before landing.

I verified that all multipart layout tests still pass, and the new test looks right to me in a full safari debug build.

I intended to manually verify that multipart images still work correctly, but unlike 2 years ago, I&apos;ve had considerable difficulty finding a public webcam that exposes its data as multipart/x-mixed-replace. All the streams I found either used flash or static jpgs + refresh.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735977</commentid>
    <comment_count>27</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-05 14:42:31 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; Created an attachment (id=76585) [details]
&gt; Swap calls to writer()-&gt;end() and setupForReplace() in DocumentLoader
&gt; 
&gt; Eric pointed me at some good resources for testing this content at http://www.opentopia.com/hiddencam.php, which revealed a consistent crash.

I think these still work. The first cam I clicked on looked like it might be multipart/mixed?  I&apos;m not sure how to tell:

http://89.200.82.159:8001/axis-cgi/mjpg/video.cgi?resolution=640x480&amp;clock=0&amp;date=0</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736017</commentid>
    <comment_count>28</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2012-10-05 15:09:46 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; (In reply to comment #15)
&gt; &gt; Created an attachment (id=76585) [details] [details]
&gt; &gt; Swap calls to writer()-&gt;end() and setupForReplace() in DocumentLoader
&gt; &gt; 
&gt; &gt; Eric pointed me at some good resources for testing this content at http://www.opentopia.com/hiddencam.php, which revealed a consistent crash.
&gt; 
&gt; I think these still work. The first cam I clicked on looked like it might be multipart/mixed?  I&apos;m not sure how to tell:
&gt; 
&gt; http://89.200.82.159:8001/axis-cgi/mjpg/video.cgi?resolution=640x480&amp;clock=0&amp;date=0

Awesome, that is multipart/x-mixed-replace according to chromium&apos;s net-internals. Both chromium mac and safari mac handle it correctly before and after my patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736754</commentid>
    <comment_count>29</comment_count>
      <attachid>164191</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-08 10:08:34 -0700</bug_when>
    <thetext>Comment on attachment 164191
patch + test

Clearing flags on attachment: 164191

Committed r130651: &lt;http://trac.webkit.org/changeset/130651&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736755</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-08 10:08:38 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73074</attachid>
            <date>2010-11-05 09:54:05 -0700</date>
            <delta_ts>2010-11-05 10:40:49 -0700</delta_ts>
            <desc>patch</desc>
            <filename>sfr.txt</filename>
            <type>text/plain</type>
            <size>6187</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTQyMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMTAtMTEtMDUgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBT
aW1wbGlmeSBzZXR0aW5nIHVwIEZyYW1lTG9hZGVyL0RvY3VtZW50TG9hZGVyCisgICAgICAgIGZv
ciBtdWx0aXBhcnQgY29udGVudC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQ5MDcyCisKKyAgICAgICAgUmVmYWN0b3IsIG5vIG5ldyB0ZXN0cy4KKwor
ICAgICAgICAqIGxvYWRlci9Eb2N1bWVudExvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudExvYWRlcjo6c2V0dXBGb3JSZXBsYWNlKTogQ29sbGFwc2Ugc2V0dXBGb3JSZXBsYWNl
KCkKKyAgICAgICAgICAgICBhbmQgc2V0dXBGb3JSZXBsYWNlQnlNaW1lVHlwZSgpIGludG8gb25l
IGZ1bmN0aW9uIGFuZCBlbnN1cmUKKyAgICAgICAgICAgICB3ZSBhbHdheXMgcmVzZXQgRnJhbWVM
b2FkZXIgdG8gcHJvdmlzaW9uYWwgc3RhdGUuCisgICAgICAgICogbG9hZGVyL0RvY3VtZW50TG9h
ZGVyLmg6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lTG9hZGVyOjpzZXR1cEZvclJlcGxhY2UpOiBEbyBhbGwgdGhlIEZyYW1lTG9hZGVy
CisgICAgICAgICAgICBzZXR1cCBoZXJlLCBpbnN0ZWFkIG9mIHJlcXVpcmluZyBtdWx0aXBsZSBm
dW5jdGlvbiBjYWxscworICAgICAgICAgICAgaW4gRG9jdW1lbnRMb2FkZXIuCisgICAgICAgICog
bG9hZGVyL0ZyYW1lTG9hZGVyLmg6CisgICAgICAgICogbG9hZGVyL01haW5SZXNvdXJjZUxvYWRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNYWluUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVS
ZXNwb25zZSk6CisKIDIwMTAtMTEtMDUgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgpJbmRleDogV2Vi
Q29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVy
L0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gNzE0MjMpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFt
ZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMTksMTcgKzEyMTksMTcgQEAKIAogdm9p
ZCBGcmFtZUxvYWRlcjo6c2V0dXBGb3JSZXBsYWNlKCkKIHsKKyAgICBBU1NFUlQobV9zdGF0ZSA9
PSBGcmFtZVN0YXRlQ29tbWl0dGVkUGFnZSk7CisgICAgZmluaXNoZWRMb2FkaW5nRG9jdW1lbnQo
ZG9jdW1lbnRMb2FkZXIoKSk7CisgICAgd3JpdGVyKCktPmVuZCgpOworICAgIHNldFJlcGxhY2lu
ZygpOworICAgIG1fY2xpZW50LT5yZXZlcnRUb1Byb3Zpc2lvbmFsU3RhdGUoZG9jdW1lbnRMb2Fk
ZXIoKSk7CiAgICAgc2V0U3RhdGUoRnJhbWVTdGF0ZVByb3Zpc2lvbmFsKTsKICAgICBtX3Byb3Zp
c2lvbmFsRG9jdW1lbnRMb2FkZXIgPSBtX2RvY3VtZW50TG9hZGVyOwogICAgIG1fZG9jdW1lbnRM
b2FkZXIgPSAwOwogICAgIGRldGFjaENoaWxkcmVuKCk7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXI6
OnNldHVwRm9yUmVwbGFjZUJ5TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBuZXdNSU1FVHlwZSkKLXsK
LSAgICBhY3RpdmVEb2N1bWVudExvYWRlcigpLT5zZXR1cEZvclJlcGxhY2VCeU1JTUVUeXBlKG5l
d01JTUVUeXBlKTsKLX0KLQogLy8gVGhpcyBpcyBhIGhhY2sgdG8gYWxsb3cga2VlcCBuYXZpZ2F0
aW9uIHRvIGh0dHAvaHR0cHMgZmVlZHMgd29ya2luZy4gVG8gcmVtb3ZlIHRoaXMKIC8vIHdlIG5l
ZWQgdG8gaW50cm9kdWNlIG5ldyBBUEkgYWtpbiB0byByZWdpc3RlclVSTFNjaGVtZUFzTG9jYWws
IHRoYXQgcmVnaXN0ZXJzIGEKIC8vIHByb3RvY29scyBuYXZpZ2F0aW9uIHBvbGljeS4KQEAgLTIy
NjQsMTEgKzIyNjQsNiBAQAogICAgIG1fbG9hZFR5cGUgPSBGcmFtZUxvYWRUeXBlUmVwbGFjZTsK
IH0KIAotdm9pZCBGcmFtZUxvYWRlcjo6cmV2ZXJ0VG9Qcm92aXNpb25hbChEb2N1bWVudExvYWRl
ciogbG9hZGVyKQotewotICAgIG1fY2xpZW50LT5yZXZlcnRUb1Byb3Zpc2lvbmFsU3RhdGUobG9h
ZGVyKTsKLX0KLQogYm9vbCBGcmFtZUxvYWRlcjo6c3ViZnJhbWVJc0xvYWRpbmcoKSBjb25zdAog
ewogICAgIC8vIEl0J3MgbW9zdCBsaWtlbHkgdGhhdCB0aGUgbGFzdCBhZGRlZCBmcmFtZSBpcyB0
aGUgbGFzdCB0byBsb2FkIHNvIHdlIHdhbGsgYmFja3dhcmRzLgpJbmRleDogV2ViQ29yZS9sb2Fk
ZXIvRG9jdW1lbnRMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9Eb2N1bWVu
dExvYWRlci5oCShyZXZpc2lvbiA3MTQyMykKKysrIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9h
ZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAKICAgICAgICAgdm9pZCBzZXRM
b2FkaW5nKGJvb2wgbG9hZGluZykgeyBtX2xvYWRpbmcgPSBsb2FkaW5nOyB9CiAgICAgICAgIHZv
aWQgdXBkYXRlTG9hZGluZygpOwogICAgICAgICB2b2lkIHJlY2VpdmVkRGF0YShjb25zdCBjaGFy
KiwgaW50KTsKLSAgICAgICAgdm9pZCBzZXR1cEZvclJlcGxhY2VCeU1JTUVUeXBlKGNvbnN0IFN0
cmluZyYgbmV3TUlNRVR5cGUpOworICAgICAgICB2b2lkIHNldHVwRm9yUmVwbGFjZSgpOwogICAg
ICAgICB2b2lkIGZpbmlzaGVkTG9hZGluZygpOwogICAgICAgICBjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiByZXNwb25zZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzcG9uc2U7IH0KICAgICAgICAgY29u
c3QgUmVzb3VyY2VFcnJvciYgbWFpbkRvY3VtZW50RXJyb3IoKSBjb25zdCB7IHJldHVybiBtX21h
aW5Eb2N1bWVudEVycm9yOyB9CkBAIC0yMjgsNyArMjI4LDYgQEAKICAgICAgICAgYm9vbCBtX2Rl
ZmVyTWFpblJlc291cmNlRGF0YUxvYWQ7CiAKICAgICBwcml2YXRlOgotICAgICAgICB2b2lkIHNl
dHVwRm9yUmVwbGFjZSgpOwogICAgICAgICB2b2lkIGNvbW1pdElmUmVhZHkoKTsKICAgICAgICAg
dm9pZCBjbGVhckVycm9ycygpOwogICAgICAgICB2b2lkIHNldE1haW5Eb2N1bWVudEVycm9yKGNv
bnN0IFJlc291cmNlRXJyb3ImKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxv
YWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvTWFpblJlc291cmNlTG9hZGVy
LmNwcAkocmV2aXNpb24gNzE0MjMpCisrKyBXZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2Fk
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjEsNyArMzYxLDcgQEAKICNlbmRpZgogCiAgICAg
aWYgKG1fbG9hZGluZ011bHRpcGFydENvbnRlbnQpIHsKLSAgICAgICAgZnJhbWVMb2FkZXIoKS0+
c2V0dXBGb3JSZXBsYWNlQnlNSU1FVHlwZShyLm1pbWVUeXBlKCkpOworICAgICAgICBmcmFtZUxv
YWRlcigpLT5hY3RpdmVEb2N1bWVudExvYWRlcigpLT5zZXR1cEZvclJlcGxhY2UoKTsKICAgICAg
ICAgY2xlYXJSZXNvdXJjZURhdGEoKTsKICAgICB9CiAgICAgCkluZGV4OiBXZWJDb3JlL2xvYWRl
ci9Eb2N1bWVudExvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRG9jdW1l
bnRMb2FkZXIuY3BwCShyZXZpc2lvbiA3MTQyMykKKysrIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50
TG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUzLDEyICsyNTMsNiBAQAogICAgIG1faXNT
dG9wcGluZyA9IGZhbHNlOwogfQogCi12b2lkIERvY3VtZW50TG9hZGVyOjpzZXR1cEZvclJlcGxh
Y2UoKQotewotICAgIGZyYW1lTG9hZGVyKCktPnNldHVwRm9yUmVwbGFjZSgpOwotICAgIG1fY29t
bWl0dGVkID0gZmFsc2U7Ci19Ci0KIHZvaWQgRG9jdW1lbnRMb2FkZXI6OmNvbW1pdElmUmVhZHko
KQogewogICAgIGlmIChtX2dvdEZpcnN0Qnl0ZSAmJiAhbV9jb21taXR0ZWQpIHsKQEAgLTMxOSwz
MSArMzEzLDIwIEBACiAgICAgICAgIGNvbW1pdExvYWQoZGF0YSwgbGVuZ3RoKTsKIH0KIAotdm9p
ZCBEb2N1bWVudExvYWRlcjo6c2V0dXBGb3JSZXBsYWNlQnlNSU1FVHlwZShjb25zdCBTdHJpbmcm
IG5ld01JTUVUeXBlKQordm9pZCBEb2N1bWVudExvYWRlcjo6c2V0dXBGb3JSZXBsYWNlKCkKIHsK
ICAgICBpZiAoIW1fZ290Rmlyc3RCeXRlKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgU3Ry
aW5nIG9sZE1JTUVUeXBlID0gbV9yZXNwb25zZS5taW1lVHlwZSgpOwotICAgIAotICAgIGlmICgh
ZG9lc1Byb2dyZXNzaXZlTG9hZChvbGRNSU1FVHlwZSkpIHsKLSAgICAgICAgZnJhbWVMb2FkZXIo
KS0+cmV2ZXJ0VG9Qcm92aXNpb25hbCh0aGlzKTsKLSAgICAgICAgc2V0dXBGb3JSZXBsYWNlKCk7
CisgICAgaWYgKCFkb2VzUHJvZ3Jlc3NpdmVMb2FkKG1fcmVzcG9uc2UubWltZVR5cGUoKSkpIHsK
ICAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gcmVzb3VyY2VEYXRhID0gbWFpblJlc291cmNl
RGF0YSgpOwogICAgICAgICBjb21taXRMb2FkKHJlc291cmNlRGF0YS0+ZGF0YSgpLCByZXNvdXJj
ZURhdGEtPnNpemUoKSk7CiAgICAgfQogICAgIAotICAgIGZyYW1lTG9hZGVyKCktPmZpbmlzaGVk
TG9hZGluZ0RvY3VtZW50KHRoaXMpOwotICAgIG1fZnJhbWUtPmxvYWRlcigpLT53cml0ZXIoKS0+
ZW5kKCk7Ci0gICAgCi0gICAgZnJhbWVMb2FkZXIoKS0+c2V0UmVwbGFjaW5nKCk7CisgICAgbV9m
cmFtZS0+bG9hZGVyKCktPnNldHVwRm9yUmVwbGFjZSgpOwogICAgIG1fZ290Rmlyc3RCeXRlID0g
ZmFsc2U7CisgICAgbV9jb21taXR0ZWQgPSBmYWxzZTsKICAgICAKLSAgICBpZiAoZG9lc1Byb2dy
ZXNzaXZlTG9hZChuZXdNSU1FVHlwZSkpIHsKLSAgICAgICAgZnJhbWVMb2FkZXIoKS0+cmV2ZXJ0
VG9Qcm92aXNpb25hbCh0aGlzKTsKLSAgICAgICAgc2V0dXBGb3JSZXBsYWNlKCk7Ci0gICAgfQot
ICAgIAogICAgIHN0b3BMb2FkaW5nU3VicmVzb3VyY2VzKCk7CiAgICAgc3RvcExvYWRpbmdQbHVn
SW5zKCk7CiAgICAgY2xlYXJBcmNoaXZlUmVzb3VyY2VzKCk7CkluZGV4OiBXZWJDb3JlL2xvYWRl
ci9GcmFtZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
LmgJKHJldmlzaW9uIDcxNDIzKQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMTA3LDcgKzEwNyw2IEBACiAKICAgICB2b2lkIHByZXBhcmVGb3JMb2Fk
U3RhcnQoKTsKICAgICB2b2lkIHNldHVwRm9yUmVwbGFjZSgpOwotICAgIHZvaWQgc2V0dXBGb3JS
ZXBsYWNlQnlNSU1FVHlwZShjb25zdCBTdHJpbmcmIG5ld01JTUVUeXBlKTsKIAogICAgIHZvaWQg
bG9hZFVSTEludG9DaGlsZEZyYW1lKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHJlZmVyZXIs
IEZyYW1lKik7CiAKQEAgLTE4MSw3ICsxODAsNiBAQAogICAgIHZvaWQgZmluaXNoZWRMb2FkaW5n
RG9jdW1lbnQoRG9jdW1lbnRMb2FkZXIqKTsKICAgICBib29sIGlzUmVwbGFjaW5nKCkgY29uc3Q7
CiAgICAgdm9pZCBzZXRSZXBsYWNpbmcoKTsKLSAgICB2b2lkIHJldmVydFRvUHJvdmlzaW9uYWwo
RG9jdW1lbnRMb2FkZXIqKTsKICAgICB2b2lkIHNldE1haW5Eb2N1bWVudEVycm9yKERvY3VtZW50
TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpOwogICAgIHZvaWQgbWFpblJlY2VpdmVkQ29t
cGxldGVFcnJvcihEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKICAgICBi
b29sIHN1YmZyYW1lSXNMb2FkaW5nKCkgY29uc3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73080</attachid>
            <date>2010-11-05 10:40:49 -0700</date>
            <delta_ts>2010-12-17 16:39:53 -0800</delta_ts>
            <desc>Move DocumentWriter call back to DocumentLoader</desc>
            <filename>sfr2.txt</filename>
            <type>text/plain</type>
            <size>6165</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTQyMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMTAtMTEtMDUgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBT
aW1wbGlmeSBzZXR0aW5nIHVwIEZyYW1lTG9hZGVyL0RvY3VtZW50TG9hZGVyCisgICAgICAgIGZv
ciBtdWx0aXBhcnQgY29udGVudC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQ5MDcyCisKKyAgICAgICAgUmVmYWN0b3IsIG5vIG5ldyB0ZXN0cy4KKwor
ICAgICAgICAqIGxvYWRlci9Eb2N1bWVudExvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudExvYWRlcjo6c2V0dXBGb3JSZXBsYWNlKTogQ29sbGFwc2Ugc2V0dXBGb3JSZXBsYWNl
KCkKKyAgICAgICAgICAgICBhbmQgc2V0dXBGb3JSZXBsYWNlQnlNaW1lVHlwZSgpIGludG8gb25l
IGZ1bmN0aW9uIGFuZCBlbnN1cmUKKyAgICAgICAgICAgICB3ZSBhbHdheXMgcmVzZXQgRnJhbWVM
b2FkZXIgdG8gcHJvdmlzaW9uYWwgc3RhdGUuCisgICAgICAgICogbG9hZGVyL0RvY3VtZW50TG9h
ZGVyLmg6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lTG9hZGVyOjpzZXR1cEZvclJlcGxhY2UpOiBEbyBhbGwgdGhlIEZyYW1lTG9hZGVy
CisgICAgICAgICAgICBzZXR1cCBoZXJlLCBpbnN0ZWFkIG9mIHJlcXVpcmluZyBtdWx0aXBsZSBm
dW5jdGlvbiBjYWxscworICAgICAgICAgICAgaW4gRG9jdW1lbnRMb2FkZXIuCisgICAgICAgICog
bG9hZGVyL0ZyYW1lTG9hZGVyLmg6CisgICAgICAgICogbG9hZGVyL01haW5SZXNvdXJjZUxvYWRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNYWluUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVS
ZXNwb25zZSk6CisKIDIwMTAtMTEtMDUgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgpJbmRleDogV2Vi
Q29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVy
L0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gNzE0MjMpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFt
ZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMTksMTcgKzEyMTksMTYgQEAKIAogdm9p
ZCBGcmFtZUxvYWRlcjo6c2V0dXBGb3JSZXBsYWNlKCkKIHsKKyAgICBBU1NFUlQobV9zdGF0ZSA9
PSBGcmFtZVN0YXRlQ29tbWl0dGVkUGFnZSk7CisgICAgZmluaXNoZWRMb2FkaW5nRG9jdW1lbnQo
ZG9jdW1lbnRMb2FkZXIoKSk7CisgICAgc2V0UmVwbGFjaW5nKCk7CisgICAgbV9jbGllbnQtPnJl
dmVydFRvUHJvdmlzaW9uYWxTdGF0ZShkb2N1bWVudExvYWRlcigpKTsKICAgICBzZXRTdGF0ZShG
cmFtZVN0YXRlUHJvdmlzaW9uYWwpOwogICAgIG1fcHJvdmlzaW9uYWxEb2N1bWVudExvYWRlciA9
IG1fZG9jdW1lbnRMb2FkZXI7CiAgICAgbV9kb2N1bWVudExvYWRlciA9IDA7CiAgICAgZGV0YWNo
Q2hpbGRyZW4oKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlcjo6c2V0dXBGb3JSZXBsYWNlQnlNSU1F
VHlwZShjb25zdCBTdHJpbmcmIG5ld01JTUVUeXBlKQotewotICAgIGFjdGl2ZURvY3VtZW50TG9h
ZGVyKCktPnNldHVwRm9yUmVwbGFjZUJ5TUlNRVR5cGUobmV3TUlNRVR5cGUpOwotfQotCiAvLyBU
aGlzIGlzIGEgaGFjayB0byBhbGxvdyBrZWVwIG5hdmlnYXRpb24gdG8gaHR0cC9odHRwcyBmZWVk
cyB3b3JraW5nLiBUbyByZW1vdmUgdGhpcwogLy8gd2UgbmVlZCB0byBpbnRyb2R1Y2UgbmV3IEFQ
SSBha2luIHRvIHJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbCwgdGhhdCByZWdpc3RlcnMgYQogLy8g
cHJvdG9jb2xzIG5hdmlnYXRpb24gcG9saWN5LgpAQCAtMjI2NCwxMSArMjI2Myw2IEBACiAgICAg
bV9sb2FkVHlwZSA9IEZyYW1lTG9hZFR5cGVSZXBsYWNlOwogfQogCi12b2lkIEZyYW1lTG9hZGVy
OjpyZXZlcnRUb1Byb3Zpc2lvbmFsKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCi17Ci0gICAgbV9j
bGllbnQtPnJldmVydFRvUHJvdmlzaW9uYWxTdGF0ZShsb2FkZXIpOwotfQotCiBib29sIEZyYW1l
TG9hZGVyOjpzdWJmcmFtZUlzTG9hZGluZygpIGNvbnN0CiB7CiAgICAgLy8gSXQncyBtb3N0IGxp
a2VseSB0aGF0IHRoZSBsYXN0IGFkZGVkIGZyYW1lIGlzIHRoZSBsYXN0IHRvIGxvYWQgc28gd2Ug
d2FsayBiYWNrd2FyZHMuCkluZGV4OiBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmgJKHJldmlzaW9uIDcx
NDIzKQorKysgV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtOTksNyArOTksNyBAQAogICAgICAgICB2b2lkIHNldExvYWRpbmcoYm9vbCBsb2FkaW5nKSB7
IG1fbG9hZGluZyA9IGxvYWRpbmc7IH0KICAgICAgICAgdm9pZCB1cGRhdGVMb2FkaW5nKCk7CiAg
ICAgICAgIHZvaWQgcmVjZWl2ZWREYXRhKGNvbnN0IGNoYXIqLCBpbnQpOwotICAgICAgICB2b2lk
IHNldHVwRm9yUmVwbGFjZUJ5TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBuZXdNSU1FVHlwZSk7Cisg
ICAgICAgIHZvaWQgc2V0dXBGb3JSZXBsYWNlKCk7CiAgICAgICAgIHZvaWQgZmluaXNoZWRMb2Fk
aW5nKCk7CiAgICAgICAgIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKCkgY29uc3Qg
eyByZXR1cm4gbV9yZXNwb25zZTsgfQogICAgICAgICBjb25zdCBSZXNvdXJjZUVycm9yJiBtYWlu
RG9jdW1lbnRFcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fbWFpbkRvY3VtZW50RXJyb3I7IH0KQEAg
LTIyOCw3ICsyMjgsNiBAQAogICAgICAgICBib29sIG1fZGVmZXJNYWluUmVzb3VyY2VEYXRhTG9h
ZDsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgc2V0dXBGb3JSZXBsYWNlKCk7CiAgICAg
ICAgIHZvaWQgY29tbWl0SWZSZWFkeSgpOwogICAgICAgICB2b2lkIGNsZWFyRXJyb3JzKCk7CiAg
ICAgICAgIHZvaWQgc2V0TWFpbkRvY3VtZW50RXJyb3IoY29uc3QgUmVzb3VyY2VFcnJvciYpOwpJ
bmRleDogV2ViQ29yZS9sb2FkZXIvTWFpblJlc291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiA3MTQyMykK
KysrIFdlYkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM2MSw3ICszNjEsNyBAQAogI2VuZGlmCiAKICAgICBpZiAobV9sb2FkaW5nTXVsdGlwYXJ0
Q29udGVudCkgewotICAgICAgICBmcmFtZUxvYWRlcigpLT5zZXR1cEZvclJlcGxhY2VCeU1JTUVU
eXBlKHIubWltZVR5cGUoKSk7CisgICAgICAgIGZyYW1lTG9hZGVyKCktPmFjdGl2ZURvY3VtZW50
TG9hZGVyKCktPnNldHVwRm9yUmVwbGFjZSgpOwogICAgICAgICBjbGVhclJlc291cmNlRGF0YSgp
OwogICAgIH0KICAgICAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAJKHJldmlzaW9u
IDcxNDIzKQorKysgV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNTMsMTIgKzI1Myw2IEBACiAgICAgbV9pc1N0b3BwaW5nID0gZmFsc2U7CiB9CiAK
LXZvaWQgRG9jdW1lbnRMb2FkZXI6OnNldHVwRm9yUmVwbGFjZSgpCi17Ci0gICAgZnJhbWVMb2Fk
ZXIoKS0+c2V0dXBGb3JSZXBsYWNlKCk7Ci0gICAgbV9jb21taXR0ZWQgPSBmYWxzZTsKLX0KLQog
dm9pZCBEb2N1bWVudExvYWRlcjo6Y29tbWl0SWZSZWFkeSgpCiB7CiAgICAgaWYgKG1fZ290Rmly
c3RCeXRlICYmICFtX2NvbW1pdHRlZCkgewpAQCAtMzE5LDMxICszMTMsMjEgQEAKICAgICAgICAg
Y29tbWl0TG9hZChkYXRhLCBsZW5ndGgpOwogfQogCi12b2lkIERvY3VtZW50TG9hZGVyOjpzZXR1
cEZvclJlcGxhY2VCeU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbmV3TUlNRVR5cGUpCit2b2lkIERv
Y3VtZW50TG9hZGVyOjpzZXR1cEZvclJlcGxhY2UoKQogewogICAgIGlmICghbV9nb3RGaXJzdEJ5
dGUpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBTdHJpbmcgb2xkTUlNRVR5cGUgPSBtX3Jl
c3BvbnNlLm1pbWVUeXBlKCk7Ci0gICAgCi0gICAgaWYgKCFkb2VzUHJvZ3Jlc3NpdmVMb2FkKG9s
ZE1JTUVUeXBlKSkgewotICAgICAgICBmcmFtZUxvYWRlcigpLT5yZXZlcnRUb1Byb3Zpc2lvbmFs
KHRoaXMpOwotICAgICAgICBzZXR1cEZvclJlcGxhY2UoKTsKKyAgICBpZiAoIWRvZXNQcm9ncmVz
c2l2ZUxvYWQobV9yZXNwb25zZS5taW1lVHlwZSgpKSkgewogICAgICAgICBSZWZQdHI8U2hhcmVk
QnVmZmVyPiByZXNvdXJjZURhdGEgPSBtYWluUmVzb3VyY2VEYXRhKCk7CiAgICAgICAgIGNvbW1p
dExvYWQocmVzb3VyY2VEYXRhLT5kYXRhKCksIHJlc291cmNlRGF0YS0+c2l6ZSgpKTsKICAgICB9
CiAgICAgCi0gICAgZnJhbWVMb2FkZXIoKS0+ZmluaXNoZWRMb2FkaW5nRG9jdW1lbnQodGhpcyk7
CisgICAgbV9mcmFtZS0+bG9hZGVyKCktPnNldHVwRm9yUmVwbGFjZSgpOwogICAgIG1fZnJhbWUt
PmxvYWRlcigpLT53cml0ZXIoKS0+ZW5kKCk7Ci0gICAgCi0gICAgZnJhbWVMb2FkZXIoKS0+c2V0
UmVwbGFjaW5nKCk7CiAgICAgbV9nb3RGaXJzdEJ5dGUgPSBmYWxzZTsKKyAgICBtX2NvbW1pdHRl
ZCA9IGZhbHNlOwogICAgIAotICAgIGlmIChkb2VzUHJvZ3Jlc3NpdmVMb2FkKG5ld01JTUVUeXBl
KSkgewotICAgICAgICBmcmFtZUxvYWRlcigpLT5yZXZlcnRUb1Byb3Zpc2lvbmFsKHRoaXMpOwot
ICAgICAgICBzZXR1cEZvclJlcGxhY2UoKTsKLSAgICB9Ci0gICAgCiAgICAgc3RvcExvYWRpbmdT
dWJyZXNvdXJjZXMoKTsKICAgICBzdG9wTG9hZGluZ1BsdWdJbnMoKTsKICAgICBjbGVhckFyY2hp
dmVSZXNvdXJjZXMoKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAkocmV2aXNpb24gNzE0MjMpCisr
KyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNyAr
MTA3LDYgQEAKIAogICAgIHZvaWQgcHJlcGFyZUZvckxvYWRTdGFydCgpOwogICAgIHZvaWQgc2V0
dXBGb3JSZXBsYWNlKCk7Ci0gICAgdm9pZCBzZXR1cEZvclJlcGxhY2VCeU1JTUVUeXBlKGNvbnN0
IFN0cmluZyYgbmV3TUlNRVR5cGUpOwogCiAgICAgdm9pZCBsb2FkVVJMSW50b0NoaWxkRnJhbWUo
Y29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgcmVmZXJlciwgRnJhbWUqKTsKIApAQCAtMTgxLDcg
KzE4MCw2IEBACiAgICAgdm9pZCBmaW5pc2hlZExvYWRpbmdEb2N1bWVudChEb2N1bWVudExvYWRl
ciopOwogICAgIGJvb2wgaXNSZXBsYWNpbmcoKSBjb25zdDsKICAgICB2b2lkIHNldFJlcGxhY2lu
ZygpOwotICAgIHZvaWQgcmV2ZXJ0VG9Qcm92aXNpb25hbChEb2N1bWVudExvYWRlciopOwogICAg
IHZvaWQgc2V0TWFpbkRvY3VtZW50RXJyb3IoRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNvdXJj
ZUVycm9yJik7CiAgICAgdm9pZCBtYWluUmVjZWl2ZWRDb21wbGV0ZUVycm9yKERvY3VtZW50TG9h
ZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpOwogICAgIGJvb2wgc3ViZnJhbWVJc0xvYWRpbmco
KSBjb25zdDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76585</attachid>
            <date>2010-12-14 15:43:12 -0800</date>
            <delta_ts>2012-09-14 10:52:08 -0700</delta_ts>
            <desc>Swap calls to writer()-&gt;end() and setupForReplace() in DocumentLoader</desc>
            <filename>sfr3.txt</filename>
            <type>text/plain</type>
            <size>6254</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NDA2MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMTAtMTItMTQgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBT
aW1wbGlmeSBzZXR0aW5nIHVwIEZyYW1lTG9hZGVyL0RvY3VtZW50TG9hZGVyCisgICAgICAgIGZv
ciBtdWx0aXBhcnQgY29udGVudC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQ5MDcyCisKKyAgICAgICAgUmVmYWN0b3IsIG5vIG5ldyB0ZXN0cy4KKwor
ICAgICAgICAqIGxvYWRlci9Eb2N1bWVudExvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudExvYWRlcjo6c2V0dXBGb3JSZXBsYWNlKTogQ29sbGFwc2Ugc2V0dXBGb3JSZXBsYWNl
KCkKKyAgICAgICAgICAgIGFuZCBzZXR1cEZvclJlcGxhY2VCeU1pbWVUeXBlKCkgaW50byBvbmUg
ZnVuY3Rpb24gYW5kIGVuc3VyZQorICAgICAgICAgICAgd2UgYWx3YXlzIHJlc2V0IEZyYW1lTG9h
ZGVyIHRvIHByb3Zpc2lvbmFsIHN0YXRlLgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVudExvYWRl
ci5oOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZUxvYWRlcjo6c2V0T3V0Z29pbmdSZWZlcnJlcik6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZUxvYWRlcjo6c2V0dXBGb3JSZXBsYWNlKTogRG8gYWxsIHRoZSBGcmFtZUxvYWRlcgorICAg
ICAgICAgICAgc2V0dXAgaGVyZSwgaW5zdGVhZCBvZiByZXF1aXJpbmcgbXVsdGlwbGUgZnVuY3Rp
b24gY2FsbHMKKyAgICAgICAgICAgIGluIERvY3VtZW50TG9hZGVyLgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVMb2FkZXI6OnNldFJlcGxhY2luZyk6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9h
ZGVyLmg6CisgICAgICAgICogbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpNYWluUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisKIDIw
MTAtMTItMTQgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhbiBCZXJuc3RlaW4uCkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCShyZXZpc2lv
biA3NDAzNykKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTIwOSwxNyArMTIwOSwxNiBAQAogCiB2b2lkIEZyYW1lTG9hZGVyOjpzZXR1cEZvclJl
cGxhY2UoKQogeworICAgIEFTU0VSVChtX3N0YXRlID09IEZyYW1lU3RhdGVDb21taXR0ZWRQYWdl
KTsKKyAgICBmaW5pc2hlZExvYWRpbmdEb2N1bWVudChkb2N1bWVudExvYWRlcigpKTsKKyAgICBz
ZXRSZXBsYWNpbmcoKTsKKyAgICBtX2NsaWVudC0+cmV2ZXJ0VG9Qcm92aXNpb25hbFN0YXRlKGRv
Y3VtZW50TG9hZGVyKCkpOwogICAgIHNldFN0YXRlKEZyYW1lU3RhdGVQcm92aXNpb25hbCk7CiAg
ICAgbV9wcm92aXNpb25hbERvY3VtZW50TG9hZGVyID0gbV9kb2N1bWVudExvYWRlcjsKICAgICBt
X2RvY3VtZW50TG9hZGVyID0gMDsKICAgICBkZXRhY2hDaGlsZHJlbigpOwogfQogCi12b2lkIEZy
YW1lTG9hZGVyOjpzZXR1cEZvclJlcGxhY2VCeU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbmV3TUlN
RVR5cGUpCi17Ci0gICAgYWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+c2V0dXBGb3JSZXBsYWNlQnlN
SU1FVHlwZShuZXdNSU1FVHlwZSk7Ci19Ci0KIC8vIFRoaXMgaXMgYSBoYWNrIHRvIGFsbG93IGtl
ZXAgbmF2aWdhdGlvbiB0byBodHRwL2h0dHBzIGZlZWRzIHdvcmtpbmcuIFRvIHJlbW92ZSB0aGlz
CiAvLyB3ZSBuZWVkIHRvIGludHJvZHVjZSBuZXcgQVBJIGFraW4gdG8gcmVnaXN0ZXJVUkxTY2hl
bWVBc0xvY2FsLCB0aGF0IHJlZ2lzdGVycyBhCiAvLyBwcm90b2NvbHMgbmF2aWdhdGlvbiBwb2xp
Y3kuCkBAIC0yMjUyLDExICsyMjUxLDYgQEAKICAgICBtX2xvYWRUeXBlID0gRnJhbWVMb2FkVHlw
ZVJlcGxhY2U7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXI6OnJldmVydFRvUHJvdmlzaW9uYWwoRG9j
dW1lbnRMb2FkZXIqIGxvYWRlcikKLXsKLSAgICBtX2NsaWVudC0+cmV2ZXJ0VG9Qcm92aXNpb25h
bFN0YXRlKGxvYWRlcik7Ci19Ci0KIGJvb2wgRnJhbWVMb2FkZXI6OnN1YmZyYW1lSXNMb2FkaW5n
KCkgY29uc3QKIHsKICAgICAvLyBJdCdzIG1vc3QgbGlrZWx5IHRoYXQgdGhlIGxhc3QgYWRkZWQg
ZnJhbWUgaXMgdGhlIGxhc3QgdG8gbG9hZCBzbyB3ZSB3YWxrIGJhY2t3YXJkcy4KSW5kZXg6IFdl
YkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2Fk
ZXIvRG9jdW1lbnRMb2FkZXIuaAkocmV2aXNpb24gNzQwMzcpCisrKyBXZWJDb3JlL2xvYWRlci9E
b2N1bWVudExvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC05OSw3ICs5OSw3IEBACiAgICAgICAg
IHZvaWQgc2V0TG9hZGluZyhib29sIGxvYWRpbmcpIHsgbV9sb2FkaW5nID0gbG9hZGluZzsgfQog
ICAgICAgICB2b2lkIHVwZGF0ZUxvYWRpbmcoKTsKICAgICAgICAgdm9pZCByZWNlaXZlZERhdGEo
Y29uc3QgY2hhciosIGludCk7Ci0gICAgICAgIHZvaWQgc2V0dXBGb3JSZXBsYWNlQnlNSU1FVHlw
ZShjb25zdCBTdHJpbmcmIG5ld01JTUVUeXBlKTsKKyAgICAgICAgdm9pZCBzZXR1cEZvclJlcGxh
Y2UoKTsKICAgICAgICAgdm9pZCBmaW5pc2hlZExvYWRpbmcoKTsKICAgICAgICAgY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYgcmVzcG9uc2UoKSBjb25zdCB7IHJldHVybiBtX3Jlc3BvbnNlOyB9CiAg
ICAgICAgIGNvbnN0IFJlc291cmNlRXJyb3ImIG1haW5Eb2N1bWVudEVycm9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9tYWluRG9jdW1lbnRFcnJvcjsgfQpAQCAtMjI4LDcgKzIyOCw2IEBACiAgICAgICAg
IGJvb2wgbV9kZWZlck1haW5SZXNvdXJjZURhdGFMb2FkOwogCiAgICAgcHJpdmF0ZToKLSAgICAg
ICAgdm9pZCBzZXR1cEZvclJlcGxhY2UoKTsKICAgICAgICAgdm9pZCBjb21taXRJZlJlYWR5KCk7
CiAgICAgICAgIHZvaWQgY2xlYXJFcnJvcnMoKTsKICAgICAgICAgdm9pZCBzZXRNYWluRG9jdW1l
bnRFcnJvcihjb25zdCBSZXNvdXJjZUVycm9yJik7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9NYWlu
UmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL01haW5SZXNv
dXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDc0MDM3KQorKysgV2ViQ29yZS9sb2FkZXIvTWFpblJl
c291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYyLDcgKzM2Miw3IEBACiAjZW5k
aWYKIAogICAgIGlmIChtX2xvYWRpbmdNdWx0aXBhcnRDb250ZW50KSB7Ci0gICAgICAgIGZyYW1l
TG9hZGVyKCktPnNldHVwRm9yUmVwbGFjZUJ5TUlNRVR5cGUoci5taW1lVHlwZSgpKTsKKyAgICAg
ICAgZnJhbWVMb2FkZXIoKS0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+c2V0dXBGb3JSZXBsYWNl
KCk7CiAgICAgICAgIGNsZWFyUmVzb3VyY2VEYXRhKCk7CiAgICAgfQogICAgIApJbmRleDogV2Vi
Q29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9h
ZGVyL0RvY3VtZW50TG9hZGVyLmNwcAkocmV2aXNpb24gNzQwMzcpCisrKyBXZWJDb3JlL2xvYWRl
ci9Eb2N1bWVudExvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1NiwxMiArMjU2LDYgQEAK
ICAgICBtX2lzU3RvcHBpbmcgPSBmYWxzZTsKIH0KIAotdm9pZCBEb2N1bWVudExvYWRlcjo6c2V0
dXBGb3JSZXBsYWNlKCkKLXsKLSAgICBmcmFtZUxvYWRlcigpLT5zZXR1cEZvclJlcGxhY2UoKTsK
LSAgICBtX2NvbW1pdHRlZCA9IGZhbHNlOwotfQotCiB2b2lkIERvY3VtZW50TG9hZGVyOjpjb21t
aXRJZlJlYWR5KCkKIHsKICAgICBpZiAobV9nb3RGaXJzdEJ5dGUgJiYgIW1fY29tbWl0dGVkKSB7
CkBAIC0zMjIsMzEgKzMxNiwyMSBAQAogICAgICAgICBjb21taXRMb2FkKGRhdGEsIGxlbmd0aCk7
CiB9CiAKLXZvaWQgRG9jdW1lbnRMb2FkZXI6OnNldHVwRm9yUmVwbGFjZUJ5TUlNRVR5cGUoY29u
c3QgU3RyaW5nJiBuZXdNSU1FVHlwZSkKK3ZvaWQgRG9jdW1lbnRMb2FkZXI6OnNldHVwRm9yUmVw
bGFjZSgpCiB7CiAgICAgaWYgKCFtX2dvdEZpcnN0Qnl0ZSkKICAgICAgICAgcmV0dXJuOwogICAg
IAotICAgIFN0cmluZyBvbGRNSU1FVHlwZSA9IG1fcmVzcG9uc2UubWltZVR5cGUoKTsKLSAgICAK
LSAgICBpZiAoIWRvZXNQcm9ncmVzc2l2ZUxvYWQob2xkTUlNRVR5cGUpKSB7Ci0gICAgICAgIGZy
YW1lTG9hZGVyKCktPnJldmVydFRvUHJvdmlzaW9uYWwodGhpcyk7Ci0gICAgICAgIHNldHVwRm9y
UmVwbGFjZSgpOworICAgIGlmICghZG9lc1Byb2dyZXNzaXZlTG9hZChtX3Jlc3BvbnNlLm1pbWVU
eXBlKCkpKSB7CiAgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHJlc291cmNlRGF0YSA9IG1h
aW5SZXNvdXJjZURhdGEoKTsKICAgICAgICAgY29tbWl0TG9hZChyZXNvdXJjZURhdGEtPmRhdGEo
KSwgcmVzb3VyY2VEYXRhLT5zaXplKCkpOwogICAgIH0KICAgICAKLSAgICBmcmFtZUxvYWRlcigp
LT5maW5pc2hlZExvYWRpbmdEb2N1bWVudCh0aGlzKTsKICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+
d3JpdGVyKCktPmVuZCgpOwotICAgIAotICAgIGZyYW1lTG9hZGVyKCktPnNldFJlcGxhY2luZygp
OworICAgIG1fZnJhbWUtPmxvYWRlcigpLT5zZXR1cEZvclJlcGxhY2UoKTsKICAgICBtX2dvdEZp
cnN0Qnl0ZSA9IGZhbHNlOworICAgIG1fY29tbWl0dGVkID0gZmFsc2U7CiAgICAgCi0gICAgaWYg
KGRvZXNQcm9ncmVzc2l2ZUxvYWQobmV3TUlNRVR5cGUpKSB7Ci0gICAgICAgIGZyYW1lTG9hZGVy
KCktPnJldmVydFRvUHJvdmlzaW9uYWwodGhpcyk7Ci0gICAgICAgIHNldHVwRm9yUmVwbGFjZSgp
OwotICAgIH0KLSAgICAKICAgICBzdG9wTG9hZGluZ1N1YnJlc291cmNlcygpOwogICAgIHN0b3BM
b2FkaW5nUGx1Z0lucygpOwogICAgIGNsZWFyQXJjaGl2ZVJlc291cmNlcygpOwpJbmRleDogV2Vi
Q29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlci5oCShyZXZpc2lvbiA3NDAzNykKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw3ICsxMDcsNiBAQAogCiAgICAgdm9pZCBwcmVw
YXJlRm9yTG9hZFN0YXJ0KCk7CiAgICAgdm9pZCBzZXR1cEZvclJlcGxhY2UoKTsKLSAgICB2b2lk
IHNldHVwRm9yUmVwbGFjZUJ5TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBuZXdNSU1FVHlwZSk7CiAK
ICAgICB2b2lkIGxvYWRVUkxJbnRvQ2hpbGRGcmFtZShjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5n
JiByZWZlcmVyLCBGcmFtZSopOwogCkBAIC0xODIsNyArMTgxLDYgQEAKICAgICB2b2lkIGZpbmlz
aGVkTG9hZGluZ0RvY3VtZW50KERvY3VtZW50TG9hZGVyKik7CiAgICAgYm9vbCBpc1JlcGxhY2lu
ZygpIGNvbnN0OwogICAgIHZvaWQgc2V0UmVwbGFjaW5nKCk7Ci0gICAgdm9pZCByZXZlcnRUb1By
b3Zpc2lvbmFsKERvY3VtZW50TG9hZGVyKik7CiAgICAgdm9pZCBzZXRNYWluRG9jdW1lbnRFcnJv
cihEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKICAgICB2b2lkIG1haW5S
ZWNlaXZlZENvbXBsZXRlRXJyb3IoRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9y
Jik7CiAgICAgYm9vbCBzdWJmcmFtZUlzTG9hZGluZygpIGNvbnN0Owo=
</data>
<flag name="review"
          id="67560"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164191</attachid>
            <date>2012-09-14 10:52:08 -0700</date>
            <delta_ts>2012-10-08 10:08:34 -0700</delta_ts>
            <desc>patch + test</desc>
            <filename>sfr.txt</filename>
            <type>text/plain</type>
            <size>10078</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAkocmV2aXNpb24g
MTI4MzUxKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjY5LDEyICsyNjksNiBAQAogICAgIG1faXNTdG9wcGluZyA9IGZhbHNl
OwogfQogCi12b2lkIERvY3VtZW50TG9hZGVyOjpzZXR1cEZvclJlcGxhY2UoKQotewotICAgIGZy
YW1lTG9hZGVyKCktPnNldHVwRm9yUmVwbGFjZSgpOwotICAgIG1fY29tbWl0dGVkID0gZmFsc2U7
Ci19Ci0KIHZvaWQgRG9jdW1lbnRMb2FkZXI6OmNvbW1pdElmUmVhZHkoKQogewogICAgIGlmICgh
bV9jb21taXR0ZWQpIHsKQEAgLTMzNyw4ICszMzEsOCBAQAogI2VuZGlmCiAKICAgICAgICAgLy8g
Q2FsbCByZWNlaXZlZEZpcnN0RGF0YSgpIGV4YWN0bHkgb25jZSBwZXIgbG9hZC4gV2Ugc2hvdWxk
IG9ubHkgcmVhY2ggdGhpcyBwb2ludCBtdWx0aXBsZSB0aW1lcwotICAgICAgICAvLyBmb3IgbXVs
dGlwYXJ0IGxvYWRzLCBhbmQgaXNSZXBsYWNpbmcoKSB3aWxsIGJlIHRydWUgYWZ0ZXIgdGhlIGZp
cnN0IHRpbWUuCi0gICAgICAgIGlmICghbV9tYWluUmVzb3VyY2VMb2FkZXIgfHwgIW1fbWFpblJl
c291cmNlTG9hZGVyLT5pc0xvYWRpbmdNdWx0aXBhcnRDb250ZW50KCkgfHwgIWZyYW1lTG9hZGVy
KCktPmlzUmVwbGFjaW5nKCkpCisgICAgICAgIC8vIGZvciBtdWx0aXBhcnQgbG9hZHMsIGFuZCBG
cmFtZUxvYWRlcjo6aXNSZXBsYWNpbmcoKSB3aWxsIGJlIHRydWUgYWZ0ZXIgdGhlIGZpcnN0IHRp
bWUuCisgICAgICAgIGlmICghaXNNdWx0aXBhcnRSZXBsYWNpbmdMb2FkKCkpCiAgICAgICAgICAg
ICBmcmFtZUxvYWRlcigpLT5yZWNlaXZlZEZpcnN0RGF0YSgpOwogCiAgICAgICAgIGJvb2wgdXNl
ckNob3NlbiA9IHRydWU7CkBAIC0zODIsNDIgKzM3NiwyMyBAQAogICAgIGluZm8uYWRkSW5zdHJ1
bWVudGVkTWVtYmVyKG1fbWFpblJlc291cmNlRGF0YSk7CiB9CiAKLWJvb2wgRG9jdW1lbnRMb2Fk
ZXI6OmRvZXNQcm9ncmVzc2l2ZUxvYWQoY29uc3QgU3RyaW5nJiBNSU1FVHlwZSkgY29uc3QKLXsK
LSAgICByZXR1cm4gIWZyYW1lTG9hZGVyKCktPmlzUmVwbGFjaW5nKCkgfHwgTUlNRVR5cGUgPT0g
InRleHQvaHRtbCI7Ci19Ci0KIHZvaWQgRG9jdW1lbnRMb2FkZXI6OnJlY2VpdmVkRGF0YShjb25z
dCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQogewotICAgIGlmIChkb2VzUHJvZ3Jlc3NpdmVMb2Fk
KG1fcmVzcG9uc2UubWltZVR5cGUoKSkpCisgICAgaWYgKCFpc011bHRpcGFydFJlcGxhY2luZ0xv
YWQoKSkKICAgICAgICAgY29tbWl0TG9hZChkYXRhLCBsZW5ndGgpOwogfQogCi12b2lkIERvY3Vt
ZW50TG9hZGVyOjpzZXR1cEZvclJlcGxhY2VCeU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbmV3TUlN
RVR5cGUpCit2b2lkIERvY3VtZW50TG9hZGVyOjpzZXR1cEZvclJlcGxhY2UoKQogewogICAgIGlm
ICghbWFpblJlc291cmNlRGF0YSgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgU3RyaW5n
IG9sZE1JTUVUeXBlID0gbV9yZXNwb25zZS5taW1lVHlwZSgpOwotICAgIAotICAgIGlmICghZG9l
c1Byb2dyZXNzaXZlTG9hZChvbGRNSU1FVHlwZSkpIHsKLSAgICAgICAgZnJhbWVMb2FkZXIoKS0+
Y2xpZW50KCktPnJldmVydFRvUHJvdmlzaW9uYWxTdGF0ZSh0aGlzKTsKLSAgICAgICAgc2V0dXBG
b3JSZXBsYWNlKCk7Ci0gICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHJlc291cmNlRGF0YSA9
IG1haW5SZXNvdXJjZURhdGEoKTsKLSAgICAgICAgY29tbWl0TG9hZChyZXNvdXJjZURhdGEtPmRh
dGEoKSwgcmVzb3VyY2VEYXRhLT5zaXplKCkpOwotICAgIH0KLSAgICAKKyAgICBtYXliZUZpbmlz
aExvYWRpbmdNdWx0aXBhcnRDb250ZW50KCk7CiAgICAgbWF5YmVDcmVhdGVBcmNoaXZlKCk7CiAg
ICAgbV93cml0ZXIuZW5kKCk7Ci0gICAgCiAgICAgZnJhbWVMb2FkZXIoKS0+c2V0UmVwbGFjaW5n
KCk7CiAgICAgbV9nb3RGaXJzdEJ5dGUgPSBmYWxzZTsKICAgICAKLSAgICBpZiAoZG9lc1Byb2dy
ZXNzaXZlTG9hZChuZXdNSU1FVHlwZSkpIHsKLSAgICAgICAgZnJhbWVMb2FkZXIoKS0+Y2xpZW50
KCktPnJldmVydFRvUHJvdmlzaW9uYWxTdGF0ZSh0aGlzKTsKLSAgICAgICAgc2V0dXBGb3JSZXBs
YWNlKCk7Ci0gICAgfQotICAgIAogICAgIHN0b3BMb2FkaW5nU3VicmVzb3VyY2VzKCk7CiAgICAg
c3RvcExvYWRpbmdQbHVnSW5zKCk7CiAjaWYgRU5BQkxFKFdFQl9BUkNISVZFKSB8fCBFTkFCTEUo
TUhUTUwpCkBAIC04NTgsNiArODMzLDExIEBACiAgICAgcmV0dXJuIG1fbWFpblJlc291cmNlTG9h
ZGVyICYmIG1fbWFpblJlc291cmNlTG9hZGVyLT5pc0xvYWRpbmdNdWx0aXBhcnRDb250ZW50KCk7
CiB9CiAKK2Jvb2wgRG9jdW1lbnRMb2FkZXI6OmlzTXVsdGlwYXJ0UmVwbGFjaW5nTG9hZCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGlzTG9hZGluZ011bHRpcGFydENvbnRlbnQoKSAmJiBmcmFtZUxv
YWRlcigpLT5pc1JlcGxhY2luZygpOworfQorCiB2b2lkIERvY3VtZW50TG9hZGVyOjpzdGFydExv
YWRpbmdNYWluUmVzb3VyY2UoKQogewogICAgIG1fbWFpbkRvY3VtZW50RXJyb3IgPSBSZXNvdXJj
ZUVycm9yKCk7CkBAIC04ODcsMTIgKzg2NywxMyBAQAogCiB2b2lkIERvY3VtZW50TG9hZGVyOjpt
YXliZUZpbmlzaExvYWRpbmdNdWx0aXBhcnRDb250ZW50KCkKIHsKLSAgICBpZiAoIWRvZXNQcm9n
cmVzc2l2ZUxvYWQobV9yZXNwb25zZS5taW1lVHlwZSgpKSkgewotICAgICAgICBmcmFtZUxvYWRl
cigpLT5jbGllbnQoKS0+cmV2ZXJ0VG9Qcm92aXNpb25hbFN0YXRlKHRoaXMpOwotICAgICAgICBz
ZXR1cEZvclJlcGxhY2UoKTsKLSAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gcmVzb3VyY2VE
YXRhID0gbWFpblJlc291cmNlRGF0YSgpOwotICAgICAgICBjb21taXRMb2FkKHJlc291cmNlRGF0
YS0+ZGF0YSgpLCByZXNvdXJjZURhdGEtPnNpemUoKSk7Ci0gICAgfQorICAgIGlmICghZnJhbWVM
b2FkZXIoKS0+aXNSZXBsYWNpbmcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZnJhbWVMb2Fk
ZXIoKS0+c2V0dXBGb3JSZXBsYWNlKCk7CisgICAgbV9jb21taXR0ZWQgPSBmYWxzZTsKKyAgICBS
ZWZQdHI8U2hhcmVkQnVmZmVyPiByZXNvdXJjZURhdGEgPSBtYWluUmVzb3VyY2VEYXRhKCk7Cisg
ICAgY29tbWl0TG9hZChyZXNvdXJjZURhdGEtPmRhdGEoKSwgcmVzb3VyY2VEYXRhLT5zaXplKCkp
OwogfQogCiB2b2lkIERvY3VtZW50TG9hZGVyOjppY29uTG9hZERlY2lzaW9uQXZhaWxhYmxlKCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5oCShyZXZpc2lvbiAxMjgz
NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMTEzLDcgKzExMyw3IEBACiAgICAgICAgIGJvb2wgaXNDb21taXR0ZWQoKSBjb25z
dCB7IHJldHVybiBtX2NvbW1pdHRlZDsgfQogICAgICAgICBib29sIGlzTG9hZGluZygpIGNvbnN0
IHsgcmV0dXJuIGlzTG9hZGluZ01haW5SZXNvdXJjZSgpIHx8ICFtX3N1YnJlc291cmNlTG9hZGVy
cy5pc0VtcHR5KCkgfHwgIW1fcGx1Z0luU3RyZWFtTG9hZGVycy5pc0VtcHR5KCk7IH0KICAgICAg
ICAgdm9pZCByZWNlaXZlZERhdGEoY29uc3QgY2hhciosIGludCk7Ci0gICAgICAgIHZvaWQgc2V0
dXBGb3JSZXBsYWNlQnlNSU1FVHlwZShjb25zdCBTdHJpbmcmIG5ld01JTUVUeXBlKTsKKyAgICAg
ICAgdm9pZCBzZXR1cEZvclJlcGxhY2UoKTsKICAgICAgICAgdm9pZCBmaW5pc2hlZExvYWRpbmco
KTsKICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UoKSBjb25zdCB7IHJl
dHVybiBtX3Jlc3BvbnNlOyB9CiAgICAgICAgIGNvbnN0IFJlc291cmNlRXJyb3ImIG1haW5Eb2N1
bWVudEVycm9yKCkgY29uc3QgeyByZXR1cm4gbV9tYWluRG9jdW1lbnRFcnJvcjsgfQpAQCAtMjUx
LDExICsyNTEsOSBAQAogICAgICAgICBib29sIG1fZGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZDsK
IAogICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgc2V0dXBGb3JSZXBsYWNlKCk7CiAgICAgICAg
IHZvaWQgY29tbWl0SWZSZWFkeSgpOwogICAgICAgICB2b2lkIHNldE1haW5Eb2N1bWVudEVycm9y
KGNvbnN0IFJlc291cmNlRXJyb3ImKTsKICAgICAgICAgdm9pZCBjb21taXRMb2FkKGNvbnN0IGNo
YXIqLCBpbnQpOwotICAgICAgICBib29sIGRvZXNQcm9ncmVzc2l2ZUxvYWQoY29uc3QgU3RyaW5n
JiBNSU1FVHlwZSkgY29uc3Q7CiAgICAgICAgIHZvaWQgY2hlY2tMb2FkQ29tcGxldGUoKTsKICAg
ICAgICAgdm9pZCBjbGVhck1haW5SZXNvdXJjZUxvYWRlcigpOwogICAgICAgICAKQEAgLTI2NCw2
ICsyNjIsOCBAQAogICAgICAgICB2b2lkIGNsZWFyQXJjaGl2ZVJlc291cmNlcygpOwogI2VuZGlm
CiAKKyAgICAgICAgYm9vbCBpc011bHRpcGFydFJlcGxhY2luZ0xvYWQoKSBjb25zdDsKKwogICAg
ICAgICB2b2lkIGRlbGl2ZXJTdWJzdGl0dXRlUmVzb3VyY2VzQWZ0ZXJEZWxheSgpOwogICAgICAg
ICB2b2lkIHN1YnN0aXR1dGVSZXNvdXJjZURlbGl2ZXJ5VGltZXJGaXJlZChUaW1lcjxEb2N1bWVu
dExvYWRlcj4qKTsKICAgICAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcAkocmV2aXNpb24gMTI4MzUxKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVy
L0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0MSw2ICsxMTQxLDcgQEAKIAog
dm9pZCBGcmFtZUxvYWRlcjo6c2V0dXBGb3JSZXBsYWNlKCkKIHsKKyAgICBtX2NsaWVudC0+cmV2
ZXJ0VG9Qcm92aXNpb25hbFN0YXRlKG1fZG9jdW1lbnRMb2FkZXIuZ2V0KCkpOwogICAgIHNldFN0
YXRlKEZyYW1lU3RhdGVQcm92aXNpb25hbCk7CiAgICAgbV9wcm92aXNpb25hbERvY3VtZW50TG9h
ZGVyID0gbV9kb2N1bWVudExvYWRlcjsKICAgICBtX2RvY3VtZW50TG9hZGVyID0gMDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lv
biAxMjgzNTEpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvTWFpblJlc291cmNlTG9hZGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzg2LDcgKzM4Niw3IEBACiAjZW5kaWYKIAogICAgIGlmICht
X2xvYWRpbmdNdWx0aXBhcnRDb250ZW50KSB7Ci0gICAgICAgIGZyYW1lTG9hZGVyKCktPmFjdGl2
ZURvY3VtZW50TG9hZGVyKCktPnNldHVwRm9yUmVwbGFjZUJ5TUlNRVR5cGUoci5taW1lVHlwZSgp
KTsKKyAgICAgICAgbV9kb2N1bWVudExvYWRlci0+c2V0dXBGb3JSZXBsYWNlKCk7CiAgICAgICAg
IGNsZWFyUmVzb3VyY2VEYXRhKCk7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNp
b24gMTI4NjI1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzMgQEAKKzIwMTItMDktMTQgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBMb2FkZXIgY2xlYW51cCA6IFNpbXBsaWZ5IEZyYW1lTG9hZGVyL0Rv
Y3VtZW50TG9hZGVyIHNldHVwRm9yUmVwbGFjZSgpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTA3MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY29udGFpbnMgb25lIHNtYWxsIGtub3du
IGJlaGF2aW9yIGNoYW5nZTogbXVsdGlwYXJ0L3gtbWl4ZWQtcmVwbGFjZSBtYWluIHJlc291cmNl
cyB3aXRoIHRleHQvaHRtbCBwYXJ0cworICAgICAgICB3aWxsIG5vIGxvbmdlciBsb2FkIHRoZSB0
ZXh0L2h0bWwgcHJvZ3Jlc3NpdmVseS4gSW4gcHJhY3RpY2UsIGxvYWRpbmcgdGhlIGh0bWwgcHJv
Z3Jlc3NpdmVseSBjYXVzZXMgdGhlIGRvY3VtZW50CisgICAgICAgIHRvIGdldCBjbGVhcmVkIGFz
IHNvb24gYXMgdGhlIG5leHQgcGFydCdzIGRhdGEgc3RhcnRzIGFycml2aW5nLCB3aGljaCBsZWFk
cyB0byBhIGJsYW5rIHBhZ2UgbW9zdCBvZiB0aGUgdGltZS4gVGhpcyBjYXNlCisgICAgICAgIHNl
ZW1zIHRvIGJlIHBhdGhvbG9naWNhbCwgYXMgSUUsIEZGLCBPcGVyYSBhbmQgV2ViS2l0IGFsbCBk
byBzb21ldGhpbmcgZGlmZmVyZW50IGN1cnJlbnRseS4gVGhpcyBwYXRjaCB3aWxsIGNhdXNlCisg
ICAgICAgIHVzIHRvIGJlaGF2ZSBsaWtlIEZpcmVmb3gsIHdoaWNoIGlzIHRoZSBtb3N0IHNhbmUg
b2YgdGhlIGN1cnJlbnQgYmVoYXZpb3JzLgorCisgICAgICAgIFRlc3Q6IGh0dHAvdGVzdHMvbXVs
dGlwYXJ0L211bHRpcGFydC1odG1sLnBocAorCisgICAgICAgICogbG9hZGVyL0RvY3VtZW50TG9h
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyOjpjb21taXREYXRhKTog
VXNlIGlzTXVsdGlwYXJ0UmVwbGFjaW5nTG9hZCgpIGhlbHBlci4KKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50TG9hZGVyOjpyZWNlaXZlZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnRMb2FkZXI6OnNldHVwRm9yUmVwbGFjZSk6IFJlbmFtZWQgZnJvbSBzZXR1cEZvclJlcGxhY2VC
eU1JTUVUeXBlKCkuIENhbGwgbWF5YmVGaW5pc2hMb2FkaW5nTXVsdGlwYXJ0Q29udGVudCgpCisg
ICAgICAgICAgICBpbnN0ZWFkIG9mIGRvaW5nIGlkZW50aWNhbCB3b3JrIGlubGluZS4gQWZ0ZXIg
d2UgY2FsbCBmcmFtZUxvYWRlcigpLT5zZXRSZXBsYWNpbmcoKSwgd2Ugd2lsbCBuZXZlciBsb2Fk
IHByb2dyZXNzaXZlbHksIHNvIHJlbW92ZQorICAgICAgICAgICAgdGhlIGlmIChkb2VzUHJvZ3Jl
c3NpdmVMb2FkKG5ld01JTUVUeXBlKSkge30gYmxvY2suCisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudExvYWRlcjo6aXNNdWx0aXBhcnRSZXBsYWNpbmdMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50TG9hZGVyOjptYXliZUZpbmlzaExvYWRpbmdNdWx0aXBhcnRDb250ZW50KTogSW5s
aW5lIHRoZSBvbGQgRG9jdW1lbnRMb2FkZXI6OnNldHVwRm9yZVJlcGxhY2UoKSwgY2hlY2sKKyAg
ICAgICAgICAgIGZyYW1lTG9hZGVyKCktPmlzUmVwbGFjaW5nKCkgaW5zdGVhZCBvZiB0aGUgZGVs
ZXRlIGRvZXNQcm9ncmVzc2l2ZUxvYWQoKS4KKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRMb2Fk
ZXIuaDoKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVMb2FkZXI6OnNldHVwRm9yUmVwbGFjZSk6IE1vdmUgYWxsIGNhbGxzIHRvIHJldmVy
dFRvUHJvdmlzaW9uYWxTdGF0ZSBoZXJlLgorICAgICAgICAqIGxvYWRlci9NYWluUmVzb3VyY2VM
b2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWFpblJlc291cmNlTG9hZGVyOjpkaWRSZWNl
aXZlUmVzcG9uc2UpOiBDYWxsIHNldHVwRm9yUmVwbGFjZSgpLCByZW5hbWVkIGZyb20gc2V0dXBG
b3JSZXBsYWNlQnlNSU1FVHlwZSgpLgorCiAyMDEyLTA5LTE0ICBUb3IgQXJuZSBWZXN0YsO4ICA8
dG9yLmFybmUudmVzdGJvQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdIFJlbW92ZSBvbGQgY3J1
ZnQgZnJvbSB0aGUgcW1ha2UgYnVpbGQgc3lzdGVtCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL211bHRpcGFydC9tdWx0aXBhcnQtaHRtbC5waHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9tdWx0aXBhcnQvbXVsdGlwYXJ0LWh0bWwucGhwCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9tdWx0aXBhcnQvbXVsdGlwYXJ0LWh0bWwucGhwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjYgQEAKKzw/cGhwCitoZWFkZXIoJ0NvbnRlbnQtdHlw
ZTogbXVsdGlwYXJ0L3gtbWl4ZWQtcmVwbGFjZTsgYm91bmRhcnk9Ym91bmRhcnknKTsKK2hlYWRl
cignQ29ubmVjdGlvbjoga2VlcC1hbGl2ZScpOworZWNobyAiLS1ib3VuZGFyeVxyXG4iOworZWNo
byAiQ29udGVudC1UeXBlOiB0ZXh0L2h0bWxcclxuXHJcbiI7CitlY2hvIHN0cl9wYWQoJycsIDUw
MDApOworPz4KKworPHNjcmlwdD4KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVu
bmVyLmR1bXBBc1RleHQoKTsKKzwvc2NyaXB0PgorCis8P3BocAorZm9yICgkaSA9IDA7ICRpIDw9
IDEwOyAkaSsrKSB7CisgICAgZWNobyAiLS1ib3VuZGFyeVxyXG4iOworICAgIGVjaG8gIkNvbnRl
bnQtVHlwZTogdGV4dC9odG1sXHJcblxyXG4iOworICAgIGVjaG8gIlRoaXMgdGV4dCBzaG91bGQg
b25seSBhcHBlYXIgb25jZSAiOworICAgIGVjaG8gJGk7CisgICAgZWNobyBzdHJfcGFkKCcnLCA1
MDAwKTsKKyAgICBlY2hvICJcclxuXHJcbiI7CisgICAgZmx1c2goKTsKKyAgICB1c2xlZXAoMTAw
MDAwKTsKKyAgICAkaSsrOworfQorPz4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbXVs
dGlwYXJ0L211bHRpcGFydC1odG1sLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL211bHRpcGFydC9tdWx0aXBhcnQtaHRtbC1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL211bHRpcGFydC9tdWx0aXBhcnQt
aHRtbC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSBAQAorVGhpcyB0ZXh0
IHNob3VsZCBvbmx5IGFwcGVhciBvbmNlIDEwCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjg2MjUpCisr
KyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAor
MjAxMi0wOS0xNCAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IEFkZCBhIHRlc3QgZm9yIG11bHRpcGFydC94LW1peGVkLXJlcGxhY2UgZG9jdW1lbnRzIHdpdGgg
dGV4dC9odG1sCisgICAgICAgIHBhcnRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDkwNzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIGh0dHAvdGVzdHMvbXVsdGlwYXJ0L211bHRpcGFydC1odG1sLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9tdWx0aXBhcnQvbXVsdGlw
YXJ0LWh0bWwucGhwOiBBZGRlZC4KKwogMjAxMi0wOS0xNCAgQ2hyaXN0b3BoZSBEdW1leiAgPGNo
cmlzdG9waGUuZHVtZXpAaW50ZWwuY29tPgogCiAgICAgICAgIFdlYktpdFRlc3RSdW5uZXIgbmVl
ZHMgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcERhdGFiYXNlQ2FsbGJhY2tzCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>