<?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>211065</bug_id>
          
          <creation_ts>2020-04-27 02:00:40 -0700</creation_ts>
          <short_desc>[JSC] &gt;&gt;&gt; should call ToNumeric</short_desc>
          <delta_ts>2020-04-27 18:34:13 -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 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ross.kirsling</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1645930</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-04-27 02:00:40 -0700</bug_when>
    <thetext>While BigInt does not support &gt;&gt;&gt;, we need to call ToNumeric instead of ToNumber.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645934</commentid>
    <comment_count>1</comment_count>
      <attachid>397662</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-04-27 02:14:24 -0700</bug_when>
    <thetext>Created attachment 397662
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646082</commentid>
    <comment_count>2</comment_count>
      <attachid>397662</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2020-04-27 10:26:06 -0700</bug_when>
    <thetext>Comment on attachment 397662
Patch

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

r=me

It would be good to have a spec link in the ChangeLog.
Presumably: https://tc39.es/ecma262/#sec-unsigned-right-shift-operator

&gt; Source/JavaScriptCore/ChangeLog:10
&gt; +        since the only difference between toUint32 and toInt32 is casting int32_t result to uint32_t.

This is interesting.

It&apos;s funny that this comment claims that there will be an explanation:
https://github.com/WebKit/webkit/blob/master/Source/JavaScriptCore/runtime/JSCJSValueInlines.h#L56
But it must have been removed?
https://github.com/WebKit/webkit/blob/master/Source/JavaScriptCore/runtime/JSCJSValue.h#L293</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646086</commentid>
    <comment_count>3</comment_count>
      <attachid>397662</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-27 10:35:29 -0700</bug_when>
    <thetext>Comment on attachment 397662
Patch

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

&gt; Source/JavaScriptCore/runtime/Operations.h:842
&gt; +    uint32_t leftUint32 = static_cast&lt;uint32_t&gt;(leftNumeric.asInt32());
&gt; +    uint32_t rightUint32 = static_cast&lt;uint32_t&gt;(rightNumeric.asInt32());

Why asInt32 and casting to uint32_t rather than asUInt32? If asUInt32 is not for this, then why do we have it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646097</commentid>
    <comment_count>4</comment_count>
      <attachid>397662</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-04-27 10:57:42 -0700</bug_when>
    <thetext>Comment on attachment 397662
Patch

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

Thanks!

&gt;&gt; Source/JavaScriptCore/runtime/Operations.h:842
&gt;&gt; +    uint32_t rightUint32 = static_cast&lt;uint32_t&gt;(rightNumeric.asInt32());
&gt; 
&gt; Why asInt32 and casting to uint32_t rather than asUInt32? If asUInt32 is not for this, then why do we have it?

asUInt32() is used for different purpose, mainly for array index, and it has ASSERT that int32 value is positive. This is different from toUInt32 semantics since it reinterpret negative int32 bit pattern as uint32.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646100</commentid>
    <comment_count>5</comment_count>
      <attachid>397662</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-27 11:04:45 -0700</bug_when>
    <thetext>Comment on attachment 397662
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/runtime/Operations.h:842
&gt;&gt;&gt; +    uint32_t rightUint32 = static_cast&lt;uint32_t&gt;(rightNumeric.asInt32());
&gt;&gt; 
&gt;&gt; Why asInt32 and casting to uint32_t rather than asUInt32? If asUInt32 is not for this, then why do we have it?
&gt; 
&gt; asUInt32() is used for different purpose, mainly for array index, and it has ASSERT that int32 value is positive. This is different from toUInt32 semantics since it reinterpret negative int32 bit pattern as uint32.

Is there some way to not have the typecast be here? I think that the point of having functions like JSC::toUInt32 and JSValue::asUInt32 is to keep the typecasts in a smaller number of places. I understand that none of them are quite right for a case where we know isInt32 is true and want to do the toUInt32 operation.

So annoying that JSValue::toUInt32 has a comment in it saying we should look for another comment, but it mentions the wrong header: JSCValue.h rather than MathCommon.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646261</commentid>
    <comment_count>6</comment_count>
      <attachid>397662</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-04-27 15:18:56 -0700</bug_when>
    <thetext>Comment on attachment 397662
Patch

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

&gt;&gt; Source/JavaScriptCore/ChangeLog:10
&gt;&gt; +        since the only difference between toUint32 and toInt32 is casting int32_t result to uint32_t.
&gt; 
&gt; This is interesting.
&gt; 
&gt; It&apos;s funny that this comment claims that there will be an explanation:
&gt; https://github.com/WebKit/webkit/blob/master/Source/JavaScriptCore/runtime/JSCJSValueInlines.h#L56
&gt; But it must have been removed?
&gt; https://github.com/WebKit/webkit/blob/master/Source/JavaScriptCore/runtime/JSCJSValue.h#L293

Seems super old comment, and maybe removed at some point.
Added comment with https://tc39.es/ecma262/#sec-touint32.

&gt;&gt;&gt;&gt; Source/JavaScriptCore/runtime/Operations.h:842
&gt;&gt;&gt;&gt; +    uint32_t rightUint32 = static_cast&lt;uint32_t&gt;(rightNumeric.asInt32());
&gt;&gt;&gt; 
&gt;&gt;&gt; Why asInt32 and casting to uint32_t rather than asUInt32? If asUInt32 is not for this, then why do we have it?
&gt;&gt; 
&gt;&gt; asUInt32() is used for different purpose, mainly for array index, and it has ASSERT that int32 value is positive. This is different from toUInt32 semantics since it reinterpret negative int32 bit pattern as uint32.
&gt; 
&gt; Is there some way to not have the typecast be here? I think that the point of having functions like JSC::toUInt32 and JSValue::asUInt32 is to keep the typecasts in a smaller number of places. I understand that none of them are quite right for a case where we know isInt32 is true and want to do the toUInt32 operation.
&gt; 
&gt; So annoying that JSValue::toUInt32 has a comment in it saying we should look for another comment, but it mentions the wrong header: JSCValue.h rather than MathCommon.h.

I&apos;ve added `Optional&lt;uint32_t&gt; JSValue::toUInt32AfterToNumeric(JSGlobalObject*) const;`, which calls toBigIntOrInt32 internally, and returns uint32_t if the result is Int32. Otherwise, return WTF::nullopt.
Looks like the comment in toUInt32 is super old (more than 7 years ago), and some refactoring made that comment stale. Yeah, that&apos;s annoying.
I&apos;ve just add comment which just describes that only difference in toUInt32 / toInt32 is that toUInt32 just reinterprets int32_t result as uint32_t.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646341</commentid>
    <comment_count>7</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-04-27 18:33:30 -0700</bug_when>
    <thetext>Committed r260805: &lt;https://trac.webkit.org/changeset/260805&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646343</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-04-27 18:34:13 -0700</bug_when>
    <thetext>&lt;rdar://problem/62478977&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397662</attachid>
            <date>2020-04-27 02:14:24 -0700</date>
            <delta_ts>2020-04-27 10:26:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211065-20200427021423.patch</filename>
            <type>text/plain</type>
            <size>10371</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwNzQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
MWE1NDEzYmM1MmQzNjc4ZGZjNzY4ZmUwNjVlMzYwNWEyNjJmMjNjLi4xOGQyYzBhYjU5ZTU3ZjE5
NmYzZGUwZThhYjNjNmMxMmM2MDViOThlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMSBAQAorMjAyMC0wNC0yNyAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdID4+PiBzaG91bGQgY2FsbCBUb051bWVyaWMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMTA2NQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdoaWxlIEJpZ0ludCBkb2VzIG5v
dCBzdXBwb3J0ID4+PiBvcGVyYXRvciwgPj4+IG9wZXJhdG9yIHNob3VsZCBjYWxsIFRvTnVtZXJp
YyAoaW4gdGhpcyBjYXNlLCB0b0JpZ0ludE9ySW50MzIpIGZvciBib3RoIGJlZm9yZSB0aHJvd2lu
ZyBhbiBlcnJvci4KKyAgICAgICAgV2UgY2FsbCB0b0JpZ0ludE9ySW50MzIgZm9yIGJvdGggb3Bl
cmFuZHMsIGFuZCB0aHJvdyBhbiBlcnJvci4gQW5kIGFmdGVyIHRoYXQsIGNhc3RpbmcgaW50MzJf
dCB0byB1aW50MzJfdCB0byBwZXJmb3JtID4+PiBvcGVyYXRvci4gVGhpcyBpcyBjb3JyZWN0Cisg
ICAgICAgIHNpbmNlIHRoZSBvbmx5IGRpZmZlcmVuY2UgYmV0d2VlbiB0b1VpbnQzMiBhbmQgdG9J
bnQzMiBpcyBjYXN0aW5nIGludDMyX3QgcmVzdWx0IHRvIHVpbnQzMl90LgorCisgICAgICAgICog
ZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhz
LmNwcDoKKyAgICAgICAgKEpTQzo6U0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAqIHJ1bnRpbWUv
T3BlcmF0aW9ucy5oOgorICAgICAgICAoSlNDOjpzaGlmdCk6CisgICAgICAgIChKU0M6OmpzVVJT
aGlmdCk6CisKIDIwMjAtMDQtMjYgIFJvc3MgS2lyc2xpbmcgIDxyb3NzLmtpcnNsaW5nQHNvbnku
Y29tPgogCiAgICAgICAgIFtKU0NdIENsZWFybHkgZGlzdGluZ3Vpc2ggaXNDb25zdHJ1Y3RvciBm
cm9tIGdldENvbnN0cnVjdERhdGEKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuY3BwCmluZGV4IDQ0Mzg3NmEyMzM4OTY1NzBmMWQyNjI3YTI5NjJjN2IzODA2MGE0MmEu
LmEwOTc3ZDZjODk4MGUwZmNmODliZTQ3M2ZhZTJiMDM0YjllZjMzNmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcApAQCAtNTA2LDE2ICs1MDYsOCBAQCBF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlQml0VVJTaGlmdChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZQogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
ICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAg
SklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUp
OwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIEpTVmFs
dWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwotICAgIEpTVmFsdWUgb3AyID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwogCi0gICAgdWludDMyX3QgYSA9IG9wMS50b1VJ
bnQzMihnbG9iYWxPYmplY3QpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOwotICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICB1aW50MzJfdCBiID0gb3Ay
LnRvVUludDMyKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051
bWJlcihzdGF0aWNfY2FzdDxpbnQzMl90PihhID4+IChiICYgMHgxZikpKSk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VSU2hpZnQoZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZE9wMSksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKSkpOwogfQogCiBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlQWRkTm90TnVtYmVyKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRPcDIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21tb25TbG93UGF0aHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tbW9uU2xvd1BhdGhzLmNwcAppbmRleCBjZWYwOWYwNjk3ZDI5NGU2MmEyNDRhMTU0ZmI1OGZk
OTQxZTBkYmY1Li43ODA4MzAxMjE5NDBmZTdhYWU5ZDNlZWZiM2IzNjA4NWE4ZGUzZWYwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAK
QEAgLTc1NSwxMSArNzU1LDEyIEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF91cnNoaWZ0KQog
ewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFVyc2hpZnQ+KCk7
Ci0gICAgdWludDMyX3QgYSA9IEdFVF9DKGJ5dGVjb2RlLm1fbGhzKS5qc1ZhbHVlKCkudG9VSW50
MzIoZ2xvYmFsT2JqZWN0KTsKLSAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24o
KSkpCi0gICAgICAgIFJFVFVSTihKU1ZhbHVlKCkpOwotICAgIHVpbnQzMl90IGIgPSBHRVRfQyhi
eXRlY29kZS5tX3JocykuanNWYWx1ZSgpLnRvVUludDMyKGdsb2JhbE9iamVjdCk7Ci0gICAgUkVU
VVJOKGpzTnVtYmVyKHN0YXRpY19jYXN0PGludDMyX3Q+KGEgPj4gKGIgJiAzMSkpKSk7CisgICAg
SlNWYWx1ZSBsZWZ0ID0gR0VUX0MoYnl0ZWNvZGUubV9saHMpLmpzVmFsdWUoKTsKKyAgICBKU1Zh
bHVlIHJpZ2h0ID0gR0VUX0MoYnl0ZWNvZGUubV9yaHMpLmpzVmFsdWUoKTsKKworICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNVUlNoaWZ0KGdsb2JhbE9iamVjdCwgbGVmdCwgcmlnaHQpOworICAgIENI
RUNLX0VYQ0VQVElPTigpOworICAgIFJFVFVSTihyZXN1bHQpOwogfQogCiBTTE9XX1BBVEhfREVD
TChzbG93X3BhdGhfdW5zaWduZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcGVyYXRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVy
YXRpb25zLmgKaW5kZXggODZjNTk5MjUzNTg4MDQ5ZGRlZGE2ODBmZmI4M2QwOGQ1YmNmNjY5NC4u
MTJmZmJjYWJiMTRiYzA5M2YxMzRkNTIxMzM0YTExZjcxNGJjMDIyYSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaApAQCAtNzkyLDcgKzc5Miw3IEBAIEFMV0FZ
U19JTkxJTkUgSlNWYWx1ZSBzaGlmdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHYxLCBKU1ZhbHVlIHYyCiAgICAgfQogI2VuZGlmCiAKLSAgICBpZiAoIShsZWZ0TnVtZXJp
Yy5pc0JpZ0ludCgpICYmIHJpZ2h0TnVtZXJpYy5pc0JpZ0ludCgpKSkgeworICAgIGlmIChVTkxJ
S0VMWSghKGxlZnROdW1lcmljLmlzQmlnSW50KCkgJiYgcmlnaHROdW1lcmljLmlzQmlnSW50KCkp
KSkgewogICAgICAgICBhdXRvIGVycm9yTWVzc2FnZSA9IGlzTGVmdCA/ICJJbnZhbGlkIG1peCBv
ZiBCaWdJbnQgYW5kIG90aGVyIHR5cGUgaW4gbGVmdCBzaGlmdCBvcGVyYXRpb24uIiA6ICJJbnZh
bGlkIG1peCBvZiBCaWdJbnQgYW5kIG90aGVyIHR5cGUgaW4gc2lnbmVkIHJpZ2h0IHNoaWZ0IG9w
ZXJhdGlvbi4iOwogICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBz
Y29wZSwgZXJyb3JNZXNzYWdlKTsKICAgICB9CkBAIC04MjMsNiArODIzLDI3IEBAIEFMV0FZU19J
TkxJTkUgSlNWYWx1ZSBqc1JTaGlmdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHYxLCBKU1ZhbHVlCiAgICAgcmV0dXJuIHNoaWZ0KGdsb2JhbE9iamVjdCwgdjEsIHYyLCBp
c0xlZnQpOwogfQogCitBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNVUlNoaWZ0KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgbGVmdCwgSlNWYWx1ZSByaWdodCkKK3sKKyAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworCisgICAgYXV0byBsZWZ0TnVtZXJpYyA9IGxlZnQudG9CaWdJbnRPcklu
dDMyKGdsb2JhbE9iamVjdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
KyAgICBhdXRvIHJpZ2h0TnVtZXJpYyA9IHJpZ2h0LnRvQmlnSW50T3JJbnQzMihnbG9iYWxPYmpl
Y3QpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICBpZiAoVU5M
SUtFTFkoIWxlZnROdW1lcmljLmlzSW50MzIoKSB8fCAhcmlnaHROdW1lcmljLmlzSW50MzIoKSkp
IHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIkJpZ0ludCBk
b2VzIG5vdCBzdXBwb3J0ID4+PiBvcGVyYXRvciJfcyk7CisgICAgICAgIHJldHVybiB7IH07Cisg
ICAgfQorCisgICAgdWludDMyX3QgbGVmdFVpbnQzMiA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pihs
ZWZ0TnVtZXJpYy5hc0ludDMyKCkpOworICAgIHVpbnQzMl90IHJpZ2h0VWludDMyID0gc3RhdGlj
X2Nhc3Q8dWludDMyX3Q+KHJpZ2h0TnVtZXJpYy5hc0ludDMyKCkpOworCisgICAgcmV0dXJuIGpz
TnVtYmVyKHN0YXRpY19jYXN0PGludDMyX3Q+KGxlZnRVaW50MzIgPj4gKHJpZ2h0VWludDMyICYg
MzEpKSk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIEhlYXBCaWdJbnRPcGVyYXRpb24sIHR5cGVu
YW1lIEludDMyT3BlcmF0aW9uPgogQUxXQVlTX0lOTElORSBKU1ZhbHVlIGJpdHdpc2VCaW5hcnlP
cChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHYxLCBKU1ZhbHVlIHYyLCBI
ZWFwQmlnSW50T3BlcmF0aW9uJiYgYmlnSW50T3AsIEludDMyT3BlcmF0aW9uJiYgaW50MzJPcCwg
Y29uc3QgY2hhciogZXJyb3JNZXNzYWdlKQogewpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VM
b2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCAyMGZmYWE3ZWVkZGNiYWU5NzMxNDliZjllMWM0
OTIwNjQ0ZmNhY2UxLi44ODFmMThjZWViNjk2ZWJiODgzZTBhYTE0NzRlNWNjYjk3OGY0ZmUwIDEw
MDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE1IEBACisyMDIwLTA0LTI3ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5j
b20+CisKKyAgICAgICAgW0pTQ10gPj4+IHNob3VsZCBjYWxsIFRvTnVtZXJpYworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjExMDY1CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzdHJlc3MvYmlnaW50LXVy
c2hpZnQuanM6IEFkZGVkLgorICAgICAgICAoc2hvdWxkQmUpOgorICAgICAgICAoc2hvdWxkVGhy
b3cpOgorICAgICAgICAqIHRlc3QyNjIvZXhwZWN0YXRpb25zLnlhbWw6CisKIDIwMjAtMDQtMjYg
IEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgogCiAgICAgICAgIFN5bWJv
bCBzaG91bGQgaGF2ZSBbW0NvbnN0cnVjdF1dIGludGVybmFsIG1ldGhvZApkaWZmIC0tZ2l0IGEv
SlNUZXN0cy9zdHJlc3MvYmlnaW50LXVyc2hpZnQuanMgYi9KU1Rlc3RzL3N0cmVzcy9iaWdpbnQt
dXJzaGlmdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNjBiNGM3ODE1N2UzZGU5YzI2NmNkMDU0OTAwMmMyNjc3
ZWNhZWFlCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvYmlnaW50LXVyc2hpZnQu
anMKQEAgLTAsMCArMSwxMDggQEAKK2Z1bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQp
IHsKKyAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCdiYWQgdmFsdWU6ICcgKyBhY3R1YWwpOworfQorCitmdW5jdGlvbiBzaG91bGRUaHJvdyhmdW5j
LCBlcnJvck1lc3NhZ2UpIHsKKyAgICB2YXIgZXJyb3JUaHJvd24gPSBmYWxzZTsKKyAgICB2YXIg
ZXJyb3IgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChl
KSB7CisgICAgICAgIGVycm9yVGhyb3duID0gdHJ1ZTsKKyAgICAgICAgZXJyb3IgPSBlOworICAg
IH0KKyAgICBpZiAoIWVycm9yVGhyb3duKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCB0
aHJvd24nKTsKKyAgICBpZiAoU3RyaW5nKGVycm9yKSAhPT0gZXJyb3JNZXNzYWdlKQorICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoYGJhZCBlcnJvcjogJHtTdHJpbmcoZXJyb3IpfWApOworfQorCitz
aG91bGRUaHJvdygoKSA9PiB7CisgICAgMm4gPj4+IDFuOworfSwgYFR5cGVFcnJvcjogQmlnSW50
IGRvZXMgbm90IHN1cHBvcnQgPj4+IG9wZXJhdG9yYCk7CisKK3sKKyAgICBsZXQgY2FsbGVkID0g
ZmFsc2U7CisgICAgc2hvdWxkVGhyb3coKCkgPT4geworICAgICAgICAybiA+Pj4geworICAgICAg
ICAgICAgW1N5bWJvbC50b1ByaW1pdGl2ZV0oKSB7CisgICAgICAgICAgICAgICAgY2FsbGVkID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMm47CisgICAgICAgICAgICB9CisgICAgICAg
IH07CisgICAgfSwgYFR5cGVFcnJvcjogQmlnSW50IGRvZXMgbm90IHN1cHBvcnQgPj4+IG9wZXJh
dG9yYCk7CisgICAgc2hvdWxkQmUoY2FsbGVkLCB0cnVlKTsKK30KKworeworICAgIGxldCBjYWxs
ZWRMZWZ0ID0gZmFsc2U7CisgICAgbGV0IGNhbGxlZFJpZ2h0ID0gZmFsc2U7CisgICAgc2hvdWxk
VGhyb3coKCkgPT4geworICAgICAgICAoeworICAgICAgICAgICAgW1N5bWJvbC50b1ByaW1pdGl2
ZV0oKSB7CisgICAgICAgICAgICAgICAgc2hvdWxkQmUoY2FsbGVkTGVmdCwgZmFsc2UpOworICAg
ICAgICAgICAgICAgIHNob3VsZEJlKGNhbGxlZFJpZ2h0LCBmYWxzZSk7CisgICAgICAgICAgICAg
ICAgY2FsbGVkTGVmdCA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIDJuOworICAgICAg
ICAgICAgfQorICAgICAgICB9KSA+Pj4gKHsKKyAgICAgICAgICAgIFtTeW1ib2wudG9QcmltaXRp
dmVdKCkgeworICAgICAgICAgICAgICAgIHNob3VsZEJlKGNhbGxlZExlZnQsIHRydWUpOworICAg
ICAgICAgICAgICAgIHNob3VsZEJlKGNhbGxlZFJpZ2h0LCBmYWxzZSk7CisgICAgICAgICAgICAg
ICAgY2FsbGVkUmlnaHQgPSB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybiAybjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfSwgYFR5cGVFcnJvcjogQmlnSW50IGRvZXMgbm90
IHN1cHBvcnQgPj4+IG9wZXJhdG9yYCk7CisgICAgc2hvdWxkQmUoY2FsbGVkTGVmdCwgdHJ1ZSk7
CisgICAgc2hvdWxkQmUoY2FsbGVkUmlnaHQsIHRydWUpOworfQorCit7CisgICAgbGV0IGNhbGxl
ZExlZnQgPSBmYWxzZTsKKyAgICBsZXQgY2FsbGVkUmlnaHQgPSBmYWxzZTsKKyAgICBzaG91bGRU
aHJvdygoKSA9PiB7CisgICAgICAgICh7CisgICAgICAgICAgICBbU3ltYm9sLnRvUHJpbWl0aXZl
XSgpIHsKKyAgICAgICAgICAgICAgICBzaG91bGRCZShjYWxsZWRMZWZ0LCBmYWxzZSk7CisgICAg
ICAgICAgICAgICAgc2hvdWxkQmUoY2FsbGVkUmlnaHQsIGZhbHNlKTsKKyAgICAgICAgICAgICAg
ICBjYWxsZWRMZWZ0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSkgPj4+ICh7CisgICAgICAgICAgICBbU3ltYm9sLnRvUHJpbWl0aXZl
XSgpIHsKKyAgICAgICAgICAgICAgICBzaG91bGRCZShjYWxsZWRMZWZ0LCB0cnVlKTsKKyAgICAg
ICAgICAgICAgICBzaG91bGRCZShjYWxsZWRSaWdodCwgZmFsc2UpOworICAgICAgICAgICAgICAg
IGNhbGxlZFJpZ2h0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMm47CisgICAgICAg
ICAgICB9CisgICAgICAgIH0pOworICAgIH0sIGBUeXBlRXJyb3I6IEJpZ0ludCBkb2VzIG5vdCBz
dXBwb3J0ID4+PiBvcGVyYXRvcmApOworICAgIHNob3VsZEJlKGNhbGxlZExlZnQsIHRydWUpOwor
ICAgIHNob3VsZEJlKGNhbGxlZFJpZ2h0LCB0cnVlKTsKK30KKworeworICAgIGxldCBjYWxsZWRM
ZWZ0ID0gZmFsc2U7CisgICAgbGV0IGNhbGxlZFJpZ2h0ID0gZmFsc2U7CisgICAgc2hvdWxkVGhy
b3coKCkgPT4geworICAgICAgICAoeworICAgICAgICAgICAgW1N5bWJvbC50b1ByaW1pdGl2ZV0o
KSB7CisgICAgICAgICAgICAgICAgc2hvdWxkQmUoY2FsbGVkTGVmdCwgZmFsc2UpOworICAgICAg
ICAgICAgICAgIHNob3VsZEJlKGNhbGxlZFJpZ2h0LCBmYWxzZSk7CisgICAgICAgICAgICAgICAg
Y2FsbGVkTGVmdCA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIDJuOworICAgICAgICAg
ICAgfQorICAgICAgICB9KSA+Pj4gKHsKKyAgICAgICAgICAgIFtTeW1ib2wudG9QcmltaXRpdmVd
KCkgeworICAgICAgICAgICAgICAgIHNob3VsZEJlKGNhbGxlZExlZnQsIHRydWUpOworICAgICAg
ICAgICAgICAgIHNob3VsZEJlKGNhbGxlZFJpZ2h0LCBmYWxzZSk7CisgICAgICAgICAgICAgICAg
Y2FsbGVkUmlnaHQgPSB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICAg
ICAgfQorICAgICAgICB9KTsKKyAgICB9LCBgVHlwZUVycm9yOiBCaWdJbnQgZG9lcyBub3Qgc3Vw
cG9ydCA+Pj4gb3BlcmF0b3JgKTsKKyAgICBzaG91bGRCZShjYWxsZWRMZWZ0LCB0cnVlKTsKKyAg
ICBzaG91bGRCZShjYWxsZWRSaWdodCwgdHJ1ZSk7Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3Rl
c3QyNjIvZXhwZWN0YXRpb25zLnlhbWwgYi9KU1Rlc3RzL3Rlc3QyNjIvZXhwZWN0YXRpb25zLnlh
bWwKaW5kZXggMGMxNDcxYzAwYmI4MWVkNWU1ZGQ0ZjAzMzQzYTk2MTFjYTg4YWRiOS4uNTgwYmE3
ZjU5Zjg3YmEzZGRlZTU1ZmY1YWViMGMyZTdiZGI5OWFhOSAxMDA2NDQKLS0tIGEvSlNUZXN0cy90
ZXN0MjYyL2V4cGVjdGF0aW9ucy55YW1sCisrKyBiL0pTVGVzdHMvdGVzdDI2Mi9leHBlY3RhdGlv
bnMueWFtbApAQCAtMzA5Miw5ICszMDkyLDYgQEAgdGVzdC9sYW5ndWFnZS9leHByZXNzaW9ucy9z
dXBlci9jYWxsLXBvaXNvbmVkLXVuZGVyc2NvcmUtcHJvdG8uanM6CiB0ZXN0L2xhbmd1YWdlL2V4
cHJlc3Npb25zL3N1cGVyL3Byb3AtcG9pc29uZWQtdW5kZXJzY29yZS1wcm90by5qczoKICAgZGVm
YXVsdDogJ1Rlc3QyNjJFcnJvcjogc2hvdWxkIG5vdCBiZSBjYWxsZWQnCiAgIHN0cmljdCBtb2Rl
OiAnVGVzdDI2MkVycm9yOiBzaG91bGQgbm90IGJlIGNhbGxlZCcKLXRlc3QvbGFuZ3VhZ2UvZXhw
cmVzc2lvbnMvdW5zaWduZWQtcmlnaHQtc2hpZnQvYmlnaW50LXRvcHJpbWl0aXZlLmpzOgotICBk
ZWZhdWx0OiAnVGVzdDI2MkVycm9yOiAwbiA+Pj4ge1tTeW1ib2wudG9QcmltaXRpdmVdOiBmdW5j
dGlvbigpIHt0aHJvdyBuZXcgTXlFcnJvcigpO319IHRocm93cyBNeUVycm9yIEV4cGVjdGVkIGEg
TXlFcnJvciBidXQgZ290IGEgVHlwZUVycm9yJwotICBzdHJpY3QgbW9kZTogJ1Rlc3QyNjJFcnJv
cjogMG4gPj4+IHtbU3ltYm9sLnRvUHJpbWl0aXZlXTogZnVuY3Rpb24oKSB7dGhyb3cgbmV3IE15
RXJyb3IoKTt9fSB0aHJvd3MgTXlFcnJvciBFeHBlY3RlZCBhIE15RXJyb3IgYnV0IGdvdCBhIFR5
cGVFcnJvcicKIHRlc3QvbGFuZ3VhZ2UvZXhwcmVzc2lvbnMveWllbGQvc3Rhci1pdGVyYWJsZS5q
czoKICAgZGVmYXVsdDogJ1Rlc3QyNjJFcnJvcjogRmlyc3QgcmVzdWx0IGBkb25lYCBmbGFnIEV4
cGVjdGVkIFNhbWVWYWx1ZSjCq2ZhbHNlwrssIMKrdW5kZWZpbmVkwrspIHRvIGJlIHRydWUnCiAg
IHN0cmljdCBtb2RlOiAnVGVzdDI2MkVycm9yOiBGaXJzdCByZXN1bHQgYGRvbmVgIGZsYWcgRXhw
ZWN0ZWQgU2FtZVZhbHVlKMKrZmFsc2XCuywgwqt1bmRlZmluZWTCuykgdG8gYmUgdHJ1ZScK
</data>
<flag name="review"
          id="413055"
          type_id="1"
          status="+"
          setter="ross.kirsling"
    />
          </attachment>
      

    </bug>

</bugzilla>