<?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>118455</bug_id>
          
          <creation_ts>2013-07-07 21:50:54 -0700</creation_ts>
          <short_desc>Investigate HashTable::HashTable(const HashTable&amp;) and HashTable::operator=(const HashTable&amp;) performance for hash-based static analyses</short_desc>
          <delta_ts>2015-08-03 08:55:55 -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>Web Template Framework</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>achristensen</cc>
    
    <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>ossy</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>906667</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-07 21:50:54 -0700</bug_when>
    <thetext>Currently HashTable::HashTable(const HashTable&amp;) does a dumb copy, and HashTable::operator=(const HashTable&amp;) deletes the existing backing store and uses the machinery of the copy-constructor.

It&apos;s likely that this can be improved, for static analyses that use HashSets. Taking a HashSet that has 10ish elements and replacing its contents with that of another HashSet that also has 10ish elements will probably work better if we (a) don&apos;t free and then allocate the backing store and (b) just memcpy the elements if possible.  There are a bunch of optimizations we can do here, and it&apos;s not clear yet if we need them, but it&apos;s definitely worth investigating.

This is related to https://bugs.webkit.org/show_bug.cgi?id=118338, since the SSA work will lead to more static analyses using hashes, and it will copy the hashes a lot, in a fixpoint.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906668</commentid>
    <comment_count>1</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-07-07 22:00:17 -0700</bug_when>
    <thetext>Finally. I have been meaning to improve this for a long time. (We should also make sure we have a good move constructor).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>929186</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-09-14 01:03:45 -0700</bug_when>
    <thetext>Sam&apos;s point about a move constructor is a good one. That&apos;s trivial to write and we should do it ASAP.

Obvious starting point for the copy constructor is to reuse the layout of the hash table. Allocate one of the same size and just move over the slots. Hard to see a reason that would be a bad thing. And that solves most of the badness.

Then there&apos;s Phil’s comment that we should use memcpy when we can. Might take a bit of traits work to enable that optimization.

Assignment operator should not need to change. It should be plenty efficient to implement it in terms of copy and swap.

Move assignment operator should also be easy to build out of a move constructor and swap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113931</commentid>
    <comment_count>3</comment_count>
      <attachid>257982</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-07-31 17:37:52 -0700</bug_when>
    <thetext>Created attachment 257982
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113932</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-31 17:40:15 -0700</bug_when>
    <thetext>Attachment 257982 did not pass style-queue:


ERROR: Source/WTF/wtf/HashTable.h:810:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1 in 6 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>1113957</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-31 19:19:32 -0700</bug_when>
    <thetext>Removing &quot;fourthTier&quot; prefix since we used that for code that landed on the old FTL branch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114146</commentid>
    <comment_count>6</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-08-02 21:33:22 -0700</bug_when>
    <thetext>Committed r187733: &lt;http://trac.webkit.org/changeset/187733&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114156</commentid>
    <comment_count>7</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-08-03 02:58:42 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Committed r187733: &lt;http://trac.webkit.org/changeset/187733&gt;

It broke the Apple Windows build:

..\PageLoadTestClient.cpp(237): error C2039: &apos;wtf_pow&apos; : is not a member of &apos;std&apos; [C:\cygwin\home\buildbot\slave\win-release\build\Tools\WinLauncher\WinLauncher.vcxproj\WinLauncherLib.vcxproj]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114194</commentid>
    <comment_count>8</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-08-03 08:55:55 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/187738</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257982</attachid>
            <date>2015-07-31 17:37:52 -0700</date>
            <delta_ts>2015-07-31 19:18:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-118455-20150731173750.patch</filename>
            <type>text/plain</type>
            <size>12792</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg3NTcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
YTFmMGY5MzgwZTBjZGU0NmY5ZWMxNzJmM2MyNzUzMTVmMWI4ZmYxLi5lMGI2NWYzM2ZmNzVjN2Qx
NzgyYjJmYmNkZGRkNjljMGRjNWM3YzRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNSBAQAorMjAxNS0wNy0zMSAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBmb3VydGhUaWVyOiBJbnZlc3RpZ2F0ZSBIYXNoVGFibGU6Okhhc2hU
YWJsZShjb25zdCBIYXNoVGFibGUmKSBhbmQgSGFzaFRhYmxlOjpvcGVyYXRvcj0oY29uc3QgSGFz
aFRhYmxlJikgcGVyZm9ybWFuY2UgZm9yIGhhc2gtYmFzZWQgc3RhdGljIGFuYWx5c2VzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg0NTUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBMaXZlbmVzc0FuYWx5
c2lzUGhhc2UgbGlnaHRzIHVwIGxpa2UgYSBjaHJpc3RtYXMgdHJlZSBpbiBwcm9maWxlcy4KKwor
ICAgICAgICBUaGlzIHBhdGNoIGN1dHMgaXRzIGNvc3QgYnkgNC4KKyAgICAgICAgQWJvdXQgaGFs
ZiBvZiB0aGUgZ2FpbnMgY29tZSBmcm9tIHJlbW92aW5nIG1hbnkgcmVoYXNoKCkgd2hlbiBjb3B5
aW5nCisgICAgICAgIHRoZSBIYXNoU2V0LgorICAgICAgICBUaGUgbGFzdCBxdWFydGVyIGlzIGFj
aGlldmVkIGJ5IGhhdmluZyBhIHNwZWNpYWwgYWRkKCkgZnVuY3Rpb24gZm9yIGluaXRpYWxpemlu
ZworICAgICAgICBhIEhhc2hTZXQuCisKKyAgICAgICAgVGhpcyBtYWtlcyBiZW5jaG1hcmtzIHBy
b2dyZXNzIGJ5IDEtMiUgaGVyZSBhbmQgdGhlcmUuIE5vdGhpbmcgbWFzc2l2ZS4KKworICAgICAg
ICAqIGRmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkxpdmVuZXNzQW5hbHlzaXNQaGFzZTo6cHJvY2Vzcyk6CisgICAgICAgIFRoZSBtX2xpdmUgSGFz
aFNldCBpcyBvbmx5IHVzZWZ1bCBwZXIgYmxvY2suIFdoZW4gd2UgYXJlIGRvbmUgd2l0aCBpdCwK
KyAgICAgICAgd2UgY2FuIHRyYW5zZmVyIGl0IHRvIGxpdmVBdEhlYWQgdG8gYXZvaWQgYSBjb3B5
LgorCiAyMDE1LTA3LTI5ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4K
IAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTg3NTUwLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCA4OWZjOGY1
NWQ3NDgxZjhhMjI3ZTdiY2NkN2Y1NTY5MWZiYmMwNTgyLi4wMmE2M2E2MDJlMmU3ZTNhMzA3MWFk
ZGVlMzBkODIwYjNiMGFmNmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDE1LTA3LTMxICBCZW5q
YW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgorCisgICAgICAgIGZvdXJ0aFRpZXI6
IEludmVzdGlnYXRlIEhhc2hUYWJsZTo6SGFzaFRhYmxlKGNvbnN0IEhhc2hUYWJsZSYpIGFuZCBI
YXNoVGFibGU6Om9wZXJhdG9yPShjb25zdCBIYXNoVGFibGUmKSBwZXJmb3JtYW5jZSBmb3IgaGFz
aC1iYXNlZCBzdGF0aWMgYW5hbHlzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExODQ1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFByZXZpb3VzbHksIHdoZW4gY29weWluZyBhIEhhc2hUYWJsZSwgd2Ug
d291bGQgc3RhcnQgZnJvbSBzY3JhdGNoCisgICAgICAgIHdpdGggYW4gZW1wdHkgdGFibGUgYW5k
IGluc2VydCBlbGVtZW50cyBvbmUgYnkgb25lLCBncm93aW5nLXJlaGFzaGluZworICAgICAgICB0
aGUgdGFibGUgYXMgbmVlZGVkLgorCisgICAgICAgIFdpdGggdGhpcyBwYXRjaCwgd2UgaGF2ZSAy
IGltcHJvdmVtZW50cyB0byByZW1vdmUgbW9zdCBvZiB0aGUgY29zdC4KKworICAgICAgICBGaXJz
dCwgd2UgY29tcHV0ZSBhIGdvb2Qgc2l6ZSBmcm9tIHRoZSBzdGFydC4gVGhpcyByZW1vdmVzIGFs
bCB0aGUKKyAgICAgICAgcmVhbGxvY2F0aW9ucyBhbmQgcmVoYXNocy4KKyAgICAgICAgVGhpcyBp
cyB3aGVyZSB0aGUgYmlnZ2VzdCBnYWluIGNvbWVzIGZyb20uCisKKyAgICAgICAgVGhlIHNlY29u
ZCBwYXJ0IGlzIGEgc2ltcGxlciB2ZXJzaW9uIG9mIGFkZCgpIHdoZW4gd2Uga25vdyB0aGF0Cisg
ICAgICAgIHdlIGNhbm5vdCBmaW5kIGEgYnVja2V0IHdpdGggdGhlIHNhbWUga2V5IGFuZCB0aGVy
ZSBjYW5ub3QKKyAgICAgICAgYmUgYW55IGRlbGV0ZWQgYnVja2V0LgorICAgICAgICBUaGlzIHJl
bW92ZXMgbW9zdCBicmFuY2hlcyBmcm9tIHRoZSBob3QgbG9vcCwgY3V0dGluZyBhbm90aGVyIDI1
JQorICAgICAgICBvZiB0aGUgdGltZS4KKworICAgICAgICAqIHd0Zi9IYXNoVGFibGUuaDoKKyAg
ICAgICAgKFdURjo6S2V5VHJhaXRzPjo6YWRkVW5pcXVlRm9ySW5pdGlhbGl6YXRpb24pOgorICAg
ICAgICAoV1RGOjpLZXlUcmFpdHM+OjpIYXNoVGFibGUpOgorCiAyMDE1LTA3LTI5ICBCYXNpbGUg
Q2xlbWVudCAgPGJhc2lsZV9jbGVtZW50QGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgbmF0
aXZlIGNhbGwgaW5saW5pbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcAppbmRleCBiMmRjNGQyYjBmNzc2MDllYTg0YWQ3
MGJkMjMxNTYxYmJiMzc3ZmNiLi43NDk2NjE2ZDE4YzAwMjdlNzA3Zjk2ZjhlZjEzYjI0OGZiZTM2
MTcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVuZXNzQW5h
bHlzaXNQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVz
c0FuYWx5c2lzUGhhc2UuY3BwCkBAIC04NCw5ICs4NCw3IEBAIHByaXZhdGU6CiAgICAgICAgIEJh
c2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgaWYg
KCFibG9jaykKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIC8vIEZJWE1F
OiBJdCdzIGxpa2VseSB0aGF0IHRoaXMgY2FuIGJlIGltcHJvdmVkLCBmb3Igc3RhdGljIGFuYWx5
c2VzIHRoYXQgdXNlCi0gICAgICAgIC8vIEhhc2hTZXRzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTE4NDU1CisKICAgICAgICAgbV9saXZlID0gYmxvY2stPnNzYS0+
bGl2ZUF0VGFpbDsKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0g
YmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7CkBAIC0xMzQsOSArMTMyLDkgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgICAgIG1fY2hhbmdlZCA9IHRy
dWU7Ci0gICAgICAgIGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQgPSBtX2xpdmU7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBpLS07KQogICAgICAg
ICAgICAgYmxvY2stPnByZWRlY2Vzc29yc1tpXS0+c3NhLT5saXZlQXRUYWlsLmFkZChtX2xpdmUu
YmVnaW4oKSwgbV9saXZlLmVuZCgpKTsKKyAgICAgICAgYmxvY2stPnNzYS0+bGl2ZUF0SGVhZCA9
IFdURjo6bW92ZShtX2xpdmUpOwogICAgIH0KICAgICAKICAgICB2b2lkIGFkZENoaWxkVXNlKE5v
ZGUqLCBFZGdlJiBlZGdlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAppbmRleCAxNDU0NTEyMmQ1NWM2NzBlZTkxNWNm
NjQ0ZDU0OWU2NDRlZWE4NDhiLi4zNDQ4MGM3ZThlYmEyYzMzYzhjMjI2MWMyMDFmNTY1ZTk0MzFk
YWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9IYXNoVGFibGUuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvSGFz
aFRyYWl0cy5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9WYWx1ZUNoZWNrLmg+CiAKQEAgLTQzMSw2ICs0
MzIsOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRy
YW5zbGF0b3IsIHR5cGVuYW1lIFQ+IEZ1bGxMb29rdXBUeXBlIGZ1bGxMb29rdXBGb3JXcml0aW5n
KGNvbnN0IFQmKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5
cGVuYW1lIFQ+IExvb2t1cFR5cGUgbG9va3VwRm9yV3JpdGluZyhjb25zdCBUJik7CiAKKyAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQsIHR5cGVuYW1l
IEV4dHJhPiB2b2lkIGFkZFVuaXF1ZUZvckluaXRpYWxpemF0aW9uKFQmJiBrZXksIEV4dHJhJiYp
OworCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBU
PiB2b2lkIGNoZWNrS2V5KGNvbnN0IFQmKTsKIAogICAgICAgICB2b2lkIHJlbW92ZUFuZEludmFs
aWRhdGVXaXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKFZhbHVlVHlwZSopOwpAQCAtNzYxLDYg
Kzc2NCw1OSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgfQogICAgIH0KIAorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlw
ZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQsIHR5cGVu
YW1lIEV4dHJhPgorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwg
RXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OmFkZFVuaXF1ZUZv
ckluaXRpYWxpemF0aW9uKFQmJiBrZXksIEV4dHJhJiYgZXh0cmEpCisgICAgeworICAgICAgICBB
U1NFUlQobV90YWJsZSk7CisKKyAgICAgICAgY2hlY2tLZXk8SGFzaFRyYW5zbGF0b3I+KGtleSk7
CisKKyAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygpOworCisgICAgICAgIGludGVybmFsQ2hl
Y2tUYWJsZUNvbnNpc3RlbmN5KCk7CisKKyAgICAgICAgdW5zaWduZWQgayA9IDA7CisgICAgICAg
IFZhbHVlVHlwZSogdGFibGUgPSBtX3RhYmxlOworICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9
IG1fdGFibGVTaXplTWFzazsKKyAgICAgICAgdW5zaWduZWQgaCA9IEhhc2hUcmFuc2xhdG9yOjpo
YXNoKGtleSk7CisgICAgICAgIHVuc2lnbmVkIGkgPSBoICYgc2l6ZU1hc2s7CisKKyNpZiBEVU1Q
X0hBU0hUQUJMRV9TVEFUUworICAgICAgICArK0hhc2hUYWJsZVN0YXRzOjpudW1BY2Nlc3NlczsK
KyAgICAgICAgdW5zaWduZWQgcHJvYmVDb3VudCA9IDA7CisjZW5kaWYKKworI2lmIERVTVBfSEFT
SFRBQkxFX1NUQVRTX1BFUl9UQUJMRQorICAgICAgICArK21fc3RhdHMtPm51bUFjY2Vzc2VzOwor
I2VuZGlmCisKKyAgICAgICAgVmFsdWVUeXBlKiBlbnRyeTsKKyAgICAgICAgd2hpbGUgKDEpIHsK
KyAgICAgICAgICAgIGVudHJ5ID0gdGFibGUgKyBpOworCisgICAgICAgICAgICBpZiAoaXNFbXB0
eUJ1Y2tldCgqZW50cnkpKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisjaWYgRFVNUF9IQVNI
VEFCTEVfU1RBVFMKKyAgICAgICAgICAgICsrcHJvYmVDb3VudDsKKyAgICAgICAgICAgIEhhc2hU
YWJsZVN0YXRzOjpyZWNvcmRDb2xsaXNpb25BdENvdW50KHByb2JlQ291bnQpOworI2VuZGlmCisK
KyNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUU19QRVJfVEFCTEUKKyAgICAgICAgICAgIG1fc3RhdHMt
PnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7CisjZW5kaWYKKworICAgICAgICAg
ICAgaWYgKGsgPT0gMCkKKyAgICAgICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goaCk7Cisg
ICAgICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNrOworICAgICAgICB9CisKKyAgICAgICAg
SGFzaFRyYW5zbGF0b3I6OnRyYW5zbGF0ZSgqZW50cnksIHN0ZDo6Zm9yd2FyZDxUPihrZXkpLCBz
dGQ6OmZvcndhcmQ8RXh0cmE+KGV4dHJhKSk7CisKKyAgICAgICAgaW50ZXJuYWxDaGVja1RhYmxl
Q29uc2lzdGVuY3koKTsKKyAgICB9CisKICAgICB0ZW1wbGF0ZTxib29sIGVtcHR5VmFsdWVJc1pl
cm8+IHN0cnVjdCBIYXNoVGFibGVCdWNrZXRJbml0aWFsaXplcjsKIAogICAgIHRlbXBsYXRlPD4g
c3RydWN0IEhhc2hUYWJsZUJ1Y2tldEluaXRpYWxpemVyPGZhbHNlPiB7CkBAIC0xMTU1LDI2ICsx
MjExLDQwIEBAIG5hbWVzcGFjZSBXVEYgewogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICBIYXNoVGFibGU8S2V5
LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46Okhh
c2hUYWJsZShjb25zdCBIYXNoVGFibGUmIG90aGVyKQotICAgICAgICA6IG1fdGFibGUoMCkKKyAg
ICAgICAgOiBtX3RhYmxlKG51bGxwdHIpCiAgICAgICAgICwgbV90YWJsZVNpemUoMCkKICAgICAg
ICAgLCBtX3RhYmxlU2l6ZU1hc2soMCkKICAgICAgICAgLCBtX2tleUNvdW50KDApCiAgICAgICAg
ICwgbV9kZWxldGVkQ291bnQoMCkKICNpZiBDSEVDS19IQVNIVEFCTEVfSVRFUkFUT1JTCi0gICAg
ICAgICwgbV9pdGVyYXRvcnMoMCkKKyAgICAgICAgLCBtX2l0ZXJhdG9ycyhudWxscHRyKQogICAg
ICAgICAsIG1fbXV0ZXgoc3RkOjptYWtlX3VuaXF1ZTxzdGQ6Om11dGV4PigpKQogI2VuZGlmCiAj
aWYgRFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxFCiAgICAgICAgICwgbV9zdGF0cyhzdGQ6
Om1ha2VfdW5pcXVlPFN0YXRzPigqb3RoZXIubV9zdGF0cykpCiAjZW5kaWYKICAgICB7Ci0gICAg
ICAgIC8vIENvcHkgdGhlIGhhc2ggdGFibGUgdGhlIGR1bWIgd2F5LCBieSBhZGRpbmcgZWFjaCBl
bGVtZW50IHRvIHRoZSBuZXcgdGFibGUuCi0gICAgICAgIC8vIEl0IG1pZ2h0IGJlIG1vcmUgZWZm
aWNpZW50IHRvIGNvcHkgdGhlIHRhYmxlIHNsb3RzLCBidXQgaXQncyBub3QgY2xlYXIgdGhhdCBl
ZmZpY2llbmN5IGlzIG5lZWRlZC4KLSAgICAgICAgLy8gRklYTUU6IEl0J3MgbGlrZWx5IHRoYXQg
dGhpcyBjYW4gYmUgaW1wcm92ZWQsIGZvciBzdGF0aWMgYW5hbHlzZXMgdGhhdCB1c2UKLSAgICAg
ICAgLy8gSGFzaFNldHMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MTg0NTUKLSAgICAgICAgY29uc3RfaXRlcmF0b3IgZW5kID0gb3RoZXIuZW5kKCk7Ci0gICAgICAg
IGZvciAoY29uc3RfaXRlcmF0b3IgaXQgPSBvdGhlci5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
Ci0gICAgICAgICAgICBhZGQoKml0KTsKKyAgICAgICAgdW5zaWduZWQgb3RoZXJLZXlDb3VudCA9
IG90aGVyLnNpemUoKTsKKyAgICAgICAgaWYgKCFvdGhlcktleUNvdW50KQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIHVuc2lnbmVkIGJlc3RUYWJsZVNpemUgPSBXVEY6OnJvdW5kVXBU
b1Bvd2VyT2ZUd28ob3RoZXJLZXlDb3VudCkgKiAyOworCisgICAgICAgIC8vIFdpdGggbWF4TG9h
ZCBhdCAxLzIgYW5kIG1pbkxvYWQgYXQgMS82LCBvdXIgYXZlcmFnZSBsb2FkIGlzIDIvNi4KKyAg
ICAgICAgLy8gSWYgd2UgYXJlIGdldHRpbmcgaGFsZndheSBiZXR3ZWVuIDIvNiBhbmQgMS8yIChw
YXN0IDUvMTIpLCB3ZSBkb3VibGUgdGhlIHNpemUgdG8gYXZvaWQgYmVpbmcgdG9vIGNsb3NlIHRv
CisgICAgICAgIC8vIGxvYWRNYXggYW5kIGJyaW5nIHRoZSByYXRpbyBjbG9zZSB0byAyLzYuIFRo
aXMgZ2l2ZSB1cyBhIGxvYWQgaW4gdGhlIGJvdW5kcyBbMy8xMiwgNS8xMikuCisgICAgICAgIGJv
b2wgYWJvdmVUaHJlZVF1YXJ0ZXJMb2FkID0gb3RoZXJLZXlDb3VudCAqIDEyID49IGJlc3RUYWJs
ZVNpemUgKiA1OworICAgICAgICBpZiAoYWJvdmVUaHJlZVF1YXJ0ZXJMb2FkKQorICAgICAgICAg
ICAgYmVzdFRhYmxlU2l6ZSAqPSAyOworCisgICAgICAgIHVuc2lnbmVkIG1pbmltdW1UYWJsZVNp
emUgPSBLZXlUcmFpdHM6Om1pbmltdW1UYWJsZVNpemU7CisgICAgICAgIG1fdGFibGVTaXplID0g
c3RkOjptYXg8dW5zaWduZWQ+KGJlc3RUYWJsZVNpemUsIG1pbmltdW1UYWJsZVNpemUpOworICAg
ICAgICBtX3RhYmxlU2l6ZU1hc2sgPSBtX3RhYmxlU2l6ZSAtIDE7CisgICAgICAgIG1fa2V5Q291
bnQgPSBvdGhlcktleUNvdW50OworICAgICAgICBtX3RhYmxlID0gYWxsb2NhdGVUYWJsZShtX3Rh
YmxlU2l6ZSk7CisKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBvdGhlclZhbHVlIDogb3RoZXIp
CisgICAgICAgICAgICBhZGRVbmlxdWVGb3JJbml0aWFsaXphdGlvbjxJZGVudGl0eVRyYW5zbGF0
b3JUeXBlPihFeHRyYWN0b3I6OmV4dHJhY3Qob3RoZXJWYWx1ZSksIG90aGVyVmFsdWUpOwogICAg
IH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1l
IEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBl
bmFtZSBLZXlUcmFpdHM+CkBAIC0xMTk3LDggKzEyNjcsNiBAQCBuYW1lc3BhY2UgV1RGIHsKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0
b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5
VHJhaXRzPgogICAgIGF1dG8gSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpvcGVyYXRvcj0oY29uc3QgSGFzaFRhYmxlJiBv
dGhlcikgLT4gSGFzaFRhYmxlJgogICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEl0J3MgbGlrZWx5
IHRoYXQgdGhpcyBjYW4gYmUgaW1wcm92ZWQsIGZvciBzdGF0aWMgYW5hbHlzZXMgdGhhdCB1c2UK
LSAgICAgICAgLy8gSGFzaFNldHMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTg0NTUKICAgICAgICAgSGFzaFRhYmxlIHRtcChvdGhlcik7CiAgICAgICAgIHN3YXAo
dG1wKTsKICAgICAgICAgcmV0dXJuICp0aGlzOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9n
IGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDgwZmI3ZTc0MWQ4ZTA5NTczMzIzZjkyYTg1YWVjYmVi
ZGVmZWQxMjUuLjYwODVjODkyODFhNTdjMGVjMDk4MTFiODA1OTY5ZDE1ZTM4ODE4N2YgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
MyBAQAorMjAxNS0wNy0zMSAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNvbT4K
KworICAgICAgICBmb3VydGhUaWVyOiBJbnZlc3RpZ2F0ZSBIYXNoVGFibGU6Okhhc2hUYWJsZShj
b25zdCBIYXNoVGFibGUmKSBhbmQgSGFzaFRhYmxlOjpvcGVyYXRvcj0oY29uc3QgSGFzaFRhYmxl
JikgcGVyZm9ybWFuY2UgZm9yIGhhc2gtYmFzZWQgc3RhdGljIGFuYWx5c2VzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg0NTUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL0hhc2hTZXQuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIw
MTUtMDctMjggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFtHVEtdIEFkZCBBUEkgdG8gc2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiB3ZWIgcHJv
Y2Vzc2VzIHBlciBXZWJLaXRXZWJDb250ZXh0CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9IYXNoU2V0LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L0hhc2hTZXQuY3BwCmluZGV4IGRkYjE3OGM3MjU4NGZmY2I4ZmIzMTRkODhlOGIxNTk0ZmJhMTFk
Y2QuLjc5Y2I1ZTcyNzE4Y2M1MmFmMjI3NzQyMTYzYjNmYWE5OWJjZDZkYmUgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hTZXQuY3BwCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hTZXQuY3BwCkBAIC0yMDYsNCArMjA2LDc1IEBAIFRF
U1QoV1RGX0hhc2hTZXQsIFVuaXF1ZVB0cktleV9UYWtlVXNpbmdSYXdQb2ludGVyKQogICAgIEVY
UEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3Vu
dCk7CiB9CiAKK1RFU1QoV1RGX0hhc2hTZXQsIENvcHlFbXB0eSkKK3sKKyAgICB7CisgICAgICAg
IEhhc2hTZXQ8dW5zaWduZWQ+IGZvbzsKKyAgICAgICAgSGFzaFNldDx1bnNpZ25lZD4gYmFyKGZv
byk7CisKKyAgICAgICAgRVhQRUNUX0VRKDB1LCBiYXIuY2FwYWNpdHkoKSk7CisgICAgICAgIEVY
UEVDVF9FUSgwdSwgYmFyLnNpemUoKSk7CisgICAgfQorICAgIHsKKyAgICAgICAgSGFzaFNldDx1
bnNpZ25lZD4gZm9vKHsgMSwgNSwgNjQsIDQyIH0pOworICAgICAgICBFWFBFQ1RfRVEoNHUsIGZv
by5zaXplKCkpOworICAgICAgICBmb28ucmVtb3ZlKDEpOworICAgICAgICBmb28ucmVtb3ZlKDUp
OworICAgICAgICBmb28ucmVtb3ZlKDQyKTsKKyAgICAgICAgZm9vLnJlbW92ZSg2NCk7CisgICAg
ICAgIEhhc2hTZXQ8dW5zaWduZWQ+IGJhcihmb28pOworCisgICAgICAgIEVYUEVDVF9FUSgwdSwg
YmFyLmNhcGFjaXR5KCkpOworICAgICAgICBFWFBFQ1RfRVEoMHUsIGJhci5zaXplKCkpOworICAg
IH0KK30KKworVEVTVChXVEZfSGFzaFNldCwgQ29weUFsbG9jYXRlQXRMZWFzdE1pbmltdW1DYXBh
Y2l0eSkKK3sKKyAgICBIYXNoU2V0PHVuc2lnbmVkPiBmb28oeyA0MiB9KTsKKyAgICBFWFBFQ1Rf
RVEoMXUsIGZvby5zaXplKCkpOworICAgIEhhc2hTZXQ8dW5zaWduZWQ+IGJhcihmb28pOworCisg
ICAgRVhQRUNUX0VRKDh1LCBiYXIuY2FwYWNpdHkoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBiYXIu
c2l6ZSgpKTsKK30KKworVEVTVChXVEZfSGFzaFNldCwgQ29weUNhcGFjaXR5SXNOb3RPbkJvdW5k
YXJ5KQoreworICAgIC8vIFN0YXJ0aW5nIGF0IDQgYmVjYXVzZSB0aGUgbWluaW11bSBzaXplIGlz
IDguCisgICAgLy8gV2l0aCBhIHNpemUgb2YgOCwgYSBtZWRpdW0gbG9hZCBjYW4gYmUgdXAgdG8g
My4zMzMzLT4zLgorICAgIC8vIEFkZGluZyAxIHRvIDMgd291bGQgcmVhY2ggbWF4IGxvYWQuCisg
ICAgLy8gV2hpbGUgY29ycmVjdCwgdGhhdCdzIG5vdCByZWFsbHkgd2hhdCB3ZSBjYXJlIGFib3V0
IGhlcmUuCisgICAgZm9yICh1bnNpZ25lZCBzaXplID0gNDsgc2l6ZSA8IDEwMDsgKytzaXplKSB7
CisgICAgICAgIEhhc2hTZXQ8dW5zaWduZWQ+IHNvdXJjZTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMTsgaSA8IHNpemUgKyAxOyArK2kpCisgICAgICAgICAgICBzb3VyY2UuYWRkKGkpOwor
CisgICAgICAgIEhhc2hTZXQ8dW5zaWduZWQ+IGNvcHkxKHNvdXJjZSk7CisgICAgICAgIEhhc2hT
ZXQ8dW5zaWduZWQ+IGNvcHkyKHNvdXJjZSk7CisgICAgICAgIEhhc2hTZXQ8dW5zaWduZWQ+IGNv
cHkzKHNvdXJjZSk7CisKKyAgICAgICAgRVhQRUNUX0VRKHNpemUsIGNvcHkxLnNpemUoKSk7Cisg
ICAgICAgIEVYUEVDVF9FUShzaXplLCBjb3B5Mi5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEo
c2l6ZSwgY29weTMuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHNp
emUgKyAxOyArK2kpIHsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKGNvcHkxLmNvbnRhaW5zKGkp
KTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKGNvcHkyLmNvbnRhaW5zKGkpKTsKKyAgICAgICAg
ICAgIEVYUEVDVF9UUlVFKGNvcHkzLmNvbnRhaW5zKGkpKTsKKyAgICAgICAgfQorICAgICAgICBF
WFBFQ1RfRkFMU0UoY29weTEuY29udGFpbnMoc2l6ZSArIDIpKTsKKyAgICAgICAgRVhQRUNUX0ZB
TFNFKGNvcHkyLmNvbnRhaW5zKHNpemUgKyAyKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShjb3B5
My5jb250YWlucyhzaXplICsgMikpOworCisgICAgICAgIEVYUEVDVF9UUlVFKGNvcHkyLnJlbW92
ZSgxKSk7CisgICAgICAgIEVYUEVDVF9FUShjb3B5MS5jYXBhY2l0eSgpLCBjb3B5Mi5jYXBhY2l0
eSgpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGNvcHkyLmNvbnRhaW5zKDEpKTsKKworICAgICAg
ICBFWFBFQ1RfVFJVRShjb3B5My5hZGQoc2l6ZSArIDIpLmlzTmV3RW50cnkpOworICAgICAgICBF
WFBFQ1RfRVEoY29weTEuY2FwYWNpdHkoKSwgY29weTMuY2FwYWNpdHkoKSk7CisgICAgICAgIEVY
UEVDVF9UUlVFKGNvcHkzLmNvbnRhaW5zKHNpemUgKyAyKSk7CisgICAgfQorfQorCisKIH0gLy8g
bmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>
<flag name="review"
          id="283170"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>