<?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>76564</bug_id>
          
          <creation_ts>2012-01-18 13:17:18 -0800</creation_ts>
          <short_desc>Let MemoryCache reuse cached XHRs</short_desc>
          <delta_ts>2012-03-07 16:54:38 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>78810</dependson>
    
    <dependson>79026</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nate Chapin">japhet</reporter>
          <assigned_to name="Nate Chapin">japhet</assigned_to>
          <cc>abarth</cc>
    
    <cc>acolwell</cc>
    
    <cc>ap</cc>
    
    <cc>caseq</cc>
    
    <cc>dglazkov</cc>
    
    <cc>koivisto</cc>
    
    <cc>oliver</cc>
    
    <cc>ossy</cc>
    
    <cc>pnormand</cc>
    
    <cc>vsevik</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>538098</commentid>
    <comment_count>0</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2012-01-18 13:17:18 -0800</bug_when>
    <thetext>https://bugs.webkit.org/show_bug.cgi?id=61225 re-plumbed ThreadableLoaderClients (XHRs et al) so that they are loaded through the MemoryCache infrastructure.  As of right now, we cache all of these resources, but we always through away those cached results.  Now that this plumbing appears to have solidified, I&apos;d like to turn on caching for certain classes of these requests.

I&apos;m going to try to err on the side of caution in what resources are considered for reuse, but I&apos;d appreciate any suggestions on what the rules should be.

First attempt coming shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538101</commentid>
    <comment_count>1</comment_count>
      <attachid>122979</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2012-01-18 13:23:01 -0800</bug_when>
    <thetext>Created attachment 122979
First draft</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538121</commentid>
    <comment_count>2</comment_count>
      <attachid>122979</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-18 13:49:56 -0800</bug_when>
    <thetext>Comment on attachment 122979
First draft

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

&gt; Source/WebCore/loader/cache/CachedRawResource.cpp:89
&gt; +        delete this;

Consider using an OwnPtr member to own yourself.

&gt; Source/WebCore/loader/cache/CachedRawResource.cpp:92
&gt; +    CachedResourceClient* m_client;

What keeps the client alive?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538123</commentid>
    <comment_count>3</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2012-01-18 13:52:54 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 122979 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=122979&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/loader/cache/CachedRawResource.cpp:89
&gt; &gt; +        delete this;
&gt; 
&gt; Consider using an OwnPtr member to own yourself.

Sounds good.

&gt; 
&gt; &gt; Source/WebCore/loader/cache/CachedRawResource.cpp:92
&gt; &gt; +    CachedResourceClient* m_client;
&gt; 
&gt; What keeps the client alive?

That part is a little subtle, and I haven&apos;t figured out a clear way to document it. The first thing CachedRawResource::sendCallbacks() does is see if the CachedResourceClient* is still in the resource&apos;s list of clients. If it&apos;s in the client list, it should be guaranteed to be alive. If it&apos;s not, we shouldn&apos;t be sending callbacks to it, regardless of whether it&apos;s alive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538150</commentid>
    <comment_count>4</comment_count>
      <attachid>122979</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-18 14:13:39 -0800</bug_when>
    <thetext>Comment on attachment 122979
First draft

Attachment 122979 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11211788

New failing tests:
http/tests/inspector/network/network-disable-cache-xhrs.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542092</commentid>
    <comment_count>5</comment_count>
      <attachid>122979</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-25 02:03:09 -0800</bug_when>
    <thetext>Comment on attachment 122979
First draft

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

This is looking really close.  I think we should just polish up some of the memory management idioms.

&gt;&gt;&gt; Source/WebCore/loader/cache/CachedRawResource.cpp:92
&gt;&gt;&gt; +    CachedResourceClient* m_client;
&gt;&gt; 
&gt;&gt; What keeps the client alive?
&gt; 
&gt; That part is a little subtle, and I haven&apos;t figured out a clear way to document it. The first thing CachedRawResource::sendCallbacks() does is see if the CachedResourceClient* is still in the resource&apos;s list of clients. If it&apos;s in the client list, it should be guaranteed to be alive. If it&apos;s not, we shouldn&apos;t be sending callbacks to it, regardless of whether it&apos;s alive.

I&apos;m not sure that&apos;s exactly right.  If m_client gets deallocated and another CachedResourceClient gets allocated in its place, we could be in trouble, right?

&gt; Source/WebCore/loader/cache/CachedRawResource.cpp:100
&gt; +    static_cast&lt;CachedRawResourceClient*&gt;(c)-&gt;responseReceived(this, m_response);

I would make a local variable of type CachedRawResourceClient to avoid having to cast this variable so many times.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542093</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-25 02:03:31 -0800</bug_when>
    <thetext>&gt; http/tests/inspector/network/network-disable-cache-xhrs.html

This is probably an interesting failure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553307</commentid>
    <comment_count>7</comment_count>
      <attachid>126329</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2012-02-09 10:46:13 -0800</bug_when>
    <thetext>Created attachment 126329
Second attempt

I think this addresses the failing test and all of abarth&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553366</commentid>
    <comment_count>8</comment_count>
      <attachid>126329</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-09 11:38:28 -0800</bug_when>
    <thetext>Comment on attachment 126329
Second attempt

Attachment 126329 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11485321

New failing tests:
fast/files/workers/worker-apply-blob-url-to-xhr.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553414</commentid>
    <comment_count>9</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2012-02-09 12:25:35 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 126329 [details])
&gt; Attachment 126329 [details] did not pass chromium-ews (chromium-xvfb):
&gt; Output: http://queues.webkit.org/results/11485321
&gt; 
&gt; New failing tests:
&gt; fast/files/workers/worker-apply-blob-url-to-xhr.html

This failure is legitimate, though I&apos;m not sure why it didn&apos;t happen with the first version.

I think the fix is for DOMURL::revokeObjectURL to check MemoryCache for the given url and evict that CachedResource if present.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553499</commentid>
    <comment_count>10</comment_count>
      <attachid>126370</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2012-02-09 14:20:42 -0800</bug_when>
    <thetext>Created attachment 126370
Evict from cache in DOMURL::revokeObjectURL()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553501</commentid>
    <comment_count>11</comment_count>
      <attachid>126370</attachid>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2012-02-09 14:21:52 -0800</bug_when>
    <thetext>Comment on attachment 126370
Evict from cache in DOMURL::revokeObjectURL()

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

&gt; LayoutTests/http/tests/inspector/network/network-disable-cache-xhrs.html:88
&gt; +        InspectorTest.assertTrue(resource2.content.length == 0, &quot;Second resource should have no content due to 304&quot;);

So you make content for the second request unavailable for inspector users and even test that this regression was successful :)
I suggest that you don&apos;t change this test in this patch, but instead add a small change to InspectorResourceAgent, making sure it never uses CachedResource to get XHR&apos;s content.

I think the following change to &quot;if (loader) { ... }&quot; block in InspectorResourceAgent::didReceiveResponse should be enough for this test to pass:

if (loader) {
    bool isXHR = m_loadingXHRSynchronously || m_resourcesData-&gt;resourceType(requestId) == InspectorPageAgent::XHRResource;
    CachedResource* cachedResource = InspectorPageAgent::cachedResource(loader-&gt;frame(), response.url());
    if (cachedResource) {
        cachedResourceSize = cachedResource-&gt;encodedSize();
        // FIXME: We should use CachedResource for XHR&apos;s content when possible. 
        if (!isXHR) {
            type = InspectorPageAgent::cachedResourceType(*cachedResource);
            // Use mime type from cached resource in case the one in response is empty.
            if (resourceResponse &amp;&amp; response.mimeType().isEmpty())
                resourceResponse-&gt;setString(&quot;mimeType&quot;, cachedResource-&gt;response().mimeType());
            m_resourcesData-&gt;addCachedResource(requestId, cachedResource);
        }
    }
    if (isXHR)
        type = InspectorPageAgent::XHRResource;
    else if (m_resourcesData-&gt;resourceType(requestId) == InspectorPageAgent::ScriptResource)
        type = InspectorPageAgent::ScriptResource;
    else if (equalIgnoringFragmentIdentifier(response.url(), loader-&gt;frameLoader()-&gt;icon()-&gt;url()))
        type = InspectorPageAgent::ImageResource;
    else if (equalIgnoringFragmentIdentifier(response.url(), loader-&gt;url()) &amp;&amp; type == InspectorPageAgent::OtherResource)
        type = InspectorPageAgent::DocumentResource;

    m_resourcesData-&gt;responseReceived(requestId, m_pageAgent-&gt;frameId(loader-&gt;frame()), response);
}

I didn&apos;t check this code, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553507</commentid>
    <comment_count>12</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2012-02-09 14:28:15 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 126370 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=126370&amp;action=review
&gt; 
&gt; &gt; LayoutTests/http/tests/inspector/network/network-disable-cache-xhrs.html:88
&gt; &gt; +        InspectorTest.assertTrue(resource2.content.length == 0, &quot;Second resource should have no content due to 304&quot;);
&gt; 
&gt; So you make content for the second request unavailable for inspector users and even test that this regression was successful :)
&gt; I suggest that you don&apos;t change this test in this patch, but instead add a small change to InspectorResourceAgent, making sure it never uses CachedResource to get XHR&apos;s content.
&gt; 

I have perhaps misunderstood. What should the inspector show in the case of a 304? The response body was empty, after all. Should it then get populated with the contents of the original response?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553511</commentid>
    <comment_count>13</comment_count>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2012-02-09 14:33:56 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; (From update of attachment 126370 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=126370&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; LayoutTests/http/tests/inspector/network/network-disable-cache-xhrs.html:88
&gt; &gt; &gt; +        InspectorTest.assertTrue(resource2.content.length == 0, &quot;Second resource should have no content due to 304&quot;);
&gt; &gt; 
&gt; &gt; So you make content for the second request unavailable for inspector users and even test that this regression was successful :)
&gt; &gt; I suggest that you don&apos;t change this test in this patch, but instead add a small change to InspectorResourceAgent, making sure it never uses CachedResource to get XHR&apos;s content.
&gt; &gt; 
&gt; 
&gt; I have perhaps misunderstood. What should the inspector show in the case of a 304? The response body was empty, after all. Should it then get populated with the contents of the original response?

We should show the body of the original response like we do for other resources (scripts, stylesheets, etc.).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553514</commentid>
    <comment_count>14</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2012-02-09 14:37:11 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; (In reply to comment #11)
&gt; &gt; &gt; (From update of attachment 126370 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=126370&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; LayoutTests/http/tests/inspector/network/network-disable-cache-xhrs.html:88
&gt; &gt; &gt; &gt; +        InspectorTest.assertTrue(resource2.content.length == 0, &quot;Second resource should have no content due to 304&quot;);
&gt; &gt; &gt; 
&gt; &gt; &gt; So you make content for the second request unavailable for inspector users and even test that this regression was successful :)
&gt; &gt; &gt; I suggest that you don&apos;t change this test in this patch, but instead add a small change to InspectorResourceAgent, making sure it never uses CachedResource to get XHR&apos;s content.
&gt; &gt; &gt; 
&gt; &gt; 
&gt; &gt; I have perhaps misunderstood. What should the inspector show in the case of a 304? The response body was empty, after all. Should it then get populated with the contents of the original response?
&gt; 
&gt; We should show the body of the original response like we do for other resources (scripts, stylesheets, etc.).

Ok, current patch obsoleted. I&apos;ll try to figure out why that isn&apos;t just working.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554485</commentid>
    <comment_count>15</comment_count>
      <attachid>126601</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2012-02-10 16:18:30 -0800</bug_when>
    <thetext>Created attachment 126601
Fix inspector issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554682</commentid>
    <comment_count>16</comment_count>
      <attachid>126601</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-02-11 13:37:11 -0800</bug_when>
    <thetext>Comment on attachment 126601
Fix inspector issues

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

Nice, a comment though.

&gt; Source/WebCore/loader/cache/CachedRawResource.cpp:106
&gt; +    OwnPtr&lt;CachedRawResourceCallback&gt; m_this;

Not a fan of the lifetime management here. It seems to me that this could be owned by m_clientsAwaitingCallback and remove itself when completed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554684</commentid>
    <comment_count>17</comment_count>
      <attachid>126601</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-02-11 13:38:58 -0800</bug_when>
    <thetext>Comment on attachment 126601
Fix inspector issues

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

&gt; Source/WebCore/loader/cache/CachedResourceLoader.cpp:533
&gt; +    // Certain requests (e.g., XHRs) might have manually set headers that require revalidation.
&gt; +    // In theory, this should be a Revalidate case. In practice, the MemoryCache revalidation path assumes a whole bunch
&gt; +    // of things about how revalidation works that manual headers violate, so punt to Reload instead.
&gt; +    if (request.isConditional())
&gt;          return Reload;

This could be a FIXME</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>555415</commentid>
    <comment_count>18</comment_count>
      <attachid>126800</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2012-02-13 11:24:34 -0800</bug_when>
    <thetext>Created attachment 126800
Address Antti&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>555971</commentid>
    <comment_count>19</comment_count>
      <attachid>126800</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-13 22:46:08 -0800</bug_when>
    <thetext>Comment on attachment 126800
Address Antti&apos;s comments

Clearing flags on attachment: 126800

Committed r107672: &lt;http://trac.webkit.org/changeset/107672&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>555972</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-13 22:46:14 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556098</commentid>
    <comment_count>21</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-02-14 01:34:38 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 126800 [details])
&gt; Clearing flags on attachment: 126800
&gt; 
&gt; Committed r107672: &lt;http://trac.webkit.org/changeset/107672&gt;

It broke 4 tests on Qt:
- fast/workers/worker-crash-with-invalid-location.html:
- http/tests/inspector/inspect-element.html
- http/tests/inspector/network/network-shared-worker.html
- http/tests/inspector/network/network-worker.html

--- /ramdisk/qt-linux-64-release/build/layout-test-results/fast/workers/worker-crash-with-invalid-location-expected.txt 
+++ /ramdisk/qt-linux-64-release/build/layout-test-results/fast/workers/worker-crash-with-invalid-location-actual.txt 
@@ -1,4 +1,3 @@
-Blocked access to external URL http://example.com/worker.js
 Blocked access to external URL http://example.com/worker.js
 Test worker fetch of blocked url. Should print a &quot;PASS&quot; statement.
 


--- /ramdisk/qt-linux-64-release/build/layout-test-results/http/tests/inspector/inspect-element-expected.txt 
+++ /ramdisk/qt-linux-64-release/build/layout-test-results/http/tests/inspector/inspect-element-actual.txt 
@@ -1,5 +1,6 @@
 Tests that inspect element action works for iframe children (https://bugs.webkit.org/show_bug.cgi?id=76808).
 
 
+Uncaught exception in inspector front-end: TypeError: &apos;null&apos; is not an object [undefined:0]
 div#div
 


--- /ramdisk/qt-linux-64-release/build/layout-test-results/http/tests/inspector/network/network-shared-worker-expected.txt 
+++ /ramdisk/qt-linux-64-release/build/layout-test-results/http/tests/inspector/network/network-shared-worker-actual.txt 
@@ -3,7 +3,7 @@
 
 Bug 65929
 http://127.0.0.1:8000/inspector/network/resources/shared-worker.js
-resource.type: 4
+resource.type: 5
 resource.content before requesting content: undefined
 resource.content after requesting content: onconnect = function(event)
 {


--- /ramdisk/qt-linux-64-release/build/layout-test-results/http/tests/inspector/network/network-worker-expected.txt 
+++ /ramdisk/qt-linux-64-release/build/layout-test-results/http/tests/inspector/network/network-worker-actual.txt 
@@ -3,7 +3,7 @@
 
 Bug 65929
 http://127.0.0.1:8000/inspector/network/resources/worker.js
-resource.type: 4
+resource.type: 5
 resource.content before requesting content: undefined
 resource.content after requesting content: postMessage(&quot;Done.&quot;);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556129</commentid>
    <comment_count>22</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-02-14 02:07:31 -0800</bug_when>
    <thetext>I skipped them to make our bots happier - http://trac.webkit.org/changeset/107692

Please unskip them with the proper fix. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556311</commentid>
    <comment_count>23</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-02-14 08:10:35 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; I skipped them to make our bots happier - http://trac.webkit.org/changeset/107692
&gt; 
&gt; Please unskip them with the proper fix. Thanks.

GTK is also affected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556470</commentid>
    <comment_count>24</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2012-02-14 12:02:30 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; (In reply to comment #19)
&gt; - fast/workers/worker-crash-with-invalid-location.html:
&gt; - http/tests/inspector/inspect-element.html
&gt; - http/tests/inspector/network/network-shared-worker.html
&gt; - http/tests/inspector/network/network-worker.html

All of those are clearly failures caused by this patch except inspect-element.html

inspect-element.html has been consistently failing on most platforms: http://test-results.appspot.com/dashboards/flakiness_dashboard.html#showExpectations=true&amp;tests=http%2Ftests%2Finspector%2Finspect-element.html&amp;group=%40ToT%20-%20webkit.org

When I --run-singly locally, the failure goes away, so I&apos;m guessing that it&apos;s not playing nicely with some other test.

Patch to fix the other 3 failures coming soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556703</commentid>
    <comment_count>25</comment_count>
      <attachid>127064</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2012-02-14 15:40:08 -0800</bug_when>
    <thetext>Created attachment 127064
Fix failing worker tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557758</commentid>
    <comment_count>26</comment_count>
      <attachid>127064</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-15 17:19:44 -0800</bug_when>
    <thetext>Comment on attachment 127064
Fix failing worker tests

Clearing flags on attachment: 127064

Committed r107859: &lt;http://trac.webkit.org/changeset/107859&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557759</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-15 17:19:50 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557984</commentid>
    <comment_count>28</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-02-16 01:32:03 -0800</bug_when>
    <thetext>Reopen, because fast/workers/worker-crash-with-invalid-location.html still fails on Qt platform. I don&apos;t know what about the other platforms, because build.webkit.org is unavailable now.

--- /ramdisk/qt-linux-64-release/build/layout-test-results/fast/workers/worker-crash-with-invalid-location-expected.txt 
+++ /ramdisk/qt-linux-64-release/build/layout-test-results/fast/workers/worker-crash-with-invalid-location-actual.txt 
@@ -1,4 +1,3 @@
-Blocked access to external URL http://example.com/worker.js
 Blocked access to external URL http://example.com/worker.js
 Test worker fetch of blocked url. Should print a &quot;PASS&quot; statement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558015</commentid>
    <comment_count>29</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-02-16 02:37:52 -0800</bug_when>
    <thetext>(In reply to comment #28)
&gt; Reopen, because fast/workers/worker-crash-with-invalid-location.html still fails on Qt platform. I don&apos;t know what about the other platforms, because build.webkit.org is unavailable now.
&gt; 
&gt; --- /ramdisk/qt-linux-64-release/build/layout-test-results/fast/workers/worker-crash-with-invalid-location-expected.txt 
&gt; +++ /ramdisk/qt-linux-64-release/build/layout-test-results/fast/workers/worker-crash-with-invalid-location-actual.txt 
&gt; @@ -1,4 +1,3 @@
&gt; -Blocked access to external URL http://example.com/worker.js
&gt;  Blocked access to external URL http://example.com/worker.js
&gt;  Test worker fetch of blocked url. Should print a &quot;PASS&quot; statement.

I skipped it again - http://trac.webkit.org/changeset/107916/trunk/LayoutTests/platform/qt/Skipped</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558159</commentid>
    <comment_count>30</comment_count>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2012-02-16 07:00:26 -0800</bug_when>
    <thetext>Also inspector/debugger/script-formatter-console.html is flaky on chromium.
https://bugs.webkit.org/show_bug.cgi?id=78810</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558180</commentid>
    <comment_count>31</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-02-16 07:38:40 -0800</bug_when>
    <thetext>(In reply to comment #28)
&gt; Reopen, because fast/workers/worker-crash-with-invalid-location.html still fails on Qt platform. I don&apos;t know what about the other platforms, because build.webkit.org is unavailable now.
&gt; 
&gt; --- /ramdisk/qt-linux-64-release/build/layout-test-results/fast/workers/worker-crash-with-invalid-location-expected.txt 
&gt; +++ /ramdisk/qt-linux-64-release/build/layout-test-results/fast/workers/worker-crash-with-invalid-location-actual.txt 
&gt; @@ -1,4 +1,3 @@
&gt; -Blocked access to external URL http://example.com/worker.js
&gt;  Blocked access to external URL http://example.com/worker.js
&gt;  Test worker fetch of blocked url. Should print a &quot;PASS&quot; statement.

Same diff on GTK as well. Will skip again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561182</commentid>
    <comment_count>32</comment_count>
      <attachid>128034</attachid>
    <who name="Aaron Colwell">acolwell</who>
    <bug_when>2012-02-21 13:32:45 -0800</bug_when>
    <thetext>Created attachment 128034
Layout Test to verify Range request behavior.

I believe the patch for this bug broke Range requests for XHR. I&apos;ve attached a layout test that reproduces the problem. It looks like the Range header is completely ignored when we have cached data.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561185</commentid>
    <comment_count>33</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2012-02-21 13:39:40 -0800</bug_when>
    <thetext>(In reply to comment #32)
&gt; Created an attachment (id=128034) [details]
&gt; Layout Test to verify Range request behavior.
&gt; 
&gt; I believe the patch for this bug broke Range requests for XHR. I&apos;ve attached a layout test that reproduces the problem. It looks like the Range header is completely ignored when we have cached data.

I figured there must be something like this I was missing. :)

How do you think we should handle this? My inclination would be to punt at the MemoryCache layer and say we can&apos;t cache requests with Range headers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561201</commentid>
    <comment_count>34</comment_count>
    <who name="Aaron Colwell">acolwell</who>
    <bug_when>2012-02-21 14:03:52 -0800</bug_when>
    <thetext>(In reply to comment #33)
&gt; (In reply to comment #32)
&gt; &gt; Created an attachment (id=128034) [details] [details]
&gt; &gt; Layout Test to verify Range request behavior.
&gt; &gt; 
&gt; &gt; I believe the patch for this bug broke Range requests for XHR. I&apos;ve attached a layout test that reproduces the problem. It looks like the Range header is completely ignored when we have cached data.
&gt; 
&gt; I figured there must be something like this I was missing. :)
&gt; 
&gt; How do you think we should handle this? My inclination would be to punt at the MemoryCache layer and say we can&apos;t cache requests with Range headers.

Not caching requests with Range headers sounds fine with me. Trying to be &quot;smart&quot; about handling Ranges would likely lead to WAY more complexity than you want to deal with.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562428</commentid>
    <comment_count>35</comment_count>
      <attachid>128297</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2012-02-22 15:07:31 -0800</bug_when>
    <thetext>Created attachment 128297
Fix Range header handling</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562556</commentid>
    <comment_count>36</comment_count>
      <attachid>128297</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-22 16:46:48 -0800</bug_when>
    <thetext>Comment on attachment 128297
Fix Range header handling

Clearing flags on attachment: 128297

Committed r108576: &lt;http://trac.webkit.org/changeset/108576&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562557</commentid>
    <comment_count>37</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-22 16:46:56 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570869</commentid>
    <comment_count>38</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-03-05 11:21:53 -0800</bug_when>
    <thetext>Apparently this caused a regression: https://bugs.webkit.org/show_bug.cgi?id=76564</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570870</commentid>
    <comment_count>39</comment_count>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2012-03-05 11:23:35 -0800</bug_when>
    <thetext>(In reply to comment #38)
&gt; Apparently this caused a regression: https://bugs.webkit.org/show_bug.cgi?id=76564

Wrong bug link</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570872</commentid>
    <comment_count>40</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-03-05 11:24:39 -0800</bug_when>
    <thetext>(In reply to comment #39)
&gt; (In reply to comment #38)
&gt; &gt; Apparently this caused a regression: https://bugs.webkit.org/show_bug.cgi?id=76564
&gt; 
&gt; Wrong bug link

/me whistles nonchalantly

I meant https://bugs.webkit.org/show_bug.cgi?id=79325 of course ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573371</commentid>
    <comment_count>41</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-03-07 16:54:38 -0800</bug_when>
    <thetext>This also caused bug 80551.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122979</attachid>
            <date>2012-01-18 13:23:01 -0800</date>
            <delta_ts>2012-02-09 10:46:13 -0800</delta_ts>
            <desc>First draft</desc>
            <filename>cachexhrs.txt</filename>
            <type>text/plain</type>
            <size>6312</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNTIwMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDEyLTAxLTE3ICBOYXRlIENo
YXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV1c2UgQ2FjaGVkUmF3UmVz
b3VyY2VzIChlLmcuLCBYSFJzKSB0aGF0IGFyZQorICAgICAgICBzdG9yZWQgaW4gTWVtb3J5Q2Fj
aGUgKHdoZW4gYXBwcm9wcmlhdGUpLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzY1NjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGZ1bmN0aW9uYWxpdHkgY2hhbmdlIGludGVu
ZGVkLgorCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNhY2hlZFJhd1Jlc291cmNlQ2FsbGJhY2s6OnNjaGVkdWxlKTogQ3Jl
YXRlcyBhIHNlbGYtY29udGFpbmVkCisgICAgICAgICAgICBjYWxsYmFjayBmb3IgQ2FjaGVkUmF3
UmVzb3VyY2UgY2FjaGUgaGl0cy4gSXQgYWxzbyBlbmZvcmNlcyBsaWZldGltZQorICAgICAgICAg
ICAgZ3VhcmFudGVlcyBmb3IgdGhlIENhY2hlZFJhd1Jlc291cmNlLCBlbnN1cmluZyBpdCB3b24n
dCBiZSBkZWxldGVkCisgICAgICAgICAgICBiZWZvcmUgdGhlIHRpbWVyIGZpcmVzLgorICAgICAg
ICAoV2ViQ29yZTo6Q2FjaGVkUmF3UmVzb3VyY2U6OnNlbmRDYWxsYmFja3MpOiBDYWxsZWQgYnkg
Q2FjaGVkUmF3UmVzb3VyY2VDYWxsYmFjaworICAgICAgICAgICAgd2hlbiB0aGUgdGltZXIgZmly
ZXMuCisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSYXdSZXNvdXJjZTo6ZGlkQWRkQ2xpZW50KTog
RG9uJ3QgcmVwb3J0IGEgY2FjaGUgaGl0CisgICAgICAgICAgICBpbW1lZGlhdGVseSwgc2luY2Ug
dGhpcyBicmVha3MgdGhlIHdlYi4gU2NoZWR1bGUgYSBjYWxsYmFjayBpbnN0ZWFkLgorICAgICAg
ICAoV2ViQ29yZTo6Q2FjaGVkUmF3UmVzb3VyY2U6OmNhblJldXNlKTogUHJvdmlkZSBzb21lIGJh
c2ljIHJ1bGVzIGZvciB3aGVuCisgICAgICAgICAgICBhIENhY2hlZFJhd1Jlc291cmNlIGNhbiBi
ZSByZS11c2VkLgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5oOgor
ICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6ZGV0ZXJtaW5lUmV2YWxpZGF0aW9uUG9s
aWN5KTogRG9uJ3QgYXV0b21hdGljYWxseQorICAgICAgICAgICAgUmVsb2FkIENhY2hlZFJhd1Jl
c291cmNlcywgYWJkIGFkZCBhIGNoZWNrIGZvciB3aGV0aGVyIHRoaXMgcmVxdWVzdCBoYXMgYWxy
ZWFkeQorICAgICAgICAgICAgYmVlbiBtYWRlIGNvbmRpdGlvbmFsLgorCiAyMDEyLTAxLTE3ICBB
bmRyZWFzIEtsaW5nICA8YXdlc29tZWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBTcGFjZVNw
bGl0U3RyaW5nOiBTaGFyZSBlcXVpdmFsZW50IHN0cmluZyBwaWVjZSB2ZWN0b3JzLgpJbmRleDog
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmgJKHJl
dmlzaW9uIDEwNTE2NikKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdS
ZXNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw5IEBACiAgICAgLy8gRklYTUU6
IFRoaXMgaXMgZXhwb3NlZCBmb3IgdGhlIElucHNlY3Rvckluc3RydW1lbnRhdGlvbiBmb3IgcHJl
ZmxpZ2h0cyBpbiBEb2N1bWVudFRocmVhZGFibGVMb2FkZXIuIEl0J3MgYWxzbyByZWFsbHkgbGFt
ZS4KICAgICB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIoKSBjb25zdDsKIAorICAgIGJvb2wgY2Fu
UmV1c2UoKSBjb25zdDsKKyAgICB2b2lkIHNlbmRDYWxsYmFja3MoQ2FjaGVkUmVzb3VyY2VDbGll
bnQqKTsKKwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZGlkQWRkQ2xpZW50KENhY2hlZFJl
c291cmNlQ2xpZW50Kik7CiAgICAgdmlydHVhbCB2b2lkIGRhdGEoUGFzc1JlZlB0cjxTaGFyZWRC
dWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcAkocmV2aXNp
b24gMTA1MTY2KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNl
TG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIzLDEwICs1MjMsMTUgQEAKICAgICAgICAg
cmV0dXJuIFJlbG9hZDsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogQ3VycmVudGx5LCBhbGwgQ2Fj
aGVkUmF3UmVzb3VyY2VzIGFyZSBhbHdheXMgcmVsb2FkZWQuIFNvbWUgb2YgdGhlbSBzaG91bGQg
YmUgY2FjaGVhYmxlLgotICAgIGlmIChleGlzdGluZ1Jlc291cmNlLT50eXBlKCkgPT0gQ2FjaGVk
UmVzb3VyY2U6OlJhd1Jlc291cmNlKQorICAgIGlmIChleGlzdGluZ1Jlc291cmNlLT50eXBlKCkg
PT0gQ2FjaGVkUmVzb3VyY2U6OlJhd1Jlc291cmNlICYmICFzdGF0aWNfY2FzdDxDYWNoZWRSYXdS
ZXNvdXJjZSo+KGV4aXN0aW5nUmVzb3VyY2UpLT5jYW5SZXVzZSgpKQogICAgICAgICByZXR1cm4g
UmVsb2FkOwogICAgIAorICAgIC8vIENlcnRhaW4gcmVxdWVzdHMgKGUuZy4sIFhIUnMpIG1pZ2h0
IGhhdmUgbWFudWFsbHkgc2V0IGhlYWRlcnMgdGhhdCByZXF1aXJlIHJldmFsaWRhdGlvbi4KKyAg
ICAvLyBJbiB0aGVvcnksIHRoaXMgc2hvdWxkIGJlIGEgUmV2YWxpZGF0ZSBjYXNlLiBJbiBwcmFj
dGljZSwgdGhlIE1lbW9yeUNhY2hlIHJldmFsaWRhdGlvbiBwYXRoIGFzc3VtZXMgYSB3aG9sZSBi
dW5jaAorICAgIC8vIG9mIHRoaW5ncyBhYm91dCBob3cgcmV2YWxpZGF0aW9uIHdvcmtzIHRoYXQg
bWFudWFsIGhlYWRlcnMgdmlvbGF0ZSwgc28gcHVudCB0byBSZWxvYWQgaW5zdGVhZC4KKyAgICBp
ZiAocmVxdWVzdC5pc0NvbmRpdGlvbmFsKCkpCisgICAgICAgIHJldHVybiBSZWxvYWQ7CisgICAg
CiAgICAgLy8gRG9uJ3QgcmVsb2FkIHJlc291cmNlcyB3aGlsZSBwYXN0aW5nLgogICAgIGlmICht
X2FsbG93U3RhbGVSZXNvdXJjZXMpCiAgICAgICAgIHJldHVybiBVc2U7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAJKHJldmlz
aW9uIDEwNTE2NikKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNv
dXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDEzICs2Nyw1MyBAQAogICAgIENhY2hlZFJl
c291cmNlOjpkYXRhKG1fZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKIH0KIAorY2xhc3MgQ2FjaGVk
UmF3UmVzb3VyY2VDYWxsYmFjayB7CitwdWJsaWM6ICAgIAorICAgIHN0YXRpYyB2b2lkIHNjaGVk
dWxlKENhY2hlZFJhd1Jlc291cmNlKiByZXNvdXJjZSwgQ2FjaGVkUmVzb3VyY2VDbGllbnQqIGNs
aWVudCkKKyAgICB7CisgICAgICAgIG5ldyBDYWNoZWRSYXdSZXNvdXJjZUNhbGxiYWNrKHJlc291
cmNlLCBjbGllbnQpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDYWNoZWRSYXdSZXNvdXJjZUNh
bGxiYWNrKENhY2hlZFJhd1Jlc291cmNlKiByZXNvdXJjZSwgQ2FjaGVkUmVzb3VyY2VDbGllbnQq
IGNsaWVudCkKKyAgICAgICAgOiBtX3Jlc291cmNlKHJlc291cmNlKQorICAgICAgICAsIG1fY2xp
ZW50KGNsaWVudCkKKyAgICAgICAgLCBtX2NhbGxiYWNrVGltZXIodGhpcywgJkNhY2hlZFJhd1Jl
c291cmNlQ2FsbGJhY2s6OnRpbWVyRmlyZWQpCisgICAgeworICAgICAgICBtX2NhbGxiYWNrVGlt
ZXIuc3RhcnRPbmVTaG90KDApOworICAgIH0KKworICAgIHZvaWQgdGltZXJGaXJlZChUaW1lcjxD
YWNoZWRSYXdSZXNvdXJjZUNhbGxiYWNrPiopCisgICAgeworICAgICAgICBtX3Jlc291cmNlLT5z
ZW5kQ2FsbGJhY2tzKG1fY2xpZW50KTsKKyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgfQorICAg
IENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJhd1Jlc291cmNlPiBtX3Jlc291cmNlOworICAg
IENhY2hlZFJlc291cmNlQ2xpZW50KiBtX2NsaWVudDsKKyAgICBUaW1lcjxDYWNoZWRSYXdSZXNv
dXJjZUNhbGxiYWNrPiBtX2NhbGxiYWNrVGltZXI7Cit9OworCit2b2lkIENhY2hlZFJhd1Jlc291
cmNlOjpzZW5kQ2FsbGJhY2tzKENhY2hlZFJlc291cmNlQ2xpZW50KiBjKQoreworICAgIGlmICgh
bV9jbGllbnRzLmNvbnRhaW5zKGMpKQorICAgICAgICByZXR1cm47CisgICAgc3RhdGljX2Nhc3Q8
Q2FjaGVkUmF3UmVzb3VyY2VDbGllbnQqPihjKS0+cmVzcG9uc2VSZWNlaXZlZCh0aGlzLCBtX3Jl
c3BvbnNlKTsKKyAgICBpZiAoIW1fY2xpZW50cy5jb250YWlucyhjKSB8fCAhbV9kYXRhKQorICAg
ICAgICByZXR1cm47CisgICAgc3RhdGljX2Nhc3Q8Q2FjaGVkUmF3UmVzb3VyY2VDbGllbnQqPihj
KS0+ZGF0YVJlY2VpdmVkKHRoaXMsIG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPnNpemUoKSk7Cisg
ICAgaWYgKCFtX2NsaWVudHMuY29udGFpbnMoYykgfHwgaXNMb2FkaW5nKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBzdGF0aWNfY2FzdDxDYWNoZWRSYXdSZXNvdXJjZUNsaWVudCo+KGMpLT5ub3Rp
ZnlGaW5pc2hlZCh0aGlzKTsKK30KKwogdm9pZCBDYWNoZWRSYXdSZXNvdXJjZTo6ZGlkQWRkQ2xp
ZW50KENhY2hlZFJlc291cmNlQ2xpZW50KiBjKQogewotICAgIGlmIChtX2RhdGEpIHsKLSAgICAg
ICAgc3RhdGljX2Nhc3Q8Q2FjaGVkUmF3UmVzb3VyY2VDbGllbnQqPihjKS0+cmVzcG9uc2VSZWNl
aXZlZCh0aGlzLCBtX3Jlc3BvbnNlKTsKLSAgICAgICAgc3RhdGljX2Nhc3Q8Q2FjaGVkUmF3UmVz
b3VyY2VDbGllbnQqPihjKS0+ZGF0YVJlY2VpdmVkKHRoaXMsIG1fZGF0YS0+ZGF0YSgpLCBtX2Rh
dGEtPnNpemUoKSk7Ci0gICAgfQotICAgIENhY2hlZFJlc291cmNlOjpkaWRBZGRDbGllbnQoYyk7
CisgICAgLy8gQ2FjaGVkUmF3UmVzb3VyY2VDbGllbnRzIChlc3BlY2lhbGx5IFhIUnMpIGRvIGNy
YXp5IHRoaW5ncyBpZiBhbiBhc3luY2hyb25vdXMgbG9hZCByZXR1cm5zCisgICAgLy8gc3luY2hy
b25vdXNseSAoZS5nLiwgc2NyaXB0cyBtYXkgbm90IGhhdmUgc2V0IGFsbCB0aGUgc3RhdGUgdGhl
eSBuZWVkIHRvIGhhbmRsZSB0aGUgbG9hZCkuCisgICAgLy8gVGhlcmVmb3JlLCByYXRoZXIgdGhh
biBpbW1lZGlhdGVseSBzZW5kaW5nIGNhbGxiYWNrcyBvbiBhIGNhY2hlIGhpdCBsaWtlIG90aGVy
IENhY2hlZFJlc291cmNlcywKKyAgICAvLyB3ZSBzY2hlZHVsZSB0aGUgY2FsbGJhY2tzIGFuZCBl
bnN1cmUgd2UgbmV2ZXIgZmluaXNoIHN5bmNocm9ub3VzbHkuCisgICAgaWYgKCFtX3Jlc3BvbnNl
LmlzTnVsbCgpKQorICAgICAgICBDYWNoZWRSYXdSZXNvdXJjZUNhbGxiYWNrOjpzY2hlZHVsZSh0
aGlzLCBjKTsKIH0KIAogdm9pZCBDYWNoZWRSYXdSZXNvdXJjZTo6YWxsQ2xpZW50c1JlbW92ZWQo
KQpAQCAtMTE4LDQgKzE1OCwxNSBAQAogICAgIHJldHVybiBtX2xvYWRlciA/IG1fbG9hZGVyLT5p
ZGVudGlmaWVyKCkgOiAwOwogfQogCitib29sIENhY2hlZFJhd1Jlc291cmNlOjpjYW5SZXVzZSgp
IGNvbnN0Cit7CisgICAgaWYgKG1fb3B0aW9ucy5zaG91bGRCdWZmZXJEYXRhID09IERvTm90QnVm
ZmVyRGF0YSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1fcmVzb3VyY2VSZXF1
ZXN0Lmh0dHBNZXRob2QoKSAhPSAiR0VUIikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
cmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>
<flag name="review"
          id="123916"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126329</attachid>
            <date>2012-02-09 10:46:13 -0800</date>
            <delta_ts>2012-02-09 14:20:42 -0800</delta_ts>
            <desc>Second attempt</desc>
            <filename>cachexhrs2.txt</filename>
            <type>text/plain</type>
            <size>11056</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL25ldHdvcmsvbmV0d29yay1k
aXNhYmxlLWNhY2hlLXhocnMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL2luc3BlY3Rvci9uZXR3b3JrL25ldHdvcmstZGlzYWJsZS1jYWNoZS14aHJzLmh0bWwJKHJl
dmlzaW9uIDEwNTgzMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL25ldHdv
cmsvbmV0d29yay1kaXNhYmxlLWNhY2hlLXhocnMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtODMs
OCArODMsMTAgQEAKICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQocmVzb3VyY2UxLnVy
bCk7CiAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KHJlc291cmNlMi51cmwpOwogICAg
ICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdChyZXNvdXJjZTMudXJsKTsKLSAgICAgICAgSW5z
cGVjdG9yVGVzdC5hc3NlcnRUcnVlKHJlc291cmNlMS5jb250ZW50ID09PSByZXNvdXJjZTIuY29u
dGVudCwgIkZpcnN0IGFuZCBzZWNvbmQgcmVzb3VyY2VzIGFyZSBlcXVhbCIpOwotICAgICAgICBJ
bnNwZWN0b3JUZXN0LmFzc2VydFRydWUocmVzb3VyY2UyLmNvbnRlbnQgIT09IHJlc291cmNlMy5j
b250ZW50LCAiU2Vjb25kIGFuZCB0aGlyZCByZXNvdXJjZXMgZGlmZmVyIik7CisgICAgICAgIElu
c3BlY3RvclRlc3QuYXNzZXJ0VHJ1ZShyZXNvdXJjZTEuY29udGVudCAhPT0gcmVzb3VyY2UzLmNv
bnRlbnQsICJGaXJzdCBhbmQgdGhpcmQgcmVzb3VyY2VzIGRpZmZlciIpOworICAgICAgICBJbnNw
ZWN0b3JUZXN0LmFzc2VydFRydWUocmVzb3VyY2UyLnN0YXR1c0NvZGUgPT0gMzA0LCAiU2Vjb25k
IHJlc291cmNlIHNob3VsZCByZWNlaXZlIGEgMzA0IHJlc3BvbnNlIik7CisgICAgICAgIEluc3Bl
Y3RvclRlc3QuYXNzZXJ0VHJ1ZShyZXNvdXJjZTIuY29udGVudC5sZW5ndGggPT0gMCwgIlNlY29u
ZCByZXNvdXJjZSBzaG91bGQgaGF2ZSBubyBjb250ZW50IGR1ZSB0byAzMDQiKTsKKyAgICAgICAg
SW5zcGVjdG9yVGVzdC5hc3NlcnRUcnVlKHJlc291cmNlMy5zdGF0dXNDb2RlID09IDIwMCwgIlRo
aXJkIHJlc291cmNlIHNob3VsZCByZWNlaXZlIGEgMjAwIHJlc3BvbnNlIGR1ZSB0byBkaXNhYmxp
bmcgY2FjaGUiKTsKICAgICAgICAgTmV0d29ya0FnZW50LnNldENhY2hlRGlzYWJsZWQoZmFsc2Us
IHN0ZXA1KTsKICAgICB9CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNzI1OSkKKysrIExheW91dFRl
c3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEyLTAyLTA5
ICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgVGVzdCB1cGRh
dGUgZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjU2NC4KKwor
ICAgICAgICBBIHN1Y2Nlc3NmdWwgcmV2YWxpZGF0aW9uIHdpbGwgbm93IHJldHVybiBhIDMwNCB3
aXRoIGVtcHR5IGNvbnRlbnQKKyAgICAgICAgZm9yIFhIUnMgKHByZXZpb3VzbHksIHdlIG5ldmVy
IHRyaWVkIHRvIHJldmFsaWRhdGUpLiBDaGFuZ2UgZXhwZWN0ZWQKKyAgICAgICAgb3V0cHV0IG9m
IG5ldHdvcmstZGlzYWJsZS1jYWNoZS14aHJzLmh0bWwgYWNjb3JkaW5nbHkuCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL2luc3Bl
Y3Rvci9uZXR3b3JrL25ldHdvcmstZGlzYWJsZS1jYWNoZS14aHJzLmh0bWw6CisKIDIwMTItMDIt
MDkgIE1pa2UgTGF3dGhlciAgPG1pa2VsYXd0aGVyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBD
U1MzIGNhbGMoKSAtIHJlbW92ZSBtb2QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNzI1OSkK
KysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1
IEBACisyMDEyLTAyLTA5ICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV1c2UgQ2FjaGVkUmF3UmVzb3VyY2VzIChlLmcuLCBYSFJzKSB0aGF0IGFyZSBzdG9y
ZWQKKyAgICAgICAgaW4gdGhlIE1lbW9yeUNhY2hlIHdoZW4gYXBwcm9wcmlhdGUuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjU2NAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgZXhw
ZWN0ZWQgYmVoYXZpb3IgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclJlc291cmNlQWdlbnQ6OnNldENhY2hlRGlzYWJsZWQpOiBJbW1lZGlhdGVseQorICAg
ICAgICAgICAgZXZpY3QgcmVzb3VyY2VzLCByYXRoZXIgdGhhbiB3YWl0aW5nIGZvciBuYXZpZ2F0
aW9uLCBzaW5jZSBYSFJzCisgICAgICAgICAgICBzaG91bGQgaGl0IHRoZSBjYWNoZSBpZiBpdCBo
YXMgYmVlbiBkaXNhYmxlZC4KKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3Vy
Y2UuY3BwOgorICAgICAgICAoQ2FjaGVkUmF3UmVzb3VyY2VDYWxsYmFjayk6IEVuY2Fwc3VsYXRl
cyB0aGUgYXN5bmMgY2FsbGJhY2sgZm9yCisgICAgICAgICAgICBhIGNhY2hlIGhpdCBmb3IgQ2Fj
aGVkUmF3UmVzb3VyY2VzCisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSYXdSZXNvdXJjZTo6c2Vu
ZENhbGxiYWNrcyk6IERvIHRoZSB3b3JrIGRlZmVyZWQgaW4gZGlkQWRkQ2xpZW50LgorICAgICAg
ICAoV2ViQ29yZTo6Q2FjaGVkUmF3UmVzb3VyY2U6OmRpZEFkZENsaWVudCk6IFNjaGVkdWxlZCBh
IENhY2hlZFJhd1Jlc291cmNlQ2FsbGJhY2sgaWYKKyAgICAgICAgICAgIHdlIGFscmVhZHkgaGF2
ZSBhIHJlc3BvbnNlLCBzaW5jZSBhc3luYyBYSFJzIG1heSBub3QgcGxheSBuaWNlbHkgd2l0aCBy
ZWNlaXZpbmcKKyAgICAgICAgICAgIHRoZWlyIGRhdGEgc3luY2hyb25vdXNseS4KKyAgICAgICAg
KFdlYkNvcmU6OkNhY2hlZFJhd1Jlc291cmNlOjpyZW1vdmVDbGllbnQpOiBFbnN1cmUgd2UgY2Fu
Y2VsIGEgY2FsbGJhY2sgdG8gYSBjbGllbnQgaWYKKyAgICAgICAgICAgIGl0IHJlbW92ZXMgaXRz
ZWxmLgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmF3UmVzb3VyY2U6OmNhblJldXNlKTogUHJv
dmlkZSBzb21lIGJhc2ljIHJ1bGVzIGZvciB3aGVuIGEKKyAgICAgICAgICAgIENhY2hlZFJhd1Jl
c291cmNlIGNhbiBiZSByZXVzZWQuCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jl
c291cmNlLmg6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmg6CisgICAg
ICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpkZXRlcm1pbmVSZXZhbGlkYXRpb25Qb2xpY3kp
OiBEb24ndCBhdXRvbWF0aWNhbGx5IHJlbG9hZAorICAgICAgICAgICAgQ2FjaGVkUmF3UmVzb3Vy
Y2VzLCBhbmQgYWRkIGEgY2hlY2sgZm9yIHdoZXRoZXIgdGhpcyByZXF1ZXN0IGhhcyBhbHJlYWR5
IGJlZW4KKyAgICAgICAgICAgIG1hZGUgY29uZGl0aW9uYWwuCisKIDIwMTItMDItMDkgIE1pa2Ug
TGF3dGhlciAgPG1pa2VsYXd0aGVyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBDU1MzIGNhbGMo
KSAtIHJlbW92ZSBtb2QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JS
ZXNvdXJjZUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAJKHJldmlzaW9uIDEwNTgzMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTI5LDYgKzUyOSw4IEBACiB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OnNldENh
Y2hlRGlzYWJsZWQoRXJyb3JTdHJpbmcqLCBib29sIGNhY2hlRGlzYWJsZWQpCiB7CiAgICAgbV9z
dGF0ZS0+c2V0Qm9vbGVhbihSZXNvdXJjZUFnZW50U3RhdGU6OmNhY2hlRGlzYWJsZWQsIGNhY2hl
RGlzYWJsZWQpOworICAgIGlmIChjYWNoZURpc2FibGVkKQorICAgICAgICBtZW1vcnlDYWNoZSgp
LT5ldmljdFJlc291cmNlcygpOwogfQogCiB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6Om1h
aW5GcmFtZU5hdmlnYXRlZChEb2N1bWVudExvYWRlciogbG9hZGVyKQpJbmRleDogU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmgJKHJldmlzaW9uIDEw
NTgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw4IEBACiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3Vy
Y2VDbGllbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQ2FjaGVkUmF3UmVzb3Vy
Y2VDYWxsYmFjazsKK2NsYXNzIENhY2hlZFJhd1Jlc291cmNlQ2xpZW50OwogCiBjbGFzcyBDYWNo
ZWRSYXdSZXNvdXJjZSA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZSB7CiBwdWJsaWM6CkBAIC00MCw2
ICs0MiwxMSBAQAogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGV4cG9zZWQgZm9yIHRoZSBJbnBzZWN0
b3JJbnN0cnVtZW50YXRpb24gZm9yIHByZWZsaWdodHMgaW4gRG9jdW1lbnRUaHJlYWRhYmxlTG9h
ZGVyLiBJdCdzIGFsc28gcmVhbGx5IGxhbWUuCiAgICAgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
KCkgY29uc3Q7CiAKKyAgICBib29sIGNhblJldXNlKCkgY29uc3Q7CisgICAgdm9pZCBzZW5kQ2Fs
bGJhY2tzKENhY2hlZFJhd1Jlc291cmNlQ2xpZW50Kik7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVt
b3ZlQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50Kik7CisKIHByaXZhdGU6CiAgICAgdmlydHVh
bCB2b2lkIGRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCopOwogICAgIHZpcnR1YWwg
dm9pZCBkYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBib29sIGFsbERhdGFSZWNl
aXZlZCk7CkBAIC01NSw2ICs2Miw3IEBACiAjZW5kaWYKIAogICAgIHNpemVfdCBtX2RhdGFMZW5n
dGg7CisgICAgSGFzaE1hcDxDYWNoZWRSYXdSZXNvdXJjZUNsaWVudCosIENhY2hlZFJhd1Jlc291
cmNlQ2FsbGJhY2sqPiBtX2NsaWVudHNBd2FpdGluZ0NhbGxiYWNrOwogfTsKIAogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRl
ci5jcHAJKHJldmlzaW9uIDEwNTgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyMyw4ICs1MjMsMTMg
QEAKICAgICAgICAgcmV0dXJuIFJlbG9hZDsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogQ3VycmVu
dGx5LCBhbGwgQ2FjaGVkUmF3UmVzb3VyY2VzIGFyZSBhbHdheXMgcmVsb2FkZWQuIFNvbWUgb2Yg
dGhlbSBzaG91bGQgYmUgY2FjaGVhYmxlLgotICAgIGlmIChleGlzdGluZ1Jlc291cmNlLT50eXBl
KCkgPT0gQ2FjaGVkUmVzb3VyY2U6OlJhd1Jlc291cmNlKQorICAgIGlmIChleGlzdGluZ1Jlc291
cmNlLT50eXBlKCkgPT0gQ2FjaGVkUmVzb3VyY2U6OlJhd1Jlc291cmNlICYmICFzdGF0aWNfY2Fz
dDxDYWNoZWRSYXdSZXNvdXJjZSo+KGV4aXN0aW5nUmVzb3VyY2UpLT5jYW5SZXVzZSgpKQorICAg
ICAgICAgcmV0dXJuIFJlbG9hZDsKKworICAgIC8vIENlcnRhaW4gcmVxdWVzdHMgKGUuZy4sIFhI
UnMpIG1pZ2h0IGhhdmUgbWFudWFsbHkgc2V0IGhlYWRlcnMgdGhhdCByZXF1aXJlIHJldmFsaWRh
dGlvbi4KKyAgICAvLyBJbiB0aGVvcnksIHRoaXMgc2hvdWxkIGJlIGEgUmV2YWxpZGF0ZSBjYXNl
LiBJbiBwcmFjdGljZSwgdGhlIE1lbW9yeUNhY2hlIHJldmFsaWRhdGlvbiBwYXRoIGFzc3VtZXMg
YSB3aG9sZSBidW5jaAorICAgIC8vIG9mIHRoaW5ncyBhYm91dCBob3cgcmV2YWxpZGF0aW9uIHdv
cmtzIHRoYXQgbWFudWFsIGhlYWRlcnMgdmlvbGF0ZSwgc28gcHVudCB0byBSZWxvYWQgaW5zdGVh
ZC4KKyAgICBpZiAocmVxdWVzdC5pc0NvbmRpdGlvbmFsKCkpCiAgICAgICAgIHJldHVybiBSZWxv
YWQ7CiAgICAgCiAgICAgLy8gRG9uJ3QgcmVsb2FkIHJlc291cmNlcyB3aGlsZSBwYXN0aW5nLgpJ
bmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmgJKHJl
dmlzaW9uIDEwNTgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNv
dXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNyArMTEwLDcgQEAKICAgICB2b2lkIHNldExv
YWRQcmlvcml0eShSZXNvdXJjZUxvYWRQcmlvcml0eSk7CiAKICAgICB2b2lkIGFkZENsaWVudChD
YWNoZWRSZXNvdXJjZUNsaWVudCopOwotICAgIHZvaWQgcmVtb3ZlQ2xpZW50KENhY2hlZFJlc291
cmNlQ2xpZW50Kik7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudChDYWNoZWRSZXNvdXJj
ZUNsaWVudCopOwogICAgIGJvb2wgaGFzQ2xpZW50cygpIGNvbnN0IHsgcmV0dXJuICFtX2NsaWVu
dHMuaXNFbXB0eSgpOyB9CiAgICAgdm9pZCBkZWxldGVJZlBvc3NpYmxlKCk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmNwcAko
cmV2aXNpb24gMTA1ODMwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJh
d1Jlc291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsMTQgKzY3LDc5IEBACiAgICAgQ2Fj
aGVkUmVzb3VyY2U6OmRhdGEobV9kYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwogfQogCitjbGFzcyBD
YWNoZWRSYXdSZXNvdXJjZUNhbGxiYWNrIHsKK3B1YmxpYzogICAgCisgICAgc3RhdGljIENhY2hl
ZFJhd1Jlc291cmNlQ2FsbGJhY2sqIHNjaGVkdWxlKENhY2hlZFJhd1Jlc291cmNlKiByZXNvdXJj
ZSwgQ2FjaGVkUmF3UmVzb3VyY2VDbGllbnQqIGNsaWVudCkKKyAgICB7CisgICAgICAgIHJldHVy
biBuZXcgQ2FjaGVkUmF3UmVzb3VyY2VDYWxsYmFjayhyZXNvdXJjZSwgY2xpZW50KTsKKyAgICB9
CisKKyAgICB2b2lkIGNhbmNlbCgpCisgICAgeworICAgICAgICBpZiAobV9jYWxsYmFja1RpbWVy
LmlzQWN0aXZlKCkpCisgICAgICAgICAgICBtX2NhbGxiYWNrVGltZXIuc3RvcCgpOworICAgICAg
ICBtX3RoaXMuY2xlYXIoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ2FjaGVkUmF3UmVzb3Vy
Y2VDYWxsYmFjayhDYWNoZWRSYXdSZXNvdXJjZSogcmVzb3VyY2UsIENhY2hlZFJhd1Jlc291cmNl
Q2xpZW50KiBjbGllbnQpCisgICAgICAgIDogbV9yZXNvdXJjZShyZXNvdXJjZSkKKyAgICAgICAg
LCBtX2NsaWVudChjbGllbnQpCisgICAgICAgICwgbV9jYWxsYmFja1RpbWVyKHRoaXMsICZDYWNo
ZWRSYXdSZXNvdXJjZUNhbGxiYWNrOjp0aW1lckZpcmVkKQorICAgICAgICAsIG1fdGhpcyhhZG9w
dFB0cih0aGlzKSkKKyAgICB7CisgICAgICAgIG1fY2FsbGJhY2tUaW1lci5zdGFydE9uZVNob3Qo
MCk7CisgICAgfQorCisgICAgdm9pZCB0aW1lckZpcmVkKFRpbWVyPENhY2hlZFJhd1Jlc291cmNl
Q2FsbGJhY2s+KikKKyAgICB7CisgICAgICAgIG1fcmVzb3VyY2UtPnNlbmRDYWxsYmFja3MobV9j
bGllbnQpOworICAgICAgICBtX3RoaXMuY2xlYXIoKTsKKyAgICB9CisgICAgQ2FjaGVkUmVzb3Vy
Y2VIYW5kbGU8Q2FjaGVkUmF3UmVzb3VyY2U+IG1fcmVzb3VyY2U7CisgICAgQ2FjaGVkUmF3UmVz
b3VyY2VDbGllbnQqIG1fY2xpZW50OworICAgIFRpbWVyPENhY2hlZFJhd1Jlc291cmNlQ2FsbGJh
Y2s+IG1fY2FsbGJhY2tUaW1lcjsKKyAgICBPd25QdHI8Q2FjaGVkUmF3UmVzb3VyY2VDYWxsYmFj
az4gbV90aGlzOworfTsKKwordm9pZCBDYWNoZWRSYXdSZXNvdXJjZTo6c2VuZENhbGxiYWNrcyhD
YWNoZWRSYXdSZXNvdXJjZUNsaWVudCogYykKK3sKKyAgICBpZiAoIW1fY2xpZW50c0F3YWl0aW5n
Q2FsbGJhY2suY29udGFpbnMoYykpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NsaWVudHNBd2Fp
dGluZ0NhbGxiYWNrLnJlbW92ZShjKTsKKyAgICBjLT5yZXNwb25zZVJlY2VpdmVkKHRoaXMsIG1f
cmVzcG9uc2UpOworICAgIGlmICghbV9jbGllbnRzLmNvbnRhaW5zKGMpIHx8ICFtX2RhdGEpCisg
ICAgICAgIHJldHVybjsKKyAgICBjLT5kYXRhUmVjZWl2ZWQodGhpcywgbV9kYXRhLT5kYXRhKCks
IG1fZGF0YS0+c2l6ZSgpKTsKKyAgICBpZiAoIW1fY2xpZW50cy5jb250YWlucyhjKSB8fCBpc0xv
YWRpbmcoKSkKKyAgICAgICByZXR1cm47CisgICAgYy0+bm90aWZ5RmluaXNoZWQodGhpcyk7Cit9
CisKIHZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6OmRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNs
aWVudCogYykKIHsKLSAgICBpZiAobV9kYXRhKSB7Ci0gICAgICAgIHN0YXRpY19jYXN0PENhY2hl
ZFJhd1Jlc291cmNlQ2xpZW50Kj4oYyktPnJlc3BvbnNlUmVjZWl2ZWQodGhpcywgbV9yZXNwb25z
ZSk7Ci0gICAgICAgIHN0YXRpY19jYXN0PENhY2hlZFJhd1Jlc291cmNlQ2xpZW50Kj4oYyktPmRh
dGFSZWNlaXZlZCh0aGlzLCBtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5zaXplKCkpOwotICAgIH0K
LSAgICBDYWNoZWRSZXNvdXJjZTo6ZGlkQWRkQ2xpZW50KGMpOworICAgIGlmIChtX3Jlc3BvbnNl
LmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBDYWNoZWRSYXdSZXNvdXJjZUNs
aWVudHMgKGVzcGVjaWFsbHkgWEhScykgZG8gY3JhenkgdGhpbmdzIGlmIGFuIGFzeW5jaHJvbm91
cyBsb2FkIHJldHVybnMKKyAgICAvLyBzeW5jaHJvbm91c2x5IChlLmcuLCBzY3JpcHRzIG1heSBu
b3QgaGF2ZSBzZXQgYWxsIHRoZSBzdGF0ZSB0aGV5IG5lZWQgdG8gaGFuZGxlIHRoZSBsb2FkKS4K
KyAgICAvLyBUaGVyZWZvcmUsIHJhdGhlciB0aGFuIGltbWVkaWF0ZWx5IHNlbmRpbmcgY2FsbGJh
Y2tzIG9uIGEgY2FjaGUgaGl0IGxpa2Ugb3RoZXIgQ2FjaGVkUmVzb3VyY2VzLAorICAgIC8vIHdl
IHNjaGVkdWxlIHRoZSBjYWxsYmFja3MgYW5kIGVuc3VyZSB3ZSBuZXZlciBmaW5pc2ggc3luY2hy
b25vdXNseS4KKyAgICAvLyBGSVhNRTogV2UgYWxzbyB1c2UgYW4gYXN5bmMgY2FsbGJhY2sgb24g
MzA0IGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBzdWZmaWNpZW50IGluZm9ybWF0aW9uIHRvCisgICAg
Ly8ga25vdyB3aGV0aGVyIHdlIGFyZSByZWNlaXZpbmcgbmV3IGNsaWVudHMgYmVjYXVzZSBvZiBy
ZXZhbGlkYXRpb24gb3IgcHVyZSByZXVzZS4gUGVyaGFwcyBtb3ZlCisgICAgLy8gdGhpcyBsb2dp
YyB0byBDYWNoZWRSZXNvdXJjZT8KKyAgICBDYWNoZWRSYXdSZXNvdXJjZUNsaWVudCogY2xpZW50
ID0gc3RhdGljX2Nhc3Q8Q2FjaGVkUmF3UmVzb3VyY2VDbGllbnQqPihjKTsKKyAgICBBU1NFUlQo
IW1fY2xpZW50c0F3YWl0aW5nQ2FsbGJhY2suY29udGFpbnMoY2xpZW50KSk7CisgICAgbV9jbGll
bnRzQXdhaXRpbmdDYWxsYmFjay5hZGQoY2xpZW50LCBDYWNoZWRSYXdSZXNvdXJjZUNhbGxiYWNr
OjpzY2hlZHVsZSh0aGlzLCBjbGllbnQpKTsKIH0KKyAKK3ZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6
OnJlbW92ZUNsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCogYykKK3sKKyAgICBDYWNoZWRSYXdS
ZXNvdXJjZUNhbGxiYWNrKiBjYWxsYmFjayA9IG1fY2xpZW50c0F3YWl0aW5nQ2FsbGJhY2sudGFr
ZShzdGF0aWNfY2FzdDxDYWNoZWRSYXdSZXNvdXJjZUNsaWVudCo+KGMpKTsKKyAgICBpZiAoY2Fs
bGJhY2spCisgICAgICAgIGNhbGxiYWNrLT5jYW5jZWwoKTsKKyAgICBDYWNoZWRSZXNvdXJjZTo6
cmVtb3ZlQ2xpZW50KGMpOworfQogCiB2b2lkIENhY2hlZFJhd1Jlc291cmNlOjphbGxDbGllbnRz
UmVtb3ZlZCgpCiB7CkBAIC0xMTgsNCArMTgzLDE2IEBACiAgICAgcmV0dXJuIG1fbG9hZGVyID8g
bV9sb2FkZXItPmlkZW50aWZpZXIoKSA6IDA7CiB9CiAKK2Jvb2wgQ2FjaGVkUmF3UmVzb3VyY2U6
OmNhblJldXNlKCkgY29uc3QKK3sKKyAgICBpZiAobV9vcHRpb25zLnNob3VsZEJ1ZmZlckRhdGEg
PT0gRG9Ob3RCdWZmZXJEYXRhKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9y
ZXNvdXJjZVJlcXVlc3QuaHR0cE1ldGhvZCgpICE9ICJHRVQiKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>
<flag name="commit-queue"
          id="128117"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126370</attachid>
            <date>2012-02-09 14:20:42 -0800</date>
            <delta_ts>2012-02-09 14:36:17 -0800</delta_ts>
            <desc>Evict from cache in DOMURL::revokeObjectURL()</desc>
            <filename>cachexhrs3.txt</filename>
            <type>text/plain</type>
            <size>11905</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL25ldHdvcmsvbmV0d29yay1k
aXNhYmxlLWNhY2hlLXhocnMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL2luc3BlY3Rvci9uZXR3b3JrL25ldHdvcmstZGlzYWJsZS1jYWNoZS14aHJzLmh0bWwJKHJl
dmlzaW9uIDEwNTgzMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL25ldHdv
cmsvbmV0d29yay1kaXNhYmxlLWNhY2hlLXhocnMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtODMs
OCArODMsMTAgQEAKICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQocmVzb3VyY2UxLnVy
bCk7CiAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KHJlc291cmNlMi51cmwpOwogICAg
ICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdChyZXNvdXJjZTMudXJsKTsKLSAgICAgICAgSW5z
cGVjdG9yVGVzdC5hc3NlcnRUcnVlKHJlc291cmNlMS5jb250ZW50ID09PSByZXNvdXJjZTIuY29u
dGVudCwgIkZpcnN0IGFuZCBzZWNvbmQgcmVzb3VyY2VzIGFyZSBlcXVhbCIpOwotICAgICAgICBJ
bnNwZWN0b3JUZXN0LmFzc2VydFRydWUocmVzb3VyY2UyLmNvbnRlbnQgIT09IHJlc291cmNlMy5j
b250ZW50LCAiU2Vjb25kIGFuZCB0aGlyZCByZXNvdXJjZXMgZGlmZmVyIik7CisgICAgICAgIElu
c3BlY3RvclRlc3QuYXNzZXJ0VHJ1ZShyZXNvdXJjZTEuY29udGVudCAhPT0gcmVzb3VyY2UzLmNv
bnRlbnQsICJGaXJzdCBhbmQgdGhpcmQgcmVzb3VyY2VzIGRpZmZlciIpOworICAgICAgICBJbnNw
ZWN0b3JUZXN0LmFzc2VydFRydWUocmVzb3VyY2UyLnN0YXR1c0NvZGUgPT0gMzA0LCAiU2Vjb25k
IHJlc291cmNlIHNob3VsZCByZWNlaXZlIGEgMzA0IHJlc3BvbnNlIik7CisgICAgICAgIEluc3Bl
Y3RvclRlc3QuYXNzZXJ0VHJ1ZShyZXNvdXJjZTIuY29udGVudC5sZW5ndGggPT0gMCwgIlNlY29u
ZCByZXNvdXJjZSBzaG91bGQgaGF2ZSBubyBjb250ZW50IGR1ZSB0byAzMDQiKTsKKyAgICAgICAg
SW5zcGVjdG9yVGVzdC5hc3NlcnRUcnVlKHJlc291cmNlMy5zdGF0dXNDb2RlID09IDIwMCwgIlRo
aXJkIHJlc291cmNlIHNob3VsZCByZWNlaXZlIGEgMjAwIHJlc3BvbnNlIGR1ZSB0byBkaXNhYmxp
bmcgY2FjaGUiKTsKICAgICAgICAgTmV0d29ya0FnZW50LnNldENhY2hlRGlzYWJsZWQoZmFsc2Us
IHN0ZXA1KTsKICAgICB9CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNzI1OSkKKysrIExheW91dFRl
c3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEyLTAyLTA5
ICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgVGVzdCB1cGRh
dGUgZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjU2NC4KKwor
ICAgICAgICBBIHN1Y2Nlc3NmdWwgcmV2YWxpZGF0aW9uIHdpbGwgbm93IHJldHVybiBhIDMwNCB3
aXRoIGVtcHR5IGNvbnRlbnQKKyAgICAgICAgZm9yIFhIUnMgKHByZXZpb3VzbHksIHdlIG5ldmVy
IHRyaWVkIHRvIHJldmFsaWRhdGUpLiBDaGFuZ2UgZXhwZWN0ZWQKKyAgICAgICAgb3V0cHV0IG9m
IG5ldHdvcmstZGlzYWJsZS1jYWNoZS14aHJzLmh0bWwgYWNjb3JkaW5nbHkuCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL2luc3Bl
Y3Rvci9uZXR3b3JrL25ldHdvcmstZGlzYWJsZS1jYWNoZS14aHJzLmh0bWw6CisKIDIwMTItMDIt
MDkgIE1pa2UgTGF3dGhlciAgPG1pa2VsYXd0aGVyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBD
U1MzIGNhbGMoKSAtIHJlbW92ZSBtb2QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNzI4OSkK
KysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4
IEBACisyMDEyLTAyLTA5ICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV1c2UgQ2FjaGVkUmF3UmVzb3VyY2VzIChlLmcuLCBYSFJzKSB0aGF0IGFyZSBzdG9y
ZWQKKyAgICAgICAgaW4gdGhlIE1lbW9yeUNhY2hlIHdoZW4gYXBwcm9wcmlhdGUuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjU2NAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgZXhw
ZWN0ZWQgYmVoYXZpb3IgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIGh0
bWwvRE9NVVJMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVVSTDo6cmV2b2tlT2JqZWN0VVJM
KTogT2JqZWN0cyBzaG91bGRuJ3QgcmVtYWluIGluIHRoZQorICAgICAgICAgICAgTWVtb3J5Q2Fj
aGUgaWYgcmV2b2tlT2JqZWN0VVJMIGlzIGNhbGxlZCBvbiB0aGVtLgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclJlc291cmNlQWdlbnQ6OnNldENhY2hlRGlzYWJsZWQpOiBJbW1lZGlhdGVseQorICAgICAg
ICAgICAgZXZpY3QgcmVzb3VyY2VzLCByYXRoZXIgdGhhbiB3YWl0aW5nIGZvciBuYXZpZ2F0aW9u
LCBzaW5jZSBYSFJzCisgICAgICAgICAgICBzaG91bGQgaGl0IHRoZSBjYWNoZSBpZiBpdCBoYXMg
YmVlbiBkaXNhYmxlZC4KKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2Uu
Y3BwOgorICAgICAgICAoQ2FjaGVkUmF3UmVzb3VyY2VDYWxsYmFjayk6IEVuY2Fwc3VsYXRlcyB0
aGUgYXN5bmMgY2FsbGJhY2sgZm9yCisgICAgICAgICAgICBhIGNhY2hlIGhpdCBmb3IgQ2FjaGVk
UmF3UmVzb3VyY2VzCisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSYXdSZXNvdXJjZTo6c2VuZENh
bGxiYWNrcyk6IERvIHRoZSB3b3JrIGRlZmVyZWQgaW4gZGlkQWRkQ2xpZW50LgorICAgICAgICAo
V2ViQ29yZTo6Q2FjaGVkUmF3UmVzb3VyY2U6OmRpZEFkZENsaWVudCk6IFNjaGVkdWxlZCBhIENh
Y2hlZFJhd1Jlc291cmNlQ2FsbGJhY2sgaWYKKyAgICAgICAgICAgIHdlIGFscmVhZHkgaGF2ZSBh
IHJlc3BvbnNlLCBzaW5jZSBhc3luYyBYSFJzIG1heSBub3QgcGxheSBuaWNlbHkgd2l0aCByZWNl
aXZpbmcKKyAgICAgICAgICAgIHRoZWlyIGRhdGEgc3luY2hyb25vdXNseS4KKyAgICAgICAgKFdl
YkNvcmU6OkNhY2hlZFJhd1Jlc291cmNlOjpyZW1vdmVDbGllbnQpOiBFbnN1cmUgd2UgY2FuY2Vs
IGEgY2FsbGJhY2sgdG8gYSBjbGllbnQgaWYKKyAgICAgICAgICAgIGl0IHJlbW92ZXMgaXRzZWxm
LgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmF3UmVzb3VyY2U6OmNhblJldXNlKTogUHJvdmlk
ZSBzb21lIGJhc2ljIHJ1bGVzIGZvciB3aGVuIGEKKyAgICAgICAgICAgIENhY2hlZFJhd1Jlc291
cmNlIGNhbiBiZSByZXVzZWQuCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291
cmNlLmg6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmg6CisgICAgICAg
ICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpkZXRlcm1pbmVSZXZhbGlkYXRpb25Qb2xpY3kpOiBE
b24ndCBhdXRvbWF0aWNhbGx5IHJlbG9hZAorICAgICAgICAgICAgQ2FjaGVkUmF3UmVzb3VyY2Vz
LCBhbmQgYWRkIGEgY2hlY2sgZm9yIHdoZXRoZXIgdGhpcyByZXF1ZXN0IGhhcyBhbHJlYWR5IGJl
ZW4KKyAgICAgICAgICAgIG1hZGUgY29uZGl0aW9uYWwuCisKIDIwMTItMDItMDkgIERhdmlkIEh5
YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03ODI1NgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9ET01VUkwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvRE9NVVJMLmNwcAkocmV2aXNp
b24gMTA1ODMwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9ET01VUkwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKICNp
bmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIKICNpbmNsdWRlICJTZWN1
cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKQEAgLTE1MSw2ICsx
NTIsOCBAQAogICAgICAgICByZXR1cm47CiAKICAgICBLVVJMIHVybChLVVJMKCksIHVybFN0cmlu
Zyk7CisgICAgaWYgKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IG1lbW9yeUNhY2hlKCktPnJl
c291cmNlRm9yVVJMKHVybCkpCisgICAgICAgIG1lbW9yeUNhY2hlKCktPnJlbW92ZShyZXNvdXJj
ZSk7CiAKICAgICBIYXNoU2V0PFN0cmluZz4mIGJsb2JVUkxzID0gcHVibGljQmxvYlVSTHMoc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCk7CiAgICAgaWYgKGJsb2JVUkxzLmNvbnRhaW5zKHVybC5zdHJp
bmcoKSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJj
ZUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yUmVzb3VyY2VBZ2VudC5jcHAJKHJldmlzaW9uIDEwNTgzMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTI5LDYgKzUyOSw4IEBACiB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OnNldENhY2hlRGlz
YWJsZWQoRXJyb3JTdHJpbmcqLCBib29sIGNhY2hlRGlzYWJsZWQpCiB7CiAgICAgbV9zdGF0ZS0+
c2V0Qm9vbGVhbihSZXNvdXJjZUFnZW50U3RhdGU6OmNhY2hlRGlzYWJsZWQsIGNhY2hlRGlzYWJs
ZWQpOworICAgIGlmIChjYWNoZURpc2FibGVkKQorICAgICAgICBtZW1vcnlDYWNoZSgpLT5ldmlj
dFJlc291cmNlcygpOwogfQogCiB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6Om1haW5GcmFt
ZU5hdmlnYXRlZChEb2N1bWVudExvYWRlciogbG9hZGVyKQpJbmRleDogU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmgJKHJldmlzaW9uIDEwNTgzMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw4IEBACiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGll
bnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQ2FjaGVkUmF3UmVzb3VyY2VDYWxs
YmFjazsKK2NsYXNzIENhY2hlZFJhd1Jlc291cmNlQ2xpZW50OwogCiBjbGFzcyBDYWNoZWRSYXdS
ZXNvdXJjZSA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZSB7CiBwdWJsaWM6CkBAIC00MCw2ICs0Miwx
MSBAQAogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGV4cG9zZWQgZm9yIHRoZSBJbnBzZWN0b3JJbnN0
cnVtZW50YXRpb24gZm9yIHByZWZsaWdodHMgaW4gRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLiBJ
dCdzIGFsc28gcmVhbGx5IGxhbWUuCiAgICAgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKCkgY29u
c3Q7CiAKKyAgICBib29sIGNhblJldXNlKCkgY29uc3Q7CisgICAgdm9pZCBzZW5kQ2FsbGJhY2tz
KENhY2hlZFJhd1Jlc291cmNlQ2xpZW50Kik7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xp
ZW50KENhY2hlZFJlc291cmNlQ2xpZW50Kik7CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lk
IGRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCopOwogICAgIHZpcnR1YWwgdm9pZCBk
YXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7
CkBAIC01NSw2ICs2Miw3IEBACiAjZW5kaWYKIAogICAgIHNpemVfdCBtX2RhdGFMZW5ndGg7Cisg
ICAgSGFzaE1hcDxDYWNoZWRSYXdSZXNvdXJjZUNsaWVudCosIENhY2hlZFJhd1Jlc291cmNlQ2Fs
bGJhY2sqPiBtX2NsaWVudHNBd2FpdGluZ0NhbGxiYWNrOwogfTsKIAogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAJ
KHJldmlzaW9uIDEwNTgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRS
ZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyMyw4ICs1MjMsMTMgQEAKICAg
ICAgICAgcmV0dXJuIFJlbG9hZDsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogQ3VycmVudGx5LCBh
bGwgQ2FjaGVkUmF3UmVzb3VyY2VzIGFyZSBhbHdheXMgcmVsb2FkZWQuIFNvbWUgb2YgdGhlbSBz
aG91bGQgYmUgY2FjaGVhYmxlLgotICAgIGlmIChleGlzdGluZ1Jlc291cmNlLT50eXBlKCkgPT0g
Q2FjaGVkUmVzb3VyY2U6OlJhd1Jlc291cmNlKQorICAgIGlmIChleGlzdGluZ1Jlc291cmNlLT50
eXBlKCkgPT0gQ2FjaGVkUmVzb3VyY2U6OlJhd1Jlc291cmNlICYmICFzdGF0aWNfY2FzdDxDYWNo
ZWRSYXdSZXNvdXJjZSo+KGV4aXN0aW5nUmVzb3VyY2UpLT5jYW5SZXVzZSgpKQorICAgICAgICAg
cmV0dXJuIFJlbG9hZDsKKworICAgIC8vIENlcnRhaW4gcmVxdWVzdHMgKGUuZy4sIFhIUnMpIG1p
Z2h0IGhhdmUgbWFudWFsbHkgc2V0IGhlYWRlcnMgdGhhdCByZXF1aXJlIHJldmFsaWRhdGlvbi4K
KyAgICAvLyBJbiB0aGVvcnksIHRoaXMgc2hvdWxkIGJlIGEgUmV2YWxpZGF0ZSBjYXNlLiBJbiBw
cmFjdGljZSwgdGhlIE1lbW9yeUNhY2hlIHJldmFsaWRhdGlvbiBwYXRoIGFzc3VtZXMgYSB3aG9s
ZSBidW5jaAorICAgIC8vIG9mIHRoaW5ncyBhYm91dCBob3cgcmV2YWxpZGF0aW9uIHdvcmtzIHRo
YXQgbWFudWFsIGhlYWRlcnMgdmlvbGF0ZSwgc28gcHVudCB0byBSZWxvYWQgaW5zdGVhZC4KKyAg
ICBpZiAocmVxdWVzdC5pc0NvbmRpdGlvbmFsKCkpCiAgICAgICAgIHJldHVybiBSZWxvYWQ7CiAg
ICAgCiAgICAgLy8gRG9uJ3QgcmVsb2FkIHJlc291cmNlcyB3aGlsZSBwYXN0aW5nLgpJbmRleDog
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmgJKHJldmlzaW9u
IDEwNTgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNyArMTEwLDcgQEAKICAgICB2b2lkIHNldExvYWRQcmlv
cml0eShSZXNvdXJjZUxvYWRQcmlvcml0eSk7CiAKICAgICB2b2lkIGFkZENsaWVudChDYWNoZWRS
ZXNvdXJjZUNsaWVudCopOwotICAgIHZvaWQgcmVtb3ZlQ2xpZW50KENhY2hlZFJlc291cmNlQ2xp
ZW50Kik7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVu
dCopOwogICAgIGJvb2wgaGFzQ2xpZW50cygpIGNvbnN0IHsgcmV0dXJuICFtX2NsaWVudHMuaXNF
bXB0eSgpOyB9CiAgICAgdm9pZCBkZWxldGVJZlBvc3NpYmxlKCk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmNwcAkocmV2aXNp
b24gMTA1ODMwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291
cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsMTQgKzY3LDc5IEBACiAgICAgQ2FjaGVkUmVz
b3VyY2U6OmRhdGEobV9kYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwogfQogCitjbGFzcyBDYWNoZWRS
YXdSZXNvdXJjZUNhbGxiYWNrIHsKK3B1YmxpYzogICAgCisgICAgc3RhdGljIENhY2hlZFJhd1Jl
c291cmNlQ2FsbGJhY2sqIHNjaGVkdWxlKENhY2hlZFJhd1Jlc291cmNlKiByZXNvdXJjZSwgQ2Fj
aGVkUmF3UmVzb3VyY2VDbGllbnQqIGNsaWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcg
Q2FjaGVkUmF3UmVzb3VyY2VDYWxsYmFjayhyZXNvdXJjZSwgY2xpZW50KTsKKyAgICB9CisKKyAg
ICB2b2lkIGNhbmNlbCgpCisgICAgeworICAgICAgICBpZiAobV9jYWxsYmFja1RpbWVyLmlzQWN0
aXZlKCkpCisgICAgICAgICAgICBtX2NhbGxiYWNrVGltZXIuc3RvcCgpOworICAgICAgICBtX3Ro
aXMuY2xlYXIoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ2FjaGVkUmF3UmVzb3VyY2VDYWxs
YmFjayhDYWNoZWRSYXdSZXNvdXJjZSogcmVzb3VyY2UsIENhY2hlZFJhd1Jlc291cmNlQ2xpZW50
KiBjbGllbnQpCisgICAgICAgIDogbV9yZXNvdXJjZShyZXNvdXJjZSkKKyAgICAgICAgLCBtX2Ns
aWVudChjbGllbnQpCisgICAgICAgICwgbV9jYWxsYmFja1RpbWVyKHRoaXMsICZDYWNoZWRSYXdS
ZXNvdXJjZUNhbGxiYWNrOjp0aW1lckZpcmVkKQorICAgICAgICAsIG1fdGhpcyhhZG9wdFB0cih0
aGlzKSkKKyAgICB7CisgICAgICAgIG1fY2FsbGJhY2tUaW1lci5zdGFydE9uZVNob3QoMCk7Cisg
ICAgfQorCisgICAgdm9pZCB0aW1lckZpcmVkKFRpbWVyPENhY2hlZFJhd1Jlc291cmNlQ2FsbGJh
Y2s+KikKKyAgICB7CisgICAgICAgIG1fcmVzb3VyY2UtPnNlbmRDYWxsYmFja3MobV9jbGllbnQp
OworICAgICAgICBtX3RoaXMuY2xlYXIoKTsKKyAgICB9CisgICAgQ2FjaGVkUmVzb3VyY2VIYW5k
bGU8Q2FjaGVkUmF3UmVzb3VyY2U+IG1fcmVzb3VyY2U7CisgICAgQ2FjaGVkUmF3UmVzb3VyY2VD
bGllbnQqIG1fY2xpZW50OworICAgIFRpbWVyPENhY2hlZFJhd1Jlc291cmNlQ2FsbGJhY2s+IG1f
Y2FsbGJhY2tUaW1lcjsKKyAgICBPd25QdHI8Q2FjaGVkUmF3UmVzb3VyY2VDYWxsYmFjaz4gbV90
aGlzOworfTsKKwordm9pZCBDYWNoZWRSYXdSZXNvdXJjZTo6c2VuZENhbGxiYWNrcyhDYWNoZWRS
YXdSZXNvdXJjZUNsaWVudCogYykKK3sKKyAgICBpZiAoIW1fY2xpZW50c0F3YWl0aW5nQ2FsbGJh
Y2suY29udGFpbnMoYykpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NsaWVudHNBd2FpdGluZ0Nh
bGxiYWNrLnJlbW92ZShjKTsKKyAgICBjLT5yZXNwb25zZVJlY2VpdmVkKHRoaXMsIG1fcmVzcG9u
c2UpOworICAgIGlmICghbV9jbGllbnRzLmNvbnRhaW5zKGMpIHx8ICFtX2RhdGEpCisgICAgICAg
IHJldHVybjsKKyAgICBjLT5kYXRhUmVjZWl2ZWQodGhpcywgbV9kYXRhLT5kYXRhKCksIG1fZGF0
YS0+c2l6ZSgpKTsKKyAgICBpZiAoIW1fY2xpZW50cy5jb250YWlucyhjKSB8fCBpc0xvYWRpbmco
KSkKKyAgICAgICByZXR1cm47CisgICAgYy0+bm90aWZ5RmluaXNoZWQodGhpcyk7Cit9CisKIHZv
aWQgQ2FjaGVkUmF3UmVzb3VyY2U6OmRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCog
YykKIHsKLSAgICBpZiAobV9kYXRhKSB7Ci0gICAgICAgIHN0YXRpY19jYXN0PENhY2hlZFJhd1Jl
c291cmNlQ2xpZW50Kj4oYyktPnJlc3BvbnNlUmVjZWl2ZWQodGhpcywgbV9yZXNwb25zZSk7Ci0g
ICAgICAgIHN0YXRpY19jYXN0PENhY2hlZFJhd1Jlc291cmNlQ2xpZW50Kj4oYyktPmRhdGFSZWNl
aXZlZCh0aGlzLCBtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5zaXplKCkpOwotICAgIH0KLSAgICBD
YWNoZWRSZXNvdXJjZTo6ZGlkQWRkQ2xpZW50KGMpOworICAgIGlmIChtX3Jlc3BvbnNlLmlzTnVs
bCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBDYWNoZWRSYXdSZXNvdXJjZUNsaWVudHMg
KGVzcGVjaWFsbHkgWEhScykgZG8gY3JhenkgdGhpbmdzIGlmIGFuIGFzeW5jaHJvbm91cyBsb2Fk
IHJldHVybnMKKyAgICAvLyBzeW5jaHJvbm91c2x5IChlLmcuLCBzY3JpcHRzIG1heSBub3QgaGF2
ZSBzZXQgYWxsIHRoZSBzdGF0ZSB0aGV5IG5lZWQgdG8gaGFuZGxlIHRoZSBsb2FkKS4KKyAgICAv
LyBUaGVyZWZvcmUsIHJhdGhlciB0aGFuIGltbWVkaWF0ZWx5IHNlbmRpbmcgY2FsbGJhY2tzIG9u
IGEgY2FjaGUgaGl0IGxpa2Ugb3RoZXIgQ2FjaGVkUmVzb3VyY2VzLAorICAgIC8vIHdlIHNjaGVk
dWxlIHRoZSBjYWxsYmFja3MgYW5kIGVuc3VyZSB3ZSBuZXZlciBmaW5pc2ggc3luY2hyb25vdXNs
eS4KKyAgICAvLyBGSVhNRTogV2UgYWxzbyB1c2UgYW4gYXN5bmMgY2FsbGJhY2sgb24gMzA0IGJl
Y2F1c2Ugd2UgZG9uJ3QgaGF2ZSBzdWZmaWNpZW50IGluZm9ybWF0aW9uIHRvCisgICAgLy8ga25v
dyB3aGV0aGVyIHdlIGFyZSByZWNlaXZpbmcgbmV3IGNsaWVudHMgYmVjYXVzZSBvZiByZXZhbGlk
YXRpb24gb3IgcHVyZSByZXVzZS4gUGVyaGFwcyBtb3ZlCisgICAgLy8gdGhpcyBsb2dpYyB0byBD
YWNoZWRSZXNvdXJjZT8KKyAgICBDYWNoZWRSYXdSZXNvdXJjZUNsaWVudCogY2xpZW50ID0gc3Rh
dGljX2Nhc3Q8Q2FjaGVkUmF3UmVzb3VyY2VDbGllbnQqPihjKTsKKyAgICBBU1NFUlQoIW1fY2xp
ZW50c0F3YWl0aW5nQ2FsbGJhY2suY29udGFpbnMoY2xpZW50KSk7CisgICAgbV9jbGllbnRzQXdh
aXRpbmdDYWxsYmFjay5hZGQoY2xpZW50LCBDYWNoZWRSYXdSZXNvdXJjZUNhbGxiYWNrOjpzY2hl
ZHVsZSh0aGlzLCBjbGllbnQpKTsKIH0KKyAKK3ZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6OnJlbW92
ZUNsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCogYykKK3sKKyAgICBDYWNoZWRSYXdSZXNvdXJj
ZUNhbGxiYWNrKiBjYWxsYmFjayA9IG1fY2xpZW50c0F3YWl0aW5nQ2FsbGJhY2sudGFrZShzdGF0
aWNfY2FzdDxDYWNoZWRSYXdSZXNvdXJjZUNsaWVudCo+KGMpKTsKKyAgICBpZiAoY2FsbGJhY2sp
CisgICAgICAgIGNhbGxiYWNrLT5jYW5jZWwoKTsKKyAgICBDYWNoZWRSZXNvdXJjZTo6cmVtb3Zl
Q2xpZW50KGMpOworfQogCiB2b2lkIENhY2hlZFJhd1Jlc291cmNlOjphbGxDbGllbnRzUmVtb3Zl
ZCgpCiB7CkBAIC0xMTgsNCArMTgzLDE2IEBACiAgICAgcmV0dXJuIG1fbG9hZGVyID8gbV9sb2Fk
ZXItPmlkZW50aWZpZXIoKSA6IDA7CiB9CiAKK2Jvb2wgQ2FjaGVkUmF3UmVzb3VyY2U6OmNhblJl
dXNlKCkgY29uc3QKK3sKKyAgICBpZiAobV9vcHRpb25zLnNob3VsZEJ1ZmZlckRhdGEgPT0gRG9O
b3RCdWZmZXJEYXRhKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9yZXNvdXJj
ZVJlcXVlc3QuaHR0cE1ldGhvZCgpICE9ICJHRVQiKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126601</attachid>
            <date>2012-02-10 16:18:30 -0800</date>
            <delta_ts>2012-02-13 11:24:34 -0800</delta_ts>
            <desc>Fix inspector issues</desc>
            <filename>cachexhrs4.txt</filename>
            <type>text/plain</type>
            <size>18310</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL25ldHdvcmsvbmV0d29yay1j
b250ZW50LXJlcGxhY2VtZW50LXhoci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0
dHAvdGVzdHMvaW5zcGVjdG9yL25ldHdvcmsvbmV0d29yay1jb250ZW50LXJlcGxhY2VtZW50LXho
ci5odG1sCShyZXZpc2lvbiAxMDc0NDcpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3Bl
Y3Rvci9uZXR3b3JrL25ldHdvcmstY29udGVudC1yZXBsYWNlbWVudC14aHIuaHRtbAkod29ya2lu
ZyBjb3B5KQpAQCAtMTYsMjIgKzE2LDIyIEBACiAgICAgLy8gZGlzY2FyZCB0aGlyZCByZXNvdXJj
ZSBjb250ZW50IG9uY2Ugd2Ugc2VlIGl0cyBzaXplIGV4Y2VlZHMgbGltaXQsCiAgICAgLy8gYW5k
IGZpbmFsbHkgcmVwbGFjZSBmaXJzdCByZXNvdXJjZSBjb250ZW50IHdpdGggdGhlIGxhc3QgcmVz
b3VyY2UgY29udGVudC4KIAotICAgIGRvWEhSKCJHRVQiLCAicmVzb3VyY2VzL3Jlc291cmNlLnBo
cD9zaXplPTIwMCIsIHRydWUsIHhockxvYWRlZDEpOworICAgIGRvWEhSKCJHRVQiLCAicmVzb3Vy
Y2VzL3Jlc291cmNlLnBocD9zaXplPTIwMCIsIGZhbHNlLCB4aHJMb2FkZWQxKTsKIH0KIAogZnVu
Y3Rpb24geGhyTG9hZGVkMSgpCiB7Ci0gICAgZG9YSFIoIkdFVCIsICJyZXNvdXJjZXMvcmVzb3Vy
Y2UucGhwP3NpemU9MTAwIiwgdHJ1ZSwgeGhyTG9hZGVkMik7CisgICAgZG9YSFIoIkdFVCIsICJy
ZXNvdXJjZXMvcmVzb3VyY2UucGhwP3NpemU9MTAwIiwgZmFsc2UsIHhockxvYWRlZDIpOwogfQog
CiBmdW5jdGlvbiB4aHJMb2FkZWQyKCkKIHsKLSAgICBkb1hIUigiR0VUIiwgInJlc291cmNlcy9y
ZXNvdXJjZS5waHA/c2l6ZT0yMDEiLCB0cnVlLCB4aHJMb2FkZWQzKTsKKyAgICBkb1hIUigiR0VU
IiwgInJlc291cmNlcy9yZXNvdXJjZS5waHA/c2l6ZT0yMDEiLCBmYWxzZSwgeGhyTG9hZGVkMyk7
CiB9CiAKIGZ1bmN0aW9uIHhockxvYWRlZDMoKQogewotICAgIGRvWEhSKCJHRVQiLCAicmVzb3Vy
Y2VzL3Jlc291cmNlLnBocD9zaXplPTEwMCIsIHRydWUsIGFsbFhIUnNMb2FkZWQpOworICAgIGRv
WEhSKCJHRVQiLCAicmVzb3VyY2VzL3Jlc291cmNlLnBocD9zaXplPTEwMCIsIGZhbHNlLCBhbGxY
SFJzTG9hZGVkKTsKIH0KIAogZnVuY3Rpb24gYWxsWEhSc0xvYWRlZCgpCkluZGV4OiBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9uZXR3b3JrL25ldHdvcmstY29udGVudC1yZXBsYWNl
bWVudC14aHItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVz
dHMvaW5zcGVjdG9yL25ldHdvcmsvbmV0d29yay1jb250ZW50LXJlcGxhY2VtZW50LXhoci1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDEwNzQ0NykKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5z
cGVjdG9yL25ldHdvcmsvbmV0d29yay1jb250ZW50LXJlcGxhY2VtZW50LXhoci1leHBlY3RlZC50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTIsMTEgKzIsMTEgQEAKIFRlc3RzIE5ldHdvcmtSZXNvdXJj
ZXNEYXRhIGxvZ2ljIGZvciBYSFIgY29udGVudCByZXBsYWNlbWVudC4KIAogaHR0cDovLzEyNy4w
LjAuMTo4MDAwL2luc3BlY3Rvci9uZXR3b3JrL3Jlc291cmNlcy9yZXNvdXJjZS5waHA/c2l6ZT0y
MDAKLXJlc291cmNlLmNvbnRlbnQ6IAorcmVzb3VyY2UuY29udGVudDogbnVsbAogaHR0cDovLzEy
Ny4wLjAuMTo4MDAwL2luc3BlY3Rvci9uZXR3b3JrL3Jlc291cmNlcy9yZXNvdXJjZS5waHA/c2l6
ZT0xMDAKIHJlc291cmNlLmNvbnRlbnQ6ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioKIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9pbnNwZWN0b3IvbmV0d29yay9yZXNv
dXJjZXMvcmVzb3VyY2UucGhwP3NpemU9MjAxCi1yZXNvdXJjZS5jb250ZW50OiAKK3Jlc291cmNl
LmNvbnRlbnQ6IG51bGwKIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9pbnNwZWN0b3IvbmV0d29yay9y
ZXNvdXJjZXMvcmVzb3VyY2UucGhwP3NpemU9MTAwCiByZXNvdXJjZS5jb250ZW50OiAqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKSW5kZXg6IExheW91dFRlc3Rz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDEwNzQ0NykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE2IEBACisyMDEyLTAyLTEwICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgVGVzdCB1cGRhdGUgZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03NjU2NC4KKworICAgICAgICBVc2Ugc3luYyBYSFJzIGluc3RlYWQgb2YgYXN5
bmMgaW4gbmV0d29yay1jb250ZW50LXJlcGxhY2VtZW50LXhoci5odG1sLAorICAgICAgICBzaW5j
ZSB0aGUgaW5zcGVjdG9yIHB1bGxzIGFzeW5jIFhIUiBkYXRhIG9mZiBvZiBpdHMgQ2FjaGVkUmVz
b3VyY2UsIGluc3RlYWQKKyAgICAgICAgb2YgYSBidWZmZXIgaXQgY29udHJvbHMuCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL2lu
c3BlY3Rvci9uZXR3b3JrL25ldHdvcmstY29udGVudC1yZXBsYWNlbWVudC14aHItZXhwZWN0ZWQu
dHh0OgorICAgICAgICAqIGh0dHAvdGVzdHMvaW5zcGVjdG9yL25ldHdvcmsvbmV0d29yay1jb250
ZW50LXJlcGxhY2VtZW50LXhoci5odG1sOgorCiAyMDEyLTAyLTEwICBPamFuIFZhZmFpICA8b2ph
bkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgZmxleC1wYWNrOmNlbnRlciBhbmQgZmxleC1pdGVt
LWFsaWduOmNlbnRlciBzaG91bGQgZG8gdHJ1ZSBjZW50ZXJpbmcKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDEwNzQ0NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDQxIEBACisyMDEyLTAyLTEwICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgUmV1c2UgQ2FjaGVkUmF3UmVzb3VyY2VzIChlLmcuLCBYSFJz
KSB0aGF0IGFyZSBzdG9yZWQKKyAgICAgICAgaW4gdGhlIE1lbW9yeUNhY2hlIHdoZW4gYXBwcm9w
cmlhdGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
NjU2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cywgZXhwZWN0ZWQgYmVoYXZpb3IgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4K
KworICAgICAgICAqIGh0bWwvRE9NVVJMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVVSTDo6
cmV2b2tlT2JqZWN0VVJMKTogT2JqZWN0cyBzaG91bGRuJ3QgcmVtYWluIGluIHRoZQorICAgICAg
ICAgICAgTWVtb3J5Q2FjaGUgaWYgcmV2b2tlT2JqZWN0VVJMIGlzIGNhbGxlZCBvbiB0aGVtLgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZUNvbnRlbnQpOiBBZGQgQ2Fj
aGVkUmF3UmVzb3VyY2Ugc3VwcG9ydC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUmVz
b3VyY2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50
OjpzZXRDYWNoZURpc2FibGVkKTogSW1tZWRpYXRlbHkKKyAgICAgICAgICAgIGV2aWN0IHJlc291
cmNlcywgcmF0aGVyIHRoYW4gd2FpdGluZyBmb3IgbmF2aWdhdGlvbiwgc2luY2UgWEhScworICAg
ICAgICAgICAgc2hvdWxkIGhpdCB0aGUgY2FjaGUgaWYgaXQgaGFzIGJlZW4gZGlzYWJsZWQuCisg
ICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmNwcDoKKyAgICAgICAgKENh
Y2hlZFJhd1Jlc291cmNlQ2FsbGJhY2spOiBFbmNhcHN1bGF0ZXMgdGhlIGFzeW5jIGNhbGxiYWNr
IGZvcgorICAgICAgICAgICAgYSBjYWNoZSBoaXQgZm9yIENhY2hlZFJhd1Jlc291cmNlcy4KKyAg
ICAgICAgKFdlYkNvcmU6OkNhY2hlZFJhd1Jlc291cmNlOjpzZW5kQ2FsbGJhY2tzKTogRG8gdGhl
IHdvcmsgZGVmZXJlZCBpbiBkaWRBZGRDbGllbnQuCisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRS
YXdSZXNvdXJjZTo6ZGlkQWRkQ2xpZW50KTogU2NoZWR1bGVkIGEgQ2FjaGVkUmF3UmVzb3VyY2VD
YWxsYmFjayBpZgorICAgICAgICAgICAgd2UgYWxyZWFkeSBoYXZlIGEgcmVzcG9uc2UsIHNpbmNl
IGFzeW5jIFhIUnMgbWF5IG5vdCBwbGF5IG5pY2VseSB3aXRoIHJlY2VpdmluZworICAgICAgICAg
ICAgdGhlaXIgZGF0YSBzeW5jaHJvbm91c2x5LgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmF3
UmVzb3VyY2U6OnJlbW92ZUNsaWVudCk6IEVuc3VyZSB3ZSBjYW5jZWwgYSBjYWxsYmFjayB0byBh
IGNsaWVudCBpZgorICAgICAgICAgICAgaXQgcmVtb3ZlcyBpdHNlbGYuCisgICAgICAgIChXZWJD
b3JlOjpDYWNoZWRSYXdSZXNvdXJjZTo6Y2FuUmV1c2UpOiBQcm92aWRlIHNvbWUgYmFzaWMgcnVs
ZXMgZm9yIHdoZW4gYQorICAgICAgICAgICAgQ2FjaGVkUmF3UmVzb3VyY2UgY2FuIGJlIHJldXNl
ZC4KKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuaDoKKyAgICAgICAg
KiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaDoKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUv
Q2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3Vy
Y2VMb2FkZXI6OmRldGVybWluZVJldmFsaWRhdGlvblBvbGljeSk6IERvbid0IGF1dG9tYXRpY2Fs
bHkgcmVsb2FkCisgICAgICAgICAgICBDYWNoZWRSYXdSZXNvdXJjZXMsIGFuZCBhZGQgYSBjaGVj
ayBmb3Igd2hldGhlciB0aGlzIHJlcXVlc3QgaGFzIGFscmVhZHkgYmVlbgorICAgICAgICAgICAg
bWFkZSBjb25kaXRpb25hbC4KKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorCiAy
MDEyLTAyLTEwICBPamFuIFZhZmFpICA8b2phbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgZmxl
eC1wYWNrOmNlbnRlciBhbmQgZmxleC1pdGVtLWFsaWduOmNlbnRlciBzaG91bGQgZG8gdHJ1ZSBj
ZW50ZXJpbmcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvRE9NVVJMLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0RPTVVSTC5jcHAJKHJldmlzaW9uIDEwNzQ0NykKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvRE9NVVJMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiAr
MzQsNyBAQAogI2luY2x1ZGUgIkJsb2IuaCIKICNpbmNsdWRlICJCbG9iVVJMLmgiCiAjaW5jbHVk
ZSAiS1VSTC5oIgorI2luY2x1ZGUgIk1lbW9yeUNhY2hlLmgiCiAjaW5jbHVkZSAiUHVibGljVVJM
TWFuYWdlci5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRl
ICJTZWN1cml0eU9yaWdpbi5oIgpAQCAtODksNiArOTAsOCBAQAogICAgICAgICByZXR1cm47CiAK
ICAgICBLVVJMIHVybChLVVJMKCksIHVybFN0cmluZyk7CisgICAgaWYgKENhY2hlZFJlc291cmNl
KiByZXNvdXJjZSA9IG1lbW9yeUNhY2hlKCktPnJlc291cmNlRm9yVVJMKHVybCkpCisgICAgICAg
IG1lbW9yeUNhY2hlKCktPnJlbW92ZShyZXNvdXJjZSk7CiAKICAgICBIYXNoU2V0PFN0cmluZz4m
IGJsb2JVUkxzID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cHVibGljVVJMTWFuYWdlcigpLmJs
b2JVUkxzKCk7CiAgICAgaWYgKGJsb2JVUkxzLmNvbnRhaW5zKHVybC5zdHJpbmcoKSkpIHsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3Bw
CShyZXZpc2lvbiAxMDc0NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
UGFnZUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDcgKzEyMSw3IEBACiBzdGF0aWMg
Ym9vbCBoYXNUZXh0Q29udGVudChDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UpCiB7CiAg
ICAgSW5zcGVjdG9yUGFnZUFnZW50OjpSZXNvdXJjZVR5cGUgdHlwZSA9IEluc3BlY3RvclBhZ2VB
Z2VudDo6Y2FjaGVkUmVzb3VyY2VUeXBlKCpjYWNoZWRSZXNvdXJjZSk7Ci0gICAgcmV0dXJuIHR5
cGUgPT0gSW5zcGVjdG9yUGFnZUFnZW50OjpTdHlsZXNoZWV0UmVzb3VyY2UgfHwgdHlwZSA9PSBJ
bnNwZWN0b3JQYWdlQWdlbnQ6OlNjcmlwdFJlc291cmNlOworICAgIHJldHVybiB0eXBlID09IElu
c3BlY3RvclBhZ2VBZ2VudDo6U3R5bGVzaGVldFJlc291cmNlIHx8IHR5cGUgPT0gSW5zcGVjdG9y
UGFnZUFnZW50OjpTY3JpcHRSZXNvdXJjZSB8fCB0eXBlID09IEluc3BlY3RvclBhZ2VBZ2VudDo6
WEhSUmVzb3VyY2U7CiB9CiAKIGJvb2wgSW5zcGVjdG9yUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJj
ZUNvbnRlbnQoQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlLCBTdHJpbmcqIHJlc3VsdCwg
Ym9vbCogYmFzZTY0RW5jb2RlZCkKQEAgLTE0Myw2ICsxNDMsNyBAQAogICAgIH0KIAogICAgIGlm
IChjYWNoZWRSZXNvdXJjZSkgeworICAgICAgICBTaGFyZWRCdWZmZXIqIGJ1ZmZlciA9IGNhY2hl
ZFJlc291cmNlLT5kYXRhKCk7CiAgICAgICAgIHN3aXRjaCAoY2FjaGVkUmVzb3VyY2UtPnR5cGUo
KSkgewogICAgICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0OgogICAgICAg
ICAgICAgKnJlc3VsdCA9IHN0YXRpY19jYXN0PENhY2hlZENTU1N0eWxlU2hlZXQqPihjYWNoZWRS
ZXNvdXJjZSktPnNoZWV0VGV4dCgpOwpAQCAtMTUwLDYgKzE1MSw5IEBACiAgICAgICAgIGNhc2Ug
Q2FjaGVkUmVzb3VyY2U6OlNjcmlwdDoKICAgICAgICAgICAgICpyZXN1bHQgPSBzdGF0aWNfY2Fz
dDxDYWNoZWRTY3JpcHQqPihjYWNoZWRSZXNvdXJjZSktPnNjcmlwdCgpOwogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlJhd1Jlc291cmNlOgor
ICAgICAgICAgICAgKnJlc3VsdCA9IFN0cmluZyhidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXpl
KCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICBpZiAoaGFzWmVyb1NpemUpIHsKICAgICAgICAgICAgICAgICAqcmVzdWx0ID0gIiI7CkBA
IC0yNTQsNiArMjU4LDggQEAKICAgICAgICAgcmV0dXJuIEluc3BlY3RvclBhZ2VBZ2VudDo6U3R5
bGVzaGVldFJlc291cmNlOwogICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdDoKICAgICAg
ICAgcmV0dXJuIEluc3BlY3RvclBhZ2VBZ2VudDo6U2NyaXB0UmVzb3VyY2U7CisgICAgY2FzZSBD
YWNoZWRSZXNvdXJjZTo6UmF3UmVzb3VyY2U6CisgICAgICAgIHJldHVybiBJbnNwZWN0b3JQYWdl
QWdlbnQ6OlhIUlJlc291cmNlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3Vy
Y2VBZ2VudC5jcHAJKHJldmlzaW9uIDEwNzQ0NykKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUzLDcgKzI1
Myw3IEBACiAgICAgICAgICAgICB0eXBlID0gSW5zcGVjdG9yUGFnZUFnZW50OjpTY3JpcHRSZXNv
dXJjZTsKICAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0ZyYWdtZW50SWRlbnRpZmllcihy
ZXNwb25zZS51cmwoKSwgbG9hZGVyLT5mcmFtZUxvYWRlcigpLT5pY29uKCktPnVybCgpKSkKICAg
ICAgICAgICAgIHR5cGUgPSBJbnNwZWN0b3JQYWdlQWdlbnQ6OkltYWdlUmVzb3VyY2U7Ci0gICAg
ICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdGcmFnbWVudElkZW50aWZpZXIocmVzcG9uc2UudXJs
KCksIGxvYWRlci0+dXJsKCkpICYmIHR5cGUgPT0gSW5zcGVjdG9yUGFnZUFnZW50OjpPdGhlclJl
c291cmNlKQorICAgICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nRnJhZ21lbnRJZGVudGlmaWVy
KHJlc3BvbnNlLnVybCgpLCBsb2FkZXItPnVybCgpKSAmJiAhbG9hZGVyLT5pc0NvbW1pdHRlZCgp
KQogICAgICAgICAgICAgdHlwZSA9IEluc3BlY3RvclBhZ2VBZ2VudDo6RG9jdW1lbnRSZXNvdXJj
ZTsKIAogICAgICAgICBtX3Jlc291cmNlc0RhdGEtPnJlc3BvbnNlUmVjZWl2ZWQocmVxdWVzdElk
LCBtX3BhZ2VBZ2VudC0+ZnJhbWVJZChsb2FkZXItPmZyYW1lKCkpLCByZXNwb25zZSk7CkBAIC01
MjksNiArNTI5LDggQEAKIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6c2V0Q2FjaGVEaXNh
YmxlZChFcnJvclN0cmluZyosIGJvb2wgY2FjaGVEaXNhYmxlZCkKIHsKICAgICBtX3N0YXRlLT5z
ZXRCb29sZWFuKFJlc291cmNlQWdlbnRTdGF0ZTo6Y2FjaGVEaXNhYmxlZCwgY2FjaGVEaXNhYmxl
ZCk7CisgICAgaWYgKGNhY2hlRGlzYWJsZWQpCisgICAgICAgIG1lbW9yeUNhY2hlKCktPmV2aWN0
UmVzb3VyY2VzKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6bWFpbkZyYW1l
TmF2aWdhdGVkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS94
bWwvWE1MSHR0cFJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9Y
TUxIdHRwUmVxdWVzdC5jcHAJKHJldmlzaW9uIDEwNzQ0NykKKysrIFNvdXJjZS9XZWJDb3JlL3ht
bC9YTUxIdHRwUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMzcsNyArMTAzNywxMCBA
QAogICAgIC8vIEZJWE1FOiBTZXQgbV9yZXNwb25zZUJsb2IgdG8gc29tZXRoaW5nIGhlcmUgaW4g
dGhlIFJlc3BvbnNlVHlwZUJsb2IgY2FzZS4KICNlbmRpZgogCi0gICAgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpyZXNvdXJjZVJldHJpZXZlZEJ5WE1MSHR0cFJlcXVlc3Qoc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLCBpZGVudGlmaWVyLCBtX3Jlc3BvbnNlQnVpbGRlci50b1N0cmluZ1ByZXNl
cnZlQ2FwYWNpdHkoKSwgbV91cmwsIG1fbGFzdFNlbmRVUkwsIG1fbGFzdFNlbmRMaW5lTnVtYmVy
KTsKKyAgICAvLyBGb3IgQXN5bmNocm9ub3VzIFhIUnMsIHRoZSBpbnNwZWN0b3IgY2FuIGdyYWIg
dGhlIGRhdGEgZGlyZWN0bHkgb2ZmIG9mIHRoZSBDYWNoZWRSZXNvdXJjZS4gRm9yIHN5bmMgWEhS
cywgd2UgbmVlZCB0bworICAgIC8vIHByb3ZpZGUgdGhlIGRhdGEgaGVyZSwgc2luY2Ugbm8gQ2Fj
aGVkUmVzb3VyY2Ugd2FzIGludm9sdmVkLgorICAgIGlmICghbV9hc3luYykKKyAgICAgICAgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpyZXNvdXJjZVJldHJpZXZlZEJ5WE1MSHR0cFJlcXVlc3Qo
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBpZGVudGlmaWVyLCBtX3Jlc3BvbnNlQnVpbGRlci50
b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKSwgbV91cmwsIG1fbGFzdFNlbmRVUkwsIG1fbGFzdFNl
bmRMaW5lTnVtYmVyKTsKIAogICAgIGJvb2wgaGFkTG9hZGVyID0gbV9sb2FkZXI7CiAgICAgbV9s
b2FkZXIgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jl
c291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZFJhd1Jlc291cmNlLmgJKHJldmlzaW9uIDEwNzQ0NykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw4
IEBACiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgeworY2xhc3MgQ2FjaGVkUmF3UmVzb3VyY2VDYWxsYmFjazsKK2NsYXNzIENhY2hlZFJhd1Jl
c291cmNlQ2xpZW50OwogCiBjbGFzcyBDYWNoZWRSYXdSZXNvdXJjZSA6IHB1YmxpYyBDYWNoZWRS
ZXNvdXJjZSB7CiBwdWJsaWM6CkBAIC0zOCw4ICs0MCwxMyBAQAogICAgIHZpcnR1YWwgdm9pZCBz
ZXREZWZlcnNMb2FkaW5nKGJvb2wpOwogICAgIAogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGV4cG9z
ZWQgZm9yIHRoZSBJbnBzZWN0b3JJbnN0cnVtZW50YXRpb24gZm9yIHByZWZsaWdodHMgaW4gRG9j
dW1lbnRUaHJlYWRhYmxlTG9hZGVyLiBJdCdzIGFsc28gcmVhbGx5IGxhbWUuCi0gICAgdW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyKCkgY29uc3Q7CisgICAgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
KCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CiAKKyAgICBib29sIGNhblJldXNlKCkg
Y29uc3Q7CisgICAgdm9pZCBzZW5kQ2FsbGJhY2tzKENhY2hlZFJhd1Jlc291cmNlQ2xpZW50Kik7
CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50Kik7
CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJj
ZUNsaWVudCopOwogICAgIHZpcnR1YWwgdm9pZCBkYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVy
PiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7CkBAIC01NCw3ICs2MSw4IEBACiAgICAgdmly
dHVhbCB2b2lkIGRpZERvd25sb2FkRGF0YShpbnQpOwogI2VuZGlmCiAKLSAgICBzaXplX3QgbV9k
YXRhTGVuZ3RoOworICAgIHVuc2lnbmVkIGxvbmcgbV9pZGVudGlmaWVyOworICAgIEhhc2hNYXA8
Q2FjaGVkUmF3UmVzb3VyY2VDbGllbnQqLCBDYWNoZWRSYXdSZXNvdXJjZUNhbGxiYWNrKj4gbV9j
bGllbnRzQXdhaXRpbmdDYWxsYmFjazsKIH07CiAKIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiAx
MDc0NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjMsOCArNTIzLDEzIEBACiAgICAgICAgIHJldHVy
biBSZWxvYWQ7CiAgICAgfQogCi0gICAgLy8gRklYTUU6IEN1cnJlbnRseSwgYWxsIENhY2hlZFJh
d1Jlc291cmNlcyBhcmUgYWx3YXlzIHJlbG9hZGVkLiBTb21lIG9mIHRoZW0gc2hvdWxkIGJlIGNh
Y2hlYWJsZS4KLSAgICBpZiAoZXhpc3RpbmdSZXNvdXJjZS0+dHlwZSgpID09IENhY2hlZFJlc291
cmNlOjpSYXdSZXNvdXJjZSkKKyAgICBpZiAoZXhpc3RpbmdSZXNvdXJjZS0+dHlwZSgpID09IENh
Y2hlZFJlc291cmNlOjpSYXdSZXNvdXJjZSAmJiAhc3RhdGljX2Nhc3Q8Q2FjaGVkUmF3UmVzb3Vy
Y2UqPihleGlzdGluZ1Jlc291cmNlKS0+Y2FuUmV1c2UoKSkKKyAgICAgICAgIHJldHVybiBSZWxv
YWQ7CisKKyAgICAvLyBDZXJ0YWluIHJlcXVlc3RzIChlLmcuLCBYSFJzKSBtaWdodCBoYXZlIG1h
bnVhbGx5IHNldCBoZWFkZXJzIHRoYXQgcmVxdWlyZSByZXZhbGlkYXRpb24uCisgICAgLy8gSW4g
dGhlb3J5LCB0aGlzIHNob3VsZCBiZSBhIFJldmFsaWRhdGUgY2FzZS4gSW4gcHJhY3RpY2UsIHRo
ZSBNZW1vcnlDYWNoZSByZXZhbGlkYXRpb24gcGF0aCBhc3N1bWVzIGEgd2hvbGUgYnVuY2gKKyAg
ICAvLyBvZiB0aGluZ3MgYWJvdXQgaG93IHJldmFsaWRhdGlvbiB3b3JrcyB0aGF0IG1hbnVhbCBo
ZWFkZXJzIHZpb2xhdGUsIHNvIHB1bnQgdG8gUmVsb2FkIGluc3RlYWQuCisgICAgaWYgKHJlcXVl
c3QuaXNDb25kaXRpb25hbCgpKQogICAgICAgICByZXR1cm4gUmVsb2FkOwogICAgIAogICAgIC8v
IERvbid0IHJlbG9hZCByZXNvdXJjZXMgd2hpbGUgcGFzdGluZy4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oCShyZXZpc2lvbiAxMDc0NDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMTEwLDcgKzExMCw3IEBACiAgICAgdm9pZCBzZXRMb2FkUHJpb3JpdHkoUmVzb3Vy
Y2VMb2FkUHJpb3JpdHkpOwogCiAgICAgdm9pZCBhZGRDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGll
bnQqKTsKLSAgICB2b2lkIHJlbW92ZUNsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCopOworICAg
IHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqKTsKICAgICBi
b29sIGhhc0NsaWVudHMoKSBjb25zdCB7IHJldHVybiAhbV9jbGllbnRzLmlzRW1wdHkoKTsgfQog
ICAgIHZvaWQgZGVsZXRlSWZQb3NzaWJsZSgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDEwNzQ0NykK
KysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM3LDE4ICszNywyMSBAQAogCiBDYWNoZWRSYXdSZXNvdXJjZTo6Q2Fj
aGVkUmF3UmVzb3VyY2UoUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QpCiAgICAgOiBD
YWNoZWRSZXNvdXJjZShyZXNvdXJjZVJlcXVlc3QsIFJhd1Jlc291cmNlKQotICAgICwgbV9kYXRh
TGVuZ3RoKDApCisgICAgLCBtX2lkZW50aWZpZXIoMCkKIHsKIH0KIAogdm9pZCBDYWNoZWRSYXdS
ZXNvdXJjZTo6ZGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgYm9vbCBhbGxEYXRh
UmVjZWl2ZWQpCiB7CiAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmF3UmVzb3VyY2U+
IHByb3RlY3QodGhpcyk7CisgICAgaWYgKCFtX2lkZW50aWZpZXIpCisgICAgICAgIG1faWRlbnRp
ZmllciA9IG1fbG9hZGVyLT5pZGVudGlmaWVyKCk7CisKICAgICBpZiAoZGF0YSkgewogICAgICAg
ICAvLyBJZiB3ZSBhcmUgYnVmZmVyaW5nIGRhdGEsIHRoZW4gd2UgYXJlIHNhdmluZyB0aGUgYnVm
ZmVyIGluIG1fZGF0YSBhbmQgbmVlZCB0byBtYW51YWxseQogICAgICAgICAvLyBjYWxjdWxhdGUg
dGhlIGluY3JlbWVudGFsIGRhdGEuIElmIHdlIGFyZSBub3QgYnVmZmVyaW5nLCB0aGVuIG1fZGF0
YSB3aWxsIGJlIG51bGwgYW5kCiAgICAgICAgIC8vIHRoZSBidWZmZXIgY29udGFpbnMgb25seSB0
aGUgaW5jcmVtZW50YWwgZGF0YS4KLSAgICAgICAgc2l6ZV90IHByZXZpb3VzRGF0YUxlbmd0aCA9
IChtX29wdGlvbnMuc2hvdWxkQnVmZmVyRGF0YSA9PSBCdWZmZXJEYXRhKSA/IG1fZGF0YUxlbmd0
aCA6IDA7CisgICAgICAgIHNpemVfdCBwcmV2aW91c0RhdGFMZW5ndGggPSAobV9vcHRpb25zLnNo
b3VsZEJ1ZmZlckRhdGEgPT0gQnVmZmVyRGF0YSkgPyBlbmNvZGVkU2l6ZSgpIDogMDsKICAgICAg
ICAgQVNTRVJUKGRhdGEtPnNpemUoKSA+PSBwcmV2aW91c0RhdGFMZW5ndGgpOwogICAgICAgICBj
b25zdCBjaGFyKiBpbmNyZW1lbnRhbERhdGEgPSBkYXRhLT5kYXRhKCkgKyBwcmV2aW91c0RhdGFM
ZW5ndGg7CiAgICAgICAgIHNpemVfdCBpbmNyZW1lbnRhbERhdGFMZW5ndGggPSBkYXRhLT5zaXpl
KCkgLSBwcmV2aW91c0RhdGFMZW5ndGg7CkBAIC02MSwyMCArNjQsODYgQEAKICAgICB9CiAgICAg
CiAgICAgaWYgKG1fb3B0aW9ucy5zaG91bGRCdWZmZXJEYXRhID09IEJ1ZmZlckRhdGEpIHsKLSAg
ICAgICAgbV9kYXRhTGVuZ3RoID0gZGF0YSA/IGRhdGEtPnNpemUoKSA6IDA7CisgICAgICAgIGlm
IChkYXRhKQorICAgICAgICAgICAgc2V0RW5jb2RlZFNpemUoZGF0YS0+c2l6ZSgpKTsKICAgICAg
ICAgbV9kYXRhID0gZGF0YTsKICAgICB9CiAgICAgQ2FjaGVkUmVzb3VyY2U6OmRhdGEobV9kYXRh
LCBhbGxEYXRhUmVjZWl2ZWQpOwogfQogCitjbGFzcyBDYWNoZWRSYXdSZXNvdXJjZUNhbGxiYWNr
IHsKK3B1YmxpYzogICAgCisgICAgc3RhdGljIENhY2hlZFJhd1Jlc291cmNlQ2FsbGJhY2sqIHNj
aGVkdWxlKENhY2hlZFJhd1Jlc291cmNlKiByZXNvdXJjZSwgQ2FjaGVkUmF3UmVzb3VyY2VDbGll
bnQqIGNsaWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgQ2FjaGVkUmF3UmVzb3VyY2VD
YWxsYmFjayhyZXNvdXJjZSwgY2xpZW50KTsKKyAgICB9CisKKyAgICB2b2lkIGNhbmNlbCgpCisg
ICAgeworICAgICAgICBpZiAobV9jYWxsYmFja1RpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgICAg
ICBtX2NhbGxiYWNrVGltZXIuc3RvcCgpOworICAgICAgICBtX3RoaXMuY2xlYXIoKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgQ2FjaGVkUmF3UmVzb3VyY2VDYWxsYmFjayhDYWNoZWRSYXdSZXNv
dXJjZSogcmVzb3VyY2UsIENhY2hlZFJhd1Jlc291cmNlQ2xpZW50KiBjbGllbnQpCisgICAgICAg
IDogbV9yZXNvdXJjZShyZXNvdXJjZSkKKyAgICAgICAgLCBtX2NsaWVudChjbGllbnQpCisgICAg
ICAgICwgbV9jYWxsYmFja1RpbWVyKHRoaXMsICZDYWNoZWRSYXdSZXNvdXJjZUNhbGxiYWNrOjp0
aW1lckZpcmVkKQorICAgICAgICAsIG1fdGhpcyhhZG9wdFB0cih0aGlzKSkKKyAgICB7CisgICAg
ICAgIG1fY2FsbGJhY2tUaW1lci5zdGFydE9uZVNob3QoMCk7CisgICAgfQorCisgICAgdm9pZCB0
aW1lckZpcmVkKFRpbWVyPENhY2hlZFJhd1Jlc291cmNlQ2FsbGJhY2s+KikKKyAgICB7CisgICAg
ICAgIG1fcmVzb3VyY2UtPnNlbmRDYWxsYmFja3MobV9jbGllbnQpOworICAgICAgICBtX3RoaXMu
Y2xlYXIoKTsKKyAgICB9CisgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmF3UmVzb3Vy
Y2U+IG1fcmVzb3VyY2U7CisgICAgQ2FjaGVkUmF3UmVzb3VyY2VDbGllbnQqIG1fY2xpZW50Owor
ICAgIFRpbWVyPENhY2hlZFJhd1Jlc291cmNlQ2FsbGJhY2s+IG1fY2FsbGJhY2tUaW1lcjsKKyAg
ICBPd25QdHI8Q2FjaGVkUmF3UmVzb3VyY2VDYWxsYmFjaz4gbV90aGlzOworfTsKKwordm9pZCBD
YWNoZWRSYXdSZXNvdXJjZTo6c2VuZENhbGxiYWNrcyhDYWNoZWRSYXdSZXNvdXJjZUNsaWVudCog
YykKK3sKKyAgICBpZiAoIW1fY2xpZW50c0F3YWl0aW5nQ2FsbGJhY2suY29udGFpbnMoYykpCisg
ICAgICAgIHJldHVybjsKKyAgICBtX2NsaWVudHNBd2FpdGluZ0NhbGxiYWNrLnJlbW92ZShjKTsK
KyAgICBjLT5yZXNwb25zZVJlY2VpdmVkKHRoaXMsIG1fcmVzcG9uc2UpOworICAgIGlmICghbV9j
bGllbnRzLmNvbnRhaW5zKGMpIHx8ICFtX2RhdGEpCisgICAgICAgIHJldHVybjsKKyAgICBjLT5k
YXRhUmVjZWl2ZWQodGhpcywgbV9kYXRhLT5kYXRhKCksIG1fZGF0YS0+c2l6ZSgpKTsKKyAgICBp
ZiAoIW1fY2xpZW50cy5jb250YWlucyhjKSB8fCBpc0xvYWRpbmcoKSkKKyAgICAgICByZXR1cm47
CisgICAgYy0+bm90aWZ5RmluaXNoZWQodGhpcyk7Cit9CisKIHZvaWQgQ2FjaGVkUmF3UmVzb3Vy
Y2U6OmRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCogYykKIHsKLSAgICBpZiAobV9k
YXRhKSB7Ci0gICAgICAgIHN0YXRpY19jYXN0PENhY2hlZFJhd1Jlc291cmNlQ2xpZW50Kj4oYykt
PnJlc3BvbnNlUmVjZWl2ZWQodGhpcywgbV9yZXNwb25zZSk7Ci0gICAgICAgIHN0YXRpY19jYXN0
PENhY2hlZFJhd1Jlc291cmNlQ2xpZW50Kj4oYyktPmRhdGFSZWNlaXZlZCh0aGlzLCBtX2RhdGEt
PmRhdGEoKSwgbV9kYXRhLT5zaXplKCkpOwotICAgIH0KLSAgICBDYWNoZWRSZXNvdXJjZTo6ZGlk
QWRkQ2xpZW50KGMpOworICAgIGlmIChtX3Jlc3BvbnNlLmlzTnVsbCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICAvLyBDYWNoZWRSYXdSZXNvdXJjZUNsaWVudHMgKGVzcGVjaWFsbHkgWEhScykg
ZG8gY3JhenkgdGhpbmdzIGlmIGFuIGFzeW5jaHJvbm91cyBsb2FkIHJldHVybnMKKyAgICAvLyBz
eW5jaHJvbm91c2x5IChlLmcuLCBzY3JpcHRzIG1heSBub3QgaGF2ZSBzZXQgYWxsIHRoZSBzdGF0
ZSB0aGV5IG5lZWQgdG8gaGFuZGxlIHRoZSBsb2FkKS4KKyAgICAvLyBUaGVyZWZvcmUsIHJhdGhl
ciB0aGFuIGltbWVkaWF0ZWx5IHNlbmRpbmcgY2FsbGJhY2tzIG9uIGEgY2FjaGUgaGl0IGxpa2Ug
b3RoZXIgQ2FjaGVkUmVzb3VyY2VzLAorICAgIC8vIHdlIHNjaGVkdWxlIHRoZSBjYWxsYmFja3Mg
YW5kIGVuc3VyZSB3ZSBuZXZlciBmaW5pc2ggc3luY2hyb25vdXNseS4KKyAgICAvLyBGSVhNRTog
V2UgYWxzbyB1c2UgYW4gYXN5bmMgY2FsbGJhY2sgb24gMzA0IGJlY2F1c2Ugd2UgZG9uJ3QgaGF2
ZSBzdWZmaWNpZW50IGluZm9ybWF0aW9uIHRvCisgICAgLy8ga25vdyB3aGV0aGVyIHdlIGFyZSBy
ZWNlaXZpbmcgbmV3IGNsaWVudHMgYmVjYXVzZSBvZiByZXZhbGlkYXRpb24gb3IgcHVyZSByZXVz
ZS4gUGVyaGFwcyBtb3ZlCisgICAgLy8gdGhpcyBsb2dpYyB0byBDYWNoZWRSZXNvdXJjZT8KKyAg
ICBDYWNoZWRSYXdSZXNvdXJjZUNsaWVudCogY2xpZW50ID0gc3RhdGljX2Nhc3Q8Q2FjaGVkUmF3
UmVzb3VyY2VDbGllbnQqPihjKTsKKyAgICBBU1NFUlQoIW1fY2xpZW50c0F3YWl0aW5nQ2FsbGJh
Y2suY29udGFpbnMoY2xpZW50KSk7CisgICAgbV9jbGllbnRzQXdhaXRpbmdDYWxsYmFjay5hZGQo
Y2xpZW50LCBDYWNoZWRSYXdSZXNvdXJjZUNhbGxiYWNrOjpzY2hlZHVsZSh0aGlzLCBjbGllbnQp
KTsKIH0KKyAKK3ZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6OnJlbW92ZUNsaWVudChDYWNoZWRSZXNv
dXJjZUNsaWVudCogYykKK3sKKyAgICBDYWNoZWRSYXdSZXNvdXJjZUNhbGxiYWNrKiBjYWxsYmFj
ayA9IG1fY2xpZW50c0F3YWl0aW5nQ2FsbGJhY2sudGFrZShzdGF0aWNfY2FzdDxDYWNoZWRSYXdS
ZXNvdXJjZUNsaWVudCo+KGMpKTsKKyAgICBpZiAoY2FsbGJhY2spCisgICAgICAgIGNhbGxiYWNr
LT5jYW5jZWwoKTsKKyAgICBDYWNoZWRSZXNvdXJjZTo6cmVtb3ZlQ2xpZW50KGMpOworfQogCiB2
b2lkIENhY2hlZFJhd1Jlc291cmNlOjphbGxDbGllbnRzUmVtb3ZlZCgpCiB7CkBAIC0xMTMsOSAr
MTgyLDE1IEBACiAgICAgICAgIG1fbG9hZGVyLT5zZXREZWZlcnNMb2FkaW5nKGRlZmVycyk7CiB9
CiAKLXVuc2lnbmVkIGxvbmcgQ2FjaGVkUmF3UmVzb3VyY2U6OmlkZW50aWZpZXIoKSBjb25zdAor
Ym9vbCBDYWNoZWRSYXdSZXNvdXJjZTo6Y2FuUmV1c2UoKSBjb25zdAogewotICAgIHJldHVybiBt
X2xvYWRlciA/IG1fbG9hZGVyLT5pZGVudGlmaWVyKCkgOiAwOworICAgIGlmIChtX29wdGlvbnMu
c2hvdWxkQnVmZmVyRGF0YSA9PSBEb05vdEJ1ZmZlckRhdGEpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmIChtX3Jlc291cmNlUmVxdWVzdC5odHRwTWV0aG9kKCkgIT0gIkdFVCIpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126800</attachid>
            <date>2012-02-13 11:24:34 -0800</date>
            <delta_ts>2012-02-14 15:40:08 -0800</delta_ts>
            <desc>Address Antti&apos;s comments</desc>
            <filename>cachexhrs5.txt</filename>
            <type>text/plain</type>
            <size>18234</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL25ldHdvcmsvbmV0d29yay1j
b250ZW50LXJlcGxhY2VtZW50LXhoci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0
dHAvdGVzdHMvaW5zcGVjdG9yL25ldHdvcmsvbmV0d29yay1jb250ZW50LXJlcGxhY2VtZW50LXho
ci5odG1sCShyZXZpc2lvbiAxMDc0NDcpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3Bl
Y3Rvci9uZXR3b3JrL25ldHdvcmstY29udGVudC1yZXBsYWNlbWVudC14aHIuaHRtbAkod29ya2lu
ZyBjb3B5KQpAQCAtMTYsMjIgKzE2LDIyIEBACiAgICAgLy8gZGlzY2FyZCB0aGlyZCByZXNvdXJj
ZSBjb250ZW50IG9uY2Ugd2Ugc2VlIGl0cyBzaXplIGV4Y2VlZHMgbGltaXQsCiAgICAgLy8gYW5k
IGZpbmFsbHkgcmVwbGFjZSBmaXJzdCByZXNvdXJjZSBjb250ZW50IHdpdGggdGhlIGxhc3QgcmVz
b3VyY2UgY29udGVudC4KIAotICAgIGRvWEhSKCJHRVQiLCAicmVzb3VyY2VzL3Jlc291cmNlLnBo
cD9zaXplPTIwMCIsIHRydWUsIHhockxvYWRlZDEpOworICAgIGRvWEhSKCJHRVQiLCAicmVzb3Vy
Y2VzL3Jlc291cmNlLnBocD9zaXplPTIwMCIsIGZhbHNlLCB4aHJMb2FkZWQxKTsKIH0KIAogZnVu
Y3Rpb24geGhyTG9hZGVkMSgpCiB7Ci0gICAgZG9YSFIoIkdFVCIsICJyZXNvdXJjZXMvcmVzb3Vy
Y2UucGhwP3NpemU9MTAwIiwgdHJ1ZSwgeGhyTG9hZGVkMik7CisgICAgZG9YSFIoIkdFVCIsICJy
ZXNvdXJjZXMvcmVzb3VyY2UucGhwP3NpemU9MTAwIiwgZmFsc2UsIHhockxvYWRlZDIpOwogfQog
CiBmdW5jdGlvbiB4aHJMb2FkZWQyKCkKIHsKLSAgICBkb1hIUigiR0VUIiwgInJlc291cmNlcy9y
ZXNvdXJjZS5waHA/c2l6ZT0yMDEiLCB0cnVlLCB4aHJMb2FkZWQzKTsKKyAgICBkb1hIUigiR0VU
IiwgInJlc291cmNlcy9yZXNvdXJjZS5waHA/c2l6ZT0yMDEiLCBmYWxzZSwgeGhyTG9hZGVkMyk7
CiB9CiAKIGZ1bmN0aW9uIHhockxvYWRlZDMoKQogewotICAgIGRvWEhSKCJHRVQiLCAicmVzb3Vy
Y2VzL3Jlc291cmNlLnBocD9zaXplPTEwMCIsIHRydWUsIGFsbFhIUnNMb2FkZWQpOworICAgIGRv
WEhSKCJHRVQiLCAicmVzb3VyY2VzL3Jlc291cmNlLnBocD9zaXplPTEwMCIsIGZhbHNlLCBhbGxY
SFJzTG9hZGVkKTsKIH0KIAogZnVuY3Rpb24gYWxsWEhSc0xvYWRlZCgpCkluZGV4OiBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9uZXR3b3JrL25ldHdvcmstY29udGVudC1yZXBsYWNl
bWVudC14aHItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVz
dHMvaW5zcGVjdG9yL25ldHdvcmsvbmV0d29yay1jb250ZW50LXJlcGxhY2VtZW50LXhoci1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDEwNzQ0NykKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5z
cGVjdG9yL25ldHdvcmsvbmV0d29yay1jb250ZW50LXJlcGxhY2VtZW50LXhoci1leHBlY3RlZC50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTIsMTEgKzIsMTEgQEAKIFRlc3RzIE5ldHdvcmtSZXNvdXJj
ZXNEYXRhIGxvZ2ljIGZvciBYSFIgY29udGVudCByZXBsYWNlbWVudC4KIAogaHR0cDovLzEyNy4w
LjAuMTo4MDAwL2luc3BlY3Rvci9uZXR3b3JrL3Jlc291cmNlcy9yZXNvdXJjZS5waHA/c2l6ZT0y
MDAKLXJlc291cmNlLmNvbnRlbnQ6IAorcmVzb3VyY2UuY29udGVudDogbnVsbAogaHR0cDovLzEy
Ny4wLjAuMTo4MDAwL2luc3BlY3Rvci9uZXR3b3JrL3Jlc291cmNlcy9yZXNvdXJjZS5waHA/c2l6
ZT0xMDAKIHJlc291cmNlLmNvbnRlbnQ6ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioKIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9pbnNwZWN0b3IvbmV0d29yay9yZXNv
dXJjZXMvcmVzb3VyY2UucGhwP3NpemU9MjAxCi1yZXNvdXJjZS5jb250ZW50OiAKK3Jlc291cmNl
LmNvbnRlbnQ6IG51bGwKIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9pbnNwZWN0b3IvbmV0d29yay9y
ZXNvdXJjZXMvcmVzb3VyY2UucGhwP3NpemU9MTAwCiByZXNvdXJjZS5jb250ZW50OiAqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKSW5kZXg6IExheW91dFRlc3Rz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDEwNzQ0NykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE2IEBACisyMDEyLTAyLTEwICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgVGVzdCB1cGRhdGUgZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03NjU2NC4KKworICAgICAgICBVc2Ugc3luYyBYSFJzIGluc3RlYWQgb2YgYXN5
bmMgaW4gbmV0d29yay1jb250ZW50LXJlcGxhY2VtZW50LXhoci5odG1sLAorICAgICAgICBzaW5j
ZSB0aGUgaW5zcGVjdG9yIHB1bGxzIGFzeW5jIFhIUiBkYXRhIG9mZiBvZiBpdHMgQ2FjaGVkUmVz
b3VyY2UsIGluc3RlYWQKKyAgICAgICAgb2YgYSBidWZmZXIgaXQgY29udHJvbHMuCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL2lu
c3BlY3Rvci9uZXR3b3JrL25ldHdvcmstY29udGVudC1yZXBsYWNlbWVudC14aHItZXhwZWN0ZWQu
dHh0OgorICAgICAgICAqIGh0dHAvdGVzdHMvaW5zcGVjdG9yL25ldHdvcmsvbmV0d29yay1jb250
ZW50LXJlcGxhY2VtZW50LXhoci5odG1sOgorCiAyMDEyLTAyLTEwICBPamFuIFZhZmFpICA8b2ph
bkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgZmxleC1wYWNrOmNlbnRlciBhbmQgZmxleC1pdGVt
LWFsaWduOmNlbnRlciBzaG91bGQgZG8gdHJ1ZSBjZW50ZXJpbmcKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDEwNzQ0NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDQxIEBACisyMDEyLTAyLTEwICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgUmV1c2UgQ2FjaGVkUmF3UmVzb3VyY2VzIChlLmcuLCBYSFJz
KSB0aGF0IGFyZSBzdG9yZWQKKyAgICAgICAgaW4gdGhlIE1lbW9yeUNhY2hlIHdoZW4gYXBwcm9w
cmlhdGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
NjU2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cywgZXhwZWN0ZWQgYmVoYXZpb3IgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4K
KworICAgICAgICAqIGh0bWwvRE9NVVJMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVVSTDo6
cmV2b2tlT2JqZWN0VVJMKTogT2JqZWN0cyBzaG91bGRuJ3QgcmVtYWluIGluIHRoZQorICAgICAg
ICAgICAgTWVtb3J5Q2FjaGUgaWYgcmV2b2tlT2JqZWN0VVJMIGlzIGNhbGxlZCBvbiB0aGVtLgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZUNvbnRlbnQpOiBBZGQgQ2Fj
aGVkUmF3UmVzb3VyY2Ugc3VwcG9ydC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUmVz
b3VyY2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50
OjpzZXRDYWNoZURpc2FibGVkKTogSW1tZWRpYXRlbHkKKyAgICAgICAgICAgIGV2aWN0IHJlc291
cmNlcywgcmF0aGVyIHRoYW4gd2FpdGluZyBmb3IgbmF2aWdhdGlvbiwgc2luY2UgWEhScworICAg
ICAgICAgICAgc2hvdWxkIGhpdCB0aGUgY2FjaGUgaWYgaXQgaGFzIGJlZW4gZGlzYWJsZWQuCisg
ICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmNwcDoKKyAgICAgICAgKENh
Y2hlZFJhd1Jlc291cmNlQ2FsbGJhY2spOiBFbmNhcHN1bGF0ZXMgdGhlIGFzeW5jIGNhbGxiYWNr
IGZvcgorICAgICAgICAgICAgYSBjYWNoZSBoaXQgZm9yIENhY2hlZFJhd1Jlc291cmNlcy4KKyAg
ICAgICAgKFdlYkNvcmU6OkNhY2hlZFJhd1Jlc291cmNlOjpzZW5kQ2FsbGJhY2tzKTogRG8gdGhl
IHdvcmsgZGVmZXJlZCBpbiBkaWRBZGRDbGllbnQuCisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRS
YXdSZXNvdXJjZTo6ZGlkQWRkQ2xpZW50KTogU2NoZWR1bGVkIGEgQ2FjaGVkUmF3UmVzb3VyY2VD
YWxsYmFjayBpZgorICAgICAgICAgICAgd2UgYWxyZWFkeSBoYXZlIGEgcmVzcG9uc2UsIHNpbmNl
IGFzeW5jIFhIUnMgbWF5IG5vdCBwbGF5IG5pY2VseSB3aXRoIHJlY2VpdmluZworICAgICAgICAg
ICAgdGhlaXIgZGF0YSBzeW5jaHJvbm91c2x5LgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmF3
UmVzb3VyY2U6OnJlbW92ZUNsaWVudCk6IEVuc3VyZSB3ZSBjYW5jZWwgYSBjYWxsYmFjayB0byBh
IGNsaWVudCBpZgorICAgICAgICAgICAgaXQgcmVtb3ZlcyBpdHNlbGYuCisgICAgICAgIChXZWJD
b3JlOjpDYWNoZWRSYXdSZXNvdXJjZTo6Y2FuUmV1c2UpOiBQcm92aWRlIHNvbWUgYmFzaWMgcnVs
ZXMgZm9yIHdoZW4gYQorICAgICAgICAgICAgQ2FjaGVkUmF3UmVzb3VyY2UgY2FuIGJlIHJldXNl
ZC4KKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuaDoKKyAgICAgICAg
KiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaDoKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUv
Q2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3Vy
Y2VMb2FkZXI6OmRldGVybWluZVJldmFsaWRhdGlvblBvbGljeSk6IERvbid0IGF1dG9tYXRpY2Fs
bHkgcmVsb2FkCisgICAgICAgICAgICBDYWNoZWRSYXdSZXNvdXJjZXMsIGFuZCBhZGQgYSBjaGVj
ayBmb3Igd2hldGhlciB0aGlzIHJlcXVlc3QgaGFzIGFscmVhZHkgYmVlbgorICAgICAgICAgICAg
bWFkZSBjb25kaXRpb25hbC4KKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorCiAy
MDEyLTAyLTEwICBPamFuIFZhZmFpICA8b2phbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgZmxl
eC1wYWNrOmNlbnRlciBhbmQgZmxleC1pdGVtLWFsaWduOmNlbnRlciBzaG91bGQgZG8gdHJ1ZSBj
ZW50ZXJpbmcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvRE9NVVJMLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0RPTVVSTC5jcHAJKHJldmlzaW9uIDEwNzQ0NykKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvRE9NVVJMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiAr
MzQsNyBAQAogI2luY2x1ZGUgIkJsb2IuaCIKICNpbmNsdWRlICJCbG9iVVJMLmgiCiAjaW5jbHVk
ZSAiS1VSTC5oIgorI2luY2x1ZGUgIk1lbW9yeUNhY2hlLmgiCiAjaW5jbHVkZSAiUHVibGljVVJM
TWFuYWdlci5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRl
ICJTZWN1cml0eU9yaWdpbi5oIgpAQCAtODksNiArOTAsOCBAQAogICAgICAgICByZXR1cm47CiAK
ICAgICBLVVJMIHVybChLVVJMKCksIHVybFN0cmluZyk7CisgICAgaWYgKENhY2hlZFJlc291cmNl
KiByZXNvdXJjZSA9IG1lbW9yeUNhY2hlKCktPnJlc291cmNlRm9yVVJMKHVybCkpCisgICAgICAg
IG1lbW9yeUNhY2hlKCktPnJlbW92ZShyZXNvdXJjZSk7CiAKICAgICBIYXNoU2V0PFN0cmluZz4m
IGJsb2JVUkxzID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cHVibGljVVJMTWFuYWdlcigpLmJs
b2JVUkxzKCk7CiAgICAgaWYgKGJsb2JVUkxzLmNvbnRhaW5zKHVybC5zdHJpbmcoKSkpIHsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3Bw
CShyZXZpc2lvbiAxMDc0NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
UGFnZUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDcgKzEyMSw3IEBACiBzdGF0aWMg
Ym9vbCBoYXNUZXh0Q29udGVudChDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UpCiB7CiAg
ICAgSW5zcGVjdG9yUGFnZUFnZW50OjpSZXNvdXJjZVR5cGUgdHlwZSA9IEluc3BlY3RvclBhZ2VB
Z2VudDo6Y2FjaGVkUmVzb3VyY2VUeXBlKCpjYWNoZWRSZXNvdXJjZSk7Ci0gICAgcmV0dXJuIHR5
cGUgPT0gSW5zcGVjdG9yUGFnZUFnZW50OjpTdHlsZXNoZWV0UmVzb3VyY2UgfHwgdHlwZSA9PSBJ
bnNwZWN0b3JQYWdlQWdlbnQ6OlNjcmlwdFJlc291cmNlOworICAgIHJldHVybiB0eXBlID09IElu
c3BlY3RvclBhZ2VBZ2VudDo6U3R5bGVzaGVldFJlc291cmNlIHx8IHR5cGUgPT0gSW5zcGVjdG9y
UGFnZUFnZW50OjpTY3JpcHRSZXNvdXJjZSB8fCB0eXBlID09IEluc3BlY3RvclBhZ2VBZ2VudDo6
WEhSUmVzb3VyY2U7CiB9CiAKIGJvb2wgSW5zcGVjdG9yUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJj
ZUNvbnRlbnQoQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlLCBTdHJpbmcqIHJlc3VsdCwg
Ym9vbCogYmFzZTY0RW5jb2RlZCkKQEAgLTE0Myw2ICsxNDMsNyBAQAogICAgIH0KIAogICAgIGlm
IChjYWNoZWRSZXNvdXJjZSkgeworICAgICAgICBTaGFyZWRCdWZmZXIqIGJ1ZmZlciA9IGNhY2hl
ZFJlc291cmNlLT5kYXRhKCk7CiAgICAgICAgIHN3aXRjaCAoY2FjaGVkUmVzb3VyY2UtPnR5cGUo
KSkgewogICAgICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0OgogICAgICAg
ICAgICAgKnJlc3VsdCA9IHN0YXRpY19jYXN0PENhY2hlZENTU1N0eWxlU2hlZXQqPihjYWNoZWRS
ZXNvdXJjZSktPnNoZWV0VGV4dCgpOwpAQCAtMTUwLDYgKzE1MSw5IEBACiAgICAgICAgIGNhc2Ug
Q2FjaGVkUmVzb3VyY2U6OlNjcmlwdDoKICAgICAgICAgICAgICpyZXN1bHQgPSBzdGF0aWNfY2Fz
dDxDYWNoZWRTY3JpcHQqPihjYWNoZWRSZXNvdXJjZSktPnNjcmlwdCgpOwogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlJhd1Jlc291cmNlOgor
ICAgICAgICAgICAgKnJlc3VsdCA9IFN0cmluZyhidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXpl
KCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICBpZiAoaGFzWmVyb1NpemUpIHsKICAgICAgICAgICAgICAgICAqcmVzdWx0ID0gIiI7CkBA
IC0yNTQsNiArMjU4LDggQEAKICAgICAgICAgcmV0dXJuIEluc3BlY3RvclBhZ2VBZ2VudDo6U3R5
bGVzaGVldFJlc291cmNlOwogICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdDoKICAgICAg
ICAgcmV0dXJuIEluc3BlY3RvclBhZ2VBZ2VudDo6U2NyaXB0UmVzb3VyY2U7CisgICAgY2FzZSBD
YWNoZWRSZXNvdXJjZTo6UmF3UmVzb3VyY2U6CisgICAgICAgIHJldHVybiBJbnNwZWN0b3JQYWdl
QWdlbnQ6OlhIUlJlc291cmNlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3Vy
Y2VBZ2VudC5jcHAJKHJldmlzaW9uIDEwNzQ0NykKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUzLDcgKzI1
Myw3IEBACiAgICAgICAgICAgICB0eXBlID0gSW5zcGVjdG9yUGFnZUFnZW50OjpTY3JpcHRSZXNv
dXJjZTsKICAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0ZyYWdtZW50SWRlbnRpZmllcihy
ZXNwb25zZS51cmwoKSwgbG9hZGVyLT5mcmFtZUxvYWRlcigpLT5pY29uKCktPnVybCgpKSkKICAg
ICAgICAgICAgIHR5cGUgPSBJbnNwZWN0b3JQYWdlQWdlbnQ6OkltYWdlUmVzb3VyY2U7Ci0gICAg
ICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdGcmFnbWVudElkZW50aWZpZXIocmVzcG9uc2UudXJs
KCksIGxvYWRlci0+dXJsKCkpICYmIHR5cGUgPT0gSW5zcGVjdG9yUGFnZUFnZW50OjpPdGhlclJl
c291cmNlKQorICAgICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nRnJhZ21lbnRJZGVudGlmaWVy
KHJlc3BvbnNlLnVybCgpLCBsb2FkZXItPnVybCgpKSAmJiAhbG9hZGVyLT5pc0NvbW1pdHRlZCgp
KQogICAgICAgICAgICAgdHlwZSA9IEluc3BlY3RvclBhZ2VBZ2VudDo6RG9jdW1lbnRSZXNvdXJj
ZTsKIAogICAgICAgICBtX3Jlc291cmNlc0RhdGEtPnJlc3BvbnNlUmVjZWl2ZWQocmVxdWVzdElk
LCBtX3BhZ2VBZ2VudC0+ZnJhbWVJZChsb2FkZXItPmZyYW1lKCkpLCByZXNwb25zZSk7CkBAIC01
MjksNiArNTI5LDggQEAKIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6c2V0Q2FjaGVEaXNh
YmxlZChFcnJvclN0cmluZyosIGJvb2wgY2FjaGVEaXNhYmxlZCkKIHsKICAgICBtX3N0YXRlLT5z
ZXRCb29sZWFuKFJlc291cmNlQWdlbnRTdGF0ZTo6Y2FjaGVEaXNhYmxlZCwgY2FjaGVEaXNhYmxl
ZCk7CisgICAgaWYgKGNhY2hlRGlzYWJsZWQpCisgICAgICAgIG1lbW9yeUNhY2hlKCktPmV2aWN0
UmVzb3VyY2VzKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6bWFpbkZyYW1l
TmF2aWdhdGVkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS94
bWwvWE1MSHR0cFJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9Y
TUxIdHRwUmVxdWVzdC5jcHAJKHJldmlzaW9uIDEwNzQ0NykKKysrIFNvdXJjZS9XZWJDb3JlL3ht
bC9YTUxIdHRwUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMzcsNyArMTAzNywxMCBA
QAogICAgIC8vIEZJWE1FOiBTZXQgbV9yZXNwb25zZUJsb2IgdG8gc29tZXRoaW5nIGhlcmUgaW4g
dGhlIFJlc3BvbnNlVHlwZUJsb2IgY2FzZS4KICNlbmRpZgogCi0gICAgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpyZXNvdXJjZVJldHJpZXZlZEJ5WE1MSHR0cFJlcXVlc3Qoc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLCBpZGVudGlmaWVyLCBtX3Jlc3BvbnNlQnVpbGRlci50b1N0cmluZ1ByZXNl
cnZlQ2FwYWNpdHkoKSwgbV91cmwsIG1fbGFzdFNlbmRVUkwsIG1fbGFzdFNlbmRMaW5lTnVtYmVy
KTsKKyAgICAvLyBGb3IgQXN5bmNocm9ub3VzIFhIUnMsIHRoZSBpbnNwZWN0b3IgY2FuIGdyYWIg
dGhlIGRhdGEgZGlyZWN0bHkgb2ZmIG9mIHRoZSBDYWNoZWRSZXNvdXJjZS4gRm9yIHN5bmMgWEhS
cywgd2UgbmVlZCB0bworICAgIC8vIHByb3ZpZGUgdGhlIGRhdGEgaGVyZSwgc2luY2Ugbm8gQ2Fj
aGVkUmVzb3VyY2Ugd2FzIGludm9sdmVkLgorICAgIGlmICghbV9hc3luYykKKyAgICAgICAgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpyZXNvdXJjZVJldHJpZXZlZEJ5WE1MSHR0cFJlcXVlc3Qo
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBpZGVudGlmaWVyLCBtX3Jlc3BvbnNlQnVpbGRlci50
b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKSwgbV91cmwsIG1fbGFzdFNlbmRVUkwsIG1fbGFzdFNl
bmRMaW5lTnVtYmVyKTsKIAogICAgIGJvb2wgaGFkTG9hZGVyID0gbV9sb2FkZXI7CiAgICAgbV9s
b2FkZXIgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jl
c291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZFJhd1Jlc291cmNlLmgJKHJldmlzaW9uIDEwNzQ0NykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw4
IEBACiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgeworY2xhc3MgQ2FjaGVkUmF3UmVzb3VyY2VDYWxsYmFjazsKK2NsYXNzIENhY2hlZFJhd1Jl
c291cmNlQ2xpZW50OwogCiBjbGFzcyBDYWNoZWRSYXdSZXNvdXJjZSA6IHB1YmxpYyBDYWNoZWRS
ZXNvdXJjZSB7CiBwdWJsaWM6CkBAIC0zOCw4ICs0MCwxMyBAQAogICAgIHZpcnR1YWwgdm9pZCBz
ZXREZWZlcnNMb2FkaW5nKGJvb2wpOwogICAgIAogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGV4cG9z
ZWQgZm9yIHRoZSBJbnBzZWN0b3JJbnN0cnVtZW50YXRpb24gZm9yIHByZWZsaWdodHMgaW4gRG9j
dW1lbnRUaHJlYWRhYmxlTG9hZGVyLiBJdCdzIGFsc28gcmVhbGx5IGxhbWUuCi0gICAgdW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyKCkgY29uc3Q7CisgICAgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
KCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CiAKKyAgICBib29sIGNhblJldXNlKCkg
Y29uc3Q7CisgICAgdm9pZCBzZW5kQ2FsbGJhY2tzKENhY2hlZFJhd1Jlc291cmNlQ2xpZW50Kik7
CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50Kik7
CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJj
ZUNsaWVudCopOwogICAgIHZpcnR1YWwgdm9pZCBkYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVy
PiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7CkBAIC01NCw3ICs2MSw4IEBACiAgICAgdmly
dHVhbCB2b2lkIGRpZERvd25sb2FkRGF0YShpbnQpOwogI2VuZGlmCiAKLSAgICBzaXplX3QgbV9k
YXRhTGVuZ3RoOworICAgIHVuc2lnbmVkIGxvbmcgbV9pZGVudGlmaWVyOworICAgIEhhc2hNYXA8
Q2FjaGVkUmF3UmVzb3VyY2VDbGllbnQqLCBPd25QdHI8Q2FjaGVkUmF3UmVzb3VyY2VDYWxsYmFj
az4gPiBtX2NsaWVudHNBd2FpdGluZ0NhbGxiYWNrOwogfTsKIAogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAJKHJl
dmlzaW9uIDEwNzQ0NykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNv
dXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyMyw4ICs1MjMsMTMgQEAKICAgICAg
ICAgcmV0dXJuIFJlbG9hZDsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogQ3VycmVudGx5LCBhbGwg
Q2FjaGVkUmF3UmVzb3VyY2VzIGFyZSBhbHdheXMgcmVsb2FkZWQuIFNvbWUgb2YgdGhlbSBzaG91
bGQgYmUgY2FjaGVhYmxlLgotICAgIGlmIChleGlzdGluZ1Jlc291cmNlLT50eXBlKCkgPT0gQ2Fj
aGVkUmVzb3VyY2U6OlJhd1Jlc291cmNlKQorICAgIGlmIChleGlzdGluZ1Jlc291cmNlLT50eXBl
KCkgPT0gQ2FjaGVkUmVzb3VyY2U6OlJhd1Jlc291cmNlICYmICFzdGF0aWNfY2FzdDxDYWNoZWRS
YXdSZXNvdXJjZSo+KGV4aXN0aW5nUmVzb3VyY2UpLT5jYW5SZXVzZSgpKQorICAgICAgICAgcmV0
dXJuIFJlbG9hZDsKKworICAgIC8vIENlcnRhaW4gcmVxdWVzdHMgKGUuZy4sIFhIUnMpIG1pZ2h0
IGhhdmUgbWFudWFsbHkgc2V0IGhlYWRlcnMgdGhhdCByZXF1aXJlIHJldmFsaWRhdGlvbi4KKyAg
ICAvLyBGSVhNRTogSW4gdGhlb3J5LCB0aGlzIHNob3VsZCBiZSBhIFJldmFsaWRhdGUgY2FzZS4g
SW4gcHJhY3RpY2UsIHRoZSBNZW1vcnlDYWNoZSByZXZhbGlkYXRpb24gcGF0aCBhc3N1bWVzIGEg
d2hvbGUgYnVuY2gKKyAgICAvLyBvZiB0aGluZ3MgYWJvdXQgaG93IHJldmFsaWRhdGlvbiB3b3Jr
cyB0aGF0IG1hbnVhbCBoZWFkZXJzIHZpb2xhdGUsIHNvIHB1bnQgdG8gUmVsb2FkIGluc3RlYWQu
CisgICAgaWYgKHJlcXVlc3QuaXNDb25kaXRpb25hbCgpKQogICAgICAgICByZXR1cm4gUmVsb2Fk
OwogICAgIAogICAgIC8vIERvbid0IHJlbG9hZCByZXNvdXJjZXMgd2hpbGUgcGFzdGluZy4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oCShyZXZp
c2lvbiAxMDc0NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3Vy
Y2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDcgKzExMCw3IEBACiAgICAgdm9pZCBzZXRMb2Fk
UHJpb3JpdHkoUmVzb3VyY2VMb2FkUHJpb3JpdHkpOwogCiAgICAgdm9pZCBhZGRDbGllbnQoQ2Fj
aGVkUmVzb3VyY2VDbGllbnQqKTsKLSAgICB2b2lkIHJlbW92ZUNsaWVudChDYWNoZWRSZXNvdXJj
ZUNsaWVudCopOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnQoQ2FjaGVkUmVzb3VyY2VD
bGllbnQqKTsKICAgICBib29sIGhhc0NsaWVudHMoKSBjb25zdCB7IHJldHVybiAhbV9jbGllbnRz
LmlzRW1wdHkoKTsgfQogICAgIHZvaWQgZGVsZXRlSWZQb3NzaWJsZSgpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAJKHJl
dmlzaW9uIDEwNzQ0NykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdS
ZXNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDE4ICszNywyMSBAQAogCiBDYWNoZWRS
YXdSZXNvdXJjZTo6Q2FjaGVkUmF3UmVzb3VyY2UoUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJl
cXVlc3QpCiAgICAgOiBDYWNoZWRSZXNvdXJjZShyZXNvdXJjZVJlcXVlc3QsIFJhd1Jlc291cmNl
KQotICAgICwgbV9kYXRhTGVuZ3RoKDApCisgICAgLCBtX2lkZW50aWZpZXIoMCkKIHsKIH0KIAog
dm9pZCBDYWNoZWRSYXdSZXNvdXJjZTo6ZGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0
YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCiB7CiAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2Fj
aGVkUmF3UmVzb3VyY2U+IHByb3RlY3QodGhpcyk7CisgICAgaWYgKCFtX2lkZW50aWZpZXIpCisg
ICAgICAgIG1faWRlbnRpZmllciA9IG1fbG9hZGVyLT5pZGVudGlmaWVyKCk7CisKICAgICBpZiAo
ZGF0YSkgewogICAgICAgICAvLyBJZiB3ZSBhcmUgYnVmZmVyaW5nIGRhdGEsIHRoZW4gd2UgYXJl
IHNhdmluZyB0aGUgYnVmZmVyIGluIG1fZGF0YSBhbmQgbmVlZCB0byBtYW51YWxseQogICAgICAg
ICAvLyBjYWxjdWxhdGUgdGhlIGluY3JlbWVudGFsIGRhdGEuIElmIHdlIGFyZSBub3QgYnVmZmVy
aW5nLCB0aGVuIG1fZGF0YSB3aWxsIGJlIG51bGwgYW5kCiAgICAgICAgIC8vIHRoZSBidWZmZXIg
Y29udGFpbnMgb25seSB0aGUgaW5jcmVtZW50YWwgZGF0YS4KLSAgICAgICAgc2l6ZV90IHByZXZp
b3VzRGF0YUxlbmd0aCA9IChtX29wdGlvbnMuc2hvdWxkQnVmZmVyRGF0YSA9PSBCdWZmZXJEYXRh
KSA/IG1fZGF0YUxlbmd0aCA6IDA7CisgICAgICAgIHNpemVfdCBwcmV2aW91c0RhdGFMZW5ndGgg
PSAobV9vcHRpb25zLnNob3VsZEJ1ZmZlckRhdGEgPT0gQnVmZmVyRGF0YSkgPyBlbmNvZGVkU2l6
ZSgpIDogMDsKICAgICAgICAgQVNTRVJUKGRhdGEtPnNpemUoKSA+PSBwcmV2aW91c0RhdGFMZW5n
dGgpOwogICAgICAgICBjb25zdCBjaGFyKiBpbmNyZW1lbnRhbERhdGEgPSBkYXRhLT5kYXRhKCkg
KyBwcmV2aW91c0RhdGFMZW5ndGg7CiAgICAgICAgIHNpemVfdCBpbmNyZW1lbnRhbERhdGFMZW5n
dGggPSBkYXRhLT5zaXplKCkgLSBwcmV2aW91c0RhdGFMZW5ndGg7CkBAIC02MSwyMCArNjQsODMg
QEAKICAgICB9CiAgICAgCiAgICAgaWYgKG1fb3B0aW9ucy5zaG91bGRCdWZmZXJEYXRhID09IEJ1
ZmZlckRhdGEpIHsKLSAgICAgICAgbV9kYXRhTGVuZ3RoID0gZGF0YSA/IGRhdGEtPnNpemUoKSA6
IDA7CisgICAgICAgIGlmIChkYXRhKQorICAgICAgICAgICAgc2V0RW5jb2RlZFNpemUoZGF0YS0+
c2l6ZSgpKTsKICAgICAgICAgbV9kYXRhID0gZGF0YTsKICAgICB9CiAgICAgQ2FjaGVkUmVzb3Vy
Y2U6OmRhdGEobV9kYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwogfQogCitjbGFzcyBDYWNoZWRSYXdS
ZXNvdXJjZUNhbGxiYWNrIHsKK3B1YmxpYzogICAgCisgICAgc3RhdGljIENhY2hlZFJhd1Jlc291
cmNlQ2FsbGJhY2sqIHNjaGVkdWxlKENhY2hlZFJhd1Jlc291cmNlKiByZXNvdXJjZSwgQ2FjaGVk
UmF3UmVzb3VyY2VDbGllbnQqIGNsaWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgQ2Fj
aGVkUmF3UmVzb3VyY2VDYWxsYmFjayhyZXNvdXJjZSwgY2xpZW50KTsKKyAgICB9CisKKyAgICB2
b2lkIGNhbmNlbCgpCisgICAgeworICAgICAgICBpZiAobV9jYWxsYmFja1RpbWVyLmlzQWN0aXZl
KCkpCisgICAgICAgICAgICBtX2NhbGxiYWNrVGltZXIuc3RvcCgpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBDYWNoZWRSYXdSZXNvdXJjZUNhbGxiYWNrKENhY2hlZFJhd1Jlc291cmNlKiByZXNv
dXJjZSwgQ2FjaGVkUmF3UmVzb3VyY2VDbGllbnQqIGNsaWVudCkKKyAgICAgICAgOiBtX3Jlc291
cmNlKHJlc291cmNlKQorICAgICAgICAsIG1fY2xpZW50KGNsaWVudCkKKyAgICAgICAgLCBtX2Nh
bGxiYWNrVGltZXIodGhpcywgJkNhY2hlZFJhd1Jlc291cmNlQ2FsbGJhY2s6OnRpbWVyRmlyZWQp
CisgICAgeworICAgICAgICBtX2NhbGxiYWNrVGltZXIuc3RhcnRPbmVTaG90KDApOworICAgIH0K
KworICAgIHZvaWQgdGltZXJGaXJlZChUaW1lcjxDYWNoZWRSYXdSZXNvdXJjZUNhbGxiYWNrPiop
CisgICAgeworICAgICAgICBtX3Jlc291cmNlLT5zZW5kQ2FsbGJhY2tzKG1fY2xpZW50KTsKKyAg
ICB9CisgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmF3UmVzb3VyY2U+IG1fcmVzb3Vy
Y2U7CisgICAgQ2FjaGVkUmF3UmVzb3VyY2VDbGllbnQqIG1fY2xpZW50OworICAgIFRpbWVyPENh
Y2hlZFJhd1Jlc291cmNlQ2FsbGJhY2s+IG1fY2FsbGJhY2tUaW1lcjsKK307CisKK3ZvaWQgQ2Fj
aGVkUmF3UmVzb3VyY2U6OnNlbmRDYWxsYmFja3MoQ2FjaGVkUmF3UmVzb3VyY2VDbGllbnQqIGMp
Cit7CisgICAgaWYgKCFtX2NsaWVudHNBd2FpdGluZ0NhbGxiYWNrLmNvbnRhaW5zKGMpKQorICAg
ICAgICByZXR1cm47CisgICAgbV9jbGllbnRzQXdhaXRpbmdDYWxsYmFjay5yZW1vdmUoYyk7Cisg
ICAgYy0+cmVzcG9uc2VSZWNlaXZlZCh0aGlzLCBtX3Jlc3BvbnNlKTsKKyAgICBpZiAoIW1fY2xp
ZW50cy5jb250YWlucyhjKSB8fCAhbV9kYXRhKQorICAgICAgICByZXR1cm47CisgICAgYy0+ZGF0
YVJlY2VpdmVkKHRoaXMsIG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPnNpemUoKSk7CisgICAgaWYg
KCFtX2NsaWVudHMuY29udGFpbnMoYykgfHwgaXNMb2FkaW5nKCkpCisgICAgICAgcmV0dXJuOwor
ICAgIGMtPm5vdGlmeUZpbmlzaGVkKHRoaXMpOworfQorCiB2b2lkIENhY2hlZFJhd1Jlc291cmNl
OjpkaWRBZGRDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqIGMpCiB7Ci0gICAgaWYgKG1fZGF0
YSkgewotICAgICAgICBzdGF0aWNfY2FzdDxDYWNoZWRSYXdSZXNvdXJjZUNsaWVudCo+KGMpLT5y
ZXNwb25zZVJlY2VpdmVkKHRoaXMsIG1fcmVzcG9uc2UpOwotICAgICAgICBzdGF0aWNfY2FzdDxD
YWNoZWRSYXdSZXNvdXJjZUNsaWVudCo+KGMpLT5kYXRhUmVjZWl2ZWQodGhpcywgbV9kYXRhLT5k
YXRhKCksIG1fZGF0YS0+c2l6ZSgpKTsKLSAgICB9Ci0gICAgQ2FjaGVkUmVzb3VyY2U6OmRpZEFk
ZENsaWVudChjKTsKKyAgICBpZiAobV9yZXNwb25zZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gQ2FjaGVkUmF3UmVzb3VyY2VDbGllbnRzIChlc3BlY2lhbGx5IFhIUnMpIGRv
IGNyYXp5IHRoaW5ncyBpZiBhbiBhc3luY2hyb25vdXMgbG9hZCByZXR1cm5zCisgICAgLy8gc3lu
Y2hyb25vdXNseSAoZS5nLiwgc2NyaXB0cyBtYXkgbm90IGhhdmUgc2V0IGFsbCB0aGUgc3RhdGUg
dGhleSBuZWVkIHRvIGhhbmRsZSB0aGUgbG9hZCkuCisgICAgLy8gVGhlcmVmb3JlLCByYXRoZXIg
dGhhbiBpbW1lZGlhdGVseSBzZW5kaW5nIGNhbGxiYWNrcyBvbiBhIGNhY2hlIGhpdCBsaWtlIG90
aGVyIENhY2hlZFJlc291cmNlcywKKyAgICAvLyB3ZSBzY2hlZHVsZSB0aGUgY2FsbGJhY2tzIGFu
ZCBlbnN1cmUgd2UgbmV2ZXIgZmluaXNoIHN5bmNocm9ub3VzbHkuCisgICAgLy8gRklYTUU6IFdl
IGFsc28gdXNlIGFuIGFzeW5jIGNhbGxiYWNrIG9uIDMwNCBiZWNhdXNlIHdlIGRvbid0IGhhdmUg
c3VmZmljaWVudCBpbmZvcm1hdGlvbiB0bworICAgIC8vIGtub3cgd2hldGhlciB3ZSBhcmUgcmVj
ZWl2aW5nIG5ldyBjbGllbnRzIGJlY2F1c2Ugb2YgcmV2YWxpZGF0aW9uIG9yIHB1cmUgcmV1c2Uu
IFBlcmhhcHMgbW92ZQorICAgIC8vIHRoaXMgbG9naWMgdG8gQ2FjaGVkUmVzb3VyY2U/CisgICAg
Q2FjaGVkUmF3UmVzb3VyY2VDbGllbnQqIGNsaWVudCA9IHN0YXRpY19jYXN0PENhY2hlZFJhd1Jl
c291cmNlQ2xpZW50Kj4oYyk7CisgICAgQVNTRVJUKCFtX2NsaWVudHNBd2FpdGluZ0NhbGxiYWNr
LmNvbnRhaW5zKGNsaWVudCkpOworICAgIG1fY2xpZW50c0F3YWl0aW5nQ2FsbGJhY2suYWRkKGNs
aWVudCwgYWRvcHRQdHIoQ2FjaGVkUmF3UmVzb3VyY2VDYWxsYmFjazo6c2NoZWR1bGUodGhpcywg
Y2xpZW50KSkpOwogfQorIAordm9pZCBDYWNoZWRSYXdSZXNvdXJjZTo6cmVtb3ZlQ2xpZW50KENh
Y2hlZFJlc291cmNlQ2xpZW50KiBjKQoreworICAgIE93blB0cjxDYWNoZWRSYXdSZXNvdXJjZUNh
bGxiYWNrPiBjYWxsYmFjayA9IG1fY2xpZW50c0F3YWl0aW5nQ2FsbGJhY2sudGFrZShzdGF0aWNf
Y2FzdDxDYWNoZWRSYXdSZXNvdXJjZUNsaWVudCo+KGMpKTsKKyAgICBpZiAoY2FsbGJhY2spCisg
ICAgICAgIGNhbGxiYWNrLT5jYW5jZWwoKTsKKyAgICBjYWxsYmFjay5jbGVhcigpOworICAgIENh
Y2hlZFJlc291cmNlOjpyZW1vdmVDbGllbnQoYyk7Cit9CiAKIHZvaWQgQ2FjaGVkUmF3UmVzb3Vy
Y2U6OmFsbENsaWVudHNSZW1vdmVkKCkKIHsKQEAgLTExMyw5ICsxNzksMTUgQEAKICAgICAgICAg
bV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcoZGVmZXJzKTsKIH0KIAotdW5zaWduZWQgbG9uZyBD
YWNoZWRSYXdSZXNvdXJjZTo6aWRlbnRpZmllcigpIGNvbnN0Citib29sIENhY2hlZFJhd1Jlc291
cmNlOjpjYW5SZXVzZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fbG9hZGVyID8gbV9sb2FkZXIt
PmlkZW50aWZpZXIoKSA6IDA7CisgICAgaWYgKG1fb3B0aW9ucy5zaG91bGRCdWZmZXJEYXRhID09
IERvTm90QnVmZmVyRGF0YSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1fcmVz
b3VyY2VSZXF1ZXN0Lmh0dHBNZXRob2QoKSAhPSAiR0VUIikKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127064</attachid>
            <date>2012-02-14 15:40:08 -0800</date>
            <delta_ts>2012-02-22 15:07:31 -0800</delta_ts>
            <desc>Fix failing worker tests</desc>
            <filename>cache_bugfix.txt</filename>
            <type>text/plain</type>
            <size>4153</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNzc0MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDEyLTAyLTE0ICBOYXRlIENo
YXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgRml4IHRlc3QgcmVncmVzc29u
cyBmcm9tIHIxMDc2NzIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03NjU2NAorCisgICAgICAgIE1vdmUgc2V0dGluZyBDYWNoZWRSYXdSZXNvdXJjZTo6
bV9pZGVudGlmZXIgZnJvbQorICAgICAgICBkYXRhKCkgdG8gc2V0UmVzcG9uc2UoKS4gV29ya2Vy
U2NyaXB0TG9hZGVyIGRlcGVuZHMKKyAgICAgICAgb24gdGhlIGlkZW50aWZpZXIgYmVpbmcgc2V0
IGNvcnJlY3RseSBkdXJpbmcgc2V0UmVzcG9uc2UoKQorICAgICAgICBpbiBvcmRlciB0byBjb3Jy
ZWN0bHkgbWFyayBpdHNlbGYgYXMgYSBTY3JpcHRSZXNvdXJjZSBpbgorICAgICAgICB0aGUgaW5z
cGVjdG9yLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEZpeGVzIHNldmVyYWwgd29ya2VyIHNjcmlwdCBsb2FkaW5nIHRlc3RzLgorCisgICAgICAgICog
bG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNh
Y2hlZFJhd1Jlc291cmNlOjpkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJhd1Jlc291
cmNlOjpzZXRSZXNwb25zZSk6CisKIDIwMTItMDItMTQgIFJhbXlhIENoYW5kcmFzZWthcmFuICA8
Y3JhbXlhQGdvb2dsZS5jb20+CiAKICAgICAgICAgTGFzdCBjaGFyYWN0ZXIgZGlzcGxheSBmb3Ig
cGFzc3dvcmRzIGluIEFuZHJvaWQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUv
Q2FjaGVkUmF3UmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDEwNzcxMikKKysrIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0LDkgKzQ0LDYgQEAKIHZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6OmRhdGEoUGFzc1Jl
ZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogewogICAgIENh
Y2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJhd1Jlc291cmNlPiBwcm90ZWN0KHRoaXMpOwotICAg
IGlmICghbV9pZGVudGlmaWVyKQotICAgICAgICBtX2lkZW50aWZpZXIgPSBtX2xvYWRlci0+aWRl
bnRpZmllcigpOwotCiAgICAgaWYgKGRhdGEpIHsKICAgICAgICAgLy8gSWYgd2UgYXJlIGJ1ZmZl
cmluZyBkYXRhLCB0aGVuIHdlIGFyZSBzYXZpbmcgdGhlIGJ1ZmZlciBpbiBtX2RhdGEgYW5kIG5l
ZWQgdG8gbWFudWFsbHkKICAgICAgICAgLy8gY2FsY3VsYXRlIHRoZSBpbmNyZW1lbnRhbCBkYXRh
LiBJZiB3ZSBhcmUgbm90IGJ1ZmZlcmluZywgdGhlbiBtX2RhdGEgd2lsbCBiZSBudWxsIGFuZApA
QCAtMTYwLDYgKzE1Nyw4IEBACiAKIHZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6OnNldFJlc3BvbnNl
KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogeworICAgIGlmICghbV9pZGVudGlm
aWVyKQorICAgICAgICBtX2lkZW50aWZpZXIgPSBtX2xvYWRlci0+aWRlbnRpZmllcigpOwogICAg
IENhY2hlZFJlc291cmNlOjpzZXRSZXNwb25zZShyZXNwb25zZSk7CiAgICAgQ2FjaGVkUmVzb3Vy
Y2VDbGllbnRXYWxrZXI8Q2FjaGVkUmF3UmVzb3VyY2VDbGllbnQ+IHcobV9jbGllbnRzKTsKICAg
ICB3aGlsZSAoQ2FjaGVkUmF3UmVzb3VyY2VDbGllbnQqIGMgPSB3Lm5leHQoKSkKSW5kZXg6IExh
eW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
cGxhdGZvcm0vcXQvU2tpcHBlZAkocmV2aXNpb24gMTA3NzEyKQorKysgTGF5b3V0VGVzdHMvcGxh
dGZvcm0vcXQvU2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAtMjYxMSwxMiArMjYxMSw4IEBACiBm
YXN0L2V2ZW50cy9wYWdlc2hvdy1wYWdlaGlkZS1vbi1iYWNrLWNhY2hlZC5odG1sCiBmYXN0L2V2
ZW50cy9wYWdlc2hvdy1wYWdlaGlkZS1vbi1iYWNrLWNhY2hlZC13aXRoLWZyYW1lcy5odG1sCiAK
LSMgTGV0IE1lbW9yeUNhY2hlIHJldXNlIGNhY2hlZCBYSFJzIChSRUdSRVNTSU9OIGNhdXNlZCBi
eSByMTA3NjcyKQotIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY1
NjQKLWZhc3Qvd29ya2Vycy93b3JrZXItY3Jhc2gtd2l0aC1pbnZhbGlkLWxvY2F0aW9uLmh0bWwK
KyMgRmFpbHMgb24gbW9zdCBwbGF0Zm9ybXMsIHByb2JhYmx5IGZhaWxpbmcgZHVlIHRvIGFuIGVh
cmxpZXIgdGVzdC4KIGh0dHAvdGVzdHMvaW5zcGVjdG9yL2luc3BlY3QtZWxlbWVudC5odG1sCi1o
dHRwL3Rlc3RzL2luc3BlY3Rvci9uZXR3b3JrL25ldHdvcmstc2hhcmVkLXdvcmtlci5odG1sCi1o
dHRwL3Rlc3RzL2luc3BlY3Rvci9uZXR3b3JrL25ldHdvcmstd29ya2VyLmh0bWwKIAogIyBSZXBs
YWNlIG9sZCBzdHJ0b2Qgd2l0aCBuZXcgc3RydG9kIChSRUdSRVNTSU9OIGNhdXNlZCBieSByMTA3
NjI1KQogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgwNDQKSW5k
ZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCShyZXZpc2lvbiAxMDc3MTIpCisrKyBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAtMTYxNywxMCArMTYx
Nyw2IEBACiBmYXN0L211dGF0aW9uL2VuZC1vZi10YXNrLWRlbGl2ZXJ5Lmh0bWwKIGZhc3QvbXV0
YXRpb24vaW5saW5lLWV2ZW50LWxpc3RlbmVyLmh0bWwKIAotIyBMZXQgTWVtb3J5Q2FjaGUgcmV1
c2UgY2FjaGVkIFhIUnMgKFJFR1JFU1NJT04gY2F1c2VkIGJ5IHIxMDc2NzIpCi0jIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjU2NAotZmFzdC93b3JrZXJzL3dvcmtl
ci1jcmFzaC13aXRoLWludmFsaWQtbG9jYXRpb24uaHRtbAotCiAjIFJlcGxhY2Ugb2xkIHN0cnRv
ZCB3aXRoIG5ldyBzdHJ0b2QgKFJFR1JFU1NJT04gY2F1c2VkIGJ5IHIxMDc2MjUpCiAjIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODA0NAogZmFzdC92aWV3cG9ydC92
aWV3cG9ydC02Ny5odG1sCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMDc3NDIpCisrKyBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMi0wMi0xNCAg
TmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJlbW92ZSBTa2lw
cGVkIHRlc3RzIHRoYXQgd2VyZSBicm9rZW4gYnkgcjEwNzY3Mi4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NTY0CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2tpcHBlZDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9xdC9Ta2lwcGVkOgorCiAyMDEyLTAyLTE0ICBBbWkgRmlzY2htYW4g
IDxmaXNjaG1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQ29udmVydCBhIGNvdXBsZSBvZiBt
ZWRpYSBsYXlvdXR0ZXN0cyB0byBtb2NrIHNjcm9sbGJhcnMgJiByZWJhc2VsaW5lCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128034</attachid>
            <date>2012-02-21 13:32:45 -0800</date>
            <delta_ts>2012-02-22 15:07:31 -0800</delta_ts>
            <desc>Layout Test to verify Range request behavior.</desc>
            <filename>range-test.diff</filename>
            <type>text/plain</type>
            <size>4246</size>
            <attacher name="Aaron Colwell">acolwell</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvcmFuZ2Ut
dGVzdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0
L3JhbmdlLXRlc3QtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmY1NzQzYzgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3ht
bGh0dHByZXF1ZXN0L3JhbmdlLXRlc3QtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTAgQEAKK1Rl
c3QgUmFuZ2Ugc3VwcG9ydCBpbiBYTUxIdHRwUmVxdWVzdAorCitnZXRSYW5nZShyZXNvdXJjZXMv
cmVwbHkueG1sLCAzNCwgMzYsIGZhbHNlKQorTGVuZ3RoIDogZXhwZWN0ZWQgMiBnb3QgMgorZ2V0
UmFuZ2UocmVzb3VyY2VzL3JlcGx5LnhtbCwgMzUsIDM4LCBmYWxzZSkKK0xlbmd0aCA6IGV4cGVj
dGVkIDMgZ290IDMKK2dldFJhbmdlKHJlc291cmNlcy9yZXBseS54bWwsIDM0LCAzNiwgdHJ1ZSkK
K0xlbmd0aCA6IGV4cGVjdGVkIDIgZ290IDIKK2dldFJhbmdlKHJlc291cmNlcy9yZXBseS54bWws
IDM1LCAzOCwgdHJ1ZSkKK0xlbmd0aCA6IGV4cGVjdGVkIDMgZ290IDMKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvcmFuZ2UtdGVzdC5odG1sIGIvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9yYW5nZS10ZXN0Lmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhhZjBmZDcKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3JhbmdlLXRlc3QuaHRtbApA
QCAtMCwwICsxLDkxIEBACis8aHRtbD4KKzxib2R5PgorPHA+VGVzdCBSYW5nZSBzdXBwb3J0IGlu
IFhNTEh0dHBSZXF1ZXN0PC9wPgorPHNjcmlwdD4KKyAgICBpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsK
KyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0KKwor
ICAgIHZhciBjb25zb2xlX21lc3NhZ2VzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidWwiKTsK
KyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbnNvbGVfbWVzc2FnZXMpOworCisgICAg
ZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCisgICAgeworICAgICAgICB2YXIgaXRlbSA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImxpIik7CisgICAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQoZG9jdW1lbnQu
Y3JlYXRlVGV4dE5vZGUobWVzc2FnZSkpOworICAgICAgICBjb25zb2xlX21lc3NhZ2VzLmFwcGVu
ZENoaWxkKGl0ZW0pOworICAgIH0KKworICAgIGZ1bmN0aW9uIGdldFJhbmdlKHVybCwgc3RhcnQs
IGVuZCwgdXNlVW5pcXVlVXJscywgZnVsbFJlc3BvbnNlLCBkb25lX2NhbGxiYWNrKSB7CisgICAg
ICAgIGxvZygiZ2V0UmFuZ2UoIiArIHVybCArICIsICIgKyBzdGFydCArICIsICIgKyBlbmQgKyAi
LCAiICsgdXNlVW5pcXVlVXJscyArICIpIik7CisgICAgICAgIHZhciByZXEgPSBuZXcgWE1MSHR0
cFJlcXVlc3Q7CisKKyAgICAgICAgaWYgKHVzZVVuaXF1ZVVybHMpCisgICAgICAgICAgdXJsID0g
dXJsICsgIj9xPSIgKyBzdGFydCArICItIiArIGVuZDsKKworICAgICAgICByZXEub3BlbigiR0VU
IiwgdXJsLCB0cnVlKTsKKyAgICAgICAgcmVxLnNldFJlcXVlc3RIZWFkZXIoIlJhbmdlIiwgImJ5
dGVzPSIgKyBzdGFydCArICItIiArIChlbmQgLSAxKSk7CisgICAgICAgIHJlcS5yZXNwb25zZVR5
cGUgPSAnYXJyYXlidWZmZXInOworICAgICAgICByZXEub25yZWFkeXN0YXRlY2hhbmdlID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICBpZiAocmVxLnJlYWR5U3RhdGUgPT0gNCkgeworICAgICAg
ICAgICAgICAgIGlmIChyZXEuc3RhdHVzICE9IDIwNikKKyAgICAgICAgICAgICAgICAgICAgbG9n
KCJFeHBlY3RlZCBhIDIwNiByZXNwb25zZSwgZ290ICIgKyByZXEuc3RhdHVzKTsKKworICAgICAg
ICAgICAgICAgIHZhciBleHBlY3RlZCA9IGZ1bGxSZXNwb25zZS5zdWJhcnJheShzdGFydCwgZW5k
KTsKKyAgICAgICAgICAgICAgICB2YXIgYWN0dWFsID0gbmV3IFVpbnQ4QXJyYXkocmVxLnJlc3Bv
bnNlKTsKKyAgICAgICAgICAgICAgICBsb2coIkxlbmd0aCA6IGV4cGVjdGVkICIgKyBleHBlY3Rl
ZC5sZW5ndGggKyAiIGdvdCAiICsgYWN0dWFsLmxlbmd0aCk7CisKKyAgICAgICAgICAgICAgICBp
ZiAoZXhwZWN0ZWQubGVuZ3RoID09IGFjdHVhbC5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gVmVyaWZ5IHRoYXQgYWxsIHRoZSBkYXRhIGlzIHdoYXQgd2UgZXhwZWN0LgorICAgICAg
ICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGVjdGVkLmxlbmd0aDsgKytpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWN0dWFsW2ldICE9IGV4cGVjdGVkW2ldKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJhY3R1YWxbIiArIGkgKyAiXSAhPSBl
eHBlY3RlZFsiICsgaSArICJdICgiICsgYWN0dWFsW2ldICsgIiAhPSAiICsgZXhwZWN0ZWRbaV0g
KyAiKSIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRvbmVfY2FsbGJhY2soKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgcmVxLnNlbmQobnVsbCk7CisgICAgfQor
CisgICAgZnVuY3Rpb24gcnVuUmFuZ2VUZXN0KHVzZVVuaXF1ZVVybHMsIGRvbmVfY2FsbGJhY2sp
IHsKKyAgICAgICAgLy8gRmlyc3QgZmV0Y2ggZnVsbCByZXNvdXJjZS4KKyAgICAgICAgdmFyIHVy
bCA9ICJyZXNvdXJjZXMvcmVwbHkueG1sIjsKKyAgICAgICAgdmFyIHJlcSA9IG5ldyBYTUxIdHRw
UmVxdWVzdDsKKyAgICAgICAgcmVxLm9wZW4oIkdFVCIsIHVybCwgdHJ1ZSk7CisgICAgICAgIHJl
cS5yZXNwb25zZVR5cGUgPSAnYXJyYXlidWZmZXInOworICAgICAgICByZXEub25yZWFkeXN0YXRl
Y2hhbmdlID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgIGlmIChyZXEucmVhZHlTdGF0ZSA9
PSA0KSB7CisgICAgICAgICAgICAgICAgICB2YXIgZnVsbFJlc3BvbnNlID0gbmV3IFVpbnQ4QXJy
YXkocmVxLnJlc3BvbnNlKTsKKyAgICAgICAgICAgICAgICAgIHZhciBzdGFydE9mZnNldCA9IGZ1
bGxSZXNwb25zZS5sZW5ndGggLyAyOworICAgICAgICAgICAgICAgICAgdmFyIGVuZE9mZnNldCA9
IHN0YXJ0T2Zmc2V0ICsgMjsKKworICAgICAgICAgICAgICAgICAgLy8gTmV4dCBmZXRjaCBhIHN1
YnJhbmdlIGluIHRoZSBtaWRkbGUgb2YgdGhlIHJlc291cmNlLgorICAgICAgICAgICAgICAgICAg
Z2V0UmFuZ2UodXJsLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCB1c2VVbmlxdWVVcmxzLCBmdWxs
UmVzcG9uc2UsIGZ1bmN0aW9uKCkgeworCisgICAgICAgICAgICAgICAgICAgICAgLy8gRmV0Y2gg
YSBkaWZmZXJlbnQgcmFuZ2UgbmVhciB0aGUgbWlkZGxlIG9mIHRoZSByZXNvdXJjZS4KKyAgICAg
ICAgICAgICAgICAgICAgICBnZXRSYW5nZSh1cmwsIHN0YXJ0T2Zmc2V0ICsgMSwgZW5kT2Zmc2V0
ICsgMiwgdXNlVW5pcXVlVXJscywgZnVsbFJlc3BvbnNlLCBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgZG9uZV9jYWxsYmFjaygpOworICAgICAgICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9
OworICAgICAgICByZXEuc2VuZChudWxsKTsKKyAgICB9CisKKyAgICAvLyBGaXJzdCB0ZXN0IHJh
bmdlIHJlcXVlc3RzIHVzaW5nIHRoZSBleGFjdCBzYW1lIFVSTC4KKyAgICBydW5SYW5nZVRlc3Qo
ZmFsc2UsIGZ1bmN0aW9uKCkgeworICAgICAgICAvLyBOZXh0IHRlc3Qgdy8gYSBxdWVyeSBwYXJh
bWV0ZXIgYXBwZW5kZWQgc28gdGhhdCBlYWNoIFhIUgorICAgICAgICAvLyBoYXMgYSB1bmlxdWUg
VVJMLgorICAgICAgICBydW5SYW5nZVRlc3QodHJ1ZSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKworICAgICAgICB9KTsKKyAgICB9KTsKKwor
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128297</attachid>
            <date>2012-02-22 15:07:31 -0800</date>
            <delta_ts>2012-02-22 16:46:48 -0800</delta_ts>
            <desc>Fix Range header handling</desc>
            <filename>range.txt</filename>
            <type>text/plain</type>
            <size>6563</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwODU1MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDEyLTAyLTIyICBOYXRlIENo
YXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXIgaWdub3JlcyB0aGUgUmFuZ2UgaGVhZGVyCisgICAgICAgIGluIGRldGVybWluZVJhdmxpZGF0
aW9uUG9saWN5KCksIHJlc3VsdGluZyBpbiBpbmNvcnJlY3QKKyAgICAgICAgY2FjaGUgaGl0cy4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBo
dHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3JhbmdlLXRlc3QuaHRtbAorICAgICAgICBUZXN0IHdy
aXR0ZW4gYnkgQWFyb24gQ29sd2VsbCAoYWNvbHdlbGxAY2hyb21pdW0ub3JnKS4KKworICAgICAg
ICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6ZGV0ZXJtaW5lUmV2YWxpZGF0aW9uUG9saWN5KToK
KwogMjAxMi0wMi0yMiAgVG9tIFNlcGV6ICA8dHNlcGV6QGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBYU1NBdWRpdG9yIGJ5cGFzcyB3aXRoIDxzdmc+IHRhZ3MgYW5kIGh0bWwtZW50aXRpZXMuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJj
ZUxvYWRlci5jcHAJKHJldmlzaW9uIDEwODU0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzMSw2ICs1
MzEsMTEgQEAKICAgICAvLyBvZiB0aGluZ3MgYWJvdXQgaG93IHJldmFsaWRhdGlvbiB3b3JrcyB0
aGF0IG1hbnVhbCBoZWFkZXJzIHZpb2xhdGUsIHNvIHB1bnQgdG8gUmVsb2FkIGluc3RlYWQuCiAg
ICAgaWYgKHJlcXVlc3QuaXNDb25kaXRpb25hbCgpKQogICAgICAgICByZXR1cm4gUmVsb2FkOwor
CisgICAgLy8gUmUtdXNpbmcgcmVzb3VyY2VzIGluIHRoZSBjYXNlIG9mIGEgUmFuZ2UgaGVhZGVy
IGlzIHZlcnkgc2ltcGxlIGlmIHRoZSBoZWFkZXJzIGFyZSBpZGVudGljYWwgYW5kCisgICAgLy8g
bXVjaCB0b3VnaGVyIGlmIHRoZXkgYXJlbid0LgorICAgIGlmIChleGlzdGluZ1Jlc291cmNlLT5y
ZXNvdXJjZVJlcXVlc3QoKS5odHRwSGVhZGVyRmllbGQoIlJhbmdlIikgIT0gcmVxdWVzdC5odHRw
SGVhZGVyRmllbGQoIlJhbmdlIikpCisgICAgICAgIHJldHVybiBSZWxvYWQ7CiAgICAgCiAgICAg
Ly8gRG9uJ3QgcmVsb2FkIHJlc291cmNlcyB3aGlsZSBwYXN0aW5nLgogICAgIGlmIChtX2FsbG93
U3RhbGVSZXNvdXJjZXMpCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1
ZXN0L3JhbmdlLXRlc3QtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0
dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvcmFuZ2UtdGVzdC1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3JhbmdlLXRlc3Qt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitUZXN0IFJhbmdlIHN1
cHBvcnQgaW4gWE1MSHR0cFJlcXVlc3QKKworZ2V0UmFuZ2UocmVzb3VyY2VzL3JlcGx5LnhtbCwg
MzQsIDM2LCBmYWxzZSkKK0xlbmd0aCA6IGV4cGVjdGVkIDIgZ290IDIKK2dldFJhbmdlKHJlc291
cmNlcy9yZXBseS54bWwsIDM1LCAzOCwgZmFsc2UpCitMZW5ndGggOiBleHBlY3RlZCAzIGdvdCAz
CitnZXRSYW5nZShyZXNvdXJjZXMvcmVwbHkueG1sLCAzNCwgMzYsIHRydWUpCitMZW5ndGggOiBl
eHBlY3RlZCAyIGdvdCAyCitnZXRSYW5nZShyZXNvdXJjZXMvcmVwbHkueG1sLCAzNSwgMzgsIHRy
dWUpCitMZW5ndGggOiBleHBlY3RlZCAzIGdvdCAzCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3htbGh0dHByZXF1ZXN0L3JhbmdlLXRlc3QuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3JhbmdlLXRlc3QuaHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvcmFuZ2UtdGVzdC5o
dG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkxIEBACis8aHRtbD4KKzxib2R5PgorPHA+VGVz
dCBSYW5nZSBzdXBwb3J0IGluIFhNTEh0dHBSZXF1ZXN0PC9wPgorPHNjcmlwdD4KKyAgICBpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGls
RG9uZSgpOworICAgIH0KKworICAgIHZhciBjb25zb2xlX21lc3NhZ2VzID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgidWwiKTsKKyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbnNvbGVf
bWVzc2FnZXMpOworCisgICAgZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCisgICAgeworICAgICAgICB2
YXIgaXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpIik7CisgICAgICAgIGl0ZW0uYXBw
ZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobWVzc2FnZSkpOworICAgICAgICBjb25z
b2xlX21lc3NhZ2VzLmFwcGVuZENoaWxkKGl0ZW0pOworICAgIH0KKworICAgIGZ1bmN0aW9uIGdl
dFJhbmdlKHVybCwgc3RhcnQsIGVuZCwgdXNlVW5pcXVlVXJscywgZnVsbFJlc3BvbnNlLCBkb25l
X2NhbGxiYWNrKSB7CisgICAgICAgIGxvZygiZ2V0UmFuZ2UoIiArIHVybCArICIsICIgKyBzdGFy
dCArICIsICIgKyBlbmQgKyAiLCAiICsgdXNlVW5pcXVlVXJscyArICIpIik7CisgICAgICAgIHZh
ciByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3Q7CisKKyAgICAgICAgaWYgKHVzZVVuaXF1ZVVybHMp
CisgICAgICAgICAgdXJsID0gdXJsICsgIj9xPSIgKyBzdGFydCArICItIiArIGVuZDsKKworICAg
ICAgICByZXEub3BlbigiR0VUIiwgdXJsLCB0cnVlKTsKKyAgICAgICAgcmVxLnNldFJlcXVlc3RI
ZWFkZXIoIlJhbmdlIiwgImJ5dGVzPSIgKyBzdGFydCArICItIiArIChlbmQgLSAxKSk7CisgICAg
ICAgIHJlcS5yZXNwb25zZVR5cGUgPSAnYXJyYXlidWZmZXInOworICAgICAgICByZXEub25yZWFk
eXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBpZiAocmVxLnJlYWR5U3Rh
dGUgPT0gNCkgeworICAgICAgICAgICAgICAgIGlmIChyZXEuc3RhdHVzICE9IDIwNikKKyAgICAg
ICAgICAgICAgICAgICAgbG9nKCJFeHBlY3RlZCBhIDIwNiByZXNwb25zZSwgZ290ICIgKyByZXEu
c3RhdHVzKTsKKworICAgICAgICAgICAgICAgIHZhciBleHBlY3RlZCA9IGZ1bGxSZXNwb25zZS5z
dWJhcnJheShzdGFydCwgZW5kKTsKKyAgICAgICAgICAgICAgICB2YXIgYWN0dWFsID0gbmV3IFVp
bnQ4QXJyYXkocmVxLnJlc3BvbnNlKTsKKyAgICAgICAgICAgICAgICBsb2coIkxlbmd0aCA6IGV4
cGVjdGVkICIgKyBleHBlY3RlZC5sZW5ndGggKyAiIGdvdCAiICsgYWN0dWFsLmxlbmd0aCk7CisK
KyAgICAgICAgICAgICAgICBpZiAoZXhwZWN0ZWQubGVuZ3RoID09IGFjdHVhbC5sZW5ndGgpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gVmVyaWZ5IHRoYXQgYWxsIHRoZSBkYXRhIGlzIHdoYXQg
d2UgZXhwZWN0LgorICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGVj
dGVkLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWN0dWFsW2ld
ICE9IGV4cGVjdGVkW2ldKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJhY3R1
YWxbIiArIGkgKyAiXSAhPSBleHBlY3RlZFsiICsgaSArICJdICgiICsgYWN0dWFsW2ldICsgIiAh
PSAiICsgZXhwZWN0ZWRbaV0gKyAiKSIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRv
bmVfY2FsbGJhY2soKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgcmVxLnNl
bmQobnVsbCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcnVuUmFuZ2VUZXN0KHVzZVVuaXF1ZVVy
bHMsIGRvbmVfY2FsbGJhY2spIHsKKyAgICAgICAgLy8gRmlyc3QgZmV0Y2ggZnVsbCByZXNvdXJj
ZS4KKyAgICAgICAgdmFyIHVybCA9ICJyZXNvdXJjZXMvcmVwbHkueG1sIjsKKyAgICAgICAgdmFy
IHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdDsKKyAgICAgICAgcmVxLm9wZW4oIkdFVCIsIHVybCwg
dHJ1ZSk7CisgICAgICAgIHJlcS5yZXNwb25zZVR5cGUgPSAnYXJyYXlidWZmZXInOworICAgICAg
ICByZXEub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgIGlm
IChyZXEucmVhZHlTdGF0ZSA9PSA0KSB7CisgICAgICAgICAgICAgICAgICB2YXIgZnVsbFJlc3Bv
bnNlID0gbmV3IFVpbnQ4QXJyYXkocmVxLnJlc3BvbnNlKTsKKyAgICAgICAgICAgICAgICAgIHZh
ciBzdGFydE9mZnNldCA9IGZ1bGxSZXNwb25zZS5sZW5ndGggLyAyOworICAgICAgICAgICAgICAg
ICAgdmFyIGVuZE9mZnNldCA9IHN0YXJ0T2Zmc2V0ICsgMjsKKworICAgICAgICAgICAgICAgICAg
Ly8gTmV4dCBmZXRjaCBhIHN1YnJhbmdlIGluIHRoZSBtaWRkbGUgb2YgdGhlIHJlc291cmNlLgor
ICAgICAgICAgICAgICAgICAgZ2V0UmFuZ2UodXJsLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCB1
c2VVbmlxdWVVcmxzLCBmdWxsUmVzcG9uc2UsIGZ1bmN0aW9uKCkgeworCisgICAgICAgICAgICAg
ICAgICAgICAgLy8gRmV0Y2ggYSBkaWZmZXJlbnQgcmFuZ2UgbmVhciB0aGUgbWlkZGxlIG9mIHRo
ZSByZXNvdXJjZS4KKyAgICAgICAgICAgICAgICAgICAgICBnZXRSYW5nZSh1cmwsIHN0YXJ0T2Zm
c2V0ICsgMSwgZW5kT2Zmc2V0ICsgMiwgdXNlVW5pcXVlVXJscywgZnVsbFJlc3BvbnNlLCBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZV9jYWxsYmFjaygpOworICAg
ICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICB9OworICAgICAgICByZXEuc2VuZChudWxsKTsKKyAgICB9CisKKyAg
ICAvLyBGaXJzdCB0ZXN0IHJhbmdlIHJlcXVlc3RzIHVzaW5nIHRoZSBleGFjdCBzYW1lIFVSTC4K
KyAgICBydW5SYW5nZVRlc3QoZmFsc2UsIGZ1bmN0aW9uKCkgeworICAgICAgICAvLyBOZXh0IHRl
c3Qgdy8gYSBxdWVyeSBwYXJhbWV0ZXIgYXBwZW5kZWQgc28gdGhhdCBlYWNoIFhIUgorICAgICAg
ICAvLyBoYXMgYSB1bmlxdWUgVVJMLgorICAgICAgICBydW5SYW5nZVRlc3QodHJ1ZSwgZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAg
ICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKworICAgICAg
ICB9KTsKKyAgICB9KTsKKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxMDg1NTMpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxMyBAQAorMjAxMi0wMi0yMiAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFRlc3QgUmFuZ2UgaGVhZGVyIGNvbXBsaWFuY2UgZm9yIENhY2hl
ZFJlc291cmNlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTc2NTY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3JhbmdlLXRlc3QtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3JhbmdlLXRlc3QuaHRt
bDogQWRkZWQuCisKIDIwMTItMDItMjIgIFRvbSBTZXBleiAgPHRzZXBlekBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgWFNTQXVkaXRvciBieXBhc3Mgd2l0aCA8c3ZnPiB0YWdzIGFuZCBodG1sLWVu
dGl0aWVzLgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>