<?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>26957</bug_id>
          
          <creation_ts>2009-07-03 13:35:00 -0700</creation_ts>
          <short_desc>RegExp::match to be optimized</short_desc>
          <delta_ts>2011-06-10 13:01:27 -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>http://code.staikos.net/cgi-bin/gitweb.cgi?p=WebKit-CE;a=commitdiff;h=0b583f6983da09e93f06ab00b40ba84e58bae818</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Yong Li">yong.li.webkit</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>enrico.troeger</cc>
    
    <cc>gsherloc</cc>
    
    <cc>mjs</cc>
    
    <cc>staikos</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>129740</commentid>
    <comment_count>0</comment_count>
      <attachid>32246</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-07-03 13:35:00 -0700</bug_when>
    <thetext>Created attachment 32246
the patch

RegExp::match() should use inline Vector rather than OwnArrayPtr for better performance.

The patch is attached.

It gives more than 20% boost to sunspider string-unpack-code test, and gives about 8% boost to sunspider overall result.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129741</commentid>
    <comment_count>1</comment_count>
    <who name="George Staikos">staikos</who>
    <bug_when>2009-07-03 13:40:02 -0700</bug_when>
    <thetext>Note: the performance test was done on ARM with bytecode (no JIT), no FPU.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129750</commentid>
    <comment_count>2</comment_count>
    <who name="Gavin Sherlock">gsherloc</who>
    <bug_when>2009-07-03 14:32:52 -0700</bug_when>
    <thetext>Possibly a dupe of Bug 26316</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129757</commentid>
    <comment_count>3</comment_count>
      <attachid>32246</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2009-07-03 18:17:45 -0700</bug_when>
    <thetext>Comment on attachment 32246
the patch

Thanks for the patch! Looks like a good fix. On Mac OS X, this gives a 5% speedup on string-unpack code and smaller speedups on the other string tests, for an overall benefit of around 0.3% to SunSpider overall (some tests seem to slow down a bit but this appears to be noise). This patch doesn&apos;t handle the YARR case, I went ahead and filled that in and will post the revised patch in addition to commiting it. Also this patch was missing a ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129760</commentid>
    <comment_count>4</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-07-03 19:15:21 -0700</bug_when>
    <thetext>Thanks, Maciej. Should I create a changelog by myself?

The reason why we get more speedup is probably that our memory allocation is much slower than Mac OS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129782</commentid>
    <comment_count>5</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2009-07-04 07:23:21 -0700</bug_when>
    <thetext>For future patches, please include a ChangeLog entry (the prepare-ChangeLog script can fill in a lot of it for you). For this patch, I wrote a ChangeLog entry for you and checked it in (along with a few code changes to work with YARR) as &lt;http://trac.webkit.org/changeset/45545&gt;.

If the allocator on your platform is that slow, you may want to look into whether it&apos;s possible to use FastMalloc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129791</commentid>
    <comment_count>6</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-07-04 09:00:28 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; For future patches, please include a ChangeLog entry (the prepare-ChangeLog
&gt; script can fill in a lot of it for you). For this patch, I wrote a ChangeLog
&gt; entry for you and checked it in (along with a few code changes to work with
&gt; YARR) as &lt;http://trac.webkit.org/changeset/45545&gt;.
&gt; If the allocator on your platform is that slow, you may want to look into
&gt; whether it&apos;s possible to use FastMalloc.

Thanks a lot. prepare-ChangeLog never works for me (in GIT BASH). I have to do it manually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>418855</commentid>
    <comment_count>7</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-06-10 13:01:27 -0700</bug_when>
    <thetext>*** Bug 26368 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32246</attachid>
            <date>2009-07-03 13:35:00 -0700</date>
            <delta_ts>2009-07-03 18:17:44 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>RegExp_match_perf.diff</filename>
            <type>text/plain</type>
            <size>10248</size>
            <attacher name="Yong Li">yong.li.webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmNwcCBiL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwLmNwcAppbmRleCA4NTdhMzE2Li5jMTdkNGU4IDEwMDY0NAot
LS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5jcHAKKysrIGIvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHAuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQg
KEMpIDE5OTktMjAwMSwgMjAwNCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENv
cHlyaWdodCAoYykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgogICoKICAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwpAQCAtMTc3LDcgKzE3OCw3IEBAIHZvaWQgUmVnRXhwOjpjb21waWxlKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSkKICAgICBtX3JlZ0V4cCA9IGpzUmVnRXhwQ29tcGlsZShyZWludGVycHJl
dF9jYXN0PGNvbnN0IFVDaGFyKj4obV9wYXR0ZXJuLmRhdGEoKSksIG1fcGF0dGVybi5zaXplKCks
IGlnbm9yZUNhc2VPcHRpb24sIG11bHRpbGluZU9wdGlvbiwgJm1fbnVtU3VicGF0dGVybnMsICZt
X2NvbnN0cnVjdGlvbkVycm9yKTsKIH0KIAotaW50IFJlZ0V4cDo6bWF0Y2goY29uc3QgVVN0cmlu
ZyYgcywgaW50IHN0YXJ0T2Zmc2V0LCBPd25BcnJheVB0cjxpbnQ+KiBvdmVjdG9yKQoraW50IFJl
Z0V4cDo6bWF0Y2goY29uc3QgVVN0cmluZyYgcywgaW50IHN0YXJ0T2Zmc2V0LCBWZWN0b3I8aW50
LCAzMj4qIG92ZWN0b3IpCiB7CiAgICAgaWYgKHN0YXJ0T2Zmc2V0IDwgMCkKICAgICAgICAgc3Rh
cnRPZmZzZXQgPSAwOwpAQCAtMTkwLDE3ICsxOTEsMTkgQEAgaW50IFJlZ0V4cDo6bWF0Y2goY29u
c3QgVVN0cmluZyYgcywgaW50IHN0YXJ0T2Zmc2V0LCBPd25BcnJheVB0cjxpbnQ+KiBvdmVjdG9y
KQogI2lmIEVOQUJMRShXUkVDKQogICAgIGlmIChtX3dyZWNGdW5jdGlvbikgewogICAgICAgICBp
bnQgb2Zmc2V0VmVjdG9yU2l6ZSA9IChtX251bVN1YnBhdHRlcm5zICsgMSkgKiAyOwotICAgICAg
ICBpbnQqIG9mZnNldFZlY3RvciA9IG5ldyBpbnQgW29mZnNldFZlY3RvclNpemVdOworICAgICAg
ICBpbnQqIG9mZnNldFZlY3RvcjsKKyAgICAgICAgVmVjdG9yPGludCwgMzI+IG5vblJldHVybmVk
T3ZlY3RvcjsKKyAgICAgICAgaWYgKG92ZWN0b3IpIHsKKyAgICAgICAgICAgIG92ZWN0b3ItPnJl
c2l6ZShvZmZzZXRWZWN0b3JTaXplKTsKKyAgICAgICAgICAgIG9mZnNldFZlY3RvciA9IG92ZWN0
b3ItPmRhdGEoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG5vblJldHVybmVkT3Zl
Y3Rvci5yZXNpemUob2Zmc2V0VmVjdG9yU2l6ZSk7CisgICAgICAgICAgICBvZmZzZXRWZWN0b3Ig
PSBub25SZXR1cm5lZE92ZWN0b3IuZGF0YSgpOworICAgICAgICB9CiAgICAgICAgIEFTU0VSVChv
ZmZzZXRWZWN0b3IpOwogICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG9mZnNldFZlY3RvclNp
emU7ICsraikKICAgICAgICAgICAgIG9mZnNldFZlY3RvcltqXSA9IC0xOwogCi0gICAgICAgIE93
bkFycmF5UHRyPGludD4gbm9uUmV0dXJuZWRPdmVjdG9yOwotICAgICAgICBpZiAoIW92ZWN0b3Ip
Ci0gICAgICAgICAgICBub25SZXR1cm5lZE92ZWN0b3Iuc2V0KG9mZnNldFZlY3Rvcik7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG92ZWN0b3ItPnNldChvZmZzZXRWZWN0b3IpOwotCiAgICAg
ICAgIGludCByZXN1bHQgPSBtX3dyZWNGdW5jdGlvbihzLmRhdGEoKSwgc3RhcnRPZmZzZXQsIHMu
c2l6ZSgpLCBvZmZzZXRWZWN0b3IpOwogCiAgICAgICAgIGlmIChyZXN1bHQgPCAwKSB7CkBAIC0y
MjYsOCArMjI5LDggQEAgaW50IFJlZ0V4cDo6bWF0Y2goY29uc3QgVVN0cmluZyYgcywgaW50IHN0
YXJ0T2Zmc2V0LCBPd25BcnJheVB0cjxpbnQ+KiBvdmVjdG9yKQogICAgICAgICAgICAgb2Zmc2V0
VmVjdG9yID0gZml4ZWRTaXplT2Zmc2V0VmVjdG9yOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgb2Zmc2V0VmVjdG9yU2l6ZSA9IChtX251bVN1YnBhdHRlcm5zICsgMSkgKiAzOwotICAg
ICAgICAgICAgb2Zmc2V0VmVjdG9yID0gbmV3IGludCBbb2Zmc2V0VmVjdG9yU2l6ZV07Ci0gICAg
ICAgICAgICBvdmVjdG9yLT5zZXQob2Zmc2V0VmVjdG9yKTsKKyAgICAgICAgICAgIG92ZWN0b3It
PnJlc2l6ZShvZmZzZXRWZWN0b3JTaXplKTsKKyAgICAgICAgICAgIG9mZnNldFZlY3RvciA9IG92
ZWN0b3ItPmRhdGEoKTsKICAgICAgICAgfQogCiAgICAgICAgIGludCBudW1NYXRjaGVzID0ganNS
ZWdFeHBFeGVjdXRlKG1fcmVnRXhwLCByZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4ocy5k
YXRhKCkpLCBzLnNpemUoKSwgc3RhcnRPZmZzZXQsIG9mZnNldFZlY3Rvciwgb2Zmc2V0VmVjdG9y
U2l6ZSk7CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oIGIvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuaAppbmRleCBmM2JlNjU2Li4yNGQ0MTk5IDEwMDY0
NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCisrKyBiL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwLmgKQEAgLTEsNiArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAo
QykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0
IChDKSAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuCiAgKgogICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCkBAIC01Myw3ICs1NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGlzVmFs
aWQoKSBjb25zdCB7IHJldHVybiAhbV9jb25zdHJ1Y3Rpb25FcnJvcjsgfQogICAgICAgICBjb25z
dCBjaGFyKiBlcnJvck1lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0cnVjdGlvbkVycm9y
OyB9CiAKLSAgICAgICAgaW50IG1hdGNoKGNvbnN0IFVTdHJpbmcmLCBpbnQgc3RhcnRPZmZzZXQs
IE93bkFycmF5UHRyPGludD4qIG92ZWN0b3IgPSAwKTsKKyAgICAgICAgaW50IG1hdGNoKGNvbnN0
IFVTdHJpbmcmLCBpbnQgc3RhcnRPZmZzZXQsIFZlY3RvcjxpbnQsIDMyPiogb3ZlY3RvciA9IDAp
OwogICAgICAgICB1bnNpZ25lZCBudW1TdWJwYXR0ZXJucygpIGNvbnN0IHsgcmV0dXJuIG1fbnVt
U3VicGF0dGVybnM7IH0KIAogICAgIHByaXZhdGU6CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwQ29uc3RydWN0b3IuY3BwCmluZGV4IGJjZDBkMDcuLmQxZDU5YmQgMTAwNjQ0Ci0tLSBh
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCisrKyBiL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCkBAIC0xLDYgKzEsNyBAQAog
LyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUu
b3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5j
LgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtOTMsMTQgKzk0LDIxIEBAIHN0cnVjdCBSZWdFeHBD
b25zdHJ1Y3RvclByaXZhdGUgewogICAgIFJlZ0V4cENvbnN0cnVjdG9yUHJpdmF0ZSgpCiAgICAg
ICAgIDogbGFzdE51bVN1YlBhdHRlcm5zKDApCiAgICAgICAgICwgbXVsdGlsaW5lKGZhbHNlKQor
ICAgICAgICAsIGxhc3RPdmVjdG9ySW5kZXgoMCkKICAgICB7CiAgICAgfQogCisgICAgY29uc3Qg
VmVjdG9yPGludCwgMzI+JiBsYXN0T3ZlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG92ZWN0b3JbbGFz
dE92ZWN0b3JJbmRleF07IH0KKyAgICBWZWN0b3I8aW50LCAzMj4mIGxhc3RPdmVjdG9yKCkgeyBy
ZXR1cm4gb3ZlY3RvcltsYXN0T3ZlY3RvckluZGV4XTsgfQorICAgIFZlY3RvcjxpbnQsIDMyPiYg
dGVtcE92ZWN0b3IoKSB7IHJldHVybiBvdmVjdG9yW2xhc3RPdmVjdG9ySW5kZXggPyAwIDogMV07
IH0KKyAgICB2b2lkIGNoYW5nZUxhc3RPdmVjdG9yKCkgeyBsYXN0T3ZlY3RvckluZGV4ID0gbGFz
dE92ZWN0b3JJbmRleCA/IDAgOiAxOyB9CisKICAgICBVU3RyaW5nIGlucHV0OwogICAgIFVTdHJp
bmcgbGFzdElucHV0OwotICAgIE93bkFycmF5UHRyPGludD4gbGFzdE92ZWN0b3I7Ci0gICAgdW5z
aWduZWQgbGFzdE51bVN1YlBhdHRlcm5zIDogMzE7CisgICAgVmVjdG9yPGludCwgMzI+IG92ZWN0
b3JbMl07CisgICAgdW5zaWduZWQgbGFzdE51bVN1YlBhdHRlcm5zIDogMzA7CiAgICAgYm9vbCBt
dWx0aWxpbmUgOiAxOworICAgIHVuc2lnbmVkIGxhc3RPdmVjdG9ySW5kZXggOiAxOwogfTsKIAog
UmVnRXhwQ29uc3RydWN0b3I6OlJlZ0V4cENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgUGFz
c1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSwgUmVnRXhwUHJvdG90eXBlKiByZWdFeHBQcm90
b3R5cGUpCkBAIC0xMjEsMjAgKzEyOSwxOSBAQCBSZWdFeHBDb25zdHJ1Y3Rvcjo6UmVnRXhwQ29u
c3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydQogKi8K
IHZvaWQgUmVnRXhwQ29uc3RydWN0b3I6OnBlcmZvcm1NYXRjaChSZWdFeHAqIHIsIGNvbnN0IFVT
dHJpbmcmIHMsIGludCBzdGFydE9mZnNldCwgaW50JiBwb3NpdGlvbiwgaW50JiBsZW5ndGgsIGlu
dCoqIG92ZWN0b3IpCiB7Ci0gICAgT3duQXJyYXlQdHI8aW50PiB0bXBPdmVjdG9yOwotICAgIHBv
c2l0aW9uID0gci0+bWF0Y2gocywgc3RhcnRPZmZzZXQsICZ0bXBPdmVjdG9yKTsKKyAgICBwb3Np
dGlvbiA9IHItPm1hdGNoKHMsIHN0YXJ0T2Zmc2V0LCAmZC0+dGVtcE92ZWN0b3IoKSk7CiAKICAg
ICBpZiAob3ZlY3RvcikKLSAgICAgICAgKm92ZWN0b3IgPSB0bXBPdmVjdG9yLmdldCgpOworICAg
ICAgICAqb3ZlY3RvciA9IGQtPnRlbXBPdmVjdG9yKCkuZGF0YSgpOwogCiAgICAgaWYgKHBvc2l0
aW9uICE9IC0xKSB7Ci0gICAgICAgIEFTU0VSVCh0bXBPdmVjdG9yKTsKKyAgICAgICAgQVNTRVJU
KCFkLT50ZW1wT3ZlY3RvcigpLmlzRW1wdHkoKSk7CiAKLSAgICAgICAgbGVuZ3RoID0gdG1wT3Zl
Y3RvclsxXSAtIHRtcE92ZWN0b3JbMF07CisgICAgICAgIGxlbmd0aCA9IGQtPnRlbXBPdmVjdG9y
KClbMV0gLSBkLT50ZW1wT3ZlY3RvcigpWzBdOwogCiAgICAgICAgIGQtPmlucHV0ID0gczsKICAg
ICAgICAgZC0+bGFzdElucHV0ID0gczsKLSAgICAgICAgZC0+bGFzdE92ZWN0b3Iuc2V0KHRtcE92
ZWN0b3IucmVsZWFzZSgpKTsKKyAgICAgICAgZC0+Y2hhbmdlTGFzdE92ZWN0b3IoKTsKICAgICAg
ICAgZC0+bGFzdE51bVN1YlBhdHRlcm5zID0gci0+bnVtU3VicGF0dGVybnMoKTsKICAgICB9CiB9
CkBAIC0xNDcsOCArMTU0LDggQEAgUmVnRXhwTWF0Y2hlc0FycmF5OjpSZWdFeHBNYXRjaGVzQXJy
YXkoRXhlY1N0YXRlKiBleGVjLCBSZWdFeHBDb25zdHJ1Y3RvclByaXZhdGUKICAgICBkLT5sYXN0
SW5wdXQgPSBkYXRhLT5sYXN0SW5wdXQ7CiAgICAgZC0+bGFzdE51bVN1YlBhdHRlcm5zID0gZGF0
YS0+bGFzdE51bVN1YlBhdHRlcm5zOwogICAgIHVuc2lnbmVkIG9mZnNldFZlY3RvclNpemUgPSAo
ZGF0YS0+bGFzdE51bVN1YlBhdHRlcm5zICsgMSkgKiAyOyAvLyBvbmx5IGNvcHlpbmcgdGhlIHJl
c3VsdCBwYXJ0IG9mIHRoZSB2ZWN0b3IKLSAgICBkLT5sYXN0T3ZlY3Rvci5zZXQobmV3IGludFtv
ZmZzZXRWZWN0b3JTaXplXSk7Ci0gICAgbWVtY3B5KGQtPmxhc3RPdmVjdG9yLmdldCgpLCBkYXRh
LT5sYXN0T3ZlY3Rvci5nZXQoKSwgb2Zmc2V0VmVjdG9yU2l6ZSAqIHNpemVvZihpbnQpKTsKKyAg
ICBkLT5sYXN0T3ZlY3RvcigpLnJlc2l6ZShvZmZzZXRWZWN0b3JTaXplKTsKKyAgICBtZW1jcHko
ZC0+bGFzdE92ZWN0b3IoKS5kYXRhKCksIGRhdGEtPmxhc3RPdmVjdG9yKCkuZGF0YSgpLCBvZmZz
ZXRWZWN0b3JTaXplICogc2l6ZW9mKGludCkpOwogICAgIC8vIGQtPm11bHRpbGluZSBpcyBub3Qg
bmVlZGVkLCBhbmQgcmVtYWlucyB1bmluaXRpYWxpemVkCiAKICAgICBzZXRMYXp5Q3JlYXRpb25E
YXRhKGQpOwpAQCAtMTY3LDEzICsxNzQsMTMgQEAgdm9pZCBSZWdFeHBNYXRjaGVzQXJyYXk6OmZp
bGxBcnJheUluc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYykKICAgICB1bnNpZ25lZCBsYXN0TnVtU3Vi
cGF0dGVybnMgPSBkLT5sYXN0TnVtU3ViUGF0dGVybnM7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDw9IGxhc3ROdW1TdWJwYXR0ZXJuczsgKytpKSB7Ci0gICAgICAgIGludCBzdGFydCA9
IGQtPmxhc3RPdmVjdG9yWzIgKiBpXTsKKyAgICAgICAgaW50IHN0YXJ0ID0gZC0+bGFzdE92ZWN0
b3IoKVsyICogaV07CiAgICAgICAgIGlmIChzdGFydCA+PSAwKQotICAgICAgICAgICAgSlNBcnJh
eTo6cHV0KGV4ZWMsIGksIGpzU3Vic3RyaW5nKGV4ZWMsIGQtPmxhc3RJbnB1dCwgc3RhcnQsIGQt
Pmxhc3RPdmVjdG9yWzIgKiBpICsgMV0gLSBzdGFydCkpOworICAgICAgICAgICAgSlNBcnJheTo6
cHV0KGV4ZWMsIGksIGpzU3Vic3RyaW5nKGV4ZWMsIGQtPmxhc3RJbnB1dCwgc3RhcnQsIGQtPmxh
c3RPdmVjdG9yKClbMiAqIGkgKyAxXSAtIHN0YXJ0KSk7CiAgICAgfQogCiAgICAgUHV0UHJvcGVy
dHlTbG90IHNsb3Q7Ci0gICAgSlNBcnJheTo6cHV0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5pbmRleCwganNOdW1iZXIoZXhlYywgZC0+bGFzdE92ZWN0b3JbMF0pLCBzbG90KTsKKyAgICBK
U0FycmF5OjpwdXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmluZGV4LCBqc051bWJlcihl
eGVjLCBkLT5sYXN0T3ZlY3RvcigpWzBdKSwgc2xvdCk7CiAgICAgSlNBcnJheTo6cHV0KGV4ZWMs
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5pbnB1dCwganNTdHJpbmcoZXhlYywgZC0+aW5wdXQpLCBz
bG90KTsKIAogICAgIGRlbGV0ZSBkOwpAQCAtMTg3LDEwICsxOTQsMTAgQEAgSlNPYmplY3QqIFJl
Z0V4cENvbnN0cnVjdG9yOjphcnJheU9mTWF0Y2hlcyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiAK
IEpTVmFsdWUgUmVnRXhwQ29uc3RydWN0b3I6OmdldEJhY2tyZWYoRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBpKSBjb25zdAogewotICAgIGlmIChkLT5sYXN0T3ZlY3RvciAmJiBpIDw9IGQtPmxh
c3ROdW1TdWJQYXR0ZXJucykgewotICAgICAgICBpbnQgc3RhcnQgPSBkLT5sYXN0T3ZlY3Rvclsy
ICogaV07CisgICAgaWYgKCFkLT5sYXN0T3ZlY3RvcigpLmlzRW1wdHkoKSAmJiBpIDw9IGQtPmxh
c3ROdW1TdWJQYXR0ZXJucykgeworICAgICAgICBpbnQgc3RhcnQgPSBkLT5sYXN0T3ZlY3Rvcigp
WzIgKiBpXTsKICAgICAgICAgaWYgKHN0YXJ0ID49IDApCi0gICAgICAgICAgICByZXR1cm4ganNT
dWJzdHJpbmcoZXhlYywgZC0+bGFzdElucHV0LCBzdGFydCwgZC0+bGFzdE92ZWN0b3JbMiAqIGkg
KyAxXSAtIHN0YXJ0KTsKKyAgICAgICAgICAgIHJldHVybiBqc1N1YnN0cmluZyhleGVjLCBkLT5s
YXN0SW5wdXQsIHN0YXJ0LCBkLT5sYXN0T3ZlY3RvcigpWzIgKiBpICsgMV0gLSBzdGFydCk7CiAg
ICAgfQogICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKGV4ZWMpOwogfQpAQCAtMjAwLDI0ICsyMDcs
MjQgQEAgSlNWYWx1ZSBSZWdFeHBDb25zdHJ1Y3Rvcjo6Z2V0TGFzdFBhcmVuKEV4ZWNTdGF0ZSog
ZXhlYykgY29uc3QKICAgICB1bnNpZ25lZCBpID0gZC0+bGFzdE51bVN1YlBhdHRlcm5zOwogICAg
IGlmIChpID4gMCkgewogICAgICAgICBBU1NFUlQoZC0+bGFzdE92ZWN0b3IpOwotICAgICAgICBp
bnQgc3RhcnQgPSBkLT5sYXN0T3ZlY3RvclsyICogaV07CisgICAgICAgIGludCBzdGFydCA9IGQt
Pmxhc3RPdmVjdG9yKClbMiAqIGldOwogICAgICAgICBpZiAoc3RhcnQgPj0gMCkKLSAgICAgICAg
ICAgIHJldHVybiBqc1N1YnN0cmluZyhleGVjLCBkLT5sYXN0SW5wdXQsIHN0YXJ0LCBkLT5sYXN0
T3ZlY3RvclsyICogaSArIDFdIC0gc3RhcnQpOworICAgICAgICAgICAgcmV0dXJuIGpzU3Vic3Ry
aW5nKGV4ZWMsIGQtPmxhc3RJbnB1dCwgc3RhcnQsIGQtPmxhc3RPdmVjdG9yKClbMiAqIGkgKyAx
XSAtIHN0YXJ0KTsKICAgICB9CiAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoZXhlYyk7CiB9CiAK
IEpTVmFsdWUgUmVnRXhwQ29uc3RydWN0b3I6OmdldExlZnRDb250ZXh0KEV4ZWNTdGF0ZSogZXhl
YykgY29uc3QKIHsKLSAgICBpZiAoZC0+bGFzdE92ZWN0b3IpCi0gICAgICAgIHJldHVybiBqc1N1
YnN0cmluZyhleGVjLCBkLT5sYXN0SW5wdXQsIDAsIGQtPmxhc3RPdmVjdG9yWzBdKTsKKyAgICBp
ZiAoIWQtPmxhc3RPdmVjdG9yKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4ganNTdWJzdHJp
bmcoZXhlYywgZC0+bGFzdElucHV0LCAwLCBkLT5sYXN0T3ZlY3RvcigpWzBdKTsKICAgICByZXR1
cm4ganNFbXB0eVN0cmluZyhleGVjKTsKIH0KIAogSlNWYWx1ZSBSZWdFeHBDb25zdHJ1Y3Rvcjo6
Z2V0UmlnaHRDb250ZXh0KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKLSAgICBpZiAoZC0+bGFz
dE92ZWN0b3IpCi0gICAgICAgIHJldHVybiBqc1N1YnN0cmluZyhleGVjLCBkLT5sYXN0SW5wdXQs
IGQtPmxhc3RPdmVjdG9yWzFdLCBkLT5sYXN0SW5wdXQuc2l6ZSgpIC0gZC0+bGFzdE92ZWN0b3Jb
MV0pOworICAgIGlmICghZC0+bGFzdE92ZWN0b3IoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBqc1N1YnN0cmluZyhleGVjLCBkLT5sYXN0SW5wdXQsIGQtPmxhc3RPdmVjdG9yKClbMV0sIGQt
Pmxhc3RJbnB1dC5zaXplKCkgLSBkLT5sYXN0T3ZlY3RvcigpWzFdKTsKICAgICByZXR1cm4ganNF
bXB0eVN0cmluZyhleGVjKTsKIH0KICAgICAKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5n
UHJvdG90eXBlLmNwcAppbmRleCBkNjkzOWNiLi5jZWI2YjFlIDEwMDY0NAotLS0gYS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqICBDb3B5
cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5j
LgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNTc1LDcgKzU3Niw3IEBAIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTcGxpdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZSB0CiAgICAgICAgIH0KICAgICAgICAgaW50IHBvcyA9IDA7CiAgICAgICAgIHdoaWxl
IChpICE9IGxpbWl0ICYmIHBvcyA8IHMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBPd25BcnJheVB0
cjxpbnQ+IG92ZWN0b3I7CisgICAgICAgICAgICBWZWN0b3I8aW50LCAzMj4gb3ZlY3RvcjsKICAg
ICAgICAgICAgIGludCBtcG9zID0gcmVnLT5tYXRjaChzLCBwb3MsICZvdmVjdG9yKTsKICAgICAg
ICAgICAgIGlmIChtcG9zIDwgMCkKICAgICAgICAgICAgICAgICBicmVhazsK
</data>
<flag name="review"
          id="16732"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>