<?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>67133</bug_id>
          
          <creation_ts>2011-08-29 09:27:50 -0700</creation_ts>
          <short_desc>Viewing a post on reddit.com wastes a lot of memory on event listeners.</short_desc>
          <delta_ts>2011-08-29 11:24:50 -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>UI Events</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="Andreas Kling">kling</reporter>
          <assigned_to name="Andreas Kling">kling</assigned_to>
          <cc>darin</cc>
    
    <cc>ggaren</cc>
    
    <cc>mjs</cc>
    
    <cc>staikos</cc>
    
    <cc>tonikitoo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>458245</commentid>
    <comment_count>0</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-08-29 09:27:50 -0700</bug_when>
    <thetext>On a typical reddit.com front page post, WebKit allocates between 1-2 MB of (zeroed) memory in EventTarget::addEventListener(). This is for click event listeners on a *lot* of nodes. Example URL: http://www.reddit.com/r/reddit.com/comments/jxdp5/voltaire_when_asked_on_his_deathbed_to_renounce/

EventTarget is currently storing the event listeners in a HashMap&lt;AtomicString, EventListenerVector*&gt; (the AtomicString is the event name.)

The minimum table size for a HashMap in WebKit is currently 64, which means that as soon as you add an event listener to an EventTarget, we allocate 64 * sizeof(EventListenerVector*).

I did a quick crawl of ~20 popular websites and found that very few pages ever register listeners for more than 1-2 specific events. Twitter and Facebook had the most listeners, around 9-10, peaking at 14 for some nodes.

I believe we could easily reduce the minimum table size for this particular HashMap to 32, and cut memory usage in half. Perhaps we could even go lower.

Patch idea coming..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458249</commentid>
    <comment_count>1</comment_count>
      <attachid>105496</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-08-29 09:41:38 -0700</bug_when>
    <thetext>Created attachment 105496
Proposed patch

Lay it on me, gentlemen.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458276</commentid>
    <comment_count>2</comment_count>
      <attachid>105496</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-08-29 10:39:13 -0700</bug_when>
    <thetext>Comment on attachment 105496
Proposed patch

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

My thoughts:

    1) Great to optimize this!

    2) We’d likely save even more memory if we did an optimization in EventTarget where we store one or two listeners in EventTargetData directly, use OwnPtr for the map and don’t even allocate a map unless there are more than two listeners.

    3) Since HashTraits are really traits of the key, not of the hash table as a whole, it’s a little strange to have a table size trait in there, but not so strange that I think it’s an unacceptable design. You can see that in the lines of the code that are making decisions for the table size based on “key traits”, which smells wrong.

&gt; Source/JavaScriptCore/wtf/HashTable.h:411
&gt; -        static const int m_minTableSize = 64;
&gt;          static const int m_maxLoad = 2;
&gt;          static const int m_minLoad = 6;

Are these load numbers related to the table size? If so, we might consider moving them to the traits as well.

I think that all these numbers could benefit from “why” comments.

&gt; Source/JavaScriptCore/wtf/HashTraits.h:41
&gt;          static const bool emptyValueIsZero = false;
&gt;          static const bool needsDestruction = true;
&gt; +        static const int minimumTableSize = 64;

It occurs to me that having the static data members defined only here is not fully conforming C++. There’s supposed to be a definition of each outside the class definition too. Probably something we can just ignore until we have to deal with some compiler where it’s actually a problem.

&gt; Source/JavaScriptCore/wtf/HashTraits.h:48
&gt; +        static const int minimumTableSize = 64;

A little annoying to have this twice. One way of avoiding that would be to have GenricHashTraitsBase&lt;true, T&gt; derive from GenericHashTraitsBase&lt;false, T&gt;. There was no need to do that before because there was no member that would be the same, but an advantage to doing it now would be to not have the “64” number in two places.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458297</commentid>
    <comment_count>3</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-08-29 11:07:23 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 105496 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=105496&amp;action=review
&gt;     2) We’d likely save even more memory if we did an optimization in EventTarget where we store one or two listeners in EventTargetData directly, use OwnPtr for the map and don’t even allocate a map unless there are more than two listeners.

I was toying with the same idea (for a follow-up patch.) Will hack something up! :)

&gt;     3) Since HashTraits are really traits of the key, not of the hash table as a whole, it’s a little strange to have a table size trait in there, but not so strange that I think it’s an unacceptable design. You can see that in the lines of the code that are making decisions for the table size based on “key traits”, which smells wrong.

I certainly see what you mean, it looks a bit awkward as-is. Would you prefer that this &quot;table trait&quot; (along with the min/max &quot;load&quot; values) be promoted to a separate template argument?

&gt; &gt; Source/JavaScriptCore/wtf/HashTable.h:411
&gt; &gt; -        static const int m_minTableSize = 64;
&gt; &gt;          static const int m_maxLoad = 2;
&gt; &gt;          static const int m_minLoad = 6;
&gt; 
&gt; I think that all these numbers could benefit from “why” comments.

I agree that comments would be nice, though I don&apos;t know how you decided on these numbers in &lt;http://trac.webkit.org/changeset/9527&gt;.

&gt; &gt; Source/JavaScriptCore/wtf/HashTraits.h:48
&gt; &gt; +        static const int minimumTableSize = 64;
&gt; 
&gt; A little annoying to have this twice. One way of avoiding that would be to have GenricHashTraitsBase&lt;true, T&gt; derive from GenericHashTraitsBase&lt;false, T&gt;. There was no need to do that before because there was no member that would be the same, but an advantage to doing it now would be to not have the “64” number in two places.

Will tweak before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458302</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-08-29 11:13:03 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Would you prefer that this &quot;table trait&quot; (along with the min/max &quot;load&quot; values) be promoted to a separate template argument?

I think this might make things worse, rather than better. This is something we should discuss with Maciej, since he’s really the architect of these classes and is thoughtful about such things. He’s out for a week, and will be back on Monday.

&gt; &gt; &gt; Source/JavaScriptCore/wtf/HashTable.h:411
&gt; &gt; &gt; -        static const int m_minTableSize = 64;
&gt; &gt; &gt;          static const int m_maxLoad = 2;
&gt; &gt; &gt;          static const int m_minLoad = 6;
&gt; &gt; 
&gt; &gt; I think that all these numbers could benefit from “why” comments.
&gt; 
&gt; I agree that comments would be nice, though I don&apos;t know how you decided on these numbers in &lt;http://trac.webkit.org/changeset/9527&gt;.

I agree that it was Maciej who should have added those comments back 6 years ago. (I was the reviewer, not the author.)

The maxLoad of 2 means “never be more than 1/2 full” and minLoad of 6 means “never be less than 1/6 full”. As to where those come from and what best practices are, Maciej can probably remember.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458313</commentid>
    <comment_count>5</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-08-29 11:24:50 -0700</bug_when>
    <thetext>Committed r93990: &lt;http://trac.webkit.org/changeset/93990&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105496</attachid>
            <date>2011-08-29 09:41:38 -0700</date>
            <delta_ts>2011-08-29 10:39:13 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>bug-67133.diff</filename>
            <type>text/plain</type>
            <size>6567</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDA0YTg0NDAuLmJmZThhNjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDExLTA4LTI5ICBBbmRyZWFzIEtsaW5n
ICA8a2xpbmdAd2Via2l0Lm9yZz4KKworICAgICAgICBWaWV3aW5nIGEgcG9zdCBvbiByZWRkaXQu
Y29tIHdhc3RlcyBhIGxvdCBvZiBtZW1vcnkgb24gZXZlbnQgbGlzdGVuZXJzLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjcxMzMKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBtaW5pbXVtIHRhYmxl
IHNpemUgdG8gdGhlIEhhc2hUcmFpdHMsIGluc3RlYWQgb2YgaGF2aW5nIGl0IGhhcmQgY29kZWQu
CisgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIHJlbWFpbnMgYXQgNjQsIGJ1dCBjYW4gbm93IGJl
IHNwZWNpYWxpemVkLgorCisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFi
bGUuaDoKKyAgICAgICAgKiB3dGYvSGFzaFRhYmxlLmg6CisgICAgICAgIChXVEY6Okhhc2hUYWJs
ZTo6c2hvdWxkU2hyaW5rKToKKyAgICAgICAgKFdURjo6OjpleHBhbmQpOgorICAgICAgICAoV1RG
Ojo6OmNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUpOgorICAgICAgICAqIHd0Zi9IYXNo
VHJhaXRzLmg6CisKIDIwMTEtMDgtMjggIEpvbmF0aGFuIExpdSAgPG5ldDE0N0BnbWFpbC5jb20+
CiAKICAgICAgICAgRml4IGJ1aWxkIGVycm9yIHdoZW4gY29tcGlsaW5nIHdpdGggTWluR1ctdzY0
IGJ5IGRpc2FibGluZyBKSVQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgKaW5kZXggYzEwNDEyOC4uNWQ3Yzc4OCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNp
dGlvblRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
VHJhbnNpdGlvblRhYmxlLmgKQEAgLTY1LDYgKzY1LDggQEAgY2xhc3MgU3RydWN0dXJlVHJhbnNp
dGlvblRhYmxlIHsKIAogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9u
ID0gRmlyc3RUcmFpdHM6Om5lZWRzRGVzdHJ1Y3Rpb24gfHwgU2Vjb25kVHJhaXRzOjpuZWVkc0Rl
c3RydWN0aW9uOwogCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW11bVRhYmxlU2l6ZSA9
IEZpcnN0VHJhaXRzOjptaW5pbXVtVGFibGVTaXplOworCiAgICAgICAgIHN0YXRpYyB2b2lkIGNv
bnN0cnVjdERlbGV0ZWRWYWx1ZShUcmFpdFR5cGUmIHNsb3QpIHsgRmlyc3RUcmFpdHM6OmNvbnN0
cnVjdERlbGV0ZWRWYWx1ZShzbG90LmZpcnN0KTsgfQogICAgICAgICBzdGF0aWMgYm9vbCBpc0Rl
bGV0ZWRWYWx1ZShjb25zdCBUcmFpdFR5cGUmIHZhbHVlKSB7IHJldHVybiBGaXJzdFRyYWl0czo6
aXNEZWxldGVkVmFsdWUodmFsdWUuZmlyc3QpOyB9CiAgICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvSGFzaFRhYmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL0hhc2hUYWJsZS5oCmluZGV4IDc5ZThiM2YuLmRiMWJkMTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvSGFzaFRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9IYXNoVGFibGUuaApAQCAtMzc3LDcgKzM3Nyw3IEBAIG5hbWVzcGFjZSBXVEYgewog
CiAgICAgICAgIGJvb2wgc2hvdWxkRXhwYW5kKCkgY29uc3QgeyByZXR1cm4gKG1fa2V5Q291bnQg
KyBtX2RlbGV0ZWRDb3VudCkgKiBtX21heExvYWQgPj0gbV90YWJsZVNpemU7IH0KICAgICAgICAg
Ym9vbCBtdXN0UmVoYXNoSW5QbGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5Q291bnQgKiBtX21p
bkxvYWQgPCBtX3RhYmxlU2l6ZSAqIDI7IH0KLSAgICAgICAgYm9vbCBzaG91bGRTaHJpbmsoKSBj
b25zdCB7IHJldHVybiBtX2tleUNvdW50ICogbV9taW5Mb2FkIDwgbV90YWJsZVNpemUgJiYgbV90
YWJsZVNpemUgPiBtX21pblRhYmxlU2l6ZTsgfQorICAgICAgICBib29sIHNob3VsZFNocmluaygp
IGNvbnN0IHsgcmV0dXJuIG1fa2V5Q291bnQgKiBtX21pbkxvYWQgPCBtX3RhYmxlU2l6ZSAmJiBt
X3RhYmxlU2l6ZSA+IEtleVRyYWl0czo6bWluaW11bVRhYmxlU2l6ZTsgfQogICAgICAgICB2b2lk
IGV4cGFuZCgpOwogICAgICAgICB2b2lkIHNocmluaygpIHsgcmVoYXNoKG1fdGFibGVTaXplIC8g
Mik7IH0KIApAQCAtNDA3LDcgKzQwNyw2IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBzdGF0
aWMgdm9pZCBpbnZhbGlkYXRlSXRlcmF0b3JzKCkgeyB9CiAjZW5kaWYKIAotICAgICAgICBzdGF0
aWMgY29uc3QgaW50IG1fbWluVGFibGVTaXplID0gNjQ7CiAgICAgICAgIHN0YXRpYyBjb25zdCBp
bnQgbV9tYXhMb2FkID0gMjsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBtX21pbkxvYWQgPSA2
OwogCkBAIC05MDEsNyArOTAwLDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgewogICAgICAgICBp
bnQgbmV3U2l6ZTsKICAgICAgICAgaWYgKG1fdGFibGVTaXplID09IDApCi0gICAgICAgICAgICBu
ZXdTaXplID0gbV9taW5UYWJsZVNpemU7CisgICAgICAgICAgICBuZXdTaXplID0gS2V5VHJhaXRz
OjptaW5pbXVtVGFibGVTaXplOwogICAgICAgICBlbHNlIGlmIChtdXN0UmVoYXNoSW5QbGFjZSgp
KQogICAgICAgICAgICAgbmV3U2l6ZSA9IG1fdGFibGVTaXplOwogICAgICAgICBlbHNlCkBAIC0x
MDM5LDcgKzEwMzgsNyBAQCBuYW1lc3BhY2UgV1RGIHsKIAogICAgICAgICBBU1NFUlQoY291bnQg
PT0gbV9rZXlDb3VudCk7CiAgICAgICAgIEFTU0VSVChkZWxldGVkQ291bnQgPT0gbV9kZWxldGVk
Q291bnQpOwotICAgICAgICBBU1NFUlQobV90YWJsZVNpemUgPj0gbV9taW5UYWJsZVNpemUpOwor
ICAgICAgICBBU1NFUlQobV90YWJsZVNpemUgPj0gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVTaXpl
KTsKICAgICAgICAgQVNTRVJUKG1fdGFibGVTaXplTWFzayk7CiAgICAgICAgIEFTU0VSVChtX3Rh
YmxlU2l6ZSA9PSBtX3RhYmxlU2l6ZU1hc2sgKyAxKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL0hhc2hUcmFpdHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvSGFzaFRyYWl0cy5oCmluZGV4IGZiYTVhZmUuLmZiODExNDcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvSGFzaFRyYWl0cy5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvSGFzaFRyYWl0cy5oCkBAIC0zOCwxMiArMzgsMTQgQEAgbmFtZXNwYWNlIFdU
RiB7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEdlbmVyaWNIYXNoVHJhaXRzQmFz
ZTxmYWxzZSwgVD4gewogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJv
ID0gZmFsc2U7CiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0
cnVlOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltdW1UYWJsZVNpemUgPSA2NDsKICAg
ICB9OwogCiAgICAgLy8gRGVmYXVsdCBpbnRlZ2VyIHRyYWl0cyBkaXNhbGxvdyBib3RoIDAgYW5k
IC0xIGFzIGtleXMgKG1heCB2YWx1ZSBpbnN0ZWFkIG9mIC0xIGZvciB1bnNpZ25lZCkuCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEdlbmVyaWNIYXNoVHJhaXRzQmFzZTx0cnVlLCBU
PiB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSB0cnVlOwog
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gZmFsc2U7CisgICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW11bVRhYmxlU2l6ZSA9IDY0OwogICAgICAgICBzdGF0
aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoVCYgc2xvdCkgeyBzbG90ID0gc3RhdGljX2Nh
c3Q8VD4oLTEpOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKFQgdmFsdWUp
IHsgcmV0dXJuIHZhbHVlID09IHN0YXRpY19jYXN0PFQ+KC0xKTsgfQogICAgIH07CkBAIC0xMDIs
NiArMTA0LDggQEAgbmFtZXNwYWNlIFdURiB7CiAKICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
bmVlZHNEZXN0cnVjdGlvbiA9IEZpcnN0VHJhaXRzOjpuZWVkc0Rlc3RydWN0aW9uIHx8IFNlY29u
ZFRyYWl0czo6bmVlZHNEZXN0cnVjdGlvbjsKIAorICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1p
bmltdW1UYWJsZVNpemUgPSBGaXJzdFRyYWl0czo6bWluaW11bVRhYmxlU2l6ZTsKKwogICAgICAg
ICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoVHJhaXRUeXBlJiBzbG90KSB7IEZp
cnN0VHJhaXRzOjpjb25zdHJ1Y3REZWxldGVkVmFsdWUoc2xvdC5maXJzdCk7IH0KICAgICAgICAg
c3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgVHJhaXRUeXBlJiB2YWx1ZSkgeyByZXR1
cm4gRmlyc3RUcmFpdHM6OmlzRGVsZXRlZFZhbHVlKHZhbHVlLmZpcnN0KTsgfQogICAgIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKaW5kZXggYjJhZDAyMC4uYTdhNzQ4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBA
CisyMDExLTA4LTI5ICBBbmRyZWFzIEtsaW5nICA8a2xpbmdAd2Via2l0Lm9yZz4KKworICAgICAg
ICBWaWV3aW5nIGEgcG9zdCBvbiByZWRkaXQuY29tIHdhc3RlcyBhIGxvdCBvZiBtZW1vcnkgb24g
ZXZlbnQgbGlzdGVuZXJzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjcxMzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBTcGVjaWFsaXplIHRoZSBIYXNoTWFwIHVzZWQgdG8gc3RvcmUgcmVnaXN0ZXJlZCBs
aXN0ZW5lcnMgb24gYW4gRXZlbnRUYXJnZXQKKyAgICAgICAgdG8gaGF2ZSBhIG1pbmltdW0gc2l6
ZSBvZiAzMiAocmF0aGVyIHRoYW4gdGhlIGRlZmF1bHQgNjQuKQorICAgICAgICBJdCdzIHZlcnkg
cmFyZSBmb3IgcGFnZXMgdG8gcmVnaXN0ZXIgbGlzdGVuZXJzIGZvciBzbyBtYW55IGRpZmZlcmVu
dCBldmVudHMKKyAgICAgICAgYW5kIHRoaXMgY3V0cyBtZW1vcnkgY29uc3VtcHRpb24gaW4gaGFs
ZiBmb3IgdGhlIGNvbW1vbiBjYXNlLgorCisgICAgICAgIEFzIGFuIGV4YW1wbGUsIGZvciBhIHR5
cGljYWwgcG9zdCBvbiB0aGUgcmVkZGl0LmNvbSBmcm9udCBwYWdlLAorICAgICAgICB0aGlzIHJl
ZHVjZXMgbWVtb3J5IHVzZWQgYnkgfjcwMGtCIG9uIDY0LWJpdC4KKworICAgICAgICAqIGRvbS9F
dmVudFRhcmdldC5oOgorCiAyMDExLTA4LTI5ICBBbGV4YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogPGJ1dHRvbiBoaWRkZW4+Li48
L2J1dHRvbj4gaGFzIGEgZGlmZmVyZW50IGNvbXB1dGVkICJkaXNwbGF5IiB2YWx1ZSB0aGFuICJu
b25lIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAppbmRleCA4MGUxYWY1Li5iY2UwOGI3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRXZlbnRUYXJnZXQuaApAQCAtODYsNyArODYsMTIgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgIHR5cGVkZWYgVmVjdG9yPEZpcmluZ0V2ZW50SXRlcmF0b3IsIDE+IEZpcmluZ0V2
ZW50SXRlcmF0b3JWZWN0b3I7CiAKICAgICB0eXBlZGVmIFZlY3RvcjxSZWdpc3RlcmVkRXZlbnRM
aXN0ZW5lciwgMT4gRXZlbnRMaXN0ZW5lclZlY3RvcjsKLSAgICB0eXBlZGVmIEhhc2hNYXA8QXRv
bWljU3RyaW5nLCBFdmVudExpc3RlbmVyVmVjdG9yKj4gRXZlbnRMaXN0ZW5lck1hcDsKKworICAg
IHN0cnVjdCBFdmVudExpc3RlbmVyTWFwSGFzaFRyYWl0cyA6IEhhc2hUcmFpdHM8V1RGOjpBdG9t
aWNTdHJpbmc+IHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5pbXVtVGFibGVTaXplID0g
MzI7CisgICAgfTsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmcsIEV2ZW50TGlz
dGVuZXJWZWN0b3IqLCBBdG9taWNTdHJpbmdIYXNoLCBFdmVudExpc3RlbmVyTWFwSGFzaFRyYWl0
cz4gRXZlbnRMaXN0ZW5lck1hcDsKIAogICAgIHN0cnVjdCBFdmVudFRhcmdldERhdGEgewogICAg
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShFdmVudFRhcmdldERhdGEpOyBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsK
</data>
<flag name="review"
          id="101678"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>