<?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>67342</bug_id>
          
          <creation_ts>2011-08-31 16:53:39 -0700</creation_ts>
          <short_desc>Replace local implementation of string equals() methods with UString versions</short_desc>
          <delta_ts>2011-09-02 18:13:33 -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>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>
          
          <blocked>66661</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>460082</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-08-31 16:53:39 -0700</bug_when>
    <thetext>As part of the changes for https://bugs.webkit.org/show_bug.cgi?id=66161 with the goal of eliminating the use of ::characters() calls, we can coalesce the various equals() methods that exist in the code and have those call sites use the UString implementations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460675</commentid>
    <comment_count>1</comment_count>
      <attachid>106003</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-09-01 12:15:22 -0700</bug_when>
    <thetext>Created attachment 106003
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460682</commentid>
    <comment_count>2</comment_count>
      <attachid>106007</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-09-01 12:22:19 -0700</bug_when>
    <thetext>Created attachment 106007
Real proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460756</commentid>
    <comment_count>3</comment_count>
      <attachid>106007</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-09-01 13:47:43 -0700</bug_when>
    <thetext>Comment on attachment 106007
Real proposed patch

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

&gt; Source/JavaScriptCore/runtime/Identifier.cpp:72
&gt; +    return WTF::equal(r, s);

It looks like there is an additional level of function call here. What’s the performance impact?

&gt; Source/JavaScriptCore/runtime/Identifier.h:140
&gt; +        return WTF::equal(r, s, length);

It looks like there is an additional level of function call here as well as additional null checks. What’s the performance impact?

&gt; Source/JavaScriptCore/wtf/text/AtomicString.cpp:93
&gt; +    static inline bool equal(StringImpl* r, const char* s)

The inline keyword is redundant inside a class definition. There is no value to adding it.

&gt; Source/JavaScriptCore/wtf/text/AtomicString.cpp:95
&gt; +        return WTF::equal(r, s);

It looks like there is an additional level of function call here as well as additional null checks. What’s the performance impact?

&gt; Source/JavaScriptCore/wtf/text/AtomicString.cpp:108
&gt; +    return WTF::equal(a.impl(), b);

It looks like there is an additional level of function call here. What’s the performance impact?

&gt; Source/JavaScriptCore/wtf/text/AtomicString.cpp:-138
&gt; -static inline bool equal(StringImpl* string, const UChar* characters, unsigned length)

Looks like the new version of the function is no longer inlined for callers within this source file. What is the performance impact of that?

&gt; Source/JavaScriptCore/wtf/text/StringImpl.cpp:1003
&gt; +    if (!b)
&gt; +        return !a;

This can be return false.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461472</commentid>
    <comment_count>4</comment_count>
      <attachid>106007</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-09-02 13:25:49 -0700</bug_when>
    <thetext>Comment on attachment 106007
Real proposed patch

Per our discussion, since the call sites to equal are all trivial methods we should be able to inline these instead, removing the additional layer of function calling &amp; likely overall reducing the size of the binary.

r+ with Darin&apos;s comments + perf testing (particularly for JSC, since you&apos;re changing the implementation of equal for Identifiers).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461635</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-09-02 16:50:27 -0700</bug_when>
    <thetext>Made changes suggested by Darin and Gavin.

Measured performance with updated changes:

                           Baseline       w/updated changes
SunSpider command line   230.0 +/- 0.2%    230.0 +/- 0.2%
V8 command line         1639.4 +/- 0.3%   1638.2 +/- 0.2%
Dromaeo DOM Core        1494.69           1499.86</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461680</commentid>
    <comment_count>6</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-09-02 18:13:33 -0700</bug_when>
    <thetext>Committed r94475: &lt;http://trac.webkit.org/changeset/94475&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106003</attachid>
            <date>2011-09-01 12:15:22 -0700</date>
            <delta_ts>2011-09-01 12:22:19 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>67340-1.patch</filename>
            <type>text/plain</type>
            <size>9446</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQzMjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDAgQEAK
KzIwMTEtMDktMDEgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAg
ICAgUmVtb3ZlIHNpbXBsZSB1c2FnZSBvZiBVU3RyaW5nOjpjaGFyYWN0ZXJzKCkgZnJvbSBKYXZh
U2NyaXB0Q29yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjczNDAKKworICAgICAgICBJbiBwcmVwYXJhdGlvbiB0byBhbGxvd2luZyBTdHJpbmdJbXBs
IHRvIGJlIGJhY2tlZCBieSA4IGJpdCAKKyAgICAgICAgY2hhcmFjdGVycyB3aGVuIGFwcHJvcHJp
YXRlLCB3ZSBuZWVkIHRvIGVsaW1pbmF0ZSBvciBjaGFuZ2UgdGhlCisgICAgICAgIHVzYWdlIG9m
IFN0cmluZ0ltcGw6OmNoYXJhY3RlcnMoKS4gIE1vc3Qgb2YgdGhlIGNoYW5nZXMgYmVsb3cKKyAg
ICAgICAgY2hhbmdlIHMtPmNoYXJhY3RlcnMoKVswXSB0byBzWzBdLgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6a2V5Rm9yQ2hhcmFjdGVyU3dpdGNoKToKKyAg
ICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKyAgICAgICAgKEpTQzo6cHJv
Y2Vzc0NsYXVzZUxpc3QpOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoK
KyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKToKKyAgICAgICAgKiBq
aXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6Cisg
ICAgICAgICogcnVudGltZS9JZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKEpTQzo6SWRlbnRpZmll
cjo6YWRkU2xvd0Nhc2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlv
bnMuY3BwOgorICAgICAgICAoSlNDOjpqc1RvTnVtYmVyKToKKyAgICAgICAgKEpTQzo6cGFyc2VG
bG9hdCk6CisgICAgICAgICogcnVudGltZS9KU1N0cmluZy5jcHA6CisgICAgICAgIChKU0M6OkpT
U3RyaW5nOjpzdWJzdHJpbmdGcm9tUm9wZSk6CisgICAgICAgICogcnVudGltZS9KU1N0cmluZy5o
OgorICAgICAgICAoSlNDOjpqc1NpbmdsZUNoYXJhY3RlclN1YnN0cmluZyk6CisgICAgICAgIChK
U0M6OmpzU3RyaW5nKToKKyAgICAgICAgKEpTQzo6anNTdWJzdHJpbmcpOgorICAgICAgICAoSlND
Ojpqc093bmVkU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cC5jcHA6CisgICAgICAg
IChKU0M6OnJlZ0V4cEZsYWdzKToKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg6
CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6Om9wZXJhdG9yW10pOgorCiAyMDExLTA5LTAx
ICBBZGEgQ2hhbiAgPGFkYWNoYW5AYXBwbGUuY29tPgogCiAgICAgICAgIEV4cG9ydCBmYXN0TWFs
bG9jU3RhdGlzdGljcyBhbmQgSGVhcDo6b2JqZWN0VHlwZUNvdW50cyBmb3IgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3MTYwLgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJ
KHJldmlzaW9uIDkzOTIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNzMsNyArMjI3Myw3IEBA
IHN0YXRpYyBpbnQzMl90IGtleUZvckNoYXJhY3RlclN3aXRjaChFeHAKICAgICBTdHJpbmdJbXBs
KiBjbGF1c2UgPSBzdGF0aWNfY2FzdDxTdHJpbmdOb2RlKj4obm9kZSktPnZhbHVlKCkuaW1wbCgp
OwogICAgIEFTU0VSVChjbGF1c2UtPmxlbmd0aCgpID09IDEpOwogICAgIAotICAgIGludDMyX3Qg
a2V5ID0gY2xhdXNlLT5jaGFyYWN0ZXJzKClbMF07CisgICAgaW50MzJfdCBrZXkgPSAoKmNsYXVz
ZSlbMF07CiAgICAgQVNTRVJUKGtleSA+PSBtaW4pOwogICAgIEFTU0VSVChrZXkgPD0gbWF4KTsK
ICAgICByZXR1cm4ga2V5IC0gbWluOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkocmV2aXNpb24gOTM5MjIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE3NDAsNyArMTc0MCw3IEBAIHN0YXRpYyB2b2lkIHByb2Nlc3NDbGF1c2VM
aXN0KENsYXVzZUxpc3QKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNvbnN0IFVTdHJpbmcm
IHZhbHVlID0gc3RhdGljX2Nhc3Q8U3RyaW5nTm9kZSo+KGNsYXVzZUV4cHJlc3Npb24pLT52YWx1
ZSgpLnVzdHJpbmcoKTsKICAgICAgICAgICAgIGlmIChzaW5nbGVDaGFyYWN0ZXJTd2l0Y2ggJj0g
dmFsdWUubGVuZ3RoKCkgPT0gMSkgewotICAgICAgICAgICAgICAgIGludDMyX3QgaW50VmFsID0g
dmFsdWUuaW1wbCgpLT5jaGFyYWN0ZXJzKClbMF07CisgICAgICAgICAgICAgICAgaW50MzJfdCBp
bnRWYWwgPSB2YWx1ZVswXTsKICAgICAgICAgICAgICAgICBpZiAoaW50VmFsIDwgbWluX251bSkK
ICAgICAgICAgICAgICAgICAgICAgbWluX251bSA9IGludFZhbDsKICAgICAgICAgICAgICAgICBp
ZiAoaW50VmFsID4gbWF4X251bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gOTM5MjIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MDc1LDcgKzQwNzUsNyBAQCBza2lwX2lkX2N1c3RvbV9zZWxmOgogICAgICAgICAgICAg
aWYgKHZhbHVlLT5sZW5ndGgoKSAhPSAxKQogICAgICAgICAgICAgICAgIHZQQyArPSBkZWZhdWx0
T2Zmc2V0OwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHZQQyArPSBjb2RlQmxv
Y2stPmNoYXJhY3RlclN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5vZmZzZXRGb3JWYWx1ZSh2
YWx1ZS0+Y2hhcmFjdGVycygpWzBdLCBkZWZhdWx0T2Zmc2V0KTsKKyAgICAgICAgICAgICAgICB2
UEMgKz0gY29kZUJsb2NrLT5jaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCkub2Zm
c2V0Rm9yVmFsdWUoKCp2YWx1ZSlbMF0sIGRlZmF1bHRPZmZzZXQpOwogICAgICAgICB9CiAgICAg
ICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gOTM5MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ1Myw3ICszNDUzLDcgQEAg
REVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCosIG9wX3N3aXRjaF9jaAogICAgIGlmIChzY3J1dGlu
ZWUuaXNTdHJpbmcoKSkgewogICAgICAgICBTdHJpbmdJbXBsKiB2YWx1ZSA9IGFzU3RyaW5nKHNj
cnV0aW5lZSktPnZhbHVlKGNhbGxGcmFtZSkuaW1wbCgpOwogICAgICAgICBpZiAodmFsdWUtPmxl
bmd0aCgpID09IDEpCi0gICAgICAgICAgICByZXN1bHQgPSBjb2RlQmxvY2stPmNoYXJhY3RlclN3
aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5jdGlGb3JWYWx1ZSh2YWx1ZS0+Y2hhcmFjdGVycygp
WzBdKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICAgICAgcmVzdWx0ID0gY29kZUJsb2Nr
LT5jaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCkuY3RpRm9yVmFsdWUoKCp2YWx1
ZSlbMF0pLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfQogCiAgICAgQ0hFQ0tfRk9SX0VYQ0VQ
VElPTl9BVF9FTkQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50
aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lk
ZW50aWZpZXIuY3BwCShyZXZpc2lvbiA5MzkyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0lkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzIsNyArMjMyLDcgQEAg
UGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBJZGVudGlmaWVyOjphZGRTbAogICAgIEFTU0VSVChyLT5s
ZW5ndGgoKSk7CiAKICAgICBpZiAoci0+bGVuZ3RoKCkgPT0gMSkgewotICAgICAgICBVQ2hhciBj
ID0gci0+Y2hhcmFjdGVycygpWzBdOworICAgICAgICBVQ2hhciBjID0gKCpyKVswXTsKICAgICAg
ICAgaWYgKGMgPD0gbWF4U2luZ2xlQ2hhcmFjdGVyU3RyaW5nKQogICAgICAgICAgICAgciA9IGds
b2JhbERhdGEtPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdSZXAoYyk7CiAgICAg
ICAgICAgICBpZiAoci0+aXNJZGVudGlmaWVyKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCShy
ZXZpc2lvbiA5MzkyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0RnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY3LDcgKzM2Nyw3IEBAIGRv
dWJsZSBqc1RvTnVtYmVyKGNvbnN0IFVTdHJpbmcmIHMpCiAgICAgdW5zaWduZWQgc2l6ZSA9IHMu
bGVuZ3RoKCk7CiAKICAgICBpZiAoc2l6ZSA9PSAxKSB7Ci0gICAgICAgIFVDaGFyIGMgPSBzLmNo
YXJhY3RlcnMoKVswXTsKKyAgICAgICAgVUNoYXIgYyA9IHNbMF07CiAgICAgICAgIGlmIChpc0FT
Q0lJRGlnaXQoYykpCiAgICAgICAgICAgICByZXR1cm4gYyAtICcwJzsKICAgICAgICAgaWYgKGlz
U3RyV2hpdGVTcGFjZShjKSkKQEAgLTQxMCw3ICs0MTAsNyBAQCBzdGF0aWMgZG91YmxlIHBhcnNl
RmxvYXQoY29uc3QgVVN0cmluZyYgCiAgICAgdW5zaWduZWQgc2l6ZSA9IHMubGVuZ3RoKCk7CiAK
ICAgICBpZiAoc2l6ZSA9PSAxKSB7Ci0gICAgICAgIFVDaGFyIGMgPSBzLmNoYXJhY3RlcnMoKVsw
XTsKKyAgICAgICAgVUNoYXIgYyA9IHNbMF07CiAgICAgICAgIGlmIChpc0FTQ0lJRGlnaXQoYykp
CiAgICAgICAgICAgICByZXR1cm4gYyAtICcwJzsKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJp
Y19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCShyZXZpc2lvbiA5MzkyMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk0LDcg
KzE5NCw3IEBAIEpTU3RyaW5nKiBKU1N0cmluZzo6c3Vic3RyaW5nRnJvbVJvcGUoRXgKIAogICAg
IGlmIChzdWJzdHJpbmdMZW5ndGggPT0gMSkgewogICAgICAgICBBU1NFUlQoc3Vic3RyaW5nRmli
ZXJDb3VudCA9PSAxKTsKLSAgICAgICAgVUNoYXIgYyA9IHN1YnN0cmluZ0ZpYmVyc1swXS5jaGFy
YWN0ZXJzKClbMF07CisgICAgICAgIFVDaGFyIGMgPSBzdWJzdHJpbmdGaWJlcnNbMF1bMF07CiAg
ICAgICAgIGlmIChjIDw9IG1heFNpbmdsZUNoYXJhY3RlclN0cmluZykKICAgICAgICAgICAgIHJl
dHVybiBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGdsb2Jh
bERhdGEsIGMpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
dHJpbmcuaAkocmV2aXNpb24gOTM5MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC01NjAsNyArNTYwLDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgewogICAgICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+
Z2xvYmFsRGF0YSgpOwogICAgICAgICBBU1NFUlQob2Zmc2V0IDwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHMubGVuZ3RoKCkpKTsKLSAgICAgICAgVUNoYXIgYyA9IHMuY2hhcmFjdGVycygpW29mZnNl
dF07CisgICAgICAgIFVDaGFyIGMgPSBzW29mZnNldF07CiAgICAgICAgIGlmIChjIDw9IG1heFNp
bmdsZUNoYXJhY3RlclN0cmluZykKICAgICAgICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5zbWFs
bFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGdsb2JhbERhdGEsIGMpOwogICAgICAgICBy
ZXR1cm4gZml4dXBWUHRyKGdsb2JhbERhdGEsIEpTU3RyaW5nOjpjcmVhdGUoKmdsb2JhbERhdGEs
IFVTdHJpbmcoU3RyaW5nSW1wbDo6Y3JlYXRlKHMuaW1wbCgpLCBvZmZzZXQsIDEpKSkpOwpAQCAt
NTk1LDcgKzU5NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBpZiAoIXNpemUpCiAgICAg
ICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLmVtcHR5U3RyaW5nKGdsb2Jh
bERhdGEpOwogICAgICAgICBpZiAoc2l6ZSA9PSAxKSB7Ci0gICAgICAgICAgICBVQ2hhciBjID0g
cy5jaGFyYWN0ZXJzKClbMF07CisgICAgICAgICAgICBVQ2hhciBjID0gc1swXTsKICAgICAgICAg
ICAgIGlmIChjIDw9IG1heFNpbmdsZUNoYXJhY3RlclN0cmluZykKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyhnbG9i
YWxEYXRhLCBjKTsKICAgICAgICAgfQpAQCAtNjIzLDcgKzYyMyw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBpZiAoIWxlbmd0aCkKICAgICAgICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5z
bWFsbFN0cmluZ3MuZW1wdHlTdHJpbmcoZ2xvYmFsRGF0YSk7CiAgICAgICAgIGlmIChsZW5ndGgg
PT0gMSkgewotICAgICAgICAgICAgVUNoYXIgYyA9IHMuY2hhcmFjdGVycygpW29mZnNldF07Cisg
ICAgICAgICAgICBVQ2hhciBjID0gc1tvZmZzZXRdOwogICAgICAgICAgICAgaWYgKGMgPD0gbWF4
U2luZ2xlQ2hhcmFjdGVyU3RyaW5nKQogICAgICAgICAgICAgICAgIHJldHVybiBnbG9iYWxEYXRh
LT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGdsb2JhbERhdGEsIGMpOwogICAg
ICAgICB9CkBAIC02MzYsNyArNjM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGlmICgh
c2l6ZSkKICAgICAgICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3MuZW1wdHlT
dHJpbmcoZ2xvYmFsRGF0YSk7CiAgICAgICAgIGlmIChzaXplID09IDEpIHsKLSAgICAgICAgICAg
IFVDaGFyIGMgPSBzLmNoYXJhY3RlcnMoKVswXTsKKyAgICAgICAgICAgIFVDaGFyIGMgPSBzWzBd
OwogICAgICAgICAgICAgaWYgKGMgPD0gbWF4U2luZ2xlQ2hhcmFjdGVyU3RyaW5nKQogICAgICAg
ICAgICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVy
U3RyaW5nKGdsb2JhbERhdGEsIGMpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cC5jcHAJKHJldmlzaW9uIDkzOTIyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIs
NyBAQCBSZWdFeHBGbGFncyByZWdFeHBGbGFncyhjb25zdCBVU3RyaW5nJiBzCiAgICAgUmVnRXhw
RmxhZ3MgZmxhZ3MgPSBOb0ZsYWdzOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0
cmluZy5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIHN3aXRjaCAoc3RyaW5nLmNoYXJhY3RlcnMo
KVtpXSkgeworICAgICAgICBzd2l0Y2ggKHN0cmluZ1tpXSkgewogICAgICAgICBjYXNlICdnJzoK
ICAgICAgICAgICAgIGlmIChmbGFncyAmIEZsYWdHbG9iYWwpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIEludmFsaWRGbGFnczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaAkocmV2aXNpb24gOTM5MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNyAr
MTExLDcgQEAgcHVibGljOgogICAgICAgICBpZiAoIW1fc3RyaW5nLmlzTnVsbCgpKQogICAgICAg
ICAgICAgcmV0dXJuIG1fc3RyaW5nW2ldOwogICAgICAgICBBU1NFUlQobV9idWZmZXIpOwotICAg
ICAgICByZXR1cm4gbV9idWZmZXItPmNoYXJhY3RlcnMoKVtpXTsKKyAgICAgICAgcmV0dXJuICgq
bV9idWZmZXIpW2ldOwogICAgIH0KIAogICAgIHZvaWQgY2xlYXIoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106007</attachid>
            <date>2011-09-01 12:22:19 -0700</date>
            <delta_ts>2011-09-02 13:25:49 -0700</delta_ts>
            <desc>Real proposed patch</desc>
            <filename>67342-1.patch</filename>
            <type>text/plain</type>
            <size>7540</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQzMjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAK
KzIwMTEtMDktMDEgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAg
ICAgUmVwbGFjZSBsb2NhbCBpbXBsZW1lbnRhdGlvbiBvZiBzdHJpbmcgZXF1YWxzKCkgbWV0aG9k
cyB3aXRoIFVTdHJpbmcgdmVyc2lvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTY3MzQyCisKKyAgICAgICAgSW4gcHJlcGFyYXRpb24gdG8gYWxsb3dp
bmcgU3RyaW5nSW1wbCB0byBiZSBiYWNrZWQgYnkgOCBiaXQgCisgICAgICAgIGNoYXJhY3RlcnMg
d2hlbiBhcHByb3ByaWF0ZSwgd2UgbmVlZCB0byBlbGltaW5hdGUgb3IgY2hhbmdlIHRoZQorICAg
ICAgICB1c2FnZSBvZiBTdHJpbmdJbXBsOjpjaGFyYWN0ZXJzKCkuIENoYW5nZSB0aGUgdXNlcyBv
ZiBjaGFyYWN0ZXJzKCkKKyAgICAgICAgdGhhdCBhcmUgdXNlZCB0byBpbXBsZW1lbnQgcmVkdW5k
YW50IGVxdWFscygpIG1ldGhvZHMuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBydW50aW1lL0lkZW50aWZpZXIuY3BwOgorICAgICAgICAoSlNDOjpJ
ZGVudGlmaWVyOjplcXVhbCk6CisgICAgICAgICogcnVudGltZS9JZGVudGlmaWVyLmg6CisgICAg
ICAgIChKU0M6OklkZW50aWZpZXI6OmVxdWFsKToKKyAgICAgICAgKiB3dGYvdGV4dC9BdG9taWNT
dHJpbmcuY3BwOgorICAgICAgICAoV1RGOjpDU3RyaW5nVHJhbnNsYXRvcjo6ZXF1YWwpOiBNb3Zl
ZCBhbiBvcHRpbWl6ZWQgbWV0aG9kIHRvIGhlcmUuCisgICAgICAgIChXVEY6Om9wZXJhdG9yPT0p
OgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwOgorICAgICAgICAoV1RGOjplcXVh
bCk6CisgICAgICAgICogd3RmL3RleHQvU3RyaW5nSW1wbC5oOgorCiAyMDExLTA5LTAxICBBZGEg
Q2hhbiAgPGFkYWNoYW5AYXBwbGUuY29tPgogCiAgICAgICAgIEV4cG9ydCBmYXN0TWFsbG9jU3Rh
dGlzdGljcyBhbmQgSGVhcDo6b2JqZWN0VHlwZUNvdW50cyBmb3IgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY3MTYwLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDkzOTIyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5
LDEyICs2OSw3IEBAIHZvaWQgZGVsZXRlSWRlbnRpZmllclRhYmxlKElkZW50aWZpZXJUYWIKIAog
Ym9vbCBJZGVudGlmaWVyOjplcXVhbChjb25zdCBTdHJpbmdJbXBsKiByLCBjb25zdCBjaGFyKiBz
KQogewotICAgIGludCBsZW5ndGggPSByLT5sZW5ndGgoKTsKLSAgICBjb25zdCBVQ2hhciogZCA9
IHItPmNoYXJhY3RlcnMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSAhPSBsZW5ndGg7ICsraSkK
LSAgICAgICAgaWYgKGRbaV0gIT0gKHVuc2lnbmVkIGNoYXIpc1tpXSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICByZXR1cm4gc1tsZW5ndGhdID09IDA7CisgICAgcmV0dXJuIFdURjo6
ZXF1YWwociwgcyk7CiB9CiAKIHN0cnVjdCBJZGVudGlmaWVyQ1N0cmluZ1RyYW5zbGF0b3IgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuaAkocmV2aXNp
b24gOTM5MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEzNywxMyArMTM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICBpbmxpbmUgYm9vbCBJZGVudGlmaWVyOjplcXVhbChjb25zdCBTdHJpbmdJbXBsKiByLCBjb25z
dCBVQ2hhciogcywgdW5zaWduZWQgbGVuZ3RoKQogICAgIHsKLSAgICAgICAgaWYgKHItPmxlbmd0
aCgpICE9IGxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY29uc3Qg
VUNoYXIqIGQgPSByLT5jaGFyYWN0ZXJzKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgIT0gbGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBpZiAoZFtpXSAhPSBzW2ldKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJl
dHVybiBXVEY6OmVxdWFsKHIsIHMsIGxlbmd0aCk7CiAgICAgfQogICAgIAogICAgIElkZW50aWZp
ZXJUYWJsZSogY3JlYXRlSWRlbnRpZmllclRhYmxlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL3RleHQvQXRvbWljU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL3RleHQvQXRvbWljU3RyaW5nLmNwcAkocmV2aXNpb24gOTM5MjIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvQXRvbWljU3RyaW5nLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTAsMTYgKzkwLDkgQEAgc3RydWN0IENTdHJpbmdUcmFuc2xhdG9yIHsKICAg
ICAgICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6Y29tcHV0ZUhhc2goYyk7CiAgICAgfQogCi0gICAg
c3RhdGljIGJvb2wgZXF1YWwoU3RyaW5nSW1wbCogciwgY29uc3QgY2hhciogcykKKyAgICBzdGF0
aWMgaW5saW5lIGJvb2wgZXF1YWwoU3RyaW5nSW1wbCogciwgY29uc3QgY2hhciogcykKICAgICB7
Ci0gICAgICAgIGludCBsZW5ndGggPSByLT5sZW5ndGgoKTsKLSAgICAgICAgY29uc3QgVUNoYXIq
IGQgPSByLT5jaGFyYWN0ZXJzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpICE9IGxlbmd0
aDsgKytpKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBzW2ldOwotICAgICAgICAg
ICAgaWYgKGRbaV0gIT0gYykKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuICFzW2xlbmd0aF07CisgICAgICAgIHJldHVybiBXVEY6OmVxdWFs
KHIsIHMpOwogICAgIH0KIAogICAgIHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShTdHJpbmdJbXBsKiYg
bG9jYXRpb24sIGNvbnN0IGNoYXIqIGNvbnN0JiBjLCB1bnNpZ25lZCBoYXNoKQpAQCAtMTExLDEz
ICsxMDQsOCBAQCBzdHJ1Y3QgQ1N0cmluZ1RyYW5zbGF0b3IgewogfTsKIAogYm9vbCBvcGVyYXRv
cj09KGNvbnN0IEF0b21pY1N0cmluZyYgYSwgY29uc3QgY2hhciogYikKLXsgCi0gICAgU3RyaW5n
SW1wbCogaW1wbCA9IGEuaW1wbCgpOwotICAgIGlmICgoIWltcGwgfHwgIWltcGwtPmNoYXJhY3Rl
cnMoKSkgJiYgIWIpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICgoIWltcGwgfHwgIWlt
cGwtPmNoYXJhY3RlcnMoKSkgfHwgIWIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1
cm4gQ1N0cmluZ1RyYW5zbGF0b3I6OmVxdWFsKGltcGwsIGIpOyAKK3sKKyAgICByZXR1cm4gV1RG
OjplcXVhbChhLmltcGwoKSwgYik7CiB9CiAKIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gQXRvbWlj
U3RyaW5nOjphZGQoY29uc3QgY2hhciogYykKQEAgLTEzNSwzOSArMTIzLDYgQEAgc3RydWN0IFVD
aGFyQnVmZmVyIHsKICAgICB1bnNpZ25lZCBsZW5ndGg7CiB9OwogCi1zdGF0aWMgaW5saW5lIGJv
b2wgZXF1YWwoU3RyaW5nSW1wbCogc3RyaW5nLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5z
aWduZWQgbGVuZ3RoKQotewotICAgIGlmIChzdHJpbmctPmxlbmd0aCgpICE9IGxlbmd0aCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRklYTUU6IHBlcmhhcHMgd2Ugc2hvdWxkIGhh
dmUgYSBtb3JlIGFic3RyYWN0IG1hY3JvIHRoYXQgaW5kaWNhdGVzIHdoZW4KLSAgICAvLyBnb2lu
ZyA0IGJ5dGVzIGF0IGEgdGltZSBpcyB1bnNhZmUKLSNpZiBDUFUoQVJNKSB8fCBDUFUoU0g0KSB8
fCBDUFUoTUlQUykgfHwgQ1BVKFNQQVJDKQotICAgIGNvbnN0IFVDaGFyKiBzdHJpbmdDaGFyYWN0
ZXJzID0gc3RyaW5nLT5jaGFyYWN0ZXJzKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAh
PSBsZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoKnN0cmluZ0NoYXJhY3RlcnMrKyAhPSAqY2hh
cmFjdGVycysrKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4g
dHJ1ZTsKLSNlbHNlCi0gICAgLyogRG8gaXQgNC1ieXRlcy1hdC1hLXRpbWUgb24gYXJjaGl0ZWN0
dXJlcyB3aGVyZSBpdCdzIHNhZmUgKi8KLQotICAgIGNvbnN0IHVpbnQzMl90KiBzdHJpbmdDaGFy
YWN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHN0cmluZy0+Y2hhcmFj
dGVycygpKTsKLSAgICBjb25zdCB1aW50MzJfdCogYnVmZmVyQ2hhcmFjdGVycyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihjaGFyYWN0ZXJzKTsKLQotICAgIHVuc2lnbmVkIGhh
bGZMZW5ndGggPSBsZW5ndGggPj4gMTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IGhh
bGZMZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoKnN0cmluZ0NoYXJhY3RlcnMrKyAhPSAqYnVm
ZmVyQ2hhcmFjdGVycysrKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IGlmIChsZW5ndGggJiAxICYmICAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MTZfdCo+KHN0
cmluZ0NoYXJhY3RlcnMpICE9ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQxNl90Kj4oYnVm
ZmVyQ2hhcmFjdGVycykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVl
OwotI2VuZGlmCi19Ci0KIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdG9taWNTdHJpbmcmIHN0cmlu
ZywgY29uc3QgVmVjdG9yPFVDaGFyPiYgdmVjdG9yKQogewogICAgIHJldHVybiBzdHJpbmcuaW1w
bCgpICYmIGVxdWFsKHN0cmluZy5pbXBsKCksIHZlY3Rvci5kYXRhKCksIHZlY3Rvci5zaXplKCkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdJbXBsLmNw
cAkocmV2aXNpb24gOTM5MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3Ry
aW5nSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5NSw2ICs5OTUsNDIgQEAgYm9vbCBlcXVh
bChjb25zdCBTdHJpbmdJbXBsKiBhLCBjb25zdCBjaAogICAgIHJldHVybiAhYltsZW5ndGhdOwog
fQogCitib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqIGEsIGNvbnN0IFVDaGFyKiBiLCB1bnNp
Z25lZCBsZW5ndGgpCit7CisgICAgaWYgKCFhKQorICAgICAgICByZXR1cm4gIWI7CisgICAgaWYg
KCFiKQorICAgICAgICByZXR1cm4gIWE7CisKKyAgICBpZiAoYS0+bGVuZ3RoKCkgIT0gbGVuZ3Ro
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gRklYTUU6IHBlcmhhcHMgd2Ugc2hvdWxk
IGhhdmUgYSBtb3JlIGFic3RyYWN0IG1hY3JvIHRoYXQgaW5kaWNhdGVzIHdoZW4KKyAgICAvLyBn
b2luZyA0IGJ5dGVzIGF0IGEgdGltZSBpcyB1bnNhZmUKKyNpZiBDUFUoQVJNKSB8fCBDUFUoU0g0
KSB8fCBDUFUoTUlQUykgfHwgQ1BVKFNQQVJDKQorICAgIGNvbnN0IFVDaGFyKiBhcyA9IGEtPmNo
YXJhY3RlcnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IGxlbmd0aDsgKytpKQor
ICAgICAgICBpZiAoYXNbaV0gIT0gYltpXSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgLyogRG8gaXQgNC1ieXRlcy1hdC1hLXRpbWUgb24g
YXJjaGl0ZWN0dXJlcyB3aGVyZSBpdCdzIHNhZmUgKi8KKyAgICAKKyAgICBjb25zdCB1aW50MzJf
dCogYUNoYXJhY3RlcnMgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oYS0+Y2hh
cmFjdGVycygpKTsKKyAgICBjb25zdCB1aW50MzJfdCogYkNoYXJhY3RlcnMgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oYik7CisgICAgCisgICAgdW5zaWduZWQgaGFsZkxlbmd0
aCA9IGxlbmd0aCA+PiAxOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgIT0gaGFsZkxlbmd0
aDsgKytpKSB7CisgICAgICAgIGlmICgqYUNoYXJhY3RlcnMrKyAhPSAqYkNoYXJhY3RlcnMrKykK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaWYgKGxlbmd0aCAm
IDEgJiYgICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQxNl90Kj4oYUNoYXJhY3RlcnMpICE9
ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQxNl90Kj4oYkNoYXJhY3RlcnMpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKK30KKwogYm9v
bCBlcXVhbElnbm9yaW5nQ2FzZShTdHJpbmdJbXBsKiBhLCBTdHJpbmdJbXBsKiBiKQogewogICAg
IHJldHVybiBDYXNlRm9sZGluZ0hhc2g6OmVxdWFsKGEsIGIpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nSW1wbC5oCShyZXZpc2lvbiA5MzkyMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdJbXBsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM0Nyw2ICszNDcsNyBAQCBwcml2YXRlOgogYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJbXBs
KiwgY29uc3QgU3RyaW5nSW1wbCopOwogYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiwgY29u
c3QgY2hhciopOwogaW5saW5lIGJvb2wgZXF1YWwoY29uc3QgY2hhciogYSwgU3RyaW5nSW1wbCog
YikgeyByZXR1cm4gZXF1YWwoYiwgYSk7IH0KK2Jvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCos
IGNvbnN0IFVDaGFyKiwgdW5zaWduZWQpOwogCiBib29sIGVxdWFsSWdub3JpbmdDYXNlKFN0cmlu
Z0ltcGwqLCBTdHJpbmdJbXBsKik7CiBib29sIGVxdWFsSWdub3JpbmdDYXNlKFN0cmluZ0ltcGwq
LCBjb25zdCBjaGFyKik7Cg==
</data>
<flag name="review"
          id="102341"
          type_id="1"
          status="+"
          setter="barraclough"
    />
          </attachment>
      

    </bug>

</bugzilla>