<?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>140631</bug_id>
          
          <creation_ts>2015-01-19 11:44:11 -0800</creation_ts>
          <short_desc>Make ASan do bounds checks for WTF::Vector</short_desc>
          <delta_ts>2015-01-20 10:28:50 -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>Web Template Framework</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>andersca</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1062430</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-01-19 11:44:11 -0800</bug_when>
    <thetext>We have some code to perform out of bounds checks in non-ASan builds, ASan checks would complement that.

Built-in checks are better, because they detect all overruns and underruns, while ASan only detects small ones, which make Vector access a memory address in a redzone. Also, they can be made either debug only or release too, depending on performance requirements.

ASan checks are better, because they check even those memory accesses that are performed via a raw pointer returned from data() or begin(). They have zero performance cost in non-ASan builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062432</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-01-19 11:46:16 -0800</bug_when>
    <thetext>rdar://problem/19437718</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062433</commentid>
    <comment_count>2</comment_count>
      <attachid>244913</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-01-19 11:47:16 -0800</bug_when>
    <thetext>Created attachment 244913
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062434</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-19 11:50:10 -0800</bug_when>
    <thetext>Attachment 244913 did not pass style-queue:


ERROR: Source/WTF/wtf/Vector.h:510:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062765</commentid>
    <comment_count>4</comment_count>
      <attachid>244913</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-01-20 09:21:09 -0800</bug_when>
    <thetext>Comment on attachment 244913
proposed patch

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

Do you know why the Win EWS bot is red on this patch?

&gt; Source/WTF/wtf/Vector.h:756
&gt; +        if (this == &amp;other) // ASan will crash if we try to restrict access to the same buffer twice.
&gt; +            return;

It’s irritating to add this extra branch for all builds just to make ASAN work, especially since it only optimizes something that we should never be doing. Can we do better? Maybe just put this inside #if ASAN_ENABLED?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062784</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-01-20 10:00:41 -0800</bug_when>
    <thetext>I don&apos;t yet understand why Windows failed to build; will need to figure it out before landing.

&gt; Maybe just put this inside #if ASAN_ENABLED?

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062794</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-01-20 10:28:50 -0800</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/r178722&gt;.

Windows build was failing because of an incorrect macro value. Changed ASAN_ENABLED fallback value from false to 0 to fix this.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244913</attachid>
            <date>2015-01-19 11:47:16 -0800</date>
            <delta_ts>2015-01-20 09:21:09 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>VectorASAN.txt</filename>
            <type>text/plain</type>
            <size>17686</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNzg2NTkpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDE1LTAxLTE5ICBBbGV4ZXkgUHJvc2t1cnlha292
ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2UgQVNhbiBkbyBib3VuZHMgY2hlY2tzIGZv
ciBXVEY6OlZlY3RvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQwNjMxCisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzE5NDM3NzE4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvU2l6ZUxpbWl0cy5j
cHA6IERpc2FibGUgVmVjdG9yIG9iamVjdCBzaXplIGNoZWNrcyBmb3IgQVNhbiBlbmFibGVkIGJ1
aWxkcy4KKworICAgICAgICAqIHd0Zi9WZWN0b3IuaDoKKyAgICAgICAgKFdURjo6VmVjdG9yQnVm
ZmVyOjplbmRPZkJ1ZmZlcik6CisgICAgICAgIChXVEY6OlZlY3Rvcjo6VmVjdG9yKToKKyAgICAg
ICAgKFdURjo6VmVjdG9yOjp+VmVjdG9yKToKKyAgICAgICAgKFdURjo6VmVjdG9yOjpzd2FwKToK
KyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6VmVjdG9yKToKKyAgICAgICAgKFdURjo6
PSk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OmZpbGwpOgorICAgICAgICAoV1RG
OjpPdmVyZmxvd0hhbmRsZXI+OjpyZXNpemUpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRs
ZXI+OjpzaHJpbmspOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+Ojpncm93KToKKyAg
ICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6YXNhblNldEluaXRpYWxCdWZmZXJTaXplVG8p
OgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+Ojphc2FuU2V0QnVmZmVyU2l6ZVRvRnVs
bENhcGFjaXR5KToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6YXNhbkJ1ZmZlclNp
emVXaWxsQ2hhbmdlVG8pOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjpyZXNlcnZl
Q2FwYWNpdHkpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+Ojp0cnlSZXNlcnZlQ2Fw
YWNpdHkpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjpzaHJpbmtDYXBhY2l0eSk6
CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OmFwcGVuZCk6CisgICAgICAgIChXVEY6
Ok92ZXJmbG93SGFuZGxlcj46OnRyeUFwcGVuZCk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFu
ZGxlcj46OmFwcGVuZFNsb3dDYXNlKToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6
dW5jaGVja2VkQXBwZW5kKToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6aW5zZXJ0
KToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6cmVtb3ZlKToKKyAgICAgICAgKFdU
Rjo6T3ZlcmZsb3dIYW5kbGVyPjo6cmVsZWFzZUJ1ZmZlcik6CisKIDIwMTUtMDEtMTYgIE15bGVz
IEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWFrUHRyIGZ1
bmN0aW9ucyBjcmFzaCB3aGVuIGNyZWF0ZWQgd2l0aCBkZWZhdWx0IGNvbnN0cnVjdG9yCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9TaXplTGltaXRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9TaXplTGltaXRzLmNwcAkocmV2aXNpb24gMTc4NjQ3KQorKysgU291cmNlL1dURi93dGYv
U2l6ZUxpbWl0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDEzIEBAIHN0cnVjdCBT
YW1lU2l6ZUFzUmVmQ291bnRlZCB7CiAgICAgLy8gRG9uJ3QgYWRkIGFueXRoaW5nIGhlcmUgYmVj
YXVzZSB0aGlzIHNob3VsZCBzdGF5IHNtYWxsLgogfTsKICNlbmRpZgorCitzdGF0aWNfYXNzZXJ0
KHNpemVvZihPd25QdHI8aW50PikgPT0gc2l6ZW9mKGludCopLCAiT3duUHRyIHNob3VsZCBzdGF5
IHNtYWxsISIpOworc3RhdGljX2Fzc2VydChzaXplb2YoUGFzc1JlZlB0cjxSZWZDb3VudGVkPGlu
dD4+KSA9PSBzaXplb2YoaW50KiksICJQYXNzUmVmUHRyIHNob3VsZCBzdGF5IHNtYWxsISIpOwor
c3RhdGljX2Fzc2VydChzaXplb2YoUmVmQ291bnRlZDxpbnQ+KSA9PSBzaXplb2YoU2FtZVNpemVB
c1JlZkNvdW50ZWQpLCAiUmVmQ291bnRlZCBzaG91bGQgc3RheSBzbWFsbCEiKTsKK3N0YXRpY19h
c3NlcnQoc2l6ZW9mKFJlZlB0cjxSZWZDb3VudGVkPGludD4+KSA9PSBzaXplb2YoaW50KiksICJS
ZWZQdHIgc2hvdWxkIHN0YXkgc21hbGwhIik7CisKKyNpZiAhQVNBTl9FTkFCTEVECiB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSA9IDA+CiBzdHJ1Y3QgU2FtZVNp
emVBc1ZlY3RvcldpdGhJbmxpbmVDYXBhY2l0eTsKIApAQCAtNzAsMTIgKzc3LDkgQEAgc3RydWN0
IFNhbWVTaXplQXNWZWN0b3JXaXRoSW5saW5lQ2FwYWNpdAogICAgIHR5cGVuYW1lIHN0ZDo6YWxp
Z25lZF9zdG9yYWdlPHNpemVvZihUKSwgc3RkOjphbGlnbm1lbnRfb2Y8VD46OnZhbHVlPjo6dHlw
ZSBpbmxpbmVCdWZmZXJbaW5saW5lQ2FwYWNpdHldOwogfTsKIAotc3RhdGljX2Fzc2VydChzaXpl
b2YoT3duUHRyPGludD4pID09IHNpemVvZihpbnQqKSwgIk93blB0ciBzaG91bGQgc3RheSBzbWFs
bCEiKTsKLXN0YXRpY19hc3NlcnQoc2l6ZW9mKFBhc3NSZWZQdHI8UmVmQ291bnRlZDxpbnQ+Pikg
PT0gc2l6ZW9mKGludCopLCAiUGFzc1JlZlB0ciBzaG91bGQgc3RheSBzbWFsbCEiKTsKLXN0YXRp
Y19hc3NlcnQoc2l6ZW9mKFJlZkNvdW50ZWQ8aW50PikgPT0gc2l6ZW9mKFNhbWVTaXplQXNSZWZD
b3VudGVkKSwgIlJlZkNvdW50ZWQgc2hvdWxkIHN0YXkgc21hbGwhIik7Ci1zdGF0aWNfYXNzZXJ0
KHNpemVvZihSZWZQdHI8UmVmQ291bnRlZDxpbnQ+PikgPT0gc2l6ZW9mKGludCopLCAiUmVmUHRy
IHNob3VsZCBzdGF5IHNtYWxsISIpOwogc3RhdGljX2Fzc2VydChzaXplb2YoVmVjdG9yPGludD4p
ID09IHNpemVvZihTYW1lU2l6ZUFzVmVjdG9yV2l0aElubGluZUNhcGFjaXR5PGludD4pLCAiVmVj
dG9yIHNob3VsZCBzdGF5IHNtYWxsISIpOwogc3RhdGljX2Fzc2VydChzaXplb2YoVmVjdG9yPGlu
dCwgMT4pID09IHNpemVvZihTYW1lU2l6ZUFzVmVjdG9yV2l0aElubGluZUNhcGFjaXR5PGludCwg
MT4pLCAiVmVjdG9yIHNob3VsZCBzdGF5IHNtYWxsISIpOwogc3RhdGljX2Fzc2VydChzaXplb2Yo
VmVjdG9yPGludCwgMj4pID09IHNpemVvZihTYW1lU2l6ZUFzVmVjdG9yV2l0aElubGluZUNhcGFj
aXR5PGludCwgMj4pLCAiVmVjdG9yIHNob3VsZCBzdGF5IHNtYWxsISIpOwogc3RhdGljX2Fzc2Vy
dChzaXplb2YoVmVjdG9yPGludCwgMz4pID09IHNpemVvZihTYW1lU2l6ZUFzVmVjdG9yV2l0aElu
bGluZUNhcGFjaXR5PGludCwgMz4pLCAiVmVjdG9yIHNob3VsZCBzdGF5IHNtYWxsISIpOworI2Vu
ZGlmCiB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9WZWN0b3IuaAkocmV2aXNpb24gMTc4NjQ3KQorKysgU291cmNlL1dURi93dGYv
VmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDEwIEBACiAjaW5jbHVkZSA8d3Rm
L1ZhbHVlQ2hlY2suaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yVHJhaXRzLmg+CiAKKyNpZiBBU0FO
X0VOQUJMRUQKK2V4dGVybiAiQyIgdm9pZCBfX3Nhbml0aXplcl9hbm5vdGF0ZV9jb250aWd1b3Vz
X2NvbnRhaW5lcihjb25zdCB2b2lkKiBiZWdpbiwgY29uc3Qgdm9pZCogZW5kLCBjb25zdCB2b2lk
KiBvbGRfbWlkLCBjb25zdCB2b2lkKiBuZXdfbWlkKTsKKyNlbmRpZgorCiBuYW1lc3BhY2UgV1RG
IHsKIAogY29uc3Qgc2l6ZV90IG5vdEZvdW5kID0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSk7CkBA
IC0zODEsNiArMzg1LDEzIEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIHJlc3RvcmVJbmxpbmVC
dWZmZXJJZk5lZWRlZCgpIHsgfQogCisjaWYgQVNBTl9FTkFCTEVECisgICAgdm9pZCogZW5kT2ZC
dWZmZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcigpICsgY2FwYWNpdHkoKTsKKyAg
ICB9CisjZW5kaWYKKwogICAgIHVzaW5nIEJhc2U6OmFsbG9jYXRlQnVmZmVyOwogICAgIHVzaW5n
IEJhc2U6OnRyeUFsbG9jYXRlQnVmZmVyOwogICAgIHVzaW5nIEJhc2U6OnNob3VsZFJlYWxsb2Nh
dGVCdWZmZXI7CkBAIC00OTIsNiArNTAzLDE5IEBAIHB1YmxpYzoKICAgICAgICAgbV9jYXBhY2l0
eSA9IGlubGluZUNhcGFjaXR5OwogICAgIH0KIAorI2lmIEFTQU5fRU5BQkxFRAorICAgIHZvaWQq
IGVuZE9mQnVmZmVyKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChidWZmZXIoKSk7CisgICAgICAg
IHN0YXRpY19hc3NlcnQoKG9mZnNldG9mKFZlY3RvckJ1ZmZlciwgbV9pbmxpbmVCdWZmZXIpICsg
c2l6ZW9mKG1faW5saW5lQnVmZmVyKSkgJSA4ID09IDAsICJJbmxpbmUgYnVmZmVyIGVuZCBuZWVk
cyB0byBiZSBvbiA4IGJ5dGUgYm91bmRhcnkgZm9yIEFTYW4gYW5ub3RhdGlvbnMgdG8gd29yay4i
KTsKKworICAgICAgICBpZiAoYnVmZmVyKCkgPT0gaW5saW5lQnVmZmVyKCkpCisgICAgICAgICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obV9pbmxpbmVCdWZmZXIpICsgc2l6ZW9m
KG1faW5saW5lQnVmZmVyKTsKKworICAgICAgICByZXR1cm4gYnVmZmVyKCkgKyBjYXBhY2l0eSgp
OworICAgIH0KKyNlbmRpZgorCiAgICAgdXNpbmcgQmFzZTo6YnVmZmVyOwogICAgIHVzaW5nIEJh
c2U6OmNhcGFjaXR5OwogICAgIHVzaW5nIEJhc2U6OmJ1ZmZlck1lbW9yeU9mZnNldDsKQEAgLTUz
OSw3ICs1NjMsMTUgQEAgcHJpdmF0ZToKICAgICBUKiBpbmxpbmVCdWZmZXIoKSB7IHJldHVybiBy
ZWludGVycHJldF9jYXN0X3B0cjxUKj4obV9pbmxpbmVCdWZmZXIpOyB9CiAgICAgY29uc3QgVCog
aW5saW5lQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdF9wdHI8Y29uc3Qg
VCo+KG1faW5saW5lQnVmZmVyKTsgfQogCisjaWYgQVNBTl9FTkFCTEVECisgICAgLy8gQVNhbiBu
ZWVkcyB0aGUgYnVmZmVyIHRvIGJlZ2luIGFuZCBlbmQgb24gOC1ieXRlIGJvdW5kYXJpZXMgZm9y
IGFubm90YXRpb25zIHRvIHdvcmsuCisgICAgLy8gRklYTUU6IEFkZCBhIHJlZHpvbmUgYmVmb3Jl
IHRoZSBidWZmZXIgdG8gY2F0Y2ggb2ZmIGJ5IG9uZSBhY2Nlc3Nlcy4gV2UgZG9uJ3QgbmVlZCBh
IGd1YXJkIGFmdGVyLCBiZWNhdXNlIHRoZSBidWZmZXIgaXMgdGhlIGxhc3QgbWVtYmVyIHZhcmlh
YmxlLgorICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYXNhbklubGluZUJ1ZmZlckFsaWdubWVudCA9
IHN0ZDo6YWxpZ25tZW50X29mPFQ+Ojp2YWx1ZSA+PSA4ID8gc3RkOjphbGlnbm1lbnRfb2Y8VD46
OnZhbHVlIDogODsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGFzYW5BZGp1c3RlZElubGluZUNh
cGFjaXR5ID0gKChzaXplb2YoVCkgKiBpbmxpbmVDYXBhY2l0eSArIDcpICYgfjcpIC8gc2l6ZW9m
KFQpOworICAgIHR5cGVuYW1lIHN0ZDo6YWxpZ25lZF9zdG9yYWdlPHNpemVvZihUKSwgYXNhbklu
bGluZUJ1ZmZlckFsaWdubWVudD46OnR5cGUgbV9pbmxpbmVCdWZmZXJbYXNhbkFkanVzdGVkSW5s
aW5lQ2FwYWNpdHldOworI2Vsc2UKICAgICB0eXBlbmFtZSBzdGQ6OmFsaWduZWRfc3RvcmFnZTxz
aXplb2YoVCksIHN0ZDo6YWxpZ25tZW50X29mPFQ+Ojp2YWx1ZT46OnR5cGUgbV9pbmxpbmVCdWZm
ZXJbaW5saW5lQ2FwYWNpdHldOworI2VuZGlmCiB9OwogCiBzdHJ1Y3QgVW5zYWZlVmVjdG9yT3Zl
cmZsb3cgewpAQCAtNTcyLDYgKzYwNCw4IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBWZWN0b3Io
c2l6ZV90IHNpemUpCiAgICAgICAgIDogQmFzZShzaXplLCBzaXplKQogICAgIHsKKyAgICAgICAg
YXNhblNldEluaXRpYWxCdWZmZXJTaXplVG8oc2l6ZSk7CisKICAgICAgICAgaWYgKGJlZ2luKCkp
CiAgICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6aW5pdGlhbGl6ZShiZWdpbigpLCBlbmQoKSk7
CiAgICAgfQpAQCAtNTc5LDYgKzYxMyw4IEBAIHB1YmxpYzoKICAgICBWZWN0b3Ioc2l6ZV90IHNp
emUsIGNvbnN0IFQmIHZhbCkKICAgICAgICAgOiBCYXNlKHNpemUsIHNpemUpCiAgICAgeworICAg
ICAgICBhc2FuU2V0SW5pdGlhbEJ1ZmZlclNpemVUbyhzaXplKTsKKwogICAgICAgICBpZiAoYmVn
aW4oKSkKICAgICAgICAgICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVkRmlsbChiZWdp
bigpLCBlbmQoKSwgdmFsKTsKICAgICB9CkBAIC01ODYsNiArNjIyLDkgQEAgcHVibGljOgogICAg
IFZlY3RvcihzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VD4gaW5pdGlhbGl6ZXJMaXN0KQogICAgIHsK
ICAgICAgICAgcmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShpbml0aWFsaXplckxpc3Quc2l6ZSgpKTsK
KworICAgICAgICBhc2FuU2V0SW5pdGlhbEJ1ZmZlclNpemVUbyhpbml0aWFsaXplckxpc3Quc2l6
ZSgpKTsKKwogICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGVsZW1lbnQgOiBpbml0aWFsaXplckxp
c3QpCiAgICAgICAgICAgICB1bmNoZWNrZWRBcHBlbmQoZWxlbWVudCk7CiAgICAgfQpAQCAtNTk0
LDYgKzYzMyw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChtX3NpemUpCiAgICAgICAg
ICAgICBzaHJpbmsoMCk7CisKKyAgICAgICAgYXNhblNldEJ1ZmZlclNpemVUb0Z1bGxDYXBhY2l0
eSgpOwogICAgIH0KIAogICAgIFZlY3Rvcihjb25zdCBWZWN0b3ImKTsKQEAgLTcxMSw4ICs3NTIs
MTggQEAgcHVibGljOgogCiAgICAgdm9pZCBzd2FwKFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwg
T3ZlcmZsb3dIYW5kbGVyPiYgb3RoZXIpCiAgICAgeworICAgICAgICBpZiAodGhpcyA9PSAmb3Ro
ZXIpIC8vIEFTYW4gd2lsbCBjcmFzaCBpZiB3ZSB0cnkgdG8gcmVzdHJpY3QgYWNjZXNzIHRvIHRo
ZSBzYW1lIGJ1ZmZlciB0d2ljZS4KKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBN
YWtlIGl0IHBvc3NpYmxlIHRvIGNvcHkgaW5saW5lIGJ1ZmZlcnMuCisgICAgICAgIGFzYW5TZXRC
dWZmZXJTaXplVG9GdWxsQ2FwYWNpdHkoKTsKKyAgICAgICAgb3RoZXIuYXNhblNldEJ1ZmZlclNp
emVUb0Z1bGxDYXBhY2l0eSgpOworCiAgICAgICAgIEJhc2U6OnN3YXAob3RoZXIsIG1fc2l6ZSwg
b3RoZXIubV9zaXplKTsKICAgICAgICAgc3RkOjpzd2FwKG1fc2l6ZSwgb3RoZXIubV9zaXplKTsK
KworICAgICAgICBhc2FuU2V0SW5pdGlhbEJ1ZmZlclNpemVUbyhtX3NpemUpOworICAgICAgICBv
dGhlci5hc2FuU2V0SW5pdGlhbEJ1ZmZlclNpemVUbyhvdGhlci5tX3NpemUpOwogICAgIH0KIAog
ICAgIHZvaWQgcmV2ZXJzZSgpOwpAQCAtNzI3LDYgKzc3OCwxMCBAQCBwcml2YXRlOgogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFU+IFUqIGV4cGFuZENhcGFjaXR5KHNpemVfdCBuZXdNaW5DYXBhY2l0
eSwgVSopOyAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiB2b2lkIGFwcGVuZFNsb3dDYXNlKFUm
Jik7CiAKKyAgICB2b2lkIGFzYW5TZXRJbml0aWFsQnVmZmVyU2l6ZVRvKHNpemVfdCk7CisgICAg
dm9pZCBhc2FuU2V0QnVmZmVyU2l6ZVRvRnVsbENhcGFjaXR5KCk7CisgICAgdm9pZCBhc2FuQnVm
ZmVyU2l6ZVdpbGxDaGFuZ2VUbyhzaXplX3QpOworCiAgICAgdXNpbmcgQmFzZTo6bV9zaXplOwog
ICAgIHVzaW5nIEJhc2U6OmJ1ZmZlcjsKICAgICB1c2luZyBCYXNlOjpjYXBhY2l0eTsKQEAgLTcz
OCwxMiArNzkzLDE3IEBAIHByaXZhdGU6CiAgICAgdXNpbmcgQmFzZTo6cmVhbGxvY2F0ZUJ1ZmZl
cjsKICAgICB1c2luZyBCYXNlOjpyZXN0b3JlSW5saW5lQnVmZmVySWZOZWVkZWQ7CiAgICAgdXNp
bmcgQmFzZTo6cmVsZWFzZUJ1ZmZlcjsKKyNpZiBBU0FOX0VOQUJMRUQKKyAgICB1c2luZyBCYXNl
OjplbmRPZkJ1ZmZlcjsKKyNlbmRpZgogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90
IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CiBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OlZlY3Rvcihjb25zdCBWZWN0b3ImIG90aGVy
KQogICAgIDogQmFzZShvdGhlci5jYXBhY2l0eSgpLCBvdGhlci5zaXplKCkpCiB7CisgICAgYXNh
blNldEluaXRpYWxCdWZmZXJTaXplVG8ob3RoZXIuc2l6ZSgpKTsKKwogICAgIGlmIChiZWdpbigp
KQogICAgICAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZENvcHkob3RoZXIuYmVnaW4o
KSwgb3RoZXIuZW5kKCksIGJlZ2luKCkpOwogfQpAQCAtNzUzLDYgKzgxMyw4IEBAIHRlbXBsYXRl
PHNpemVfdCBvdGhlckNhcGFjaXR5LCB0eXBlbmFtZSAKIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eSwgT3ZlcmZsb3dIYW5kbGVyPjo6VmVjdG9yKGNvbnN0IFZlY3RvcjxULCBvdGhlckNhcGFjaXR5
LCBvdGhlck92ZXJmbG93QmVoYXZpb3VyPiYgb3RoZXIpCiAgICAgOiBCYXNlKG90aGVyLmNhcGFj
aXR5KCksIG90aGVyLnNpemUoKSkKIHsKKyAgICBhc2FuU2V0SW5pdGlhbEJ1ZmZlclNpemVUbyhv
dGhlci5zaXplKCkpOworCiAgICAgaWYgKGJlZ2luKCkpCiAgICAgICAgIFR5cGVPcGVyYXRpb25z
Ojp1bmluaXRpYWxpemVkQ29weShvdGhlci5iZWdpbigpLCBvdGhlci5lbmQoKSwgYmVnaW4oKSk7
CiB9CkBAIC03NzAsNyArODMyLDkgQEAgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxv
d0hhbmRsZQogICAgICAgICByZXNlcnZlQ2FwYWNpdHkob3RoZXIuc2l6ZSgpKTsKICAgICAgICAg
QVNTRVJUKGJlZ2luKCkpOwogICAgIH0KLSAgICAKKworICAgIGFzYW5CdWZmZXJTaXplV2lsbENo
YW5nZVRvKG90aGVyLnNpemUoKSk7CisKICAgICBzdGQ6OmNvcHkob3RoZXIuYmVnaW4oKSwgb3Ro
ZXIuYmVnaW4oKSArIHNpemUoKSwgYmVnaW4oKSk7CiAgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5p
dGlhbGl6ZWRDb3B5KG90aGVyLmJlZ2luKCkgKyBzaXplKCksIG90aGVyLmVuZCgpLCBlbmQoKSk7
CiAgICAgbV9zaXplID0gb3RoZXIuc2l6ZSgpOwpAQCAtNzk3LDYgKzg2MSw4IEBAIFZlY3RvcjxU
LCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGUKICAgICAgICAgQVNTRVJUKGJlZ2luKCkp
OwogICAgIH0KICAgICAKKyAgICBhc2FuQnVmZmVyU2l6ZVdpbGxDaGFuZ2VUbyhvdGhlci5zaXpl
KCkpOworCiAgICAgc3RkOjpjb3B5KG90aGVyLmJlZ2luKCksIG90aGVyLmJlZ2luKCkgKyBzaXpl
KCksIGJlZ2luKCkpOwogICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVkQ29weShvdGhl
ci5iZWdpbigpICsgc2l6ZSgpLCBvdGhlci5lbmQoKSwgZW5kKCkpOwogICAgIG1fc2l6ZSA9IG90
aGVyLnNpemUoKTsKQEAgLTg1Nyw3ICs5MjMsOSBAQCB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dICiAgICAgICAgIHJlc2VydmVDYXBhY2l0eShuZXdTaXplKTsKICAgICAg
ICAgQVNTRVJUKGJlZ2luKCkpOwogICAgIH0KLSAgICAKKworICAgIGFzYW5CdWZmZXJTaXplV2ls
bENoYW5nZVRvKG5ld1NpemUpOworCiAgICAgc3RkOjpmaWxsKGJlZ2luKCksIGVuZCgpLCB2YWwp
OwogICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVkRmlsbChlbmQoKSwgYmVnaW4oKSAr
IG5ld1NpemUsIHZhbCk7CiAgICAgbV9zaXplID0gbmV3U2l6ZTsKQEAgLTkxOSwxMSArOTg3LDEz
IEBAIGlubGluZSBVKiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXIKIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVy
PgogaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+
OjpyZXNpemUoc2l6ZV90IHNpemUpCiB7Ci0gICAgaWYgKHNpemUgPD0gbV9zaXplKQorICAgIGlm
IChzaXplIDw9IG1fc2l6ZSkgewogICAgICAgICBUeXBlT3BlcmF0aW9uczo6ZGVzdHJ1Y3QoYmVn
aW4oKSArIHNpemUsIGVuZCgpKTsKLSAgICBlbHNlIHsKKyAgICAgICAgYXNhbkJ1ZmZlclNpemVX
aWxsQ2hhbmdlVG8oc2l6ZSk7CisgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKHNpemUgPiBjYXBh
Y2l0eSgpKQogICAgICAgICAgICAgZXhwYW5kQ2FwYWNpdHkoc2l6ZSk7CisgICAgICAgIGFzYW5C
dWZmZXJTaXplV2lsbENoYW5nZVRvKHNpemUpOwogICAgICAgICBpZiAoYmVnaW4oKSkKICAgICAg
ICAgICAgIFR5cGVPcGVyYXRpb25zOjppbml0aWFsaXplKGVuZCgpLCBiZWdpbigpICsgc2l6ZSk7
CiAgICAgfQpAQCAtOTQzLDYgKzEwMTMsNyBAQCB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eSwgT3ZlcmZsb3dICiB7CiAgICAgQVNTRVJUKHNpemUgPD0gbV9zaXplKTsKICAgICBUeXBlT3Bl
cmF0aW9uczo6ZGVzdHJ1Y3QoYmVnaW4oKSArIHNpemUsIGVuZCgpKTsKKyAgICBhc2FuQnVmZmVy
U2l6ZVdpbGxDaGFuZ2VUbyhzaXplKTsKICAgICBtX3NpemUgPSBzaXplOwogfQogCkBAIC05NTIs
MjAgKzEwMjMsNjkgQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SAog
ICAgIEFTU0VSVChzaXplID49IG1fc2l6ZSk7CiAgICAgaWYgKHNpemUgPiBjYXBhY2l0eSgpKQog
ICAgICAgICBleHBhbmRDYXBhY2l0eShzaXplKTsKKyAgICBhc2FuQnVmZmVyU2l6ZVdpbGxDaGFu
Z2VUbyhzaXplKTsKICAgICBpZiAoYmVnaW4oKSkKICAgICAgICAgVHlwZU9wZXJhdGlvbnM6Omlu
aXRpYWxpemUoZW5kKCksIGJlZ2luKCkgKyBzaXplKTsKICAgICBtX3NpemUgPSBzaXplOwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92
ZXJmbG93SGFuZGxlcj4KK2lubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3Zl
cmZsb3dIYW5kbGVyPjo6YXNhblNldEluaXRpYWxCdWZmZXJTaXplVG8oc2l6ZV90IHNpemUpCit7
CisjaWYgQVNBTl9FTkFCTEVECisgICAgaWYgKCFidWZmZXIoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gVGhpcyBmdW5jdGlvbiByZXN0aWN0cyBidWZmZXIgYWNjZXNzIHRvIG9ubHkgZWxl
bWVudHMgaW4gW2JlZ2luKCksIGVuZCgpKSByYW5nZSwgbWFraW5nIEFTYW4gZGV0ZWN0IGFuIGVy
cm9yCisgICAgLy8gd2hlbiBhY2Nlc3NpbmcgZWxlbWVudHMgaW4gW2VuZCgpLCBlbmRPZkJ1ZmZl
cigpKSByYW5nZS4KKyAgICAvLyBBIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgY2FuIGJlIGFjY2Vz
c2VkIHdpdGhvdXQgcmVzdHJpY3Rpb25zLCBzbyAib2xkX21pZCIgYXJndW1lbnQgZXF1YWxzICJl
bmQiIGFyZ3VtZW50LgorICAgIF9fc2FuaXRpemVyX2Fubm90YXRlX2NvbnRpZ3VvdXNfY29udGFp
bmVyKGJ1ZmZlcigpLCBlbmRPZkJ1ZmZlcigpLCBlbmRPZkJ1ZmZlcigpLCBidWZmZXIoKSArIHNp
emUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2l6ZSk7CisjZW5kaWYKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hh
bmRsZXI+CitpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFu
ZGxlcj46OmFzYW5TZXRCdWZmZXJTaXplVG9GdWxsQ2FwYWNpdHkoKQoreworI2lmIEFTQU5fRU5B
QkxFRAorICAgIGlmICghYnVmZmVyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEFTYW4g
cmVxdWlyZXMgdGhhdCB0aGUgYW5ub3RhdGlvbiBpcyByZXR1cm5lZCB0byBpdHMgaW5pdGlhbCBz
dGF0ZSBiZWZvcmUgZGVhbGxvY2F0aW9uLgorICAgIF9fc2FuaXRpemVyX2Fubm90YXRlX2NvbnRp
Z3VvdXNfY29udGFpbmVyKGJ1ZmZlcigpLCBlbmRPZkJ1ZmZlcigpLCBidWZmZXIoKSArIHNpemUo
KSwgZW5kT2ZCdWZmZXIoKSk7CisjZW5kaWYKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6
ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgdm9p
ZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OmFzYW5CdWZmZXJT
aXplV2lsbENoYW5nZVRvKHNpemVfdCBuZXdTaXplKQoreworI2lmIEFTQU5fRU5BQkxFRAorICAg
IGlmICghYnVmZmVyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIENoYW5nZSBhbGxvd2Vk
IHJhbmdlLgorICAgIF9fc2FuaXRpemVyX2Fubm90YXRlX2NvbnRpZ3VvdXNfY29udGFpbmVyKGJ1
ZmZlcigpLCBlbmRPZkJ1ZmZlcigpLCBidWZmZXIoKSArIHNpemUoKSwgYnVmZmVyKCkgKyBuZXdT
aXplKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKG5ld1NpemUpOworI2VuZGlmCit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZs
b3dIYW5kbGVyPgogdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxl
cj46OnJlc2VydmVDYXBhY2l0eShzaXplX3QgbmV3Q2FwYWNpdHkpCiB7CiAgICAgaWYgKG5ld0Nh
cGFjaXR5IDw9IGNhcGFjaXR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBUKiBvbGRCdWZmZXIg
PSBiZWdpbigpOwogICAgIFQqIG9sZEVuZCA9IGVuZCgpOworCisgICAgYXNhblNldEJ1ZmZlclNp
emVUb0Z1bGxDYXBhY2l0eSgpOworCiAgICAgQmFzZTo6YWxsb2NhdGVCdWZmZXIobmV3Q2FwYWNp
dHkpOwogICAgIEFTU0VSVChiZWdpbigpKTsKKworICAgIGFzYW5TZXRJbml0aWFsQnVmZmVyU2l6
ZVRvKHNpemUoKSk7CisKICAgICBUeXBlT3BlcmF0aW9uczo6bW92ZShvbGRCdWZmZXIsIG9sZEVu
ZCwgYmVnaW4oKSk7CiAgICAgQmFzZTo6ZGVhbGxvY2F0ZUJ1ZmZlcihvbGRCdWZmZXIpOwogfQpA
QCAtOTc3LDkgKzEwOTcsMTcgQEAgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBUKiBvbGRCdWZmZXIgPSBiZWdpbigpOwog
ICAgIFQqIG9sZEVuZCA9IGVuZCgpOwotICAgIGlmICghQmFzZTo6dHJ5QWxsb2NhdGVCdWZmZXIo
bmV3Q2FwYWNpdHkpKQorCisgICAgYXNhblNldEJ1ZmZlclNpemVUb0Z1bGxDYXBhY2l0eSgpOwor
CisgICAgaWYgKCFCYXNlOjp0cnlBbGxvY2F0ZUJ1ZmZlcihuZXdDYXBhY2l0eSkpIHsKKyAgICAg
ICAgYXNhblNldEluaXRpYWxCdWZmZXJTaXplVG8oc2l6ZSgpKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KICAgICBBU1NFUlQoYmVnaW4oKSk7CisKKyAgICBhc2FuU2V0SW5pdGlhbEJ1
ZmZlclNpemVUbyhzaXplKCkpOworCiAgICAgVHlwZU9wZXJhdGlvbnM6Om1vdmUob2xkQnVmZmVy
LCBvbGRFbmQsIGJlZ2luKCkpOwogICAgIEJhc2U6OmRlYWxsb2NhdGVCdWZmZXIob2xkQnVmZmVy
KTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEwMDMsMTAgKzExMzEsMTMgQEAgdm9pZCBWZWN0b3I8
VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SAogICAgIGlmIChuZXdDYXBhY2l0eSA8IHNpemUo
KSkgCiAgICAgICAgIHNocmluayhuZXdDYXBhY2l0eSk7CiAKKyAgICBhc2FuU2V0QnVmZmVyU2l6
ZVRvRnVsbENhcGFjaXR5KCk7CisKICAgICBUKiBvbGRCdWZmZXIgPSBiZWdpbigpOwogICAgIGlm
IChuZXdDYXBhY2l0eSA+IDApIHsKICAgICAgICAgaWYgKEJhc2U6OnNob3VsZFJlYWxsb2NhdGVC
dWZmZXIobmV3Q2FwYWNpdHkpKSB7CiAgICAgICAgICAgICBCYXNlOjpyZWFsbG9jYXRlQnVmZmVy
KG5ld0NhcGFjaXR5KTsKKyAgICAgICAgICAgIGFzYW5TZXRJbml0aWFsQnVmZmVyU2l6ZVRvKHNp
emUoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMTAxOCw2ICsxMTQ5
LDggQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SAogCiAgICAgQmFz
ZTo6ZGVhbGxvY2F0ZUJ1ZmZlcihvbGRCdWZmZXIpOwogICAgIEJhc2U6OnJlc3RvcmVJbmxpbmVC
dWZmZXJJZk5lZWRlZCgpOworCisgICAgYXNhblNldEluaXRpYWxCdWZmZXJTaXplVG8oc2l6ZSgp
KTsKIH0KIAogLy8gVGVtcGxhdGl6aW5nIHRoZXNlIGlzIGJldHRlciB0aGFuIGp1c3QgbGV0dGlu
ZyB0aGUgY29udmVyc2lvbiBoYXBwZW4gaW1wbGljaXRseSwKQEAgLTEwMzMsNiArMTE2Niw3IEBA
IHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0gKICAgICB9CiAgICAgaWYg
KG5ld1NpemUgPCBtX3NpemUpCiAgICAgICAgIENSQVNIKCk7CisgICAgYXNhbkJ1ZmZlclNpemVX
aWxsQ2hhbmdlVG8obmV3U2l6ZSk7CiAgICAgVCogZGVzdCA9IGVuZCgpOwogICAgIFZlY3RvckNv
cGllcjxzdGQ6OmlzX3RyaXZpYWw8VD46OnZhbHVlLCBVPjo6dW5pbml0aWFsaXplZENvcHkoZGF0
YSwgJmRhdGFbZGF0YVNpemVdLCBkZXN0KTsKICAgICBtX3NpemUgPSBuZXdTaXplOwpAQCAtMTA1
MCw2ICsxMTg0LDcgQEAgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SAog
ICAgIH0KICAgICBpZiAobmV3U2l6ZSA8IG1fc2l6ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGFzYW5CdWZmZXJTaXplV2lsbENoYW5nZVRvKG5ld1NpemUpOwogICAgIFQqIGRlc3QgPSBl
bmQoKTsKICAgICBWZWN0b3JDb3BpZXI8c3RkOjppc190cml2aWFsPFQ+Ojp2YWx1ZSwgVT46OnVu
aW5pdGlhbGl6ZWRDb3B5KGRhdGEsICZkYXRhW2RhdGFTaXplXSwgZGVzdCk7CiAgICAgbV9zaXpl
ID0gbmV3U2l6ZTsKQEAgLTEwNjAsNiArMTE5NSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNp
emVfdCBpbmxpbmVDYXBhY2kKIEFMV0FZU19JTkxJTkUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2Fw
YWNpdHksIE92ZXJmbG93SGFuZGxlcj46OmFwcGVuZChVJiYgdmFsdWUpCiB7CiAgICAgaWYgKHNp
emUoKSAhPSBjYXBhY2l0eSgpKSB7CisgICAgICAgIGFzYW5CdWZmZXJTaXplV2lsbENoYW5nZVRv
KG1fc2l6ZSArIDEpOwogICAgICAgICBuZXcgKE5vdE51bGwsIGVuZCgpKSBUKHN0ZDo6Zm9yd2Fy
ZDxVPih2YWx1ZSkpOwogICAgICAgICArK21fc2l6ZTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTA3
Nyw2ICsxMjEzLDcgQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SAog
ICAgIHB0ciA9IGV4cGFuZENhcGFjaXR5KHNpemUoKSArIDEsIHB0cik7CiAgICAgQVNTRVJUKGJl
Z2luKCkpOwogCisgICAgYXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdlVG8obV9zaXplICsgMSk7CiAg
ICAgbmV3IChOb3ROdWxsLCBlbmQoKSkgVChzdGQ6OmZvcndhcmQ8VT4oKnB0cikpOwogICAgICsr
bV9zaXplOwogfQpAQCAtMTA4OSw2ICsxMjI2LDggQEAgaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlu
bGluZUNhcGFjaXR5LCBPdgogewogICAgIEFTU0VSVChzaXplKCkgPCBjYXBhY2l0eSgpKTsKIAor
ICAgIGFzYW5CdWZmZXJTaXplV2lsbENoYW5nZVRvKG1fc2l6ZSArIDEpOworCiAgICAgYXV0byBw
dHIgPSBzdGQ6OmFkZHJlc3NvZih2YWx1ZSk7CiAgICAgbmV3IChOb3ROdWxsLCBlbmQoKSkgVChz
dGQ6OmZvcndhcmQ8VT4oKnB0cikpOwogICAgICsrbV9zaXplOwpAQCAtMTExMSw2ICsxMjUwLDcg
QEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SAogICAgIH0KICAgICBp
ZiAobmV3U2l6ZSA8IG1fc2l6ZSkKICAgICAgICAgQ1JBU0goKTsKKyAgICBhc2FuQnVmZmVyU2l6
ZVdpbGxDaGFuZ2VUbyhuZXdTaXplKTsKICAgICBUKiBzcG90ID0gYmVnaW4oKSArIHBvc2l0aW9u
OwogICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlT3ZlcmxhcHBpbmcoc3BvdCwgZW5kKCksIHNwb3Qg
KyBkYXRhU2l6ZSk7CiAgICAgVmVjdG9yQ29waWVyPHN0ZDo6aXNfdHJpdmlhbDxUPjo6dmFsdWUs
IFU+Ojp1bmluaXRpYWxpemVkQ29weShkYXRhLCAmZGF0YVtkYXRhU2l6ZV0sIHNwb3QpOwpAQCAt
MTEyOCw2ICsxMjY4LDggQEAgaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBP
dgogICAgICAgICBBU1NFUlQoYmVnaW4oKSk7CiAgICAgfQogCisgICAgYXNhbkJ1ZmZlclNpemVX
aWxsQ2hhbmdlVG8obV9zaXplICsgMSk7CisKICAgICBUKiBzcG90ID0gYmVnaW4oKSArIHBvc2l0
aW9uOwogICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlT3ZlcmxhcHBpbmcoc3BvdCwgZW5kKCksIHNw
b3QgKyAxKTsKICAgICBuZXcgKE5vdE51bGwsIHNwb3QpIFQoc3RkOjpmb3J3YXJkPFU+KCpwdHIp
KTsKQEAgLTExNDcsNiArMTI4OSw3IEBAIGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3YKICAgICBUKiBzcG90ID0gYmVnaW4oKSArIHBvc2l0aW9uOwogICAgIHNwb3QtPn5U
KCk7CiAgICAgVHlwZU9wZXJhdGlvbnM6Om1vdmVPdmVybGFwcGluZyhzcG90ICsgMSwgZW5kKCks
IHNwb3QpOworICAgIGFzYW5CdWZmZXJTaXplV2lsbENoYW5nZVRvKG1fc2l6ZSAtIDEpOwogICAg
IC0tbV9zaXplOwogfQogCkBAIC0xMTU5LDYgKzEzMDIsNyBAQCBpbmxpbmUgdm9pZCBWZWN0b3I8
VCwgaW5saW5lQ2FwYWNpdHksIE92CiAgICAgVCogZW5kU3BvdCA9IGJlZ2luU3BvdCArIGxlbmd0
aDsKICAgICBUeXBlT3BlcmF0aW9uczo6ZGVzdHJ1Y3QoYmVnaW5TcG90LCBlbmRTcG90KTsgCiAg
ICAgVHlwZU9wZXJhdGlvbnM6Om1vdmVPdmVybGFwcGluZyhlbmRTcG90LCBlbmQoKSwgYmVnaW5T
cG90KTsKKyAgICBhc2FuQnVmZmVyU2l6ZVdpbGxDaGFuZ2VUbyhtX3NpemUgLSBsZW5ndGgpOwog
ICAgIG1fc2l6ZSAtPSBsZW5ndGg7CiB9CiAKQEAgLTExNzIsNiArMTMxNiwxMSBAQCBpbmxpbmUg
dm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92CiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
aXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KIGlubGluZSBN
YWxsb2NQdHI8VD4gVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+Ojpy
ZWxlYXNlQnVmZmVyKCkKIHsKKyAgICAvLyBGSVhNRTogRmluZCBhIHdheSB0byBwcmVzZXJ2ZSBh
bm5vdGF0aW9ucyBvbiB0aGUgcmV0dXJuZWQgYnVmZmVyLgorICAgIC8vIEFTYW4gcmVxdWlyZXMg
dGhhdCBhbGwgYW5ub3RhdGlvbnMgYXJlIHJlbW92ZWQgYmVmb3JlIGRlYWxsb2NhdGlvbiwKKyAg
ICAvLyBhbmQgTWFsbG9jUHRyIGRvZXNuJ3QgaW1wbGVtZW50IHRoYXQuCisgICAgYXNhblNldEJ1
ZmZlclNpemVUb0Z1bGxDYXBhY2l0eSgpOworCiAgICAgYXV0byBidWZmZXIgPSBCYXNlOjpyZWxl
YXNlQnVmZmVyKCk7CiAgICAgaWYgKGlubGluZUNhcGFjaXR5ICYmICFidWZmZXIgJiYgbV9zaXpl
KSB7CiAgICAgICAgIC8vIElmIHRoZSB2ZWN0b3IgaGFkIHNvbWUgZGF0YSwgYnV0IG5vIGJ1ZmZl
ciB0byByZWxlYXNlLApAQCAtMTE4Miw2ICsxMzMxLDcgQEAgaW5saW5lIE1hbGxvY1B0cjxUPiBW
ZWN0b3I8VCwgaW5saW5lQ2FwYQogICAgICAgICBtZW1jcHkoYnVmZmVyLmdldCgpLCBkYXRhKCks
IGJ5dGVzKTsKICAgICB9CiAgICAgbV9zaXplID0gMDsKKyAgICAvLyBGSVhNRTogU2hvdWxkIHdl
IGNhbGwgQmFzZTo6cmVzdG9yZUlubGluZUJ1ZmZlcklmTmVlZGVkKCkgaGVyZT8KICAgICByZXR1
cm4gYnVmZmVyOwogfQogCg==
</data>
<flag name="review"
          id="269846"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>