<?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>33248</bug_id>
          
          <creation_ts>2010-01-05 22:25:48 -0800</creation_ts>
          <short_desc>WebSocket should close the connection when unloading the document</short_desc>
          <delta_ts>2010-02-04 22:28:43 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Fumitoshi Ukai">ukai</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>177541</commentid>
    <comment_count>0</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2010-01-05 22:25:48 -0800</bug_when>
    <thetext>http://www.whatwg.org/specs/web-apps/current-work/#unloading-documents says:

6.11.10 Unloading documents

When a user agent is to unload a document, it must run the following steps. These steps are passed an argument, recycle, which is either true or false, indicating whether the Document object is going to be re-used. (This is set by the document.open() method.)
...
7. Close the Web Socket connection of any WebSocket objects that were created by the WebSocket() constructor visible on the Document&apos;s Window object. If this affected any WebSocket objects, set salvageable to false.

But current implementation doesn&apos;t close the Web Socket connection when unloading the document.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177550</commentid>
    <comment_count>1</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2010-01-06 00:53:55 -0800</bug_when>
    <thetext>It looks Safari closes the connection when unloaded, but chromium doesn&apos;t.
Is it v8 binding issue?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181140</commentid>
    <comment_count>2</comment_count>
      <attachid>46649</attachid>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2010-01-15 00:48:45 -0800</bug_when>
    <thetext>Created attachment 46649
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181141</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-01-15 00:53:41 -0800</bug_when>
    <thetext>Attachment 46649 did not build on mac:
Build output: http://webkit-commit-queue.appspot.com/results/187985</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181142</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-15 00:55:12 -0800</bug_when>
    <thetext>Attachment 46649 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/189025</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181144</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-15 00:57:25 -0800</bug_when>
    <thetext>Attachment 46649 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/189030</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181153</commentid>
    <comment_count>6</comment_count>
      <attachid>46655</attachid>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2010-01-15 01:45:57 -0800</bug_when>
    <thetext>Created attachment 46655
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183490</commentid>
    <comment_count>7</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-01-21 22:36:47 -0800</bug_when>
    <thetext>Do you know why Safari closes the connection but chromium doesn&apos;t?

Anyway, since this looks like a generic websocket patch and ap has been reviewing these and working in the same area, it would probably make sense for him to review this .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183498</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-01-21 23:00:04 -0800</bug_when>
    <thetext>&gt; Do you know why Safari closes the connection but chromium doesn&apos;t?

Yes, that&apos;s a very interesting question - I don&apos;t see anything in CF-specific code that would do that. In particular, it&apos;s not clear what guarantees WebSocketChannel::m_context pointer not becoming stale.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183501</commentid>
    <comment_count>9</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2010-01-21 23:07:12 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; Do you know why Safari closes the connection but chromium doesn&apos;t?
&gt; 
&gt; Yes, that&apos;s a very interesting question - I don&apos;t see anything in CF-specific
&gt; code that would do that. In particular, it&apos;s not clear what guarantees
&gt; WebSocketChannel::m_context pointer not becoming stale.

Should we override ActiveDOMObject::contextDestroyed() and calls websocket disconnect() in it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183718</commentid>
    <comment_count>10</comment_count>
      <attachid>46655</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-01-22 11:26:21 -0800</bug_when>
    <thetext>Comment on attachment 46655
Patch

On the Mac, connections are closed due to garbage collection:

#0	0x05b3c3f5 in WebCore::SocketStreamHandle::platformClose at SocketStreamHandleCFNet.cpp:604
#1	0x05b3af84 in WebCore::SocketStreamHandleBase::close at SocketStreamHandleBase.cpp:83
#2	0x05cd5ee2 in WebCore::WebSocketChannel::disconnect at WebSocketChannel.cpp:112
#3	0x05cd5460 in WebCore::WebSocket::~WebSocket at WebSocket.cpp:106
#4	0x058de89b in WTF::RefCounted&lt;WebCore::WebSocket&gt;::deref at RefCounted.h:109
#5	0x058de8c0 in WTF::RefPtr&lt;WebCore::WebSocket&gt;::~RefPtr at RefPtr.h:53
#6	0x058de6cc in WebCore::JSWebSocket::~JSWebSocket at JSWebSocket.cpp:124
#7	0x00d1c274 in JSC::Heap::sweep at Collector.cpp:1084
#8	0x00d1db95 in JSC::Heap::collectAllGarbage at Collector.cpp:1264

I&apos;m surprised this doesn&apos;t work with v8, but anyway, relying on GC is insufficient. The right way to kill WebSocket connections is likely from an overridden AciveDOMObject::stop() method - similarly to how it&apos;s done for XMLHttpRequest.

&gt; Should we override ActiveDOMObject::contextDestroyed() and calls websocket
&gt; disconnect() in it?

Overriding ActiveDOMObject::contextDestroyed() to avoid having a dangling pointer in WebSocketChannel sounds reasonable, but I don&apos;t see how calling disconnect() achieves that goal. Even if it does somehow, that&apos;s probably too indirect to be reliable.

+//    ws = new WebSocket(&quot;ws://127.0.0.1:8880/websocket/tests/close-when-unload&quot;);
+    ws = new WebSocket(&quot;ws://172.30.85.230:8880/websocket/tests/close-when-unload&quot;);

URLs in the test are not correct.

+    setTimeout(&apos;unload()&apos;, 500);

You can test unloading by removing an iframe - that way, the test wouldn&apos;t need to be timing dependent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183751</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-01-22 12:25:05 -0800</bug_when>
    <thetext>I tried to make test cases for WebSocket lifetime, expecting to get some crashes. But it turns out that WebSocket lifetime is broken in ways that prevent making such tests - I filed bug 34014 for one such issue, but there could be more. It&apos;s good in the sense that we don&apos;t crash, but layering further improvements upon current behavior can be problematic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187279</commentid>
    <comment_count>12</comment_count>
      <attachid>47998</attachid>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2010-02-02 23:10:09 -0800</bug_when>
    <thetext>Created attachment 47998
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187379</commentid>
    <comment_count>13</comment_count>
      <attachid>47998</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-02-03 08:29:33 -0800</bug_when>
    <thetext>Comment on attachment 47998
Patch

Nice test! r=me

&gt; +        WebSocket should close the connection when unloading the document

One thing I&apos;m not quite sure about - how does the HTML5 &quot;unload the document&quot; concept correspond to detaching a frame? Maybe we should make one or two more variations of this test - in one, we&apos;d force garbage collection after detaching subframe; in another, we&apos;d keep a reference to frames[0].document, making sure that it outlives the frame.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187381</commentid>
    <comment_count>14</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-02-03 08:32:23 -0800</bug_when>
    <thetext>Also, what happens when navigating the frame to a different location (without removing it). I think that works just fine, because we&apos;ll call ActiveDOMObject::stop as usual, but this doesn&apos;t seem to be covered by any tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187585</commentid>
    <comment_count>15</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2010-02-03 18:24:22 -0800</bug_when>
    <thetext>Committed r54319: &lt;http://trac.webkit.org/changeset/54319&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187612</commentid>
    <comment_count>16</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2010-02-03 20:13:17 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 47998 [details])
&gt; Nice test! r=me
&gt; 
&gt; &gt; +        WebSocket should close the connection when unloading the document
&gt; 
&gt; One thing I&apos;m not quite sure about - how does the HTML5 &quot;unload the document&quot;
&gt; concept correspond to detaching a frame? 

I think iframe constructs a nested browsing context, so removing it would cause &quot;unload the document&quot;..

&gt; Maybe we should make one or two more
&gt; variations of this test - in one, we&apos;d force garbage collection after detaching
&gt; subframe;

I&apos;m not sure what it is trying to test. set event handler to websocket in frame (like websocket-pending-activity.html?) and detaching subframe and force garbage collection and see it would get onmessage ?

&gt; in another, we&apos;d keep a reference to frames[0].document, making sure
&gt; that it outlives the frame.

this means websocket object is kept in parent document of the frame and see it won&apos;t be closed after detaching the frame?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187616</commentid>
    <comment_count>17</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2010-02-03 20:18:05 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; Also, what happens when navigating the frame to a different location (without
&gt; removing it). I think that works just fine, because we&apos;ll call
&gt; ActiveDOMObject::stop as usual, but this doesn&apos;t seem to be covered by any
&gt; tests.

Sure. https://bugs.webkit.org/show_bug.cgi?id=34557</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187638</commentid>
    <comment_count>18</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-02-03 22:59:24 -0800</bug_when>
    <thetext>&gt; I&apos;m not sure what it is trying to test. set event handler to websocket in frame
&gt; (like websocket-pending-activity.html?) and detaching subframe and force
&gt; garbage collection and see it would get onmessage ?

I think it will get stopped, just testing that it won&apos;t crash.

&gt;&gt; in another, we&apos;d keep a reference to frames[0].document, making sure
&gt;&gt; that it outlives the frame.

&gt; this means websocket object is kept in parent document of the frame and see it
&gt; won&apos;t be closed after detaching the frame?

I was thinking about a reference to an object from child context. Again, just to see that it&apos;s not crashing (which is of course so, since detaching the frame will stop network activity, and nothing will happen to the object).

Another variation:

// in subframe
top.ws = new WebSocket;

// in parent frame
// ...detach subframe
ws.open(...)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187641</commentid>
    <comment_count>19</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2010-02-03 23:11:17 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; &gt; I&apos;m not sure what it is trying to test. set event handler to websocket in frame
&gt; &gt; (like websocket-pending-activity.html?) and detaching subframe and force
&gt; &gt; garbage collection and see it would get onmessage ?
&gt; 
&gt; I think it will get stopped, just testing that it won&apos;t crash.

Ah, I see.
 
&gt; &gt;&gt; in another, we&apos;d keep a reference to frames[0].document, making sure
&gt; &gt;&gt; that it outlives the frame.
&gt; 
&gt; &gt; this means websocket object is kept in parent document of the frame and see it
&gt; &gt; won&apos;t be closed after detaching the frame?
&gt; 
&gt; I was thinking about a reference to an object from child context. Again, just
&gt; to see that it&apos;s not crashing (which is of course so, since detaching the frame
&gt; will stop network activity, and nothing will happen to the object).
&gt; 
&gt; Another variation:
&gt; 
&gt; // in subframe
&gt; top.ws = new WebSocket;
&gt; 
&gt; // in parent frame
&gt; // ...detach subframe
&gt; ws.open(...)

Ok.  https://bugs.webkit.org/show_bug.cgi?id=34562</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187668</commentid>
    <comment_count>20</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2010-02-04 00:44:26 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; &gt; I&apos;m not sure what it is trying to test. set event handler to websocket in frame
&gt; &gt; (like websocket-pending-activity.html?) and detaching subframe and force
&gt; &gt; garbage collection and see it would get onmessage ?
&gt; 
&gt; I think it will get stopped, just testing that it won&apos;t crash.
&gt; 
&gt; &gt;&gt; in another, we&apos;d keep a reference to frames[0].document, making sure
&gt; &gt;&gt; that it outlives the frame.
&gt; 
&gt; &gt; this means websocket object is kept in parent document of the frame and see it
&gt; &gt; won&apos;t be closed after detaching the frame?
&gt; 
&gt; I was thinking about a reference to an object from child context. Again, just
&gt; to see that it&apos;s not crashing (which is of course so, since detaching the frame
&gt; will stop network activity, and nothing will happen to the object).
&gt; 
&gt; Another variation:
&gt; 
&gt; // in subframe
&gt; top.ws = new WebSocket;
&gt; 
&gt; // in parent frame
&gt; // ...detach subframe
&gt; ws.open(...)

Ah, there is no open method in WebSocket object.  What do you want to do in the test?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187818</commentid>
    <comment_count>21</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-02-04 08:50:28 -0800</bug_when>
    <thetext>Oops, sorry. Perhaps testing send() makes sense in this situation?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188074</commentid>
    <comment_count>22</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2010-02-04 22:28:43 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; Oops, sorry. Perhaps testing send() makes sense in this situation?

Hmm, after detaching frame, ws is CLOSED, so send() should return false.
https://bugs.webkit.org/show_bug.cgi?id=34630</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46649</attachid>
            <date>2010-01-15 00:48:45 -0800</date>
            <delta_ts>2010-01-15 01:45:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-33248-20100115174843.patch</filename>
            <type>text/plain</type>
            <size>12022</size>
            <attacher name="Fumitoshi Ukai">ukai</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBmOGMwMjg5Li5lNGEwN2EzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMDEt
MTUgIEZ1bWl0b3NoaSBVa2FpICA8dWthaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViU29ja2V0IGNsb3NlIHRoZSBjb25u
ZWN0aW9uIHdoZW4gdW5sb2FkaW5nIHRoZSBkb2N1bWVudC4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMzMjQ4CisKKyAgICAgICAgKiB3ZWJzb2NrZXQv
dGVzdHMvY2xvc2Utd2hlbi11bmxvYWQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3
ZWJzb2NrZXQvdGVzdHMvY2xvc2Utd2hlbi11bmxvYWQuaHRtbDogQWRkZWQuCisgICAgICAgICog
d2Vic29ja2V0L3Rlc3RzL2Nsb3NlLXdoZW4tdW5sb2FkX3dzaC5weTogQWRkZWQuCisgICAgICAg
ICogd2Vic29ja2V0L3Rlc3RzL3Jlc291cmNlcy9jbG9zZS13aGVuLXVubG9hZC5odG1sOiBBZGRl
ZC4KKwogMjAxMC0wMS0xNCAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgog
CiAgICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL2Nsb3NlLXdoZW4tdW5sb2Fk
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy9jbG9zZS13aGVuLXVu
bG9hZC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTcz
NDdmNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy9jbG9z
ZS13aGVuLXVubG9hZC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1IEBACitUZXN0IGlmIHdlYnNv
Y2tldCBjb25uZWN0aW9uIGlzIGNsb3NlZCB3aGVuIHVubG9hZCB0aGUgZG9jdW1lbnQuCitDcmVh
dGVkIDJuZCBzb2NrZXQgdG8gJ3dzOi8vMTcyLjMwLjg1LjIzMDo4ODgwL3dlYnNvY2tldC90ZXN0
cy9jbG9zZS13aGVuLXVubG9hZCcKK1NvY2tldCBvcGVuCitQQVNTOiBtc2cgaXMgInNvY2tldDEg
Y2xvc2VkIgorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvY2xvc2Ut
d2hlbi11bmxvYWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy9jbG9zZS13aGVu
LXVubG9hZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ODFiMjgK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvY2xvc2Utd2hl
bi11bmxvYWQuaHRtbApAQCAtMCwwICsxLDM2IEBACis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgor
PGJvZHk+Cis8ZGl2IGlkPSdkZXNjcmlwdGlvbic+VGVzdCBpZiB3ZWJzb2NrZXQgY29ubmVjdGlv
biBpcyBjbG9zZWQgd2hlbiB1bmxvYWQgdGhlIGRvY3VtZW50LjwvZGl2PgorPHByZSBpZD0nY29u
c29sZSc+PC9wcmU+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikg
eworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisKK2Z1bmN0aW9uIGxvZyhtc2cpCit7Cisg
ICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5hcHBlbmRDaGlsZChkb2N1bWVu
dC5jcmVhdGVUZXh0Tm9kZShtc2cgKyAiXG4iKSk7Cit9OworCitmdW5jdGlvbiB1bmxvYWQoKQor
eworICAgIHdpbmRvdy5sb2NhdGlvbiA9ICdyZXNvdXJjZXMvY2xvc2Utd2hlbi11bmxvYWQuaHRt
bCc7Cit9OworCisvL3ZhciB3cyA9IG5ldyBXZWJTb2NrZXQoIndzOi8vMTI3LjAuMC4xOjg4ODAv
d2Vic29ja2V0L3Rlc3RzL2Nsb3NlLXdoZW4tdW5sb2FkIik7Cit2YXIgd3MgPSBuZXcgV2ViU29j
a2V0KCJ3czovLzE3Mi4zMC44NS4yMzA6ODg4MC93ZWJzb2NrZXQvdGVzdHMvY2xvc2Utd2hlbi11
bmxvYWQiKTsKK2xvZygiQ3JlYXRlZCBhIHNvY2tldCB0byAnIiArIHdzLlVSTCArICInIik7Cit3
cy5vbm9wZW4gPSBmdW5jdGlvbigpCit7CisgICAgbG9nKCJTb2NrZXQgb3BlbiIpOworICAgIHdz
LnNlbmQoJ3NvY2tldDEnKTsKKyAgICBzZXRUaW1lb3V0KCd1bmxvYWQoKScsIDUwMCk7Cit9Owor
Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2Vic29ja2V0L3Rlc3RzL2Nsb3NlLXdoZW4tdW5sb2FkX3dzaC5weSBiL0xheW91dFRlc3RzL3dl
YnNvY2tldC90ZXN0cy9jbG9zZS13aGVuLXVubG9hZF93c2gucHkKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uYjA0MDQ5YgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3dlYnNvY2tldC90ZXN0cy9jbG9zZS13aGVuLXVubG9hZF93c2gucHkKQEAgLTAsMCArMSw1MSBA
QAorIyBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlv
bi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisj
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
IyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKKworZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IG1zZ3V0
aWwKKworbGFzdFNvY2tldCA9ICdubyBzb2NrZXQnCisKK2RlZiB3ZWJfc29ja2V0X2RvX2V4dHJh
X2hhbmRzaGFrZShyZXF1ZXN0KToKKyAgICBwYXNzICMgQWx3YXlzIGFjY2VwdC4KKworCitkZWYg
d2ViX3NvY2tldF90cmFuc2Zlcl9kYXRhKHJlcXVlc3QpOgorICAgIGdsb2JhbCBsYXN0U29ja2V0
CisgICAgbXNndXRpbC5zZW5kX21lc3NhZ2UocmVxdWVzdCwgbGFzdFNvY2tldCArICcgY2xvc2Vk
JykKKyAgICBtZXNzYWdlID0gJ25vIHNvY2tldCcKKyAgICB0cnk6CisgICAgICAgIHdoaWxlIFRy
dWU6CisgICAgICAgICAgICBtZXNzYWdlID0gbXNndXRpbC5yZWNlaXZlX21lc3NhZ2UocmVxdWVz
dCkKKyAgICAgICAgICAgIHByaW50IG1lc3NhZ2UKKyAgICBmaW5hbGx5OgorICAgICAgICAjIGNv
bWUgaGVyZSB3aGVuIGNvbm5lY3Rpb24gaXMgY2xvc2VkLgorICAgICAgICBsYXN0U29ja2V0ID0g
bWVzc2FnZQorICAgICAgICBwcmludCBsYXN0U29ja2V0CisKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3Jlc291cmNlcy9jbG9zZS13aGVuLXVubG9hZC5odG1sIGIv
TGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3Jlc291cmNlcy9jbG9zZS13aGVuLXVubG9hZC5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNTMzYjQKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvcmVzb3VyY2VzL2Nsb3NlLXdo
ZW4tdW5sb2FkLmh0bWwKQEAgLTAsMCArMSw5MiBAQAorPGh0bWw+Cis8aGVhZD4KKzwvaGVhZD4K
KzxkaXYgaWQ9J2Rlc2NyaXB0aW9uJz5UZXN0IGlmIHdlYnNvY2tldCBjb25uZWN0aW9uIGlzIGNs
b3NlZCB3aGVuIHVubG9hZCB0aGUgZG9jdW1lbnQuPC9kaXY+Cis8cHJlIGlkPSdjb25zb2xlJz48
L3ByZT4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9s
bGVyLndhaXRVbnRpbERvbmUoKTsKK30KK2Z1bmN0aW9uIGxvZyhtc2cpCit7CisgICAgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVU
ZXh0Tm9kZShtc2cgKyAiXG4iKSk7Cit9OworCitmdW5jdGlvbiB0ZXN0UGFzc2VkKG1zZykKK3sK
KyAgICBsb2coIlBBU1M6ICIgKyBtc2cpOworfTsKKworZnVuY3Rpb24gdGVzdEZhaWxlZChtc2cp
Cit7CisgICAgbG9nKCJGQUlMOiAiICsgbXNnKTsKK307CisKK2Z1bmN0aW9uIGlzUmVzdWx0Q29y
cmVjdChfYWN0dWFsLCBfZXhwZWN0ZWQpCit7CisgICAgaWYgKF9leHBlY3RlZCA9PT0gMCkKKyAg
ICAgICAgcmV0dXJuIF9hY3R1YWwgPT09IF9leHBlY3RlZCAmJiAoMS9fYWN0dWFsKSA9PT0gKDEv
X2V4cGVjdGVkKTsKKyAgICBpZiAoX2FjdHVhbCA9PT0gX2V4cGVjdGVkKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBpZiAodHlwZW9mKF9leHBlY3RlZCkgPT0gIm51bWJlciIgJiYgaXNOYU4o
X2V4cGVjdGVkKSkKKyAgICAgICAgcmV0dXJuIHR5cGVvZihfYWN0dWFsKSA9PSAibnVtYmVyIiAm
JiBpc05hTihfYWN0dWFsKTsKKyAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxs
KF9leHBlY3RlZCkgPT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFtdKSkKKyAgICAg
ICAgcmV0dXJuIGFyZUFycmF5c0VxdWFsKF9hY3R1YWwsIF9leHBlY3RlZCk7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitmdW5jdGlvbiBzdHJpbmdpZnkodikKK3sKKyAgICBpZiAodiA9PT0gMCAm
JiAxL3YgPCAwKQorICAgICAgICByZXR1cm4gIi0wIjsKKyAgICBlbHNlIHJldHVybiAiIiArIHY7
Cit9CisKK2Z1bmN0aW9uIHNob3VsZEJlKF9hLCBfYikKK3sKKyAgaWYgKHR5cGVvZiBfYSAhPSAi
c3RyaW5nIiB8fCB0eXBlb2YgX2IgIT0gInN0cmluZyIpCisgICAgbG9nKCJXQVJOOiBzaG91bGRC
ZSgpIGV4cGVjdHMgc3RyaW5nIGFyZ3VtZW50cyIpOworICB2YXIgZXhjZXB0aW9uOworICB2YXIg
X2F2OworICB0cnkgeworICAgICBfYXYgPSBldmFsKF9hKTsKKyAgfSBjYXRjaCAoZSkgeworICAg
ICBleGNlcHRpb24gPSBlOworICB9CisgIHZhciBfYnYgPSBldmFsKF9iKTsKKworICBpZiAoZXhj
ZXB0aW9uKQorICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBiZSAiICsgX2J2ICsgIi4gVGhy
ZXcgZXhjZXB0aW9uICIgKyBleGNlcHRpb24pOworICBlbHNlIGlmIChpc1Jlc3VsdENvcnJlY3Qo
X2F2LCBfYnYpKQorICAgIHRlc3RQYXNzZWQoX2EgKyAiIGlzICIgKyBfYik7CisgIGVsc2UgaWYg
KHR5cGVvZihfYXYpID09IHR5cGVvZihfYnYpKQorICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3Vs
ZCBiZSAiICsgX2J2ICsgIi4gV2FzICIgKyBzdHJpbmdpZnkoX2F2KSArICIuIik7CisgIGVsc2UK
KyAgICB0ZXN0RmFpbGVkKF9hICsgIiBzaG91bGQgYmUgIiArIF9idiArICIgKG9mIHR5cGUgIiAr
IHR5cGVvZiBfYnYgKyAiKS4gV2FzICIgKyBfYXYgKyAiIChvZiB0eXBlICIgKyB0eXBlb2YgX2F2
ICsgIikuIik7Cit9CisKK3ZhciB3czsKK3ZhciBtc2c7CitmdW5jdGlvbiB0ZXN0KCkKK3sKKy8v
ICAgIHdzID0gbmV3IFdlYlNvY2tldCgid3M6Ly8xMjcuMC4wLjE6ODg4MC93ZWJzb2NrZXQvdGVz
dHMvY2xvc2Utd2hlbi11bmxvYWQiKTsKKyAgICB3cyA9IG5ldyBXZWJTb2NrZXQoIndzOi8vMTcy
LjMwLjg1LjIzMDo4ODgwL3dlYnNvY2tldC90ZXN0cy9jbG9zZS13aGVuLXVubG9hZCIpOworICAg
IGxvZygiQ3JlYXRlZCAybmQgc29ja2V0IHRvICciICsgd3MuVVJMICsgIiciKTsKKyAgICB3cy5v
bm9wZW4gPSBmdW5jdGlvbigpCisgICAgeworICAgICAgICBsb2coIlNvY2tldCBvcGVuIik7Cisg
ICAgfQorICAgIHdzLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2dCkKKyAgICB7CisgICAgICAgIG1z
ZyA9IGV2dC5kYXRhOworICAgICAgICBzaG91bGRCZSgibXNnIiwgJyJzb2NrZXQxIGNsb3NlZCIn
KTsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9Cit9OworCitzZXRUaW1l
b3V0KCJ0ZXN0KCkiLCA1MDApOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGUzMWVkNmIu
LjYzZDVlODkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTAtMDEtMTUgIEZ1bWl0b3NoaSBVa2FpICA8dWth
aUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgV2ViU29ja2V0IGNsb3NlIHRoZSBjb25uZWN0aW9uIHdoZW4gdW5sb2FkaW5nIHRo
ZSBkb2N1bWVudC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTMzMjQ4CisgICAgICAgIAorICAgICAgICBNYWludGFpbiBXZWJTb2NrZXQgZm9yIGVhY2gg
ZG9jdW1lbnQgKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpLgorICAgICAgICBXaGVuIHVubG9hZGlu
ZyB0aGUgZG9jdW1lbnQsIGNsb3NlIGFsbCBXZWJTb2NrZXRzIGFzc29jaWF0ZWQgd2l0aAorICAg
ICAgICB0aGUgZG9jdW1lbnQuCisKKyAgICAgICAgVGVzdDogd2Vic29ja2V0L3Rlc3RzL2Nsb3Nl
LXdoZW4tdW5sb2FkLmh0bWwKKworICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6c3RvcExvYWRpbmcpOgorICAgICAgICAqIHdl
YnNvY2tldHMvV2ViU29ja2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndlYlNvY2tldHNPblNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpjbG9z
ZUNvbm5lY3Rpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6V2ViU29ja2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6fldlYlNvY2tldCk6CisgICAgICAgICogd2Vi
c29ja2V0cy9XZWJTb2NrZXQuaDoKKwogMjAxMC0wMS0xNCAgR2F2aW4gQmFycmFjbG91Z2ggIDxi
YXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgUnViYmVyIHN0YW1wZWQgYnkgU2FtIFdl
aW5pZy4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcCBiL1dlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAppbmRleCAyNjU0NWY0Li40ZDA0NGIzIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKKysrIGIvV2ViQ29yZS9sb2FkZXIv
RnJhbWVMb2FkZXIuY3BwCkBAIC05OSw2ICs5OSw3IEBACiAjZW5kaWYKIAogI2luY2x1ZGUgIlRl
eHRSZXNvdXJjZURlY29kZXIuaCIKKyNpbmNsdWRlICJXZWJTb2NrZXQuaCIKICNpbmNsdWRlICJX
aW5kb3dGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlhNTEh0dHBSZXF1ZXN0LmgiCiAjaW5jbHVkZSAi
WE1MVG9rZW5pemVyLmgiCkBAIC01NzIsNiArNTczLDExIEBAIHZvaWQgRnJhbWVMb2FkZXI6OnN0
b3BMb2FkaW5nKFVubG9hZEV2ZW50UG9saWN5IHVubG9hZEV2ZW50UG9saWN5LCBEYXRhYmFzZVBv
bGljCiAjZW5kaWYKICAgICB9CiAKKyNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMpCisgICAgaWYgKERv
Y3VtZW50KiBkb2MgPSBtX2ZyYW1lLT5kb2N1bWVudCgpKQorICAgICAgICBXZWJTb2NrZXQ6OmNs
b3NlQ29ubmVjdGlvbnMoZG9jKTsKKyNlbmRpZgorCiAgICAgLy8gdGVsbCBhbGwgc3ViZnJhbWVz
IHRvIHN0b3AgYXMgd2VsbAogICAgIGZvciAoRnJhbWUqIGNoaWxkID0gbV9mcmFtZS0+dHJlZSgp
LT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCktPm5leHRTaWJsaW5n
KCkpCiAgICAgICAgIGNoaWxkLT5sb2FkZXIoKS0+c3RvcExvYWRpbmcodW5sb2FkRXZlbnRQb2xp
Y3kpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAgYi9XZWJD
b3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAppbmRleCAwNDM1NDkwLi4wMWQ2NGYyIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAorKysgYi9XZWJDb3JlL3dl
YnNvY2tldHMvV2ViU29ja2V0LmNwcApAQCAtNDYsNyArNDYsOSBAQAogI2luY2x1ZGUgIlN0cmlu
Z0J1aWxkZXIuaCIKICNpbmNsdWRlICJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oIgogI2lu
Y2x1ZGUgIldlYlNvY2tldENoYW5uZWwuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtOTQsMTYgKzk2LDYwIEBAIGJvb2wgV2ViU29ja2V0Ojpp
c0F2YWlsYWJsZSgpCiAKICNlbmRpZgogCit0eXBlZGVmIEhhc2hNYXA8U2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFZlY3RvcjxXZWJTb2NrZXQqPiogPiBXZWJTb2NrZXRNYXA7CisKK3N0YXRpYyBX
ZWJTb2NrZXRNYXAmIHdlYlNvY2tldHNPblNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKQoreworICAg
IERFRklORV9TVEFUSUNfTE9DQUwoV2ViU29ja2V0TWFwLCB3ZWJTb2NrZXRNYXAsICgpKTsKKyAg
ICByZXR1cm4gd2ViU29ja2V0TWFwOworfQorCit2b2lkIFdlYlNvY2tldDo6Y2xvc2VDb25uZWN0
aW9ucyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQoreworICAgIFdlYlNvY2tldE1h
cCYgd2ViU29ja2V0TWFwID0gd2ViU29ja2V0c09uU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwor
ICAgIFdlYlNvY2tldE1hcDo6aXRlcmF0b3IgZm91bmQgPSB3ZWJTb2NrZXRNYXAuZmluZChjb250
ZXh0KTsKKyAgICBpZiAoZm91bmQgPT0gd2ViU29ja2V0TWFwLmVuZCgpKQorICAgICAgICByZXR1
cm47CisgICAgVmVjdG9yPFdlYlNvY2tldCo+KiB3ZWJTb2NrZXRWZWN0b3IgPSAqZm91bmQ7Cisg
ICAgd2ViU29ja2V0TWFwLnJlbW92ZShmb3VuZCk7CisgICAgaWYgKCF3ZWJTb2NrZXRWZWN0b3Ip
CisgICAgICAgIHJldHVybjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgd2ViU29ja2V0
VmVjdG9yLT5zaXplKCk7IGkrKykgeworICAgICAgICBXZWJTb2NrZXQqIHdlYlNvY2tldCA9IHdl
YlNvY2tldFZlY3Rvci0+YXQoaSk7CisgICAgICAgIGlmICh3ZWJTb2NrZXQpCisgICAgICAgICAg
ICB3ZWJTb2NrZXQtPmNsb3NlKCk7CisgICAgICAgIHdlYlNvY2tldFZlY3Rvci0+YXQoaSkgPSAw
OworICAgIH0KKyAgICBkZWxldGUgd2ViU29ja2V0VmVjdG9yOworfQorCiBXZWJTb2NrZXQ6Oldl
YlNvY2tldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogICAgIDogQWN0aXZlRE9N
T2JqZWN0KGNvbnRleHQsIHRoaXMpCiAgICAgLCBtX3N0YXRlKENPTk5FQ1RJTkcpCiB7CisgICAg
V2ViU29ja2V0TWFwJiB3ZWJTb2NrZXRNYXAgPSB3ZWJTb2NrZXRzT25TY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CisgICAgVmVjdG9yPFdlYlNvY2tldCo+KiB3ZWJTb2NrZXRWZWN0b3IgPSB3ZWJT
b2NrZXRNYXAuZ2V0KGNvbnRleHQpOworICAgIGlmICghd2ViU29ja2V0VmVjdG9yKSB7CisgICAg
ICAgIHdlYlNvY2tldFZlY3RvciA9IG5ldyBWZWN0b3I8V2ViU29ja2V0Kj47CisgICAgICAgIHdl
YlNvY2tldE1hcC5hZGQoY29udGV4dCwgd2ViU29ja2V0VmVjdG9yKTsKKyAgICB9CisgICAgd2Vi
U29ja2V0VmVjdG9yLT5hcHBlbmQodGhpcyk7CiB9CiAKIFdlYlNvY2tldDo6fldlYlNvY2tldCgp
CiB7CiAgICAgaWYgKG1fY2hhbm5lbCkKICAgICAgICAgbV9jaGFubmVsLT5kaXNjb25uZWN0KCk7
CisgICAgV2ViU29ja2V0TWFwJiB3ZWJTb2NrZXRNYXAgPSB3ZWJTb2NrZXRzT25TY3JpcHRFeGVj
dXRpb25Db250ZXh0KCk7CisgICAgVmVjdG9yPFdlYlNvY2tldCo+KiB3ZWJTb2NrZXRWZWN0b3Ig
PSB3ZWJTb2NrZXRNYXAuZ2V0KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CisgICAgaWYgKCF3
ZWJTb2NrZXRWZWN0b3IpCisgICAgICAgIHJldHVybjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgd2ViU29ja2V0VmVjdG9yLT5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAod2ViU29j
a2V0VmVjdG9yLT5hdChpKSA9PSB0aGlzKSB7CisgICAgICAgICAgICB3ZWJTb2NrZXRWZWN0b3It
PmF0KGkpID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQogfQogCiB2
b2lkIFdlYlNvY2tldDo6Y29ubmVjdChjb25zdCBLVVJMJiB1cmwsIEV4Y2VwdGlvbkNvZGUmIGVj
KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5oIGIvV2ViQ29yZS93
ZWJzb2NrZXRzL1dlYlNvY2tldC5oCmluZGV4IDE4ZTJiMjUuLmZiNzhmYWMgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuaAorKysgYi9XZWJDb3JlL3dlYnNvY2tldHMv
V2ViU29ja2V0LmgKQEAgLTU2LDYgKzU2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlm
CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYlNvY2tldD4gY3JlYXRlKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJTb2NrZXQoY29u
dGV4dCkpOyB9CiAgICAgICAgIHZpcnR1YWwgfldlYlNvY2tldCgpOworICAgICAgICBzdGF0aWMg
dm9pZCBjbG9zZUNvbm5lY3Rpb25zKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpOwog
CiAgICAgICAgIGVudW0gU3RhdGUgewogICAgICAgICAgICAgQ09OTkVDVElORyA9IDAsCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46655</attachid>
            <date>2010-01-15 01:45:57 -0800</date>
            <delta_ts>2010-02-02 23:10:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-33248-20100115184555.patch</filename>
            <type>text/plain</type>
            <size>11527</size>
            <attacher name="Fumitoshi Ukai">ukai</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBmOGMwMjg5Li5lNGEwN2EzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMDEt
MTUgIEZ1bWl0b3NoaSBVa2FpICA8dWthaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViU29ja2V0IGNsb3NlIHRoZSBjb25u
ZWN0aW9uIHdoZW4gdW5sb2FkaW5nIHRoZSBkb2N1bWVudC4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMzMjQ4CisKKyAgICAgICAgKiB3ZWJzb2NrZXQv
dGVzdHMvY2xvc2Utd2hlbi11bmxvYWQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3
ZWJzb2NrZXQvdGVzdHMvY2xvc2Utd2hlbi11bmxvYWQuaHRtbDogQWRkZWQuCisgICAgICAgICog
d2Vic29ja2V0L3Rlc3RzL2Nsb3NlLXdoZW4tdW5sb2FkX3dzaC5weTogQWRkZWQuCisgICAgICAg
ICogd2Vic29ja2V0L3Rlc3RzL3Jlc291cmNlcy9jbG9zZS13aGVuLXVubG9hZC5odG1sOiBBZGRl
ZC4KKwogMjAxMC0wMS0xNCAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgog
CiAgICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL2Nsb3NlLXdoZW4tdW5sb2Fk
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy9jbG9zZS13aGVuLXVu
bG9hZC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTcz
NDdmNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy9jbG9z
ZS13aGVuLXVubG9hZC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1IEBACitUZXN0IGlmIHdlYnNv
Y2tldCBjb25uZWN0aW9uIGlzIGNsb3NlZCB3aGVuIHVubG9hZCB0aGUgZG9jdW1lbnQuCitDcmVh
dGVkIDJuZCBzb2NrZXQgdG8gJ3dzOi8vMTcyLjMwLjg1LjIzMDo4ODgwL3dlYnNvY2tldC90ZXN0
cy9jbG9zZS13aGVuLXVubG9hZCcKK1NvY2tldCBvcGVuCitQQVNTOiBtc2cgaXMgInNvY2tldDEg
Y2xvc2VkIgorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvY2xvc2Ut
d2hlbi11bmxvYWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy9jbG9zZS13aGVu
LXVubG9hZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ODFiMjgK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvY2xvc2Utd2hl
bi11bmxvYWQuaHRtbApAQCAtMCwwICsxLDM2IEBACis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgor
PGJvZHk+Cis8ZGl2IGlkPSdkZXNjcmlwdGlvbic+VGVzdCBpZiB3ZWJzb2NrZXQgY29ubmVjdGlv
biBpcyBjbG9zZWQgd2hlbiB1bmxvYWQgdGhlIGRvY3VtZW50LjwvZGl2PgorPHByZSBpZD0nY29u
c29sZSc+PC9wcmU+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikg
eworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisKK2Z1bmN0aW9uIGxvZyhtc2cpCit7Cisg
ICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5hcHBlbmRDaGlsZChkb2N1bWVu
dC5jcmVhdGVUZXh0Tm9kZShtc2cgKyAiXG4iKSk7Cit9OworCitmdW5jdGlvbiB1bmxvYWQoKQor
eworICAgIHdpbmRvdy5sb2NhdGlvbiA9ICdyZXNvdXJjZXMvY2xvc2Utd2hlbi11bmxvYWQuaHRt
bCc7Cit9OworCisvL3ZhciB3cyA9IG5ldyBXZWJTb2NrZXQoIndzOi8vMTI3LjAuMC4xOjg4ODAv
d2Vic29ja2V0L3Rlc3RzL2Nsb3NlLXdoZW4tdW5sb2FkIik7Cit2YXIgd3MgPSBuZXcgV2ViU29j
a2V0KCJ3czovLzE3Mi4zMC44NS4yMzA6ODg4MC93ZWJzb2NrZXQvdGVzdHMvY2xvc2Utd2hlbi11
bmxvYWQiKTsKK2xvZygiQ3JlYXRlZCBhIHNvY2tldCB0byAnIiArIHdzLlVSTCArICInIik7Cit3
cy5vbm9wZW4gPSBmdW5jdGlvbigpCit7CisgICAgbG9nKCJTb2NrZXQgb3BlbiIpOworICAgIHdz
LnNlbmQoJ3NvY2tldDEnKTsKKyAgICBzZXRUaW1lb3V0KCd1bmxvYWQoKScsIDUwMCk7Cit9Owor
Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2Vic29ja2V0L3Rlc3RzL2Nsb3NlLXdoZW4tdW5sb2FkX3dzaC5weSBiL0xheW91dFRlc3RzL3dl
YnNvY2tldC90ZXN0cy9jbG9zZS13aGVuLXVubG9hZF93c2gucHkKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uYjA0MDQ5YgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3dlYnNvY2tldC90ZXN0cy9jbG9zZS13aGVuLXVubG9hZF93c2gucHkKQEAgLTAsMCArMSw1MSBA
QAorIyBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlv
bi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisj
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
IyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKKworZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IG1zZ3V0
aWwKKworbGFzdFNvY2tldCA9ICdubyBzb2NrZXQnCisKK2RlZiB3ZWJfc29ja2V0X2RvX2V4dHJh
X2hhbmRzaGFrZShyZXF1ZXN0KToKKyAgICBwYXNzICMgQWx3YXlzIGFjY2VwdC4KKworCitkZWYg
d2ViX3NvY2tldF90cmFuc2Zlcl9kYXRhKHJlcXVlc3QpOgorICAgIGdsb2JhbCBsYXN0U29ja2V0
CisgICAgbXNndXRpbC5zZW5kX21lc3NhZ2UocmVxdWVzdCwgbGFzdFNvY2tldCArICcgY2xvc2Vk
JykKKyAgICBtZXNzYWdlID0gJ25vIHNvY2tldCcKKyAgICB0cnk6CisgICAgICAgIHdoaWxlIFRy
dWU6CisgICAgICAgICAgICBtZXNzYWdlID0gbXNndXRpbC5yZWNlaXZlX21lc3NhZ2UocmVxdWVz
dCkKKyAgICAgICAgICAgIHByaW50IG1lc3NhZ2UKKyAgICBmaW5hbGx5OgorICAgICAgICAjIGNv
bWUgaGVyZSB3aGVuIGNvbm5lY3Rpb24gaXMgY2xvc2VkLgorICAgICAgICBsYXN0U29ja2V0ID0g
bWVzc2FnZQorICAgICAgICBwcmludCBsYXN0U29ja2V0CisKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3Jlc291cmNlcy9jbG9zZS13aGVuLXVubG9hZC5odG1sIGIv
TGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3Jlc291cmNlcy9jbG9zZS13aGVuLXVubG9hZC5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNTMzYjQKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvcmVzb3VyY2VzL2Nsb3NlLXdo
ZW4tdW5sb2FkLmh0bWwKQEAgLTAsMCArMSw5MiBAQAorPGh0bWw+Cis8aGVhZD4KKzwvaGVhZD4K
KzxkaXYgaWQ9J2Rlc2NyaXB0aW9uJz5UZXN0IGlmIHdlYnNvY2tldCBjb25uZWN0aW9uIGlzIGNs
b3NlZCB3aGVuIHVubG9hZCB0aGUgZG9jdW1lbnQuPC9kaXY+Cis8cHJlIGlkPSdjb25zb2xlJz48
L3ByZT4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9s
bGVyLndhaXRVbnRpbERvbmUoKTsKK30KK2Z1bmN0aW9uIGxvZyhtc2cpCit7CisgICAgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVU
ZXh0Tm9kZShtc2cgKyAiXG4iKSk7Cit9OworCitmdW5jdGlvbiB0ZXN0UGFzc2VkKG1zZykKK3sK
KyAgICBsb2coIlBBU1M6ICIgKyBtc2cpOworfTsKKworZnVuY3Rpb24gdGVzdEZhaWxlZChtc2cp
Cit7CisgICAgbG9nKCJGQUlMOiAiICsgbXNnKTsKK307CisKK2Z1bmN0aW9uIGlzUmVzdWx0Q29y
cmVjdChfYWN0dWFsLCBfZXhwZWN0ZWQpCit7CisgICAgaWYgKF9leHBlY3RlZCA9PT0gMCkKKyAg
ICAgICAgcmV0dXJuIF9hY3R1YWwgPT09IF9leHBlY3RlZCAmJiAoMS9fYWN0dWFsKSA9PT0gKDEv
X2V4cGVjdGVkKTsKKyAgICBpZiAoX2FjdHVhbCA9PT0gX2V4cGVjdGVkKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBpZiAodHlwZW9mKF9leHBlY3RlZCkgPT0gIm51bWJlciIgJiYgaXNOYU4o
X2V4cGVjdGVkKSkKKyAgICAgICAgcmV0dXJuIHR5cGVvZihfYWN0dWFsKSA9PSAibnVtYmVyIiAm
JiBpc05hTihfYWN0dWFsKTsKKyAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxs
KF9leHBlY3RlZCkgPT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFtdKSkKKyAgICAg
ICAgcmV0dXJuIGFyZUFycmF5c0VxdWFsKF9hY3R1YWwsIF9leHBlY3RlZCk7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitmdW5jdGlvbiBzdHJpbmdpZnkodikKK3sKKyAgICBpZiAodiA9PT0gMCAm
JiAxL3YgPCAwKQorICAgICAgICByZXR1cm4gIi0wIjsKKyAgICBlbHNlIHJldHVybiAiIiArIHY7
Cit9CisKK2Z1bmN0aW9uIHNob3VsZEJlKF9hLCBfYikKK3sKKyAgaWYgKHR5cGVvZiBfYSAhPSAi
c3RyaW5nIiB8fCB0eXBlb2YgX2IgIT0gInN0cmluZyIpCisgICAgbG9nKCJXQVJOOiBzaG91bGRC
ZSgpIGV4cGVjdHMgc3RyaW5nIGFyZ3VtZW50cyIpOworICB2YXIgZXhjZXB0aW9uOworICB2YXIg
X2F2OworICB0cnkgeworICAgICBfYXYgPSBldmFsKF9hKTsKKyAgfSBjYXRjaCAoZSkgeworICAg
ICBleGNlcHRpb24gPSBlOworICB9CisgIHZhciBfYnYgPSBldmFsKF9iKTsKKworICBpZiAoZXhj
ZXB0aW9uKQorICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBiZSAiICsgX2J2ICsgIi4gVGhy
ZXcgZXhjZXB0aW9uICIgKyBleGNlcHRpb24pOworICBlbHNlIGlmIChpc1Jlc3VsdENvcnJlY3Qo
X2F2LCBfYnYpKQorICAgIHRlc3RQYXNzZWQoX2EgKyAiIGlzICIgKyBfYik7CisgIGVsc2UgaWYg
KHR5cGVvZihfYXYpID09IHR5cGVvZihfYnYpKQorICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3Vs
ZCBiZSAiICsgX2J2ICsgIi4gV2FzICIgKyBzdHJpbmdpZnkoX2F2KSArICIuIik7CisgIGVsc2UK
KyAgICB0ZXN0RmFpbGVkKF9hICsgIiBzaG91bGQgYmUgIiArIF9idiArICIgKG9mIHR5cGUgIiAr
IHR5cGVvZiBfYnYgKyAiKS4gV2FzICIgKyBfYXYgKyAiIChvZiB0eXBlICIgKyB0eXBlb2YgX2F2
ICsgIikuIik7Cit9CisKK3ZhciB3czsKK3ZhciBtc2c7CitmdW5jdGlvbiB0ZXN0KCkKK3sKKy8v
ICAgIHdzID0gbmV3IFdlYlNvY2tldCgid3M6Ly8xMjcuMC4wLjE6ODg4MC93ZWJzb2NrZXQvdGVz
dHMvY2xvc2Utd2hlbi11bmxvYWQiKTsKKyAgICB3cyA9IG5ldyBXZWJTb2NrZXQoIndzOi8vMTcy
LjMwLjg1LjIzMDo4ODgwL3dlYnNvY2tldC90ZXN0cy9jbG9zZS13aGVuLXVubG9hZCIpOworICAg
IGxvZygiQ3JlYXRlZCAybmQgc29ja2V0IHRvICciICsgd3MuVVJMICsgIiciKTsKKyAgICB3cy5v
bm9wZW4gPSBmdW5jdGlvbigpCisgICAgeworICAgICAgICBsb2coIlNvY2tldCBvcGVuIik7Cisg
ICAgfQorICAgIHdzLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2dCkKKyAgICB7CisgICAgICAgIG1z
ZyA9IGV2dC5kYXRhOworICAgICAgICBzaG91bGRCZSgibXNnIiwgJyJzb2NrZXQxIGNsb3NlZCIn
KTsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9Cit9OworCitzZXRUaW1l
b3V0KCJ0ZXN0KCkiLCA1MDApOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGUzMWVkNmIu
LjUyYTgwOWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTAtMDEtMTUgIEZ1bWl0b3NoaSBVa2FpICA8dWth
aUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgV2ViU29ja2V0IGNsb3NlIHRoZSBjb25uZWN0aW9uIHdoZW4gdW5sb2FkaW5nIHRo
ZSBkb2N1bWVudC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTMzMjQ4CisgICAgICAgIAorICAgICAgICBLZWVwIFdlYlNvY2tldCBhbmQgdGhlIGRvY3Vt
ZW50IChTY3JpcHRFeGVjdXRpb25Db250ZXh0KSBtYXAKKyAgICAgICAgYW5kIGNsb3NlIGFsbCBX
ZWJTb2NrZXRzIHdoZW4gdGhlIGRvY3VtZW50IGlzIHVubG9hZGVkLgorCisgICAgICAgIFRlc3Q6
IHdlYnNvY2tldC90ZXN0cy9jbG9zZS13aGVuLXVubG9hZC5odG1sCisKKyAgICAgICAgKiBsb2Fk
ZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnN0b3BM
b2FkaW5nKToKKyAgICAgICAgKiB3ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjp3ZWJTb2NrZXRzT25TY3JpcHRFeGVjdXRpb25Db250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OldlYlNvY2tldDo6Y2xvc2VDb25uZWN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJTb2NrZXQ6OldlYlNvY2tldCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6On5XZWJT
b2NrZXQpOgorICAgICAgICAqIHdlYnNvY2tldHMvV2ViU29ja2V0Lmg6CisKIDIwMTAtMDEtMTQg
IEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIFJ1
YmJlciBzdGFtcGVkIGJ5IFNhbSBXZWluaWcuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlci5jcHAgYi9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKaW5kZXggMjY1
NDVmNC4uNGQwNDRiMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3Bw
CisrKyBiL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcApAQCAtOTksNiArOTksNyBAQAog
I2VuZGlmCiAKICNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiV2Vi
U29ja2V0LmgiCiAjaW5jbHVkZSAiV2luZG93RmVhdHVyZXMuaCIKICNpbmNsdWRlICJYTUxIdHRw
UmVxdWVzdC5oIgogI2luY2x1ZGUgIlhNTFRva2VuaXplci5oIgpAQCAtNTcyLDYgKzU3MywxMSBA
QCB2b2lkIEZyYW1lTG9hZGVyOjpzdG9wTG9hZGluZyhVbmxvYWRFdmVudFBvbGljeSB1bmxvYWRF
dmVudFBvbGljeSwgRGF0YWJhc2VQb2xpYwogI2VuZGlmCiAgICAgfQogCisjaWYgRU5BQkxFKFdF
Ql9TT0NLRVRTKQorICAgIGlmIChEb2N1bWVudCogZG9jID0gbV9mcmFtZS0+ZG9jdW1lbnQoKSkK
KyAgICAgICAgV2ViU29ja2V0OjpjbG9zZUNvbm5lY3Rpb25zKGRvYyk7CisjZW5kaWYKKwogICAg
IC8vIHRlbGwgYWxsIHN1YmZyYW1lcyB0byBzdG9wIGFzIHdlbGwKICAgICBmb3IgKEZyYW1lKiBj
aGlsZCA9IG1fZnJhbWUtPnRyZWUoKS0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGls
ZC0+dHJlZSgpLT5uZXh0U2libGluZygpKQogICAgICAgICBjaGlsZC0+bG9hZGVyKCktPnN0b3BM
b2FkaW5nKHVubG9hZEV2ZW50UG9saWN5KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd2Vic29ja2V0
cy9XZWJTb2NrZXQuY3BwIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAKaW5kZXgg
MDQzNTQ5MC4uZDE1OTdhZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tl
dC5jcHAKKysrIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAKQEAgLTQ2LDcgKzQ2
LDkgQEAKICNpbmNsdWRlICJTdHJpbmdCdWlsZGVyLmgiCiAjaW5jbHVkZSAiVGhyZWFkYWJsZVdl
YlNvY2tldENoYW5uZWwuaCIKICNpbmNsdWRlICJXZWJTb2NrZXRDaGFubmVsLmgiCisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTk0LDE2ICs5Niw0
NSBAQCBib29sIFdlYlNvY2tldDo6aXNBdmFpbGFibGUoKQogCiAjZW5kaWYKIAordHlwZWRlZiBI
YXNoTWFwPFdlYlNvY2tldCosIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqPiBXZWJTb2NrZXRNYXA7
CisKK3N0YXRpYyBXZWJTb2NrZXRNYXAmIHdlYlNvY2tldHNPblNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoV2ViU29ja2V0TWFwLCB3ZWJTb2NrZXRN
YXAsICgpKTsKKyAgICByZXR1cm4gd2ViU29ja2V0TWFwOworfQorCit2b2lkIFdlYlNvY2tldDo6
Y2xvc2VDb25uZWN0aW9ucyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQoreworICAg
IFZlY3RvcjxXZWJTb2NrZXQqPiB3ZWJTb2NrZXRzVG9SZW1vdmU7CisgICAgV2ViU29ja2V0TWFw
JiB3ZWJTb2NrZXRNYXAgPSB3ZWJTb2NrZXRzT25TY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Cisg
ICAgZm9yIChXZWJTb2NrZXRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSB3ZWJTb2NrZXRNYXAuYmVnaW4o
KTsgaXRlciAhPSB3ZWJTb2NrZXRNYXAuZW5kKCk7ICsraXRlcikgeworICAgICAgICBpZiAoaXRl
ci0+c2Vjb25kID09IGNvbnRleHQpCisgICAgICAgICAgICB3ZWJTb2NrZXRzVG9SZW1vdmUuYXBw
ZW5kKGl0ZXItPmZpcnN0KTsKKyAgICB9CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3ZWJT
b2NrZXRzVG9SZW1vdmUuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgV2ViU29ja2V0KiB3ZWJTb2Nr
ZXQgPSB3ZWJTb2NrZXRzVG9SZW1vdmVbaV07CisgICAgICAgIHdlYlNvY2tldC0+Y2xvc2UoKTsK
KyAgICAgICAgd2ViU29ja2V0TWFwLnJlbW92ZSh3ZWJTb2NrZXQpOworICAgIH0KK30KKwogV2Vi
U29ja2V0OjpXZWJTb2NrZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKICAgICA6
IEFjdGl2ZURPTU9iamVjdChjb250ZXh0LCB0aGlzKQogICAgICwgbV9zdGF0ZShDT05ORUNUSU5H
KQogeworICAgIFdlYlNvY2tldE1hcCYgd2ViU29ja2V0TWFwID0gd2ViU29ja2V0c09uU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOworICAgIHdlYlNvY2tldE1hcC5hZGQodGhpcywgY29udGV4dCk7
CiB9CiAKIFdlYlNvY2tldDo6fldlYlNvY2tldCgpCiB7CiAgICAgaWYgKG1fY2hhbm5lbCkKICAg
ICAgICAgbV9jaGFubmVsLT5kaXNjb25uZWN0KCk7CisgICAgV2ViU29ja2V0TWFwJiB3ZWJTb2Nr
ZXRNYXAgPSB3ZWJTb2NrZXRzT25TY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgV2ViU29j
a2V0TWFwOjppdGVyYXRvciBmb3VuZCA9IHdlYlNvY2tldE1hcC5maW5kKHRoaXMpOworICAgIGlm
IChmb3VuZCAhPSB3ZWJTb2NrZXRNYXAuZW5kKCkpCisgICAgICAgIHdlYlNvY2tldE1hcC5yZW1v
dmUoZm91bmQpOwogfQogCiB2b2lkIFdlYlNvY2tldDo6Y29ubmVjdChjb25zdCBLVVJMJiB1cmws
IEV4Y2VwdGlvbkNvZGUmIGVjKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNv
Y2tldC5oIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5oCmluZGV4IDE4ZTJiMjUuLmZi
NzhmYWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuaAorKysgYi9X
ZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmgKQEAgLTU2LDYgKzU2LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogI2VuZGlmCiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYlNvY2tldD4g
Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpIHsgcmV0dXJuIGFkb3B0UmVm
KG5ldyBXZWJTb2NrZXQoY29udGV4dCkpOyB9CiAgICAgICAgIHZpcnR1YWwgfldlYlNvY2tldCgp
OworICAgICAgICBzdGF0aWMgdm9pZCBjbG9zZUNvbm5lY3Rpb25zKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQpOwogCiAgICAgICAgIGVudW0gU3RhdGUgewogICAgICAgICAgICAgQ09O
TkVDVElORyA9IDAsCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47998</attachid>
            <date>2010-02-02 23:10:09 -0800</date>
            <delta_ts>2010-02-03 08:29:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-33248-20100203161007.patch</filename>
            <type>text/plain</type>
            <size>6778</size>
            <attacher name="Fumitoshi Ukai">ukai</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2YjI5YTljLi4zZjNjOGU1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMDIt
MDIgIEZ1bWl0b3NoaSBVa2FpICA8dWthaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViU29ja2V0IHNob3VsZCBjbG9zZSB0
aGUgY29ubmVjdGlvbiB3aGVuIHVubG9hZGluZyB0aGUgZG9jdW1lbnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMzMjQ4CisKKyAgICAgICAgKiB3ZWJz
b2NrZXQvdGVzdHMvY2xvc2Utb24tdW5sb2FkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogd2Vic29ja2V0L3Rlc3RzL2Nsb3NlLW9uLXVubG9hZC5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiB3ZWJzb2NrZXQvdGVzdHMvY2xvc2Utb24tdW5sb2FkX3dzaC5weTogQWRkZWQuCisgICAgICAg
ICogd2Vic29ja2V0L3Rlc3RzL3Jlc291cmNlcy9jbG9zZS1vbi11bmxvYWQtaWZyYW1lLmh0bWw6
IEFkZGVkLgorCiAyMDEwLTAyLTAyICBSb2xhbmQgU3RlaW5lciAgPHJvbGFuZHN0ZWluZXJAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkZWxlIFBldGVyc29uLgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL2Nsb3NlLW9uLXVubG9hZC1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvY2xvc2Utb24tdW5sb2FkLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjQ1Mjc4Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL2Nsb3NlLW9uLXVubG9h
ZC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMiBAQAorVGVzdCBpZiBXZWIgU29ja2V0IGlzIGNs
b3NlZCBvbiB1bmxvYWQKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQ
QVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNTIHdzIG9u
IG1hc3RlciBkb2N1bWVudCBpcyByZWFkeS4KK1BBU1MgaW5zZXJ0IGEgaWZyYW1lLCB3aGVyZSBv
cGVuIHdzIGNhbGxlZCAnc29ja2V0MScKK1BBU1MgJ3NvY2tldDEnIGlzIHNlbnQgdG8gdGhlIHNl
cnZlci4gdW5sb2FkIHRoZSBpZnJhbWUuIGV4cGVjdCByZWNlaXZpbmcgJ3NvY2tldDEnIG9uIHdz
Li4uCitQQVNTIGNsb3NlZFNvY2tldCBpcyAic29ja2V0MSIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJzb2NrZXQvdGVzdHMvY2xvc2Utb24tdW5sb2FkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJzb2Nr
ZXQvdGVzdHMvY2xvc2Utb24tdW5sb2FkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNmEzNjgxYQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYnNvY2tl
dC90ZXN0cy9jbG9zZS1vbi11bmxvYWQuaHRtbApAQCAtMCwwICsxLDU3IEBACis8IURPQ1RZUEUg
SFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxp
bmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxk
aXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNj
cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorZGVzY3JpcHRpb24oIlRlc3QgaWYgV2ViIFNv
Y2tldCBpcyBjbG9zZWQgb24gdW5sb2FkIik7CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworCit2YXIg
ZnJhbWVEaXY7Cit2YXIgY2xvc2VkU29ja2V0OworCitmdW5jdGlvbiBlbmRUZXN0KCkKK3sKKyAg
ICBzaG91bGRCZSgiY2xvc2VkU29ja2V0IiwgJyJzb2NrZXQxIicpOworICAgIGlzU3VjY2Vzc2Z1
bGx5UGFyc2VkKCk7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfTsKKwordmFyIHdzID0gbmV3
IFdlYlNvY2tldCgid3M6Ly8xMjcuMC4wLjE6ODg4MC93ZWJzb2NrZXQvdGVzdHMvY2xvc2Utb24t
dW5sb2FkIik7Cit3cy5vbm9wZW4gPSBmdW5jdGlvbigpCit7CisgICAgZGVidWcoIlBBU1Mgd3Mg
b24gbWFzdGVyIGRvY3VtZW50IGlzIHJlYWR5LiIpOworICAgIGZyYW1lRGl2ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgiaWZyYW1lIik7CisgICAgZnJhbWVEaXYuc3JjID0gInJlc291cmNlcy9j
bG9zZS1vbi11bmxvYWQtaWZyYW1lLmh0bWwiOworICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hp
bGQoZnJhbWVEaXYpOworICAgIGRlYnVnKCJQQVNTIGluc2VydCBhIGlmcmFtZSwgd2hlcmUgb3Bl
biB3cyBjYWxsZWQgJ3NvY2tldDEnIik7Cit9Oword3Mub25tZXNzYWdlID0gZnVuY3Rpb24oZXZ0
KQoreworICAgIGNsb3NlZFNvY2tldCA9IGV2dC5kYXRhOworICAgIHdzLmNsb3NlKCk7Cit9Owor
d3Mub25jbG9zZSA9IGZ1bmN0aW9uKCkKK3sKKyAgICBlbmRUZXN0KCk7Cit9OworCitkb2N1bWVu
dC5pZnJhbWVSZWFkeSA9IGZ1bmN0aW9uKCkKK3sKKyAgICBkZWJ1ZygiUEFTUyAnc29ja2V0MScg
aXMgc2VudCB0byB0aGUgc2VydmVyLiB1bmxvYWQgdGhlIGlmcmFtZS4gZXhwZWN0IHJlY2Vpdmlu
ZyAnc29ja2V0MScgb24gd3MuLi4iKTsKKyAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGZy
YW1lRGl2KTsKK307IAorCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0
PgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJzb2NrZXQv
dGVzdHMvY2xvc2Utb24tdW5sb2FkX3dzaC5weSBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0
cy9jbG9zZS1vbi11bmxvYWRfd3NoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmU4OTM5ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVz
dHMvY2xvc2Utb24tdW5sb2FkX3dzaC5weQpAQCAtMCwwICsxLDU0IEBACisjIENvcHlyaWdodCAy
MDA5LCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisj
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
IyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworCitmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQgbXNndXRpbAorCitjb25uZWN0aW9u
cyA9IHNldCgpCisKK2RlZiB3ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZShyZXF1ZXN0KToK
KyAgICBwYXNzICAjIEFsd2F5cyBhY2NlcHQuCisKKworZGVmIHdlYl9zb2NrZXRfdHJhbnNmZXJf
ZGF0YShyZXF1ZXN0KToKKyAgICBnbG9iYWwgY29ubmVjdGlvbnMKKyAgICBjb25uZWN0aW9ucy5h
ZGQocmVxdWVzdCkKKyAgICBzb2NrZXROYW1lID0gTm9uZQorICAgIHRyeToKKyAgICAgICAgc29j
a2V0TmFtZSA9IG1zZ3V0aWwucmVjZWl2ZV9tZXNzYWdlKHJlcXVlc3QpCisgICAgICAgICMgbm90
aWZ5IHRvIGNsaWVudCB0aGF0IHNvY2tldE5hbWUgaXMgcmVjZWl2ZWQgYnkgc2VydmVyLgorICAg
ICAgICBtc2d1dGlsLnNlbmRfbWVzc2FnZShyZXF1ZXN0LCBzb2NrZXROYW1lKQorICAgICAgICBt
c2d1dGlsLnJlY2VpdmVfbWVzc2FnZShyZXF1ZXN0KSAgIyB3YWl0LCBhbmQgZXhjZXB0aW9uIGJ5
IGNsb3NlLgorICAgICAgICBzb2NrZXROYW1lID0gc29ja2V0TmFtZSArICc6IHJlY2VpdmUgbmV4
dCBtZXNzYWdlJworICAgIGZpbmFsbHk6CisgICAgICAgICMgcmVxdWVzdCBpcyBjbG9zZWQuIG5v
dGlmeSB0aGlzIHNvY2tldE5hbWUgdG8gb3RoZXIgd2ViIHNvY2tldHMuCisgICAgICAgIGNvbm5l
Y3Rpb25zLnJlbW92ZShyZXF1ZXN0KQorICAgICAgICBmb3Igd3MgaW4gY29ubmVjdGlvbnM6Cisg
ICAgICAgICAgICBtc2d1dGlsLnNlbmRfbWVzc2FnZSh3cywgc29ja2V0TmFtZSkKKwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3Jlc291cmNlcy9jbG9zZS1vbi11bmxv
YWQtaWZyYW1lLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvcmVzb3VyY2VzL2Ns
b3NlLW9uLXVubG9hZC1pZnJhbWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi40NjcwM2M3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rl
c3RzL3Jlc291cmNlcy9jbG9zZS1vbi11bmxvYWQtaWZyYW1lLmh0bWwKQEAgLTAsMCArMSwyMyBA
QAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vZmFzdC9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+
PC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cit2YXIgd3MgPSBuZXcgV2Vi
U29ja2V0KCJ3czovLzEyNy4wLjAuMTo4ODgwL3dlYnNvY2tldC90ZXN0cy9jbG9zZS1vbi11bmxv
YWQiKTsKK3dzLm9ub3BlbiA9IGZ1bmN0aW9uKCkKK3sKKyAgICAvLyBzZW5kICJzb2NrZXQxIiB0
byBzZXJ2ZXIsIHNvIHRoYXQgInNvY2tldDEiIHdpbGwgYmUgYnJvYWRjYXN0ZWQgdG8gd2ViIHNv
Y2tldHMgY29ubmVjdGVkIHRvIGNsb3NlLW9uLXVubG9hZCB3aGVuIHRoaXMgd2ViIHNvY2tldCBp
cyBjbG9zZWQuCisgICAgd3Muc2VuZCgic29ja2V0MSIpOworfTsKK3dzLm9ubWVzc2FnZSA9IGZ1
bmN0aW9uKGV2dCkKK3sKKyAgICAvLyAic29ja2V0MSIgaXMgcmVjZWl2ZWQgYnkgc2VydmVyLCBz
byByZWFkeSB0byB1bmxvYWQgdGhpcyBkb2N1bWVudC4KKyAgICBwYXJlbnQuZG9jdW1lbnQuaWZy
YW1lUmVhZHkoZXZ0LmRhdGEpOworfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="30598"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>