<?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>87165</bug_id>
          
          <creation_ts>2012-05-22 14:16:35 -0700</creation_ts>
          <short_desc>Crash in fast/files/read tests during Garbage Collection</short_desc>
          <delta_ts>2012-06-11 15:29:49 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>ap</cc>
    
    <cc>ericu</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>630746</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-05-22 14:16:35 -0700</bug_when>
    <thetext>The file reader tests fast/files/read-blob-async.html and fast/files/read-file-async.html crash when COLLECT_ON_EVERY_ALLOCATION is turned on.

It appears that the overridden FileReader::hasPendingActivity() returns false when m_state is set to DONE, which can allow the related JSFileReader object to be collected.  From inspection, FileWriter has a similar issue.

This can be fixed by eliminating the overriding hasPendingActivity() and using the ActiveDOMObject::hasPendingActivity() and placing setPendingActivity() /unsetPendingActivity() at appropriate places in the code.

&lt;rdar://problem/11501481&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630762</commentid>
    <comment_count>1</comment_count>
      <attachid>143361</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-05-22 14:25:03 -0700</bug_when>
    <thetext>Created attachment 143361
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630856</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-05-22 15:52:23 -0700</bug_when>
    <thetext>What is the situation where m_state is set to DONE, script doesn&apos;t have a reference to FileReader, and yet the wrapper needs to be protected? Does the collection happen while a callback is executed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>631137</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-05-22 20:52:49 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; What is the situation where m_state is set to DONE, script doesn&apos;t have a reference to FileReader, and yet the wrapper needs to be protected? Does the collection happen while a callback is executed?

Yes, a collection can happen when one of the event handlers is running.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>631793</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-05-23 10:49:59 -0700</bug_when>
    <thetext>Interesting. I wonder why the object&apos;s wrapper is not protected automatically when it&apos;s a target of an event that&apos;s being handled. Could this be a bug elsewhere?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>631814</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-05-23 11:03:02 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Interesting. I wonder why the object&apos;s wrapper is not protected automatically when it&apos;s a target of an event that&apos;s being handled. Could this be a bug elsewhere?

The problem occurs because the garbage collection happens during GC after the event handler start executing. Because hasPendingActivity() returns false, the JSFileReader and all the event handlers have been GC&apos;ed.  When we invoke the handlers, we need a JSFileReader object and we create a new one, since the old one is gone.  The new one now references the handlers via the FileReader. The error is actually that these handlers themselves were garbage collected.  In all the traces I&apos;ve seen, we actually die because the ScopeChainNode attached to the JSFunction object has been collected and put on a free list (zapped).  We fail a GC sanity check when visiting the ScopeChainNode.  The JSFunction has been collected, but its memory hasn&apos;t been reused.

Remember, we need to induce this crash by turning on COLLECT_ON_EVERY_ALLOCATION, (which really doesn&apos;t GC on every allocation but makes GCs happen much more often).  The timing window is small and can be induced by COLLECT_ON_EVERY_ALLOCATION, but it is still a vulnerability.

I think there is a possibility that this issue exists in other code. The pattern to look for is executing a handler after the object&apos;s hasPendingActivity() would return false.  I will be looking for this pattern in other code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>631850</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-05-23 11:36:21 -0700</bug_when>
    <thetext>My question is why JSFileReader is not protected through event.target attribute. I think that it should be.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>631892</commentid>
    <comment_count>7</comment_count>
      <attachid>143361</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-05-23 12:16:53 -0700</bug_when>
    <thetext>Comment on attachment 143361
Patch

Discussed this in person. The issue is that garbage collection can happen after state is set to DONE before window.event.target chain is fully established.

Also, the suggested design is similar to what XMLHttpRequest does, which is good for consistency.

r=me, but please add comments explaining why unsetPendingActivity are in the places they are in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>632090</commentid>
    <comment_count>8</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-05-23 14:58:57 -0700</bug_when>
    <thetext>Committed r118253: &lt;http://trac.webkit.org/changeset/118253&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641673</commentid>
    <comment_count>9</comment_count>
      <attachid>143361</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2012-06-05 10:10:02 -0700</bug_when>
    <thetext>Comment on attachment 143361
Patch

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

I think the safe way to do this is:
	Call setPendingActivity in doOperation, at the calls to writer()-&gt;write() and writer()-&gt;truncate().
	Don&apos;t call setPendingActivity for an abort.
	Call unsetPendingActivity in didFail, didTruncate, and didWrite /after/ the check for m_operationInProgress == OperationAbort.
	Call unsetPendingActivity in completeAbort /after/ the call to doOperation.

This needs a test, too, ideally one that would have crashed or leaked given what was just committed.

&gt; Source/WebCore/Modules/filesystem/FileWriter.cpp:94
&gt; +    setPendingActivity(this);

I&apos;m sorry for the late response, but I don&apos;t think this is correct.  You&apos;re incrementing the refcount when stop() is called, but if you&apos;ve gotten to this code, there&apos;s a write in progress, so the refcount was already incremented.

&gt; Source/WebCore/Modules/filesystem/FileWriter.cpp:301
&gt; +    unsetPendingActivity(this);

You&apos;re dereffing the object here, but if this code is hit as the result of an abort call, there may be an outstanding didFail call that will arrive shortly.
I say &quot;may&quot; because the abort may have been called when m_operationPending was already abort [if the user did write-abort-write-abort before the first abort completed].  If this deref kills the object, we&apos;ll crash when the didFail hits.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641674</commentid>
    <comment_count>10</comment_count>
    <who name="Eric U.">ericu</who>
    <bug_when>2012-06-05 10:10:42 -0700</bug_when>
    <thetext>See code review comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641733</commentid>
    <comment_count>11</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-06-05 11:14:15 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 143361 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=143361&amp;action=review
&gt; 
&gt; I think the safe way to do this is:
&gt;     Call setPendingActivity in doOperation, at the calls to writer()-&gt;write() and writer()-&gt;truncate().
&gt;     Don&apos;t call setPendingActivity for an abort.
&gt;     Call unsetPendingActivity in didFail, didTruncate, and didWrite /after/ the check for m_operationInProgress == OperationAbort.
&gt;     Call unsetPendingActivity in completeAbort /after/ the call to doOperation.
&gt; 
&gt; This needs a test, too, ideally one that would have crashed or leaked given what was just committed.
&gt; 
&gt; &gt; Source/WebCore/Modules/filesystem/FileWriter.cpp:94
&gt; &gt; +    setPendingActivity(this);
&gt; 
&gt; I&apos;m sorry for the late response, but I don&apos;t think this is correct.  You&apos;re incrementing the refcount when stop() is called, but if you&apos;ve gotten to this code, there&apos;s a write in progress, so the refcount was already incremented.
&gt; 
&gt; &gt; Source/WebCore/Modules/filesystem/FileWriter.cpp:301
&gt; &gt; +    unsetPendingActivity(this);
&gt; 
&gt; You&apos;re dereffing the object here, but if this code is hit as the result of an abort call, there may be an outstanding didFail call that will arrive shortly.
&gt; I say &quot;may&quot; because the abort may have been called when m_operationPending was already abort [if the user did write-abort-write-abort before the first abort completed].  If this deref kills the object, we&apos;ll crash when the didFail hits.

Thanks for the suggestions.  I will investigate these suggested changes and improving the tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641783</commentid>
    <comment_count>12</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-06-05 11:56:17 -0700</bug_when>
    <thetext>It seems to me that the placement for unsetPendingActivity(this) in didWrite() needs to be inside the if (complete &amp;&amp; numAborts == m_numAborts) then block after the signalCompletion call.  The other unsetPendingActivity() calls need to be after signalCompletion().  That way the event handlers are called when hasPendingActivity() returns true.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641831</commentid>
    <comment_count>13</comment_count>
    <who name="Eric U.">ericu</who>
    <bug_when>2012-06-05 13:14:37 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; It seems to me that the placement for unsetPendingActivity(this) in didWrite() needs to be inside the if (complete &amp;&amp; numAborts == m_numAborts) then block after the signalCompletion call.  The other unsetPendingActivity() calls need to be after signalCompletion().  That way the event handlers are called when hasPendingActivity() returns true.

You do want to restrict it to if (complete), but I don&apos;t think you want to guard on numAborts.  You don&apos;t really care about those, because: you&apos;re just decrementing for the current operation&apos;s increment; aborting in the onwrite handler won&apos;t actually result in a didFail call, since there wasn&apos;t a write in progress, because complete was true; if there&apos;s both an abort and a write call during the onwrite handler...damn, that looks like a bug.  We&apos;ll set m_operationInProgress to OperationAbort, but then we&apos;ll never get a didFail call.

I think we want to set m_operationInProgress to OperationNone before we fire the progress event.

But anyway, the new write call will do its own incrementation, and we&apos;ll do our own decrementation.

Let me throw together a patch; this is getting to messy to do in English.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642645</commentid>
    <comment_count>14</comment_count>
      <attachid>146076</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2012-06-06 11:36:12 -0700</bug_when>
    <thetext>Created attachment 146076
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642727</commentid>
    <comment_count>15</comment_count>
    <who name="Eric U.">ericu</who>
    <bug_when>2012-06-06 13:06:59 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Created an attachment (id=146076) [details]
&gt; Patch

This patch has a test for the bug I talked about in which the didFail never comes; it doesn&apos;t have a test for extra refs.  I&apos;m not sure we have any way of detecting extra refs in a layout test, and hitting the extra deref may be tricky/flaky because of the timing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642927</commentid>
    <comment_count>16</comment_count>
      <attachid>146138</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2012-06-06 16:12:20 -0700</bug_when>
    <thetext>Created attachment 146138
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642929</commentid>
    <comment_count>17</comment_count>
    <who name="Eric U.">ericu</who>
    <bug_when>2012-06-06 16:14:30 -0700</bug_when>
    <thetext>Thanks Michael--I had to make a one-line change, though.  In doOperation, we shouldn&apos;t be clearing m_operationInProgress during abort if it&apos;s already abort.  This comes up in nested aborts [see fast/filesystem/file-writer-abort-depth.html].

If I hear no screams, I&apos;ll land the fixed version on Monday.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>646327</commentid>
    <comment_count>18</comment_count>
    <who name="Eric U.">ericu</who>
    <bug_when>2012-06-11 15:29:49 -0700</bug_when>
    <thetext>Committed r120013: &lt;http://trac.webkit.org/changeset/120013&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143361</attachid>
            <date>2012-05-22 14:25:03 -0700</date>
            <delta_ts>2012-06-06 11:36:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>87165.patch</filename>
            <type>text/plain</type>
            <size>5774</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExODA1MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDEyLTA1LTIyICBNaWNoYWVs
IFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIENyYXNoIGluIGZhc3QvZmls
ZXMvcmVhZCB0ZXN0cyBkdXJpbmcgR2FyYmFnZSBDb2xsZWN0aW9uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzE2NQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZWQgaGFzUGVuZGluZ0FjdGl2aXR5
KCkgcHJvY2Vzc2luZyB0byB1c2UgQWN0aXZlRE9NT2JqZWN0OjpoYXNQZW5kaW5nQWN0aXZpdHko
KQorICAgICAgICBhbmQgYXNzb2NpYXRlZCBzZXRQZW5kaW5nQWN0aXZpdHkoKSAvIHVuc2V0UGVu
ZGluZ0FjdGl2aXR5KCkuCisKKyAgICAgICAgRml4ZWQgdHdvIGV4aXN0aW5nIHRlc3RzIHdpdGgg
Y2hhbmdlLgorCisgICAgICAgICogTW9kdWxlcy9maWxlc3lzdGVtL0ZpbGVXcml0ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsZVdyaXRlcjo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpG
aWxlV3JpdGVyOjp3cml0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlV3JpdGVyOjp0cnVuY2F0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlV3JpdGVyOjpzaWduYWxDb21wbGV0aW9uKToKKyAg
ICAgICAgKiBNb2R1bGVzL2ZpbGVzeXN0ZW0vRmlsZVdyaXRlci5oOgorICAgICAgICAqIGZpbGVh
cGkvRmlsZVJlYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyOjpyZWFkSW50
ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6ZG9BYm9ydCk6CisgICAgICAg
IChXZWJDb3JlOjpGaWxlUmVhZGVyOjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbGVSZWFkZXI6OmRpZEZhaWwpOgorICAgICAgICAqIGZpbGVhcGkvRmlsZVJlYWRlci5o
OgorCiAyMDEyLTA1LTIyICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgog
CiAgICAgICAgIFVzZSB0aGUgc2FtZSBhbmltYXRpb24gYmVnaW4gdGltZSB3aGlsZSB1cGRhdGlu
ZyBjb21wb3NpdGluZyBsYXllcnMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5
c3RlbS9GaWxlV3JpdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2ZpbGVzeXN0ZW0vRmlsZVdyaXRlci5jcHAJKHJldmlzaW9uIDExNzc4MikKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9GaWxlV3JpdGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzcsMTEgKzc3LDYgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBGaWxlV3JpdGVyOjppbnRlcmZh
YwogICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yRmlsZVdyaXRlcjsKIH0KIAot
Ym9vbCBGaWxlV3JpdGVyOjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAotewotICAgIHJldHVy
biBtX3JlYWR5U3RhdGUgPT0gV1JJVElORyB8fCBBY3RpdmVET01PYmplY3Q6Omhhc1BlbmRpbmdB
Y3Rpdml0eSgpOwotfQotCiBib29sIEZpbGVXcml0ZXI6OmNhblN1c3BlbmQoKSBjb25zdAogewog
ICAgIC8vIEZJWE1FOiBJdCBpcyBub3QgY3VycmVudGx5IHBvc3NpYmxlIHRvIHN1c3BlbmQgYSBG
aWxlV3JpdGVyLCBzbyBwYWdlcyB3aXRoIEZpbGVXcml0ZXIgY2FuIG5vdCBnbyBpbnRvIHBhZ2Ug
Y2FjaGUuCkBAIC05NSw2ICs5MCw4IEBAIHZvaWQgRmlsZVdyaXRlcjo6c3RvcCgpCiAgICAgICAg
IHJldHVybjsKICAgICBkb09wZXJhdGlvbihPcGVyYXRpb25BYm9ydCk7CiAgICAgbV9yZWFkeVN0
YXRlID0gRE9ORTsKKworICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKIH0KIAogdm9pZCBG
aWxlV3JpdGVyOjp3cml0ZShCbG9iKiBkYXRhLCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTExNCw2
ICsxMTEsOSBAQCB2b2lkIEZpbGVXcml0ZXI6OndyaXRlKEJsb2IqIGRhdGEsIEV4Y2VwCiAgICAg
ICAgIHNldEVycm9yKEZpbGVFcnJvcjo6U0VDVVJJVFlfRVJSLCBlYyk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CisKKyAgICBzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisKICAgICBtX2Jsb2JC
ZWluZ1dyaXR0ZW4gPSBkYXRhOwogICAgIG1fcmVhZHlTdGF0ZSA9IFdSSVRJTkc7CiAgICAgbV9i
eXRlc1dyaXR0ZW4gPSAwOwpAQCAtMTU0LDYgKzE1NCw5IEBAIHZvaWQgRmlsZVdyaXRlcjo6dHJ1
bmNhdGUobG9uZyBsb25nIHBvc2kKICAgICAgICAgc2V0RXJyb3IoRmlsZUVycm9yOjpTRUNVUklU
WV9FUlIsIGVjKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIHNldFBlbmRpbmdBY3Rp
dml0eSh0aGlzKTsKKwogICAgIG1fcmVhZHlTdGF0ZSA9IFdSSVRJTkc7CiAgICAgbV9ieXRlc1dy
aXR0ZW4gPSAwOwogICAgIG1fYnl0ZXNUb1dyaXRlID0gMDsKQEAgLTI5NCw2ICsyOTcsOCBAQCB2
b2lkIEZpbGVXcml0ZXI6OnNpZ25hbENvbXBsZXRpb24oRmlsZUVyCiAgICAgfSBlbHNlCiAgICAg
ICAgIGZpcmVFdmVudChldmVudE5hbWVzKCkud3JpdGVFdmVudCk7CiAgICAgZmlyZUV2ZW50KGV2
ZW50TmFtZXMoKS53cml0ZWVuZEV2ZW50KTsKKyAgICAKKyAgICB1bnNldFBlbmRpbmdBY3Rpdml0
eSh0aGlzKTsKIH0KIAogdm9pZCBGaWxlV3JpdGVyOjpmaXJlRXZlbnQoY29uc3QgQXRvbWljU3Ry
aW5nJiB0eXBlKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0ZpbGVX
cml0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0v
RmlsZVdyaXRlci5oCShyZXZpc2lvbiAxMTc3ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2ZpbGVzeXN0ZW0vRmlsZVdyaXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw2IEBA
IHB1YmxpYzoKIAogICAgIC8vIEFjdGl2ZURPTU9iamVjdAogICAgIHZpcnR1YWwgYm9vbCBjYW5T
dXNwZW5kKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNv
bnN0OwogICAgIHZpcnR1YWwgdm9pZCBzdG9wKCk7CiAKICAgICAvLyBFdmVudFRhcmdldApJbmRl
eDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuY3BwCShyZXZpc2lvbiAxMTc3ODIpCisr
KyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03NCwxMSArNzQsNiBAQCBjb25zdCBBdG9taWNTdHJpbmcmIEZpbGVSZWFkZXI6OmludGVyZmFj
CiAgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JGaWxlUmVhZGVyOwogfQogCi1i
b29sIEZpbGVSZWFkZXI6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fc3RhdGUgPT0gTE9BRElORyB8fCBBY3RpdmVET01PYmplY3Q6Omhhc1BlbmRpbmdBY3Rpdml0
eSgpOwotfQotCiBib29sIEZpbGVSZWFkZXI6OmNhblN1c3BlbmQoKSBjb25zdAogewogICAgIC8v
IEZJWE1FOiBJdCBpcyBub3QgY3VycmVudGx5IHBvc3NpYmxlIHRvIHN1c3BlbmQgYSBGaWxlUmVh
ZGVyLCBzbyBwYWdlcyB3aXRoIEZpbGVSZWFkZXIgY2FuIG5vdCBnbyBpbnRvIHBhZ2UgY2FjaGUu
CkBAIC0xNDQsNiArMTM5LDggQEAgdm9pZCBGaWxlUmVhZGVyOjpyZWFkSW50ZXJuYWwoQmxvYiog
YmxvYgogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgc2V0UGVuZGluZ0FjdGl2aXR5KHRo
aXMpOworCiAgICAgbV9ibG9iID0gYmxvYjsKICAgICBtX3JlYWRUeXBlID0gdHlwZTsKICAgICBt
X3N0YXRlID0gTE9BRElORzsKQEAgLTE3NSw2ICsxNzIsOCBAQCB2b2lkIEZpbGVSZWFkZXI6OmFi
b3J0KCkKIAogdm9pZCBGaWxlUmVhZGVyOjpkb0Fib3J0KCkKIHsKKyAgICBBU1NFUlQobV9zdGF0
ZSAhPSBET05FKTsKKwogICAgIHRlcm1pbmF0ZSgpOwogICAgIG1fYWJvcnRpbmcgPSBmYWxzZTsK
IApAQCAtMTgzLDYgKzE4Miw4IEBAIHZvaWQgRmlsZVJlYWRlcjo6ZG9BYm9ydCgpCiAgICAgZmly
ZUV2ZW50KGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50KTsKICAgICBmaXJlRXZlbnQoZXZlbnROYW1l
cygpLmFib3J0RXZlbnQpOwogICAgIGZpcmVFdmVudChldmVudE5hbWVzKCkubG9hZGVuZEV2ZW50
KTsKKworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOwogfQogCiB2b2lkIEZpbGVSZWFk
ZXI6OnRlcm1pbmF0ZSgpCkBAIC0yMTMsMTAgKzIxNCwxMyBAQCB2b2lkIEZpbGVSZWFkZXI6OmRp
ZFJlY2VpdmVEYXRhKCkKIAogdm9pZCBGaWxlUmVhZGVyOjpkaWRGaW5pc2hMb2FkaW5nKCkKIHsK
KyAgICBBU1NFUlQobV9zdGF0ZSAhPSBET05FKTsKICAgICBtX3N0YXRlID0gRE9ORTsKIAogICAg
IGZpcmVFdmVudChldmVudE5hbWVzKCkubG9hZEV2ZW50KTsKICAgICBmaXJlRXZlbnQoZXZlbnRO
YW1lcygpLmxvYWRlbmRFdmVudCk7CisgICAgCisgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhp
cyk7CiB9CiAKIHZvaWQgRmlsZVJlYWRlcjo6ZGlkRmFpbChpbnQgZXJyb3JDb2RlKQpAQCAtMjI1
LDExICsyMjksMTQgQEAgdm9pZCBGaWxlUmVhZGVyOjpkaWRGYWlsKGludCBlcnJvckNvZGUpCiAg
ICAgaWYgKG1fYWJvcnRpbmcpCiAgICAgICAgIHJldHVybjsKIAorICAgIEFTU0VSVChtX3N0YXRl
ICE9IERPTkUpOwogICAgIG1fc3RhdGUgPSBET05FOwogCiAgICAgbV9lcnJvciA9IEZpbGVFcnJv
cjo6Y3JlYXRlKHN0YXRpY19jYXN0PEZpbGVFcnJvcjo6RXJyb3JDb2RlPihlcnJvckNvZGUpKTsK
ICAgICBmaXJlRXZlbnQoZXZlbnROYW1lcygpLmVycm9yRXZlbnQpOwogICAgIGZpcmVFdmVudChl
dmVudE5hbWVzKCkubG9hZGVuZEV2ZW50KTsKKyAgICAKKyAgICB1bnNldFBlbmRpbmdBY3Rpdml0
eSh0aGlzKTsKIH0KIAogdm9pZCBGaWxlUmVhZGVyOjpmaXJlRXZlbnQoY29uc3QgQXRvbWljU3Ry
aW5nJiB0eXBlKQpJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmgJKHJldmlzaW9u
IDExNzc4MikKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC03OSw3ICs3OSw2IEBAIHB1YmxpYzoKICAgICAvLyBBY3RpdmVET01PYmplY3QK
ICAgICB2aXJ0dWFsIGJvb2wgY2FuU3VzcGVuZCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBz
dG9wKCk7Ci0gICAgdmlydHVhbCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0OwogCiAg
ICAgLy8gRXZlbnRUYXJnZXQKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJm
YWNlTmFtZSgpIGNvbnN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146076</attachid>
            <date>2012-06-06 11:36:12 -0700</date>
            <delta_ts>2012-06-06 16:12:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87165-20120606113610.patch</filename>
            <type>text/plain</type>
            <size>14207</size>
            <attacher name="Eric U.">ericu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5NjAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDEwNjBhODg5MjViODIy
MWViODFiYjZmYjgwNjZlZjM5YzhiNmFkMS4uMmFmYWFiNTlkN2NmMTQ2MzVhZWQ5NzIzZDU1MTUz
ZjMxMmQ0NzM4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDEyLTA2LTA1ICBFcmlj
IFVocmhhbmUgPGVyaWN1QGNocm9taXVtLm9yZz4KKworICAgICAgICBDcmFzaCBpbiBmYXN0L2Zp
bGVzL3JlYWQgdGVzdHMgZHVyaW5nIEdhcmJhZ2UgQ29sbGVjdGlvbgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODcxNjUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKQorCisgICAgICAgIEZpeCBwcmV2aW91cyBmaXggZm9yIGhhc1Bl
bmRpbmdBY3Rpdml0eSwgYW5kIGZpeCBhIGJ1ZyBpbiBhIGNvbXBsZXgKKyAgICAgICAgYWJvcnQg
Y2FzZSBhcyB3ZWxsLS1hYm9ydCBkdXJpbmcgdGhlIGZpbmFsIHByb2dyZXNzIGV2ZW50IG9mIGEg
d3JpdGUKKyAgICAgICAgd291bGQgaGFuZyB0aGUgd3JpdGVyLgorCisgICAgICAgICogTW9kdWxl
cy9maWxlc3lzdGVtL0ZpbGVXcml0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVdyaXRl
cjo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlV3JpdGVyOjp3cml0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpGaWxlV3JpdGVyOjp0cnVuY2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWxl
V3JpdGVyOjpkaWRXcml0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlV3JpdGVyOjpkaWRUcnVu
Y2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlV3JpdGVyOjpkaWRGYWlsKToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbGVXcml0ZXI6OmNvbXBsZXRlQWJvcnQpOgorICAgICAgICAoV2ViQ29yZTo6
RmlsZVdyaXRlcjo6ZG9PcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVdyaXRlcjo6
c2lnbmFsQ29tcGxldGlvbik6CisKIDIwMTItMDYtMDYgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hh
ZmZyYWl4QHdlYmtpdC5vcmc+CiAKICAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGRpcmVjdGlvbiBv
biB0YWJsZSByb3cgZ3JvdXAgd2l0aCBjb2xsYXBzaW5nIGJvcmRlcnMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9GaWxlV3JpdGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9GaWxlV3JpdGVyLmNwcAppbmRleCBiYzE2MDc2ZGQ2
MzU0MjQ3ODFmNWE0ZGY2NzkzZGU5ZDRlNTM3OTQ1Li5lYWVlMDgwMGU2ZmExNWY1MmYwMDEwMmZk
YjM0M2I0YjA2ZWM0YjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVz
eXN0ZW0vRmlsZVdyaXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lz
dGVtL0ZpbGVXcml0ZXIuY3BwCkBAIC05MCw4ICs5MCw2IEBAIHZvaWQgRmlsZVdyaXRlcjo6c3Rv
cCgpCiAgICAgICAgIHJldHVybjsKICAgICBkb09wZXJhdGlvbihPcGVyYXRpb25BYm9ydCk7CiAg
ICAgbV9yZWFkeVN0YXRlID0gRE9ORTsKLQotICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsK
IH0KIAogdm9pZCBGaWxlV3JpdGVyOjp3cml0ZShCbG9iKiBkYXRhLCBFeGNlcHRpb25Db2RlJiBl
YykKQEAgLTExMiw4ICsxMTAsNiBAQCB2b2lkIEZpbGVXcml0ZXI6OndyaXRlKEJsb2IqIGRhdGEs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgc2V0UGVu
ZGluZ0FjdGl2aXR5KHRoaXMpOwotCiAgICAgbV9ibG9iQmVpbmdXcml0dGVuID0gZGF0YTsKICAg
ICBtX3JlYWR5U3RhdGUgPSBXUklUSU5HOwogICAgIG1fYnl0ZXNXcml0dGVuID0gMDsKQEAgLTE1
NSw4ICsxNTEsNiBAQCB2b2lkIEZpbGVXcml0ZXI6OnRydW5jYXRlKGxvbmcgbG9uZyBwb3NpdGlv
biwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzZXRQ
ZW5kaW5nQWN0aXZpdHkodGhpcyk7Ci0KICAgICBtX3JlYWR5U3RhdGUgPSBXUklUSU5HOwogICAg
IG1fYnl0ZXNXcml0dGVuID0gMDsKICAgICBtX2J5dGVzVG9Xcml0ZSA9IDA7CkBAIC0xOTgsMTUg
KzE5MiwxOSBAQCB2b2lkIEZpbGVXcml0ZXI6OmRpZFdyaXRlKGxvbmcgbG9uZyBieXRlcywgYm9v
bCBjb21wbGV0ZSkKICAgICBzZXRQb3NpdGlvbihwb3NpdGlvbigpICsgYnl0ZXMpOwogICAgIGlm
IChwb3NpdGlvbigpID4gbGVuZ3RoKCkpCiAgICAgICAgIHNldExlbmd0aChwb3NpdGlvbigpKTsK
KyAgICBpZiAoY29tcGxldGUpIHsKKyAgICAgICAgbV9ibG9iQmVpbmdXcml0dGVuLmNsZWFyKCk7
CisgICAgICAgIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9IE9wZXJhdGlvbk5vbmU7CisgICAgfQog
ICAgIC8vIFRPRE86IFRocm90dGxlIHRvIG5vIG1vcmUgZnJlcXVlbnRseSB0aGFuIGV2ZXJ5IDUw
bXMuCiAgICAgaW50IG51bUFib3J0cyA9IG1fbnVtQWJvcnRzOwogICAgIGZpcmVFdmVudChldmVu
dE5hbWVzKCkucHJvZ3Jlc3NFdmVudCk7CiAgICAgLy8gV2UgY291bGQgZ2V0IGFuIGFib3J0IGlu
IHRoZSBoYW5kbGVyIGZvciB0aGlzIGV2ZW50LiBJZiB3ZSBkbywgaXQncwogICAgIC8vIGFscmVh
ZHkgaGFuZGxlZCB0aGUgY2xlYW51cCBhbmQgc2lnbmFsQ29tcGxldGlvbiBjYWxsLgotICAgIGlm
IChjb21wbGV0ZSAmJiBudW1BYm9ydHMgPT0gbV9udW1BYm9ydHMpIHsKLSAgICAgICAgbV9ibG9i
QmVpbmdXcml0dGVuLmNsZWFyKCk7Ci0gICAgICAgIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9IE9w
ZXJhdGlvbk5vbmU7Ci0gICAgICAgIHNpZ25hbENvbXBsZXRpb24oRmlsZUVycm9yOjpPSyk7Cisg
ICAgaWYgKGNvbXBsZXRlKSB7CisgICAgICBpZiAobnVtQWJvcnRzID09IG1fbnVtQWJvcnRzKQor
ICAgICAgICAgIHNpZ25hbENvbXBsZXRpb24oRmlsZUVycm9yOjpPSyk7CisgICAgICB1bnNldFBl
bmRpbmdBY3Rpdml0eSh0aGlzKTsKICAgICB9CiB9CiAKQEAgLTIyMyw2ICsyMjEsNyBAQCB2b2lk
IEZpbGVXcml0ZXI6OmRpZFRydW5jYXRlKCkKICAgICAgICAgc2V0UG9zaXRpb24obGVuZ3RoKCkp
OwogICAgIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9IE9wZXJhdGlvbk5vbmU7CiAgICAgc2lnbmFs
Q29tcGxldGlvbihGaWxlRXJyb3I6Ok9LKTsKKyAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlz
KTsKIH0KIAogdm9pZCBGaWxlV3JpdGVyOjpkaWRGYWlsKEZpbGVFcnJvcjo6RXJyb3JDb2RlIGNv
ZGUpCkBAIC0yMzksNiArMjM4LDcgQEAgdm9pZCBGaWxlV3JpdGVyOjpkaWRGYWlsKEZpbGVFcnJv
cjo6RXJyb3JDb2RlIGNvZGUpCiAgICAgbV9ibG9iQmVpbmdXcml0dGVuLmNsZWFyKCk7CiAgICAg
bV9vcGVyYXRpb25JblByb2dyZXNzID0gT3BlcmF0aW9uTm9uZTsKICAgICBzaWduYWxDb21wbGV0
aW9uKGNvZGUpOworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOwogfQogCiB2b2lkIEZp
bGVXcml0ZXI6OmNvbXBsZXRlQWJvcnQoKQpAQCAtMjQ4LDYgKzI0OCw3IEBAIHZvaWQgRmlsZVdy
aXRlcjo6Y29tcGxldGVBYm9ydCgpCiAgICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IG1fcXVldWVk
T3BlcmF0aW9uOwogICAgIG1fcXVldWVkT3BlcmF0aW9uID0gT3BlcmF0aW9uTm9uZTsKICAgICBk
b09wZXJhdGlvbihvcGVyYXRpb24pOworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOwog
fQogCiB2b2lkIEZpbGVXcml0ZXI6OmRvT3BlcmF0aW9uKE9wZXJhdGlvbiBvcGVyYXRpb24pCkBA
IC0yNTgsMTIgKzI1OSwxNCBAQCB2b2lkIEZpbGVXcml0ZXI6OmRvT3BlcmF0aW9uKE9wZXJhdGlv
biBvcGVyYXRpb24pCiAgICAgICAgIEFTU0VSVChtX3RydW5jYXRlTGVuZ3RoID09IC0xKTsKICAg
ICAgICAgQVNTRVJUKG1fYmxvYkJlaW5nV3JpdHRlbi5nZXQoKSk7CiAgICAgICAgIEFTU0VSVCht
X3JlYWR5U3RhdGUgPT0gV1JJVElORyk7CisgICAgICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0aGlz
KTsKICAgICAgICAgd3JpdGVyKCktPndyaXRlKHBvc2l0aW9uKCksIG1fYmxvYkJlaW5nV3JpdHRl
bi5nZXQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgT3BlcmF0aW9uVHJ1bmNhdGU6CiAg
ICAgICAgIEFTU0VSVChtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gT3BlcmF0aW9uTm9uZSk7CiAg
ICAgICAgIEFTU0VSVChtX3RydW5jYXRlTGVuZ3RoID49IDApOwogICAgICAgICBBU1NFUlQobV9y
ZWFkeVN0YXRlID09IFdSSVRJTkcpOworICAgICAgICBzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7
CiAgICAgICAgIHdyaXRlcigpLT50cnVuY2F0ZShtX3RydW5jYXRlTGVuZ3RoKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBPcGVyYXRpb25Ob25lOgpAQCAtMjc1LDYgKzI3OCw4IEBAIHZvaWQg
RmlsZVdyaXRlcjo6ZG9PcGVyYXRpb24oT3BlcmF0aW9uIG9wZXJhdGlvbikKICAgICBjYXNlIE9w
ZXJhdGlvbkFib3J0OgogICAgICAgICBpZiAobV9vcGVyYXRpb25JblByb2dyZXNzID09IE9wZXJh
dGlvbldyaXRlIHx8IG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBPcGVyYXRpb25UcnVuY2F0ZSkK
ICAgICAgICAgICAgIHdyaXRlcigpLT5hYm9ydCgpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBvcGVyYXRpb24gPSBPcGVyYXRpb25Ob25lOwogICAgICAgICBtX3F1ZXVlZE9wZXJhdGlvbiA9
IE9wZXJhdGlvbk5vbmU7CiAgICAgICAgIG1fYmxvYkJlaW5nV3JpdHRlbi5jbGVhcigpOwogICAg
ICAgICBtX3RydW5jYXRlTGVuZ3RoID0gLTE7CkBAIC0yOTcsOSArMzAyLDYgQEAgdm9pZCBGaWxl
V3JpdGVyOjpzaWduYWxDb21wbGV0aW9uKEZpbGVFcnJvcjo6RXJyb3JDb2RlIGNvZGUpCiAgICAg
fSBlbHNlCiAgICAgICAgIGZpcmVFdmVudChldmVudE5hbWVzKCkud3JpdGVFdmVudCk7CiAgICAg
ZmlyZUV2ZW50KGV2ZW50TmFtZXMoKS53cml0ZWVuZEV2ZW50KTsKLSAgICAKLSAgICAvLyBBbGwg
cG9zc2libGUgZXZlbnRzIGhhdmUgZmlyZWQgYW5kIHdlJ3JlIGRvbmUsIG5vIG1vcmUgcGVuZGlu
ZyBhY3Rpdml0eS4KLSAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKIH0KIAogdm9pZCBG
aWxlV3JpdGVyOjpmaXJlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGMz
YmU5MmJiZmM4N2Q5ZTFiNWRjMGViMWNlZWUxMWYyMTk2MDNlYTYuLjRkODI4YjZmOTgxOThmY2U2
MWE3OGY0NDJiNzA3NDM4YmUwNjk2OWUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMi0wNi0w
NSAgRXJpYyBVaHJoYW5lIDxlcmljdUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQ3Jhc2ggaW4g
ZmFzdC9maWxlcy9yZWFkIHRlc3RzIGR1cmluZyBHYXJiYWdlIENvbGxlY3Rpb24KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3MTY1CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkKKworICAgICAgICBTaW1wbGlmeSBmaWxlLXdyaXRl
ci1hYm9ydC1jb250aW51ZS5qcyBhIGJpdCwgYW5kIGFkZCBhIG5ldyB0ZXN0IGNhc2UKKyAgICAg
ICAgZm9yIGEgd3JpdGUgdGhhdCBnZXRzIGFib3J0ZWQgaW4gdGhlIGZpbmFsIHByb2dyZXNzIGV2
ZW50LCB3aGljaAorICAgICAgICBwcmV2aW91c2x5IHdvdWxkIGhhdmUgaHVuZyB0aGUgRmlsZVdy
aXRlci4KKworICAgICAgICAqIGZhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci1hYm9ydC1jb250
aW51ZS1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9m
aWxlLXdyaXRlci1hYm9ydC1jb250aW51ZS5qczoKKwogMjAxMi0wNi0wNiAgUnlvc3VrZSBOaXdh
ICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBDaHJvbWl1bSByZWJhc2VsaW5lIGFmdGVy
IHIxMTk1OTEgYmVjYXVzZSBpdCB3YXMgZmFpbGluZyB3aXRoIG1pc3NpbmcgcmVzdWx0cy4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci1hYm9ydC1j
b250aW51ZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS13
cml0ZXItYWJvcnQtY29udGludWUtZXhwZWN0ZWQudHh0CmluZGV4IGE4ZDYwOTllNTU3YmY2ZDMw
NzEzMDQ4YWMxNmUzZTc0ZGFiOTY3ZGUuLjU2MmIyNGVjYmQ5MTQ4MTkwM2M5YWFlMGZmNGJiMjk3
ZWQ4NTMzMTIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlLXdy
aXRlci1hYm9ydC1jb250aW51ZS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9m
aWxlc3lzdGVtL2ZpbGUtd3JpdGVyLWFib3J0LWNvbnRpbnVlLWV4cGVjdGVkLnR4dApAQCAtMiwy
MyArMiwzOCBAQCBUZXN0IHRoYXQgRmlsZVdyaXRlciBjYW4gY29udGludWUgaW1tZWRpYXRlbHkg
YWZ0ZXIgYW4gYWJvcnQuCiAKIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KIAotc3RhcnRpbmcg
dGVzdAogUEFTUyAxMTAwMDAwIGlzIGJsb2JTaXplCitzdGFydGluZyB0ZXN0CitQQVNTIENhbGxp
bmcgd3JpdGUuCiBQQVNTIENhbGxpbmcgYWJvcnQKIFBBU1MgU2F3IGFib3J0Ci1QQVNTIFNhdyB3
cml0ZWVuZCAwLgogUEFTUyB3cml0ZXIubGVuZ3RoIGlzIDAKLVBBU1MgZm9sbG93T25BY3Rpb24g
PT0gMSB8fCBmb2xsb3dPbkFjdGlvbiA9PSAzIGlzIHRydWUKLVBBU1MgMTEwMDAwMCBpcyBibG9i
U2l6ZQorUEFTUyBTYXcgd3JpdGVlbmQgMC4KK1BBU1MgQ2FsbGluZyB3cml0ZS4KIFBBU1Mgd3Jp
dGVyLmxlbmd0aCBpcyAxMTAwMDAwCiBQQVNTIFNhdyB3cml0ZWVuZCAxLgotUEFTUyAxMTAwMDAw
IGlzIGJsb2JTaXplCi1QQVNTIENhbGxpbmcgYWJvcnQKK1BBU1MgQ2FsbGluZyB0cnVuY2F0ZS4K
K1BBU1Mgd3JpdGVyLmxlbmd0aCBpcyAwCitQQVNTIFNhdyB3cml0ZWVuZCAyLgorUEFTUyBDYWxs
aW5nIHdyaXRlLgorUEFTUyBDYWxsaW5nIGFib3J0IGF0IHRoZSBlbmQgb2YgdGhlIHdyaXRlCiBQ
QVNTIFNhdyBhYm9ydAotUEFTUyBTYXcgd3JpdGVlbmQgMC4KIFBBU1Mgd3JpdGVyLmxlbmd0aCBp
cyAxMTAwMDAwCi1QQVNTIGZvbGxvd09uQWN0aW9uID09IDEgfHwgZm9sbG93T25BY3Rpb24gPT0g
MyBpcyB0cnVlCitQQVNTIFNhdyB3cml0ZWVuZCAzLgorUEFTUyBDYWxsaW5nIHdyaXRlLgorUEFT
UyB3cml0ZXIubGVuZ3RoIGlzIDIyMDAwMDAKK1BBU1MgU2F3IHdyaXRlZW5kIDQuCitQQVNTIENh
bGxpbmcgdHJ1bmNhdGUuCitQQVNTIHdyaXRlci5sZW5ndGggaXMgMAorUEFTUyBTYXcgd3JpdGVl
bmQgNS4KK1BBU1MgQ2FsbGluZyB3cml0ZS4KK1BBU1MgQ2FsbGluZyBhYm9ydAorUEFTUyBTYXcg
YWJvcnQKK1BBU1Mgd3JpdGVyLmxlbmd0aCBpcyAwCitQQVNTIFNhdyB3cml0ZWVuZCA2LgorUEFT
UyBDYWxsaW5nIHRydW5jYXRlLgogUEFTUyB3cml0ZXIubGVuZ3RoIGlzIDcKK1BBU1MgU2F3IHdy
aXRlZW5kIDcuCiBQQVNTIEFsbCB0ZXN0cyBjb21wbGV0ZS4KIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jl
c291cmNlcy9maWxlLXdyaXRlci1hYm9ydC1jb250aW51ZS5qcyBiL0xheW91dFRlc3RzL2Zhc3Qv
ZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItYWJvcnQtY29udGludWUuanMKaW5kZXgg
MTc5MTZkYmI1OGM2OWZiOTYyZGQyODE1ZWQwZjgwMWRjZWY4ZmJiYS4uYmRkNDZiZmFkMzMxMTkz
M2MwODRlNmZlMjg4ZmRlNDU5ZDA1ODk3YSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9m
aWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1hYm9ydC1jb250aW51ZS5qcworKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWFib3J0LWNv
bnRpbnVlLmpzCkBAIC0xMSw0MiArMTEsODggQEAgdmFyIHNhd0Fib3J0OwogdmFyIHNhd1dyaXRl
RW5kOwogdmFyIHdyaXRlcjsKIHZhciBleHBlY3RlZExlbmd0aDsKLXZhciB0cnVuY2F0ZUxlbmd0
aCA9IDc7Cit2YXIgdHJ1bmNhdGVMZW5ndGg7CiB2YXIgYmxvYlNpemUgPSAxMTAwMDAwOwordmFy
IGN1cnJlbnRUZXN0ID0gMDsKK3ZhciBibG9iID0gZ2V0QmxvYigpOwogCiB2YXIgbWV0aG9kU2V0
ID0gWwogICB7ICAvLyBTZXR1cCBtZXRob2Qgc2V0IHRoYXQgd3JpdGVzLCB0aGVuIGFib3J0cyB0
aGF0IHdyaXRlIGJlZm9yZSBjb21wbGV0aW9uLgogICAgIGFjdGlvbiA6IHN0YXJ0V3JpdGUsCiAg
ICAgdmVyaWZ5TGVuZ3RoIDogMCwKICAgICBvbndyaXRlc3RhcnQgOiBhYm9ydFdyaXRlLAorICAg
IG9ucHJvZ3Jlc3MgOiBub3AsCiAgICAgb253cml0ZSA6IG9uRXJyb3IsCiAgICAgb25hYm9ydCA6
IGxvZ0Fib3J0LAotICAgIG9ud3JpdGVlbmQgOiBjaGVja0xlbmd0aEFuZENhbGxGb2xsb3dPbkFj
dGlvbgorICAgIG9ud3JpdGVlbmQgOiBjaGVja0xlbmd0aEFuZFN0YXJ0TmV4dFRlc3QKICAgfSwK
ICAgeyAgLy8gTWV0aG9kIHNldCB0aGF0IGRvZXMgYSBjb21wbGV0ZSB3cml0ZS4KICAgICBhY3Rp
b24gOiBzdGFydFdyaXRlLAogICAgIHZlcmlmeUxlbmd0aCA6IGJsb2JTaXplLAogICAgIG9ud3Jp
dGVzdGFydCA6IG5vcCwKKyAgICBvbnByb2dyZXNzIDogbm9wLAogICAgIG9ud3JpdGUgOiBub3As
CiAgICAgb25hYm9ydCA6IG9uRXJyb3IsCiAgICAgb253cml0ZWVuZCA6IGNoZWNrTGVuZ3RoQW5k
U3RhcnROZXh0VGVzdAogICB9LAotICB7ICAvLyBTZXR1cCBtZXRob2Qgc2V0IHRoYXQgd3JpdGVz
LCB0aGVuIGFib3J0cyB0aGF0IHdyaXRlIGJlZm9yZSBjb21wbGV0aW9uLgorICB7IC8vIE1ldGhv
ZCBzZXQgdGhhdCBkb2VzIGEgY29tcGxldGUgdHJ1bmNhdGUsIGp1c3QgdG8gY2xlYW4gdXAuCisg
ICAgYWN0aW9uIDogc3RhcnRUcnVuY2F0ZSwKKyAgICB0cnVuY2F0ZUxlbmd0aCA6IDAsCisgICAg
dmVyaWZ5TGVuZ3RoIDogMCwKKyAgICBvbndyaXRlc3RhcnQgOiBub3AsCisgICAgb25wcm9ncmVz
cyA6IG5vcCwKKyAgICBvbndyaXRlIDogbm9wLAorICAgIG9uYWJvcnQgOiBvbkVycm9yLAorICAg
IG9ud3JpdGVlbmQgOiBjaGVja0xlbmd0aEFuZFN0YXJ0TmV4dFRlc3QKKyAgfSwKKyAgeyAgLy8g
U2V0dXAgbWV0aG9kIHNldCB0aGF0IHdyaXRlcywgdGhlbiBhYm9ydHMgdGhhdCB3cml0ZSBqdXN0
IGF0IGNvbXBsZXRpb24uCisgICAgYWN0aW9uIDogc3RhcnRXcml0ZSwKKyAgICB2ZXJpZnlMZW5n
dGggOiBibG9iU2l6ZSwKKyAgICBvbndyaXRlc3RhcnQgOiBub3AsCisgICAgb25wcm9ncmVzcyA6
IGFib3J0T25Db21wbGV0ZSwKKyAgICBvbndyaXRlIDogbm9wLAorICAgIG9uYWJvcnQgOiBsb2dB
Ym9ydCwKKyAgICBvbndyaXRlZW5kIDogY2hlY2tMZW5ndGhBbmRTdGFydE5leHRUZXN0CisgIH0s
CisgIHsgIC8vIE1ldGhvZCBzZXQgdGhhdCBkb2VzIGEgY29tcGxldGUgd3JpdGUuCisgICAgYWN0
aW9uIDogc3RhcnRXcml0ZSwKKyAgICB2ZXJpZnlMZW5ndGggOiBibG9iU2l6ZSAqIDIsIC8vIEFk
ZCBpbiBsZWZ0b3ZlcnMgZnJvbSBwcmV2aW91cyBtZXRob2QuCisgICAgb253cml0ZXN0YXJ0IDog
bm9wLAorICAgIG9ucHJvZ3Jlc3MgOiBub3AsCisgICAgb253cml0ZSA6IG5vcCwKKyAgICBvbmFi
b3J0IDogb25FcnJvciwKKyAgICBvbndyaXRlZW5kIDogY2hlY2tMZW5ndGhBbmRTdGFydE5leHRU
ZXN0CisgIH0sCisgIHsgLy8gTWV0aG9kIHNldCB0aGF0IGRvZXMgYSBjb21wbGV0ZSB0cnVuY2F0
ZSwganVzdCB0byBjbGVhbiB1cC4KKyAgICBhY3Rpb24gOiBzdGFydFRydW5jYXRlLAorICAgIHRy
dW5jYXRlTGVuZ3RoIDogMCwKKyAgICB2ZXJpZnlMZW5ndGggOiAwLAorICAgIG9ud3JpdGVzdGFy
dCA6IG5vcCwKKyAgICBvbnByb2dyZXNzIDogbm9wLAorICAgIG9ud3JpdGUgOiBub3AsCisgICAg
b25hYm9ydCA6IG9uRXJyb3IsCisgICAgb253cml0ZWVuZCA6IGNoZWNrTGVuZ3RoQW5kU3RhcnRO
ZXh0VGVzdAorICB9LAorICB7ICAvLyBTZXR1cCBtZXRob2Qgc2V0IHRoYXQgd3JpdGVzLCB0aGVu
IGFib3J0cyB0aGF0IHdyaXRlIGFzIGl0IHN0YXJ0cy4KICAgICBhY3Rpb24gOiBzdGFydFdyaXRl
LAotICAgIHZlcmlmeUxlbmd0aCA6IGJsb2JTaXplLCAgLy8gTGVmdCBvdmVyIGZyb20gdGhlIHBy
ZXZpb3VzIHRlc3QuCisgICAgdmVyaWZ5TGVuZ3RoIDogMCwKICAgICBvbndyaXRlc3RhcnQgOiBh
Ym9ydFdyaXRlLAorICAgIG9ucHJvZ3Jlc3MgOiBub3AsCiAgICAgb253cml0ZSA6IG9uRXJyb3Is
CiAgICAgb25hYm9ydCA6IGxvZ0Fib3J0LAotICAgIG9ud3JpdGVlbmQgOiBjaGVja0xlbmd0aEFu
ZENhbGxGb2xsb3dPbkFjdGlvbgorICAgIG9ud3JpdGVlbmQgOiBjaGVja0xlbmd0aEFuZFN0YXJ0
TmV4dFRlc3QKICAgfSwKICAgeyAvLyBNZXRob2Qgc2V0IHRoYXQgZG9lcyBhIGNvbXBsZXRlIHRy
dW5jYXRlLgogICAgIGFjdGlvbiA6IHN0YXJ0VHJ1bmNhdGUsCi0gICAgdmVyaWZ5TGVuZ3RoIDog
dHJ1bmNhdGVMZW5ndGgsCisgICAgdHJ1bmNhdGVMZW5ndGggOiA3LAorICAgIHZlcmlmeUxlbmd0
aCA6IDcsCiAgICAgb253cml0ZXN0YXJ0IDogbm9wLAorICAgIG9ucHJvZ3Jlc3MgOiBub3AsCiAg
ICAgb253cml0ZSA6IG5vcCwKICAgICBvbmFib3J0IDogb25FcnJvciwKLSAgICBvbndyaXRlZW5k
IDogY2hlY2tMZW5ndGhBbmRDb21wbGV0ZVRlc3QKLSAgfV07CisgICAgb253cml0ZWVuZCA6IGNo
ZWNrTGVuZ3RoQW5kU3RhcnROZXh0VGVzdAorICB9CitdOwogCiBmdW5jdGlvbiBub3AoKSB7CiB9
CkBAIC01OSw0OSArMTA1LDUzIEBAIGZ1bmN0aW9uIHRlblhCbG9iKGJsb2IpIHsKICAgICByZXR1
cm4gbmV3IEJsb2IoYmIpOwogfQogCi0vLyBUaGVzZSBtZXRob2RzIHNldCB1cCBhIHdyaXRlLCBh
Ym9ydCBpdCBhcyBzb29uIGFzIGl0IHN0YXJ0cywgdGhlbiBpbml0aWF0ZQotLy8gdGhlIGZvbGxv
dyBvbiBhY3Rpb24uCitmdW5jdGlvbiBnZXRCbG9iKCkgeworICAgIC8vIExldCdzIG1ha2UgaXQg
YWJvdXQgYSBtZWdhYnl0ZS4KKyAgICB2YXIgYmxvYiA9IHRlblhCbG9iKG5ldyBCbG9iKFsibG9y
ZW0gaXBzdW0iXSkpOworICAgIGJsb2IgPSB0ZW5YQmxvYihibG9iKTsKKyAgICBibG9iID0gdGVu
WEJsb2IoYmxvYik7CisgICAgYmxvYiA9IHRlblhCbG9iKGJsb2IpOworICAgIGJsb2IgPSB0ZW5Y
QmxvYihibG9iKTsKKyAgICB2YXIgc2l6ZSA9IGJsb2Iuc2l6ZTsKKyAgICBzaG91bGRCZSgiIiAr
IHNpemUsICJibG9iU2l6ZSIpOworICAgIHJldHVybiBibG9iOworfQorCiBmdW5jdGlvbiBhYm9y
dFdyaXRlKGUpIHsKICAgICB0ZXN0UGFzc2VkKCJDYWxsaW5nIGFib3J0Iik7CiAgICAgd3JpdGVy
LmFib3J0KCk7CiB9CiAKLWZ1bmN0aW9uIGxvZ0Fib3J0KGUpIHsKLSAgICB0ZXN0UGFzc2VkKCJT
YXcgYWJvcnQiKTsKK2Z1bmN0aW9uIGFib3J0T25Db21wbGV0ZShlKSB7CisgICAgaWYgKGUubG9h
ZGVkID09IGUudG90YWwpIHsKKyAgICAgICAgdGVzdFBhc3NlZCgiQ2FsbGluZyBhYm9ydCBhdCB0
aGUgZW5kIG9mIHRoZSB3cml0ZSIpOworICAgICAgICB3cml0ZXIuYWJvcnQoKTsKKyAgICB9CiB9
CiAKLWZ1bmN0aW9uIGNoZWNrTGVuZ3RoQW5kQ2FsbEZvbGxvd09uQWN0aW9uKGUpIHsKLSAgICB0
ZXN0UGFzc2VkKCJTYXcgd3JpdGVlbmQgMC4iKTsKLSAgICBzaG91bGRCZSgid3JpdGVyLmxlbmd0
aCIsICIiICsgZXhwZWN0ZWRMZW5ndGgpOwotICAgIGRvRm9sbG93T25BY3Rpb24oKTsKK2Z1bmN0
aW9uIGxvZ0Fib3J0KGUpIHsKKyAgICB0ZXN0UGFzc2VkKCJTYXcgYWJvcnQiKTsKIH0KIAotLy8g
Rm9yIHRoZSBzZWNvbmQgbWV0aG9kIHNldCwgdmVyaWZ5IGNvbXBsZXRpb24gYW5kIG1vdmUgb24g
dG8gdGhlIG5leHQgdGVzdC4KIGZ1bmN0aW9uIGNoZWNrTGVuZ3RoQW5kU3RhcnROZXh0VGVzdChl
KSB7CiAgICAgc2hvdWxkQmUoIndyaXRlci5sZW5ndGgiLCAiIiArIGV4cGVjdGVkTGVuZ3RoKTsK
LSAgICB0ZXN0UGFzc2VkKCJTYXcgd3JpdGVlbmQgMS4iKTsKLSAgICBydW5UZXN0KDIsIDMpOwot
fQotCi1mdW5jdGlvbiBjaGVja0xlbmd0aEFuZENvbXBsZXRlVGVzdChlKSB7Ci0gICAgc2hvdWxk
QmUoIndyaXRlci5sZW5ndGgiLCAiIiArIGV4cGVjdGVkTGVuZ3RoKTsKLSAgICB0ZXN0UGFzc2Vk
KCJBbGwgdGVzdHMgY29tcGxldGUuIik7Ci0gICAgY2xlYW5VcCgpOworICAgIHRlc3RQYXNzZWQo
IlNhdyB3cml0ZWVuZCAiICsgY3VycmVudFRlc3QgKyAiLiIpOworICAgICsrY3VycmVudFRlc3Q7
CisgICAgaWYgKGN1cnJlbnRUZXN0IDwgbWV0aG9kU2V0Lmxlbmd0aCkKKyAgICAgICAgcnVuVGVz
dCgpOworICAgIGVsc2UgeworICAgICAgICB0ZXN0UGFzc2VkKCJBbGwgdGVzdHMgY29tcGxldGUu
Iik7CisgICAgICAgIGNsZWFuVXAoKTsKKyAgICB9CiB9CiAKIGZ1bmN0aW9uIHN0YXJ0V3JpdGUo
KSB7Ci0gICAgLy8gTGV0J3MgbWFrZSBpdCBhYm91dCBhIG1lZ2FieXRlLgotICAgIHZhciBibG9i
ID0gdGVuWEJsb2IobmV3IEJsb2IoWyJsb3JlbSBpcHN1bSJdKSk7Ci0gICAgYmxvYiA9IHRlblhC
bG9iKGJsb2IpOwotICAgIGJsb2IgPSB0ZW5YQmxvYihibG9iKTsKLSAgICBibG9iID0gdGVuWEJs
b2IoYmxvYik7Ci0gICAgYmxvYiA9IHRlblhCbG9iKGJsb2IpOwotICAgIHZhciBzaXplID0gYmxv
Yi5zaXplOwotICAgIHNob3VsZEJlKCIiICsgc2l6ZSwgImJsb2JTaXplIik7CisgICAgdGVzdFBh
c3NlZCgiQ2FsbGluZyB3cml0ZS4iKTsKICAgICB3cml0ZXIud3JpdGUoYmxvYik7CiB9CiAKIGZ1
bmN0aW9uIHN0YXJ0VHJ1bmNhdGUoKSB7CisgICAgdGVzdFBhc3NlZCgiQ2FsbGluZyB0cnVuY2F0
ZS4iKTsKICAgICB3cml0ZXIudHJ1bmNhdGUodHJ1bmNhdGVMZW5ndGgpOwogfQogCkBAIC0xMTEs
MjAgKzE2MSwxNiBAQCBmdW5jdGlvbiBzZXR1cFdyaXRlcihtZXRob2RTZXRJbmRleCwgd3JpdGVy
KSB7CiAgICAgdmFyIG1ldGhvZHMgPSBtZXRob2RTZXRbbWV0aG9kU2V0SW5kZXhdOwogICAgIHdy
aXRlci5vbmFib3J0ID0gbWV0aG9kcy5vbmFib3J0OwogICAgIHdyaXRlci5vbndyaXRlc3RhcnQg
PSBtZXRob2RzLm9ud3JpdGVzdGFydDsKKyAgICB3cml0ZXIub25wcm9ncmVzcyA9IG1ldGhvZHMu
b25wcm9ncmVzczsKICAgICB3cml0ZXIub253cml0ZSA9IG1ldGhvZHMub253cml0ZTsKICAgICB3
cml0ZXIub253cml0ZWVuZCA9IG1ldGhvZHMub253cml0ZWVuZDsKICAgICBleHBlY3RlZExlbmd0
aCA9IG1ldGhvZHMudmVyaWZ5TGVuZ3RoOworICAgIHRydW5jYXRlTGVuZ3RoID0gbWV0aG9kcy50
cnVuY2F0ZUxlbmd0aDsKICAgICBtZXRob2RzLmFjdGlvbigpOwogfQogCi1mdW5jdGlvbiBydW5U
ZXN0KGluaXRJbmRleCwgdGVzdEluZGV4KSB7Ci0gICAgZm9sbG93T25BY3Rpb24gPSB0ZXN0SW5k
ZXg7Ci0gICAgc2V0dXBXcml0ZXIoaW5pdEluZGV4LCB3cml0ZXIpOwotfQotCi1mdW5jdGlvbiBk
b0ZvbGxvd09uQWN0aW9uKCkgewotICAgIHNob3VsZEJlVHJ1ZSgiZm9sbG93T25BY3Rpb24gPT0g
MSB8fCBmb2xsb3dPbkFjdGlvbiA9PSAzIik7Ci0gICAgc2V0dXBXcml0ZXIoZm9sbG93T25BY3Rp
b24sIHdyaXRlcik7CitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgIHNldHVwV3JpdGVyKGN1cnJl
bnRUZXN0LCB3cml0ZXIpOwogfQogCiB2YXIganNUZXN0SXNBc3luYyA9IHRydWU7CkBAIC0xMzIs
NSArMTc4LDUgQEAgc2V0dXBBbmRSdW5UZXN0KDIqMTAyNCoxMDI0LCAnZmlsZS13cml0ZXItYWJv
cnQnLAogICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChmaWxlRW50cnksIGZpbGVXcml0ZXIpIHsK
ICAgICAgICAgICAgICAgICAgICAgZmlsZUVudHJ5Rm9yQ2xlYW51cCA9IGZpbGVFbnRyeTsKICAg
ICAgICAgICAgICAgICAgICAgd3JpdGVyID0gZmlsZVdyaXRlcjsKLSAgICAgICAgICAgICAgICAg
ICAgcnVuVGVzdCgwLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgcnVuVGVzdCgpOwogICAgICAg
ICAgICAgICAgIH0pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146138</attachid>
            <date>2012-06-06 16:12:20 -0700</date>
            <delta_ts>2012-06-06 16:18:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87165-20120606161220.patch</filename>
            <type>text/plain</type>
            <size>14251</size>
            <attacher name="Eric U.">ericu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5NjIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGQ3ZjljMzlmNTU5ZTMy
Mzg2NWQ2ZTVlYjZiMTM2MThmMzgzMjhjZS4uMmRiODBkNDRiNjRkZjgyNzI2ZjVlYTMxNDBlNTRl
MGVmODZiMDg1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDEyLTA2LTA1ICBFcmlj
IFVocmhhbmUgPGVyaWN1QGNocm9taXVtLm9yZz4KKworICAgICAgICBDcmFzaCBpbiBmYXN0L2Zp
bGVzL3JlYWQgdGVzdHMgZHVyaW5nIEdhcmJhZ2UgQ29sbGVjdGlvbgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODcxNjUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKQorCisgICAgICAgIEZpeCBwcmV2aW91cyBmaXggZm9yIGhhc1Bl
bmRpbmdBY3Rpdml0eSwgYW5kIGZpeCBhIGJ1ZyBpbiBhIGNvbXBsZXgKKyAgICAgICAgYWJvcnQg
Y2FzZSBhcyB3ZWxsLS1hYm9ydCBkdXJpbmcgdGhlIGZpbmFsIHByb2dyZXNzIGV2ZW50IG9mIGEg
d3JpdGUKKyAgICAgICAgd291bGQgaGFuZyB0aGUgd3JpdGVyLgorCisgICAgICAgICogTW9kdWxl
cy9maWxlc3lzdGVtL0ZpbGVXcml0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVdyaXRl
cjo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlV3JpdGVyOjp3cml0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpGaWxlV3JpdGVyOjp0cnVuY2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWxl
V3JpdGVyOjpkaWRXcml0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlV3JpdGVyOjpkaWRUcnVu
Y2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlV3JpdGVyOjpkaWRGYWlsKToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbGVXcml0ZXI6OmNvbXBsZXRlQWJvcnQpOgorICAgICAgICAoV2ViQ29yZTo6
RmlsZVdyaXRlcjo6ZG9PcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVdyaXRlcjo6
c2lnbmFsQ29tcGxldGlvbik6CisKIDIwMTItMDYtMDYgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9t
aXVtLm9yZz4KIAogICAgICAgICB3ZWJraXQgY3Jhc2hlcyBvbiBkZWJ1ZyBidWlsZHMgd2hlbiBy
dW5uaW5nIElFVEMgZmxleGJveC1vcmRpbmFsLWdyb3VwLTAwMS5odG0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9GaWxlV3JpdGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9GaWxlV3JpdGVyLmNwcAppbmRleCBiYzE2MDc2ZGQ2
MzU0MjQ3ODFmNWE0ZGY2NzkzZGU5ZDRlNTM3OTQ1Li5lMDA3MzNlNjVjOTA3YzI5Y2I4ZmQ1Zjll
Zjc5ODQxN2JhYWEzNGIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVz
eXN0ZW0vRmlsZVdyaXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lz
dGVtL0ZpbGVXcml0ZXIuY3BwCkBAIC05MCw4ICs5MCw2IEBAIHZvaWQgRmlsZVdyaXRlcjo6c3Rv
cCgpCiAgICAgICAgIHJldHVybjsKICAgICBkb09wZXJhdGlvbihPcGVyYXRpb25BYm9ydCk7CiAg
ICAgbV9yZWFkeVN0YXRlID0gRE9ORTsKLQotICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsK
IH0KIAogdm9pZCBGaWxlV3JpdGVyOjp3cml0ZShCbG9iKiBkYXRhLCBFeGNlcHRpb25Db2RlJiBl
YykKQEAgLTExMiw4ICsxMTAsNiBAQCB2b2lkIEZpbGVXcml0ZXI6OndyaXRlKEJsb2IqIGRhdGEs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgc2V0UGVu
ZGluZ0FjdGl2aXR5KHRoaXMpOwotCiAgICAgbV9ibG9iQmVpbmdXcml0dGVuID0gZGF0YTsKICAg
ICBtX3JlYWR5U3RhdGUgPSBXUklUSU5HOwogICAgIG1fYnl0ZXNXcml0dGVuID0gMDsKQEAgLTE1
NSw4ICsxNTEsNiBAQCB2b2lkIEZpbGVXcml0ZXI6OnRydW5jYXRlKGxvbmcgbG9uZyBwb3NpdGlv
biwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzZXRQ
ZW5kaW5nQWN0aXZpdHkodGhpcyk7Ci0KICAgICBtX3JlYWR5U3RhdGUgPSBXUklUSU5HOwogICAg
IG1fYnl0ZXNXcml0dGVuID0gMDsKICAgICBtX2J5dGVzVG9Xcml0ZSA9IDA7CkBAIC0xOTgsMTUg
KzE5MiwxOSBAQCB2b2lkIEZpbGVXcml0ZXI6OmRpZFdyaXRlKGxvbmcgbG9uZyBieXRlcywgYm9v
bCBjb21wbGV0ZSkKICAgICBzZXRQb3NpdGlvbihwb3NpdGlvbigpICsgYnl0ZXMpOwogICAgIGlm
IChwb3NpdGlvbigpID4gbGVuZ3RoKCkpCiAgICAgICAgIHNldExlbmd0aChwb3NpdGlvbigpKTsK
KyAgICBpZiAoY29tcGxldGUpIHsKKyAgICAgICAgbV9ibG9iQmVpbmdXcml0dGVuLmNsZWFyKCk7
CisgICAgICAgIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9IE9wZXJhdGlvbk5vbmU7CisgICAgfQog
ICAgIC8vIFRPRE86IFRocm90dGxlIHRvIG5vIG1vcmUgZnJlcXVlbnRseSB0aGFuIGV2ZXJ5IDUw
bXMuCiAgICAgaW50IG51bUFib3J0cyA9IG1fbnVtQWJvcnRzOwogICAgIGZpcmVFdmVudChldmVu
dE5hbWVzKCkucHJvZ3Jlc3NFdmVudCk7CiAgICAgLy8gV2UgY291bGQgZ2V0IGFuIGFib3J0IGlu
IHRoZSBoYW5kbGVyIGZvciB0aGlzIGV2ZW50LiBJZiB3ZSBkbywgaXQncwogICAgIC8vIGFscmVh
ZHkgaGFuZGxlZCB0aGUgY2xlYW51cCBhbmQgc2lnbmFsQ29tcGxldGlvbiBjYWxsLgotICAgIGlm
IChjb21wbGV0ZSAmJiBudW1BYm9ydHMgPT0gbV9udW1BYm9ydHMpIHsKLSAgICAgICAgbV9ibG9i
QmVpbmdXcml0dGVuLmNsZWFyKCk7Ci0gICAgICAgIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9IE9w
ZXJhdGlvbk5vbmU7Ci0gICAgICAgIHNpZ25hbENvbXBsZXRpb24oRmlsZUVycm9yOjpPSyk7Cisg
ICAgaWYgKGNvbXBsZXRlKSB7CisgICAgICBpZiAobnVtQWJvcnRzID09IG1fbnVtQWJvcnRzKQor
ICAgICAgICAgIHNpZ25hbENvbXBsZXRpb24oRmlsZUVycm9yOjpPSyk7CisgICAgICB1bnNldFBl
bmRpbmdBY3Rpdml0eSh0aGlzKTsKICAgICB9CiB9CiAKQEAgLTIyMyw2ICsyMjEsNyBAQCB2b2lk
IEZpbGVXcml0ZXI6OmRpZFRydW5jYXRlKCkKICAgICAgICAgc2V0UG9zaXRpb24obGVuZ3RoKCkp
OwogICAgIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9IE9wZXJhdGlvbk5vbmU7CiAgICAgc2lnbmFs
Q29tcGxldGlvbihGaWxlRXJyb3I6Ok9LKTsKKyAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlz
KTsKIH0KIAogdm9pZCBGaWxlV3JpdGVyOjpkaWRGYWlsKEZpbGVFcnJvcjo6RXJyb3JDb2RlIGNv
ZGUpCkBAIC0yMzksNiArMjM4LDcgQEAgdm9pZCBGaWxlV3JpdGVyOjpkaWRGYWlsKEZpbGVFcnJv
cjo6RXJyb3JDb2RlIGNvZGUpCiAgICAgbV9ibG9iQmVpbmdXcml0dGVuLmNsZWFyKCk7CiAgICAg
bV9vcGVyYXRpb25JblByb2dyZXNzID0gT3BlcmF0aW9uTm9uZTsKICAgICBzaWduYWxDb21wbGV0
aW9uKGNvZGUpOworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOwogfQogCiB2b2lkIEZp
bGVXcml0ZXI6OmNvbXBsZXRlQWJvcnQoKQpAQCAtMjQ4LDYgKzI0OCw3IEBAIHZvaWQgRmlsZVdy
aXRlcjo6Y29tcGxldGVBYm9ydCgpCiAgICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IG1fcXVldWVk
T3BlcmF0aW9uOwogICAgIG1fcXVldWVkT3BlcmF0aW9uID0gT3BlcmF0aW9uTm9uZTsKICAgICBk
b09wZXJhdGlvbihvcGVyYXRpb24pOworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOwog
fQogCiB2b2lkIEZpbGVXcml0ZXI6OmRvT3BlcmF0aW9uKE9wZXJhdGlvbiBvcGVyYXRpb24pCkBA
IC0yNTgsMTIgKzI1OSwxNCBAQCB2b2lkIEZpbGVXcml0ZXI6OmRvT3BlcmF0aW9uKE9wZXJhdGlv
biBvcGVyYXRpb24pCiAgICAgICAgIEFTU0VSVChtX3RydW5jYXRlTGVuZ3RoID09IC0xKTsKICAg
ICAgICAgQVNTRVJUKG1fYmxvYkJlaW5nV3JpdHRlbi5nZXQoKSk7CiAgICAgICAgIEFTU0VSVCht
X3JlYWR5U3RhdGUgPT0gV1JJVElORyk7CisgICAgICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0aGlz
KTsKICAgICAgICAgd3JpdGVyKCktPndyaXRlKHBvc2l0aW9uKCksIG1fYmxvYkJlaW5nV3JpdHRl
bi5nZXQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgT3BlcmF0aW9uVHJ1bmNhdGU6CiAg
ICAgICAgIEFTU0VSVChtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gT3BlcmF0aW9uTm9uZSk7CiAg
ICAgICAgIEFTU0VSVChtX3RydW5jYXRlTGVuZ3RoID49IDApOwogICAgICAgICBBU1NFUlQobV9y
ZWFkeVN0YXRlID09IFdSSVRJTkcpOworICAgICAgICBzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7
CiAgICAgICAgIHdyaXRlcigpLT50cnVuY2F0ZShtX3RydW5jYXRlTGVuZ3RoKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBPcGVyYXRpb25Ob25lOgpAQCAtMjc1LDYgKzI3OCw4IEBAIHZvaWQg
RmlsZVdyaXRlcjo6ZG9PcGVyYXRpb24oT3BlcmF0aW9uIG9wZXJhdGlvbikKICAgICBjYXNlIE9w
ZXJhdGlvbkFib3J0OgogICAgICAgICBpZiAobV9vcGVyYXRpb25JblByb2dyZXNzID09IE9wZXJh
dGlvbldyaXRlIHx8IG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBPcGVyYXRpb25UcnVuY2F0ZSkK
ICAgICAgICAgICAgIHdyaXRlcigpLT5hYm9ydCgpOworICAgICAgICBlbHNlIGlmIChtX29wZXJh
dGlvbkluUHJvZ3Jlc3MgIT0gT3BlcmF0aW9uQWJvcnQpCisgICAgICAgICAgICBvcGVyYXRpb24g
PSBPcGVyYXRpb25Ob25lOwogICAgICAgICBtX3F1ZXVlZE9wZXJhdGlvbiA9IE9wZXJhdGlvbk5v
bmU7CiAgICAgICAgIG1fYmxvYkJlaW5nV3JpdHRlbi5jbGVhcigpOwogICAgICAgICBtX3RydW5j
YXRlTGVuZ3RoID0gLTE7CkBAIC0yOTcsOSArMzAyLDYgQEAgdm9pZCBGaWxlV3JpdGVyOjpzaWdu
YWxDb21wbGV0aW9uKEZpbGVFcnJvcjo6RXJyb3JDb2RlIGNvZGUpCiAgICAgfSBlbHNlCiAgICAg
ICAgIGZpcmVFdmVudChldmVudE5hbWVzKCkud3JpdGVFdmVudCk7CiAgICAgZmlyZUV2ZW50KGV2
ZW50TmFtZXMoKS53cml0ZWVuZEV2ZW50KTsKLSAgICAKLSAgICAvLyBBbGwgcG9zc2libGUgZXZl
bnRzIGhhdmUgZmlyZWQgYW5kIHdlJ3JlIGRvbmUsIG5vIG1vcmUgcGVuZGluZyBhY3Rpdml0eS4K
LSAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKIH0KIAogdm9pZCBGaWxlV3JpdGVyOjpm
aXJlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDdkODkzYjE3MzY4MWMx
ODhiZTJkMmM5MTUwOTlkMzg3NjVhYzg3NDguLmRlYjU2MDM5ZWUyY2RlY2RmZmI0ODcwZjA2MjQ1
OTMzNjRlYzQ5NWEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMi0wNi0wNSAgRXJpYyBVaHJo
YW5lIDxlcmljdUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQ3Jhc2ggaW4gZmFzdC9maWxlcy9y
ZWFkIHRlc3RzIGR1cmluZyBHYXJiYWdlIENvbGxlY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3MTY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkKKworICAgICAgICBTaW1wbGlmeSBmaWxlLXdyaXRlci1hYm9ydC1jb250
aW51ZS5qcyBhIGJpdCwgYW5kIGFkZCBhIG5ldyB0ZXN0IGNhc2UKKyAgICAgICAgZm9yIGEgd3Jp
dGUgdGhhdCBnZXRzIGFib3J0ZWQgaW4gdGhlIGZpbmFsIHByb2dyZXNzIGV2ZW50LCB3aGljaAor
ICAgICAgICBwcmV2aW91c2x5IHdvdWxkIGhhdmUgaHVuZyB0aGUgRmlsZVdyaXRlci4KKworICAg
ICAgICAqIGZhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci1hYm9ydC1jb250aW51ZS1leHBlY3Rl
ZC50eHQ6CisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1h
Ym9ydC1jb250aW51ZS5qczoKKwogMjAxMi0wNi0wNiAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIHdlYmtpdCBjcmFzaGVzIG9uIGRlYnVnIGJ1aWxkcyB3aGVuIHJ1
bm5pbmcgSUVUQyBmbGV4Ym94LW9yZGluYWwtZ3JvdXAtMDAxLmh0bQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2ZpbGUtd3JpdGVyLWFib3J0LWNvbnRpbnVlLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci1hYm9ydC1j
b250aW51ZS1leHBlY3RlZC50eHQKaW5kZXggYThkNjA5OWU1NTdiZjZkMzA3MTMwNDhhYzE2ZTNl
NzRkYWI5NjdkZS4uNTYyYjI0ZWNiZDkxNDgxOTAzYzlhYWUwZmY0YmIyOTdlZDg1MzMxMiAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2ZpbGUtd3JpdGVyLWFib3J0LWNv
bnRpbnVlLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmls
ZS13cml0ZXItYWJvcnQtY29udGludWUtZXhwZWN0ZWQudHh0CkBAIC0yLDIzICsyLDM4IEBAIFRl
c3QgdGhhdCBGaWxlV3JpdGVyIGNhbiBjb250aW51ZSBpbW1lZGlhdGVseSBhZnRlciBhbiBhYm9y
dC4KIAogT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdl
cywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgogCi1zdGFydGluZyB0ZXN0CiBQQVNTIDEx
MDAwMDAgaXMgYmxvYlNpemUKK3N0YXJ0aW5nIHRlc3QKK1BBU1MgQ2FsbGluZyB3cml0ZS4KIFBB
U1MgQ2FsbGluZyBhYm9ydAogUEFTUyBTYXcgYWJvcnQKLVBBU1MgU2F3IHdyaXRlZW5kIDAuCiBQ
QVNTIHdyaXRlci5sZW5ndGggaXMgMAotUEFTUyBmb2xsb3dPbkFjdGlvbiA9PSAxIHx8IGZvbGxv
d09uQWN0aW9uID09IDMgaXMgdHJ1ZQotUEFTUyAxMTAwMDAwIGlzIGJsb2JTaXplCitQQVNTIFNh
dyB3cml0ZWVuZCAwLgorUEFTUyBDYWxsaW5nIHdyaXRlLgogUEFTUyB3cml0ZXIubGVuZ3RoIGlz
IDExMDAwMDAKIFBBU1MgU2F3IHdyaXRlZW5kIDEuCi1QQVNTIDExMDAwMDAgaXMgYmxvYlNpemUK
LVBBU1MgQ2FsbGluZyBhYm9ydAorUEFTUyBDYWxsaW5nIHRydW5jYXRlLgorUEFTUyB3cml0ZXIu
bGVuZ3RoIGlzIDAKK1BBU1MgU2F3IHdyaXRlZW5kIDIuCitQQVNTIENhbGxpbmcgd3JpdGUuCitQ
QVNTIENhbGxpbmcgYWJvcnQgYXQgdGhlIGVuZCBvZiB0aGUgd3JpdGUKIFBBU1MgU2F3IGFib3J0
Ci1QQVNTIFNhdyB3cml0ZWVuZCAwLgogUEFTUyB3cml0ZXIubGVuZ3RoIGlzIDExMDAwMDAKLVBB
U1MgZm9sbG93T25BY3Rpb24gPT0gMSB8fCBmb2xsb3dPbkFjdGlvbiA9PSAzIGlzIHRydWUKK1BB
U1MgU2F3IHdyaXRlZW5kIDMuCitQQVNTIENhbGxpbmcgd3JpdGUuCitQQVNTIHdyaXRlci5sZW5n
dGggaXMgMjIwMDAwMAorUEFTUyBTYXcgd3JpdGVlbmQgNC4KK1BBU1MgQ2FsbGluZyB0cnVuY2F0
ZS4KK1BBU1Mgd3JpdGVyLmxlbmd0aCBpcyAwCitQQVNTIFNhdyB3cml0ZWVuZCA1LgorUEFTUyBD
YWxsaW5nIHdyaXRlLgorUEFTUyBDYWxsaW5nIGFib3J0CitQQVNTIFNhdyBhYm9ydAorUEFTUyB3
cml0ZXIubGVuZ3RoIGlzIDAKK1BBU1MgU2F3IHdyaXRlZW5kIDYuCitQQVNTIENhbGxpbmcgdHJ1
bmNhdGUuCiBQQVNTIHdyaXRlci5sZW5ndGggaXMgNworUEFTUyBTYXcgd3JpdGVlbmQgNy4KIFBB
U1MgQWxsIHRlc3RzIGNvbXBsZXRlLgogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQog
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUt
d3JpdGVyLWFib3J0LWNvbnRpbnVlLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jl
c291cmNlcy9maWxlLXdyaXRlci1hYm9ydC1jb250aW51ZS5qcwppbmRleCAxNzkxNmRiYjU4YzY5
ZmI5NjJkZDI4MTVlZDBmODAxZGNlZjhmYmJhLi5iZGQ0NmJmYWQzMzExOTMzYzA4NGU2ZmUyODhm
ZGU0NTlkMDU4OTdhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVz
b3VyY2VzL2ZpbGUtd3JpdGVyLWFib3J0LWNvbnRpbnVlLmpzCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItYWJvcnQtY29udGludWUuanMKQEAg
LTExLDQyICsxMSw4OCBAQCB2YXIgc2F3QWJvcnQ7CiB2YXIgc2F3V3JpdGVFbmQ7CiB2YXIgd3Jp
dGVyOwogdmFyIGV4cGVjdGVkTGVuZ3RoOwotdmFyIHRydW5jYXRlTGVuZ3RoID0gNzsKK3ZhciB0
cnVuY2F0ZUxlbmd0aDsKIHZhciBibG9iU2l6ZSA9IDExMDAwMDA7Cit2YXIgY3VycmVudFRlc3Qg
PSAwOwordmFyIGJsb2IgPSBnZXRCbG9iKCk7CiAKIHZhciBtZXRob2RTZXQgPSBbCiAgIHsgIC8v
IFNldHVwIG1ldGhvZCBzZXQgdGhhdCB3cml0ZXMsIHRoZW4gYWJvcnRzIHRoYXQgd3JpdGUgYmVm
b3JlIGNvbXBsZXRpb24uCiAgICAgYWN0aW9uIDogc3RhcnRXcml0ZSwKICAgICB2ZXJpZnlMZW5n
dGggOiAwLAogICAgIG9ud3JpdGVzdGFydCA6IGFib3J0V3JpdGUsCisgICAgb25wcm9ncmVzcyA6
IG5vcCwKICAgICBvbndyaXRlIDogb25FcnJvciwKICAgICBvbmFib3J0IDogbG9nQWJvcnQsCi0g
ICAgb253cml0ZWVuZCA6IGNoZWNrTGVuZ3RoQW5kQ2FsbEZvbGxvd09uQWN0aW9uCisgICAgb253
cml0ZWVuZCA6IGNoZWNrTGVuZ3RoQW5kU3RhcnROZXh0VGVzdAogICB9LAogICB7ICAvLyBNZXRo
b2Qgc2V0IHRoYXQgZG9lcyBhIGNvbXBsZXRlIHdyaXRlLgogICAgIGFjdGlvbiA6IHN0YXJ0V3Jp
dGUsCiAgICAgdmVyaWZ5TGVuZ3RoIDogYmxvYlNpemUsCiAgICAgb253cml0ZXN0YXJ0IDogbm9w
LAorICAgIG9ucHJvZ3Jlc3MgOiBub3AsCiAgICAgb253cml0ZSA6IG5vcCwKICAgICBvbmFib3J0
IDogb25FcnJvciwKICAgICBvbndyaXRlZW5kIDogY2hlY2tMZW5ndGhBbmRTdGFydE5leHRUZXN0
CiAgIH0sCi0gIHsgIC8vIFNldHVwIG1ldGhvZCBzZXQgdGhhdCB3cml0ZXMsIHRoZW4gYWJvcnRz
IHRoYXQgd3JpdGUgYmVmb3JlIGNvbXBsZXRpb24uCisgIHsgLy8gTWV0aG9kIHNldCB0aGF0IGRv
ZXMgYSBjb21wbGV0ZSB0cnVuY2F0ZSwganVzdCB0byBjbGVhbiB1cC4KKyAgICBhY3Rpb24gOiBz
dGFydFRydW5jYXRlLAorICAgIHRydW5jYXRlTGVuZ3RoIDogMCwKKyAgICB2ZXJpZnlMZW5ndGgg
OiAwLAorICAgIG9ud3JpdGVzdGFydCA6IG5vcCwKKyAgICBvbnByb2dyZXNzIDogbm9wLAorICAg
IG9ud3JpdGUgOiBub3AsCisgICAgb25hYm9ydCA6IG9uRXJyb3IsCisgICAgb253cml0ZWVuZCA6
IGNoZWNrTGVuZ3RoQW5kU3RhcnROZXh0VGVzdAorICB9LAorICB7ICAvLyBTZXR1cCBtZXRob2Qg
c2V0IHRoYXQgd3JpdGVzLCB0aGVuIGFib3J0cyB0aGF0IHdyaXRlIGp1c3QgYXQgY29tcGxldGlv
bi4KKyAgICBhY3Rpb24gOiBzdGFydFdyaXRlLAorICAgIHZlcmlmeUxlbmd0aCA6IGJsb2JTaXpl
LAorICAgIG9ud3JpdGVzdGFydCA6IG5vcCwKKyAgICBvbnByb2dyZXNzIDogYWJvcnRPbkNvbXBs
ZXRlLAorICAgIG9ud3JpdGUgOiBub3AsCisgICAgb25hYm9ydCA6IGxvZ0Fib3J0LAorICAgIG9u
d3JpdGVlbmQgOiBjaGVja0xlbmd0aEFuZFN0YXJ0TmV4dFRlc3QKKyAgfSwKKyAgeyAgLy8gTWV0
aG9kIHNldCB0aGF0IGRvZXMgYSBjb21wbGV0ZSB3cml0ZS4KKyAgICBhY3Rpb24gOiBzdGFydFdy
aXRlLAorICAgIHZlcmlmeUxlbmd0aCA6IGJsb2JTaXplICogMiwgLy8gQWRkIGluIGxlZnRvdmVy
cyBmcm9tIHByZXZpb3VzIG1ldGhvZC4KKyAgICBvbndyaXRlc3RhcnQgOiBub3AsCisgICAgb25w
cm9ncmVzcyA6IG5vcCwKKyAgICBvbndyaXRlIDogbm9wLAorICAgIG9uYWJvcnQgOiBvbkVycm9y
LAorICAgIG9ud3JpdGVlbmQgOiBjaGVja0xlbmd0aEFuZFN0YXJ0TmV4dFRlc3QKKyAgfSwKKyAg
eyAvLyBNZXRob2Qgc2V0IHRoYXQgZG9lcyBhIGNvbXBsZXRlIHRydW5jYXRlLCBqdXN0IHRvIGNs
ZWFuIHVwLgorICAgIGFjdGlvbiA6IHN0YXJ0VHJ1bmNhdGUsCisgICAgdHJ1bmNhdGVMZW5ndGgg
OiAwLAorICAgIHZlcmlmeUxlbmd0aCA6IDAsCisgICAgb253cml0ZXN0YXJ0IDogbm9wLAorICAg
IG9ucHJvZ3Jlc3MgOiBub3AsCisgICAgb253cml0ZSA6IG5vcCwKKyAgICBvbmFib3J0IDogb25F
cnJvciwKKyAgICBvbndyaXRlZW5kIDogY2hlY2tMZW5ndGhBbmRTdGFydE5leHRUZXN0CisgIH0s
CisgIHsgIC8vIFNldHVwIG1ldGhvZCBzZXQgdGhhdCB3cml0ZXMsIHRoZW4gYWJvcnRzIHRoYXQg
d3JpdGUgYXMgaXQgc3RhcnRzLgogICAgIGFjdGlvbiA6IHN0YXJ0V3JpdGUsCi0gICAgdmVyaWZ5
TGVuZ3RoIDogYmxvYlNpemUsICAvLyBMZWZ0IG92ZXIgZnJvbSB0aGUgcHJldmlvdXMgdGVzdC4K
KyAgICB2ZXJpZnlMZW5ndGggOiAwLAogICAgIG9ud3JpdGVzdGFydCA6IGFib3J0V3JpdGUsCisg
ICAgb25wcm9ncmVzcyA6IG5vcCwKICAgICBvbndyaXRlIDogb25FcnJvciwKICAgICBvbmFib3J0
IDogbG9nQWJvcnQsCi0gICAgb253cml0ZWVuZCA6IGNoZWNrTGVuZ3RoQW5kQ2FsbEZvbGxvd09u
QWN0aW9uCisgICAgb253cml0ZWVuZCA6IGNoZWNrTGVuZ3RoQW5kU3RhcnROZXh0VGVzdAogICB9
LAogICB7IC8vIE1ldGhvZCBzZXQgdGhhdCBkb2VzIGEgY29tcGxldGUgdHJ1bmNhdGUuCiAgICAg
YWN0aW9uIDogc3RhcnRUcnVuY2F0ZSwKLSAgICB2ZXJpZnlMZW5ndGggOiB0cnVuY2F0ZUxlbmd0
aCwKKyAgICB0cnVuY2F0ZUxlbmd0aCA6IDcsCisgICAgdmVyaWZ5TGVuZ3RoIDogNywKICAgICBv
bndyaXRlc3RhcnQgOiBub3AsCisgICAgb25wcm9ncmVzcyA6IG5vcCwKICAgICBvbndyaXRlIDog
bm9wLAogICAgIG9uYWJvcnQgOiBvbkVycm9yLAotICAgIG9ud3JpdGVlbmQgOiBjaGVja0xlbmd0
aEFuZENvbXBsZXRlVGVzdAotICB9XTsKKyAgICBvbndyaXRlZW5kIDogY2hlY2tMZW5ndGhBbmRT
dGFydE5leHRUZXN0CisgIH0KK107CiAKIGZ1bmN0aW9uIG5vcCgpIHsKIH0KQEAgLTU5LDQ5ICsx
MDUsNTMgQEAgZnVuY3Rpb24gdGVuWEJsb2IoYmxvYikgewogICAgIHJldHVybiBuZXcgQmxvYihi
Yik7CiB9CiAKLS8vIFRoZXNlIG1ldGhvZHMgc2V0IHVwIGEgd3JpdGUsIGFib3J0IGl0IGFzIHNv
b24gYXMgaXQgc3RhcnRzLCB0aGVuIGluaXRpYXRlCi0vLyB0aGUgZm9sbG93IG9uIGFjdGlvbi4K
K2Z1bmN0aW9uIGdldEJsb2IoKSB7CisgICAgLy8gTGV0J3MgbWFrZSBpdCBhYm91dCBhIG1lZ2Fi
eXRlLgorICAgIHZhciBibG9iID0gdGVuWEJsb2IobmV3IEJsb2IoWyJsb3JlbSBpcHN1bSJdKSk7
CisgICAgYmxvYiA9IHRlblhCbG9iKGJsb2IpOworICAgIGJsb2IgPSB0ZW5YQmxvYihibG9iKTsK
KyAgICBibG9iID0gdGVuWEJsb2IoYmxvYik7CisgICAgYmxvYiA9IHRlblhCbG9iKGJsb2IpOwor
ICAgIHZhciBzaXplID0gYmxvYi5zaXplOworICAgIHNob3VsZEJlKCIiICsgc2l6ZSwgImJsb2JT
aXplIik7CisgICAgcmV0dXJuIGJsb2I7Cit9CisKIGZ1bmN0aW9uIGFib3J0V3JpdGUoZSkgewog
ICAgIHRlc3RQYXNzZWQoIkNhbGxpbmcgYWJvcnQiKTsKICAgICB3cml0ZXIuYWJvcnQoKTsKIH0K
IAotZnVuY3Rpb24gbG9nQWJvcnQoZSkgewotICAgIHRlc3RQYXNzZWQoIlNhdyBhYm9ydCIpOwor
ZnVuY3Rpb24gYWJvcnRPbkNvbXBsZXRlKGUpIHsKKyAgICBpZiAoZS5sb2FkZWQgPT0gZS50b3Rh
bCkgeworICAgICAgICB0ZXN0UGFzc2VkKCJDYWxsaW5nIGFib3J0IGF0IHRoZSBlbmQgb2YgdGhl
IHdyaXRlIik7CisgICAgICAgIHdyaXRlci5hYm9ydCgpOworICAgIH0KIH0KIAotZnVuY3Rpb24g
Y2hlY2tMZW5ndGhBbmRDYWxsRm9sbG93T25BY3Rpb24oZSkgewotICAgIHRlc3RQYXNzZWQoIlNh
dyB3cml0ZWVuZCAwLiIpOwotICAgIHNob3VsZEJlKCJ3cml0ZXIubGVuZ3RoIiwgIiIgKyBleHBl
Y3RlZExlbmd0aCk7Ci0gICAgZG9Gb2xsb3dPbkFjdGlvbigpOworZnVuY3Rpb24gbG9nQWJvcnQo
ZSkgeworICAgIHRlc3RQYXNzZWQoIlNhdyBhYm9ydCIpOwogfQogCi0vLyBGb3IgdGhlIHNlY29u
ZCBtZXRob2Qgc2V0LCB2ZXJpZnkgY29tcGxldGlvbiBhbmQgbW92ZSBvbiB0byB0aGUgbmV4dCB0
ZXN0LgogZnVuY3Rpb24gY2hlY2tMZW5ndGhBbmRTdGFydE5leHRUZXN0KGUpIHsKICAgICBzaG91
bGRCZSgid3JpdGVyLmxlbmd0aCIsICIiICsgZXhwZWN0ZWRMZW5ndGgpOwotICAgIHRlc3RQYXNz
ZWQoIlNhdyB3cml0ZWVuZCAxLiIpOwotICAgIHJ1blRlc3QoMiwgMyk7Ci19Ci0KLWZ1bmN0aW9u
IGNoZWNrTGVuZ3RoQW5kQ29tcGxldGVUZXN0KGUpIHsKLSAgICBzaG91bGRCZSgid3JpdGVyLmxl
bmd0aCIsICIiICsgZXhwZWN0ZWRMZW5ndGgpOwotICAgIHRlc3RQYXNzZWQoIkFsbCB0ZXN0cyBj
b21wbGV0ZS4iKTsKLSAgICBjbGVhblVwKCk7CisgICAgdGVzdFBhc3NlZCgiU2F3IHdyaXRlZW5k
ICIgKyBjdXJyZW50VGVzdCArICIuIik7CisgICAgKytjdXJyZW50VGVzdDsKKyAgICBpZiAoY3Vy
cmVudFRlc3QgPCBtZXRob2RTZXQubGVuZ3RoKQorICAgICAgICBydW5UZXN0KCk7CisgICAgZWxz
ZSB7CisgICAgICAgIHRlc3RQYXNzZWQoIkFsbCB0ZXN0cyBjb21wbGV0ZS4iKTsKKyAgICAgICAg
Y2xlYW5VcCgpOworICAgIH0KIH0KIAogZnVuY3Rpb24gc3RhcnRXcml0ZSgpIHsKLSAgICAvLyBM
ZXQncyBtYWtlIGl0IGFib3V0IGEgbWVnYWJ5dGUuCi0gICAgdmFyIGJsb2IgPSB0ZW5YQmxvYihu
ZXcgQmxvYihbImxvcmVtIGlwc3VtIl0pKTsKLSAgICBibG9iID0gdGVuWEJsb2IoYmxvYik7Ci0g
ICAgYmxvYiA9IHRlblhCbG9iKGJsb2IpOwotICAgIGJsb2IgPSB0ZW5YQmxvYihibG9iKTsKLSAg
ICBibG9iID0gdGVuWEJsb2IoYmxvYik7Ci0gICAgdmFyIHNpemUgPSBibG9iLnNpemU7Ci0gICAg
c2hvdWxkQmUoIiIgKyBzaXplLCAiYmxvYlNpemUiKTsKKyAgICB0ZXN0UGFzc2VkKCJDYWxsaW5n
IHdyaXRlLiIpOwogICAgIHdyaXRlci53cml0ZShibG9iKTsKIH0KIAogZnVuY3Rpb24gc3RhcnRU
cnVuY2F0ZSgpIHsKKyAgICB0ZXN0UGFzc2VkKCJDYWxsaW5nIHRydW5jYXRlLiIpOwogICAgIHdy
aXRlci50cnVuY2F0ZSh0cnVuY2F0ZUxlbmd0aCk7CiB9CiAKQEAgLTExMSwyMCArMTYxLDE2IEBA
IGZ1bmN0aW9uIHNldHVwV3JpdGVyKG1ldGhvZFNldEluZGV4LCB3cml0ZXIpIHsKICAgICB2YXIg
bWV0aG9kcyA9IG1ldGhvZFNldFttZXRob2RTZXRJbmRleF07CiAgICAgd3JpdGVyLm9uYWJvcnQg
PSBtZXRob2RzLm9uYWJvcnQ7CiAgICAgd3JpdGVyLm9ud3JpdGVzdGFydCA9IG1ldGhvZHMub253
cml0ZXN0YXJ0OworICAgIHdyaXRlci5vbnByb2dyZXNzID0gbWV0aG9kcy5vbnByb2dyZXNzOwog
ICAgIHdyaXRlci5vbndyaXRlID0gbWV0aG9kcy5vbndyaXRlOwogICAgIHdyaXRlci5vbndyaXRl
ZW5kID0gbWV0aG9kcy5vbndyaXRlZW5kOwogICAgIGV4cGVjdGVkTGVuZ3RoID0gbWV0aG9kcy52
ZXJpZnlMZW5ndGg7CisgICAgdHJ1bmNhdGVMZW5ndGggPSBtZXRob2RzLnRydW5jYXRlTGVuZ3Ro
OwogICAgIG1ldGhvZHMuYWN0aW9uKCk7CiB9CiAKLWZ1bmN0aW9uIHJ1blRlc3QoaW5pdEluZGV4
LCB0ZXN0SW5kZXgpIHsKLSAgICBmb2xsb3dPbkFjdGlvbiA9IHRlc3RJbmRleDsKLSAgICBzZXR1
cFdyaXRlcihpbml0SW5kZXgsIHdyaXRlcik7Ci19Ci0KLWZ1bmN0aW9uIGRvRm9sbG93T25BY3Rp
b24oKSB7Ci0gICAgc2hvdWxkQmVUcnVlKCJmb2xsb3dPbkFjdGlvbiA9PSAxIHx8IGZvbGxvd09u
QWN0aW9uID09IDMiKTsKLSAgICBzZXR1cFdyaXRlcihmb2xsb3dPbkFjdGlvbiwgd3JpdGVyKTsK
K2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgc2V0dXBXcml0ZXIoY3VycmVudFRlc3QsIHdyaXRl
cik7CiB9CiAKIHZhciBqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKQEAgLTEzMiw1ICsxNzgsNSBAQCBz
ZXR1cEFuZFJ1blRlc3QoMioxMDI0KjEwMjQsICdmaWxlLXdyaXRlci1hYm9ydCcsCiAgICAgICAg
ICAgICAgICAgZnVuY3Rpb24gKGZpbGVFbnRyeSwgZmlsZVdyaXRlcikgewogICAgICAgICAgICAg
ICAgICAgICBmaWxlRW50cnlGb3JDbGVhbnVwID0gZmlsZUVudHJ5OwogICAgICAgICAgICAgICAg
ICAgICB3cml0ZXIgPSBmaWxlV3JpdGVyOwotICAgICAgICAgICAgICAgICAgICBydW5UZXN0KDAs
IDEpOworICAgICAgICAgICAgICAgICAgICBydW5UZXN0KCk7CiAgICAgICAgICAgICAgICAgfSk7
Cg==
</data>
<flag name="review"
          id="153386"
          type_id="1"
          status="+"
          setter="msaboff"
    />
          </attachment>
      

    </bug>

</bugzilla>