<?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>108029</bug_id>
          
          <creation_ts>2013-01-27 04:58:36 -0800</creation_ts>
          <short_desc>JSC: SourceProviderCache is memory hungry.</short_desc>
          <delta_ts>2013-01-29 04:02:42 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, Performance</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andreas Kling">kling</reporter>
          <assigned_to name="Andreas Kling">kling</assigned_to>
          <cc>barraclough</cc>
    
    <cc>darin</cc>
    
    <cc>ggaren</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>817363</commentid>
    <comment_count>0</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-01-27 04:58:36 -0800</bug_when>
    <thetext>SourceProviderCacheItem currently has two vectors for captured variable names.
Since these vectors are never mutated after creation, we could store them as fixed-sized arrays instead and bake the whole thing into a single allocation.

I have a patch for this that yields a 13.3 MB (~2%) progression on Membuster3.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817364</commentid>
    <comment_count>1</comment_count>
      <attachid>184911</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-01-27 05:47:55 -0800</bug_when>
    <thetext>Created attachment 184911
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817365</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-27 05:50:16 -0800</bug_when>
    <thetext>Attachment 184911 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/parser/Parser.cpp&apos;, u&apos;Source/JavaScriptCore/parser/Parser.h&apos;, u&apos;Source/JavaScriptCore/parser/SourceProviderCacheItem.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/parser/SourceProviderCacheItem.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817366</commentid>
    <comment_count>3</comment_count>
      <attachid>184911</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-27 06:11:53 -0800</bug_when>
    <thetext>Comment on attachment 184911
Proposed patch

Attachment 184911 did not pass win-ews (win):
Output: http://queues.webkit.org/results/16138573</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817367</commentid>
    <comment_count>4</comment_count>
      <attachid>184912</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-01-27 06:30:46 -0800</bug_when>
    <thetext>Created attachment 184912
Proposed patch v2

Let&apos;s see if we can #pragma our way out of MSVC&apos;s whining..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817511</commentid>
    <comment_count>5</comment_count>
      <attachid>184912</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-01-27 21:50:40 -0800</bug_when>
    <thetext>Comment on attachment 184912
Proposed patch v2

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

&gt; Source/JavaScriptCore/parser/SourceProviderCacheItem.h:92
&gt; +    ~SourceProviderCacheItem();

This is more common near the top of the class.

&gt; Source/JavaScriptCore/parser/SourceProviderCacheItem.h:110
&gt; +    void* slot = WTF::fastMalloc(objectSize);

I don&apos;t think the WTF:: here is needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817518</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2013-01-27 22:00:49 -0800</bug_when>
    <thetext>&lt;rdar://problem/13094806&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817530</commentid>
    <comment_count>7</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-01-27 22:35:39 -0800</bug_when>
    <thetext>Committed r140945: &lt;http://trac.webkit.org/changeset/140945&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817551</commentid>
    <comment_count>8</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-01-27 23:50:28 -0800</bug_when>
    <thetext>Can we just remove the SourceProvider cache? Now that we cache bytecode, a parsing cache is pure overhead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817608</commentid>
    <comment_count>9</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-01-28 01:41:51 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Can we just remove the SourceProvider cache? Now that we cache bytecode, a parsing cache is pure overhead.

If we can, that would be another 10.12 MB saved on the benchmark.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817809</commentid>
    <comment_count>10</comment_count>
      <attachid>184912</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-01-28 09:31:23 -0800</bug_when>
    <thetext>Comment on attachment 184912
Proposed patch v2

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

&gt; Source/JavaScriptCore/parser/SourceProviderCacheItem.h:97
&gt; +    StringImpl* m_variables[0];

Could this have been done with RefPtr&lt;StringImpl&gt; instead? Here’s why I ask:

&gt; Source/JavaScriptCore/parser/SourceProviderCacheItem.h:103
&gt; +        m_variables[i]-&gt;deref();

This line of code could have been m_variables[i]::~RefPtr&lt;StringImpl&gt;().

&gt; Source/JavaScriptCore/parser/SourceProviderCacheItem.h:127
&gt; +        m_variables[j] = parameters.usedVariables[i].get();
&gt; +        m_variables[j]-&gt;ref();

This line of code could have been m_variables[j] = parameters.usedVariables[i].

&gt; Source/JavaScriptCore/parser/SourceProviderCacheItem.h:131
&gt; +        m_variables[j] = parameters.writtenVariables[i].get();
&gt; +        m_variables[j]-&gt;ref();

This line of code could have been m_variables[j] = parameters.usedVariables[i].</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817815</commentid>
    <comment_count>11</comment_count>
      <attachid>184912</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-01-28 09:38:39 -0800</bug_when>
    <thetext>Comment on attachment 184912
Proposed patch v2

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

&gt; Source/JavaScriptCore/parser/Parser.h:340
&gt; +        copyCapturedVariablesToVector(m_writtenVariables, parameters.writtenVariables);
&gt; +        copyCapturedVariablesToVector(m_usedVariables, parameters.usedVariables);

The shrinkToFit call inside copyCapturedVariablesToVector is no longer a useful optimization, and I suggest we remove it, since the vectors are now temporaries.

On the other hand, a reserveInitialCapacity call inside copyCapturedVariablesToVector could cut down on memory allocation. Or even an inline capacity in the vector type.

Not sure if these would help performance, but perhaps.

&gt; Source/JavaScriptCore/parser/Parser.h:352
&gt; +        for (unsigned i = 0; i &lt; info-&gt;usedVariablesCount; ++i)
&gt; +            m_usedVariables.add(info-&gt;usedVariables()[i]);
&gt; +        for (unsigned i = 0; i &lt; info-&gt;writtenVariablesCount; ++i)
&gt; +            m_writtenVariables.add(info-&gt;writtenVariables()[i]);

Could this be made more efficient by using reserveCapacity or reserveInitialCapacity?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818818</commentid>
    <comment_count>12</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-01-29 04:02:42 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 184912 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=184912&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/parser/SourceProviderCacheItem.h:97
&gt; &gt; +    StringImpl* m_variables[0];
&gt; 
&gt; Could this have been done with RefPtr&lt;StringImpl&gt; instead? Here’s why I ask:

Yes.

&gt; &gt; Source/JavaScriptCore/parser/SourceProviderCacheItem.h:103
&gt; &gt; +        m_variables[i]-&gt;deref();
&gt; 
&gt; This line of code could have been m_variables[i]::~RefPtr&lt;StringImpl&gt;().

Sure, that would be nicer.

&gt; &gt; Source/JavaScriptCore/parser/SourceProviderCacheItem.h:127
&gt; &gt; +        m_variables[j] = parameters.usedVariables[i].get();
&gt; &gt; +        m_variables[j]-&gt;ref();
&gt; 
&gt; This line of code could have been m_variables[j] = parameters.usedVariables[i].

We&apos;d have to use placement new for these, since m_variables[j] is uninitialized at this point.

(In reply to comment #11)
&gt; (From update of attachment 184912 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=184912&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/parser/Parser.h:340
&gt; &gt; +        copyCapturedVariablesToVector(m_writtenVariables, parameters.writtenVariables);
&gt; &gt; +        copyCapturedVariablesToVector(m_usedVariables, parameters.usedVariables);
&gt; 
&gt; The shrinkToFit call inside copyCapturedVariablesToVector is no longer a useful optimization, and I suggest we remove it, since the vectors are now temporaries.

Indeed, which is why I removed it in this patch. :)

&gt; On the other hand, a reserveInitialCapacity call inside copyCapturedVariablesToVector could cut down on memory allocation. Or even an inline capacity in the vector type.
&gt; 
&gt; Not sure if these would help performance, but perhaps.

Giving it an inline capacity would be a straightforward way to remove at least two (transient) mallocs.

&gt; &gt; Source/JavaScriptCore/parser/Parser.h:352
&gt; &gt; +        for (unsigned i = 0; i &lt; info-&gt;usedVariablesCount; ++i)
&gt; &gt; +            m_usedVariables.add(info-&gt;usedVariables()[i]);
&gt; &gt; +        for (unsigned i = 0; i &lt; info-&gt;writtenVariablesCount; ++i)
&gt; &gt; +            m_writtenVariables.add(info-&gt;writtenVariables()[i]);
&gt; 
&gt; Could this be made more efficient by using reserveCapacity or reserveInitialCapacity?

HashSet doesn&apos;t have a reserveCapacity mechanism.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184911</attachid>
            <date>2013-01-27 05:47:55 -0800</date>
            <delta_ts>2013-01-27 06:30:46 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>bug-108029.diff</filename>
            <type>text/plain</type>
            <size>9473</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDdhNWQ2OGIuLmEyMGI2NGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEzLTAxLTI3ICBBbmRyZWFzIEtsaW5n
ICA8YWtsaW5nQGFwcGxlLmNvbT4KKworICAgICAgICBKU0M6IFNvdXJjZVByb3ZpZGVyQ2FjaGUg
aXMgbWVtb3J5IGh1bmdyeS4KKyAgICAgICAgPGh0dHA6Ly93ZWJraXQub3JnL2IvMTA4MDI5Pgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBmaXhl
ZC1zaXplIGFycmF5cyBmb3IgU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0ncyBsaXN0cyBvZiBjYXB0
dXJlZCB2YXJpYWJsZXMuCisgICAgICAgIFNpbmNlIHRoZSBsaXN0cyBuZXZlciBjaGFuZ2UgYWZ0
ZXIgdGhlIG9iamVjdCBpcyBjcmVhdGVkLCB0aGVyZSdzIG5vIG5lZWQgdG8ga2VlcCB0aGVtIGlu
IFZlY3RvcnMKKyAgICAgICAgYW5kIHdlIGNhbiBpbnN0ZWFkIGNyZWF0ZSB0aGUgd2hvbGUgY2Fj
aGUgaXRlbSBpbiBhIHNpbmdsZSBhbGxvY2F0aW9uLgorCisgICAgICAgIDEzLjMgTUIgcHJvZ3Jl
c3Npb24gb24gTWVtYnVzdGVyMy4gKE92ZXIgMiUgb2YgdG90YWwgYWxsb2NhdGlvbnMuKQorCisg
ICAgICAgICogcGFyc2VyL1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6Ojo6cGFyc2VGdW5jdGlv
bkluZm8pOgorICAgICAgICAqIHBhcnNlci9QYXJzZXIuaDoKKyAgICAgICAgKEpTQzo6U2NvcGU6
OmNvcHlDYXB0dXJlZFZhcmlhYmxlc1RvVmVjdG9yKToKKyAgICAgICAgKEpTQzo6U2NvcGU6OmZp
bGxQYXJhbWV0ZXJzRm9yU291cmNlUHJvdmlkZXJDYWNoZSk6CisgICAgICAgIChKU0M6OlNjb3Bl
OjpyZXN0b3JlRnJvbVNvdXJjZVByb3ZpZGVyQ2FjaGUpOgorICAgICAgICAqIHBhcnNlci9Tb3Vy
Y2VQcm92aWRlckNhY2hlSXRlbS5oOgorICAgICAgICAoU291cmNlUHJvdmlkZXJDYWNoZUl0ZW1D
cmVhdGlvblBhcmFtZXRlcnMpOgorICAgICAgICAoU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0pOgor
ICAgICAgICAoSlNDOjpTb3VyY2VQcm92aWRlckNhY2hlSXRlbTo6YXBwcm94aW1hdGVCeXRlU2l6
ZSk6CisgICAgICAgIChKU0M6OlNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtOjp1c2VkVmFyaWFibGVz
KToKKyAgICAgICAgKEpTQzo6U291cmNlUHJvdmlkZXJDYWNoZUl0ZW06OndyaXR0ZW5WYXJpYWJs
ZXMpOgorICAgICAgICAoSlNDOjpTb3VyY2VQcm92aWRlckNhY2hlSXRlbTo6flNvdXJjZVByb3Zp
ZGVyQ2FjaGVJdGVtKToKKyAgICAgICAgKEpTQzo6U291cmNlUHJvdmlkZXJDYWNoZUl0ZW06OmNy
ZWF0ZSk6CisgICAgICAgIChKU0M6OlNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtOjpTb3VyY2VQcm92
aWRlckNhY2hlSXRlbSk6CisKIDIwMTMtMDEtMjUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxl
LmNvbT4KIAogICAgICAgICBERkcgdmFyaWFibGUgZXZlbnQgc3RyZWFtIHNob3VsZG4ndCB1c2Ug
Tm9kZUluZGV4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNl
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKaW5kZXggZDRk
MmU5Mi4uNzgwOGE0NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Q
YXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcApA
QCAtODM4LDcgKzgzOCw3IEBAIHRlbXBsYXRlIDxGdW5jdGlvblJlcXVpcmVtZW50cyByZXF1aXJl
bWVudHMsIGJvb2wgbmFtZUlzSW5Db250YWluaW5nU2NvcGUsIGNsYXNzCiAgICAgICAgIEFTU0VS
VCghc3RyaWN0TW9kZSgpIHx8IGNhY2hlZEluZm8tPnN0cmljdE1vZGUpOwogICAgICAgICBib2R5
ID0gY29udGV4dC5jcmVhdGVGdW5jdGlvbkJvZHkobG9jYXRpb24sIGNhY2hlZEluZm8tPnN0cmlj
dE1vZGUpOwogICAgICAgICAKLSAgICAgICAgZnVuY3Rpb25TY29wZS0+cmVzdG9yZUZ1bmN0aW9u
SW5mbyhjYWNoZWRJbmZvKTsKKyAgICAgICAgZnVuY3Rpb25TY29wZS0+cmVzdG9yZUZyb21Tb3Vy
Y2VQcm92aWRlckNhY2hlKGNhY2hlZEluZm8pOwogICAgICAgICBmYWlsSWZGYWxzZShwb3BTY29w
ZShmdW5jdGlvblNjb3BlLCBUcmVlQnVpbGRlcjo6TmVlZHNGcmVlVmFyaWFibGVJbmZvKSk7CiAg
ICAgICAgIAogICAgICAgICBjbG9zZUJyYWNlUG9zID0gY2FjaGVkSW5mby0+Y2xvc2VCcmFjZVBv
czsKQEAgLTg2Nyw4ICs4NjcsMTIgQEAgdGVtcGxhdGUgPEZ1bmN0aW9uUmVxdWlyZW1lbnRzIHJl
cXVpcmVtZW50cywgYm9vbCBuYW1lSXNJbkNvbnRhaW5pbmdTY29wZSwgY2xhc3MKICAgICBPd25Q
dHI8U291cmNlUHJvdmlkZXJDYWNoZUl0ZW0+IG5ld0luZm87CiAgICAgaW50IGZ1bmN0aW9uTGVu
Z3RoID0gY2xvc2VCcmFjZVBvcyAtIG9wZW5CcmFjZVBvczsKICAgICBpZiAoVHJlZUJ1aWxkZXI6
OkNhblVzZUZ1bmN0aW9uQ2FjaGUgJiYgbV9mdW5jdGlvbkNhY2hlICYmIGZ1bmN0aW9uTGVuZ3Ro
ID4gbWluaW11bUZ1bmN0aW9uTGVuZ3RoVG9DYWNoZSkgewotICAgICAgICBuZXdJbmZvID0gYWRv
cHRQdHIobmV3IFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtKGZ1bmN0aW9uU3RhcnQsIG1fdG9rZW4u
bV9sb2NhdGlvbi5saW5lLCBjbG9zZUJyYWNlUG9zKSk7Ci0gICAgICAgIGZ1bmN0aW9uU2NvcGUt
PnNhdmVGdW5jdGlvbkluZm8obmV3SW5mby5nZXQoKSk7CisgICAgICAgIFNvdXJjZVByb3ZpZGVy
Q2FjaGVJdGVtQ3JlYXRpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CisgICAgICAgIHBhcmFtZXRl
cnMuZnVuY3Rpb25TdGFydCA9IGZ1bmN0aW9uU3RhcnQ7CisgICAgICAgIHBhcmFtZXRlcnMuY2xv
c2VCcmFjZUxpbmUgPSBtX3Rva2VuLm1fbG9jYXRpb24ubGluZTsKKyAgICAgICAgcGFyYW1ldGVy
cy5jbG9zZUJyYWNlUG9zID0gY2xvc2VCcmFjZVBvczsKKyAgICAgICAgZnVuY3Rpb25TY29wZS0+
ZmlsbFBhcmFtZXRlcnNGb3JTb3VyY2VQcm92aWRlckNhY2hlKHBhcmFtZXRlcnMpOworICAgICAg
ICBuZXdJbmZvID0gU291cmNlUHJvdmlkZXJDYWNoZUl0ZW06OmNyZWF0ZShwYXJhbWV0ZXJzKTsK
ICAgICB9CiAgICAgY29udGV4dC5zZXRGdW5jdGlvblN0YXJ0KGJvZHksIGZ1bmN0aW9uU3RhcnQp
OwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgKaW5kZXggZDY2MjRhYS4u
MWU4MTY2OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCkBAIC0zMjgsMzEg
KzMyOCwyOCBAQCBzdHJ1Y3QgU2NvcGUgewogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgdmVjdG9yLmFwcGVuZCgqaXQpOwogICAgICAgICB9Ci0gICAgICAgIHZlY3Rvci5z
aHJpbmtUb0ZpdCgpOwogICAgIH0KIAotICAgIHZvaWQgc2F2ZUZ1bmN0aW9uSW5mbyhTb3VyY2VQ
cm92aWRlckNhY2hlSXRlbSogaW5mbykKKyAgICB2b2lkIGZpbGxQYXJhbWV0ZXJzRm9yU291cmNl
UHJvdmlkZXJDYWNoZShTb3VyY2VQcm92aWRlckNhY2hlSXRlbUNyZWF0aW9uUGFyYW1ldGVycyYg
cGFyYW1ldGVycykKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2lzRnVuY3Rpb24pOwotICAgICAg
ICBpbmZvLT51c2VzRXZhbCA9IG1fdXNlc0V2YWw7Ci0gICAgICAgIGluZm8tPnN0cmljdE1vZGUg
PSBtX3N0cmljdE1vZGU7Ci0gICAgICAgIGluZm8tPm5lZWRzRnVsbEFjdGl2YXRpb24gPSBtX25l
ZWRzRnVsbEFjdGl2YXRpb247Ci0gICAgICAgIGNvcHlDYXB0dXJlZFZhcmlhYmxlc1RvVmVjdG9y
KG1fd3JpdHRlblZhcmlhYmxlcywgaW5mby0+d3JpdHRlblZhcmlhYmxlcyk7Ci0gICAgICAgIGNv
cHlDYXB0dXJlZFZhcmlhYmxlc1RvVmVjdG9yKG1fdXNlZFZhcmlhYmxlcywgaW5mby0+dXNlZFZh
cmlhYmxlcyk7CisgICAgICAgIHBhcmFtZXRlcnMudXNlc0V2YWwgPSBtX3VzZXNFdmFsOworICAg
ICAgICBwYXJhbWV0ZXJzLnN0cmljdE1vZGUgPSBtX3N0cmljdE1vZGU7CisgICAgICAgIHBhcmFt
ZXRlcnMubmVlZHNGdWxsQWN0aXZhdGlvbiA9IG1fbmVlZHNGdWxsQWN0aXZhdGlvbjsKKyAgICAg
ICAgY29weUNhcHR1cmVkVmFyaWFibGVzVG9WZWN0b3IobV93cml0dGVuVmFyaWFibGVzLCBwYXJh
bWV0ZXJzLndyaXR0ZW5WYXJpYWJsZXMpOworICAgICAgICBjb3B5Q2FwdHVyZWRWYXJpYWJsZXNU
b1ZlY3RvcihtX3VzZWRWYXJpYWJsZXMsIHBhcmFtZXRlcnMudXNlZFZhcmlhYmxlcyk7CiAgICAg
fQogCi0gICAgdm9pZCByZXN0b3JlRnVuY3Rpb25JbmZvKGNvbnN0IFNvdXJjZVByb3ZpZGVyQ2Fj
aGVJdGVtKiBpbmZvKQorICAgIHZvaWQgcmVzdG9yZUZyb21Tb3VyY2VQcm92aWRlckNhY2hlKGNv
bnN0IFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtKiBpbmZvKQogICAgIHsKICAgICAgICAgQVNTRVJU
KG1faXNGdW5jdGlvbik7CiAgICAgICAgIG1fdXNlc0V2YWwgPSBpbmZvLT51c2VzRXZhbDsKICAg
ICAgICAgbV9zdHJpY3RNb2RlID0gaW5mby0+c3RyaWN0TW9kZTsKICAgICAgICAgbV9uZWVkc0Z1
bGxBY3RpdmF0aW9uID0gaW5mby0+bmVlZHNGdWxsQWN0aXZhdGlvbjsKLSAgICAgICAgdW5zaWdu
ZWQgc2l6ZSA9IGluZm8tPnVzZWRWYXJpYWJsZXMuc2l6ZSgpOwotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICAgICAgbV91c2VkVmFyaWFibGVzLmFk
ZChpbmZvLT51c2VkVmFyaWFibGVzW2ldKTsKLSAgICAgICAgc2l6ZSA9IGluZm8tPndyaXR0ZW5W
YXJpYWJsZXMuc2l6ZSgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsg
KytpKQotICAgICAgICAgICAgbV93cml0dGVuVmFyaWFibGVzLmFkZChpbmZvLT53cml0dGVuVmFy
aWFibGVzW2ldKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluZm8tPnVzZWRW
YXJpYWJsZXNDb3VudDsgKytpKQorICAgICAgICAgICAgbV91c2VkVmFyaWFibGVzLmFkZChpbmZv
LT51c2VkVmFyaWFibGVzKClbaV0pOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
aW5mby0+d3JpdHRlblZhcmlhYmxlc0NvdW50OyArK2kpCisgICAgICAgICAgICBtX3dyaXR0ZW5W
YXJpYWJsZXMuYWRkKGluZm8tPndyaXR0ZW5WYXJpYWJsZXMoKVtpXSk7CiAgICAgfQogCiBwcml2
YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92
aWRlckNhY2hlSXRlbS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92
aWRlckNhY2hlSXRlbS5oCmluZGV4IGVjMzg5MDUuLmI5NTE1NDggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmgKQEAg
LTI4LDI2ICsyOCwzNCBAQAogCiAjaW5jbHVkZSAiUGFyc2VyVG9rZW5zLmgiCiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCitzdHJ1Y3QgU291cmNlUHJv
dmlkZXJDYWNoZUl0ZW1DcmVhdGlvblBhcmFtZXRlcnMgeworICAgIHVuc2lnbmVkIGZ1bmN0aW9u
U3RhcnQ7CisgICAgdW5zaWduZWQgY2xvc2VCcmFjZUxpbmU7CisgICAgdW5zaWduZWQgY2xvc2VC
cmFjZVBvczsKKyAgICBib29sIG5lZWRzRnVsbEFjdGl2YXRpb247CisgICAgYm9vbCB1c2VzRXZh
bDsKKyAgICBib29sIHN0cmljdE1vZGU7CisgICAgVmVjdG9yPFJlZlB0cjxTdHJpbmdJbXBsPiA+
IHVzZWRWYXJpYWJsZXM7CisgICAgVmVjdG9yPFJlZlB0cjxTdHJpbmdJbXBsPiA+IHdyaXR0ZW5W
YXJpYWJsZXM7Cit9OworCiBjbGFzcyBTb3VyY2VQcm92aWRlckNhY2hlSXRlbSB7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgU291cmNlUHJvdmlkZXJDYWNoZUl0
ZW0odW5zaWduZWQgZnVuY3Rpb25TdGFydCwgdW5zaWduZWQgY2xvc2VCcmFjZUxpbmUsIHVuc2ln
bmVkIGNsb3NlQnJhY2VQb3MpCi0gICAgICAgIDogZnVuY3Rpb25TdGFydChmdW5jdGlvblN0YXJ0
KQotICAgICAgICAsIGNsb3NlQnJhY2VMaW5lKGNsb3NlQnJhY2VMaW5lKQotICAgICAgICAsIGNs
b3NlQnJhY2VQb3MoY2xvc2VCcmFjZVBvcykKLSAgICB7Ci0gICAgfQorICAgIHN0YXRpYyBQYXNz
T3duUHRyPFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtPiBjcmVhdGUoY29uc3QgU291cmNlUHJvdmlk
ZXJDYWNoZUl0ZW1DcmVhdGlvblBhcmFtZXRlcnMmKTsKKwogICAgIHVuc2lnbmVkIGFwcHJveGlt
YXRlQnl0ZVNpemUoKSBjb25zdAogICAgIHsKICAgICAgICAgLy8gVGhlIGlkZW50aWZpZXJzIGFy
ZSB1bmlxdWVkIHN0cmluZ3Mgc28gbW9zdCBsaWtlbHkgdGhlcmUgYXJlIGZldyBuYW1lcyB0aGF0
IGFjdHVhbGx5IHVzZSBhbnkgYWRkaXRpb25hbCBtZW1vcnkuCi0gICAgICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBhc3N1bW1lZEF2ZXJhZ2VJZGVudGlmaWVyU2l6ZSA9IHNpemVvZihSZWZQdHI8
U3RyaW5nSW1wbD4pICsgMjsKKyAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGFzc3VtZWRB
dmVyYWdlSWRlbnRpZmllclNpemUgPSBzaXplb2YoU3RyaW5nSW1wbCopICsgMjsKICAgICAgICAg
dW5zaWduZWQgc2l6ZSA9IHNpemVvZigqdGhpcyk7Ci0gICAgICAgIHNpemUgKz0gdXNlZFZhcmlh
Ymxlcy5zaXplKCkgKiBhc3N1bW1lZEF2ZXJhZ2VJZGVudGlmaWVyU2l6ZTsKLSAgICAgICAgc2l6
ZSArPSB3cml0dGVuVmFyaWFibGVzLnNpemUoKSAqIGFzc3VtbWVkQXZlcmFnZUlkZW50aWZpZXJT
aXplOworICAgICAgICBzaXplICs9IHVzZWRWYXJpYWJsZXNDb3VudCAqIGFzc3VtZWRBdmVyYWdl
SWRlbnRpZmllclNpemU7CisgICAgICAgIHNpemUgKz0gd3JpdHRlblZhcmlhYmxlc0NvdW50ICog
YXNzdW1lZEF2ZXJhZ2VJZGVudGlmaWVyU2l6ZTsKICAgICAgICAgcmV0dXJuIHNpemU7CiAgICAg
fQogICAgIEpTVG9rZW4gY2xvc2VCcmFjZVRva2VuKCkgY29uc3QgCkBAIC03MCwxMCArNzgsNTUg
QEAgcHVibGljOgogICAgIHVuc2lnbmVkIGNsb3NlQnJhY2VQb3MgOiAzMTsKICAgICBib29sIHN0
cmljdE1vZGUgOiAxOwogCi0gICAgVmVjdG9yPFJlZlB0cjxTdHJpbmdJbXBsPiA+IHVzZWRWYXJp
YWJsZXM7Ci0gICAgVmVjdG9yPFJlZlB0cjxTdHJpbmdJbXBsPiA+IHdyaXR0ZW5WYXJpYWJsZXM7
CisgICAgdW5zaWduZWQgdXNlZFZhcmlhYmxlc0NvdW50OworICAgIHVuc2lnbmVkIHdyaXR0ZW5W
YXJpYWJsZXNDb3VudDsKKworICAgIFN0cmluZ0ltcGwqKiB1c2VkVmFyaWFibGVzKCkgY29uc3Qg
eyByZXR1cm4gY29uc3RfY2FzdDxTdHJpbmdJbXBsKio+KG1fdmFyaWFibGVzKTsgfQorICAgIFN0
cmluZ0ltcGwqKiB3cml0dGVuVmFyaWFibGVzKCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxT
dHJpbmdJbXBsKio+KCZtX3ZhcmlhYmxlc1t1c2VkVmFyaWFibGVzQ291bnRdKTsgfQorCisgICAg
flNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtKCk7CisKK3ByaXZhdGU6CisgICAgU291cmNlUHJvdmlk
ZXJDYWNoZUl0ZW0oY29uc3QgU291cmNlUHJvdmlkZXJDYWNoZUl0ZW1DcmVhdGlvblBhcmFtZXRl
cnMmKTsKKworICAgIFN0cmluZ0ltcGwqIG1fdmFyaWFibGVzWzBdOwogfTsKIAoraW5saW5lIFNv
dXJjZVByb3ZpZGVyQ2FjaGVJdGVtOjp+U291cmNlUHJvdmlkZXJDYWNoZUl0ZW0oKQoreworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkVmFyaWFibGVzQ291bnQgKyB3cml0dGVuVmFy
aWFibGVzQ291bnQ7ICsraSkKKyAgICAgICAgbV92YXJpYWJsZXNbaV0tPmRlcmVmKCk7Cit9CisK
K2lubGluZSBQYXNzT3duUHRyPFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtPiBTb3VyY2VQcm92aWRl
ckNhY2hlSXRlbTo6Y3JlYXRlKGNvbnN0IFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtQ3JlYXRpb25Q
YXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQoreworICAgIHNpemVfdCB2YXJpYWJsZUNvdW50ID0gcGFy
YW1ldGVycy53cml0dGVuVmFyaWFibGVzLnNpemUoKSArIHBhcmFtZXRlcnMudXNlZFZhcmlhYmxl
cy5zaXplKCk7CisgICAgc2l6ZV90IG9iamVjdFNpemUgPSBzaXplb2YoU291cmNlUHJvdmlkZXJD
YWNoZUl0ZW0pICsgc2l6ZW9mKFN0cmluZ0ltcGwqKSAqIHZhcmlhYmxlQ291bnQ7CisgICAgdm9p
ZCogc2xvdCA9IFdURjo6ZmFzdE1hbGxvYyhvYmplY3RTaXplKTsKKyAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IChzbG90KSBTb3VyY2VQcm92aWRlckNhY2hlSXRlbShwYXJhbWV0ZXJzKSk7Cit9CisK
K2lubGluZSBTb3VyY2VQcm92aWRlckNhY2hlSXRlbTo6U291cmNlUHJvdmlkZXJDYWNoZUl0ZW0o
Y29uc3QgU291cmNlUHJvdmlkZXJDYWNoZUl0ZW1DcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRl
cnMpCisgICAgOiBmdW5jdGlvblN0YXJ0KHBhcmFtZXRlcnMuZnVuY3Rpb25TdGFydCkKKyAgICAs
IG5lZWRzRnVsbEFjdGl2YXRpb24ocGFyYW1ldGVycy5uZWVkc0Z1bGxBY3RpdmF0aW9uKQorICAg
ICwgY2xvc2VCcmFjZUxpbmUocGFyYW1ldGVycy5jbG9zZUJyYWNlTGluZSkKKyAgICAsIHVzZXNF
dmFsKHBhcmFtZXRlcnMudXNlc0V2YWwpCisgICAgLCBjbG9zZUJyYWNlUG9zKHBhcmFtZXRlcnMu
Y2xvc2VCcmFjZVBvcykKKyAgICAsIHN0cmljdE1vZGUocGFyYW1ldGVycy5zdHJpY3RNb2RlKQor
ICAgICwgdXNlZFZhcmlhYmxlc0NvdW50KHBhcmFtZXRlcnMudXNlZFZhcmlhYmxlcy5zaXplKCkp
CisgICAgLCB3cml0dGVuVmFyaWFibGVzQ291bnQocGFyYW1ldGVycy53cml0dGVuVmFyaWFibGVz
LnNpemUoKSkKK3sKKyAgICB1bnNpZ25lZCBqID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgdXNlZFZhcmlhYmxlc0NvdW50OyArK2ksICsraikgeworICAgICAgICBtX3ZhcmlhYmxl
c1tqXSA9IHBhcmFtZXRlcnMudXNlZFZhcmlhYmxlc1tpXS5nZXQoKTsKKyAgICAgICAgbV92YXJp
YWJsZXNbal0tPnJlZigpOworICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgd3Jp
dHRlblZhcmlhYmxlc0NvdW50OyArK2ksICsraikgeworICAgICAgICBtX3ZhcmlhYmxlc1tqXSA9
IHBhcmFtZXRlcnMud3JpdHRlblZhcmlhYmxlc1tpXS5nZXQoKTsKKyAgICAgICAgbV92YXJpYWJs
ZXNbal0tPnJlZigpOworICAgIH0KK30KKwogfQogCiAjZW5kaWYgLy8gU291cmNlUHJvdmlkZXJD
YWNoZUl0ZW1faAo=
</data>
<flag name="commit-queue"
          id="203796"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184912</attachid>
            <date>2013-01-27 06:30:46 -0800</date>
            <delta_ts>2013-01-28 09:38:39 -0800</delta_ts>
            <desc>Proposed patch v2</desc>
            <filename>bug-108029-2.diff</filename>
            <type>text/plain</type>
            <size>9699</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDdhNWQ2OGIuLmEyMGI2NGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEzLTAxLTI3ICBBbmRyZWFzIEtsaW5n
ICA8YWtsaW5nQGFwcGxlLmNvbT4KKworICAgICAgICBKU0M6IFNvdXJjZVByb3ZpZGVyQ2FjaGUg
aXMgbWVtb3J5IGh1bmdyeS4KKyAgICAgICAgPGh0dHA6Ly93ZWJraXQub3JnL2IvMTA4MDI5Pgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBmaXhl
ZC1zaXplIGFycmF5cyBmb3IgU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0ncyBsaXN0cyBvZiBjYXB0
dXJlZCB2YXJpYWJsZXMuCisgICAgICAgIFNpbmNlIHRoZSBsaXN0cyBuZXZlciBjaGFuZ2UgYWZ0
ZXIgdGhlIG9iamVjdCBpcyBjcmVhdGVkLCB0aGVyZSdzIG5vIG5lZWQgdG8ga2VlcCB0aGVtIGlu
IFZlY3RvcnMKKyAgICAgICAgYW5kIHdlIGNhbiBpbnN0ZWFkIGNyZWF0ZSB0aGUgd2hvbGUgY2Fj
aGUgaXRlbSBpbiBhIHNpbmdsZSBhbGxvY2F0aW9uLgorCisgICAgICAgIDEzLjMgTUIgcHJvZ3Jl
c3Npb24gb24gTWVtYnVzdGVyMy4gKE92ZXIgMiUgb2YgdG90YWwgYWxsb2NhdGlvbnMuKQorCisg
ICAgICAgICogcGFyc2VyL1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6Ojo6cGFyc2VGdW5jdGlv
bkluZm8pOgorICAgICAgICAqIHBhcnNlci9QYXJzZXIuaDoKKyAgICAgICAgKEpTQzo6U2NvcGU6
OmNvcHlDYXB0dXJlZFZhcmlhYmxlc1RvVmVjdG9yKToKKyAgICAgICAgKEpTQzo6U2NvcGU6OmZp
bGxQYXJhbWV0ZXJzRm9yU291cmNlUHJvdmlkZXJDYWNoZSk6CisgICAgICAgIChKU0M6OlNjb3Bl
OjpyZXN0b3JlRnJvbVNvdXJjZVByb3ZpZGVyQ2FjaGUpOgorICAgICAgICAqIHBhcnNlci9Tb3Vy
Y2VQcm92aWRlckNhY2hlSXRlbS5oOgorICAgICAgICAoU291cmNlUHJvdmlkZXJDYWNoZUl0ZW1D
cmVhdGlvblBhcmFtZXRlcnMpOgorICAgICAgICAoU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0pOgor
ICAgICAgICAoSlNDOjpTb3VyY2VQcm92aWRlckNhY2hlSXRlbTo6YXBwcm94aW1hdGVCeXRlU2l6
ZSk6CisgICAgICAgIChKU0M6OlNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtOjp1c2VkVmFyaWFibGVz
KToKKyAgICAgICAgKEpTQzo6U291cmNlUHJvdmlkZXJDYWNoZUl0ZW06OndyaXR0ZW5WYXJpYWJs
ZXMpOgorICAgICAgICAoSlNDOjpTb3VyY2VQcm92aWRlckNhY2hlSXRlbTo6flNvdXJjZVByb3Zp
ZGVyQ2FjaGVJdGVtKToKKyAgICAgICAgKEpTQzo6U291cmNlUHJvdmlkZXJDYWNoZUl0ZW06OmNy
ZWF0ZSk6CisgICAgICAgIChKU0M6OlNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtOjpTb3VyY2VQcm92
aWRlckNhY2hlSXRlbSk6CisKIDIwMTMtMDEtMjUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxl
LmNvbT4KIAogICAgICAgICBERkcgdmFyaWFibGUgZXZlbnQgc3RyZWFtIHNob3VsZG4ndCB1c2Ug
Tm9kZUluZGV4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNl
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKaW5kZXggZDRk
MmU5Mi4uNzgwOGE0NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Q
YXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcApA
QCAtODM4LDcgKzgzOCw3IEBAIHRlbXBsYXRlIDxGdW5jdGlvblJlcXVpcmVtZW50cyByZXF1aXJl
bWVudHMsIGJvb2wgbmFtZUlzSW5Db250YWluaW5nU2NvcGUsIGNsYXNzCiAgICAgICAgIEFTU0VS
VCghc3RyaWN0TW9kZSgpIHx8IGNhY2hlZEluZm8tPnN0cmljdE1vZGUpOwogICAgICAgICBib2R5
ID0gY29udGV4dC5jcmVhdGVGdW5jdGlvbkJvZHkobG9jYXRpb24sIGNhY2hlZEluZm8tPnN0cmlj
dE1vZGUpOwogICAgICAgICAKLSAgICAgICAgZnVuY3Rpb25TY29wZS0+cmVzdG9yZUZ1bmN0aW9u
SW5mbyhjYWNoZWRJbmZvKTsKKyAgICAgICAgZnVuY3Rpb25TY29wZS0+cmVzdG9yZUZyb21Tb3Vy
Y2VQcm92aWRlckNhY2hlKGNhY2hlZEluZm8pOwogICAgICAgICBmYWlsSWZGYWxzZShwb3BTY29w
ZShmdW5jdGlvblNjb3BlLCBUcmVlQnVpbGRlcjo6TmVlZHNGcmVlVmFyaWFibGVJbmZvKSk7CiAg
ICAgICAgIAogICAgICAgICBjbG9zZUJyYWNlUG9zID0gY2FjaGVkSW5mby0+Y2xvc2VCcmFjZVBv
czsKQEAgLTg2Nyw4ICs4NjcsMTIgQEAgdGVtcGxhdGUgPEZ1bmN0aW9uUmVxdWlyZW1lbnRzIHJl
cXVpcmVtZW50cywgYm9vbCBuYW1lSXNJbkNvbnRhaW5pbmdTY29wZSwgY2xhc3MKICAgICBPd25Q
dHI8U291cmNlUHJvdmlkZXJDYWNoZUl0ZW0+IG5ld0luZm87CiAgICAgaW50IGZ1bmN0aW9uTGVu
Z3RoID0gY2xvc2VCcmFjZVBvcyAtIG9wZW5CcmFjZVBvczsKICAgICBpZiAoVHJlZUJ1aWxkZXI6
OkNhblVzZUZ1bmN0aW9uQ2FjaGUgJiYgbV9mdW5jdGlvbkNhY2hlICYmIGZ1bmN0aW9uTGVuZ3Ro
ID4gbWluaW11bUZ1bmN0aW9uTGVuZ3RoVG9DYWNoZSkgewotICAgICAgICBuZXdJbmZvID0gYWRv
cHRQdHIobmV3IFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtKGZ1bmN0aW9uU3RhcnQsIG1fdG9rZW4u
bV9sb2NhdGlvbi5saW5lLCBjbG9zZUJyYWNlUG9zKSk7Ci0gICAgICAgIGZ1bmN0aW9uU2NvcGUt
PnNhdmVGdW5jdGlvbkluZm8obmV3SW5mby5nZXQoKSk7CisgICAgICAgIFNvdXJjZVByb3ZpZGVy
Q2FjaGVJdGVtQ3JlYXRpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CisgICAgICAgIHBhcmFtZXRl
cnMuZnVuY3Rpb25TdGFydCA9IGZ1bmN0aW9uU3RhcnQ7CisgICAgICAgIHBhcmFtZXRlcnMuY2xv
c2VCcmFjZUxpbmUgPSBtX3Rva2VuLm1fbG9jYXRpb24ubGluZTsKKyAgICAgICAgcGFyYW1ldGVy
cy5jbG9zZUJyYWNlUG9zID0gY2xvc2VCcmFjZVBvczsKKyAgICAgICAgZnVuY3Rpb25TY29wZS0+
ZmlsbFBhcmFtZXRlcnNGb3JTb3VyY2VQcm92aWRlckNhY2hlKHBhcmFtZXRlcnMpOworICAgICAg
ICBuZXdJbmZvID0gU291cmNlUHJvdmlkZXJDYWNoZUl0ZW06OmNyZWF0ZShwYXJhbWV0ZXJzKTsK
ICAgICB9CiAgICAgY29udGV4dC5zZXRGdW5jdGlvblN0YXJ0KGJvZHksIGZ1bmN0aW9uU3RhcnQp
OwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgKaW5kZXggZDY2MjRhYS4u
MWU4MTY2OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCkBAIC0zMjgsMzEg
KzMyOCwyOCBAQCBzdHJ1Y3QgU2NvcGUgewogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgdmVjdG9yLmFwcGVuZCgqaXQpOwogICAgICAgICB9Ci0gICAgICAgIHZlY3Rvci5z
aHJpbmtUb0ZpdCgpOwogICAgIH0KIAotICAgIHZvaWQgc2F2ZUZ1bmN0aW9uSW5mbyhTb3VyY2VQ
cm92aWRlckNhY2hlSXRlbSogaW5mbykKKyAgICB2b2lkIGZpbGxQYXJhbWV0ZXJzRm9yU291cmNl
UHJvdmlkZXJDYWNoZShTb3VyY2VQcm92aWRlckNhY2hlSXRlbUNyZWF0aW9uUGFyYW1ldGVycyYg
cGFyYW1ldGVycykKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2lzRnVuY3Rpb24pOwotICAgICAg
ICBpbmZvLT51c2VzRXZhbCA9IG1fdXNlc0V2YWw7Ci0gICAgICAgIGluZm8tPnN0cmljdE1vZGUg
PSBtX3N0cmljdE1vZGU7Ci0gICAgICAgIGluZm8tPm5lZWRzRnVsbEFjdGl2YXRpb24gPSBtX25l
ZWRzRnVsbEFjdGl2YXRpb247Ci0gICAgICAgIGNvcHlDYXB0dXJlZFZhcmlhYmxlc1RvVmVjdG9y
KG1fd3JpdHRlblZhcmlhYmxlcywgaW5mby0+d3JpdHRlblZhcmlhYmxlcyk7Ci0gICAgICAgIGNv
cHlDYXB0dXJlZFZhcmlhYmxlc1RvVmVjdG9yKG1fdXNlZFZhcmlhYmxlcywgaW5mby0+dXNlZFZh
cmlhYmxlcyk7CisgICAgICAgIHBhcmFtZXRlcnMudXNlc0V2YWwgPSBtX3VzZXNFdmFsOworICAg
ICAgICBwYXJhbWV0ZXJzLnN0cmljdE1vZGUgPSBtX3N0cmljdE1vZGU7CisgICAgICAgIHBhcmFt
ZXRlcnMubmVlZHNGdWxsQWN0aXZhdGlvbiA9IG1fbmVlZHNGdWxsQWN0aXZhdGlvbjsKKyAgICAg
ICAgY29weUNhcHR1cmVkVmFyaWFibGVzVG9WZWN0b3IobV93cml0dGVuVmFyaWFibGVzLCBwYXJh
bWV0ZXJzLndyaXR0ZW5WYXJpYWJsZXMpOworICAgICAgICBjb3B5Q2FwdHVyZWRWYXJpYWJsZXNU
b1ZlY3RvcihtX3VzZWRWYXJpYWJsZXMsIHBhcmFtZXRlcnMudXNlZFZhcmlhYmxlcyk7CiAgICAg
fQogCi0gICAgdm9pZCByZXN0b3JlRnVuY3Rpb25JbmZvKGNvbnN0IFNvdXJjZVByb3ZpZGVyQ2Fj
aGVJdGVtKiBpbmZvKQorICAgIHZvaWQgcmVzdG9yZUZyb21Tb3VyY2VQcm92aWRlckNhY2hlKGNv
bnN0IFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtKiBpbmZvKQogICAgIHsKICAgICAgICAgQVNTRVJU
KG1faXNGdW5jdGlvbik7CiAgICAgICAgIG1fdXNlc0V2YWwgPSBpbmZvLT51c2VzRXZhbDsKICAg
ICAgICAgbV9zdHJpY3RNb2RlID0gaW5mby0+c3RyaWN0TW9kZTsKICAgICAgICAgbV9uZWVkc0Z1
bGxBY3RpdmF0aW9uID0gaW5mby0+bmVlZHNGdWxsQWN0aXZhdGlvbjsKLSAgICAgICAgdW5zaWdu
ZWQgc2l6ZSA9IGluZm8tPnVzZWRWYXJpYWJsZXMuc2l6ZSgpOwotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICAgICAgbV91c2VkVmFyaWFibGVzLmFk
ZChpbmZvLT51c2VkVmFyaWFibGVzW2ldKTsKLSAgICAgICAgc2l6ZSA9IGluZm8tPndyaXR0ZW5W
YXJpYWJsZXMuc2l6ZSgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsg
KytpKQotICAgICAgICAgICAgbV93cml0dGVuVmFyaWFibGVzLmFkZChpbmZvLT53cml0dGVuVmFy
aWFibGVzW2ldKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluZm8tPnVzZWRW
YXJpYWJsZXNDb3VudDsgKytpKQorICAgICAgICAgICAgbV91c2VkVmFyaWFibGVzLmFkZChpbmZv
LT51c2VkVmFyaWFibGVzKClbaV0pOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
aW5mby0+d3JpdHRlblZhcmlhYmxlc0NvdW50OyArK2kpCisgICAgICAgICAgICBtX3dyaXR0ZW5W
YXJpYWJsZXMuYWRkKGluZm8tPndyaXR0ZW5WYXJpYWJsZXMoKVtpXSk7CiAgICAgfQogCiBwcml2
YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92
aWRlckNhY2hlSXRlbS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92
aWRlckNhY2hlSXRlbS5oCmluZGV4IGVjMzg5MDUuLmNmMjIxNWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmgKQEAg
LTI3LDI3ICsyNyw0MCBAQAogI2RlZmluZSBTb3VyY2VQcm92aWRlckNhY2hlSXRlbV9oCiAKICNp
bmNsdWRlICJQYXJzZXJUb2tlbnMuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIEpTQyB7CiAKK3N0cnVjdCBTb3VyY2VQcm92aWRlckNhY2hlSXRlbUNyZWF0aW9u
UGFyYW1ldGVycyB7CisgICAgdW5zaWduZWQgZnVuY3Rpb25TdGFydDsKKyAgICB1bnNpZ25lZCBj
bG9zZUJyYWNlTGluZTsKKyAgICB1bnNpZ25lZCBjbG9zZUJyYWNlUG9zOworICAgIGJvb2wgbmVl
ZHNGdWxsQWN0aXZhdGlvbjsKKyAgICBib29sIHVzZXNFdmFsOworICAgIGJvb2wgc3RyaWN0TW9k
ZTsKKyAgICBWZWN0b3I8UmVmUHRyPFN0cmluZ0ltcGw+ID4gdXNlZFZhcmlhYmxlczsKKyAgICBW
ZWN0b3I8UmVmUHRyPFN0cmluZ0ltcGw+ID4gd3JpdHRlblZhcmlhYmxlczsKK307CisKKyNpZiBD
T01QSUxFUihNU1ZDKQorI3ByYWdtYSB3YXJuaW5nKHB1c2gpCisjcHJhZ21hIHdhcm5pbmcoZGlz
YWJsZTogNDIwMCkgLy8gRGlzYWJsZSAiemVyby1zaXplZCBhcnJheSBpbiBzdHJ1Y3QvdW5pb24i
IHdhcm5pbmcKKyNlbmRpZgorCiBjbGFzcyBTb3VyY2VQcm92aWRlckNhY2hlSXRlbSB7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgU291cmNlUHJvdmlkZXJDYWNo
ZUl0ZW0odW5zaWduZWQgZnVuY3Rpb25TdGFydCwgdW5zaWduZWQgY2xvc2VCcmFjZUxpbmUsIHVu
c2lnbmVkIGNsb3NlQnJhY2VQb3MpCi0gICAgICAgIDogZnVuY3Rpb25TdGFydChmdW5jdGlvblN0
YXJ0KQotICAgICAgICAsIGNsb3NlQnJhY2VMaW5lKGNsb3NlQnJhY2VMaW5lKQotICAgICAgICAs
IGNsb3NlQnJhY2VQb3MoY2xvc2VCcmFjZVBvcykKLSAgICB7Ci0gICAgfQorICAgIHN0YXRpYyBQ
YXNzT3duUHRyPFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtPiBjcmVhdGUoY29uc3QgU291cmNlUHJv
dmlkZXJDYWNoZUl0ZW1DcmVhdGlvblBhcmFtZXRlcnMmKTsKKwogICAgIHVuc2lnbmVkIGFwcHJv
eGltYXRlQnl0ZVNpemUoKSBjb25zdAogICAgIHsKICAgICAgICAgLy8gVGhlIGlkZW50aWZpZXJz
IGFyZSB1bmlxdWVkIHN0cmluZ3Mgc28gbW9zdCBsaWtlbHkgdGhlcmUgYXJlIGZldyBuYW1lcyB0
aGF0IGFjdHVhbGx5IHVzZSBhbnkgYWRkaXRpb25hbCBtZW1vcnkuCi0gICAgICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBhc3N1bW1lZEF2ZXJhZ2VJZGVudGlmaWVyU2l6ZSA9IHNpemVvZihSZWZQ
dHI8U3RyaW5nSW1wbD4pICsgMjsKKyAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGFzc3Vt
ZWRBdmVyYWdlSWRlbnRpZmllclNpemUgPSBzaXplb2YoU3RyaW5nSW1wbCopICsgMjsKICAgICAg
ICAgdW5zaWduZWQgc2l6ZSA9IHNpemVvZigqdGhpcyk7Ci0gICAgICAgIHNpemUgKz0gdXNlZFZh
cmlhYmxlcy5zaXplKCkgKiBhc3N1bW1lZEF2ZXJhZ2VJZGVudGlmaWVyU2l6ZTsKLSAgICAgICAg
c2l6ZSArPSB3cml0dGVuVmFyaWFibGVzLnNpemUoKSAqIGFzc3VtbWVkQXZlcmFnZUlkZW50aWZp
ZXJTaXplOworICAgICAgICBzaXplICs9IHVzZWRWYXJpYWJsZXNDb3VudCAqIGFzc3VtZWRBdmVy
YWdlSWRlbnRpZmllclNpemU7CisgICAgICAgIHNpemUgKz0gd3JpdHRlblZhcmlhYmxlc0NvdW50
ICogYXNzdW1lZEF2ZXJhZ2VJZGVudGlmaWVyU2l6ZTsKICAgICAgICAgcmV0dXJuIHNpemU7CiAg
ICAgfQogICAgIEpTVG9rZW4gY2xvc2VCcmFjZVRva2VuKCkgY29uc3QgCkBAIC03MCwxMCArODMs
NTkgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGNsb3NlQnJhY2VQb3MgOiAzMTsKICAgICBib29s
IHN0cmljdE1vZGUgOiAxOwogCi0gICAgVmVjdG9yPFJlZlB0cjxTdHJpbmdJbXBsPiA+IHVzZWRW
YXJpYWJsZXM7Ci0gICAgVmVjdG9yPFJlZlB0cjxTdHJpbmdJbXBsPiA+IHdyaXR0ZW5WYXJpYWJs
ZXM7CisgICAgdW5zaWduZWQgdXNlZFZhcmlhYmxlc0NvdW50OworICAgIHVuc2lnbmVkIHdyaXR0
ZW5WYXJpYWJsZXNDb3VudDsKKworICAgIFN0cmluZ0ltcGwqKiB1c2VkVmFyaWFibGVzKCkgY29u
c3QgeyByZXR1cm4gY29uc3RfY2FzdDxTdHJpbmdJbXBsKio+KG1fdmFyaWFibGVzKTsgfQorICAg
IFN0cmluZ0ltcGwqKiB3cml0dGVuVmFyaWFibGVzKCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2Fz
dDxTdHJpbmdJbXBsKio+KCZtX3ZhcmlhYmxlc1t1c2VkVmFyaWFibGVzQ291bnRdKTsgfQorCisg
ICAgflNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtKCk7CisKK3ByaXZhdGU6CisgICAgU291cmNlUHJv
dmlkZXJDYWNoZUl0ZW0oY29uc3QgU291cmNlUHJvdmlkZXJDYWNoZUl0ZW1DcmVhdGlvblBhcmFt
ZXRlcnMmKTsKKworICAgIFN0cmluZ0ltcGwqIG1fdmFyaWFibGVzWzBdOwogfTsKIAoraW5saW5l
IFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtOjp+U291cmNlUHJvdmlkZXJDYWNoZUl0ZW0oKQorewor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkVmFyaWFibGVzQ291bnQgKyB3cml0dGVu
VmFyaWFibGVzQ291bnQ7ICsraSkKKyAgICAgICAgbV92YXJpYWJsZXNbaV0tPmRlcmVmKCk7Cit9
CisKK2lubGluZSBQYXNzT3duUHRyPFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtPiBTb3VyY2VQcm92
aWRlckNhY2hlSXRlbTo6Y3JlYXRlKGNvbnN0IFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtQ3JlYXRp
b25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQoreworICAgIHNpemVfdCB2YXJpYWJsZUNvdW50ID0g
cGFyYW1ldGVycy53cml0dGVuVmFyaWFibGVzLnNpemUoKSArIHBhcmFtZXRlcnMudXNlZFZhcmlh
Ymxlcy5zaXplKCk7CisgICAgc2l6ZV90IG9iamVjdFNpemUgPSBzaXplb2YoU291cmNlUHJvdmlk
ZXJDYWNoZUl0ZW0pICsgc2l6ZW9mKFN0cmluZ0ltcGwqKSAqIHZhcmlhYmxlQ291bnQ7CisgICAg
dm9pZCogc2xvdCA9IFdURjo6ZmFzdE1hbGxvYyhvYmplY3RTaXplKTsKKyAgICByZXR1cm4gYWRv
cHRQdHIobmV3IChzbG90KSBTb3VyY2VQcm92aWRlckNhY2hlSXRlbShwYXJhbWV0ZXJzKSk7Cit9
CisKK2lubGluZSBTb3VyY2VQcm92aWRlckNhY2hlSXRlbTo6U291cmNlUHJvdmlkZXJDYWNoZUl0
ZW0oY29uc3QgU291cmNlUHJvdmlkZXJDYWNoZUl0ZW1DcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFt
ZXRlcnMpCisgICAgOiBmdW5jdGlvblN0YXJ0KHBhcmFtZXRlcnMuZnVuY3Rpb25TdGFydCkKKyAg
ICAsIG5lZWRzRnVsbEFjdGl2YXRpb24ocGFyYW1ldGVycy5uZWVkc0Z1bGxBY3RpdmF0aW9uKQor
ICAgICwgY2xvc2VCcmFjZUxpbmUocGFyYW1ldGVycy5jbG9zZUJyYWNlTGluZSkKKyAgICAsIHVz
ZXNFdmFsKHBhcmFtZXRlcnMudXNlc0V2YWwpCisgICAgLCBjbG9zZUJyYWNlUG9zKHBhcmFtZXRl
cnMuY2xvc2VCcmFjZVBvcykKKyAgICAsIHN0cmljdE1vZGUocGFyYW1ldGVycy5zdHJpY3RNb2Rl
KQorICAgICwgdXNlZFZhcmlhYmxlc0NvdW50KHBhcmFtZXRlcnMudXNlZFZhcmlhYmxlcy5zaXpl
KCkpCisgICAgLCB3cml0dGVuVmFyaWFibGVzQ291bnQocGFyYW1ldGVycy53cml0dGVuVmFyaWFi
bGVzLnNpemUoKSkKK3sKKyAgICB1bnNpZ25lZCBqID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgdXNlZFZhcmlhYmxlc0NvdW50OyArK2ksICsraikgeworICAgICAgICBtX3Zhcmlh
Ymxlc1tqXSA9IHBhcmFtZXRlcnMudXNlZFZhcmlhYmxlc1tpXS5nZXQoKTsKKyAgICAgICAgbV92
YXJpYWJsZXNbal0tPnJlZigpOworICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
d3JpdHRlblZhcmlhYmxlc0NvdW50OyArK2ksICsraikgeworICAgICAgICBtX3ZhcmlhYmxlc1tq
XSA9IHBhcmFtZXRlcnMud3JpdHRlblZhcmlhYmxlc1tpXS5nZXQoKTsKKyAgICAgICAgbV92YXJp
YWJsZXNbal0tPnJlZigpOworICAgIH0KK30KKworI2lmIENPTVBJTEVSKE1TVkMpCisjcHJhZ21h
IHdhcm5pbmcocG9wKQorI2VuZGlmCisKIH0KIAogI2VuZGlmIC8vIFNvdXJjZVByb3ZpZGVyQ2Fj
aGVJdGVtX2gK
</data>
<flag name="review"
          id="203797"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>