| //===-- Unittests for strtod ----------------------------------------------===// | |
| // | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | |
| // See https://llvm.org/LICENSE.txt for license information. | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| // | |
| //===----------------------------------------------------------------------===// | |
| #include "src/__support/FPUtil/FPBits.h" | |
| #include "src/stdlib/strtod.h" | |
| #include "test/UnitTest/ErrnoCheckingTest.h" | |
| #include "test/UnitTest/ErrnoSetterMatcher.h" | |
| #include "test/UnitTest/RoundingModeUtils.h" | |
| #include "test/UnitTest/Test.h" | |
| #include <stddef.h> | |
| using LIBC_NAMESPACE::fputil::testing::ForceRoundingModeTest; | |
| using LIBC_NAMESPACE::fputil::testing::RoundingMode; | |
| using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Fails; | |
| using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Succeeds; | |
| class LlvmLibcStrToDTest : public LIBC_NAMESPACE::testing::ErrnoCheckingTest, | |
| ForceRoundingModeTest<RoundingMode::Nearest> { | |
| public: | |
| void run_test(const char *inputString, const ptrdiff_t expectedStrLen, | |
| const uint64_t expectedRawData, const int expectedErrno = 0) { | |
| // expectedRawData is the expected double result as a uint64_t, organized | |
| // according to IEEE754: | |
| // | |
| // +-- 1 Sign Bit +-- 52 Mantissa bits | |
| // | | | |
| // | +-------------------------+------------------------+ | |
| // | | | | |
| // SEEEEEEEEEEEMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM | |
| // | | | |
| // +----+----+ | |
| // | | |
| // +-- 11 Exponent Bits | |
| // | |
| // This is so that the result can be compared in parts. | |
| char *str_end = nullptr; | |
| LIBC_NAMESPACE::fputil::FPBits<double> expected_fp = | |
| LIBC_NAMESPACE::fputil::FPBits<double>(expectedRawData); | |
| double result = LIBC_NAMESPACE::strtod(inputString, &str_end); | |
| if (expectedErrno == 0) | |
| EXPECT_THAT(result, Succeeds<double>(expected_fp.get_val())); | |
| else | |
| EXPECT_THAT(result, Fails<double>(expectedErrno, expected_fp.get_val())); | |
| EXPECT_EQ(str_end - inputString, expectedStrLen); | |
| } | |
| }; | |
| TEST_F(LlvmLibcStrToDTest, SimpleTest) { | |
| run_test("123", 3, uint64_t(0x405ec00000000000)); | |
| // This should fail on Eisel-Lemire, forcing a fallback to simple decimal | |
| // conversion. | |
| run_test("12345678901234549760", 20, uint64_t(0x43e56a95319d63d8)); | |
| // Found while looking for difficult test cases here: | |
| // https://github.com/nigeltao/parse-number-fxx-test-data/blob/main/more-test-cases/golang-org-issue-36657.txt | |
| run_test("1090544144181609348835077142190", 31, uint64_t(0x462b8779f2474dfb)); | |
| run_test("0x123", 5, uint64_t(0x4072300000000000)); | |
| } | |
| TEST_F(LlvmLibcStrToDTest, ClingerFastPathDirectedRoundingNegativeExp) { | |
| using LIBC_NAMESPACE::fputil::testing::ForceRoundingMode; | |
| // "295.851801554362" parses as mantissa = 295851801554362 (< 2^53) and | |
| // exp10 = -12, exercising clinger_fast_path with exp10 < 0 across all | |
| // hardware rounding modes. | |
| { | |
| ForceRoundingMode r(RoundingMode::Nearest); | |
| if (r.success) { | |
| run_test("295.851801554362", 16, uint64_t(0x40727da0faaaaaab)); | |
| run_test("-295.851801554362", 17, uint64_t(0xc0727da0faaaaaab)); | |
| } | |
| } | |
| { | |
| ForceRoundingMode r(RoundingMode::Upward); | |
| if (r.success) { | |
| run_test("295.851801554362", 16, uint64_t(0x40727da0faaaaaac)); | |
| run_test("-295.851801554362", 17, uint64_t(0xc0727da0faaaaaab)); | |
| } | |
| } | |
| { | |
| ForceRoundingMode r(RoundingMode::Downward); | |
| if (r.success) { | |
| run_test("295.851801554362", 16, uint64_t(0x40727da0faaaaaab)); | |
| run_test("-295.851801554362", 17, uint64_t(0xc0727da0faaaaaac)); | |
| } | |
| } | |
| { | |
| ForceRoundingMode r(RoundingMode::TowardZero); | |
| if (r.success) { | |
| run_test("295.851801554362", 16, uint64_t(0x40727da0faaaaaab)); | |
| run_test("-295.851801554362", 17, uint64_t(0xc0727da0faaaaaab)); | |
| } | |
| } | |
| } | |
| // These are tests that have caused problems in the past. | |
| TEST_F(LlvmLibcStrToDTest, SpecificFailures) { | |
| run_test("3E70000000000000", 16, uint64_t(0x7FF0000000000000), ERANGE); | |
| run_test("358416272e-33", 13, uint64_t(0x3adbbb2a68c9d0b9)); | |
| run_test("2.16656806400000023841857910156251e9", 36, | |
| uint64_t(0x41e0246690000001)); | |
| run_test("27949676547093071875", 20, uint64_t(0x43f83e132bc608c9)); | |
| run_test( | |
| "100000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000e-800", | |
| 806, 0x3ff0000000000000); | |
| run_test( | |
| "100000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000e-799", | |
| 806, 0x4024000000000000); | |
| run_test( | |
| "100000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "0000000000e-800", | |
| 807, 0x4024000000000000); | |
| run_test( | |
| "10000000000000000000000000000000000000000000000000000000000000000e-64", | |
| 69, 0x3ff0000000000000); | |
| run_test( | |
| "100000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000e-128", | |
| 134, 0x3ff0000000000000); | |
| run_test("1000000000000000000000000000000000000000000000000000000000000000000" | |
| "0000000000000000000000000000000000000000000000000000000000000000000" | |
| "0000000000000000000000000000000000000000000000000000000000000000000" | |
| "00000000000000000000000000000000000000000000000000000000e-256", | |
| 262, 0x3ff0000000000000); | |
| run_test("1000000000000000000000000000000000000000000000000000000000000000000" | |
| "0000000000000000000000000000000000000000000000000000000000000000000" | |
| "0000000000000000000000000000000000000000000000000000000000000000000" | |
| "0000000000000000000000000000000000000000000000000000000000000000000" | |
| "0000000000000000000000000000000000000000000000000000000000000000000" | |
| "0000000000000000000000000000000000000000000000000000000000000000000" | |
| "0000000000000000000000000000000000000000000000000000000000000000000" | |
| "00000000000000000000000000000000000000000000e-512", | |
| 518, 0x3ff0000000000000); | |
| run_test( | |
| "100000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "00000000000000000e-1024", | |
| 1031, 0x3ff0000000000000); | |
| run_test( | |
| "0" | |
| "100000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "00000000000000000e-1024", | |
| 1032, 0x3ff0000000000000); | |
| } | |
| TEST_F(LlvmLibcStrToDTest, FuzzFailures) { | |
| run_test("-\xff\xff\xff\xff\xff\xff\xff\x01", 0, uint64_t(0)); | |
| run_test("-.????", 0, uint64_t(0)); | |
| run_test( | |
| "44444444444444444444444444444444444444444444444444A44444444444444444" | |
| "44444444444*\x99\xff\xff\xff\xff", | |
| 50, uint64_t(0x4a3e68fdd0e0b2d8)); | |
| run_test("-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKNNNNNNNNNNNNNNNNNN?" | |
| "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN?", | |
| 0, uint64_t(0)); | |
| run_test("0x.666E40", 9, uint64_t(0x3fd99b9000000000)); | |
| // glibc version 2.36 and higher (not tested with lower versions) disagrees | |
| // with this result, but ours is correct for the nearest rounding mode. See | |
| // this bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30220 | |
| run_test("0x30000002222225p-1077", 22, uint64_t(0x0006000000444445), ERANGE); | |
| // This value triggered a bug by having an exponent exactly equal to the | |
| // maximum. The overflow checks would accept a value less than the max value | |
| // as valid and greater than the max value as invalid (and set it to the max), | |
| // but an exponent of exactly max value hit the else condition which is | |
| // intended for underflow and set the exponent to the min exponent. | |
| run_test( | |
| "184774460000000000000000000000000000052300000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000009351662015430037656316837118788423" | |
| "887774460000000000004300376000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000052385811247017194600000000" | |
| "000000000171946000000000000000000700460000000000000000000000001000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000020000000000000000" | |
| "000000000000563168371187884238877744600000000000000000000000000000523858" | |
| "112470171946000000000000000001719460000000000000000007004600000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000020000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000005238581124701719460000000" | |
| "000000000017194600000000000000000070046000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "200000000000000000E608", | |
| 1462, uint64_t(0x7ff0000000000000), ERANGE); | |
| // Same as above but for hex. | |
| run_test("0x0164810157p2047", 17, uint64_t(0x7ff0000000000000), ERANGE); | |
| // This test ensures that only the correct number of characters is accepted. | |
| // An exponent symbol followed by a sign isn't a valid exponent. | |
| run_test("2e+", 1, uint64_t(0x4000000000000000)); | |
| run_test("0x2p+", 3, uint64_t(0x4000000000000000)); | |
| // This bug was in the handling of very large exponents in the exponent | |
| // marker. Previously anything greater than 10,000 would be set to 10,000. | |
| // This caused incorrect behavior if there were more than 10,000 '0's in the | |
| // input number, and then a correspondingly large exponent. This test case has | |
| // 24,744 zeroes. | |
| run_test( | |
| "0x." | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000000000000000000000000000" | |
| "000000000000000000000000000000000000000000000000fp551615", | |
| 24755, uint64_t(0x7ff0000000000000), ERANGE); | |
| } |