<?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>98711</bug_id>
          
          <creation_ts>2012-10-08 19:39:17 -0700</creation_ts>
          <short_desc>DOM/textarea-edit.html spends 35% of time in numGraphemeClusters</short_desc>
          <delta_ts>2012-10-18 00:13:20 -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>Forms</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>haraken</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>mifenton</cc>
    
    <cc>mitz</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>737361</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-10-08 19:39:17 -0700</bug_when>
    <thetext>It appears that the bottleneck is numGraphemeClusters. It&apos;s very slow :(

Running Time	Self		Symbol Name
17515.0ms   36.0%	17515.0	 	icu::RuleBasedBreakIterator::handleNext(icu::RBBIStateTable const*)
17460.0ms   35.9%	0.0	 	 icu::RuleBasedBreakIterator::next()
17031.0ms   35.0%	0.0	 	  WebCore::numGraphemeClusters(WTF::String const&amp;)
8731.0ms   17.9%	0.0	 	   WebCore::HTMLTextAreaElement::tooLong() const
8731.0ms   17.9%	0.0	 	    non-virtual thunk to WebCore::HTMLTextAreaElement::tooLong() const
8300.0ms   17.0%	0.0	 	   WebCore::HTMLTextAreaElement::handleBeforeTextInsertedEvent(WebCore::BeforeTextInsertedEvent*) const
8300.0ms   17.0%	0.0	 	    WebCore::HTMLTextAreaElement::defaultEventHandler(WebCore::Event*)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737417</commentid>
    <comment_count>1</comment_count>
      <attachid>167690</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-10-08 22:11:49 -0700</bug_when>
    <thetext>Created attachment 167690
Mitigates the bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737422</commentid>
    <comment_count>2</comment_count>
      <attachid>167690</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-10-08 22:15:53 -0700</bug_when>
    <thetext>Comment on attachment 167690
Mitigates the bug

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        Since numGraphemeClusters(text) is always smaller than text.length(),

Ugh... this isn&apos;t true because of LF -&gt; CRLF conversion :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737444</commentid>
    <comment_count>3</comment_count>
      <attachid>167690</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-10-08 23:17:26 -0700</bug_when>
    <thetext>Comment on attachment 167690
Mitigates the bug

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

&gt; Source/WebCore/html/HTMLTextAreaElement.cpp:284
&gt; +    if (currentValue.length() + event-&gt;text().length() &lt; unsignedMaxLength)

I guess I can multiply this number by 2... so hacky :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737447</commentid>
    <comment_count>4</comment_count>
      <attachid>167690</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-10-08 23:23:51 -0700</bug_when>
    <thetext>Comment on attachment 167690
Mitigates the bug

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

&gt;&gt; Source/WebCore/html/HTMLTextAreaElement.cpp:284
&gt;&gt; +    if (currentValue.length() + event-&gt;text().length() &lt; unsignedMaxLength)
&gt; 
&gt; I guess I can multiply this number by 2... so hacky :(

Why don&apos;t you introduce countNumberOfLF() or something?

  if (currentValue.length() + countNumberOfLF(currentValue) + event-&gt;text().length() + countNumberOfLF(event-&gt;text()) &lt; ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737887</commentid>
    <comment_count>5</comment_count>
      <attachid>167690</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-10-09 09:53:41 -0700</bug_when>
    <thetext>Comment on attachment 167690
Mitigates the bug

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

&gt;&gt;&gt; Source/WebCore/html/HTMLTextAreaElement.cpp:284
&gt;&gt;&gt; +    if (currentValue.length() + event-&gt;text().length() &lt; unsignedMaxLength)
&gt;&gt; 
&gt;&gt; I guess I can multiply this number by 2... so hacky :(
&gt; 
&gt; Why don&apos;t you introduce countNumberOfLF() or something?
&gt; 
&gt;   if (currentValue.length() + countNumberOfLF(currentValue) + event-&gt;text().length() + countNumberOfLF(event-&gt;text()) &lt; ...

We can have two early exits. One where you can tell it fits without even counting LFs. Another where you count LFs, and then the grapheme cluster counting full version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737897</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-10-09 10:06:45 -0700</bug_when>
    <thetext>It also seems really unfortunate that the numGraphemeClusters function is so slow. I wonder if we could get ICU to speed it up, or do something in our ICU interface to speed up the many common cases. For example, grapheme clusters are == characters for all ASCII characters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737900</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-10-09 10:10:06 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; It also seems really unfortunate that the numGraphemeClusters function is so slow. I wonder if we could get ICU to speed it up, or do something in our ICU interface to speed up the many common cases. For example, grapheme clusters are == characters for all ASCII characters.

Not sure special-casing ASCII characters is such a good idea. It&apos;ll certainly make it faster for English but it won&apos;t improve other languages.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737948</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-10-09 11:01:19 -0700</bug_when>
    <thetext>My original approach improved the score to ~0.5, and new approach (adding the number of LFs) improves the score to ~.43 whereas the original score is ~0.3. At least this approach removes either caller from the profiler so let&apos;s make this change for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737986</commentid>
    <comment_count>9</comment_count>
      <attachid>167801</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-10-09 11:34:12 -0700</bug_when>
    <thetext>Created attachment 167801
Fixes the bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738218</commentid>
    <comment_count>10</comment_count>
      <attachid>167801</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-10-09 14:55:04 -0700</bug_when>
    <thetext>Comment on attachment 167801
Fixes the bug

ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738245</commentid>
    <comment_count>11</comment_count>
      <attachid>167801</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-09 15:19:12 -0700</bug_when>
    <thetext>Comment on attachment 167801
Fixes the bug

Clearing flags on attachment: 167801

Committed r130818: &lt;http://trac.webkit.org/changeset/130818&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738246</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-09 15:19:17 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745031</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-10-18 00:13:20 -0700</bug_when>
    <thetext>This improved the score by 54.4% on Mac Lion and 229.9% on Chromium Mac:

http://webkit-perf.appspot.com/graph.html#tests=[[2965621,2001,32196],[2965621,2001,3001]]&amp;sel=1349804856909.961,1349864710655.502&amp;displayrange=30&amp;datatype=running</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167690</attachid>
            <date>2012-10-08 22:11:49 -0700</date>
            <delta_ts>2012-10-09 09:53:41 -0700</delta_ts>
            <desc>Mitigates the bug</desc>
            <filename>bug-98711-20121008221051.patch</filename>
            <type>text/plain</type>
            <size>2467</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMDcxNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEyLTEwLTA4ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIERPTS90ZXh0YXJlYS1lZGl0Lmh0
bWwgc3BlbmRzIDM1JSBvZiB0aW1lIGluIG51bUdyYXBoZW1lQ2x1c3RlcnMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk4NzExCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2luY2UgbnVtR3JhcGhlbWVDbHVz
dGVycyh0ZXh0KSBpcyBhbHdheXMgc21hbGxlciB0aGFuIHRleHQubGVuZ3RoKCksCisgICAgICAg
IHdlIGNhbiBhdm9pZCBjYWxsaW5nIGNvbXB1dGVMZW5ndGhGb3JTdWJtaXNzaW9uIGFsdG9nZXRo
ZXIgd2hlbiB0ZXh0Lmxlbmd0aCgpCisgICAgICAgIGl0c2VsZiBpcyBzbWFsbGVyIHRoYW4gbWF4
TGVuZ3RoLiBUaGlzIGltcHJvdmVzIHRoZSBzY29yZSBvZiBET00vdGV4dGFyZWEtZWRpdAorICAg
ICAgICBieSByb3VnaGx5IDUwJS4KKworICAgICAgICAqIGh0bWwvSFRNTFRleHRBcmVhRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50OjpoYW5kbGVCZWZv
cmVUZXh0SW5zZXJ0ZWRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVt
ZW50Ojp0b29Mb25nKToKKwogMjAxMi0xMC0wOCAgWW9zaGlmdW1pIElub3VlICA8eW9zaW5AY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIEhUTUxTZWxlY3RFbGVtZW50Ojp0eXBlQWhlYWRGaW5kIGRl
cGVuZHMgb24gaW1wbGVtZW50YXRpb24gZGVwZW5kZW50IGJlaGF2aW9yCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAJKHJldmlzaW9uIDEzMDcxNikK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI4MCw3ICsyODAsMTEgQEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50OjpoYW5k
bGVCZWZvcmVUZQogICAgICAgICByZXR1cm47CiAgICAgdW5zaWduZWQgdW5zaWduZWRNYXhMZW5n
dGggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2lnbmVkTWF4TGVuZ3RoKTsKIAotICAgIHVuc2ln
bmVkIGN1cnJlbnRMZW5ndGggPSBjb21wdXRlTGVuZ3RoRm9yU3VibWlzc2lvbihpbm5lclRleHRW
YWx1ZSgpKTsKKyAgICBjb25zdCBTdHJpbmcmIGN1cnJlbnRWYWx1ZSA9IGlubmVyVGV4dFZhbHVl
KCk7CisgICAgaWYgKGN1cnJlbnRWYWx1ZS5sZW5ndGgoKSArIGV2ZW50LT50ZXh0KCkubGVuZ3Ro
KCkgPCB1bnNpZ25lZE1heExlbmd0aCkKKyAgICAgICAgcmV0dXJuOyAvLyBPcHRpbWl6YXRpb24u
IElmIG1heGxlbmd0aCBpcyBsYXJnZSBlbm91Z2gsIGRvbid0IGRvIGFueXRoaW5nLgorCisgICAg
dW5zaWduZWQgY3VycmVudExlbmd0aCA9IGNvbXB1dGVMZW5ndGhGb3JTdWJtaXNzaW9uKGN1cnJl
bnRWYWx1ZSk7CiAgICAgLy8gc2VsZWN0aW9uTGVuZ3RoIHJlcHJlc2VudHMgdGhlIHNlbGVjdGlv
biBsZW5ndGggb2YgdGhpcyB0ZXh0IGZpZWxkIHRvIGJlCiAgICAgLy8gcmVtb3ZlZCBieSB0aGlz
IGluc2VydGlvbi4KICAgICAvLyBJZiB0aGUgdGV4dCBmaWVsZCBoYXMgbm8gZm9jdXMsIHdlIGRv
bid0IG5lZWQgdG8gdGFrZSBhY2NvdW50IG9mIHRoZQpAQCAtNDY2LDcgKzQ3MCw5IEBAIGJvb2wg
SFRNTFRleHRBcmVhRWxlbWVudDo6dG9vTG9uZyhjb25zdCAKICAgICBpbnQgbWF4ID0gbWF4TGVu
Z3RoKCk7CiAgICAgaWYgKG1heCA8IDApCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1
cm4gY29tcHV0ZUxlbmd0aEZvclN1Ym1pc3Npb24odmFsdWUpID4gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KG1heCk7CisgICAgdW5zaWduZWQgdW5zaWduZWRNYXggPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4obWF4KTsKKyAgICBBU1NFUlQodmFsdWUubGVuZ3RoKCkgPj0gY29tcHV0ZUxlbmd0aEZvclN1
Ym1pc3Npb24odmFsdWUpKTsKKyAgICByZXR1cm4gdmFsdWUubGVuZ3RoKCkgPiB1bnNpZ25lZE1h
eCAmJiBjb21wdXRlTGVuZ3RoRm9yU3VibWlzc2lvbih2YWx1ZSkgPiB1bnNpZ25lZE1heDsKIH0K
IAogYm9vbCBIVE1MVGV4dEFyZWFFbGVtZW50Ojppc1ZhbGlkVmFsdWUoY29uc3QgU3RyaW5nJiBj
YW5kaWRhdGUpIGNvbnN0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167801</attachid>
            <date>2012-10-09 11:34:12 -0700</date>
            <delta_ts>2012-10-09 15:19:12 -0700</delta_ts>
            <desc>Fixes the bug</desc>
            <filename>bug-98711-20121009113313.patch</filename>
            <type>text/plain</type>
            <size>4227</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMDc3NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDEyLTEwLTA5ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIERPTS90ZXh0YXJlYS1lZGl0Lmh0
bWwgc3BlbmRzIDM1JSBvZiB0aW1lIGluIG51bUdyYXBoZW1lQ2x1c3RlcnMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk4NzExCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2luY2UgdGhlIG51bWJlciBvZiBj
aGFyYWN0ZXJzIGlzIGFsd2F5cyBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiBncmFwaGVtZSBj
bHVzdGVycywKKyAgICAgICAgd2UgY2FuIGF2b2lkIGNhbGxpbmcgY29tcHV0ZUxlbmd0aEZvclN1
Ym1pc3Npb24gd2hlbiB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaXMgbGVzcworICAgICAgICB0
aGFuIG1heGxlbmd0aC4gV2Ugc3RpbGwgaGF2ZSB0byBjb3VudCB0aGUgbnVtYmVyIG9mIExGcyBz
aW5jZSB0aGV5IGFsbCBuZWVkIHRvIGJlCisgICAgICAgIGNvbnZlcnRlZCBpbnRvIENSTEZzLiBU
aGlzIGltcHJvdmVzIFdlYktpdCdzIHNjb3JlIG9uIERPTS90ZXh0YXJlYS1lZGl0Lmh0bWwgYnkg
NDUlLgorCisgICAgICAgICogaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmNvbXB1dGVMZW5ndGhGb3JTdWJtaXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6
Om51bWJlck9mTGluZUJyZWFrcyk6CisgICAgICAgIChXZWJDb3JlOjp1cHBlckJvdW5kRm9yTGVu
Z3RoRm9yU3VibWlzc2lvbik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVh
RWxlbWVudDo6aGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6dG9vTG9uZyk6CisKIDIwMTItMTAtMDkgIFBoaWxpcCBS
b2dlcnMgIDxwZHJAZ29vZ2xlLmNvbT4KIAogICAgICAgICBQcmV2ZW50IGFuaW1hdGlvbiB3aGVu
IENTUyBhdHRyaWJ1dGVUeXBlIGlzIGludmFsaWQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAJKHJldmlzaW9uIDEzMDcxNikKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2
LDEwICs1NiwxNSBAQCBzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRDb2xzID0gMjA7CiAKIC8vIE9u
IHN1Ym1pc3Npb24sIExGIGNoYXJhY3RlcnMgYXJlIGNvbnZlcnRlZCBpbnRvIENSTEYuCiAvLyBU
aGlzIGZ1bmN0aW9uIHJldHVybnMgbnVtYmVyIG9mIGNoYXJhY3RlcnMgY29uc2lkZXJpbmcgdGhp
cy4KLXN0YXRpYyB1bnNpZ25lZCBjb21wdXRlTGVuZ3RoRm9yU3VibWlzc2lvbihjb25zdCBTdHJp
bmcmIHRleHQpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNvbXB1dGVMZW5ndGhGb3JTdWJtaXNz
aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgdW5zaWduZWQgbnVtYmVyT2ZMaW5lQnJlYWtzKQorewor
ICAgIHJldHVybiBudW1HcmFwaGVtZUNsdXN0ZXJzKHRleHQpICsgbnVtYmVyT2ZMaW5lQnJlYWtz
OworfQorCitzdGF0aWMgdW5zaWduZWQgbnVtYmVyT2ZMaW5lQnJlYWtzKGNvbnN0IFN0cmluZyYg
dGV4dCkKIHsKLSAgICB1bnNpZ25lZCBjb3VudCA9ICBudW1HcmFwaGVtZUNsdXN0ZXJzKHRleHQp
OwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRleHQubGVuZ3RoKCk7CisgICAgdW5zaWduZWQgY291
bnQgPSAwOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAg
ICAgICBpZiAodGV4dFtpXSA9PSAnXG4nKQogICAgICAgICAgICAgY291bnQrKzsKQEAgLTY3LDYg
KzcyLDE2IEBAIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlTGVuZ3RoRm9yU3VibWlzc2kKICAgICBy
ZXR1cm4gY291bnQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY29tcHV0ZUxlbmd0aEZv
clN1Ym1pc3Npb24oY29uc3QgU3RyaW5nJiB0ZXh0KQoreworICAgIHJldHVybiBudW1HcmFwaGVt
ZUNsdXN0ZXJzKHRleHQpICsgbnVtYmVyT2ZMaW5lQnJlYWtzKHRleHQpOworfQorCitzdGF0aWMg
aW5saW5lIHVuc2lnbmVkIHVwcGVyQm91bmRGb3JMZW5ndGhGb3JTdWJtaXNzaW9uKGNvbnN0IFN0
cmluZyYgdGV4dCwgdW5zaWduZWQgbnVtYmVyT2ZMaW5lQnJlYWtzKQoreworICAgIHJldHVybiB0
ZXh0Lmxlbmd0aCgpICsgbnVtYmVyT2ZMaW5lQnJlYWtzOworfQorCiBIVE1MVGV4dEFyZWFFbGVt
ZW50OjpIVE1MVGV4dEFyZWFFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERv
Y3VtZW50KiBkb2N1bWVudCwgSFRNTEZvcm1FbGVtZW50KiBmb3JtKQogICAgIDogSFRNTFRleHRG
b3JtQ29udHJvbEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQsIGZvcm0pCiAgICAgLCBtX3Jvd3Mo
ZGVmYXVsdFJvd3MpCkBAIC0yODAsNyArMjk1LDEzIEBAIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVu
dDo6aGFuZGxlQmVmb3JlVGUKICAgICAgICAgcmV0dXJuOwogICAgIHVuc2lnbmVkIHVuc2lnbmVk
TWF4TGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNpZ25lZE1heExlbmd0aCk7CiAKLSAg
ICB1bnNpZ25lZCBjdXJyZW50TGVuZ3RoID0gY29tcHV0ZUxlbmd0aEZvclN1Ym1pc3Npb24oaW5u
ZXJUZXh0VmFsdWUoKSk7CisgICAgY29uc3QgU3RyaW5nJiBjdXJyZW50VmFsdWUgPSBpbm5lclRl
eHRWYWx1ZSgpOworICAgIHVuc2lnbmVkIG51bWJlck9mTGluZUJyZWFrc0luQ3VycmVudFZhbHVl
ID0gbnVtYmVyT2ZMaW5lQnJlYWtzKGN1cnJlbnRWYWx1ZSk7CisgICAgaWYgKHVwcGVyQm91bmRG
b3JMZW5ndGhGb3JTdWJtaXNzaW9uKGN1cnJlbnRWYWx1ZSwgbnVtYmVyT2ZMaW5lQnJlYWtzSW5D
dXJyZW50VmFsdWUpCisgICAgICAgICsgdXBwZXJCb3VuZEZvckxlbmd0aEZvclN1Ym1pc3Npb24o
ZXZlbnQtPnRleHQoKSwgbnVtYmVyT2ZMaW5lQnJlYWtzKGV2ZW50LT50ZXh0KCkpKSA8IHVuc2ln
bmVkTWF4TGVuZ3RoKQorICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25lZCBjdXJyZW50TGVu
Z3RoID0gY29tcHV0ZUxlbmd0aEZvclN1Ym1pc3Npb24oY3VycmVudFZhbHVlLCBudW1iZXJPZkxp
bmVCcmVha3NJbkN1cnJlbnRWYWx1ZSk7CiAgICAgLy8gc2VsZWN0aW9uTGVuZ3RoIHJlcHJlc2Vu
dHMgdGhlIHNlbGVjdGlvbiBsZW5ndGggb2YgdGhpcyB0ZXh0IGZpZWxkIHRvIGJlCiAgICAgLy8g
cmVtb3ZlZCBieSB0aGlzIGluc2VydGlvbi4KICAgICAvLyBJZiB0aGUgdGV4dCBmaWVsZCBoYXMg
bm8gZm9jdXMsIHdlIGRvbid0IG5lZWQgdG8gdGFrZSBhY2NvdW50IG9mIHRoZQpAQCAtNDY2LDcg
KzQ4NywxMCBAQCBib29sIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnRvb0xvbmcoY29uc3QgCiAgICAg
aW50IG1heCA9IG1heExlbmd0aCgpOwogICAgIGlmIChtYXggPCAwKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgcmV0dXJuIGNvbXB1dGVMZW5ndGhGb3JTdWJtaXNzaW9uKHZhbHVlKSA+IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihtYXgpOworICAgIHVuc2lnbmVkIHVuc2lnbmVkTWF4ID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KG1heCk7CisgICAgdW5zaWduZWQgbnVtYmVyT2ZMaW5lQnJlYWtz
SW5WYWx1ZSA9IG51bWJlck9mTGluZUJyZWFrcyh2YWx1ZSk7CisgICAgcmV0dXJuIHVwcGVyQm91
bmRGb3JMZW5ndGhGb3JTdWJtaXNzaW9uKHZhbHVlLCBudW1iZXJPZkxpbmVCcmVha3NJblZhbHVl
KSA+IHVuc2lnbmVkTWF4CisgICAgICAgICYmIGNvbXB1dGVMZW5ndGhGb3JTdWJtaXNzaW9uKHZh
bHVlLCBudW1iZXJPZkxpbmVCcmVha3NJblZhbHVlKSA+IHVuc2lnbmVkTWF4OwogfQogCiBib29s
IEhUTUxUZXh0QXJlYUVsZW1lbnQ6OmlzVmFsaWRWYWx1ZShjb25zdCBTdHJpbmcmIGNhbmRpZGF0
ZSkgY29uc3QK
</data>

          </attachment>
      

    </bug>

</bugzilla>