<?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>158664</bug_id>
          
          <creation_ts>2016-06-11 12:09:54 -0700</creation_ts>
          <short_desc>Minimize the amount of memcpy done for allocating Error stacks.</short_desc>
          <delta_ts>2016-06-11 12:57: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>JavaScriptCore</component>
          <version>WebKit Local 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="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1201601</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-06-11 12:09:54 -0700</bug_when>
    <thetext>Currently, Vector&lt;StackFrame&gt; are being copied around multiple times in the process of creating Error stacks.  We can do better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1201606</commentid>
    <comment_count>1</comment_count>
      <attachid>281106</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-06-11 12:29:06 -0700</bug_when>
    <thetext>Created attachment 281106
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1201610</commentid>
    <comment_count>2</comment_count>
      <attachid>281106</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-06-11 12:32:39 -0700</bug_when>
    <thetext>Comment on attachment 281106
proposed patch.

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

&gt; Source/JavaScriptCore/inspector/ScriptCallStackFactory.cpp:140
&gt; +    const Vector&lt;StackFrame&gt;&amp; stackTrace = exception-&gt;stack();

I would prefer this:

    auto&amp; stackTrace = exception-&gt;stack();

What do you think?

&gt; Source/JavaScriptCore/interpreter/StackVisitor.h:192
&gt; +class StackDepthCountFunctor {
&gt; +public:
&gt; +    StackVisitor::Status operator()(StackVisitor&amp;) const
&gt; +    {
&gt; +        count++;
&gt; +        return StackVisitor::Continue;
&gt; +    }
&gt; +    
&gt; +    mutable size_t count { 0 };
&gt; +};

I’m not sure this belongs in a header. Why not put it closer to where it’s used? Maybe it could even be a lambda that captures a reference to a local variable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1201613</commentid>
    <comment_count>3</comment_count>
      <attachid>281106</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-06-11 12:46:20 -0700</bug_when>
    <thetext>Comment on attachment 281106
proposed patch.

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

&gt;&gt; Source/JavaScriptCore/inspector/ScriptCallStackFactory.cpp:140
&gt;&gt; +    const Vector&lt;StackFrame&gt;&amp; stackTrace = exception-&gt;stack();
&gt; 
&gt; I would prefer this:
&gt; 
&gt;     auto&amp; stackTrace = exception-&gt;stack();
&gt; 
&gt; What do you think?

Sure.  I&apos;m fine with that.

&gt;&gt; Source/JavaScriptCore/interpreter/StackVisitor.h:192
&gt;&gt; +};
&gt; 
&gt; I’m not sure this belongs in a header. Why not put it closer to where it’s used? Maybe it could even be a lambda that captures a reference to a local variable.

Thanks.  I&apos;m so used to doing this the old way that I missed that we can use a lambda here.  I put this functor class in this header because I think it can be useful for other uses other than just the current one e.g. in custom code added during debugging sessions.  Rather than having to roll one every time, I thought I&apos;d just put it here as a utility.  But since the lambda I would have to write instead for this is almost trivial, I&apos;ll go with the lambda instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1201615</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-06-11 12:57:50 -0700</bug_when>
    <thetext>Thanks for the review.  Landed in r201976: &lt;http://trac.webkit.org/r201976&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>281106</attachid>
            <date>2016-06-11 12:29:06 -0700</date>
            <delta_ts>2016-06-11 12:32:39 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-158664.patch</filename>
            <type>text/plain</type>
            <size>12180</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjAxOTc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBA
CisyMDE2LTA2LTExICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBN
aW5pbWl6ZSB0aGUgYW1vdW50IG9mIG1lbWNweSBkb25lIGZvciBhbGxvY2F0aW5nIEVycm9yIHN0
YWNrcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
ODY2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEN1
cnJlbnRseSwgVmVjdG9yPFN0YWNrRnJhbWU+IGFyZSBiZWluZyBjb3BpZWQgYXJvdW5kIG11bHRp
cGxlIHRpbWVzIGluIHRoZQorICAgICAgICBwcm9jZXNzIG9mIGNyZWF0aW5nIEVycm9yIHN0YWNr
cy4KKworICAgICAgICBUaGlzIHBhdGNoIGF2b2lkcyB0aGlzIHVubmVjZXNzYXJ5IGNvcHlpbmcg
Ynk6CisgICAgICAgIDEuIFNpemluZyB0aGUgU3RhY2tGcmFtZSB2ZWN0b3IgY29ycmVjdGx5IHRv
IGJlZ2luIHdpdGgsIGFuZCBza2lwcGluZworICAgICAgICAgICB1bmRlc2lyYWJsZSB0b3AgZnJh
bWVzIGJlZm9yZSBmaWxsaW5nIGluIHRoZSB2ZWN0b3IuCisgICAgICAgIDIuIFVzaW5nIHBlcmZl
Y3QgZm9yd2FyZGluZyBvciBwYXNzaW5nIGJ5IHJlZmVyZW5jZSB0byBwYXNzIHRoZSB2ZWN0b3Ig
ZGF0YSBhcm91bmQKKyAgICAgICAgICAgaW5zdGVhZCBvZiBjb3B5aW5nIHRoZSB2ZWN0b3JzLgor
ICAgICAgICAzLiBDaGFuZ2luZyB0aGUgRXhjZXB0aW9uIG9iamVjdCB0byB0YWtlIGEgVmVjdG9y
PFN0YWNrRnJhbWU+IGluc3RlYWQgb2YgYQorICAgICAgICAgICBSZWZDb3VudGVkQXJyYXk8U3Rh
Y2tGcmFtZT4uCisKKyAgICAgICAgVGhpcyBwYXRjaCBoYXMgcGFzc2VkIHRoZSBKU0MgYW5kIGxh
eW91dCB0ZXN0cy4gIEJlbmNobWFya3Mgc2hvdyB0aGF0IHBlcmYgaXMKKyAgICAgICAgbmV1dHJh
bC4KKworICAgICAgICAqIEFQSS90ZXN0cy90ZXN0YXBpLm1tOgorICAgICAgICAodGVzdE9iamVj
dGl2ZUNBUEkpOgorICAgICAgICAqIGluc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNw
cDoKKyAgICAgICAgKEluc3BlY3Rvcjo6Y3JlYXRlU2NyaXB0Q2FsbFN0YWNrRnJvbUV4Y2VwdGlv
bik6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlND
OjpHZXRTdGFja1RyYWNlRnVuY3Rvcjo6R2V0U3RhY2tUcmFjZUZ1bmN0b3IpOgorICAgICAgICAo
SlNDOjpHZXRTdGFja1RyYWNlRnVuY3Rvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6Oklu
dGVycHJldGVyOjpnZXRTdGFja1RyYWNlKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnN0
YWNrVHJhY2VBc1N0cmluZyk6CisgICAgICAgIChKU0M6OmZpbmRFeGNlcHRpb25IYW5kbGVyKToK
KyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5oOgorICAgICAgICAqIGludGVycHJl
dGVyL1N0YWNrVmlzaXRvci5oOgorICAgICAgICAoSlNDOjpTdGFja0RlcHRoQ291bnRGdW5jdG9y
OjpvcGVyYXRvcigpKToKKyAgICAgICAgKiBydW50aW1lL0Vycm9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6YWRkRXJyb3JJbmZvQW5kR2V0Qnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAqIHJ1bnRpbWUv
RXhjZXB0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6RXhjZXB0aW9uOjpmaW5pc2hDcmVhdGlvbik6
CisgICAgICAgICogcnVudGltZS9FeGNlcHRpb24uaDoKKyAgICAgICAgKEpTQzo6RXhjZXB0aW9u
Ojp2YWx1ZU9mZnNldCk6CisgICAgICAgIChKU0M6OkV4Y2VwdGlvbjo6dmFsdWUpOgorICAgICAg
ICAoSlNDOjpFeGNlcHRpb246OnN0YWNrKToKKyAgICAgICAgKEpTQzo6RXhjZXB0aW9uOjpkaWRO
b3RpZnlJbnNwZWN0b3JPZlRocm93KToKKyAgICAgICAgKEpTQzo6RXhjZXB0aW9uOjpzZXREaWRO
b3RpZnlJbnNwZWN0b3JPZlRocm93KToKKwogMjAxNi0wNi0xMSAgTWFyayBMYW0gIDxtYXJrLmxh
bUBhcHBsZS5jb20+CiAKICAgICAgICAgVGVzdHMgdGhhdCBvdmVyZmxvd3MgdGhlIHN0YWNrIHNo
b3VsZCBub3QgYmUgcnVuIHdpdGggdGhlIHNhbXBsaW5nIHByb2ZpbGVyLgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFj
a0ZhY3RvcnkuY3BwCShyZXZpc2lvbiAyMDE5NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzcsNyArMTM3LDcgQEAgc3RhdGljIHZvaWQgZXh0cmFjdFNvdXJjZUluZm9ybWF0aW9uRnJvbQog
UmVmPFNjcmlwdENhbGxTdGFjaz4gY3JlYXRlU2NyaXB0Q2FsbFN0YWNrRnJvbUV4Y2VwdGlvbihK
U0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpFeGNlcHRpb24qIGV4Y2VwdGlvbiwgc2l6ZV90IG1h
eFN0YWNrU2l6ZSkKIHsKICAgICBWZWN0b3I8U2NyaXB0Q2FsbEZyYW1lPiBmcmFtZXM7Ci0gICAg
UmVmQ291bnRlZEFycmF5PFN0YWNrRnJhbWU+IHN0YWNrVHJhY2UgPSBleGNlcHRpb24tPnN0YWNr
KCk7CisgICAgY29uc3QgVmVjdG9yPFN0YWNrRnJhbWU+JiBzdGFja1RyYWNlID0gZXhjZXB0aW9u
LT5zdGFjaygpOwogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzdGFja1RyYWNlLnNpemUoKSAmJiBpIDwgbWF4U3RhY2tTaXplOyBpKyspIHsKICAg
ICAgICAgdW5zaWduZWQgbGluZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMjAxOTc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDk4LDI5ICs0OTgsMzUgQEAgc3RhdGljIGlubGluZSBib29sIGlzV2ViQXNzZW1ibHlF
eGVjdXRhYgogCiBjbGFzcyBHZXRTdGFja1RyYWNlRnVuY3RvciB7CiBwdWJsaWM6Ci0gICAgR2V0
U3RhY2tUcmFjZUZ1bmN0b3IoVk0mIHZtLCBWZWN0b3I8U3RhY2tGcmFtZT4mIHJlc3VsdHMsIHNp
emVfdCByZW1haW5pbmdDYXBhY2l0eSkKKyAgICBHZXRTdGFja1RyYWNlRnVuY3RvcihWTSYgdm0s
IFZlY3RvcjxTdGFja0ZyYW1lPiYgcmVzdWx0cywgc2l6ZV90IGZyYW1lc1RvU2tpcCwgc2l6ZV90
IGNhcGFjaXR5KQogICAgICAgICA6IG1fdm0odm0pCiAgICAgICAgICwgbV9yZXN1bHRzKHJlc3Vs
dHMpCi0gICAgICAgICwgbV9yZW1haW5pbmdDYXBhY2l0eUZvckZyYW1lQ2FwdHVyZShyZW1haW5p
bmdDYXBhY2l0eSkKKyAgICAgICAgLCBtX2ZyYW1lc1RvU2tpcChmcmFtZXNUb1NraXApCisgICAg
ICAgICwgbV9yZW1haW5pbmdDYXBhY2l0eUZvckZyYW1lQ2FwdHVyZShjYXBhY2l0eSkKICAgICB7
CisgICAgICAgIG1fcmVzdWx0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNhcGFjaXR5KTsKICAg
ICB9CiAKICAgICBTdGFja1Zpc2l0b3I6OlN0YXR1cyBvcGVyYXRvcigpKFN0YWNrVmlzaXRvciYg
dmlzaXRvcikgY29uc3QKICAgICB7Ci0gICAgICAgIFZNJiB2bSA9IG1fdm07CisgICAgICAgIGlm
IChtX2ZyYW1lc1RvU2tpcCA+IDApIHsKKyAgICAgICAgICAgIG1fZnJhbWVzVG9Ta2lwLS07Cisg
ICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51ZTsKKyAgICAgICAgfQorCiAg
ICAgICAgIGlmIChtX3JlbWFpbmluZ0NhcGFjaXR5Rm9yRnJhbWVDYXB0dXJlKSB7CiAgICAgICAg
ICAgICBpZiAodmlzaXRvci0+aXNKU0ZyYW1lKCkKICAgICAgICAgICAgICAgICAmJiAhaXNXZWJB
c3NlbWJseUV4ZWN1dGFibGUodmlzaXRvci0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgp
KQogICAgICAgICAgICAgICAgICYmICF2aXNpdG9yLT5jb2RlQmxvY2soKS0+dW5saW5rZWRDb2Rl
QmxvY2soKS0+aXNCdWlsdGluRnVuY3Rpb24oKSkgewogICAgICAgICAgICAgICAgIFN0YWNrRnJh
bWUgcyA9IHsKLSAgICAgICAgICAgICAgICAgICAgU3Ryb25nPEpTT2JqZWN0Pih2bSwgdmlzaXRv
ci0+Y2FsbGVlKCkpLAotICAgICAgICAgICAgICAgICAgICBTdHJvbmc8Q29kZUJsb2NrPih2bSwg
dmlzaXRvci0+Y29kZUJsb2NrKCkpLAorICAgICAgICAgICAgICAgICAgICBTdHJvbmc8SlNPYmpl
Y3Q+KG1fdm0sIHZpc2l0b3ItPmNhbGxlZSgpKSwKKyAgICAgICAgICAgICAgICAgICAgU3Ryb25n
PENvZGVCbG9jaz4obV92bSwgdmlzaXRvci0+Y29kZUJsb2NrKCkpLAogICAgICAgICAgICAgICAg
ICAgICB2aXNpdG9yLT5ieXRlY29kZU9mZnNldCgpCiAgICAgICAgICAgICAgICAgfTsKICAgICAg
ICAgICAgICAgICBtX3Jlc3VsdHMuYXBwZW5kKHMpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICBTdGFja0ZyYW1lIHMgPSB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cm9u
ZzxKU09iamVjdD4odm0sIHZpc2l0b3ItPmNhbGxlZSgpKSwKKyAgICAgICAgICAgICAgICAgICAg
U3Ryb25nPEpTT2JqZWN0PihtX3ZtLCB2aXNpdG9yLT5jYWxsZWUoKSksCiAgICAgICAgICAgICAg
ICAgICAgIFN0cm9uZzxDb2RlQmxvY2s+KCksCiAgICAgICAgICAgICAgICAgICAgIDAgLy8gdW51
c2VkIHZhbHVlIGJlY2F1c2UgY29kZUJsb2NrIGlzIG51bGwuCiAgICAgICAgICAgICAgICAgfTsK
QEAgLTUzNiwzMSArNTQyLDQxIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgVk0mIG1fdm07CiAg
ICAgVmVjdG9yPFN0YWNrRnJhbWU+JiBtX3Jlc3VsdHM7CisgICAgbXV0YWJsZSBzaXplX3QgbV9m
cmFtZXNUb1NraXA7CiAgICAgbXV0YWJsZSBzaXplX3QgbV9yZW1haW5pbmdDYXBhY2l0eUZvckZy
YW1lQ2FwdHVyZTsKIH07CiAKLXZvaWQgSW50ZXJwcmV0ZXI6OmdldFN0YWNrVHJhY2UoVmVjdG9y
PFN0YWNrRnJhbWU+JiByZXN1bHRzLCBzaXplX3QgbWF4U3RhY2tTaXplKQordm9pZCBJbnRlcnBy
ZXRlcjo6Z2V0U3RhY2tUcmFjZShWZWN0b3I8U3RhY2tGcmFtZT4mIHJlc3VsdHMsIHNpemVfdCBm
cmFtZXNUb1NraXAsIHNpemVfdCBtYXhTdGFja1NpemUpCiB7CiAgICAgVk0mIHZtID0gbV92bTsK
ICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHZtLnRvcENhbGxGcmFtZTsKICAgICBpZiAoIWNh
bGxGcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgR2V0U3RhY2tUcmFjZUZ1bmN0b3IgZnVu
Y3Rvcih2bSwgcmVzdWx0cywgbWF4U3RhY2tTaXplKTsKKyAgICBTdGFja0RlcHRoQ291bnRGdW5j
dG9yIGNvdW50RnVuY3RvcjsKKyAgICBjYWxsRnJhbWUtPml0ZXJhdGUoY291bnRGdW5jdG9yKTsK
KyAgICBzaXplX3QgZnJhbWVzQ291bnQgPSBjb3VudEZ1bmN0b3IuY291bnQ7CisgICAgaWYgKGZy
YW1lc0NvdW50IDw9IGZyYW1lc1RvU2tpcCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZnJhbWVz
Q291bnQgLT0gZnJhbWVzVG9Ta2lwOworICAgIGZyYW1lc0NvdW50ID0gc3RkOjptaW4obWF4U3Rh
Y2tTaXplLCBmcmFtZXNDb3VudCk7CisKKyAgICBHZXRTdGFja1RyYWNlRnVuY3RvciBmdW5jdG9y
KHZtLCByZXN1bHRzLCBmcmFtZXNUb1NraXAsIGZyYW1lc0NvdW50KTsKICAgICBjYWxsRnJhbWUt
Pml0ZXJhdGUoZnVuY3Rvcik7CisgICAgQVNTRVJUKHJlc3VsdHMuc2l6ZSgpID09IHJlc3VsdHMu
Y2FwYWNpdHkoKSk7CiB9CiAKLUpTU3RyaW5nKiBJbnRlcnByZXRlcjo6c3RhY2tUcmFjZUFzU3Ry
aW5nKEV4ZWNTdGF0ZSogZXhlYywgVmVjdG9yPFN0YWNrRnJhbWU+IHN0YWNrVHJhY2UpCitKU1N0
cmluZyogSW50ZXJwcmV0ZXI6OnN0YWNrVHJhY2VBc1N0cmluZyhWTSYgdm0sIGNvbnN0IFZlY3Rv
cjxTdGFja0ZyYW1lPiYgc3RhY2tUcmFjZSkKIHsKICAgICAvLyBGSVhNRTogSlNTdHJpbmdKb2lu
ZXIgY291bGQgYmUgbW9yZSBlZmZpY2llbnQgdGhhbiBTdHJpbmdCdWlsZGVyIGhlcmUuCiAgICAg
U3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YWNrVHJhY2Uuc2l6ZSgpOyBpKyspIHsKICAgICAgICAg
YnVpbGRlci5hcHBlbmQoU3RyaW5nKHN0YWNrVHJhY2VbaV0udG9TdHJpbmcodm0pKSk7CiAgICAg
ICAgIGlmIChpICE9IHN0YWNrVHJhY2Uuc2l6ZSgpIC0gMSkKICAgICAgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKCdcbicpOwogICAgIH0KLSAgICByZXR1cm4ganNTdHJpbmcoJmV4ZWMtPnZtKCksIGJ1
aWxkZXIudG9TdHJpbmcoKSk7CisgICAgcmV0dXJuIGpzU3RyaW5nKCZ2bSwgYnVpbGRlci50b1N0
cmluZygpKTsKIH0KIAogQUxXQVlTX0lOTElORSBzdGF0aWMgSGFuZGxlckluZm8qIGZpbmRFeGNl
cHRpb25IYW5kbGVyKFN0YWNrVmlzaXRvciYgdmlzaXRvciwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IENvZGVCbG9jazo6UmVxdWlyZWRIYW5kbGVyIHJlcXVpcmVkSGFuZGxlcikKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCShyZXZpc2lv
biAyMDE5NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjE3LDcgKzIxNyw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBORVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIHVud2luZChWTSYsIENhbGxGcmFtZSom
LCBFeGNlcHRpb24qLCBVbndpbmRTdGFydCk7CiAgICAgICAgIHZvaWQgbm90aWZ5RGVidWdnZXJP
ZkV4Y2VwdGlvblRvQmVUaHJvd24oQ2FsbEZyYW1lKiwgRXhjZXB0aW9uKik7CiAgICAgICAgIE5F
VkVSX0lOTElORSB2b2lkIGRlYnVnKENhbGxGcmFtZSosIERlYnVnSG9va0lEKTsKLSAgICAgICAg
SlNTdHJpbmcqIHN0YWNrVHJhY2VBc1N0cmluZyhFeGVjU3RhdGUqLCBWZWN0b3I8U3RhY2tGcmFt
ZT4pOworICAgICAgICBzdGF0aWMgSlNTdHJpbmcqIHN0YWNrVHJhY2VBc1N0cmluZyhWTSYsIGNv
bnN0IFZlY3RvcjxTdGFja0ZyYW1lPiYpOwogCiAgICAgICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdFdpdGhFcnJvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSop
OwogICAgICAgICBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsRXJyb3JD
b25zdHJ1Y3RvcihFeGVjU3RhdGUqKTsKQEAgLTIyNiw3ICsyMjYsNyBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXBDYWxsRnJhbWUoQ2FsbEZy
YW1lKik7CiAKLSAgICAgICAgdm9pZCBnZXRTdGFja1RyYWNlKFZlY3RvcjxTdGFja0ZyYW1lPiYg
cmVzdWx0cywgc2l6ZV90IG1heFN0YWNrU2l6ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90
Pjo6bWF4KCkpOworICAgICAgICB2b2lkIGdldFN0YWNrVHJhY2UoVmVjdG9yPFN0YWNrRnJhbWU+
JiByZXN1bHRzLCBzaXplX3QgZnJhbWVzVG9Ta2lwID0gMCwgc2l6ZV90IG1heFN0YWNrU2l6ZSA9
IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkpOwogCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgZW51bSBFeGVjdXRpb25GbGFnIHsgTm9ybWFsLCBJbml0aWFsaXplQW5kUmV0dXJuIH07
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlz
aXRvci5oCShyZXZpc2lvbiAyMDE5NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvU3RhY2tWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4MCw2ICsxODAsMTcgQEAg
cHJpdmF0ZToKICAgICBtdXRhYmxlIENhbGxGcmFtZSogbV9jYWxsZXJGcmFtZTsKIH07CiAKK2Ns
YXNzIFN0YWNrRGVwdGhDb3VudEZ1bmN0b3IgeworcHVibGljOgorICAgIFN0YWNrVmlzaXRvcjo6
U3RhdHVzIG9wZXJhdG9yKCkoU3RhY2tWaXNpdG9yJikgY29uc3QKKyAgICB7CisgICAgICAgIGNv
dW50Kys7CisgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOworICAgIH0KKyAg
ICAKKyAgICBtdXRhYmxlIHNpemVfdCBjb3VudCB7IDAgfTsKK307CisKIH0gLy8gbmFtZXNwYWNl
IEpTQwogCiAjZW5kaWYgLy8gU3RhY2tWaXNpdG9yX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Vycm9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FcnJvci5jcHAJKHJldmlzaW9uIDIwMTk3NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Vycm9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQzLDcgKzE0Myw4
IEBAIGJvb2wgYWRkRXJyb3JJbmZvQW5kR2V0Qnl0ZWNvZGVPZmZzZXQoRXgKIHsKICAgICBWZWN0
b3I8U3RhY2tGcmFtZT4gc3RhY2tUcmFjZSA9IFZlY3RvcjxTdGFja0ZyYW1lPigpOwogCi0gICAg
dm0uaW50ZXJwcmV0ZXItPmdldFN0YWNrVHJhY2Uoc3RhY2tUcmFjZSk7CisgICAgc2l6ZV90IGZy
YW1lc1RvU2tpcCA9IHVzZUN1cnJlbnRGcmFtZSA/IDAgOiAxOworICAgIHZtLmludGVycHJldGVy
LT5nZXRTdGFja1RyYWNlKHN0YWNrVHJhY2UsIGZyYW1lc1RvU2tpcCk7CiAgICAgaWYgKCFzdGFj
a1RyYWNlLmlzRW1wdHkoKSkgewogCiAgICAgICAgIEFTU0VSVChleGVjID09IHZtLnRvcENhbGxG
cmFtZSB8fCBleGVjID09IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygp
IHx8IGV4ZWMgPT0gZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCkpOwpA
QCAtMTczLDkgKzE3NCw3IEBAIGJvb2wgYWRkRXJyb3JJbmZvQW5kR2V0Qnl0ZWNvZGVPZmZzZXQo
RXgKICAgICAgICAgaWYgKCFmcmFtZVNvdXJjZVVSTC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBv
YmotPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+c291cmNlVVJMLCBqc1N0cmluZygm
dm0sIGZyYW1lU291cmNlVVJMKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsKIAotICAgICAgICBp
ZiAoIXVzZUN1cnJlbnRGcmFtZSkKLSAgICAgICAgICAgIHN0YWNrVHJhY2UucmVtb3ZlKDApOwot
ICAgICAgICBvYmotPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+c3RhY2ssIHZtLmlu
dGVycHJldGVyLT5zdGFja1RyYWNlQXNTdHJpbmcodm0udG9wQ2FsbEZyYW1lLCBzdGFja1RyYWNl
KSwgRG9udEVudW0pOworICAgICAgICBvYmotPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+c3RhY2ssIEludGVycHJldGVyOjpzdGFja1RyYWNlQXNTdHJpbmcodm0sIHN0YWNrVHJhY2Up
LCBEb250RW51bSk7CiAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uY3BwCShyZXZpc2lvbiAyMDE5NzQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTc3LDcgKzc3LDcgQEAgdm9pZCBFeGNlcHRpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgSgogICAgIFZlY3RvcjxTdGFja0ZyYW1lPiBzdGFja1RyYWNlOwogICAgIGlmIChhY3Rpb24g
PT0gU3RhY2tDYXB0dXJlQWN0aW9uOjpDYXB0dXJlU3RhY2spCiAgICAgICAgIHZtLmludGVycHJl
dGVyLT5nZXRTdGFja1RyYWNlKHN0YWNrVHJhY2UpOwotICAgIG1fc3RhY2sgPSBSZWZDb3VudGVk
QXJyYXk8U3RhY2tGcmFtZT4oc3RhY2tUcmFjZSk7CisgICAgbV9zdGFjayA9IFdURk1vdmUoc3Rh
Y2tUcmFjZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmgJKHJldmlzaW9uIDIwMTk3NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDcgKzI3
LDcgQEAKICNkZWZpbmUgRXhjZXB0aW9uX2gKIAogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCi0j
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRBcnJheS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
IAogbmFtZXNwYWNlIEpTQyB7CiAgICAgCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICB9
CiAKICAgICBKU1ZhbHVlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZS5nZXQoKTsgfQot
ICAgIGNvbnN0IFJlZkNvdW50ZWRBcnJheTxTdGFja0ZyYW1lPiYgc3RhY2soKSBjb25zdCB7IHJl
dHVybiBtX3N0YWNrOyB9CisgICAgY29uc3QgVmVjdG9yPFN0YWNrRnJhbWU+JiBzdGFjaygpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhY2s7IH0KIAogICAgIGJvb2wgZGlkTm90aWZ5SW5zcGVjdG9yT2ZU
aHJvdygpIGNvbnN0IHsgcmV0dXJuIG1fZGlkTm90aWZ5SW5zcGVjdG9yT2ZUaHJvdzsgfQogICAg
IHZvaWQgc2V0RGlkTm90aWZ5SW5zcGVjdG9yT2ZUaHJvdygpIHsgbV9kaWROb3RpZnlJbnNwZWN0
b3JPZlRocm93ID0gdHJ1ZTsgfQpAQCAtNjksNyArNjksNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oVk0mLCBKU1ZhbHVlIHRocm93blZhbHVlLCBTdGFja0NhcHR1cmVBY3Rp
b24pOwogCiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fdmFsdWU7Ci0gICAgUmVmQ291bnRl
ZEFycmF5PFN0YWNrRnJhbWU+IG1fc3RhY2s7CisgICAgVmVjdG9yPFN0YWNrRnJhbWU+IG1fc3Rh
Y2s7CiAgICAgYm9vbCBtX2RpZE5vdGlmeUluc3BlY3Rvck9mVGhyb3cgeyBmYWxzZSB9OwogCiAg
ICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsK
</data>
<flag name="review"
          id="304970"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>