<?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>97627</bug_id>
          
          <creation_ts>2012-09-25 21:15:20 -0700</creation_ts>
          <short_desc>Optimize stylesheet insertions</short_desc>
          <delta_ts>2012-09-26 20:47:34 -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>CSS</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</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>kling</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>rniwa</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>728180</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-09-25 21:15:20 -0700</bug_when>
    <thetext>We currently do scope analysis for stylesheets that are added to the end of the active stylesheet list to avoid unnecessary style recalcs and StyleResolver rebuilding. However it is somewhat common to insert &lt;style&gt; elements dynamically to positions other than last. In this case we currently simply force full style recalc. We should do scope analysis and partial style recalcs also in these cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>728186</commentid>
    <comment_count>1</comment_count>
      <attachid>165724</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-09-25 21:31:04 -0700</bug_when>
    <thetext>Created attachment 165724
patch with performance test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>728450</commentid>
    <comment_count>2</comment_count>
      <attachid>165724</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-09-26 05:42:25 -0700</bug_when>
    <thetext>Comment on attachment 165724
patch with performance test

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

Neat! r=me

&gt; Source/WebCore/ChangeLog:12
&gt; +        PerformanceTests/CSS/StyleSheetInsert.html microbenchmark shows ~20x progression from the patch.

Glorious exposition, comrade!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>728537</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2012-09-26 07:30:26 -0700</bug_when>
    <thetext>&lt;rdar://problem/12376415&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>728555</commentid>
    <comment_count>4</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-09-26 07:55:28 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/129644</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>728948</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-09-26 13:55:43 -0700</bug_when>
    <thetext>Is it really worth running this test on every check in? FWIW, we already have a bot cycle time of one hour. Also, it seems like we could have used PerfTestRunner.runPerSecond here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>729167</commentid>
    <comment_count>6</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-09-26 20:16:37 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Is it really worth running this test on every check in? FWIW, we already have a bot cycle time of one hour. Also, it seems like we could have used PerfTestRunner.runPerSecond here.

We run our correctness regression tests on every check-in. Why wouldn&apos;t we run performance regressions tests like that too?

It is a pretty fast test and could be made faster too. I didn&apos;t know about PerfTestRunner.runPerSecond.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>729173</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-09-26 20:47:34 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; We run our correctness regression tests on every check-in. Why wouldn&apos;t we run performance regressions tests like that too?
&gt; 
&gt; It is a pretty fast test and could be made faster too. I didn&apos;t know about PerfTestRunner.runPerSecond.

The problem is that performance tests are much, much slower, and we can&apos;t parallelize them. Our current bot cycle is 50-60 minutes after disabling one test that was running out of memory on Chromium. And every new test will increase the run time by anywhere from 5 seconds to 5 minutes...</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165724</attachid>
            <date>2012-09-25 21:31:04 -0700</date>
            <delta_ts>2012-09-26 05:42:24 -0700</delta_ts>
            <desc>patch with performance test</desc>
            <filename>stylesheet-optimize-insert-2.patch</filename>
            <type>text/plain</type>
            <size>11247</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjk1OTEpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEyLTA5LTI1ICBB
bnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBPcHRpbWl6ZSBzdHls
ZXNoZWV0IGluc2VydGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTk3NjI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkIHN5bnRoZXRpYyBwZXJmb3JtYW5jZSB0ZXN0IGZvciBhdm9pZGluZyBzdHls
ZSByZWNhbGNzIG9uIHN0eWxlc2hlZXQgaW5zZXJ0cy4KKworICAgICAgICAqIENTUy9TdHlsZVNo
ZWV0SW5zZXJ0Lmh0bWw6IEFkZGVkLgorCiAyMDEyLTA5LTI1ICBSeW9zdWtlIE5pd2EgIDxybml3
YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFNraXAgRHJvbWFlby9qc2xpYi1tb2RpZnktanF1ZXJ5
Lmh0bWwgcGVyIGJ1ZyA5NTM3Ni4KSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ1NTL1N0eWxlU2hl
ZXRJbnNlcnQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0NTUy9TdHlsZVNo
ZWV0SW5zZXJ0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0NTUy9TdHls
ZVNoZWV0SW5zZXJ0Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjUgQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvcnVubmVy
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGlmcmFtZT48L2lmcmFtZT4KKzwvYm9k
eT4KKzxzY3JpcHQ+Cit2YXIgZnJhbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgi
aWZyYW1lIilbMF07Cit2YXIgdGVzdERvYyA9IGZyYW1lLmNvbnRlbnREb2N1bWVudDsKK3ZhciBk
b2NUZXh0ID0gIiI7Citkb2NUZXh0ICs9ICI8Ym9keT48c3R5bGU+LmZvbyB7Y29sb3I6cmVkfTwv
c3R5bGU+IjsKK2RvY1RleHQgKz0gIjxkaXYgY2xhc3M9J2Jhcic+Rm9vPC9kaXY+IjsKK2ZvciAo
dmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkKKyAgICBkb2NUZXh0ICs9ICI8ZGl2IGNsYXNzPSdm
b28nPkZvbzwvZGl2PiI7Cit0ZXN0RG9jLmJvZHkuaW5uZXJIVE1MID0gZG9jVGV4dDsKKworUGVy
ZlRlc3RSdW5uZXIucnVuKGZ1bmN0aW9uKCkgeworICAgIHZhciBzdHlsZUVsZW0gPSB0ZXN0RG9j
LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7CisgICAgc3R5bGVFbGVtLmlubmVyVGV4dCA9ICIuYmFy
IHtjb2xvcjpncmVlbn0iOworICAgIHRlc3REb2MuYm9keS5pbnNlcnRCZWZvcmUoc3R5bGVFbGVt
LCB0ZXN0RG9jLmJvZHkuZmlyc3RDaGlsZCk7Cit9LCA1MCwgMTApOworPC9zY3JpcHQ+Cis8L2h0
bWw+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjk1OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNSBAQAorMjAxMi0wOS0yNSAgQW50
dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgT3B0aW1pemUgc3R5bGVz
aGVldCBpbnNlcnRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD05NzYyNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFdlIGN1cnJlbnRseSBkbyBzY29wZSBhbmFseXNpcyBmb3Igc3R5bGVzaGVldHMgdGhh
dCBhcmUgYWRkZWQgdG8gdGhlIGVuZCBvZiB0aGUgYWN0aXZlIHN0eWxlc2hlZXQgbGlzdCB0byBh
dm9pZCB1bm5lY2Vzc2FyeSBzdHlsZQorICAgICAgICByZWNhbGNzIGFuZCBTdHlsZVJlc29sdmVy
IHJlYnVpbGRpbmcuIEhvd2V2ZXIgaXQgaXMgc29tZXdoYXQgY29tbW9uIHRvIGluc2VydCA8c3R5
bGU+IGVsZW1lbnRzIGR5bmFtaWNhbGx5IHRvIHBvc2l0aW9ucyBvdGhlciB0aGFuIGxhc3QuCisg
ICAgICAgIEluIHRoaXMgY2FzZSB3ZSBjdXJyZW50bHkgc2ltcGx5IGZvcmNlIGZ1bGwgc3R5bGUg
cmVjYWxjLiBXZSBzaG91bGQgZG8gc2NvcGUgYW5hbHlzaXMgYW5kIHBhcnRpYWwgc3R5bGUgcmVj
YWxjcyBhbHNvIGluIHRoZXNlIGNhc2VzLgorICAgICAgICAKKyAgICAgICAgUGVyZm9ybWFuY2VU
ZXN0cy9DU1MvU3R5bGVTaGVldEluc2VydC5odG1sIG1pY3JvYmVuY2htYXJrIHNob3dzIH4yMHgg
cHJvZ3Jlc3Npb24gZnJvbSB0aGUgcGF0Y2guCisKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdHlsZVJlc29sdmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnJlc2V0QXV0aG9yU3R5bGUpOgorICAg
ICAgICAKKyAgICAgICAgICAgIEFkZCBhIHdheSB0byByZXNldCBhdXRob3IgUnVsZVNldCB3aXRo
b3V0IGRlbGV0aW5nIHRoZSB3aG9sZSBTdHlsZVJlc29sdmVyLgorCisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5oOgorICAgICAgICAoU3R5bGVSZXNvbHZl
cik6CisgICAgICAgICogZG9tL0RvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6YW5hbHl6ZVN0eWxl
U2hlZXRDaGFuZ2UpOgorICAgICAgICAKKyAgICAgICAgICAgIENoZWNrIGlmIHRoZXJlIGhhdmUg
YmVlbiBpbnNlcnRpb25zIHRvIHRoZSBzdHlsZXNoZWV0IGxpc3QuIElmIHNvIHdlIG5lZWQgdG8g
cmVzZXQKKyAgICAgICAgICAgIHRoZSBTdHlsZVJlc29sdmVyICh0byBoYW5kbGUgcnVsZSBwb3Np
dGlvbiBjaGFuZ2VzKSBidXQgZG9uJ3QgbmVlZCB0byBmb3JjZSBmdWxsCisgICAgICAgICAgICBz
dHlsZSByZWNhbGMuIERvIHNjb3BlIGFuYWx5c2lzIGZvciBpbnNlcnRlZCBzdHlsZXNoZWV0cyBh
cyB3ZWxsLgorCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9u
Ojp1cGRhdGVBY3RpdmVTdHlsZVNoZWV0cyk6CisgICAgICAgICogZG9tL0RvY3VtZW50U3R5bGVT
aGVldENvbGxlY3Rpb24uaDoKKwogMjAxMi0wOS0yNSAgWW9zaGlmdW1pIElub3VlICA8eW9zaW5A
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtGb3Jtc10gV2Ugc2hvdWxkIGRpc2Nvbm5lY3QgRGF0
ZVRpbWVFZGl0RWxlbWVudCBhbmQgRGF0ZVRpbWVGaWVsZEVsZW1lbnQgb24gbGF5b3V0KCkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAJKHJldmlzaW9uIDEyOTQ1MikKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDIzLDExICs0MjMsNyBAQCBTdHlsZVJlc29sdmVyOjpTdHlsZVJlc29sdmVyKERvY3VtZW50KiBk
CiAgICAgaWYgKG1fcm9vdERlZmF1bHRTdHlsZSAmJiB2aWV3KQogICAgICAgICBtX21lZGl1bSA9
IGFkb3B0UHRyKG5ldyBNZWRpYVF1ZXJ5RXZhbHVhdG9yKHZpZXctPm1lZGlhVHlwZSgpLCB2aWV3
LT5mcmFtZSgpLCBtX3Jvb3REZWZhdWx0U3R5bGUuZ2V0KCkpKTsKIAotICAgIG1fYXV0aG9yU3R5
bGUgPSBSdWxlU2V0OjpjcmVhdGUoKTsKLSAgICAvLyBBZGRpbmcgcnVsZXMgZnJvbSBtdWx0aXBs
ZSBzaGVldHMsIHNocmluayBhdCB0aGUgZW5kLgotICAgIC8vIEFkZGluZyBnbG9iYWwgcnVsZXMg
ZnJvbSBtdWx0aXBsZSBzaGVldHMsIHNocmluayBhdCB0aGUgZW5kLgotICAgIC8vIE5vdGUgdGhh
dCB0aGVyZSB1c3VhbGx5IGlzIG9ubHkgMSBzaGVldCBmb3Igc2NvcGVkIHJ1bGVzLCBzbyBhdXRv
LXNocmluay10by1maXQgaXMgZmluZS4KLSAgICBtX2F1dGhvclN0eWxlLT5kaXNhYmxlQXV0b1No
cmlua1RvRml0KCk7CisgICAgcmVzZXRBdXRob3JTdHlsZSgpOwogCiAgICAgRG9jdW1lbnRTdHls
ZVNoZWV0Q29sbGVjdGlvbiogc3R5bGVTaGVldENvbGxlY3Rpb24gPSBkb2N1bWVudC0+c3R5bGVT
aGVldENvbGxlY3Rpb24oKTsKICAgICAvLyBGSVhNRTogVGhpcyBzdWNrcyEgVGhlIHVzZXIgc2hl
ZXQgaXMgcmVwYXJzZWQgZXZlcnkgdGltZSEKQEAgLTU0NSw2ICs1NDEsMTIgQEAgaW5saW5lIFJ1
bGVTZXQqIFN0eWxlUmVzb2x2ZXI6OnJ1bGVTZXRGbwogfQogI2VuZGlmCiAKK3ZvaWQgU3R5bGVS
ZXNvbHZlcjo6cmVzZXRBdXRob3JTdHlsZSgpCit7CisgICAgbV9hdXRob3JTdHlsZSA9IFJ1bGVT
ZXQ6OmNyZWF0ZSgpOworICAgIG1fYXV0aG9yU3R5bGUtPmRpc2FibGVBdXRvU2hyaW5rVG9GaXQo
KTsKK30KKwogdm9pZCBTdHlsZVJlc29sdmVyOjphcHBlbmRBdXRob3JTdHlsZXNoZWV0cyh1bnNp
Z25lZCBmaXJzdE5ldywgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0PiA+JiBzdHlsZXNo
ZWV0cykKIHsKICAgICAvLyBUaGlzIGhhbmRsZXMgc2hlZXRzIGFkZGVkIHRvIHRoZSBlbmQgb2Yg
dGhlIHN0eWxlc2hlZXQgbGlzdCBvbmx5LiBJbiBvdGhlciBjYXNlcyB0aGUgc3R5bGUgcmVzb2x2
ZXIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAkocmV2aXNpb24gMTI5NDUxKQor
KysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MTU5LDcgKzE1OSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEVmZmVjdGl2ZVpvb20oZmxvYXQg
ZikgeyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRFZmZlY3RpdmVab29tKGYpOyB9CiAgICAg
dm9pZCBzZXRUZXh0U2l6ZUFkanVzdChib29sIGIpIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+
c2V0VGV4dFNpemVBZGp1c3QoYik7IH0KICAgICBib29sIGhhc1BhcmVudE5vZGUoKSBjb25zdCB7
IHJldHVybiBtX3BhcmVudE5vZGU7IH0KLSAgICAKKworICAgIHZvaWQgcmVzZXRBdXRob3JTdHls
ZSgpOwogICAgIHZvaWQgYXBwZW5kQXV0aG9yU3R5bGVzaGVldHModW5zaWduZWQgZmlyc3ROZXcs
IGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldD4gPiYpOwogICAgIAogICAgIC8vIEZpbmQg
dGhlIGlkcyBvciBjbGFzc2VzIHRoZSBzZWxlY3RvcnMgb24gYSBzdHlsZXNoZWV0IGFyZSBzY29w
ZWQgdG8uIFRoZSBzZWxlY3RvcnMgb25seSBhcHBseSB0byBlbGVtZW50cyBpbiBzdWJ0cmVlcyB3
aGVyZSB0aGUgcm9vdCBlbGVtZW50IG1hdGNoZXMgdGhlIHNjb3BlLgpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmNwcAkocmV2
aXNpb24gMTI5NDUyKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50U3R5bGVTaGVldENv
bGxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzMsOSArMzczLDkgQEAgYm9vbCBEb2N1
bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjp0ZXN0QQogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
dm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjphbmFseXplU3R5bGVTaGVldENoYW5n
ZShVcGRhdGVGbGFnIHVwZGF0ZUZsYWcsIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldD4g
PiYgbmV3U3R5bGVzaGVldHMsIGJvb2wmIHJlcXVpcmVzU3R5bGVSZXNvbHZlclJlc2V0LCBib29s
JiByZXF1aXJlc0Z1bGxTdHlsZVJlY2FsYykKK3ZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVj
dGlvbjo6YW5hbHl6ZVN0eWxlU2hlZXRDaGFuZ2UoVXBkYXRlRmxhZyB1cGRhdGVGbGFnLCBjb25z
dCBWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+ID4mIG5ld1N0eWxlc2hlZXRzLCBTdHlsZVJlc29s
dmVyVXBkYXRlVHlwZSYgc3R5bGVSZXNvbHZlclVwZGF0ZVR5cGUsIGJvb2wmIHJlcXVpcmVzRnVs
bFN0eWxlUmVjYWxjKQogewotICAgIHJlcXVpcmVzU3R5bGVSZXNvbHZlclJlc2V0ID0gdHJ1ZTsK
KyAgICBzdHlsZVJlc29sdmVyVXBkYXRlVHlwZSA9IFJlY29uc3RydWN0OwogICAgIHJlcXVpcmVz
RnVsbFN0eWxlUmVjYWxjID0gdHJ1ZTsKICAgICAKICAgICAvLyBTdHlsZXNoZWV0cyBvZiA8c3R5
bGU+IGVsZW1lbnRzIHRoYXQgQGltcG9ydCBzdHlsZXNoZWV0cyBhcmUgYWN0aXZlIGJ1dCBsb2Fk
aW5nLiBXZSBuZWVkIHRvIHRyaWdnZXIgYSBmdWxsIHJlY2FsYyB3aGVuIHN1Y2ggbG9hZHMgYXJl
IGRvbmUuCkBAIC0zOTYsMjUgKzM5Niw0MSBAQCB2b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxl
Y3Rpb246OmFuYWx5CiAgICAgaWYgKCFtX2RvY3VtZW50LT5zdHlsZVJlc29sdmVySWZFeGlzdHMo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gU2VlIGlmIHdlIGFyZSBqdXN0IGFkZGluZyBz
dHlsZXNoZWV0cy4KKyAgICAvLyBGaW5kIG91dCB3aGljaCBzdHlsZXNoZWV0cyBhcmUgbmV3Lgog
ICAgIHVuc2lnbmVkIG9sZFN0eWxlc2hlZXRDb3VudCA9IG1fYXV0aG9yU3R5bGVTaGVldHMuc2l6
ZSgpOwogICAgIGlmIChuZXdTdHlsZXNoZWV0Q291bnQgPCBvbGRTdHlsZXNoZWV0Q291bnQpCiAg
ICAgICAgIHJldHVybjsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb2xkU3R5bGVzaGVl
dENvdW50OyArK2kpIHsKLSAgICAgICAgaWYgKG1fYXV0aG9yU3R5bGVTaGVldHNbaV0gIT0gbmV3
U3R5bGVzaGVldHNbaV0pCisgICAgVmVjdG9yPFN0eWxlU2hlZXQqPiBhZGRlZFNoZWV0czsKKyAg
ICB1bnNpZ25lZCBuZXdJbmRleCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBvbGRJbmRleCA9IDA7
IG9sZEluZGV4IDwgb2xkU3R5bGVzaGVldENvdW50OyArK29sZEluZGV4KSB7CisgICAgICAgIGlm
IChuZXdJbmRleCA+PSBuZXdTdHlsZXNoZWV0Q291bnQpCiAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIHJlcXVpcmVzU3R5bGVSZXNvbHZlclJlc2V0ID0gZmFsc2U7CisgICAgICAgIHdo
aWxlIChtX2F1dGhvclN0eWxlU2hlZXRzW29sZEluZGV4XSAhPSBuZXdTdHlsZXNoZWV0c1tuZXdJ
bmRleF0pIHsKKyAgICAgICAgICAgIGFkZGVkU2hlZXRzLmFwcGVuZChuZXdTdHlsZXNoZWV0c1tu
ZXdJbmRleF0uZ2V0KCkpOworICAgICAgICAgICAgKytuZXdJbmRleDsKKyAgICAgICAgICAgIGlm
IChuZXdJbmRleCA9PSBuZXdTdHlsZXNoZWV0Q291bnQpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgICsrbmV3SW5kZXg7CisgICAgfQorICAgIGJvb2wgaGFzSW5z
ZXJ0aW9ucyA9ICFhZGRlZFNoZWV0cy5pc0VtcHR5KCk7CisgICAgd2hpbGUgKG5ld0luZGV4IDwg
bmV3U3R5bGVzaGVldENvdW50KSB7CisgICAgICAgIGFkZGVkU2hlZXRzLmFwcGVuZChuZXdTdHls
ZXNoZWV0c1tuZXdJbmRleF0uZ2V0KCkpOworICAgICAgICArK25ld0luZGV4OworICAgIH0KKyAg
ICAvLyBJZiBhbGwgbmV3IHNoZWV0cyB3ZXJlIGFkZGVkIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3Qg
d2UgY2FuIGp1c3QgYWRkIHRoZW0gdG8gZXhpc3RpbmcgU3R5bGVSZXNvbHZlci4KKyAgICAvLyBJ
ZiB0aGVyZSB3ZXJlIGluc2VydGlvbnMgd2UgbmVlZCB0byByZS1hZGQgYWxsIHRoZSBzdHlsZXNo
ZWV0cyBzbyBydWxlcyBhcmUgb3JkZXJlZCBjb3JyZWN0bHkuCisgICAgc3R5bGVSZXNvbHZlclVw
ZGF0ZVR5cGUgPSBoYXNJbnNlcnRpb25zID8gUmVzZXQgOiBBZGRpdGl2ZTsKIAogICAgIC8vIElm
IHdlIGFyZSBhbHJlYWR5IHBhcnNpbmcgdGhlIGJvZHkgYW5kIHNvIG1heSBoYXZlIHNpZ25pZmlj
YW50IGFtb3VudCBvZiBlbGVtZW50cywgcHV0IHNvbWUgZWZmb3J0IGludG8gdHJ5aW5nIHRvIGF2
b2lkIHN0eWxlIHJlY2FsY3MuCiAgICAgaWYgKCFtX2RvY3VtZW50LT5ib2R5KCkgfHwgbV9kb2N1
bWVudC0+aGFzTm9kZXNXaXRoUGxhY2Vob2xkZXJTdHlsZSgpKQogICAgICAgICByZXR1cm47Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gb2xkU3R5bGVzaGVldENvdW50OyBpIDwgbmV3U3R5bGVzaGVl
dENvdW50OyArK2kpIHsKLSAgICAgICAgaWYgKCFuZXdTdHlsZXNoZWV0c1tpXS0+aXNDU1NTdHls
ZVNoZWV0KCkpCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFkZGVkU2hlZXRzLnNpemUo
KTsgKytpKSB7CisgICAgICAgIGlmICghYWRkZWRTaGVldHNbaV0tPmlzQ1NTU3R5bGVTaGVldCgp
KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAobmV3U3R5bGVzaGVldHNbaV0tPmRp
c2FibGVkKCkpCisgICAgICAgIGlmIChhZGRlZFNoZWV0c1tpXS0+ZGlzYWJsZWQoKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAodGVzdEFkZGVkU3R5bGVTaGVldFJlcXVpcmVz
U3R5bGVSZWNhbGMoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KG5ld1N0eWxlc2hlZXRzW2ld
LmdldCgpKS0+Y29udGVudHMoKSkpCisgICAgICAgIGlmICh0ZXN0QWRkZWRTdHlsZVNoZWV0UmVx
dWlyZXNTdHlsZVJlY2FsYyhzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oYWRkZWRTaGVldHNb
aV0pLT5jb250ZW50cygpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgcmVxdWly
ZXNGdWxsU3R5bGVSZWNhbGMgPSBmYWxzZTsKQEAgLTQ0OCwxNCArNDY0LDIxIEBAIGJvb2wgRG9j
dW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6dXBkYXQKICAgICBWZWN0b3I8UmVmUHRyPFN0eWxl
U2hlZXQ+ID4gbmV3U3R5bGVzaGVldHM7CiAgICAgY29sbGVjdEFjdGl2ZVN0eWxlU2hlZXRzKG5l
d1N0eWxlc2hlZXRzKTsKIAotICAgIGJvb2wgcmVxdWlyZXNTdHlsZVJlc29sdmVyUmVzZXQ7Cisg
ICAgU3R5bGVSZXNvbHZlclVwZGF0ZVR5cGUgc3R5bGVSZXNvbHZlclVwZGF0ZVR5cGU7CiAgICAg
Ym9vbCByZXF1aXJlc0Z1bGxTdHlsZVJlY2FsYzsKLSAgICBhbmFseXplU3R5bGVTaGVldENoYW5n
ZSh1cGRhdGVGbGFnLCBuZXdTdHlsZXNoZWV0cywgcmVxdWlyZXNTdHlsZVJlc29sdmVyUmVzZXQs
IHJlcXVpcmVzRnVsbFN0eWxlUmVjYWxjKTsKKyAgICBhbmFseXplU3R5bGVTaGVldENoYW5nZSh1
cGRhdGVGbGFnLCBuZXdTdHlsZXNoZWV0cywgc3R5bGVSZXNvbHZlclVwZGF0ZVR5cGUsIHJlcXVp
cmVzRnVsbFN0eWxlUmVjYWxjKTsKIAotICAgIGlmIChyZXF1aXJlc1N0eWxlUmVzb2x2ZXJSZXNl
dCkKKyAgICBpZiAoc3R5bGVSZXNvbHZlclVwZGF0ZVR5cGUgPT0gUmVjb25zdHJ1Y3QpCiAgICAg
ICAgIG1fZG9jdW1lbnQtPmNsZWFyU3R5bGVSZXNvbHZlcigpOwogICAgIGVsc2UgewotICAgICAg
ICBtX2RvY3VtZW50LT5zdHlsZVJlc29sdmVyKCktPmFwcGVuZEF1dGhvclN0eWxlc2hlZXRzKG1f
YXV0aG9yU3R5bGVTaGVldHMuc2l6ZSgpLCBuZXdTdHlsZXNoZWV0cyk7CisgICAgICAgIFN0eWxl
UmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIgPSBtX2RvY3VtZW50LT5zdHlsZVJlc29sdmVyKCk7Cisg
ICAgICAgIGlmIChzdHlsZVJlc29sdmVyVXBkYXRlVHlwZSA9PSBSZXNldCkgeworICAgICAgICAg
ICAgc3R5bGVSZXNvbHZlci0+cmVzZXRBdXRob3JTdHlsZSgpOworICAgICAgICAgICAgc3R5bGVS
ZXNvbHZlci0+YXBwZW5kQXV0aG9yU3R5bGVzaGVldHMoMCwgbmV3U3R5bGVzaGVldHMpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBl
ID09IEFkZGl0aXZlKTsKKyAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPmFwcGVuZEF1dGhvclN0
eWxlc2hlZXRzKG1fYXV0aG9yU3R5bGVTaGVldHMuc2l6ZSgpLCBuZXdTdHlsZXNoZWV0cyk7Cisg
ICAgICAgIH0KICAgICAgICAgcmVzZXRDU1NGZWF0dXJlRmxhZ3MoKTsKICAgICB9CiAgICAgbV9h
dXRob3JTdHlsZVNoZWV0cy5zd2FwKG5ld1N0eWxlc2hlZXRzKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uaAkocmV2aXNpb24g
MTI5NDUyKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDcgKzEwMiwxMiBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIHZvaWQgY29sbGVjdEFjdGl2ZVN0eWxlU2hlZXRzKFZlY3RvcjxSZWZQdHI8U3R5bGVT
aGVldD4gPiYpOwogICAgIGJvb2wgdGVzdEFkZGVkU3R5bGVTaGVldFJlcXVpcmVzU3R5bGVSZWNh
bGMoU3R5bGVTaGVldENvbnRlbnRzKik7Ci0gICAgdm9pZCBhbmFseXplU3R5bGVTaGVldENoYW5n
ZShVcGRhdGVGbGFnLCBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+ID4mIG5ld1N0eWxl
c2hlZXRzLCBib29sJiByZXF1aXJlc1N0eWxlUmVzb2x2ZXJSZXNldCwgYm9vbCYgcmVxdWlyZXNG
dWxsU3R5bGVSZWNhbGMpOworICAgIGVudW0gU3R5bGVSZXNvbHZlclVwZGF0ZVR5cGUgeworICAg
ICAgICBSZWNvbnN0cnVjdCwKKyAgICAgICAgUmVzZXQsCisgICAgICAgIEFkZGl0aXZlCisgICAg
fTsKKyAgICB2b2lkIGFuYWx5emVTdHlsZVNoZWV0Q2hhbmdlKFVwZGF0ZUZsYWcsIGNvbnN0IFZl
Y3RvcjxSZWZQdHI8U3R5bGVTaGVldD4gPiYgbmV3U3R5bGVzaGVldHMsIFN0eWxlUmVzb2x2ZXJV
cGRhdGVUeXBlJiwgYm9vbCYgcmVxdWlyZXNGdWxsU3R5bGVSZWNhbGMpOwogCiAgICAgRG9jdW1l
bnQqIG1fZG9jdW1lbnQ7CiAK
</data>
<flag name="review"
          id="177855"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>