<?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>126176</bug_id>
          
          <creation_ts>2013-12-23 12:52:38 -0800</creation_ts>
          <short_desc>Add class matching to the Selector Code Generator</short_desc>
          <delta_ts>2013-12-23 15:43:47 -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>New Bugs</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="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>barraclough</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ggaren</cc>
    
    <cc>kangil.han</cc>
    
    <cc>koivisto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>962552</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-12-23 12:52:38 -0800</bug_when>
    <thetext>Add class matching to the Selector Code Generator</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962554</commentid>
    <comment_count>1</comment_count>
      <attachid>219926</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-12-23 12:54:46 -0800</bug_when>
    <thetext>Created attachment 219926
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962580</commentid>
    <comment_count>2</comment_count>
      <attachid>219926</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-12-23 13:59:01 -0800</bug_when>
    <thetext>Comment on attachment 219926
Patch

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

It might be good if someone who knows the marcoassembler would also take a look.

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:209
&gt; +    HashSet&lt;const AtomicStringImpl*&gt; fragmentClassNames;

Repeating class names are probably very rare. It may be better to just use a vector and not care about removing duplicates.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962585</commentid>
    <comment_count>3</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-12-23 14:08:12 -0800</bug_when>
    <thetext>... with inline capacity. Even if duplicates are removed doing it in vector is likely still be much faster as there are rarely many entries. HashSets always malloc so are expensive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962589</commentid>
    <comment_count>4</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-12-23 14:41:16 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; ... with inline capacity. Even if duplicates are removed doing it in vector is likely still be much faster as there are rarely many entries. HashSets always malloc so are expensive.

This is compile time though so this code is very not hot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962595</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-12-23 14:54:59 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; ... with inline capacity. Even if duplicates are removed doing it in vector is likely still be much faster as there are rarely many entries. HashSets always malloc so are expensive.
&gt; 
&gt; This is compile time though so this code is very not hot.

Compile time can matter as we may have large numbers of selectors. Rule analysis code during RuleData construction shows up in profiles (0.7% of PLT3) and is analogous to selector compiling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962612</commentid>
    <comment_count>6</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-12-23 15:15:49 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; (In reply to comment #3)
&gt; &gt; &gt; ... with inline capacity. Even if duplicates are removed doing it in vector is likely still be much faster as there are rarely many entries. HashSets always malloc so are expensive.
&gt; &gt; 
&gt; &gt; This is compile time though so this code is very not hot.
&gt; 
&gt; Compile time can matter as we may have large numbers of selectors. Rule analysis code during RuleData construction shows up in profiles (0.7% of PLT3) and is analogous to selector compiling.

Ok. I&apos;ll switch to a vector then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962624</commentid>
    <comment_count>7</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-12-23 15:43:47 -0800</bug_when>
    <thetext>Committed r161031: &lt;http://trac.webkit.org/changeset/161031&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219926</attachid>
            <date>2013-12-23 12:54:46 -0800</date>
            <delta_ts>2013-12-23 13:59:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-126176-20131223125445.patch</filename>
            <type>text/plain</type>
            <size>12503</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYxMDEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
ZWQ1N2U5MjU4ZDE3MWY1M2U3YTBjOGM2MTFjMjI4NjI0Y2UxNGFkLi44ZWJlODQ3MTNjMTUwY2Ew
MDUzMmVjYmMwMWJjNjZmZjNkMjgwN2I5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMCBAQAorMjAxMy0xMi0yMyAgQmVuamFtaW4gUG91bGFpbiAgPGJlbmphbWluQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgQWRkIGNsYXNzIG1hdGNoaW5nIHRvIHRoZSBTZWxlY3RvciBDb2Rl
IEdlbmVyYXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTI2MTc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIHRlc3QgYW5kIGJyYW5jaCBiYXNlZCBvbiBCYXNlSW5kZXggYWRkcmVzc2luZyBmb3Ig
eDg2XzY0LgorICAgICAgICBGYXN0IGxvb3BzIGFyZSBuZWVkZWQgdG8gY29tcGV0ZSB3aXRoIGNs
YW5nIG9uIHRpZ2h0IGxvb3BzLgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
Lmg6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0Lmg6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpicmFuY2g2NCk6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyWDg2XzY0OjpicmFuY2hQdHIpOgorICAgICAgICAqIGFzc2VtYmxlci9YODZB
c3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpjbXBxX3JtKToKKwogMjAx
My0xMi0yMyAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFVwZGF0
ZSBjdXN0b20gc2V0dGVyIGltcGxlbWVudGF0aW9ucyB0byBwZXJmb3JtIHR5cGUgY2hlY2tzCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKaW5kZXggZDEwMjQ3Nzg2ZWY3ZDgyMTkyZDk0NTFiMzhhMDcwNzQ4NTE3MTQ1NS4uNmFj
YjI0YTFlMDE2YzJiYmM0NDUyYTZjZTM0ZTQ1MmQ5NjM4MDEyYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1
ICsxLDI0IEBACiAyMDEzLTEyLTIzICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0
Lm9yZz4KIAorICAgICAgICBBZGQgY2xhc3MgbWF0Y2hpbmcgdG8gdGhlIFNlbGVjdG9yIENvZGUg
R2VuZXJhdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMjYxNzYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGQgc2VsZWN0b3IgbWF0Y2hpbmcgYmFzZWQgb24gY2xhc3NuYW1lIHRvIHRoZSBTZWxlY3Rv
ciBDb21waWxlci4KKworICAgICAgICAqIGNzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6
U2VsZWN0b3JDb2RlR2VuZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGls
ZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50RGF0YU1hdGNoaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRv
cjo6Z2VuZXJhdGVFbGVtZW50SGFzQ2xhc3Nlcyk6CisgICAgICAgICogZG9tL0VsZW1lbnREYXRh
Lmg6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50RGF0YTo6Y2xhc3NOYW1lc01lbW9yeU9mZnNl
dCk6CisgICAgICAgICogZG9tL1NwYWNlU3BsaXRTdHJpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlNwYWNlU3BsaXRTdHJpbmdEYXRhOjpzaXplTWVtb3J5T2Zmc2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNwYWNlU3BsaXRTdHJpbmdEYXRhOjp0b2tlbnNNZW1vcnlPZmZzZXQpOgorCisyMDEzLTEy
LTIzICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KKwogICAgICAgICBB
ZGQgaWQgbWF0Y2hpbmcgdG8gdGhlIFNlbGVjdG9yIENvZGUgR2VuZXJhdG9yCiAgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjYxNTQKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCmluZGV4IGZhYzA5
MDE1Y2FiMzE5NDQxYWU4Mzk4MjdiZTlhN2RhYTExMzAxNGUuLjRhNDNlYjYyNWNkYzM4ZTFlMTdj
YmI2NzQ3MWNjODliYjJkNjgxMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgKQEAgLTE0MCw2ICsxNDAsOSBAQCBwdWJsaWM6CiAgICAg
dXNpbmcgTWFjcm9Bc3NlbWJsZXJCYXNlOjphbmQzMjsKICAgICB1c2luZyBNYWNyb0Fzc2VtYmxl
ckJhc2U6OmJyYW5jaEFkZDMyOwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6YnJhbmNo
TXVsMzI7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICB1c2luZyBNYWNyb0Fzc2VtYmxlckJhc2U6OmJy
YW5jaFB0cjsKKyNlbmRpZiAvLyBDUFUoWDg2XzY0KQogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVy
QmFzZTo6YnJhbmNoU3ViMzI7CiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJCYXNlOjpsc2hpZnQz
MjsKICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlckJhc2U6Om9yMzI7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKaW5kZXgg
YjhiZTMwNTIxM2IyMjNkMDFlMzczNzQ0YzkyMTQwNTE4MGYwNmE4MC4uNGZiYzVhM2RkMGQyZjA2
NzBiYmQ5NWJmZDFkMDk1ZTNiMGNhZTU5ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaApAQCAtNDg2LDYgKzQ4Niwy
MyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBicmFuY2g2NChjb25kLCBsZWZ0LCBzY3JhdGNo
UmVnaXN0ZXIpOwogICAgIH0KIAorICAgIEp1bXAgYnJhbmNoNjQoUmVsYXRpb25hbENvbmRpdGlv
biBjb25kLCBCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCByaWdodCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmNtcHFfcm0ocmlnaHQsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJh
c2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgICAgICByZXR1cm4gSnVtcCht
X2Fzc2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9uKGNvbmQpKSk7CisgICAgfQorCisgICAgSnVtcCBi
cmFuY2hQdHIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXggbGVmdCwgUmVnaXN0
ZXJJRCByaWdodCkKKyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2g2NChjb25kLCBsZWZ0LCBy
aWdodCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hQdHIoUmVsYXRpb25hbENvbmRpdGlvbiBj
b25kLCBCYXNlSW5kZXggbGVmdCwgVHJ1c3RlZEltbVB0ciByaWdodCkKKyAgICB7CisgICAgICAg
IG1vdmUocmlnaHQsIHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2hQdHIo
Y29uZCwgbGVmdCwgc2NyYXRjaFJlZ2lzdGVyKTsKKyAgICB9CisKICAgICBKdW1wIGJyYW5jaFRl
c3Q2NChSZXN1bHRDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCByZWcsIFJlZ2lzdGVySUQgbWFz
aykKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RxX3JyKHJlZywgbWFzayk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAppbmRleCA5ODFm
Y2EzYzY5YWZkMjdhODc5ZDk3OWVjMDA2ZWI3Njg3OWUzOGQ0Li4xYTQzZTIwNmNmYjYxN2JhOGI3
MmUyOWRkMWFiZjY0MmRhZmM4YTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvWDg2QXNzZW1ibGVyLmgKQEAgLTk5Miw2ICs5OTIsMTEgQEAgcHVibGljOgogICAgICAg
ICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9DTVBfRXZHdiwgc3JjLCBiYXNlLCBvZmZzZXQp
OwogICAgIH0KIAorICAgIHZvaWQgY21wcV9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwg
UmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCisgICAgeworICAg
ICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9DTVBfRXZHdiwgc3JjLCBiYXNlLCBpbmRl
eCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCiAgICAgdm9pZCBjbXBxX21yKGludCBvZmZzZXQs
IFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBzcmMpCiAgICAgewogICAgICAgICBtX2Zvcm1h
dHRlci5vbmVCeXRlT3A2NChPUF9DTVBfR3ZFdiwgc3JjLCBiYXNlLCBvZmZzZXQpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwCmluZGV4IDE1MzY4NDdlMDQwYjVl
YzVhODU4MThhMDc5ZGYwMmIwZGQzZDgxNzMuLjE2ZDYwMzc3NjZhNGJmMTk2ODE3NTZhODFhOTU0
YWUxMDVlZDZhNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNv
bXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5j
cHAKQEAgLTEwMCw2ICsxMDAsNyBAQCBzdHJ1Y3QgU2VsZWN0b3JGcmFnbWVudCB7CiAKICAgICBj
b25zdCBRdWFsaWZpZWROYW1lKiB0YWdOYW1lOwogICAgIGNvbnN0IEF0b21pY1N0cmluZyogaWQ7
CisgICAgVmVjdG9yPGNvbnN0IEF0b21pY1N0cmluZ0ltcGwqPiBjbGFzc05hbWVzOwogfTsKIAog
dHlwZWRlZiBKU0M6Ok1hY3JvQXNzZW1ibGVyIEFzc2VtYmxlcjsKQEAgLTEzOCw2ICsxMzksNyBA
QCBwcml2YXRlOgogICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50RGF0YU1hdGNoaW5nKEFzc2VtYmxl
cjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYpOwogICAg
IHZvaWQgZ2VuZXJhdGVFbGVtZW50SGFzVGFnTmFtZShBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWls
dXJlQ2FzZXMsIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWVUb01hdGNoKTsKICAgICB2b2lkIGdl
bmVyYXRlRWxlbWVudEhhc0lkKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29u
c3QgTG9jYWxSZWdpc3RlciYgZWxlbWVudERhdGFBZGRyZXNzLCBjb25zdCBBdG9taWNTdHJpbmcm
IGlkVG9NYXRjaCk7CisgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRIYXNDbGFzc2VzKEFzc2VtYmxl
cjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgTG9jYWxSZWdpc3RlciYgZWxlbWVudERh
dGFBZGRyZXNzLCBjb25zdCBWZWN0b3I8Y29uc3QgQXRvbWljU3RyaW5nSW1wbCo+JiBjbGFzc05h
bWVzKTsKIAogICAgIEFzc2VtYmxlciBtX2Fzc2VtYmxlcjsKICAgICBSZWdpc3RlckFsbG9jYXRv
ciBtX3JlZ2lzdGVyQWxsb2NhdG9yOwpAQCAtMjA0LDYgKzIwNiw3IEBAIGlubGluZSBTZWxlY3Rv
ckNvZGVHZW5lcmF0b3I6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcihjb25zdCBDU1NTZWxlY3Rvciog
cm9vdFNlbGVjCiAjZW5kaWYKIAogICAgIFNlbGVjdG9yRnJhZ21lbnQgZnJhZ21lbnQ7CisgICAg
SGFzaFNldDxjb25zdCBBdG9taWNTdHJpbmdJbXBsKj4gZnJhZ21lbnRDbGFzc05hbWVzOwogICAg
IEZyYWdtZW50UmVsYXRpb24gcmVsYXRpb25Ub1ByZXZpb3VzRnJhZ21lbnQgPSBGcmFnbWVudFJl
bGF0aW9uOjpSaWdodG1vc3Q7CiAgICAgZm9yIChjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3Ig
PSByb290U2VsZWN0b3I7IHNlbGVjdG9yOyBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5
KCkpIHsKICAgICAgICAgc3dpdGNoIChzZWxlY3Rvci0+bV9tYXRjaCkgewpAQCAtMjIwLDggKzIy
MywxMCBAQCBpbmxpbmUgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpTZWxlY3RvckNvZGVHZW5lcmF0
b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHJvb3RTZWxlYwogICAgICAgICAgICAgICAgIGZyYWdtZW50
LmlkID0gJihzZWxlY3Rvci0+dmFsdWUoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpVbmtub3duOgogICAgICAgICBjYXNlIENTU1Nl
bGVjdG9yOjpDbGFzczoKKyAgICAgICAgICAgIGZyYWdtZW50Q2xhc3NOYW1lcy5hZGQoc2VsZWN0
b3ItPnZhbHVlKCkuaW1wbCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENT
U1NlbGVjdG9yOjpVbmtub3duOgogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpFeGFjdDoKICAg
ICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6U2V0OgogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpM
aXN0OgpAQCAtMjQ5LDYgKzI1NCw5IEBAIGlubGluZSBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OlNl
bGVjdG9yQ29kZUdlbmVyYXRvcihjb25zdCBDU1NTZWxlY3Rvciogcm9vdFNlbGVjCiAgICAgICAg
IGZyYWdtZW50LnJlbGF0aW9uVG9SaWdodEZyYWdtZW50ID0gcmVsYXRpb25Ub1ByZXZpb3VzRnJh
Z21lbnQ7CiAgICAgICAgIHJlbGF0aW9uVG9QcmV2aW91c0ZyYWdtZW50ID0gZnJhZ21lbnQucmVs
YXRpb25Ub0xlZnRGcmFnbWVudDsKIAorICAgICAgICBjb3B5VG9WZWN0b3IoZnJhZ21lbnRDbGFz
c05hbWVzLCBmcmFnbWVudC5jbGFzc05hbWVzKTsKKyAgICAgICAgZnJhZ21lbnRDbGFzc05hbWVz
LmNsZWFyKCk7CisKICAgICAgICAgbV9zZWxlY3RvckZyYWdtZW50cy5hcHBlbmQoZnJhZ21lbnQp
OwogICAgICAgICBmcmFnbWVudCA9IFNlbGVjdG9yRnJhZ21lbnQoKTsKICAgICB9CkBAIC03NDcs
NyArNzU1LDcgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudE1h
dGNoaW5nKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmUKIAogdm9pZCBTZWxlY3RvckNvZGVH
ZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudERhdGFNYXRjaGluZyhBc3NlbWJsZXI6Okp1bXBMaXN0
JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50KQogewotICAg
IGlmICghZnJhZ21lbnQuaWQpCisgICAgaWYgKCFmcmFnbWVudC5pZCAmJiBmcmFnbWVudC5jbGFz
c05hbWVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gIEdlbmVyYXRlOgpA
QCAtNzU4LDcgKzc2NiwxMCBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVF
bGVtZW50RGF0YU1hdGNoaW5nKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaQogICAgIG1fYXNzZW1i
bGVyLmxvYWRQdHIoQXNzZW1ibGVyOjpBZGRyZXNzKGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIEVs
ZW1lbnQ6OmVsZW1lbnREYXRhTWVtb3J5T2Zmc2V0KCkpLCBlbGVtZW50RGF0YUFkZHJlc3MpOwog
ICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQobV9hc3NlbWJsZXIuYnJhbmNoVGVzdFB0cihBc3NlbWJs
ZXI6Olplcm8sIGVsZW1lbnREYXRhQWRkcmVzcykpOwogCi0gICAgZ2VuZXJhdGVFbGVtZW50SGFz
SWQoZmFpbHVyZUNhc2VzLCBlbGVtZW50RGF0YUFkZHJlc3MsICpmcmFnbWVudC5pZCk7CisgICAg
aWYgKGZyYWdtZW50LmlkKQorICAgICAgICBnZW5lcmF0ZUVsZW1lbnRIYXNJZChmYWlsdXJlQ2Fz
ZXMsIGVsZW1lbnREYXRhQWRkcmVzcywgKmZyYWdtZW50LmlkKTsKKyAgICBpZiAoIWZyYWdtZW50
LmNsYXNzTmFtZXMuaXNFbXB0eSgpKQorICAgICAgICBnZW5lcmF0ZUVsZW1lbnRIYXNDbGFzc2Vz
KGZhaWx1cmVDYXNlcywgZWxlbWVudERhdGFBZGRyZXNzLCBmcmFnbWVudC5jbGFzc05hbWVzKTsK
IH0KIAogaW5saW5lIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRI
YXNUYWdOYW1lKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgUXVhbGlm
aWVkTmFtZSYgbmFtZVRvTWF0Y2gpCkBAIC03OTUsNiArODA2LDQxIEBAIHZvaWQgU2VsZWN0b3JD
b2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRIYXNJZChBc3NlbWJsZXI6Okp1bXBMaXN0JiBm
YWlsdXJlQ2FzCiAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChtX2Fzc2VtYmxlci5icmFuY2hQdHIo
QXNzZW1ibGVyOjpOb3RFcXVhbCwgQXNzZW1ibGVyOjpBZGRyZXNzKGVsZW1lbnREYXRhQWRkcmVz
cywgRWxlbWVudERhdGE6OmlkRm9yU3R5bGVSZXNvbHV0aW9uTWVtb3J5T2Zmc2V0KCkpLCBpZFRv
TWF0Y2hSZWdpc3RlcikpOwogfQogCit2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJh
dGVFbGVtZW50SGFzQ2xhc3NlcyhBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNv
bnN0IExvY2FsUmVnaXN0ZXImIGVsZW1lbnREYXRhQWRkcmVzcywgY29uc3QgVmVjdG9yPGNvbnN0
IEF0b21pY1N0cmluZ0ltcGwqPiYgY2xhc3NOYW1lcykKK3sKKyAgICAvLyBMb2FkIG1fY2xhc3NO
YW1lcy4KKyAgICBMb2NhbFJlZ2lzdGVyIHNwYWNlU3BsaXRTdHJpbmdEYXRhKG1fcmVnaXN0ZXJB
bGxvY2F0b3IpOworICAgIG1fYXNzZW1ibGVyLmxvYWRQdHIoQXNzZW1ibGVyOjpBZGRyZXNzKGVs
ZW1lbnREYXRhQWRkcmVzcywgRWxlbWVudERhdGE6OmNsYXNzTmFtZXNNZW1vcnlPZmZzZXQoKSks
IHNwYWNlU3BsaXRTdHJpbmdEYXRhKTsKKworICAgIC8vIElmIFNwYWNlU3BsaXRTdHJpbmcgZG9l
cyBub3QgaGF2ZSBhIFNwYWNlU3BsaXRTdHJpbmdEYXRhIHBvaW50ZXIsIGl0IGlzIGVtcHR5IC0+
IGZhaWx1cmUgY2FzZS4KKyAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKG1fYXNzZW1ibGVyLmJyYW5j
aFRlc3RQdHIoQXNzZW1ibGVyOjpaZXJvLCBzcGFjZVNwbGl0U3RyaW5nRGF0YSkpOworCisgICAg
Ly8gV2UgbG9vcCBvdmVyIHRoZSBjbGFzc2VzIG9mIFNwYWNlU3BsaXRTdHJpbmdEYXRhIGZvciBl
YWNoIGNsYXNzIG5hbWUgd2UgbmVlZCB0byBtYXRjaC4KKyAgICBMb2NhbFJlZ2lzdGVyIGluZGV4
UmVnaXN0ZXIobV9yZWdpc3RlckFsbG9jYXRvcik7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGNsYXNzTmFtZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTG9jYWxSZWdpc3RlciBjbGFz
c05hbWVUb01hdGNoKG1fcmVnaXN0ZXJBbGxvY2F0b3IpOworICAgICAgICBtX2Fzc2VtYmxlci5t
b3ZlKEFzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihjbGFzc05hbWVzW2ldKSwgY2xhc3NOYW1lVG9N
YXRjaCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmUoQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
MCksIGluZGV4UmVnaXN0ZXIpOworCisgICAgICAgIC8vIEJlZ2lubmluZyBvZiBhIGxvb3Agb3Zl
ciBhbGwgdGhlIGNsYXNzIG5hbWUgb2YgZWxlbWVudCB0byBmaW5kIHRoZSBvbmUgd2UgYXJlIGxv
b2tpbmcgZm9yLgorICAgICAgICBBc3NlbWJsZXI6OkxhYmVsIGxvb3BTdGFydChtX2Fzc2VtYmxl
ci5sYWJlbCgpKTsKKworICAgICAgICAvLyBJZiB0aGUgcG9pbnRlcnMgbWF0Y2gsIHByb2NlZWQg
dG8gdGhlIG5leHQgbWF0Y2hlci4KKyAgICAgICAgQXNzZW1ibGVyOjpKdW1wIGNsYXNzRm91bmQg
PSBtX2Fzc2VtYmxlci5icmFuY2hQdHIoQXNzZW1ibGVyOjpFcXVhbCwgQXNzZW1ibGVyOjpCYXNl
SW5kZXgoc3BhY2VTcGxpdFN0cmluZ0RhdGEsIGluZGV4UmVnaXN0ZXIsIEFzc2VtYmxlcjo6dGlt
ZXNQdHIoKSwgU3BhY2VTcGxpdFN0cmluZ0RhdGE6OnRva2Vuc01lbW9yeU9mZnNldCgpKSwgY2xh
c3NOYW1lVG9NYXRjaCk7CisKKyAgICAgICAgLy8gSW5jcmVtZW50IHRoZSBpbmRleC4KKyAgICAg
ICAgbV9hc3NlbWJsZXIuYWRkMzIoQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIGluZGV4UmVn
aXN0ZXIpOworCisgICAgICAgIC8vIElmIHdlIHJlYWNoZWQgdGhlIGxhc3QgZWxlbWVudCAtPiBm
YWlsdXJlLgorICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKG1fYXNzZW1ibGVyLmJyYW5jaDMy
KEFzc2VtYmxlcjo6RXF1YWwsIEFzc2VtYmxlcjo6QWRkcmVzcyhzcGFjZVNwbGl0U3RyaW5nRGF0
YSwgU3BhY2VTcGxpdFN0cmluZ0RhdGE6OnNpemVNZW1vcnlPZmZzZXQoKSksIGluZGV4UmVnaXN0
ZXIpKTsKKyAgICAgICAgLy8gT3RoZXJ3aXNlIGp1c3QgbG9vcCBvdmVyLgorICAgICAgICBtX2Fz
c2VtYmxlci5qdW1wKCkubGlua1RvKGxvb3BTdGFydCwgJm1fYXNzZW1ibGVyKTsKKworICAgICAg
ICAvLyBTdWNjZXNzIGNhc2UuCisgICAgICAgIGNsYXNzRm91bmQubGluaygmbV9hc3NlbWJsZXIp
OworICAgIH0KK30KKwogfTsgLy8gbmFtZXNwYWNlIFNlbGVjdG9yQ29tcGlsZXIuCiB9OyAvLyBu
YW1lc3BhY2UgV2ViQ29yZS4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnREYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudERhdGEuaAppbmRleCA3N2Y3YzU1
ZjZlNGEyNjNkMjUzMDg3NDIwNWE3YTg1OTA1YzQ1YTk5Li43NzA1YTk2YTM2NWQ2ZGVkM2ZlZDI2
ZDdiMDVhZDM0ODJhMGFlMmY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dERhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudERhdGEuaApAQCAtNDksNiAr
NDksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhckNsYXNzKCkgY29uc3QgeyBtX2NsYXNzTmFt
ZXMuY2xlYXIoKTsgfQogICAgIHZvaWQgc2V0Q2xhc3MoY29uc3QgQXRvbWljU3RyaW5nJiBjbGFz
c05hbWUsIGJvb2wgc2hvdWxkRm9sZENhc2UpIGNvbnN0IHsgbV9jbGFzc05hbWVzLnNldChjbGFz
c05hbWUsIHNob3VsZEZvbGRDYXNlKTsgfQogICAgIGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIGNs
YXNzTmFtZXMoKSBjb25zdCB7IHJldHVybiBtX2NsYXNzTmFtZXM7IH0KKyAgICBzdGF0aWMgcHRy
ZGlmZl90IGNsYXNzTmFtZXNNZW1vcnlPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
RWxlbWVudERhdGEsIG1fY2xhc3NOYW1lcyk7IH0KIAogICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
aWRGb3JTdHlsZVJlc29sdXRpb24oKSBjb25zdCB7IHJldHVybiBtX2lkRm9yU3R5bGVSZXNvbHV0
aW9uOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBpZEZvclN0eWxlUmVzb2x1dGlvbk1lbW9yeU9m
ZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihFbGVtZW50RGF0YSwgbV9pZEZvclN0eWxl
UmVzb2x1dGlvbik7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TcGFjZVNwbGl0
U3RyaW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU3BhY2VTcGxpdFN0cmluZy5oCmluZGV4IGVi
Y2VhMmNiMDU4MTU0ZDdiY2FkNmVkNTk1MDYwNTliOGExYTcwM2UuLjJmMGUwZDM1YTk5ZmM4MGMz
YzI5ZTkwNDBkOWVlZTM1ODFjZDU2OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9T
cGFjZVNwbGl0U3RyaW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NwYWNlU3BsaXRTdHJp
bmcuaApAQCAtNDksNiArNDksOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBjb250YWluc0FsbChTcGFj
ZVNwbGl0U3RyaW5nRGF0YSYpOwogCiAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2l6ZTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgc2l6ZU1lbW9yeU9mZnNldCgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihTcGFjZVNwbGl0U3RyaW5nRGF0YSwgbV9zaXplKTsgfQorCiAg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBvcGVyYXRvcltdKHNpemVfdCBpKQogICAgIHsKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoaSA8IG1fc2l6ZSk7CkBAIC03NCw2ICs3Niw4IEBAIHB1YmxpYzoK
ICAgICAgICAgbV9yZWZDb3VudCA9IHRlbXBSZWZDb3VudDsKICAgICB9CiAKKyAgICBzdGF0aWMg
cHRyZGlmZl90IHRva2Vuc01lbW9yeU9mZnNldCgpIHsgcmV0dXJuIHNpemVvZihTcGFjZVNwbGl0
U3RyaW5nRGF0YSk7IH0KKwogcHJpdmF0ZToKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTcGFjZVNw
bGl0U3RyaW5nRGF0YT4gY3JlYXRlKGNvbnN0IEF0b21pY1N0cmluZyYsIHVuc2lnbmVkIHRva2Vu
Q291bnQpOwogICAgIFNwYWNlU3BsaXRTdHJpbmdEYXRhKGNvbnN0IEF0b21pY1N0cmluZyYgc3Ry
aW5nLCB1bnNpZ25lZCBzaXplKQo=
</data>
<flag name="review"
          id="243590"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>