<?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>73622</bug_id>
          
          <creation_ts>2011-12-01 22:17:33 -0800</creation_ts>
          <short_desc>Eliminate Duplicate word at a time equal code in StringImpl.cpp and StringHash.h</short_desc>
          <delta_ts>2011-12-13 08:54:38 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>513484</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-12-01 22:17:33 -0800</bug_when>
    <thetext>Both wtf/text/StringHash.h and wtf/text/StringImpl.cpp contain platform specific code to implement equal comparison of two character arrays.

These two versions should be merged together into a common implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519450</commentid>
    <comment_count>1</comment_count>
      <attachid>118843</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-12-12 14:13:04 -0800</bug_when>
    <thetext>Created attachment 118843
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519563</commentid>
    <comment_count>2</comment_count>
      <attachid>118843</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-12-12 15:16:33 -0800</bug_when>
    <thetext>Comment on attachment 118843
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519573</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-12-12 15:22:08 -0800</bug_when>
    <thetext>Committed r102631: &lt;http://trac.webkit.org/changeset/102631&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520104</commentid>
    <comment_count>4</comment_count>
      <attachid>118843</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-13 08:54:19 -0800</bug_when>
    <thetext>Comment on attachment 118843
Patch

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

&gt; Source/JavaScriptCore/wtf/text/AtomicString.h:142
&gt; +inline bool operator==(const AtomicString&amp; a, const Vector&lt;UChar&gt;&amp; b) { return a.impl() &amp;&amp; equal(static_cast&lt;StringImpl*&gt;(a.impl()), b.data(), b.size()); }    

Why is the cast needed?

&gt; Source/JavaScriptCore/wtf/text/StringImpl.h:566
&gt; +template &lt;typename CharTypeL, typename CharTypeR&gt;
&gt; +    ALWAYS_INLINE bool equal(const CharTypeL*, const CharTypeR*, unsigned);

We don’t normally implement the second line like this.

I think that this is too broad an overload for equal. It will allow you to pass any two pointers, including pointers to that aren’t even character types. Instead, I suggest overloading the equal function for all the combinations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520105</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-13 08:54:38 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt; Source/JavaScriptCore/wtf/text/StringImpl.h:566
&gt; &gt; +template &lt;typename CharTypeL, typename CharTypeR&gt;
&gt; &gt; +    ALWAYS_INLINE bool equal(const CharTypeL*, const CharTypeR*, unsigned);
&gt; 
&gt; We don’t normally indent the second line like this.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118843</attachid>
            <date>2011-12-12 14:13:04 -0800</date>
            <delta_ts>2011-12-13 08:54:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>73622.patch</filename>
            <type>text/plain</type>
            <size>15471</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAyNjE3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBA
CisyMDExLTEyLTEyICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIEVsaW1pbmF0ZSBEdXBsaWNhdGUgd29yZCBhdCBhIHRpbWUgZXF1YWwgY29kZSBpbiBTdHJp
bmdJbXBsLmNwcCBhbmQgU3RyaW5nSGFzaC5oCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD03MzYyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE1vdmVkIGVxdWFsKGNoYXJUeXBlMSAqLCBjaGFyVHlwZTIsIHVu
c2lnbmVkKSB0ZW1wbGF0ZSBtZXRob2RzCisgICAgICAgIGZyb20gc3RhdGljIFN0cmluZ0ltcGwu
Y3BwIHRvIFN0cmluZ0ltcGwuaCBhbmQgdGhlbiByZXBsYWNlZCB0aGUKKyAgICAgICAgcHJvY2Vz
c29yIHNwZWNpZmljIGNoYXJhY3RlciBjb21wYXJpc29uIGNvZGUgaW4gU3RyaW5nSGFzaDo6ZXF1
YWwKKyAgICAgICAgd2l0aCBjYWxscyB0byB0aGVzZSBtZXRob2RzLgorCisgICAgICAgIFRoaXMg
Y2hhbmdlIGlzIHdvcnRoIDMlIG9uIFN1blNwaWRlciBzdHJpbmctdW5wYWNrLWNvZGUgYXMgcmVw
b3J0ZWQKKyAgICAgICAgYnkgdGhlIFN1blNwaWRlciBjb21tYW5kIGxpbmUgaGFybmVzcy4gIE5v
IG90aGVyIHRlc3RzIGFwcGVhciB0bworICAgICAgICBoYXZlIG1lYXN1cmFibGUgcGVyZm9ybWFu
Y2UgY2hhbmdlcy4KKworICAgICAgICAqIHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oOgorICAgICAg
ICAoV1RGOjpvcGVyYXRvcj09KToKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdIYXNoLmg6Cisg
ICAgICAgIChXVEY6OlN0cmluZ0hhc2g6OmVxdWFsKToKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJp
bmdJbXBsLmNwcDoKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdJbXBsLmg6CisgICAgICAgIChX
VEY6OkxDaGFyKToKKyAgICAgICAgKFdURjo6VUNoYXIpOgorICAgICAgICAoV1RGOjplcXVhbCk6
CisKIDIwMTEtMTItMDkgIEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92QGNocm9taXVtLm9yZz4K
IAogICAgICAgICBXZWJLaXQgZG9lcyBub3QgZW51bWVyYXRlIG92ZXIgQ1NTIHByb3BlcnRpZXMg
aW4gSFRNTEVsZW1lbnQuc3R5bGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4
dC9BdG9taWNTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L3RleHQvQXRvbWljU3RyaW5nLmgJKHJldmlzaW9uIDEwMjYwNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvdGV4dC9BdG9taWNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDcg
KzEzOSw3IEBAIHByaXZhdGU6CiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF0b21pY1N0
cmluZyYgYSwgY29uc3QgQXRvbWljU3RyaW5nJiBiKSB7IHJldHVybiBhLmltcGwoKSA9PSBiLmlt
cGwoKTsgfQogYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF0b21pY1N0cmluZyYsIGNvbnN0IExDaGFy
Kik7CiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF0b21pY1N0cmluZyYgYSwgY29uc3Qg
Y2hhciogYikgeyByZXR1cm4gV1RGOjplcXVhbChhLmltcGwoKSwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBMQ2hhcio+KGIpKTsgfQotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdG9taWNT
dHJpbmcmIGEsIGNvbnN0IFZlY3RvcjxVQ2hhcj4mIGIpIHsgcmV0dXJuIGEuaW1wbCgpICYmIGVx
dWFsKGEuaW1wbCgpLCBiLmRhdGEoKSwgYi5zaXplKCkpOyB9ICAgIAoraW5saW5lIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBBdG9taWNTdHJpbmcmIGEsIGNvbnN0IFZlY3RvcjxVQ2hhcj4mIGIpIHsg
cmV0dXJuIGEuaW1wbCgpICYmIGVxdWFsKHN0YXRpY19jYXN0PFN0cmluZ0ltcGwqPihhLmltcGwo
KSksIGIuZGF0YSgpLCBiLnNpemUoKSk7IH0gICAgCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEF0b21pY1N0cmluZyYgYSwgY29uc3QgU3RyaW5nJiBiKSB7IHJldHVybiBlcXVhbChhLmlt
cGwoKSwgYi5pbXBsKCkpOyB9CiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IExDaGFyKiBh
LCBjb25zdCBBdG9taWNTdHJpbmcmIGIpIHsgcmV0dXJuIGIgPT0gYTsgfQogaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBTdHJpbmcmIGEsIGNvbnN0IEF0b21pY1N0cmluZyYgYikgeyByZXR1
cm4gZXF1YWwoYS5pbXBsKCksIGIuaW1wbCgpKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi90ZXh0L1N0cmluZ0hhc2guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL3RleHQvU3RyaW5nSGFzaC5oCShyZXZpc2lvbiAxMDI2MDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nSGFzaC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
Niw4NCArNTYsMTkgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgICAgICBpZiAoYS0+aXM4Qml0
KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoYi0+aXM4Qml0KCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgLy8gQm90aCBhICYgYiBhcmUgOCBiaXQuCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0
IExDaGFyKiBhQ2hhcnMgPSBhLT5jaGFyYWN0ZXJzOCgpOwotICAgICAgICAgICAgICAgICAgICBj
b25zdCBMQ2hhciogYkNoYXJzID0gYi0+Y2hhcmFjdGVyczgoKTsKLQotICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpID0gMDsKLQotICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogcGVy
aGFwcyB3ZSBzaG91bGQgaGF2ZSBhIG1vcmUgYWJzdHJhY3QgbWFjcm8gdGhhdCBpbmRpY2F0ZXMg
d2hlbgotICAgICAgICAgICAgICAgICAgICAvLyBnb2luZyA0IGJ5dGVzIGF0IGEgdGltZSBpcyB1
bnNhZmUKLSNpZiAoQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkpCi0gICAgICAgICAgICAgICAgICAg
IGNvbnN0IHVuc2lnbmVkIGNoYXJzUGVySW50ID0gc2l6ZW9mKHVpbnQzMl90KSAvIHNpemVvZihj
aGFyKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChhTGVu
Z3RoID4gY2hhcnNQZXJJbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHN0
b3BDb3VudCA9IGFMZW5ndGggJiB+KGNoYXJzUGVySW50IC0gMSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90KiBhSW50Q2hh
cmFjdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihhQ2hhcnMpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDMyX3QqIGJJbnRDaGFyYWN0ZXJzID0gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KGJDaGFycyk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBpIDwgc3RvcENvdW50OyBpICs9IGNoYXJzUGVy
SW50LCArK2opIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYUludENoYXJhY3Rl
cnNbal0gIT0gYkludENoYXJhY3RlcnNbal0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgfQotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgIGZvciAoOyBpIDwgYUxlbmd0
aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYUNoYXJzW2ldICE9IGJDaGFy
c1tpXSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjplcXVhbChhLT5j
aGFyYWN0ZXJzOCgpLCBiLT5jaGFyYWN0ZXJzOCgpLCBhTGVuZ3RoKTsKICAgICAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgICAgICAvLyBXZSBrbm93IHRoYXQgYSBpcyA4IGJpdCAmIGIgaXMg
MTYgYml0LgotICAgICAgICAgICAgICAgIGNvbnN0IExDaGFyKiBhQ2hhcnMgPSBhLT5jaGFyYWN0
ZXJzOCgpOwotICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBiQ2hhcnMgPSBiLT5jaGFyYWN0
ZXJzMTYoKTsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IGFMZW5n
dGg7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoKmFDaGFycysrICE9ICpiQ2hhcnMr
KykKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gV1RGOjplcXVhbChhLT5jaGFyYWN0ZXJzOCgpLCBiLT5jaGFyYWN0ZXJzMTYoKSwgYUxlbmd0
aCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChiLT5pczhCaXQoKSkgewogICAg
ICAgICAgICAgICAgIC8vIFdlIGtub3cgdGhhdCBhIGlzIDggYml0IGFuZCBiIGlzIDE2IGJpdC4K
LSAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogYUNoYXJzID0gYS0+Y2hhcmFjdGVyczE2KCk7
Ci0gICAgICAgICAgICAgICAgY29uc3QgTENoYXIqIGJDaGFycyA9IGItPmNoYXJhY3RlcnM4KCk7
Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBhTGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCphQ2hhcnMrKyAhPSAqYkNoYXJzKyspCi0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IC8vIEJvdGggYSAmIGIgYXJlIDE2IGJpdC4KLSAgICAgICAgICAgIC8vIEZJWE1FOiBwZXJoYXBz
IHdlIHNob3VsZCBoYXZlIGEgbW9yZSBhYnN0cmFjdCBtYWNybyB0aGF0IGluZGljYXRlcyB3aGVu
Ci0gICAgICAgICAgICAvLyBnb2luZyA0IGJ5dGVzIGF0IGEgdGltZSBpcyB1bnNhZmUKLSNpZiBD
UFUoQVJNKSB8fCBDUFUoU0g0KSB8fCBDUFUoTUlQUykgfHwgQ1BVKFNQQVJDKQotICAgICAgICAg
ICAgY29uc3QgVUNoYXIqIGFDaGFycyA9IGEtPmNoYXJhY3RlcnMxNigpOwotICAgICAgICAgICAg
Y29uc3QgVUNoYXIqIGJDaGFycyA9IGItPmNoYXJhY3RlcnMxNigpOwotICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSAhPSBhTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoKmFDaGFycysrICE9ICpiQ2hhcnMrKykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgIHJldHVybiBXVEY6OmVxdWFsKGEtPmNoYXJhY3RlcnMxNigp
LCBiLT5jaGFyYWN0ZXJzOCgpLCBhTGVuZ3RoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotI2Vsc2UKLSAgICAgICAgICAgIC8qIERvIGl0IDQtYnl0ZXMtYXQtYS10
aW1lIG9uIGFyY2hpdGVjdHVyZXMgd2hlcmUgaXQncyBzYWZlICovCi0gICAgICAgICAgICBjb25z
dCB1aW50MzJfdCogYUNoYXJzID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KGEt
PmNoYXJhY3RlcnMxNigpKTsKLSAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90KiBiQ2hhcnMgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oYi0+Y2hhcmFjdGVyczE2KCkpOwotCi0g
ICAgICAgICAgICB1bnNpZ25lZCBoYWxmTGVuZ3RoID0gYUxlbmd0aCA+PiAxOwotICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBoYWxmTGVuZ3RoOyArK2kpCi0gICAgICAgICAg
ICAgICAgaWYgKCphQ2hhcnMrKyAhPSAqYkNoYXJzKyspCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgICAgICAgICAgaWYgKGFMZW5ndGggJiAxICYmICpyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQxNl90Kj4oYUNoYXJzKSAhPSAqcmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50MTZfdCo+KGJDaGFycykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIFdURjo6
ZXF1YWwoYS0+Y2hhcmFjdGVyczE2KCksIGItPmNoYXJhY3RlcnMxNigpLCBhTGVuZ3RoKTsKICAg
ICAgICAgfQogCiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFJlZlB0cjxTdHJp
bmdJbXBsPiYga2V5KSB7IHJldHVybiBrZXktPmhhc2goKTsgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAkocmV2aXNpb24gMTAyNjA1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03MTUsMTMzICs3MTUsNiBAQCBmbG9hdCBTdHJpbmdJbXBsOjp0b0Zsb2F0KGJv
b2wqIG9rLCBib29sCiAgICAgcmV0dXJuIGNoYXJhY3RlcnNUb0Zsb2F0KGNoYXJhY3RlcnMxNigp
LCBtX2xlbmd0aCwgb2ssIGRpZFJlYWROdW1iZXIpOwogfQogCi0vLyBEbyBjb21wYXJpc29ucyA4
IG9yIDQgYnl0ZXMtYXQtYS10aW1lIG9uIGFyY2hpdGVjdHVyZXMgd2hlcmUgaXQncyBzYWZlLgot
I2lmIENQVShYODZfNjQpCi1BTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IExD
aGFyKiBhLCBjb25zdCBMQ2hhciogYiwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHVuc2lnbmVk
IGR3b3JkTGVuZ3RoID0gbGVuZ3RoID4+IDM7Ci0KLSAgICBpZiAoZHdvcmRMZW5ndGgpIHsKLSAg
ICAgICAgY29uc3QgdWludDY0X3QqIGFEV29yZENoYXJhY3RlcnMgPSByZWludGVycHJldF9jYXN0
PGNvbnN0IHVpbnQ2NF90Kj4oYSk7Ci0gICAgICAgIGNvbnN0IHVpbnQ2NF90KiBiRFdvcmRDaGFy
YWN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50NjRfdCo+KGIpOwotCi0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgIT0gZHdvcmRMZW5ndGg7ICsraSkgewotICAgICAgICAg
ICAgaWYgKCphRFdvcmRDaGFyYWN0ZXJzKysgIT0gKmJEV29yZENoYXJhY3RlcnMrKykKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBhID0gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGFEV29yZENoYXJhY3RlcnMpOwotICAgICAgICBiID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGJEV29yZENoYXJhY3RlcnMpOwotICAgIH0K
LQotICAgIGlmIChsZW5ndGggJiA0KSB7Ci0gICAgICAgIGlmICgqcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1aW50MzJfdCo+KGEpICE9ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4o
YikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgYSArPSA0OwotICAgICAg
ICBiICs9IDQ7Ci0gICAgfQotCi0gICAgaWYgKGxlbmd0aCAmIDIpIHsKLSAgICAgICAgaWYgKCpy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQxNl90Kj4oYSkgIT0gKnJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdWludDE2X3QqPihiKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAg
ICBhICs9IDI7Ci0gICAgICAgIGIgKz0gMjsKLSAgICB9Ci0KLSAgICBpZiAobGVuZ3RoICYgMSAm
JiAoKmEgIT0gKmIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBVQ2hhciogYSwgY29u
c3QgVUNoYXIqIGIsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICB1bnNpZ25lZCBkd29yZExlbmd0
aCA9IGxlbmd0aCA+PiAyOwotCi0gICAgaWYgKGR3b3JkTGVuZ3RoKSB7Ci0gICAgICAgIGNvbnN0
IHVpbnQ2NF90KiBhRFdvcmRDaGFyYWN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
NjRfdCo+KGEpOwotICAgICAgICBjb25zdCB1aW50NjRfdCogYkRXb3JkQ2hhcmFjdGVycyA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDY0X3QqPihiKTsKLQotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpICE9IGR3b3JkTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlmICgqYURX
b3JkQ2hhcmFjdGVycysrICE9ICpiRFdvcmRDaGFyYWN0ZXJzKyspCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgYSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgVUNoYXIqPihhRFdvcmRDaGFyYWN0ZXJzKTsKLSAgICAgICAgYiA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgVUNoYXIqPihiRFdvcmRDaGFyYWN0ZXJzKTsKLSAgICB9Ci0KLSAgICBpZiAo
bGVuZ3RoICYgMikgewotICAgICAgICBpZiAoKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMy
X3QqPihhKSAhPSAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KGIpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGEgKz0gMjsKLSAgICAgICAgYiArPSAyOwot
ICAgIH0KLQotICAgIGlmIChsZW5ndGggJiAxICYmICgqYSAhPSAqYikpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotI2VsaWYgQ1BVKFg4NikKLUFMV0FZU19J
TkxJTkUgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgTENoYXIqIGEsIGNvbnN0IExDaGFyKiBiLCB1
bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgY29uc3QgdWludDMyX3QqIGFDaGFyYWN0ZXJzID0gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KGEpOwotICAgIGNvbnN0IHVpbnQzMl90KiBi
Q2hhcmFjdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihiKTsKLQotICAg
IHVuc2lnbmVkIHdvcmRMZW5ndGggPSBsZW5ndGggPj4gMjsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpICE9IHdvcmRMZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoKmFDaGFyYWN0ZXJzKysg
IT0gKmJDaGFyYWN0ZXJzKyspCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgbGVuZ3RoICY9IDM7Ci0KLSAgICBpZiAobGVuZ3RoKSB7Ci0gICAgICAgIGNvbnN0IExDaGFy
KiBhUmVtYWluZGVyID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGFDaGFyYWN0ZXJz
KTsKLSAgICAgICAgY29uc3QgTENoYXIqIGJSZW1haW5kZXIgPSByZWludGVycHJldF9jYXN0PGNv
bnN0IExDaGFyKj4oYkNoYXJhY3RlcnMpOwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCAgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChhUmVtYWluZGVyW2ldICE9IGJS
ZW1haW5kZXJbaV0pCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUFMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wg
ZXF1YWwoY29uc3QgVUNoYXIqIGEsIGNvbnN0IFVDaGFyKiBiLCB1bnNpZ25lZCBsZW5ndGgpCi17
Ci0gICAgY29uc3QgdWludDMyX3QqIGFDaGFyYWN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50MzJfdCo+KGEpOwotICAgIGNvbnN0IHVpbnQzMl90KiBiQ2hhcmFjdGVycyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihiKTsKLQotICAgIHVuc2lnbmVkIHdvcmRMZW5n
dGggPSBsZW5ndGggPj4gMTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IHdvcmRMZW5n
dGg7ICsraSkgewotICAgICAgICBpZiAoKmFDaGFyYWN0ZXJzKysgIT0gKmJDaGFyYWN0ZXJzKysp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGxlbmd0aCAmIDEg
JiYgKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihhQ2hhcmFjdGVycykgIT0gKnJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihiQ2hhcmFjdGVycykpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotI2VuZGlmCi0KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBDaGFyVHlwZUwsIHR5cGVuYW1lIENoYXJUeXBlUj4KLUFMV0FZU19JTkxJTkUgc3RhdGljIGJv
b2wgZXF1YWwoY29uc3QgQ2hhclR5cGVMKiBhLCBjb25zdCBDaGFyVHlwZVIqIGIsIHVuc2lnbmVk
IGxlbmd0aCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IGxlbmd0aDsgKytpKSB7
Ci0gICAgICAgIGlmIChhW2ldICE9IGJbaV0pCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29u
c3QgVUNoYXIqIGEsIGNvbnN0IExDaGFyKiBiLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgd2hp
bGUgKGxlbmd0aC0tKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3Ry
aW5nSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9T
dHJpbmdJbXBsLmgJKHJldmlzaW9uIDEwMjYwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvdGV4dC9TdHJpbmdJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2Miw2ICs1NjIsMTM5IEBA
IGlubGluZSBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqIGEsIGMKIGlubGluZSBib29sIGVx
dWFsKGNvbnN0IExDaGFyKiBhLCBTdHJpbmdJbXBsKiBiKSB7IHJldHVybiBlcXVhbChiLCBhKTsg
fQogaW5saW5lIGJvb2wgZXF1YWwoY29uc3QgY2hhciogYSwgU3RyaW5nSW1wbCogYikgeyByZXR1
cm4gZXF1YWwoYiwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGEpKTsgfQogYm9vbCBl
cXVhbChjb25zdCBTdHJpbmdJbXBsKiwgY29uc3QgVUNoYXIqLCB1bnNpZ25lZCk7Cit0ZW1wbGF0
ZSA8dHlwZW5hbWUgQ2hhclR5cGVMLCB0eXBlbmFtZSBDaGFyVHlwZVI+CisgICAgQUxXQVlTX0lO
TElORSBib29sIGVxdWFsKGNvbnN0IENoYXJUeXBlTCosIGNvbnN0IENoYXJUeXBlUiosIHVuc2ln
bmVkKTsKKworLy8gRG8gY29tcGFyaXNvbnMgOCBvciA0IGJ5dGVzLWF0LWEtdGltZSBvbiBhcmNo
aXRlY3R1cmVzIHdoZXJlIGl0J3Mgc2FmZS4KKyNpZiBDUFUoWDg2XzY0KQordGVtcGxhdGUgPD4K
K0FMV0FZU19JTkxJTkUgYm9vbCBlcXVhbDxMQ2hhciwgTENoYXI+KGNvbnN0IExDaGFyKiBhLCBj
b25zdCBMQ2hhciogYiwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIHVuc2lnbmVkIGR3b3JkTGVu
Z3RoID0gbGVuZ3RoID4+IDM7CisgICAgCisgICAgaWYgKGR3b3JkTGVuZ3RoKSB7CisgICAgICAg
IGNvbnN0IHVpbnQ2NF90KiBhRFdvcmRDaGFyYWN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50NjRfdCo+KGEpOworICAgICAgICBjb25zdCB1aW50NjRfdCogYkRXb3JkQ2hhcmFjdGVy
cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDY0X3QqPihiKTsKKyAgICAgICAgCisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgIT0gZHdvcmRMZW5ndGg7ICsraSkgeworICAgICAg
ICAgICAgaWYgKCphRFdvcmRDaGFyYWN0ZXJzKysgIT0gKmJEV29yZENoYXJhY3RlcnMrKykKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYURXb3JkQ2hhcmFjdGVycyk7Cisg
ICAgICAgIGIgPSByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYkRXb3JkQ2hhcmFjdGVy
cyk7CisgICAgfQorICAgIAorICAgIGlmIChsZW5ndGggJiA0KSB7CisgICAgICAgIGlmICgqcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KGEpICE9ICpyZWludGVycHJldF9jYXN0PGNv
bnN0IHVpbnQzMl90Kj4oYikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAor
ICAgICAgICBhICs9IDQ7CisgICAgICAgIGIgKz0gNDsKKyAgICB9CisgICAgCisgICAgaWYgKGxl
bmd0aCAmIDIpIHsKKyAgICAgICAgaWYgKCpyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQxNl90
Kj4oYSkgIT0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDE2X3QqPihiKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGEgKz0gMjsKKyAgICAgICAgYiAr
PSAyOworICAgIH0KKyAgICAKKyAgICBpZiAobGVuZ3RoICYgMSAmJiAoKmEgIT0gKmIpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRl
IDw+CitBTFdBWVNfSU5MSU5FIGJvb2wgZXF1YWw8VUNoYXIsIFVDaGFyPihjb25zdCBVQ2hhciog
YSwgY29uc3QgVUNoYXIqIGIsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICB1bnNpZ25lZCBkd29y
ZExlbmd0aCA9IGxlbmd0aCA+PiAyOworICAgIAorICAgIGlmIChkd29yZExlbmd0aCkgeworICAg
ICAgICBjb25zdCB1aW50NjRfdCogYURXb3JkQ2hhcmFjdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdWludDY0X3QqPihhKTsKKyAgICAgICAgY29uc3QgdWludDY0X3QqIGJEV29yZENoYXJh
Y3RlcnMgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ2NF90Kj4oYik7CisgICAgICAgIAor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IGR3b3JkTGVuZ3RoOyArK2kpIHsKKyAg
ICAgICAgICAgIGlmICgqYURXb3JkQ2hhcmFjdGVycysrICE9ICpiRFdvcmRDaGFyYWN0ZXJzKysp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBhID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KGFEV29yZENoYXJhY3RlcnMp
OworICAgICAgICBiID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KGJEV29yZENoYXJh
Y3RlcnMpOworICAgIH0KKyAgICAKKyAgICBpZiAobGVuZ3RoICYgMikgeworICAgICAgICBpZiAo
KnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihhKSAhPSAqcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50MzJfdCo+KGIpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAKKyAgICAgICAgYSArPSAyOworICAgICAgICBiICs9IDI7CisgICAgfQorICAgIAorICAgIGlm
IChsZW5ndGggJiAxICYmICgqYSAhPSAqYikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbGlmIENQVShYODYpCit0ZW1wbGF0ZSA8PgorQUxXQVlT
X0lOTElORSBib29sIGVxdWFsPExDaGFyLCBMQ2hhcj4oY29uc3QgTENoYXIqIGEsIGNvbnN0IExD
aGFyKiBiLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgY29uc3QgdWludDMyX3QqIGFDaGFyYWN0
ZXJzID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KGEpOworICAgIGNvbnN0IHVp
bnQzMl90KiBiQ2hhcmFjdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihi
KTsKKyAgICAKKyAgICB1bnNpZ25lZCB3b3JkTGVuZ3RoID0gbGVuZ3RoID4+IDI7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSAhPSB3b3JkTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKCph
Q2hhcmFjdGVycysrICE9ICpiQ2hhcmFjdGVycysrKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICAKKyAgICBsZW5ndGggJj0gMzsKKyAgICAKKyAgICBpZiAobGVuZ3RoKSB7
CisgICAgICAgIGNvbnN0IExDaGFyKiBhUmVtYWluZGVyID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBMQ2hhcio+KGFDaGFyYWN0ZXJzKTsKKyAgICAgICAgY29uc3QgTENoYXIqIGJSZW1haW5kZXIg
PSByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYkNoYXJhY3RlcnMpOworICAgICAgICAK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8ICBsZW5ndGg7ICsraSkgeworICAgICAg
ICAgICAgaWYgKGFSZW1haW5kZXJbaV0gIT0gYlJlbWFpbmRlcltpXSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3RlbXBsYXRlIDw+CitBTFdBWVNfSU5MSU5FIGJvb2wgZXF1YWw8VUNoYXIsIFVDaGFy
Pihjb25zdCBVQ2hhciogYSwgY29uc3QgVUNoYXIqIGIsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAg
ICBjb25zdCB1aW50MzJfdCogYUNoYXJhY3RlcnMgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVp
bnQzMl90Kj4oYSk7CisgICAgY29uc3QgdWludDMyX3QqIGJDaGFyYWN0ZXJzID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KGIpOworICAgIAorICAgIHVuc2lnbmVkIHdvcmRMZW5n
dGggPSBsZW5ndGggPj4gMTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IHdvcmRMZW5n
dGg7ICsraSkgeworICAgICAgICBpZiAoKmFDaGFyYWN0ZXJzKysgIT0gKmJDaGFyYWN0ZXJzKysp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIGlmIChsZW5ndGgg
JiAxICYmICpyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4oYUNoYXJhY3RlcnMpICE9ICpy
ZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4oYkNoYXJhY3RlcnMpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKwordGVtcGxhdGUg
PHR5cGVuYW1lIENoYXJUeXBlTCwgdHlwZW5hbWUgQ2hhclR5cGVSPgorQUxXQVlTX0lOTElORSBi
b29sIGVxdWFsKGNvbnN0IENoYXJUeXBlTCogYSwgY29uc3QgQ2hhclR5cGVSKiBiLCB1bnNpZ25l
ZCBsZW5ndGgpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBsZW5ndGg7ICsraSkg
eworICAgICAgICBpZiAoYVtpXSAhPSBiW2ldKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KIAogYm9vbCBlcXVhbElnbm9yaW5nQ2Fz
ZShTdHJpbmdJbXBsKiwgU3RyaW5nSW1wbCopOwogYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShTdHJp
bmdJbXBsKiwgY29uc3QgTENoYXIqKTsK
</data>
<flag name="review"
          id="118698"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>