diff --git a/libcxx/CREDITS.TXT b/libcxx/CREDITS.TXT --- a/libcxx/CREDITS.TXT +++ b/libcxx/CREDITS.TXT @@ -12,6 +12,9 @@ E: compnerd@compnerd.org D: Minor patches and Linux fixes. +N: Ulf Adams +D: Invented the Ryu and Ryu Printf algorithms used in floating-point to_chars, and wrote the initial code. + N: Dan Albert E: danalbert@google.com D: Android support and test runner improvements. @@ -24,6 +27,9 @@ E: holgerar@gmail.com D: Minor fix. +N: Jorg Brown +D: Ported floating-point to_chars from MSVC to libc++. + N: David Chisnall E: theraven at theravensnest dot org D: FreeBSD and Solaris ports, libcxxrt support, some atomics work. @@ -77,6 +83,14 @@ E: kyrtzidis@apple.com D: Bug fixes. +N: Stephan T. Lavavej +E: stl@microsoft.com +E: stl@nuwen.net +D: Implemented floating-point to_chars. + +N: Microsoft Corporation +D: Contributed floating-point to_chars. + N: Bruce Mitchener, Jr. E: bruce.mitchener@gmail.com D: Emscripten-related changes. diff --git a/libcxx/docs/Status/Cxx17.rst b/libcxx/docs/Status/Cxx17.rst --- a/libcxx/docs/Status/Cxx17.rst +++ b/libcxx/docs/Status/Cxx17.rst @@ -40,6 +40,7 @@ .. note:: + .. [#note-P0067] P0067: ``std::(to|from)_chars`` for integrals has been available since version 7.0. ``std::to_chars`` for ``float`` and ``double`` since version 14.0. .. [#note-P0433] P0433: So far, only the ````, sequence containers, container adaptors and ```` portions of P0433 have been implemented. .. [#note-P0607] P0607: The parts of P0607 that are not done are the ```` bits. diff --git a/libcxx/docs/Status/Cxx17Papers.csv b/libcxx/docs/Status/Cxx17Papers.csv --- a/libcxx/docs/Status/Cxx17Papers.csv +++ b/libcxx/docs/Status/Cxx17Papers.csv @@ -71,7 +71,7 @@ "`P0394r4 `__","LWG","Hotel Parallelifornia: terminate() for Parallel Algorithms Exception Handling","Oulu","","" "","","","","","" "`P0003R5 `__","LWG","Removing Deprecated Exception Specifications from C++17","Issaquah","|Complete|","5.0" -"`P0067R5 `__","LWG","Elementary string conversions, revision 5","Issaquah","|Partial|","" +"`P0067R5 `__","LWG","Elementary string conversions, revision 5","Issaquah","|Partial| [#note-P0067]","" "`P0403R1 `__","LWG","Literal suffixes for ``basic_string_view``\ ","Issaquah","|Complete|","4.0" "`P0414R2 `__","LWG","Merging shared_ptr changes from Library Fundamentals to C++17","Issaquah","|Complete|","11.0" "`P0418R2 `__","LWG","Fail or succeed: there is no atomic lattice","Issaquah","","" diff --git a/libcxx/include/CMakeLists.txt b/libcxx/include/CMakeLists.txt --- a/libcxx/include/CMakeLists.txt +++ b/libcxx/include/CMakeLists.txt @@ -99,6 +99,8 @@ __bsd_locale_fallbacks.h __charconv/chars_format.h __charconv/from_chars_result.h + __charconv/ryu.h + __charconv/ryu_tables.h __charconv/to_chars_result.h __compare/common_comparison_category.h __compare/compare_three_way_result.h diff --git a/libcxx/include/__charconv/ryu.h b/libcxx/include/__charconv/ryu.h new file mode 100644 --- /dev/null +++ b/libcxx/include/__charconv/ryu.h @@ -0,0 +1,458 @@ +// -*- C++ -*- +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +// Copyright (c) Microsoft Corporation. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + + +// Copyright 2018 Ulf Adams +// Copyright (c) Microsoft Corporation. All rights reserved. + +// Boost Software License - Version 1.0 - August 17th, 2003 + +// Permission is hereby granted, free of charge, to any person or organization +// obtaining a copy of the software and accompanying documentation covered by +// this license (the "Software") to use, reproduce, display, distribute, +// execute, and transmit the Software, and to prepare derivative works of the +// Software, and to permit third-parties to whom the Software is furnished to +// do so, all subject to the following: + +// The copyright notices in the Software and this entire statement, including +// the above license grant, this restriction and the following disclaimer, +// must be included in all copies of the Software, in whole or in part, and +// all derivative works of the Software, unless such copies or derivative +// works are solely in the form of machine-executable object code generated by +// a source language processor. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +// DEALINGS IN THE SOFTWARE. + +#ifndef _LIBCPP___CHARCONV_RYU_H +#define _LIBCPP___CHARCONV_RYU_H + +// Avoid formatting to keep the changes with the original code minimal. +// clang-format off + +#include <__charconv/chars_format.h> +#include <__charconv/ryu_tables.h> +#include <__charconv/to_chars_result.h> +#include <__config> +#include <__debug> +#include <__errc> +#include +#include +#include + +#ifdef _M_X64 +#include // for _umul128() and __shiftright128() +#endif // _M_X64 + +#if defined(_WIN64) || defined(_M_AMD64) || defined(__x86_64__) || defined(__aarch64__) +#define _LIBCPP_64_BIT +#endif + +_LIBCPP_BEGIN_NAMESPACE_STD + +#if _LIBCPP_STD_VER > 14 + +// https://github.com/ulfjack/ryu/tree/59661c3/ryu + +#if !defined(_LIBCPP_COMPILER_MSVC) +_LIBCPP_HIDE_FROM_ABI inline unsigned char _BitScanForward64(unsigned long* __index, unsigned long long __mask) { + if (__mask == 0) { + return false; + } + *__index = __builtin_ctzll(__mask); + return true; +} + +_LIBCPP_HIDE_FROM_ABI inline unsigned char _BitScanForward(unsigned long* __index, unsigned int __mask) { + if (__mask == 0) { + return false; + } + *__index = __builtin_ctz(__mask); + return true; +} +#endif // _LIBCPP_COMPILER_MSVC + +// vvvvvvvvvv DERIVED FROM common.h vvvvvvvvvv + +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline uint32_t __decimalLength9(const uint32_t __v) { + // Function precondition: __v is not a 10-digit number. + // (f2s: 9 digits are sufficient for round-tripping.) + // (d2fixed: We print 9-digit blocks.) + _LIBCPP_ASSERT(__v < 1000000000, ""); + if (__v >= 100000000) { return 9; } + if (__v >= 10000000) { return 8; } + if (__v >= 1000000) { return 7; } + if (__v >= 100000) { return 6; } + if (__v >= 10000) { return 5; } + if (__v >= 1000) { return 4; } + if (__v >= 100) { return 3; } + if (__v >= 10) { return 2; } + return 1; +} + +// Returns __e == 0 ? 1 : ceil(log_2(5^__e)). +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline int32_t __pow5bits(const int32_t __e) { + // This approximation works up to the point that the multiplication overflows at __e = 3529. + // If the multiplication were done in 64 bits, it would fail at 5^4004 which is just greater + // than 2^9297. + _LIBCPP_ASSERT(__e >= 0, ""); + _LIBCPP_ASSERT(__e <= 3528, ""); + return static_cast(((static_cast(__e) * 1217359) >> 19) + 1); +} + +// Returns floor(log_10(2^__e)). +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline uint32_t __log10Pow2(const int32_t __e) { + // The first value this approximation fails for is 2^1651 which is just greater than 10^297. + _LIBCPP_ASSERT(__e >= 0, ""); + _LIBCPP_ASSERT(__e <= 1650, ""); + return (static_cast(__e) * 78913) >> 18; +} + +// Returns floor(log_10(5^__e)). +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline uint32_t __log10Pow5(const int32_t __e) { + // The first value this approximation fails for is 5^2621 which is just greater than 10^1832. + _LIBCPP_ASSERT(__e >= 0, ""); + _LIBCPP_ASSERT(__e <= 2620, ""); + return (static_cast(__e) * 732923) >> 20; +} + +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline uint32_t __float_to_bits(const float __f) { + uint32_t __bits = 0; + _VSTD::memcpy(&__bits, &__f, sizeof(float)); + return __bits; +} + +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline uint64_t __double_to_bits(const double __d) { + uint64_t __bits = 0; + _VSTD::memcpy(&__bits, &__d, sizeof(double)); + return __bits; +} + +// ^^^^^^^^^^ DERIVED FROM common.h ^^^^^^^^^^ + +// vvvvvvvvvv DERIVED FROM d2s.h vvvvvvvvvv + +inline constexpr int __DOUBLE_MANTISSA_BITS = 52; +inline constexpr int __DOUBLE_EXPONENT_BITS = 11; +inline constexpr int __DOUBLE_BIAS = 1023; + +inline constexpr int __DOUBLE_POW5_INV_BITCOUNT = 122; +inline constexpr int __DOUBLE_POW5_BITCOUNT = 121; + +// ^^^^^^^^^^ DERIVED FROM d2s.h ^^^^^^^^^^ + +// vvvvvvvvvv DERIVED FROM d2s_intrinsics.h vvvvvvvvvv + +#ifdef _M_X64 +#define _LIBCPP_INTRINSIC128 1 +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline uint64_t __ryu_umul128(const uint64_t __a, const uint64_t __b, uint64_t* const __productHi) { + return _umul128(__a, __b, __productHi); +} + +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline uint64_t __ryu_shiftright128(const uint64_t __lo, const uint64_t __hi, const uint32_t __dist) { + // For the __shiftright128 intrinsic, the shift value is always + // modulo 64. + // In the current implementation of the double-precision version + // of Ryu, the shift value is always < 64. + // (The shift value is in the range [49, 58].) + // Check this here in case a future change requires larger shift + // values. In this case this function needs to be adjusted. + _LIBCPP_ASSERT(__dist < 64, ""); + return __shiftright128(__lo, __hi, static_cast(__dist)); +} + +// ^^^ intrinsics available ^^^ / vvv __int128 available vvv +#elif defined(__SIZEOF_INT128__) && ( \ + (defined(__clang__) && !defined(_WIN32)) || \ + (defined(__GNUC__) && !defined(__clang__) && !defined(__CUDACC__))) +#define _LIBCPP_INTRINSIC128 1 + // We have __uint128 support in clang or gcc +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline uint64_t __ryu_umul128(const uint64_t __a, const uint64_t __b, uint64_t* const __productHi) { + auto __temp = __a * (unsigned __int128)__b; + *__productHi = __temp >> 64; + return static_cast(__temp); +} + +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline uint64_t __ryu_shiftright128(const uint64_t __lo, const uint64_t __hi, const uint32_t __dist) { + // In the current implementation of the double-precision version + // of Ryu, the shift value is always < 64. + // (The shift value is in the range [49, 58].) + // Check this here in case a future change requires larger shift + // values. In this case this function needs to be adjusted. + _LIBCPP_ASSERT(__dist < 64, ""); + auto __temp = __lo | ((unsigned __int128)__hi << 64); + // For x64 128-bit shfits using the `shrd` instruction and two 64-bit + // registers, the shift value is modulo 64. Thus the `& 63` is free. + return static_cast(__temp >> (__dist & 63)); +} +#else // ^^^ __int128 available ^^^ / vvv intrinsics unavailable vvv + +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline _LIBCPP_ALWAYS_INLINE uint64_t __ryu_umul128(const uint64_t __a, const uint64_t __b, uint64_t* const __productHi) { + // TRANSITION, VSO-634761 + // The casts here help MSVC to avoid calls to the __allmul library function. + const uint32_t __aLo = static_cast(__a); + const uint32_t __aHi = static_cast(__a >> 32); + const uint32_t __bLo = static_cast(__b); + const uint32_t __bHi = static_cast(__b >> 32); + + const uint64_t __b00 = static_cast(__aLo) * __bLo; + const uint64_t __b01 = static_cast(__aLo) * __bHi; + const uint64_t __b10 = static_cast(__aHi) * __bLo; + const uint64_t __b11 = static_cast(__aHi) * __bHi; + + const uint32_t __b00Lo = static_cast(__b00); + const uint32_t __b00Hi = static_cast(__b00 >> 32); + + const uint64_t __mid1 = __b10 + __b00Hi; + const uint32_t __mid1Lo = static_cast(__mid1); + const uint32_t __mid1Hi = static_cast(__mid1 >> 32); + + const uint64_t __mid2 = __b01 + __mid1Lo; + const uint32_t __mid2Lo = static_cast(__mid2); + const uint32_t __mid2Hi = static_cast(__mid2 >> 32); + + const uint64_t __pHi = __b11 + __mid1Hi + __mid2Hi; + const uint64_t __pLo = (static_cast(__mid2Lo) << 32) | __b00Lo; + + *__productHi = __pHi; + return __pLo; +} + +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline uint64_t __ryu_shiftright128(const uint64_t __lo, const uint64_t __hi, const uint32_t __dist) { + // We don't need to handle the case __dist >= 64 here (see above). + _LIBCPP_ASSERT(__dist < 64, ""); +#ifdef _LIBCPP_64_BIT + _LIBCPP_ASSERT(__dist > 0, ""); + return (__hi << (64 - __dist)) | (__lo >> __dist); +#else // ^^^ 64-bit ^^^ / vvv 32-bit vvv + // Avoid a 64-bit shift by taking advantage of the range of shift values. + _LIBCPP_ASSERT(__dist >= 32, ""); + return (__hi << (64 - __dist)) | (static_cast(__lo >> 32) >> (__dist - 32)); +#endif // ^^^ 32-bit ^^^ +} + +#endif // ^^^ intrinsics unavailable ^^^ + +#ifndef _LIBCPP_64_BIT + +// Returns the high 64 bits of the 128-bit product of __a and __b. +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline uint64_t __umulh(const uint64_t __a, const uint64_t __b) { + // Reuse the __ryu_umul128 implementation. + // Optimizers will likely eliminate the instructions used to compute the + // low part of the product. + uint64_t __hi; + (void) __ryu_umul128(__a, __b, &__hi); + return __hi; +} + +// On 32-bit platforms, compilers typically generate calls to library +// functions for 64-bit divisions, even if the divisor is a constant. +// +// TRANSITION, LLVM-37932 +// +// The functions here perform division-by-constant using multiplications +// in the same way as 64-bit compilers would do. +// +// NB: +// The multipliers and shift values are the ones generated by clang x64 +// for expressions like x/5, x/10, etc. + +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline uint64_t __div5(const uint64_t __x) { + return __umulh(__x, 0xCCCCCCCCCCCCCCCDu) >> 2; +} + +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline uint64_t __div10(const uint64_t __x) { + return __umulh(__x, 0xCCCCCCCCCCCCCCCDu) >> 3; +} + +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline uint64_t __div100(const uint64_t __x) { + return __umulh(__x >> 2, 0x28F5C28F5C28F5C3u) >> 2; +} + +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline uint64_t __div1e8(const uint64_t __x) { + return __umulh(__x, 0xABCC77118461CEFDu) >> 26; +} + +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline uint64_t __div1e9(const uint64_t __x) { + return __umulh(__x >> 9, 0x44B82FA09B5A53u) >> 11; +} + +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline uint32_t __mod1e9(const uint64_t __x) { + // Avoid 64-bit math as much as possible. + // Returning static_cast(__x - 1000000000 * __div1e9(__x)) would + // perform 32x64-bit multiplication and 64-bit subtraction. + // __x and 1000000000 * __div1e9(__x) are guaranteed to differ by + // less than 10^9, so their highest 32 bits must be identical, + // so we can truncate both sides to uint32_t before subtracting. + // We can also simplify static_cast(1000000000 * __div1e9(__x)). + // We can truncate before multiplying instead of after, as multiplying + // the highest 32 bits of __div1e9(__x) can't affect the lowest 32 bits. + return static_cast(__x) - 1000000000 * static_cast(__div1e9(__x)); +} + +#else // ^^^ 32-bit ^^^ / vvv 64-bit vvv + +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline uint64_t __div5(const uint64_t __x) { + return __x / 5; +} + +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline uint64_t __div10(const uint64_t __x) { + return __x / 10; +} + +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline uint64_t __div100(const uint64_t __x) { + return __x / 100; +} + +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline uint64_t __div1e8(const uint64_t __x) { + return __x / 100000000; +} + +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline uint64_t __div1e9(const uint64_t __x) { + return __x / 1000000000; +} + +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline uint32_t __mod1e9(const uint64_t __x) { + return static_cast(__x - 1000000000 * __div1e9(__x)); +} + +#endif // ^^^ 64-bit ^^^ + +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline uint32_t __pow5Factor(uint64_t __value) { + uint32_t __count = 0; + for (;;) { + _LIBCPP_ASSERT(__value != 0, ""); + const uint64_t __q = __div5(__value); + const uint32_t __r = static_cast(__value) - 5 * static_cast(__q); + if (__r != 0) { + break; + } + __value = __q; + ++__count; + } + return __count; +} + +// Returns true if __value is divisible by 5^__p. +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline bool __multipleOfPowerOf5(const uint64_t __value, const uint32_t __p) { + // I tried a case distinction on __p, but there was no performance difference. + return __pow5Factor(__value) >= __p; +} + +// Returns true if __value is divisible by 2^__p. +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline bool __multipleOfPowerOf2(const uint64_t __value, const uint32_t __p) { + _LIBCPP_ASSERT(__value != 0, ""); + _LIBCPP_ASSERT(__p < 64, ""); + // __builtin_ctzll doesn't appear to be faster here. + return (__value & ((1ull << __p) - 1)) == 0; +} + +// ^^^^^^^^^^ DERIVED FROM d2s_intrinsics.h ^^^^^^^^^^ + +// vvvvvvvvvv DERIVED FROM d2fixed.c vvvvvvvvvv + +// +// +// +// TODO TRY TO MOVE TO INERNAL HEADER +// +// +// + +_LIBCPP_FUNC_VIS void __append_n_digits(const uint32_t __olength, uint32_t __digits, char* const __result); +_LIBCPP_FUNC_VIS void __append_nine_digits(uint32_t __digits, char* const __result); + +[[nodiscard]] _LIBCPP_FUNC_VIS to_chars_result __d2fixed_buffered_n(char* _First, char* const _Last, const double __d, const uint32_t __precision); +[[nodiscard]] _LIBCPP_FUNC_VIS to_chars_result __d2exp_buffered_n(char* _First, char* const _Last, const double __d, uint32_t __precision); + +// ^^^^^^^^^^ DERIVED FROM d2fixed.c ^^^^^^^^^^ + +// vvvvvvvvvv DERIVED FROM f2s.c vvvvvvvvvv + +[[nodiscard]] _LIBCPP_FUNC_VIS to_chars_result __f2s_buffered_n(char* const _First, char* const _Last, const float __f, const chars_format _Fmt); + + +// ^^^^^^^^^^ DERIVED FROM f2s.c ^^^^^^^^^^ + +// vvvvvvvvvv DERIVED FROM d2s.c vvvvvvvvvv + +[[nodiscard]] _LIBCPP_FUNC_VIS to_chars_result __d2s_buffered_n(char* const _First, char* const _Last, const double __f, const chars_format _Fmt); + +// ^^^^^^^^^^ DERIVED FROM d2s.c ^^^^^^^^^^ + +template +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI to_chars_result _Floating_to_chars_ryu( + char* const _First, char* const _Last, const _Floating _Value, const chars_format _Fmt) noexcept { + if constexpr (_IsSame<_Floating, float>::value) { + return __f2s_buffered_n(_First, _Last, _Value, _Fmt); + } else { + return __d2s_buffered_n(_First, _Last, _Value, _Fmt); + } +} + +template +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI to_chars_result _Floating_to_chars_scientific_precision( + char* const _First, char* const _Last, const _Floating _Value, int _Precision) noexcept { + + // C11 7.21.6.1 "The fprintf function"/5: + // "A negative precision argument is taken as if the precision were omitted." + // /8: "e,E [...] if the precision is missing, it is taken as 6" + + if (_Precision < 0) { + _Precision = 6; + } else if (_Precision < 1'000'000'000) { // Match ' to fix compilation with GCC in C++11 mode + // _Precision is ok. + } else { + // Avoid integer overflow. + // (This defensive check is slightly nonconformant; it can be carefully improved in the future.) + return {_Last, errc::value_too_large}; + } + + return __d2exp_buffered_n(_First, _Last, _Value, static_cast(_Precision)); +} + +template +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI to_chars_result _Floating_to_chars_fixed_precision( + char* const _First, char* const _Last, const _Floating _Value, int _Precision) noexcept { + + // C11 7.21.6.1 "The fprintf function"/5: + // "A negative precision argument is taken as if the precision were omitted." + // /8: "f,F [...] If the precision is missing, it is taken as 6" + + if (_Precision < 0) { + _Precision = 6; + } else if (_Precision < 1'000'000'000) { // Match ' to fix compilation with GCC in C++11 mode + // _Precision is ok. + } else { + // Avoid integer overflow. + // (This defensive check is slightly nonconformant; it can be carefully improved in the future.) + return {_Last, errc::value_too_large}; + } + + return __d2fixed_buffered_n(_First, _Last, _Value, static_cast(_Precision)); +} + +#undef _LIBCPP_64_BIT +#undef _LIBCPP_INTRINSIC128 + +#endif // _LIBCPP_STD_VER > 14 + +_LIBCPP_END_NAMESPACE_STD + +// clang-format on + +#endif // _LIBCPP___CHARCONV_RYU_H diff --git a/libcxx/include/__charconv/ryu_tables.h b/libcxx/include/__charconv/ryu_tables.h new file mode 100644 --- /dev/null +++ b/libcxx/include/__charconv/ryu_tables.h @@ -0,0 +1,75 @@ +// -*- C++ -*- +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +// Copyright (c) Microsoft Corporation. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + + +// Copyright 2018 Ulf Adams +// Copyright (c) Microsoft Corporation. All rights reserved. + +// Boost Software License - Version 1.0 - August 17th, 2003 + +// Permission is hereby granted, free of charge, to any person or organization +// obtaining a copy of the software and accompanying documentation covered by +// this license (the "Software") to use, reproduce, display, distribute, +// execute, and transmit the Software, and to prepare derivative works of the +// Software, and to permit third-parties to whom the Software is furnished to +// do so, all subject to the following: + +// The copyright notices in the Software and this entire statement, including +// the above license grant, this restriction and the following disclaimer, +// must be included in all copies of the Software, in whole or in part, and +// all derivative works of the Software, unless such copies or derivative +// works are solely in the form of machine-executable object code generated by +// a source language processor. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +// DEALINGS IN THE SOFTWARE. + +#ifndef _LIBCPP___CHARCONV_RYU_TABLES_H +#define _LIBCPP___CHARCONV_RYU_TABLES_H + +// Avoid formatting to keep the changes with the original code minimal. +// clang-format off + +#include <__config> +#include + +_LIBCPP_BEGIN_NAMESPACE_STD + +#if _LIBCPP_STD_VER > 14 + +// https://github.com/ulfjack/ryu +// See xcharconv_ryu.h for the exact commit. + +// vvvvvvvvvv DERIVED FROM digit_table.h vvvvvvvvvv + +// ^^^^^^^^^^ DERIVED FROM digit_table.h ^^^^^^^^^^ + +// vvvvvvvvvv DERIVED FROM d2s_full_table.h vvvvvvvvvv + +// ^^^^^^^^^^ DERIVED FROM d2s_full_table.h ^^^^^^^^^^ + +// vvvvvvvvvv DERIVED FROM d2fixed_full_table.h vvvvvvvvvv + +// ^^^^^^^^^^ DERIVED FROM d2fixed_full_table.h ^^^^^^^^^^ + +#endif // _LIBCPP_STD_VER > 14 + +_LIBCPP_END_NAMESPACE_STD + +// clang-format on + +#endif // _LIBCPP___CHARCONV_RYU_TABLES_H diff --git a/libcxx/include/charconv b/libcxx/include/charconv --- a/libcxx/include/charconv +++ b/libcxx/include/charconv @@ -74,17 +74,22 @@ */ #include <__availability> +#include <__algorithm/min.h> #include <__bits> #include <__charconv/chars_format.h> #include <__charconv/from_chars_result.h> #include <__charconv/to_chars_result.h> #include <__config> #include <__errc> +#include #include // for log2f #include #include // for _LIBCPP_UNREACHABLE #include +#include +#include #include +#include #include #include <__debug> @@ -594,6 +599,1126 @@ return __from_chars_integral(__first, __last, __value, __base); } +// Floating-point implementation starts here. +// Unlike the other parts of charconv this is only available in C++17 and +// newer. The original version of written by Microsoft was targetted at the +// standard. To keep both versions as similar as possible it's available in +// earlier versions. +#if _LIBCPP_STD_VER > 14 + +// Copyright (c) Microsoft Corporation. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +// This implementation is dedicated to the memory of Mary and Thavatchai. + +// Avoid formatting to keep the changes with the original code minimal. +// clang-format off + +namespace __itoa { +inline constexpr char _Charconv_digits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', + 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'}; +static_assert(_VSTD::size(_Charconv_digits) == 36); +} // __itoa + +_LIBCPP_END_NAMESPACE_STD +#include <__charconv/ryu.h> +_LIBCPP_BEGIN_NAMESPACE_STD + +// FUNCTION TEMPLATE _Bit_cast +template && is_trivially_copyable_v<_From>, int> = + 0> +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _To _Bit_cast(const _From& _From_obj) noexcept { + _To _To_obj; // assumes default-init + _VSTD::memcpy(_VSTD::addressof(_To_obj), _VSTD::addressof(_From_obj), sizeof(_To)); + return _To_obj; +} + +// vvvvvvvvvv DERIVED FROM corecrt_internal_fltintrn.h vvvvvvvvvv + +template +struct _Floating_type_traits; + +template <> +struct _Floating_type_traits { + static constexpr int32_t _Mantissa_bits = FLT_MANT_DIG; + static constexpr int32_t _Exponent_bits = sizeof(float) * CHAR_BIT - FLT_MANT_DIG; + + static constexpr int32_t _Maximum_binary_exponent = FLT_MAX_EXP - 1; + static constexpr int32_t _Minimum_binary_exponent = FLT_MIN_EXP - 1; + + static constexpr int32_t _Exponent_bias = 127; + + static constexpr int32_t _Sign_shift = _Exponent_bits + _Mantissa_bits - 1; + static constexpr int32_t _Exponent_shift = _Mantissa_bits - 1; + + using _Uint_type = uint32_t; + + static constexpr uint32_t _Exponent_mask = (1u << _Exponent_bits) - 1; + static constexpr uint32_t _Normal_mantissa_mask = (1u << _Mantissa_bits) - 1; + static constexpr uint32_t _Denormal_mantissa_mask = (1u << (_Mantissa_bits - 1)) - 1; + static constexpr uint32_t _Special_nan_mantissa_mask = 1u << (_Mantissa_bits - 2); + static constexpr uint32_t _Shifted_sign_mask = 1u << _Sign_shift; + static constexpr uint32_t _Shifted_exponent_mask = _Exponent_mask << _Exponent_shift; +}; + +template <> +struct _Floating_type_traits { + static constexpr int32_t _Mantissa_bits = DBL_MANT_DIG; + static constexpr int32_t _Exponent_bits = sizeof(double) * CHAR_BIT - DBL_MANT_DIG; + + static constexpr int32_t _Maximum_binary_exponent = DBL_MAX_EXP - 1; + static constexpr int32_t _Minimum_binary_exponent = DBL_MIN_EXP - 1; + + static constexpr int32_t _Exponent_bias = 1023; + + static constexpr int32_t _Sign_shift = _Exponent_bits + _Mantissa_bits - 1; + static constexpr int32_t _Exponent_shift = _Mantissa_bits - 1; + + using _Uint_type = uint64_t; + + static constexpr uint64_t _Exponent_mask = (1ULL << _Exponent_bits) - 1; + static constexpr uint64_t _Normal_mantissa_mask = (1ULL << _Mantissa_bits) - 1; + static constexpr uint64_t _Denormal_mantissa_mask = (1ULL << (_Mantissa_bits - 1)) - 1; + static constexpr uint64_t _Special_nan_mantissa_mask = 1ULL << (_Mantissa_bits - 2); + static constexpr uint64_t _Shifted_sign_mask = 1ULL << _Sign_shift; + static constexpr uint64_t _Shifted_exponent_mask = _Exponent_mask << _Exponent_shift; +}; + +// ^^^^^^^^^^ DERIVED FROM corecrt_internal_fltintrn.h ^^^^^^^^^^ + + + +// FUNCTION to_chars (FLOATING-POINT TO STRING) +template +[[nodiscard]] _LIBCPP_AVAILABILITY_TO_CHARS _LIBCPP_HIDE_FROM_ABI +to_chars_result _Floating_to_chars_hex_precision( + char* _First, char* const _Last, const _Floating _Value, int _Precision) noexcept { + + // * Determine the effective _Precision. + // * Later, we'll decrement _Precision when printing each hexit after the decimal point. + + // The hexits after the decimal point correspond to the explicitly stored fraction bits. + // float explicitly stores 23 fraction bits. 23 / 4 == 5.75, which is 6 hexits. + // double explicitly stores 52 fraction bits. 52 / 4 == 13, which is 13 hexits. + constexpr int _Full_precision = _IsSame<_Floating, float>::value ? 6 : 13; + constexpr int _Adjusted_explicit_bits = _Full_precision * 4; + + if (_Precision < 0) { + // C11 7.21.6.1 "The fprintf function"/5: "A negative precision argument is taken as if the precision were + // omitted." /8: "if the precision is missing and FLT_RADIX is a power of 2, then the precision is sufficient + // for an exact representation of the value" + _Precision = _Full_precision; + } + + // * Extract the _Ieee_mantissa and _Ieee_exponent. + using _Traits = _Floating_type_traits<_Floating>; + using _Uint_type = typename _Traits::_Uint_type; + + const _Uint_type _Uint_value = _Bit_cast<_Uint_type>(_Value); + const _Uint_type _Ieee_mantissa = _Uint_value & _Traits::_Denormal_mantissa_mask; + const int32_t _Ieee_exponent = static_cast(_Uint_value >> _Traits::_Exponent_shift); + + // * Prepare the _Adjusted_mantissa. This is aligned to hexit boundaries, + // * with the implicit bit restored (0 for zero values and subnormal values, 1 for normal values). + // * Also calculate the _Unbiased_exponent. This unifies the processing of zero, subnormal, and normal values. + _Uint_type _Adjusted_mantissa; + + if constexpr (_IsSame<_Floating, float>::value) { + _Adjusted_mantissa = _Ieee_mantissa << 1; // align to hexit boundary (23 isn't divisible by 4) + } else { + _Adjusted_mantissa = _Ieee_mantissa; // already aligned (52 is divisible by 4) + } + + int32_t _Unbiased_exponent; + + if (_Ieee_exponent == 0) { // zero or subnormal + // implicit bit is 0 + + if (_Ieee_mantissa == 0) { // zero + // C11 7.21.6.1 "The fprintf function"/8: "If the value is zero, the exponent is zero." + _Unbiased_exponent = 0; + } else { // subnormal + _Unbiased_exponent = 1 - _Traits::_Exponent_bias; + } + } else { // normal + _Adjusted_mantissa |= _Uint_type{1} << _Adjusted_explicit_bits; // implicit bit is 1 + _Unbiased_exponent = _Ieee_exponent - _Traits::_Exponent_bias; + } + + // _Unbiased_exponent is within [-126, 127] for float, [-1022, 1023] for double. + + // * Decompose _Unbiased_exponent into _Sign_character and _Absolute_exponent. + char _Sign_character; + uint32_t _Absolute_exponent; + + if (_Unbiased_exponent < 0) { + _Sign_character = '-'; + _Absolute_exponent = static_cast(-_Unbiased_exponent); + } else { + _Sign_character = '+'; + _Absolute_exponent = static_cast(_Unbiased_exponent); + } + + // _Absolute_exponent is within [0, 127] for float, [0, 1023] for double. + + // * Perform a single bounds check. + { + int32_t _Exponent_length; + + if (_Absolute_exponent < 10) { + _Exponent_length = 1; + } else if (_Absolute_exponent < 100) { + _Exponent_length = 2; + } else if constexpr (_IsSame<_Floating, float>::value) { + _Exponent_length = 3; + } else if (_Absolute_exponent < 1000) { + _Exponent_length = 3; + } else { + _Exponent_length = 4; + } + + // _Precision might be enormous; avoid integer overflow by testing it separately. + ptrdiff_t _Buffer_size = _Last - _First; + + if (_Buffer_size < _Precision) { + return {_Last, errc::value_too_large}; + } + + _Buffer_size -= _Precision; + + const int32_t _Length_excluding_precision = 1 // leading hexit + + static_cast(_Precision > 0) // possible decimal point + // excluding `+ _Precision`, hexits after decimal point + + 2 // "p+" or "p-" + + _Exponent_length; // exponent + + if (_Buffer_size < _Length_excluding_precision) { + return {_Last, errc::value_too_large}; + } + } + + // * Perform rounding when we've been asked to omit hexits. + if (_Precision < _Full_precision) { + // _Precision is within [0, 5] for float, [0, 12] for double. + + // _Dropped_bits is within [4, 24] for float, [4, 52] for double. + const int _Dropped_bits = (_Full_precision - _Precision) * 4; + + // Perform rounding by adding an appropriately-shifted bit. + + // This can propagate carries all the way into the leading hexit. Examples: + // "0.ff9" rounded to a precision of 2 is "1.00". + // "1.ff9" rounded to a precision of 2 is "2.00". + + // Note that the leading hexit participates in the rounding decision. Examples: + // "0.8" rounded to a precision of 0 is "0". + // "1.8" rounded to a precision of 0 is "2". + + // Reference implementation with suboptimal codegen: + // bool _Should_round_up(bool _Lsb_bit, bool _Round_bit, bool _Has_tail_bits) { + // // If there are no insignificant set bits, the value is exactly-representable and should not be rounded. + // // + // // If there are insignificant set bits, we need to round according to round_to_nearest. + // // We need to handle two cases: we round up if either [1] the value is slightly greater + // // than the midpoint between two exactly-representable values or [2] the value is exactly the midpoint + // // between two exactly-representable values and the greater of the two is even (this is "round-to-even"). + // return _Round_bit && (_Has_tail_bits || _Lsb_bit); + //} + // const bool _Lsb_bit = (_Adjusted_mantissa & (_Uint_type{1} << _Dropped_bits)) != 0; + // const bool _Round_bit = (_Adjusted_mantissa & (_Uint_type{1} << (_Dropped_bits - 1))) != 0; + // const bool _Has_tail_bits = (_Adjusted_mantissa & ((_Uint_type{1} << (_Dropped_bits - 1)) - 1)) != 0; + // const bool _Should_round = _Should_round_up(_Lsb_bit, _Round_bit, _Has_tail_bits); + // _Adjusted_mantissa += _Uint_type{_Should_round} << _Dropped_bits; + + // Example for optimized implementation: Let _Dropped_bits be 8. + // Bit index: ...[8]76543210 + // _Adjusted_mantissa: ...[L]RTTTTTTT (not depicting known details, like hexit alignment) + // By focusing on the bit at index _Dropped_bits, we can avoid unnecessary branching and shifting. + + // Bit index: ...[8]76543210 + // _Lsb_bit: ...[L]RTTTTTTT + const _Uint_type _Lsb_bit = _Adjusted_mantissa; + + // Bit index: ...9[8]76543210 + // _Round_bit: ...L[R]TTTTTTT0 + const _Uint_type _Round_bit = _Adjusted_mantissa << 1; + + // We can detect (without branching) whether any of the trailing bits are set. + // Due to _Should_round below, this computation will be used if and only if R is 1, so we can assume that here. + // Bit index: ...9[8]76543210 + // _Round_bit: ...L[1]TTTTTTT0 + // _Has_tail_bits: ....[H]........ + + // If all of the trailing bits T are 0, then `_Round_bit - 1` will produce 0 for H (due to R being 1). + // If any of the trailing bits T are 1, then `_Round_bit - 1` will produce 1 for H (due to R being 1). + const _Uint_type _Has_tail_bits = _Round_bit - 1; + + // Finally, we can use _Should_round_up() logic with bitwise-AND and bitwise-OR, + // selecting just the bit at index _Dropped_bits. This is the appropriately-shifted bit that we want. + const _Uint_type _Should_round = _Round_bit & (_Has_tail_bits | _Lsb_bit) & (_Uint_type{1} << _Dropped_bits); + + // This rounding technique is dedicated to the memory of Peppermint. =^..^= + _Adjusted_mantissa += _Should_round; + } + + // * Print the leading hexit, then mask it away. + { + const uint32_t _Nibble = static_cast(_Adjusted_mantissa >> _Adjusted_explicit_bits); + _LIBCPP_ASSERT(_Nibble < 3, ""); + const char _Leading_hexit = static_cast('0' + _Nibble); + + *_First++ = _Leading_hexit; + + constexpr _Uint_type _Mask = (_Uint_type{1} << _Adjusted_explicit_bits) - 1; + _Adjusted_mantissa &= _Mask; + } + + // * Print the decimal point and trailing hexits. + + // C11 7.21.6.1 "The fprintf function"/8: + // "if the precision is zero and the # flag is not specified, no decimal-point character appears." + if (_Precision > 0) { + *_First++ = '.'; + + int32_t _Number_of_bits_remaining = _Adjusted_explicit_bits; // 24 for float, 52 for double + + for (;;) { + _LIBCPP_ASSERT(_Number_of_bits_remaining >= 4, ""); + _LIBCPP_ASSERT(_Number_of_bits_remaining % 4 == 0, ""); + _Number_of_bits_remaining -= 4; + + const uint32_t _Nibble = static_cast(_Adjusted_mantissa >> _Number_of_bits_remaining); + _LIBCPP_ASSERT(_Nibble < 16, ""); + const char _Hexit = __itoa::_Charconv_digits[_Nibble]; + + *_First++ = _Hexit; + + // _Precision is the number of hexits that still need to be printed. + --_Precision; + if (_Precision == 0) { + break; // We're completely done with this phase. + } + // Otherwise, we need to keep printing hexits. + + if (_Number_of_bits_remaining == 0) { + // We've finished printing _Adjusted_mantissa, so all remaining hexits are '0'. + _VSTD::memset(_First, '0', static_cast(_Precision)); + _First += _Precision; + break; + } + + // Mask away the hexit that we just printed, then keep looping. + // (We skip this when breaking out of the loop above, because _Adjusted_mantissa isn't used later.) + const _Uint_type _Mask = (_Uint_type{1} << _Number_of_bits_remaining) - 1; + _Adjusted_mantissa &= _Mask; + } + } + + // * Print the exponent. + + // C11 7.21.6.1 "The fprintf function"/8: "The exponent always contains at least one digit, and only as many more + // digits as necessary to represent the decimal exponent of 2." + + // Performance note: We should take advantage of the known ranges of possible exponents. + + *_First++ = 'p'; + *_First++ = _Sign_character; + + // We've already printed '-' if necessary, so uint32_t _Absolute_exponent avoids testing that again. + return _VSTD::to_chars(_First, _Last, _Absolute_exponent); +} + +template +[[nodiscard]] _LIBCPP_AVAILABILITY_TO_CHARS _LIBCPP_HIDE_FROM_ABI +to_chars_result _Floating_to_chars_hex_shortest( + char* _First, char* const _Last, const _Floating _Value) noexcept { + + // This prints "1.728p+0" instead of "2.e5p-1". + // This prints "0.000002p-126" instead of "1p-149" for float. + // This prints "0.0000000000001p-1022" instead of "1p-1074" for double. + // This prioritizes being consistent with printf's de facto behavior (and hex-precision's behavior) + // over minimizing the number of characters printed. + + using _Traits = _Floating_type_traits<_Floating>; + using _Uint_type = typename _Traits::_Uint_type; + + const _Uint_type _Uint_value = _Bit_cast<_Uint_type>(_Value); + + if (_Uint_value == 0) { // zero detected; write "0p+0" and return + // C11 7.21.6.1 "The fprintf function"/8: "If the value is zero, the exponent is zero." + // Special-casing zero is necessary because of the exponent. + const char* const _Str = "0p+0"; + const size_t _Len = 4; + + if (_Last - _First < static_cast(_Len)) { + return {_Last, errc::value_too_large}; + } + + _VSTD::memcpy(_First, _Str, _Len); + + return {_First + _Len, errc{}}; + } + + const _Uint_type _Ieee_mantissa = _Uint_value & _Traits::_Denormal_mantissa_mask; + const int32_t _Ieee_exponent = static_cast(_Uint_value >> _Traits::_Exponent_shift); + + char _Leading_hexit; // implicit bit + int32_t _Unbiased_exponent; + + if (_Ieee_exponent == 0) { // subnormal + _Leading_hexit = '0'; + _Unbiased_exponent = 1 - _Traits::_Exponent_bias; + } else { // normal + _Leading_hexit = '1'; + _Unbiased_exponent = _Ieee_exponent - _Traits::_Exponent_bias; + } + + // Performance note: Consider avoiding per-character bounds checking when there's plenty of space. + + if (_First == _Last) { + return {_Last, errc::value_too_large}; + } + + *_First++ = _Leading_hexit; + + if (_Ieee_mantissa == 0) { + // The fraction bits are all 0. Trim them away, including the decimal point. + } else { + if (_First == _Last) { + return {_Last, errc::value_too_large}; + } + + *_First++ = '.'; + + // The hexits after the decimal point correspond to the explicitly stored fraction bits. + // float explicitly stores 23 fraction bits. 23 / 4 == 5.75, so we'll print at most 6 hexits. + // double explicitly stores 52 fraction bits. 52 / 4 == 13, so we'll print at most 13 hexits. + _Uint_type _Adjusted_mantissa; + int32_t _Number_of_bits_remaining; + + if constexpr (_IsSame<_Floating, float>::value) { + _Adjusted_mantissa = _Ieee_mantissa << 1; // align to hexit boundary (23 isn't divisible by 4) + _Number_of_bits_remaining = 24; // 23 fraction bits + 1 alignment bit + } else { + _Adjusted_mantissa = _Ieee_mantissa; // already aligned (52 is divisible by 4) + _Number_of_bits_remaining = 52; // 52 fraction bits + } + + // do-while: The condition _Adjusted_mantissa != 0 is initially true - we have nonzero fraction bits and we've + // printed the decimal point. Each iteration, we print a hexit, mask it away, and keep looping if we still have + // nonzero fraction bits. If there would be trailing '0' hexits, this trims them. If there wouldn't be trailing + // '0' hexits, the same condition works (as we print the final hexit and mask it away); we don't need to test + // _Number_of_bits_remaining. + do { + _LIBCPP_ASSERT(_Number_of_bits_remaining >= 4, ""); + _LIBCPP_ASSERT(_Number_of_bits_remaining % 4 == 0, ""); + _Number_of_bits_remaining -= 4; + + const uint32_t _Nibble = static_cast(_Adjusted_mantissa >> _Number_of_bits_remaining); + _LIBCPP_ASSERT(_Nibble < 16, ""); + const char _Hexit = __itoa::_Charconv_digits[_Nibble]; + + if (_First == _Last) { + return {_Last, errc::value_too_large}; + } + + *_First++ = _Hexit; + + const _Uint_type _Mask = (_Uint_type{1} << _Number_of_bits_remaining) - 1; + _Adjusted_mantissa &= _Mask; + + } while (_Adjusted_mantissa != 0); + } + + // C11 7.21.6.1 "The fprintf function"/8: "The exponent always contains at least one digit, and only as many more + // digits as necessary to represent the decimal exponent of 2." + + // Performance note: We should take advantage of the known ranges of possible exponents. + + // float: _Unbiased_exponent is within [-126, 127]. + // double: _Unbiased_exponent is within [-1022, 1023]. + + if (_Last - _First < 2) { + return {_Last, errc::value_too_large}; + } + + *_First++ = 'p'; + + if (_Unbiased_exponent < 0) { + *_First++ = '-'; + _Unbiased_exponent = -_Unbiased_exponent; + } else { + *_First++ = '+'; + } + + // We've already printed '-' if necessary, so static_cast avoids testing that again. + return _VSTD::to_chars(_First, _Last, static_cast(_Unbiased_exponent)); +} + +// For general precision, we can use lookup tables to avoid performing trial formatting. + +// For a simple example, imagine counting the number of digits D in an integer, and needing to know +// whether D is less than 3, equal to 3/4/5/6, or greater than 6. We could use a lookup table: +// D | Largest integer with D digits +// 2 | 99 +// 3 | 999 +// 4 | 9'999 +// 5 | 99'999 +// 6 | 999'999 +// 7 | table end +// Looking up an integer in this table with lower_bound() will work: +// * Too-small integers, like 7, 70, and 99, will cause lower_bound() to return the D == 2 row. (If all we care +// about is whether D is less than 3, then it's okay to smash the D == 1 and D == 2 cases together.) +// * Integers in [100, 999] will cause lower_bound() to return the D == 3 row, and so forth. +// * Too-large integers, like 1'000'000 and above, will cause lower_bound() to return the end of the table. If we +// compute D from that index, this will be considered D == 7, which will activate any "greater than 6" logic. + +// Floating-point is slightly more complicated. + +// The ordinary lookup tables are for X within [-5, 38] for float, and [-5, 308] for double. +// (-5 absorbs too-negative exponents, outside the P > X >= -4 criterion. 38 and 308 are the maximum exponents.) +// Due to the P > X condition, we can use a subset of the table for X within [-5, P - 1], suitably clamped. + +// When P is small, rounding can affect X. For example: +// For P == 1, the largest double with X == 0 is: 9.4999999999999982236431605997495353221893310546875 +// For P == 2, the largest double with X == 0 is: 9.949999999999999289457264239899814128875732421875 +// For P == 3, the largest double with X == 0 is: 9.9949999999999992184029906638897955417633056640625 + +// Exponent adjustment is a concern for P within [1, 7] for float, and [1, 15] for double (determined via +// brute force). While larger values of P still perform rounding, they can't trigger exponent adjustment. +// This is because only values with repeated '9' digits can undergo exponent adjustment during rounding, +// and floating-point granularity limits the number of consecutive '9' digits that can appear. + +// So, we need special lookup tables for small values of P. +// These tables have varying lengths due to the P > X >= -4 criterion. For example: +// For P == 1, need table entries for X: -5, -4, -3, -2, -1, 0 +// For P == 2, need table entries for X: -5, -4, -3, -2, -1, 0, 1 +// For P == 3, need table entries for X: -5, -4, -3, -2, -1, 0, 1, 2 +// For P == 4, need table entries for X: -5, -4, -3, -2, -1, 0, 1, 2, 3 + +// We can concatenate these tables for compact storage, using triangular numbers to access them. +// The table for P begins at index (P - 1) * (P + 10) / 2 with length P + 5. + +// For both the ordinary and special lookup tables, after an index I is returned by lower_bound(), X is I - 5. + +// We need to special-case the floating-point value 0.0, which is considered to have X == 0. +// Otherwise, the lookup tables would consider it to have a highly negative X. + +// Finally, because we're working with positive floating-point values, +// representation comparisons behave identically to floating-point comparisons. + +// The following code generated the lookup tables for the scientific exponent X. Don't remove this code. +#if 0 +// cl /EHsc /nologo /W4 /MT /O2 /std:c++17 generate_tables.cpp && generate_tables + +#include +#include +#include // Should be charconv, work-around for dependency scanner. +#include +#include +#include +#include +#include +#include +#include +#include +using namespace std; + +template +[[nodiscard]] UInt uint_partition_point(UInt first, const UInt last, Pred pred) { + // Find the beginning of the false partition in [first, last). + // [first, last) is partitioned when all of the true values occur before all of the false values. + + static_assert(is_unsigned_v); + assert(first <= last); + + for (UInt n = last - first; n > 0;) { + const UInt n2 = n / 2; + const UInt mid = first + n2; + + if (pred(mid)) { + first = mid + 1; + n = n - n2 - 1; + } else { + n = n2; + } + } + + return first; +} + +template +[[nodiscard]] int scientific_exponent_X(const int P, const Floating flt) { + char buf[400]; // more than enough + + // C11 7.21.6.1 "The fprintf function"/8 performs trial formatting with scientific precision P - 1. + const auto to_result = to_chars(buf, end(buf), flt, chars_format::scientific, P - 1); + assert(to_result.ec == errc{}); + + const char* exp_ptr = find(buf, to_result.ptr, 'e'); + assert(exp_ptr != to_result.ptr); + + ++exp_ptr; // advance past 'e' + + if (*exp_ptr == '+') { + ++exp_ptr; // advance past '+' which from_chars() won't parse + } + + int X; + const auto from_result = from_chars(exp_ptr, to_result.ptr, X); + assert(from_result.ec == errc{}); + return X; +} + +template +void print_table(const vector& v, const char* const name) { + constexpr const char* UIntName = _IsSame::value ? "uint32_t" : "uint64_t"; + + printf("static constexpr %s %s[%zu] = {\n", UIntName, name, v.size()); + + for (const auto& val : v) { + if constexpr (_IsSame::value) { + printf("0x%08Xu,\n", val); + } else { + printf("0x%016llXu,\n", val); + } + } + + printf("};\n"); +} + +enum class Mode { Tables, Tests }; + +template +void generate_tables(const Mode mode) { + using Limits = numeric_limits; + using UInt = conditional_t<_IsSame::value, uint32_t, uint64_t>; + + map> P_X_LargestValWithX; + + constexpr int MaxP = Limits::max_exponent10 + 1; // MaxP performs no rounding during trial formatting + + for (int P = 1; P <= MaxP; ++P) { + for (int X = -5; X < P; ++X) { + constexpr Floating first = static_cast(9e-5); // well below 9.5e-5, otherwise arbitrary + constexpr Floating last = Limits::infinity(); // one bit above Limits::max() + + const UInt val_beyond_X = uint_partition_point(reinterpret_cast(first), + reinterpret_cast(last), + [P, X](const UInt u) { return scientific_exponent_X(P, reinterpret_cast(u)) <= X; }); + + P_X_LargestValWithX[P][X] = val_beyond_X - 1; + } + } + + constexpr const char* FloatingName = _IsSame::value ? "float" : "double"; + + constexpr int MaxSpecialP = _IsSame::value ? 7 : 15; // MaxSpecialP is affected by exponent adjustment + + if (mode == Mode::Tables) { + printf("template <>\n"); + printf("struct _General_precision_tables<%s> {\n", FloatingName); + + printf("static constexpr int _Max_special_P = %d;\n", MaxSpecialP); + + vector special; + + for (int P = 1; P <= MaxSpecialP; ++P) { + for (int X = -5; X < P; ++X) { + const UInt val = P_X_LargestValWithX[P][X]; + special.push_back(val); + } + } + + print_table(special, "_Special_X_table"); + + for (int P = MaxSpecialP + 1; P < MaxP; ++P) { + for (int X = -5; X < P; ++X) { + const UInt val = P_X_LargestValWithX[P][X]; + assert(val == P_X_LargestValWithX[MaxP][X]); + } + } + + printf("static constexpr int _Max_P = %d;\n", MaxP); + + vector ordinary; + + for (int X = -5; X < MaxP; ++X) { + const UInt val = P_X_LargestValWithX[MaxP][X]; + ordinary.push_back(val); + } + + print_table(ordinary, "_Ordinary_X_table"); + + printf("};\n"); + } else { + printf("==========\n"); + printf("Test cases for %s:\n", FloatingName); + + constexpr int Hexits = _IsSame::value ? 6 : 13; + constexpr const char* Suffix = _IsSame::value ? "f" : ""; + + for (int P = 1; P <= MaxP; ++P) { + for (int X = -5; X < P; ++X) { + if (P <= MaxSpecialP || P == 25 || P == MaxP || X == P - 1) { + const UInt val1 = P_X_LargestValWithX[P][X]; + const Floating f1 = reinterpret_cast(val1); + const UInt val2 = val1 + 1; + const Floating f2 = reinterpret_cast(val2); + + printf("{%.*a%s, chars_format::general, %d, \"%.*g\"},\n", Hexits, f1, Suffix, P, P, f1); + if (isfinite(f2)) { + printf("{%.*a%s, chars_format::general, %d, \"%.*g\"},\n", Hexits, f2, Suffix, P, P, f2); + } + } + } + } + } +} + +int main() { + printf("template \n"); + printf("struct _General_precision_tables;\n"); + generate_tables(Mode::Tables); + generate_tables(Mode::Tables); + generate_tables(Mode::Tests); + generate_tables(Mode::Tests); +} +#endif // 0 + +template +struct _General_precision_tables; + +template <> +struct _General_precision_tables { + static constexpr int _Max_special_P = 7; + + static constexpr uint32_t _Special_X_table[63] = {0x38C73ABCu, 0x3A79096Bu, 0x3C1BA5E3u, 0x3DC28F5Cu, 0x3F733333u, + 0x4117FFFFu, 0x38D0AAA7u, 0x3A826AA8u, 0x3C230553u, 0x3DCBC6A7u, 0x3F7EB851u, 0x411F3333u, 0x42C6FFFFu, + 0x38D19C3Fu, 0x3A8301A7u, 0x3C23C211u, 0x3DCCB295u, 0x3F7FDF3Bu, 0x411FEB85u, 0x42C7E666u, 0x4479DFFFu, + 0x38D1B468u, 0x3A8310C1u, 0x3C23D4F1u, 0x3DCCCA2Du, 0x3F7FFCB9u, 0x411FFDF3u, 0x42C7FD70u, 0x4479FCCCu, + 0x461C3DFFu, 0x38D1B6D2u, 0x3A831243u, 0x3C23D6D4u, 0x3DCCCC89u, 0x3F7FFFACu, 0x411FFFCBu, 0x42C7FFBEu, + 0x4479FFAEu, 0x461C3FCCu, 0x47C34FBFu, 0x38D1B710u, 0x3A83126Au, 0x3C23D704u, 0x3DCCCCC6u, 0x3F7FFFF7u, + 0x411FFFFAu, 0x42C7FFF9u, 0x4479FFF7u, 0x461C3FFAu, 0x47C34FF9u, 0x497423F7u, 0x38D1B716u, 0x3A83126Eu, + 0x3C23D709u, 0x3DCCCCCCu, 0x3F7FFFFFu, 0x411FFFFFu, 0x42C7FFFFu, 0x4479FFFFu, 0x461C3FFFu, 0x47C34FFFu, + 0x497423FFu, 0x4B18967Fu}; + + static constexpr int _Max_P = 39; + + static constexpr uint32_t _Ordinary_X_table[44] = {0x38D1B717u, 0x3A83126Eu, 0x3C23D70Au, 0x3DCCCCCCu, 0x3F7FFFFFu, + 0x411FFFFFu, 0x42C7FFFFu, 0x4479FFFFu, 0x461C3FFFu, 0x47C34FFFu, 0x497423FFu, 0x4B18967Fu, 0x4CBEBC1Fu, + 0x4E6E6B27u, 0x501502F8u, 0x51BA43B7u, 0x5368D4A5u, 0x551184E7u, 0x56B5E620u, 0x58635FA9u, 0x5A0E1BC9u, + 0x5BB1A2BCu, 0x5D5E0B6Bu, 0x5F0AC723u, 0x60AD78EBu, 0x6258D726u, 0x64078678u, 0x65A96816u, 0x6753C21Bu, + 0x69045951u, 0x6AA56FA5u, 0x6C4ECB8Fu, 0x6E013F39u, 0x6FA18F07u, 0x7149F2C9u, 0x72FC6F7Cu, 0x749DC5ADu, + 0x76453719u, 0x77F684DFu, 0x799A130Bu, 0x7B4097CEu, 0x7CF0BDC2u, 0x7E967699u, 0x7F7FFFFFu}; +}; + +template <> +struct _General_precision_tables { + static constexpr int _Max_special_P = 15; + + static constexpr uint64_t _Special_X_table[195] = {0x3F18E757928E0C9Du, 0x3F4F212D77318FC5u, 0x3F8374BC6A7EF9DBu, + 0x3FB851EB851EB851u, 0x3FEE666666666666u, 0x4022FFFFFFFFFFFFu, 0x3F1A1554FBDAD751u, 0x3F504D551D68C692u, + 0x3F8460AA64C2F837u, 0x3FB978D4FDF3B645u, 0x3FEFD70A3D70A3D7u, 0x4023E66666666666u, 0x4058DFFFFFFFFFFFu, + 0x3F1A3387ECC8EB96u, 0x3F506034F3FD933Eu, 0x3F84784230FCF80Du, 0x3FB99652BD3C3611u, 0x3FEFFBE76C8B4395u, + 0x4023FD70A3D70A3Du, 0x4058FCCCCCCCCCCCu, 0x408F3BFFFFFFFFFFu, 0x3F1A368D04E0BA6Au, 0x3F506218230C7482u, + 0x3F847A9E2BCF91A3u, 0x3FB99945B6C3760Bu, 0x3FEFFF972474538Eu, 0x4023FFBE76C8B439u, 0x4058FFAE147AE147u, + 0x408F3F9999999999u, 0x40C387BFFFFFFFFFu, 0x3F1A36DA54164F19u, 0x3F506248748DF16Fu, 0x3F847ADA91B16DCBu, + 0x3FB99991361DC93Eu, 0x3FEFFFF583A53B8Eu, 0x4023FFF972474538u, 0x4058FFF7CED91687u, 0x408F3FF5C28F5C28u, + 0x40C387F999999999u, 0x40F869F7FFFFFFFFu, 0x3F1A36E20F35445Du, 0x3F50624D49814ABAu, 0x3F847AE09BE19D69u, + 0x3FB99998C2DA04C3u, 0x3FEFFFFEF39085F4u, 0x4023FFFF583A53B8u, 0x4058FFFF2E48E8A7u, 0x408F3FFEF9DB22D0u, + 0x40C387FF5C28F5C2u, 0x40F869FF33333333u, 0x412E847EFFFFFFFFu, 0x3F1A36E2D51EC34Bu, 0x3F50624DC5333A0Eu, + 0x3F847AE136800892u, 0x3FB9999984200AB7u, 0x3FEFFFFFE5280D65u, 0x4023FFFFEF39085Fu, 0x4058FFFFEB074A77u, + 0x408F3FFFE5C91D14u, 0x40C387FFEF9DB22Du, 0x40F869FFEB851EB8u, 0x412E847FE6666666u, 0x416312CFEFFFFFFFu, + 0x3F1A36E2E8E94FFCu, 0x3F50624DD191D1FDu, 0x3F847AE145F6467Du, 0x3FB999999773D81Cu, 0x3FEFFFFFFD50CE23u, + 0x4023FFFFFE5280D6u, 0x4058FFFFFDE7210Bu, 0x408F3FFFFD60E94Eu, 0x40C387FFFE5C91D1u, 0x40F869FFFDF3B645u, + 0x412E847FFD70A3D7u, 0x416312CFFE666666u, 0x4197D783FDFFFFFFu, 0x3F1A36E2EAE3F7A7u, 0x3F50624DD2CE7AC8u, + 0x3F847AE14782197Bu, 0x3FB9999999629FD9u, 0x3FEFFFFFFFBB47D0u, 0x4023FFFFFFD50CE2u, 0x4058FFFFFFCA501Au, + 0x408F3FFFFFBCE421u, 0x40C387FFFFD60E94u, 0x40F869FFFFCB923Au, 0x412E847FFFBE76C8u, 0x416312CFFFD70A3Du, + 0x4197D783FFCCCCCCu, 0x41CDCD64FFBFFFFFu, 0x3F1A36E2EB16A205u, 0x3F50624DD2EE2543u, 0x3F847AE147A9AE94u, + 0x3FB9999999941A39u, 0x3FEFFFFFFFF920C8u, 0x4023FFFFFFFBB47Du, 0x4058FFFFFFFAA19Cu, 0x408F3FFFFFF94A03u, + 0x40C387FFFFFBCE42u, 0x40F869FFFFFAC1D2u, 0x412E847FFFF97247u, 0x416312CFFFFBE76Cu, 0x4197D783FFFAE147u, + 0x41CDCD64FFF99999u, 0x4202A05F1FFBFFFFu, 0x3F1A36E2EB1BB30Fu, 0x3F50624DD2F14FE9u, 0x3F847AE147ADA3E3u, + 0x3FB9999999990CDCu, 0x3FEFFFFFFFFF5014u, 0x4023FFFFFFFF920Cu, 0x4058FFFFFFFF768Fu, 0x408F3FFFFFFF5433u, + 0x40C387FFFFFF94A0u, 0x40F869FFFFFF79C8u, 0x412E847FFFFF583Au, 0x416312CFFFFF9724u, 0x4197D783FFFF7CEDu, + 0x41CDCD64FFFF5C28u, 0x4202A05F1FFF9999u, 0x42374876E7FF7FFFu, 0x3F1A36E2EB1C34C3u, 0x3F50624DD2F1A0FAu, + 0x3F847AE147AE0938u, 0x3FB9999999998B86u, 0x3FEFFFFFFFFFEE68u, 0x4023FFFFFFFFF501u, 0x4058FFFFFFFFF241u, + 0x408F3FFFFFFFEED1u, 0x40C387FFFFFFF543u, 0x40F869FFFFFFF294u, 0x412E847FFFFFEF39u, 0x416312CFFFFFF583u, + 0x4197D783FFFFF2E4u, 0x41CDCD64FFFFEF9Du, 0x4202A05F1FFFF5C2u, 0x42374876E7FFF333u, 0x426D1A94A1FFEFFFu, + 0x3F1A36E2EB1C41BBu, 0x3F50624DD2F1A915u, 0x3F847AE147AE135Au, 0x3FB9999999999831u, 0x3FEFFFFFFFFFFE3Du, + 0x4023FFFFFFFFFEE6u, 0x4058FFFFFFFFFEA0u, 0x408F3FFFFFFFFE48u, 0x40C387FFFFFFFEEDu, 0x40F869FFFFFFFEA8u, + 0x412E847FFFFFFE52u, 0x416312CFFFFFFEF3u, 0x4197D783FFFFFEB0u, 0x41CDCD64FFFFFE5Cu, 0x4202A05F1FFFFEF9u, + 0x42374876E7FFFEB8u, 0x426D1A94A1FFFE66u, 0x42A2309CE53FFEFFu, 0x3F1A36E2EB1C4307u, 0x3F50624DD2F1A9E4u, + 0x3F847AE147AE145Eu, 0x3FB9999999999975u, 0x3FEFFFFFFFFFFFD2u, 0x4023FFFFFFFFFFE3u, 0x4058FFFFFFFFFFDCu, + 0x408F3FFFFFFFFFD4u, 0x40C387FFFFFFFFE4u, 0x40F869FFFFFFFFDDu, 0x412E847FFFFFFFD5u, 0x416312CFFFFFFFE5u, + 0x4197D783FFFFFFDEu, 0x41CDCD64FFFFFFD6u, 0x4202A05F1FFFFFE5u, 0x42374876E7FFFFDFu, 0x426D1A94A1FFFFD7u, + 0x42A2309CE53FFFE6u, 0x42D6BCC41E8FFFDFu, 0x3F1A36E2EB1C4328u, 0x3F50624DD2F1A9F9u, 0x3F847AE147AE1477u, + 0x3FB9999999999995u, 0x3FEFFFFFFFFFFFFBu, 0x4023FFFFFFFFFFFDu, 0x4058FFFFFFFFFFFCu, 0x408F3FFFFFFFFFFBu, + 0x40C387FFFFFFFFFDu, 0x40F869FFFFFFFFFCu, 0x412E847FFFFFFFFBu, 0x416312CFFFFFFFFDu, 0x4197D783FFFFFFFCu, + 0x41CDCD64FFFFFFFBu, 0x4202A05F1FFFFFFDu, 0x42374876E7FFFFFCu, 0x426D1A94A1FFFFFBu, 0x42A2309CE53FFFFDu, + 0x42D6BCC41E8FFFFCu, 0x430C6BF52633FFFBu}; + + static constexpr int _Max_P = 309; + + static constexpr uint64_t _Ordinary_X_table[314] = {0x3F1A36E2EB1C432Cu, 0x3F50624DD2F1A9FBu, 0x3F847AE147AE147Au, + 0x3FB9999999999999u, 0x3FEFFFFFFFFFFFFFu, 0x4023FFFFFFFFFFFFu, 0x4058FFFFFFFFFFFFu, 0x408F3FFFFFFFFFFFu, + 0x40C387FFFFFFFFFFu, 0x40F869FFFFFFFFFFu, 0x412E847FFFFFFFFFu, 0x416312CFFFFFFFFFu, 0x4197D783FFFFFFFFu, + 0x41CDCD64FFFFFFFFu, 0x4202A05F1FFFFFFFu, 0x42374876E7FFFFFFu, 0x426D1A94A1FFFFFFu, 0x42A2309CE53FFFFFu, + 0x42D6BCC41E8FFFFFu, 0x430C6BF52633FFFFu, 0x4341C37937E07FFFu, 0x4376345785D89FFFu, 0x43ABC16D674EC7FFu, + 0x43E158E460913CFFu, 0x4415AF1D78B58C3Fu, 0x444B1AE4D6E2EF4Fu, 0x4480F0CF064DD591u, 0x44B52D02C7E14AF6u, + 0x44EA784379D99DB4u, 0x45208B2A2C280290u, 0x4554ADF4B7320334u, 0x4589D971E4FE8401u, 0x45C027E72F1F1281u, + 0x45F431E0FAE6D721u, 0x46293E5939A08CE9u, 0x465F8DEF8808B024u, 0x4693B8B5B5056E16u, 0x46C8A6E32246C99Cu, + 0x46FED09BEAD87C03u, 0x4733426172C74D82u, 0x476812F9CF7920E2u, 0x479E17B84357691Bu, 0x47D2CED32A16A1B1u, + 0x48078287F49C4A1Du, 0x483D6329F1C35CA4u, 0x48725DFA371A19E6u, 0x48A6F578C4E0A060u, 0x48DCB2D6F618C878u, + 0x4911EFC659CF7D4Bu, 0x49466BB7F0435C9Eu, 0x497C06A5EC5433C6u, 0x49B18427B3B4A05Bu, 0x49E5E531A0A1C872u, + 0x4A1B5E7E08CA3A8Fu, 0x4A511B0EC57E6499u, 0x4A8561D276DDFDC0u, 0x4ABABA4714957D30u, 0x4AF0B46C6CDD6E3Eu, + 0x4B24E1878814C9CDu, 0x4B5A19E96A19FC40u, 0x4B905031E2503DA8u, 0x4BC4643E5AE44D12u, 0x4BF97D4DF19D6057u, + 0x4C2FDCA16E04B86Du, 0x4C63E9E4E4C2F344u, 0x4C98E45E1DF3B015u, 0x4CCF1D75A5709C1Au, 0x4D03726987666190u, + 0x4D384F03E93FF9F4u, 0x4D6E62C4E38FF872u, 0x4DA2FDBB0E39FB47u, 0x4DD7BD29D1C87A19u, 0x4E0DAC74463A989Fu, + 0x4E428BC8ABE49F63u, 0x4E772EBAD6DDC73Cu, 0x4EACFA698C95390Bu, 0x4EE21C81F7DD43A7u, 0x4F16A3A275D49491u, + 0x4F4C4C8B1349B9B5u, 0x4F81AFD6EC0E1411u, 0x4FB61BCCA7119915u, 0x4FEBA2BFD0D5FF5Bu, 0x502145B7E285BF98u, + 0x50559725DB272F7Fu, 0x508AFCEF51F0FB5Eu, 0x50C0DE1593369D1Bu, 0x50F5159AF8044462u, 0x512A5B01B605557Au, + 0x516078E111C3556Cu, 0x5194971956342AC7u, 0x51C9BCDFABC13579u, 0x5200160BCB58C16Cu, 0x52341B8EBE2EF1C7u, + 0x526922726DBAAE39u, 0x529F6B0F092959C7u, 0x52D3A2E965B9D81Cu, 0x53088BA3BF284E23u, 0x533EAE8CAEF261ACu, + 0x53732D17ED577D0Bu, 0x53A7F85DE8AD5C4Eu, 0x53DDF67562D8B362u, 0x5412BA095DC7701Du, 0x5447688BB5394C25u, + 0x547D42AEA2879F2Eu, 0x54B249AD2594C37Cu, 0x54E6DC186EF9F45Cu, 0x551C931E8AB87173u, 0x5551DBF316B346E7u, + 0x558652EFDC6018A1u, 0x55BBE7ABD3781ECAu, 0x55F170CB642B133Eu, 0x5625CCFE3D35D80Eu, 0x565B403DCC834E11u, + 0x569108269FD210CBu, 0x56C54A3047C694FDu, 0x56FA9CBC59B83A3Du, 0x5730A1F5B8132466u, 0x5764CA732617ED7Fu, + 0x5799FD0FEF9DE8DFu, 0x57D03E29F5C2B18Bu, 0x58044DB473335DEEu, 0x583961219000356Au, 0x586FB969F40042C5u, + 0x58A3D3E2388029BBu, 0x58D8C8DAC6A0342Au, 0x590EFB1178484134u, 0x59435CEAEB2D28C0u, 0x59783425A5F872F1u, + 0x59AE412F0F768FADu, 0x59E2E8BD69AA19CCu, 0x5A17A2ECC414A03Fu, 0x5A4D8BA7F519C84Fu, 0x5A827748F9301D31u, + 0x5AB7151B377C247Eu, 0x5AECDA62055B2D9Du, 0x5B22087D4358FC82u, 0x5B568A9C942F3BA3u, 0x5B8C2D43B93B0A8Bu, + 0x5BC19C4A53C4E697u, 0x5BF6035CE8B6203Du, 0x5C2B843422E3A84Cu, 0x5C6132A095CE492Fu, 0x5C957F48BB41DB7Bu, + 0x5CCADF1AEA12525Au, 0x5D00CB70D24B7378u, 0x5D34FE4D06DE5056u, 0x5D6A3DE04895E46Cu, 0x5DA066AC2D5DAEC3u, + 0x5DD4805738B51A74u, 0x5E09A06D06E26112u, 0x5E400444244D7CABu, 0x5E7405552D60DBD6u, 0x5EA906AA78B912CBu, + 0x5EDF485516E7577Eu, 0x5F138D352E5096AFu, 0x5F48708279E4BC5Au, 0x5F7E8CA3185DEB71u, 0x5FB317E5EF3AB327u, + 0x5FE7DDDF6B095FF0u, 0x601DD55745CBB7ECu, 0x6052A5568B9F52F4u, 0x60874EAC2E8727B1u, 0x60BD22573A28F19Du, + 0x60F2357684599702u, 0x6126C2D4256FFCC2u, 0x615C73892ECBFBF3u, 0x6191C835BD3F7D78u, 0x61C63A432C8F5CD6u, + 0x61FBC8D3F7B3340Bu, 0x62315D847AD00087u, 0x6265B4E5998400A9u, 0x629B221EFFE500D3u, 0x62D0F5535FEF2084u, + 0x630532A837EAE8A5u, 0x633A7F5245E5A2CEu, 0x63708F936BAF85C1u, 0x63A4B378469B6731u, 0x63D9E056584240FDu, + 0x64102C35F729689Eu, 0x6444374374F3C2C6u, 0x647945145230B377u, 0x64AF965966BCE055u, 0x64E3BDF7E0360C35u, + 0x6518AD75D8438F43u, 0x654ED8D34E547313u, 0x6583478410F4C7ECu, 0x65B819651531F9E7u, 0x65EE1FBE5A7E7861u, + 0x6622D3D6F88F0B3Cu, 0x665788CCB6B2CE0Cu, 0x668D6AFFE45F818Fu, 0x66C262DFEEBBB0F9u, 0x66F6FB97EA6A9D37u, + 0x672CBA7DE5054485u, 0x6761F48EAF234AD3u, 0x679671B25AEC1D88u, 0x67CC0E1EF1A724EAu, 0x680188D357087712u, + 0x6835EB082CCA94D7u, 0x686B65CA37FD3A0Du, 0x68A11F9E62FE4448u, 0x68D56785FBBDD55Au, 0x690AC1677AAD4AB0u, + 0x6940B8E0ACAC4EAEu, 0x6974E718D7D7625Au, 0x69AA20DF0DCD3AF0u, 0x69E0548B68A044D6u, 0x6A1469AE42C8560Cu, + 0x6A498419D37A6B8Fu, 0x6A7FE52048590672u, 0x6AB3EF342D37A407u, 0x6AE8EB0138858D09u, 0x6B1F25C186A6F04Cu, + 0x6B537798F428562Fu, 0x6B88557F31326BBBu, 0x6BBE6ADEFD7F06AAu, 0x6BF302CB5E6F642Au, 0x6C27C37E360B3D35u, + 0x6C5DB45DC38E0C82u, 0x6C9290BA9A38C7D1u, 0x6CC734E940C6F9C5u, 0x6CFD022390F8B837u, 0x6D3221563A9B7322u, + 0x6D66A9ABC9424FEBu, 0x6D9C5416BB92E3E6u, 0x6DD1B48E353BCE6Fu, 0x6E0621B1C28AC20Bu, 0x6E3BAA1E332D728Eu, + 0x6E714A52DFFC6799u, 0x6EA59CE797FB817Fu, 0x6EDB04217DFA61DFu, 0x6F10E294EEBC7D2Bu, 0x6F451B3A2A6B9C76u, + 0x6F7A6208B5068394u, 0x6FB07D457124123Cu, 0x6FE49C96CD6D16CBu, 0x7019C3BC80C85C7Eu, 0x70501A55D07D39CFu, + 0x708420EB449C8842u, 0x70B9292615C3AA53u, 0x70EF736F9B3494E8u, 0x7123A825C100DD11u, 0x7158922F31411455u, + 0x718EB6BAFD91596Bu, 0x71C33234DE7AD7E2u, 0x71F7FEC216198DDBu, 0x722DFE729B9FF152u, 0x7262BF07A143F6D3u, + 0x72976EC98994F488u, 0x72CD4A7BEBFA31AAu, 0x73024E8D737C5F0Au, 0x7336E230D05B76CDu, 0x736C9ABD04725480u, + 0x73A1E0B622C774D0u, 0x73D658E3AB795204u, 0x740BEF1C9657A685u, 0x74417571DDF6C813u, 0x7475D2CE55747A18u, + 0x74AB4781EAD1989Eu, 0x74E10CB132C2FF63u, 0x75154FDD7F73BF3Bu, 0x754AA3D4DF50AF0Au, 0x7580A6650B926D66u, + 0x75B4CFFE4E7708C0u, 0x75EA03FDE214CAF0u, 0x7620427EAD4CFED6u, 0x7654531E58A03E8Bu, 0x768967E5EEC84E2Eu, + 0x76BFC1DF6A7A61BAu, 0x76F3D92BA28C7D14u, 0x7728CF768B2F9C59u, 0x775F03542DFB8370u, 0x779362149CBD3226u, + 0x77C83A99C3EC7EAFu, 0x77FE494034E79E5Bu, 0x7832EDC82110C2F9u, 0x7867A93A2954F3B7u, 0x789D9388B3AA30A5u, + 0x78D27C35704A5E67u, 0x79071B42CC5CF601u, 0x793CE2137F743381u, 0x79720D4C2FA8A030u, 0x79A6909F3B92C83Du, + 0x79DC34C70A777A4Cu, 0x7A11A0FC668AAC6Fu, 0x7A46093B802D578Bu, 0x7A7B8B8A6038AD6Eu, 0x7AB137367C236C65u, + 0x7AE585041B2C477Eu, 0x7B1AE64521F7595Eu, 0x7B50CFEB353A97DAu, 0x7B8503E602893DD1u, 0x7BBA44DF832B8D45u, + 0x7BF06B0BB1FB384Bu, 0x7C2485CE9E7A065Eu, 0x7C59A742461887F6u, 0x7C9008896BCF54F9u, 0x7CC40AABC6C32A38u, + 0x7CF90D56B873F4C6u, 0x7D2F50AC6690F1F8u, 0x7D63926BC01A973Bu, 0x7D987706B0213D09u, 0x7DCE94C85C298C4Cu, + 0x7E031CFD3999F7AFu, 0x7E37E43C8800759Bu, 0x7E6DDD4BAA009302u, 0x7EA2AA4F4A405BE1u, 0x7ED754E31CD072D9u, + 0x7F0D2A1BE4048F90u, 0x7F423A516E82D9BAu, 0x7F76C8E5CA239028u, 0x7FAC7B1F3CAC7433u, 0x7FE1CCF385EBC89Fu, + 0x7FEFFFFFFFFFFFFFu}; +}; + +template +[[nodiscard]] _LIBCPP_AVAILABILITY_TO_CHARS _LIBCPP_HIDE_FROM_ABI +to_chars_result _Floating_to_chars_general_precision( + char* _First, char* const _Last, const _Floating _Value, int _Precision) noexcept { + + using _Traits = _Floating_type_traits<_Floating>; + using _Uint_type = typename _Traits::_Uint_type; + + const _Uint_type _Uint_value = _Bit_cast<_Uint_type>(_Value); + + if (_Uint_value == 0) { // zero detected; write "0" and return; _Precision is irrelevant due to zero-trimming + if (_First == _Last) { + return {_Last, errc::value_too_large}; + } + + *_First++ = '0'; + + return {_First, errc{}}; + } + + // C11 7.21.6.1 "The fprintf function"/5: + // "A negative precision argument is taken as if the precision were omitted." + // /8: "g,G [...] Let P equal the precision if nonzero, 6 if the precision is omitted, + // or 1 if the precision is zero." + + // Performance note: It's possible to rewrite this for branchless codegen, + // but profiling will be necessary to determine whether that's faster. + if (_Precision < 0) { + _Precision = 6; + } else if (_Precision == 0) { + _Precision = 1; + } else if (_Precision < 1'000'000) { + // _Precision is ok. + } else { + // Avoid integer overflow. + // Due to general notation's zero-trimming behavior, we can simply clamp _Precision. + // This is further clamped below. + _Precision = 1'000'000; + } + + // _Precision is now the Standard's P. + + // /8: "Then, if a conversion with style E would have an exponent of X: + // - if P > X >= -4, the conversion is with style f (or F) and precision P - (X + 1). + // - otherwise, the conversion is with style e (or E) and precision P - 1." + + // /8: "Finally, [...] any trailing zeros are removed from the fractional portion of the result + // and the decimal-point character is removed if there is no fractional portion remaining." + + using _Tables = _General_precision_tables<_Floating>; + + const _Uint_type* _Table_begin; + const _Uint_type* _Table_end; + + if (_Precision <= _Tables::_Max_special_P) { + _Table_begin = _Tables::_Special_X_table + (_Precision - 1) * (_Precision + 10) / 2; + _Table_end = _Table_begin + _Precision + 5; + } else { + _Table_begin = _Tables::_Ordinary_X_table; + _Table_end = _Table_begin + _VSTD::min(_Precision, _Tables::_Max_P) + 5; + } + + // Profiling indicates that linear search is faster than binary search for small tables. + // Performance note: lambda captures may have a small performance cost. + const _Uint_type* const _Table_lower_bound = [=] { + if constexpr (!_IsSame<_Floating, float>::value) { + if (_Precision > 155) { // threshold determined via profiling + return _VSTD::lower_bound(_Table_begin, _Table_end, _Uint_value, less{}); + } + } + + return _VSTD::find_if(_Table_begin, _Table_end, [=](const _Uint_type _Elem) { return _Uint_value <= _Elem; }); + }(); + + const ptrdiff_t _Table_index = _Table_lower_bound - _Table_begin; + const int _Scientific_exponent_X = static_cast(_Table_index - 5); + const bool _Use_fixed_notation = _Precision > _Scientific_exponent_X && _Scientific_exponent_X >= -4; + + // Performance note: it might (or might not) be faster to modify Ryu Printf to perform zero-trimming. + // Such modifications would involve a fairly complicated state machine (notably, both '0' and '9' digits would + // need to be buffered, due to rounding), and that would have performance costs due to increased branching. + // Here, we're using a simpler approach: writing into a local buffer, manually zero-trimming, and then copying into + // the output range. The necessary buffer size is reasonably small, the zero-trimming logic is simple and fast, + // and the final copying is also fast. + + constexpr int _Max_output_length = + _IsSame<_Floating, float>::value ? 117 : 773; // cases: 0x1.fffffep-126f and 0x1.fffffffffffffp-1022 + constexpr int _Max_fixed_precision = + _IsSame<_Floating, float>::value ? 37 : 66; // cases: 0x1.fffffep-14f and 0x1.fffffffffffffp-14 + constexpr int _Max_scientific_precision = + _IsSame<_Floating, float>::value ? 111 : 766; // cases: 0x1.fffffep-126f and 0x1.fffffffffffffp-1022 + + // Note that _Max_output_length is determined by scientific notation and is more than enough for fixed notation. + // 0x1.fffffep+127f is 39 digits, plus 1 for '.', plus _Max_fixed_precision for '0' digits, equals 77. + // 0x1.fffffffffffffp+1023 is 309 digits, plus 1 for '.', plus _Max_fixed_precision for '0' digits, equals 376. + + char _Buffer[_Max_output_length]; + const char* const _Significand_first = _Buffer; // e.g. "1.234" + const char* _Significand_last = nullptr; + const char* _Exponent_first = nullptr; // e.g. "e-05" + const char* _Exponent_last = nullptr; + int _Effective_precision; // number of digits printed after the decimal point, before trimming + + // Write into the local buffer. + // Clamping _Effective_precision allows _Buffer to be as small as possible, and increases efficiency. + if (_Use_fixed_notation) { + _Effective_precision = _VSTD::min(_Precision - (_Scientific_exponent_X + 1), _Max_fixed_precision); + const to_chars_result _Buf_result = + _Floating_to_chars_fixed_precision(_Buffer, _VSTD::end(_Buffer), _Value, _Effective_precision); + _LIBCPP_ASSERT(_Buf_result.ec == errc{}, ""); + _Significand_last = _Buf_result.ptr; + } else { + _Effective_precision = _VSTD::min(_Precision - 1, _Max_scientific_precision); + const to_chars_result _Buf_result = + _Floating_to_chars_scientific_precision(_Buffer, _VSTD::end(_Buffer), _Value, _Effective_precision); + _LIBCPP_ASSERT(_Buf_result.ec == errc{}, ""); + _Significand_last = _VSTD::find(_Buffer, _Buf_result.ptr, 'e'); + _Exponent_first = _Significand_last; + _Exponent_last = _Buf_result.ptr; + } + + // If we printed a decimal point followed by digits, perform zero-trimming. + if (_Effective_precision > 0) { + while (_Significand_last[-1] == '0') { // will stop at '.' or a nonzero digit + --_Significand_last; + } + + if (_Significand_last[-1] == '.') { + --_Significand_last; + } + } + + // Copy the significand to the output range. + const ptrdiff_t _Significand_distance = _Significand_last - _Significand_first; + if (_Last - _First < _Significand_distance) { + return {_Last, errc::value_too_large}; + } + _VSTD::memcpy(_First, _Significand_first, static_cast(_Significand_distance)); + _First += _Significand_distance; + + // Copy the exponent to the output range. + if (!_Use_fixed_notation) { + const ptrdiff_t _Exponent_distance = _Exponent_last - _Exponent_first; + if (_Last - _First < _Exponent_distance) { + return {_Last, errc::value_too_large}; + } + _VSTD::memcpy(_First, _Exponent_first, static_cast(_Exponent_distance)); + _First += _Exponent_distance; + } + + return {_First, errc{}}; +} + +enum class _Floating_to_chars_overload { _Plain, _Format_only, _Format_precision }; + +template <_Floating_to_chars_overload _Overload, class _Floating> +[[nodiscard]] _LIBCPP_AVAILABILITY_TO_CHARS _LIBCPP_HIDE_FROM_ABI +to_chars_result _Floating_to_chars( + char* _First, char* const _Last, _Floating _Value, const chars_format _Fmt, const int _Precision) noexcept { + + if constexpr (_Overload == _Floating_to_chars_overload::_Plain) { + _LIBCPP_ASSERT(_Fmt == chars_format{}, ""); // plain overload must pass chars_format{} internally + } else { + _LIBCPP_ASSERT(_Fmt == chars_format::general || _Fmt == chars_format::scientific || _Fmt == chars_format::fixed + || _Fmt == chars_format::hex, + "invalid format in to_chars()"); + } + + using _Traits = _Floating_type_traits<_Floating>; + using _Uint_type = typename _Traits::_Uint_type; + + _Uint_type _Uint_value = _Bit_cast<_Uint_type>(_Value); + + const bool _Was_negative = (_Uint_value & _Traits::_Shifted_sign_mask) != 0; + + if (_Was_negative) { // sign bit detected; write minus sign and clear sign bit + if (_First == _Last) { + return {_Last, errc::value_too_large}; + } + + *_First++ = '-'; + + _Uint_value &= ~_Traits::_Shifted_sign_mask; + _Value = _Bit_cast<_Floating>(_Uint_value); + } + + if ((_Uint_value & _Traits::_Shifted_exponent_mask) == _Traits::_Shifted_exponent_mask) { + // inf/nan detected; write appropriate string and return + const char* _Str; + size_t _Len; + + const _Uint_type _Mantissa = _Uint_value & _Traits::_Denormal_mantissa_mask; + + if (_Mantissa == 0) { + _Str = "inf"; + _Len = 3; + } else if (_Was_negative && _Mantissa == _Traits::_Special_nan_mantissa_mask) { + // When a NaN value has the sign bit set, the quiet bit set, and all other mantissa bits cleared, + // the UCRT interprets it to mean "indeterminate", and indicates this by printing "-nan(ind)". + _Str = "nan(ind)"; + _Len = 8; + } else if ((_Mantissa & _Traits::_Special_nan_mantissa_mask) != 0) { + _Str = "nan"; + _Len = 3; + } else { + _Str = "nan(snan)"; + _Len = 9; + } + + if (_Last - _First < static_cast(_Len)) { + return {_Last, errc::value_too_large}; + } + + _VSTD::memcpy(_First, _Str, _Len); + + return {_First + _Len, errc{}}; + } + + if constexpr (_Overload == _Floating_to_chars_overload::_Plain) { + return _Floating_to_chars_ryu(_First, _Last, _Value, chars_format{}); + } else if constexpr (_Overload == _Floating_to_chars_overload::_Format_only) { + if (_Fmt == chars_format::hex) { + return _Floating_to_chars_hex_shortest(_First, _Last, _Value); + } + + return _Floating_to_chars_ryu(_First, _Last, _Value, _Fmt); + } else if constexpr (_Overload == _Floating_to_chars_overload::_Format_precision) { + switch (_Fmt) { + case chars_format::scientific: + return _Floating_to_chars_scientific_precision(_First, _Last, _Value, _Precision); + case chars_format::fixed: + return _Floating_to_chars_fixed_precision(_First, _Last, _Value, _Precision); + case chars_format::general: + return _Floating_to_chars_general_precision(_First, _Last, _Value, _Precision); + case chars_format::hex: + default: // avoid MSVC warning C4715: not all control paths return a value + return _Floating_to_chars_hex_precision(_First, _Last, _Value, _Precision); + } + } +} + +_LIBCPP_AVAILABILITY_TO_CHARS _LIBCPP_HIDE_FROM_ABI +inline to_chars_result to_chars(char* const _First, char* const _Last, const float _Value) noexcept /* strengthened */ { + return _Floating_to_chars<_Floating_to_chars_overload::_Plain>(_First, _Last, _Value, chars_format{}, 0); +} +_LIBCPP_AVAILABILITY_TO_CHARS _LIBCPP_HIDE_FROM_ABI +inline to_chars_result to_chars( + char* const _First, char* const _Last, const double _Value) noexcept /* strengthened */ { + return _Floating_to_chars<_Floating_to_chars_overload::_Plain>(_First, _Last, _Value, chars_format{}, 0); +} +_LIBCPP_AVAILABILITY_TO_CHARS _LIBCPP_HIDE_FROM_ABI +inline to_chars_result to_chars( + char* const _First, char* const _Last, const long double _Value) noexcept /* strengthened */ { + return _Floating_to_chars<_Floating_to_chars_overload::_Plain>( + _First, _Last, static_cast(_Value), chars_format{}, 0); +} +_LIBCPP_AVAILABILITY_TO_CHARS _LIBCPP_HIDE_FROM_ABI +inline to_chars_result to_chars( + char* const _First, char* const _Last, const float _Value, const chars_format _Fmt) noexcept /* strengthened */ { + return _Floating_to_chars<_Floating_to_chars_overload::_Format_only>(_First, _Last, _Value, _Fmt, 0); +} +_LIBCPP_AVAILABILITY_TO_CHARS _LIBCPP_HIDE_FROM_ABI +inline to_chars_result to_chars( + char* const _First, char* const _Last, const double _Value, const chars_format _Fmt) noexcept /* strengthened */ { + return _Floating_to_chars<_Floating_to_chars_overload::_Format_only>(_First, _Last, _Value, _Fmt, 0); +} +_LIBCPP_AVAILABILITY_TO_CHARS _LIBCPP_HIDE_FROM_ABI +inline to_chars_result to_chars(char* const _First, char* const _Last, const long double _Value, + const chars_format _Fmt) noexcept /* strengthened */ { + return _Floating_to_chars<_Floating_to_chars_overload::_Format_only>( + _First, _Last, static_cast(_Value), _Fmt, 0); +} +_LIBCPP_AVAILABILITY_TO_CHARS _LIBCPP_HIDE_FROM_ABI +inline to_chars_result to_chars(char* const _First, char* const _Last, const float _Value, const chars_format _Fmt, + const int _Precision) noexcept /* strengthened */ { + return _Floating_to_chars<_Floating_to_chars_overload::_Format_precision>(_First, _Last, _Value, _Fmt, _Precision); +} +_LIBCPP_AVAILABILITY_TO_CHARS _LIBCPP_HIDE_FROM_ABI +inline to_chars_result to_chars(char* const _First, char* const _Last, const double _Value, const chars_format _Fmt, + const int _Precision) noexcept /* strengthened */ { + return _Floating_to_chars<_Floating_to_chars_overload::_Format_precision>(_First, _Last, _Value, _Fmt, _Precision); +} +_LIBCPP_AVAILABILITY_TO_CHARS _LIBCPP_HIDE_FROM_ABI +inline to_chars_result to_chars(char* const _First, char* const _Last, const long double _Value, + const chars_format _Fmt, const int _Precision) noexcept /* strengthened */ { + return _Floating_to_chars<_Floating_to_chars_overload::_Format_precision>( + _First, _Last, static_cast(_Value), _Fmt, _Precision); +} + +// clang-format on + +#endif // _LIBCPP_STD_VER > 14 #endif // _LIBCPP_CXX03_LANG _LIBCPP_END_NAMESPACE_STD diff --git a/libcxx/include/module.modulemap b/libcxx/include/module.modulemap --- a/libcxx/include/module.modulemap +++ b/libcxx/include/module.modulemap @@ -350,9 +350,10 @@ module __charconv { module chars_format { private header "__charconv/chars_format.h" } module from_chars_result { private header "__charconv/from_chars_result.h" } + module ryu { private header "__charconv/ryu.h" } + module ryu_tables { private header "__charconv/ryu_tables.h" } module to_chars_result { private header "__charconv/to_chars_result.h" } } - } module chrono { header "chrono" diff --git a/libcxx/src/CMakeLists.txt b/libcxx/src/CMakeLists.txt --- a/libcxx/src/CMakeLists.txt +++ b/libcxx/src/CMakeLists.txt @@ -25,6 +25,9 @@ new.cpp optional.cpp random_shuffle.cpp + ryu/d2fixed.cpp + ryu/d2s.cpp + ryu/f2s.cpp shared_mutex.cpp stdexcept.cpp string.cpp diff --git a/libcxx/src/charconv.cpp b/libcxx/src/charconv.cpp --- a/libcxx/src/charconv.cpp +++ b/libcxx/src/charconv.cpp @@ -9,27 +9,13 @@ #include "charconv" #include +#include "ryu/digit_table.h" + _LIBCPP_BEGIN_NAMESPACE_STD namespace __itoa { -static constexpr char cDigitsLut[200] = { - '0', '0', '0', '1', '0', '2', '0', '3', '0', '4', '0', '5', '0', '6', '0', - '7', '0', '8', '0', '9', '1', '0', '1', '1', '1', '2', '1', '3', '1', '4', - '1', '5', '1', '6', '1', '7', '1', '8', '1', '9', '2', '0', '2', '1', '2', - '2', '2', '3', '2', '4', '2', '5', '2', '6', '2', '7', '2', '8', '2', '9', - '3', '0', '3', '1', '3', '2', '3', '3', '3', '4', '3', '5', '3', '6', '3', - '7', '3', '8', '3', '9', '4', '0', '4', '1', '4', '2', '4', '3', '4', '4', - '4', '5', '4', '6', '4', '7', '4', '8', '4', '9', '5', '0', '5', '1', '5', - '2', '5', '3', '5', '4', '5', '5', '5', '6', '5', '7', '5', '8', '5', '9', - '6', '0', '6', '1', '6', '2', '6', '3', '6', '4', '6', '5', '6', '6', '6', - '7', '6', '8', '6', '9', '7', '0', '7', '1', '7', '2', '7', '3', '7', '4', - '7', '5', '7', '6', '7', '7', '7', '8', '7', '9', '8', '0', '8', '1', '8', - '2', '8', '3', '8', '4', '8', '5', '8', '6', '8', '7', '8', '8', '8', '9', - '9', '0', '9', '1', '9', '2', '9', '3', '9', '4', '9', '5', '9', '6', '9', - '7', '9', '8', '9', '9'}; - template inline _LIBCPP_INLINE_VISIBILITY char* append1(char* buffer, T i) noexcept @@ -42,7 +28,7 @@ inline _LIBCPP_INLINE_VISIBILITY char* append2(char* buffer, T i) noexcept { - memcpy(buffer, &cDigitsLut[(i)*2], 2); + memcpy(buffer, &__DIGIT_TABLE[(i)*2], 2); return buffer + 2; } diff --git a/libcxx/src/ryu/README.txt b/libcxx/src/ryu/README.txt new file mode 100644 --- /dev/null +++ b/libcxx/src/ryu/README.txt @@ -0,0 +1,10 @@ +The code in this directory is based on Ulf Adams's work. The upstream for that +code is: + +https://github.com/ulfjack/ryu/tree/59661c3/ryu + +The code has been modified by Stephan T. Lavavej of Microsoft for usage in +std::to_chars. This modified code has been contributed by Microft for includion +in libc++. + +The code in this directory has a different coding style than other parts to minimize the number of changes by both upstream sources. diff --git a/libcxx/src/ryu/d2fixed.cpp b/libcxx/src/ryu/d2fixed.cpp new file mode 100644 --- /dev/null +++ b/libcxx/src/ryu/d2fixed.cpp @@ -0,0 +1,662 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +// Copyright (c) Microsoft Corporation. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +// Copyright 2018 Ulf Adams +// Copyright (c) Microsoft Corporation. All rights reserved. + +// Boost Software License - Version 1.0 - August 17th, 2003 + +// Permission is hereby granted, free of charge, to any person or organization +// obtaining a copy of the software and accompanying documentation covered by +// this license (the "Software") to use, reproduce, display, distribute, +// execute, and transmit the Software, and to prepare derivative works of the +// Software, and to permit third-parties to whom the Software is furnished to +// do so, all subject to the following: + +// The copyright notices in the Software and this entire statement, including +// the above license grant, this restriction and the following disclaimer, +// must be included in all copies of the Software, in whole or in part, and +// all derivative works of the Software, unless such copies or derivative +// works are solely in the form of machine-executable object code generated by +// a source language processor. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +// DEALINGS IN THE SOFTWARE. + +// Avoid formatting to keep the changes with the original code minimal. +// clang-format off + +#include "charconv" + +#include "ryu/digit_table.h" +#include "ryu/d2fixed_full_table.h" + +_LIBCPP_BEGIN_NAMESPACE_STD + +inline constexpr int __POW10_ADDITIONAL_BITS = 120; + +#ifdef _LIBCPP_INTRINSIC128 +// Returns the low 64 bits of the high 128 bits of the 256-bit product of a and b. +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline uint64_t __umul256_hi128_lo64( + const uint64_t __aHi, const uint64_t __aLo, const uint64_t __bHi, const uint64_t __bLo) { + uint64_t __b00Hi; + const uint64_t __b00Lo = __ryu_umul128(__aLo, __bLo, &__b00Hi); + uint64_t __b01Hi; + const uint64_t __b01Lo = __ryu_umul128(__aLo, __bHi, &__b01Hi); + uint64_t __b10Hi; + const uint64_t __b10Lo = __ryu_umul128(__aHi, __bLo, &__b10Hi); + uint64_t __b11Hi; + const uint64_t __b11Lo = __ryu_umul128(__aHi, __bHi, &__b11Hi); + (void) __b00Lo; // unused + (void) __b11Hi; // unused + const uint64_t __temp1Lo = __b10Lo + __b00Hi; + const uint64_t __temp1Hi = __b10Hi + (__temp1Lo < __b10Lo); + const uint64_t __temp2Lo = __b01Lo + __temp1Lo; + const uint64_t __temp2Hi = __b01Hi + (__temp2Lo < __b01Lo); + return __b11Lo + __temp1Hi + __temp2Hi; +} + +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline uint32_t __uint128_mod1e9(const uint64_t __vHi, const uint64_t __vLo) { + // After multiplying, we're going to shift right by 29, then truncate to uint32_t. + // This means that we need only 29 + 32 = 61 bits, so we can truncate to uint64_t before shifting. + const uint64_t __multiplied = __umul256_hi128_lo64(__vHi, __vLo, 0x89705F4136B4A597u, 0x31680A88F8953031u); + + // For uint32_t truncation, see the __mod1e9() comment in d2s_intrinsics.h. + const uint32_t __shifted = static_cast(__multiplied >> 29); + + return static_cast(__vLo) - 1000000000 * __shifted; +} +#endif // ^^^ intrinsics available ^^^ + +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline uint32_t __mulShift_mod1e9(const uint64_t __m, const uint64_t* const __mul, const int32_t __j) { + uint64_t __high0; // 64 + const uint64_t __low0 = __ryu_umul128(__m, __mul[0], &__high0); // 0 + uint64_t __high1; // 128 + const uint64_t __low1 = __ryu_umul128(__m, __mul[1], &__high1); // 64 + uint64_t __high2; // 192 + const uint64_t __low2 = __ryu_umul128(__m, __mul[2], &__high2); // 128 + const uint64_t __s0low = __low0; // 0 + (void) __s0low; // unused + const uint64_t __s0high = __low1 + __high0; // 64 + const uint32_t __c1 = __s0high < __low1; + const uint64_t __s1low = __low2 + __high1 + __c1; // 128 + const uint32_t __c2 = __s1low < __low2; // __high1 + __c1 can't overflow, so compare against __low2 + const uint64_t __s1high = __high2 + __c2; // 192 + _LIBCPP_ASSERT(__j >= 128, ""); + _LIBCPP_ASSERT(__j <= 180, ""); +#ifdef _LIBCPP_INTRINSIC128 + const uint32_t __dist = static_cast(__j - 128); // __dist: [0, 52] + const uint64_t __shiftedhigh = __s1high >> __dist; + const uint64_t __shiftedlow = __ryu_shiftright128(__s1low, __s1high, __dist); + return __uint128_mod1e9(__shiftedhigh, __shiftedlow); +#else // ^^^ intrinsics available ^^^ / vvv intrinsics unavailable vvv + if (__j < 160) { // __j: [128, 160) + const uint64_t __r0 = __mod1e9(__s1high); + const uint64_t __r1 = __mod1e9((__r0 << 32) | (__s1low >> 32)); + const uint64_t __r2 = ((__r1 << 32) | (__s1low & 0xffffffff)); + return __mod1e9(__r2 >> (__j - 128)); + } else { // __j: [160, 192) + const uint64_t __r0 = __mod1e9(__s1high); + const uint64_t __r1 = ((__r0 << 32) | (__s1low >> 32)); + return __mod1e9(__r1 >> (__j - 160)); + } +#endif // ^^^ intrinsics unavailable ^^^ +} + +void __append_n_digits(const uint32_t __olength, uint32_t __digits, char* const __result) { + uint32_t __i = 0; + while (__digits >= 10000) { +#ifdef __clang__ // TRANSITION, LLVM-38217 + const uint32_t __c = __digits - 10000 * (__digits / 10000); +#else + const uint32_t __c = __digits % 10000; +#endif + __digits /= 10000; + const uint32_t __c0 = (__c % 100) << 1; + const uint32_t __c1 = (__c / 100) << 1; + _VSTD::memcpy(__result + __olength - __i - 2, __DIGIT_TABLE + __c0, 2); + _VSTD::memcpy(__result + __olength - __i - 4, __DIGIT_TABLE + __c1, 2); + __i += 4; + } + if (__digits >= 100) { + const uint32_t __c = (__digits % 100) << 1; + __digits /= 100; + _VSTD::memcpy(__result + __olength - __i - 2, __DIGIT_TABLE + __c, 2); + __i += 2; + } + if (__digits >= 10) { + const uint32_t __c = __digits << 1; + _VSTD::memcpy(__result + __olength - __i - 2, __DIGIT_TABLE + __c, 2); + } else { + __result[0] = static_cast('0' + __digits); + } +} + +_LIBCPP_HIDE_FROM_ABI inline void __append_d_digits(const uint32_t __olength, uint32_t __digits, char* const __result) { + uint32_t __i = 0; + while (__digits >= 10000) { +#ifdef __clang__ // TRANSITION, LLVM-38217 + const uint32_t __c = __digits - 10000 * (__digits / 10000); +#else + const uint32_t __c = __digits % 10000; +#endif + __digits /= 10000; + const uint32_t __c0 = (__c % 100) << 1; + const uint32_t __c1 = (__c / 100) << 1; + _VSTD::memcpy(__result + __olength + 1 - __i - 2, __DIGIT_TABLE + __c0, 2); + _VSTD::memcpy(__result + __olength + 1 - __i - 4, __DIGIT_TABLE + __c1, 2); + __i += 4; + } + if (__digits >= 100) { + const uint32_t __c = (__digits % 100) << 1; + __digits /= 100; + _VSTD::memcpy(__result + __olength + 1 - __i - 2, __DIGIT_TABLE + __c, 2); + __i += 2; + } + if (__digits >= 10) { + const uint32_t __c = __digits << 1; + __result[2] = __DIGIT_TABLE[__c + 1]; + __result[1] = '.'; + __result[0] = __DIGIT_TABLE[__c]; + } else { + __result[1] = '.'; + __result[0] = static_cast('0' + __digits); + } +} + +_LIBCPP_HIDE_FROM_ABI inline void __append_c_digits(const uint32_t __count, uint32_t __digits, char* const __result) { + uint32_t __i = 0; + for (; __i < __count - 1; __i += 2) { + const uint32_t __c = (__digits % 100) << 1; + __digits /= 100; + _VSTD::memcpy(__result + __count - __i - 2, __DIGIT_TABLE + __c, 2); + } + if (__i < __count) { + const char __c = static_cast('0' + (__digits % 10)); + __result[__count - __i - 1] = __c; + } +} + +void __append_nine_digits(uint32_t __digits, char* const __result) { + if (__digits == 0) { + _VSTD::memset(__result, '0', 9); + return; + } + + for (uint32_t __i = 0; __i < 5; __i += 4) { +#ifdef __clang__ // TRANSITION, LLVM-38217 + const uint32_t __c = __digits - 10000 * (__digits / 10000); +#else + const uint32_t __c = __digits % 10000; +#endif + __digits /= 10000; + const uint32_t __c0 = (__c % 100) << 1; + const uint32_t __c1 = (__c / 100) << 1; + _VSTD::memcpy(__result + 7 - __i, __DIGIT_TABLE + __c0, 2); + _VSTD::memcpy(__result + 5 - __i, __DIGIT_TABLE + __c1, 2); + } + __result[0] = static_cast('0' + __digits); +} + +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline uint32_t __indexForExponent(const uint32_t __e) { + return (__e + 15) / 16; +} + +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline uint32_t __pow10BitsForIndex(const uint32_t __idx) { + return 16 * __idx + __POW10_ADDITIONAL_BITS; +} + +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline uint32_t __lengthForIndex(const uint32_t __idx) { + // +1 for ceil, +16 for mantissa, +8 to round up when dividing by 9 + return (__log10Pow2(16 * static_cast(__idx)) + 1 + 16 + 8) / 9; +} + +[[nodiscard]] to_chars_result __d2fixed_buffered_n(char* _First, char* const _Last, const double __d, + const uint32_t __precision) { + char* const _Original_first = _First; + + const uint64_t __bits = __double_to_bits(__d); + + // Case distinction; exit early for the easy cases. + if (__bits == 0) { + const int32_t _Total_zero_length = 1 // leading zero + + static_cast(__precision != 0) // possible decimal point + + static_cast(__precision); // zeroes after decimal point + + if (_Last - _First < _Total_zero_length) { + return { _Last, errc::value_too_large }; + } + + *_First++ = '0'; + if (__precision > 0) { + *_First++ = '.'; + _VSTD::memset(_First, '0', __precision); + _First += __precision; + } + return { _First, errc{} }; + } + + // Decode __bits into mantissa and exponent. + const uint64_t __ieeeMantissa = __bits & ((1ull << __DOUBLE_MANTISSA_BITS) - 1); + const uint32_t __ieeeExponent = static_cast(__bits >> __DOUBLE_MANTISSA_BITS); + + int32_t __e2; + uint64_t __m2; + if (__ieeeExponent == 0) { + __e2 = 1 - __DOUBLE_BIAS - __DOUBLE_MANTISSA_BITS; + __m2 = __ieeeMantissa; + } else { + __e2 = static_cast(__ieeeExponent) - __DOUBLE_BIAS - __DOUBLE_MANTISSA_BITS; + __m2 = (1ull << __DOUBLE_MANTISSA_BITS) | __ieeeMantissa; + } + + bool __nonzero = false; + if (__e2 >= -52) { + const uint32_t __idx = __e2 < 0 ? 0 : __indexForExponent(static_cast(__e2)); + const uint32_t __p10bits = __pow10BitsForIndex(__idx); + const int32_t __len = static_cast(__lengthForIndex(__idx)); + for (int32_t __i = __len - 1; __i >= 0; --__i) { + const uint32_t __j = __p10bits - __e2; + // Temporary: __j is usually around 128, and by shifting a bit, we push it to 128 or above, which is + // a slightly faster code path in __mulShift_mod1e9. Instead, we can just increase the multipliers. + const uint32_t __digits = __mulShift_mod1e9(__m2 << 8, __POW10_SPLIT[__POW10_OFFSET[__idx] + __i], + static_cast(__j + 8)); + if (__nonzero) { + if (_Last - _First < 9) { + return { _Last, errc::value_too_large }; + } + __append_nine_digits(__digits, _First); + _First += 9; + } else if (__digits != 0) { + const uint32_t __olength = __decimalLength9(__digits); + if (_Last - _First < static_cast(__olength)) { + return { _Last, errc::value_too_large }; + } + __append_n_digits(__olength, __digits, _First); + _First += __olength; + __nonzero = true; + } + } + } + if (!__nonzero) { + if (_First == _Last) { + return { _Last, errc::value_too_large }; + } + *_First++ = '0'; + } + if (__precision > 0) { + if (_First == _Last) { + return { _Last, errc::value_too_large }; + } + *_First++ = '.'; + } + if (__e2 < 0) { + const int32_t __idx = -__e2 / 16; + const uint32_t __blocks = __precision / 9 + 1; + // 0 = don't round up; 1 = round up unconditionally; 2 = round up if odd. + int __roundUp = 0; + uint32_t __i = 0; + if (__blocks <= __MIN_BLOCK_2[__idx]) { + __i = __blocks; + if (_Last - _First < static_cast(__precision)) { + return { _Last, errc::value_too_large }; + } + _VSTD::memset(_First, '0', __precision); + _First += __precision; + } else if (__i < __MIN_BLOCK_2[__idx]) { + __i = __MIN_BLOCK_2[__idx]; + if (_Last - _First < static_cast(9 * __i)) { + return { _Last, errc::value_too_large }; + } + _VSTD::memset(_First, '0', 9 * __i); + _First += 9 * __i; + } + for (; __i < __blocks; ++__i) { + const int32_t __j = __ADDITIONAL_BITS_2 + (-__e2 - 16 * __idx); + const uint32_t __p = __POW10_OFFSET_2[__idx] + __i - __MIN_BLOCK_2[__idx]; + if (__p >= __POW10_OFFSET_2[__idx + 1]) { + // If the remaining digits are all 0, then we might as well use memset. + // No rounding required in this case. + const uint32_t __fill = __precision - 9 * __i; + if (_Last - _First < static_cast(__fill)) { + return { _Last, errc::value_too_large }; + } + _VSTD::memset(_First, '0', __fill); + _First += __fill; + break; + } + // Temporary: __j is usually around 128, and by shifting a bit, we push it to 128 or above, which is + // a slightly faster code path in __mulShift_mod1e9. Instead, we can just increase the multipliers. + uint32_t __digits = __mulShift_mod1e9(__m2 << 8, __POW10_SPLIT_2[__p], __j + 8); + if (__i < __blocks - 1) { + if (_Last - _First < 9) { + return { _Last, errc::value_too_large }; + } + __append_nine_digits(__digits, _First); + _First += 9; + } else { + const uint32_t __maximum = __precision - 9 * __i; + uint32_t __lastDigit = 0; + for (uint32_t __k = 0; __k < 9 - __maximum; ++__k) { + __lastDigit = __digits % 10; + __digits /= 10; + } + if (__lastDigit != 5) { + __roundUp = __lastDigit > 5; + } else { + // Is m * 10^(additionalDigits + 1) / 2^(-__e2) integer? + const int32_t __requiredTwos = -__e2 - static_cast(__precision) - 1; + const bool __trailingZeros = __requiredTwos <= 0 + || (__requiredTwos < 60 && __multipleOfPowerOf2(__m2, static_cast(__requiredTwos))); + __roundUp = __trailingZeros ? 2 : 1; + } + if (__maximum > 0) { + if (_Last - _First < static_cast(__maximum)) { + return { _Last, errc::value_too_large }; + } + __append_c_digits(__maximum, __digits, _First); + _First += __maximum; + } + break; + } + } + if (__roundUp != 0) { + char* _Round = _First; + char* _Dot = _Last; + while (true) { + if (_Round == _Original_first) { + _Round[0] = '1'; + if (_Dot != _Last) { + _Dot[0] = '0'; + _Dot[1] = '.'; + } + if (_First == _Last) { + return { _Last, errc::value_too_large }; + } + *_First++ = '0'; + break; + } + --_Round; + const char __c = _Round[0]; + if (__c == '.') { + _Dot = _Round; + } else if (__c == '9') { + _Round[0] = '0'; + __roundUp = 1; + } else { + if (__roundUp == 1 || __c % 2 != 0) { + _Round[0] = __c + 1; + } + break; + } + } + } + } else { + if (_Last - _First < static_cast(__precision)) { + return { _Last, errc::value_too_large }; + } + _VSTD::memset(_First, '0', __precision); + _First += __precision; + } + return { _First, errc{} }; +} + +[[nodiscard]] to_chars_result __d2exp_buffered_n(char* _First, char* const _Last, const double __d, + uint32_t __precision) { + char* const _Original_first = _First; + + const uint64_t __bits = __double_to_bits(__d); + + // Case distinction; exit early for the easy cases. + if (__bits == 0) { + const int32_t _Total_zero_length = 1 // leading zero + + static_cast(__precision != 0) // possible decimal point + + static_cast(__precision) // zeroes after decimal point + + 4; // "e+00" + if (_Last - _First < _Total_zero_length) { + return { _Last, errc::value_too_large }; + } + *_First++ = '0'; + if (__precision > 0) { + *_First++ = '.'; + _VSTD::memset(_First, '0', __precision); + _First += __precision; + } + _VSTD::memcpy(_First, "e+00", 4); + _First += 4; + return { _First, errc{} }; + } + + // Decode __bits into mantissa and exponent. + const uint64_t __ieeeMantissa = __bits & ((1ull << __DOUBLE_MANTISSA_BITS) - 1); + const uint32_t __ieeeExponent = static_cast(__bits >> __DOUBLE_MANTISSA_BITS); + + int32_t __e2; + uint64_t __m2; + if (__ieeeExponent == 0) { + __e2 = 1 - __DOUBLE_BIAS - __DOUBLE_MANTISSA_BITS; + __m2 = __ieeeMantissa; + } else { + __e2 = static_cast(__ieeeExponent) - __DOUBLE_BIAS - __DOUBLE_MANTISSA_BITS; + __m2 = (1ull << __DOUBLE_MANTISSA_BITS) | __ieeeMantissa; + } + + const bool __printDecimalPoint = __precision > 0; + ++__precision; + uint32_t __digits = 0; + uint32_t __printedDigits = 0; + uint32_t __availableDigits = 0; + int32_t __exp = 0; + if (__e2 >= -52) { + const uint32_t __idx = __e2 < 0 ? 0 : __indexForExponent(static_cast(__e2)); + const uint32_t __p10bits = __pow10BitsForIndex(__idx); + const int32_t __len = static_cast(__lengthForIndex(__idx)); + for (int32_t __i = __len - 1; __i >= 0; --__i) { + const uint32_t __j = __p10bits - __e2; + // Temporary: __j is usually around 128, and by shifting a bit, we push it to 128 or above, which is + // a slightly faster code path in __mulShift_mod1e9. Instead, we can just increase the multipliers. + __digits = __mulShift_mod1e9(__m2 << 8, __POW10_SPLIT[__POW10_OFFSET[__idx] + __i], + static_cast(__j + 8)); + if (__printedDigits != 0) { + if (__printedDigits + 9 > __precision) { + __availableDigits = 9; + break; + } + if (_Last - _First < 9) { + return { _Last, errc::value_too_large }; + } + __append_nine_digits(__digits, _First); + _First += 9; + __printedDigits += 9; + } else if (__digits != 0) { + __availableDigits = __decimalLength9(__digits); + __exp = __i * 9 + static_cast(__availableDigits) - 1; + if (__availableDigits > __precision) { + break; + } + if (__printDecimalPoint) { + if (_Last - _First < static_cast(__availableDigits + 1)) { + return { _Last, errc::value_too_large }; + } + __append_d_digits(__availableDigits, __digits, _First); + _First += __availableDigits + 1; // +1 for decimal point + } else { + if (_First == _Last) { + return { _Last, errc::value_too_large }; + } + *_First++ = static_cast('0' + __digits); + } + __printedDigits = __availableDigits; + __availableDigits = 0; + } + } + } + + if (__e2 < 0 && __availableDigits == 0) { + const int32_t __idx = -__e2 / 16; + for (int32_t __i = __MIN_BLOCK_2[__idx]; __i < 200; ++__i) { + const int32_t __j = __ADDITIONAL_BITS_2 + (-__e2 - 16 * __idx); + const uint32_t __p = __POW10_OFFSET_2[__idx] + static_cast(__i) - __MIN_BLOCK_2[__idx]; + // Temporary: __j is usually around 128, and by shifting a bit, we push it to 128 or above, which is + // a slightly faster code path in __mulShift_mod1e9. Instead, we can just increase the multipliers. + __digits = (__p >= __POW10_OFFSET_2[__idx + 1]) ? 0 : __mulShift_mod1e9(__m2 << 8, __POW10_SPLIT_2[__p], __j + 8); + if (__printedDigits != 0) { + if (__printedDigits + 9 > __precision) { + __availableDigits = 9; + break; + } + if (_Last - _First < 9) { + return { _Last, errc::value_too_large }; + } + __append_nine_digits(__digits, _First); + _First += 9; + __printedDigits += 9; + } else if (__digits != 0) { + __availableDigits = __decimalLength9(__digits); + __exp = -(__i + 1) * 9 + static_cast(__availableDigits) - 1; + if (__availableDigits > __precision) { + break; + } + if (__printDecimalPoint) { + if (_Last - _First < static_cast(__availableDigits + 1)) { + return { _Last, errc::value_too_large }; + } + __append_d_digits(__availableDigits, __digits, _First); + _First += __availableDigits + 1; // +1 for decimal point + } else { + if (_First == _Last) { + return { _Last, errc::value_too_large }; + } + *_First++ = static_cast('0' + __digits); + } + __printedDigits = __availableDigits; + __availableDigits = 0; + } + } + } + + const uint32_t __maximum = __precision - __printedDigits; + if (__availableDigits == 0) { + __digits = 0; + } + uint32_t __lastDigit = 0; + if (__availableDigits > __maximum) { + for (uint32_t __k = 0; __k < __availableDigits - __maximum; ++__k) { + __lastDigit = __digits % 10; + __digits /= 10; + } + } + // 0 = don't round up; 1 = round up unconditionally; 2 = round up if odd. + int __roundUp = 0; + if (__lastDigit != 5) { + __roundUp = __lastDigit > 5; + } else { + // Is m * 2^__e2 * 10^(__precision + 1 - __exp) integer? + // __precision was already increased by 1, so we don't need to write + 1 here. + const int32_t __rexp = static_cast(__precision) - __exp; + const int32_t __requiredTwos = -__e2 - __rexp; + bool __trailingZeros = __requiredTwos <= 0 + || (__requiredTwos < 60 && __multipleOfPowerOf2(__m2, static_cast(__requiredTwos))); + if (__rexp < 0) { + const int32_t __requiredFives = -__rexp; + __trailingZeros = __trailingZeros && __multipleOfPowerOf5(__m2, static_cast(__requiredFives)); + } + __roundUp = __trailingZeros ? 2 : 1; + } + if (__printedDigits != 0) { + if (_Last - _First < static_cast(__maximum)) { + return { _Last, errc::value_too_large }; + } + if (__digits == 0) { + _VSTD::memset(_First, '0', __maximum); + } else { + __append_c_digits(__maximum, __digits, _First); + } + _First += __maximum; + } else { + if (__printDecimalPoint) { + if (_Last - _First < static_cast(__maximum + 1)) { + return { _Last, errc::value_too_large }; + } + __append_d_digits(__maximum, __digits, _First); + _First += __maximum + 1; // +1 for decimal point + } else { + if (_First == _Last) { + return { _Last, errc::value_too_large }; + } + *_First++ = static_cast('0' + __digits); + } + } + if (__roundUp != 0) { + char* _Round = _First; + while (true) { + if (_Round == _Original_first) { + _Round[0] = '1'; + ++__exp; + break; + } + --_Round; + const char __c = _Round[0]; + if (__c == '.') { + // Keep going. + } else if (__c == '9') { + _Round[0] = '0'; + __roundUp = 1; + } else { + if (__roundUp == 1 || __c % 2 != 0) { + _Round[0] = __c + 1; + } + break; + } + } + } + + char _Sign_character; + + if (__exp < 0) { + _Sign_character = '-'; + __exp = -__exp; + } else { + _Sign_character = '+'; + } + + const int _Exponent_part_length = __exp >= 100 + ? 5 // "e+NNN" + : 4; // "e+NN" + + if (_Last - _First < _Exponent_part_length) { + return { _Last, errc::value_too_large }; + } + + *_First++ = 'e'; + *_First++ = _Sign_character; + + if (__exp >= 100) { + const int32_t __c = __exp % 10; + _VSTD::memcpy(_First, __DIGIT_TABLE + 2 * (__exp / 10), 2); + _First[2] = static_cast('0' + __c); + _First += 3; + } else { + _VSTD::memcpy(_First, __DIGIT_TABLE + 2 * __exp, 2); + _First += 2; + } + + return { _First, errc{} }; +} + +_LIBCPP_END_NAMESPACE_STD + +// clang-format on diff --git a/libcxx/src/ryu/d2fixed_full_table.h b/libcxx/src/ryu/d2fixed_full_table.h new file mode 100644 --- /dev/null +++ b/libcxx/src/ryu/d2fixed_full_table.h @@ -0,0 +1,4451 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +// Copyright (c) Microsoft Corporation. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +// Copyright 2018 Ulf Adams +// Copyright (c) Microsoft Corporation. All rights reserved. + +// Boost Software License - Version 1.0 - August 17th, 2003 + +// Permission is hereby granted, free of charge, to any person or organization +// obtaining a copy of the software and accompanying documentation covered by +// this license (the "Software") to use, reproduce, display, distribute, +// execute, and transmit the Software, and to prepare derivative works of the +// Software, and to permit third-parties to whom the Software is furnished to +// do so, all subject to the following: + +// The copyright notices in the Software and this entire statement, including +// the above license grant, this restriction and the following disclaimer, +// must be included in all copies of the Software, in whole or in part, and +// all derivative works of the Software, unless such copies or derivative +// works are solely in the form of machine-executable object code generated by +// a source language processor. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +// DEALINGS IN THE SOFTWARE. + +#ifndef RYU_D2FIXED_FULL_TABLE_H +#define RYU_D2FIXED_FULL_TABLE_H + +// Avoid formatting to keep the changes with the original code minimal. +// clang-format off + +#include "__config" + +_LIBCPP_BEGIN_NAMESPACE_STD + +inline constexpr int __TABLE_SIZE = 64; + +inline constexpr uint16_t __POW10_OFFSET[__TABLE_SIZE] = { + 0, 2, 5, 8, 12, 16, 21, 26, 32, 39, + 46, 54, 62, 71, 80, 90, 100, 111, 122, 134, + 146, 159, 173, 187, 202, 217, 233, 249, 266, 283, + 301, 319, 338, 357, 377, 397, 418, 440, 462, 485, + 508, 532, 556, 581, 606, 632, 658, 685, 712, 740, + 769, 798, 828, 858, 889, 920, 952, 984, 1017, 1050, + 1084, 1118, 1153, 1188 +}; + +inline constexpr uint64_t __POW10_SPLIT[1224][3] = { + { 1u, 72057594037927936u, 0u }, + { 699646928636035157u, 72057594u, 0u }, + { 1u, 0u, 256u }, + { 11902091922964236229u, 4722366482869u, 0u }, + { 6760415703743915872u, 4722u, 0u }, + { 1u, 0u, 16777216u }, + { 13369850649504950658u, 309485009821345068u, 0u }, + { 15151142278969419334u, 309485009u, 0u }, + { 1u, 0u, 75511627776u }, + { 4635408826454083567u, 9437866644873197963u, 1099u }, + { 12367138975830625353u, 20282409603651u, 0u }, + { 7555853734021184432u, 20282u, 0u }, + { 1u, 0u, 250037927936u }, + { 5171444645924616995u, 699646928636035156u, 72057594u }, + { 16672297533003297786u, 1329227995784915872u, 0u }, + { 14479142226848862515u, 1329227995u, 0u }, + { 1u, 0u, 181645213696u }, + { 12214193123817091081u, 11902091922964236228u, 114366482869u }, + { 16592893013671929435u, 6760415703743915871u, 4722u }, + { 4549827147718617003u, 87112285931760u, 0u }, + { 5274510003815168971u, 87112u, 0u }, + { 1u, 0u, 44724781056u }, + { 9794971998307800535u, 13369850649504950657u, 209821345068u }, + { 14720142899209240169u, 15151142278969419333u, 309485009u }, + { 4300745446091561535u, 5708990770823839524u, 0u }, + { 15197156861335443364u, 5708990770u, 0u }, + { 1u, 0u, 139251286016u }, + { 13484604155038683037u, 4635408826454083566u, 67670423947u }, + { 8356963862052375699u, 12367138975830625352u, 58409603651u }, + { 5850852848337610021u, 7555853734021184431u, 20282u }, + { 2712780827214982050u, 374144419156711u, 0u }, + { 7732076577307618052u, 374144u, 0u }, + { 1u, 0u, 84280344576u }, + { 17296309485351745867u, 5171444645924616994u, 160903807060u }, + { 16598859101615853088u, 16672297533003297785u, 219784915872u }, + { 7469952526870444257u, 14479142226848862514u, 1329227995u }, + { 13531654022114669524u, 6073184580144670117u, 1u }, + { 15757609704383306943u, 24519928653u, 0u }, + { 9590990814237149590u, 24u, 0u }, + { 1u, 0u, 196662132736u }, + { 15408590707489433890u, 12214193123817091080u, 95899502532u }, + { 18332056844289122710u, 16592893013671929434u, 240246646623u }, + { 11114572877353986193u, 4549827147718617002u, 72285931760u }, + { 1703393793997526525u, 5274510003815168970u, 87112u }, + { 5082852056285196265u, 1606938044258990u, 0u }, + { 816434266573722365u, 1606938u, 0u }, + { 1u, 0u, 129530986496u }, + { 5736523019264798742u, 9794971998307800534u, 69797980545u }, + { 10129314776268243339u, 14720142899209240168u, 36233143877u }, + { 16511595775483995364u, 4300745446091561534u, 50823839524u }, + { 12367293405401453325u, 15197156861335443363u, 5708990770u }, + { 16934621733248854291u, 13078571300009428617u, 5u }, + { 10278280417769171336u, 105312291668u, 0u }, + { 5760764486226151240u, 105u, 0u }, + { 1u, 0u, 238731001856u }, + { 4128368337188369761u, 13484604155038683036u, 72453031918u }, + { 10240941003671005056u, 8356963862052375698u, 175317175368u }, + { 17933378316822368251u, 5850852848337610020u, 231147060143u }, + { 8346249813075698616u, 2712780827214982049u, 128419156711u }, + { 15906203609160902695u, 7732076577307618051u, 374144u }, + { 14525607416135386328u, 6901746346790563u, 0u }, + { 6397156777364256320u, 6901746u, 0u }, + { 1u, 0u, 34937634816u }, + { 16798760952716600048u, 17296309485351745866u, 249899825954u }, + { 2419982808370854967u, 16598859101615853087u, 50404946937u }, + { 2922947087773078956u, 7469952526870444256u, 165733552434u }, + { 15419220167069510190u, 13531654022114669523u, 77854221733u }, + { 3452124642157173416u, 15757609704383306942u, 24519928653u }, + { 5979700067267186899u, 9590990814237149589u, 24u }, + { 4913998146922579597u, 452312848583u, 0u }, + { 5771037749337678924u, 452u, 0u }, + { 1u, 0u, 8835301376u }, + { 3464734175350698519u, 15408590707489433889u, 90993782792u }, + { 9334527711335850125u, 18332056844289122709u, 170602522202u }, + { 7269882896518450106u, 11114572877353986192u, 202092341162u }, + { 1372511258182263196u, 1703393793997526524u, 174275541962u }, + { 7571228438575951046u, 5082852056285196264u, 26044258990u }, + { 2992506536646070406u, 816434266573722364u, 1606938u }, + { 524517896824344606u, 29642774844752946u, 0u }, + { 15582941400898702773u, 29642774u, 0u }, + { 1u, 0u, 214310977536u }, + { 3846112492507251066u, 5736523019264798741u, 104549111254u }, + { 16681117750123089487u, 10129314776268243338u, 62895095400u }, + { 14986314536556547267u, 16511595775483995363u, 163670432318u }, + { 2573712825027107389u, 12367293405401453324u, 137918027683u }, + { 7504855874008324928u, 16934621733248854290u, 84557186697u }, + { 9572138030626879787u, 10278280417769171335u, 105312291668u }, + { 8520676959353394843u, 5760764486226151239u, 105u }, + { 13448984662897903496u, 1942668892225u, 0u }, + { 12338883700918130648u, 1942u, 0u }, + { 1u, 0u, 156223799296u }, + { 2517285787892561600u, 4128368337188369760u, 146555162524u }, + { 4338831817635138103u, 10240941003671005055u, 36972170386u }, + { 1561495325934523196u, 17933378316822368250u, 161452451108u }, + { 12262635050079398786u, 8346249813075698615u, 3862277025u }, + { 11144065765517284188u, 15906203609160902694u, 163787434755u }, + { 1212260522471875711u, 14525607416135386327u, 242346790563u }, + { 9695352922247418869u, 6397156777364256319u, 6901746u }, + { 7227025834627242948u, 127314748520905380u, 0u }, + { 9609008238705447829u, 127314748u, 0u }, + { 1u, 0u, 74910662656u }, + { 3609144142396852269u, 16798760952716600047u, 31131187530u }, + { 11568848377382068865u, 2419982808370854966u, 224158453279u }, + { 10068303578029323957u, 2922947087773078955u, 211835877600u }, + { 11645070846862630231u, 15419220167069510189u, 190187140051u }, + { 12449386705878485055u, 3452124642157173415u, 149324160190u }, + { 15025619323517318418u, 5979700067267186898u, 199266388373u }, + { 14996237555047131272u, 4913998146922579596u, 196312848583u }, + { 10211005638256058413u, 5771037749337678923u, 452u }, + { 1014743503555840530u, 8343699359066u, 0u }, + { 12900897707145290678u, 8343u, 0u }, + { 1u, 0u, 33187823616u }, + { 4718003016239473662u, 3464734175350698518u, 149506025761u }, + { 14865830648693666725u, 9334527711335850124u, 144394101141u }, + { 14754517212823091778u, 7269882896518450105u, 252074403984u }, + { 11113946551474911901u, 1372511258182263195u, 232410437116u }, + { 1963520352638130630u, 7571228438575951045u, 252162224104u }, + { 13342587341404964200u, 2992506536646070405u, 50028434172u }, + { 6240392545013573291u, 524517896824344605u, 22844752946u }, + { 14377490861349714758u, 15582941400898702772u, 29642774u }, + { 1717863312631397839u, 546812681195752981u, 0u }, + { 3611005143890591770u, 546812681u, 0u }, + { 1u, 0u, 21208498176u }, + { 13168252824351245504u, 3846112492507251065u, 138904285205u }, + { 735883891883379688u, 16681117750123089486u, 227812409738u }, + { 10609203866866106404u, 14986314536556547266u, 12139521251u }, + { 12358191111890306470u, 2573712825027107388u, 18406839052u }, + { 15229916368406413528u, 7504855874008324927u, 135518906642u }, + { 7241424335568075942u, 9572138030626879786u, 71461906823u }, + { 6049715868779871913u, 8520676959353394842u, 65729070919u }, + { 2000548404719336762u, 13448984662897903495u, 150668892225u }, + { 1410974761895205301u, 12338883700918130647u, 1942u }, + { 16000132467694084868u, 35835915874844u, 0u }, + { 16894908866816792556u, 35835u, 0u }, + { 1u, 0u, 96136462336u }, + { 589096329272056762u, 2517285787892561599u, 127235208544u }, + { 7097729792403256904u, 4338831817635138102u, 250084648831u }, + { 8553736750439287020u, 1561495325934523195u, 183664758778u }, + { 2114152625261065696u, 12262635050079398785u, 38604121015u }, + { 9817523680007641224u, 11144065765517284187u, 215065716774u }, + { 13047215537500048015u, 1212260522471875710u, 63525586135u }, + { 16755544192002345880u, 9695352922247418868u, 164391777855u }, + { 6930119832670648356u, 7227025834627242947u, 60520905380u }, + { 14560698131901886167u, 9609008238705447828u, 127314748u }, + { 16408020927503338035u, 2348542582773833227u, 0u }, + { 14274703510609809116u, 2348542582u, 0u }, + { 1u, 0u, 239195652096u }, + { 16428432973129962470u, 3609144142396852268u, 54627148527u }, + { 3721112279790863774u, 11568848377382068864u, 171545803830u }, + { 18032764903259620753u, 10068303578029323956u, 45631280555u }, + { 18058455550468776079u, 11645070846862630230u, 167674882605u }, + { 15692090139033993190u, 12449386705878485054u, 210814540455u }, + { 389416944300619393u, 15025619323517318417u, 140812947666u }, + { 12009691357260487293u, 14996237555047131271u, 75553539724u }, + { 13494259174449809900u, 10211005638256058412u, 90055009355u }, + { 18288583400616279877u, 1014743503555840529u, 151699359066u }, + { 7216107869057472u, 12900897707145290677u, 8343u }, + { 17237061291959073878u, 153914086704665u, 0u }, + { 1599418782488783273u, 153914u, 0u }, + { 1u, 0u, 22255763456u }, + { 9565464987240335777u, 4718003016239473661u, 140805878294u }, + { 857713933775880687u, 14865830648693666724u, 185799843980u }, + { 4621617820081363356u, 14754517212823091777u, 155602488249u }, + { 9630162611715632528u, 11113946551474911900u, 197106442651u }, + { 9283986497984645815u, 1963520352638130629u, 133723303109u }, + { 8981807745082630996u, 13342587341404964199u, 29338292357u }, + { 18350140531565934622u, 6240392545013573290u, 180779405341u }, + { 4411619033127524143u, 14377490861349714757u, 21093125556u }, + { 1852297584111266889u, 1717863312631397838u, 9195752981u }, + { 11746243463811666096u, 3611005143890591769u, 546812681u }, + { 6335244004343789147u, 10086913586276986678u, 0u }, + { 5109502367228239844u, 10086913586u, 0u }, + { 1603272682579847821u, 10u, 0u }, + { 1u, 0u, 121713852416u }, + { 6609546910952910052u, 13168252824351245503u, 78039892345u }, + { 3911171343112928288u, 735883891883379687u, 194575126094u }, + { 5254510615100863555u, 10609203866866106403u, 60669938882u }, + { 3881927570803887650u, 12358191111890306469u, 63825615420u }, + { 6379348759607163190u, 15229916368406413527u, 42392558399u }, + { 14595733737222406466u, 7241424335568075941u, 154327955754u }, + { 14670223432002373542u, 6049715868779871912u, 135108449946u }, + { 4045087795619708513u, 2000548404719336761u, 215076489095u }, + { 12598467307137142718u, 1410974761895205300u, 28867368919u }, + { 734704388050777108u, 16000132467694084867u, 251915874844u }, + { 5682201693687285822u, 16894908866816792555u, 35835u }, + { 11048712694145438788u, 661055968790248u, 0u }, + { 17871025777010319485u, 661055u, 0u }, + { 1u, 0u, 191031934976u }, + { 15268761435931663695u, 589096329272056761u, 54384768703u }, + { 5016238054648555438u, 7097729792403256903u, 59463698998u }, + { 14236047313993899750u, 8553736750439287019u, 129114608443u }, + { 6957759675154690848u, 2114152625261065695u, 91532209025u }, + { 18439367135478514473u, 9817523680007641223u, 126707290971u }, + { 8539004472540641041u, 13047215537500048014u, 244908319870u }, + { 1908462039431738399u, 16755544192002345879u, 195375682548u }, + { 714690453250792146u, 6930119832670648355u, 148789337027u }, + { 13782189447673929633u, 14560698131901886166u, 11889480596u }, + { 3584742913798803164u, 16408020927503338034u, 118773833227u }, + { 4347581515245125291u, 14274703510609809115u, 2348542582u }, + { 16836742268156371392u, 6429475823218628948u, 2u }, + { 11764082328865615308u, 43322963970u, 0u }, + { 5957633711383291746u, 43u, 0u }, + { 1u, 0u, 44890587136u }, + { 9917186842884466953u, 16428432973129962469u, 128201721900u }, + { 4751011869809829335u, 3721112279790863773u, 180977558144u }, + { 11068497969931435029u, 18032764903259620752u, 86978950836u }, + { 17118056985122509954u, 18058455550468776078u, 62850669910u }, + { 14607066080907684459u, 15692090139033993189u, 17021110334u }, + { 11768892370493391107u, 389416944300619392u, 135651046673u }, + { 4043396447647747170u, 12009691357260487292u, 44731525255u }, + { 1670341095362518057u, 13494259174449809899u, 17991426092u }, + { 3190817644167043165u, 18288583400616279876u, 181000391185u }, + { 10425820027224322486u, 7216107869057471u, 25934422965u }, + { 13139964660506311565u, 17237061291959073877u, 58086704665u }, + { 2297772885416059937u, 1599418782488783272u, 153914u }, + { 7677687919964523763u, 2839213766779714u, 0u }, + { 14144589152747892828u, 2839213u, 0u }, + { 1u, 0u, 253518544896u }, + { 17069730341503660290u, 9565464987240335776u, 164046496765u }, + { 18167423787163077107u, 857713933775880686u, 65250538404u }, + { 3765746945827805904u, 4621617820081363355u, 156522052161u }, + { 10241734342430761691u, 9630162611715632527u, 197503285916u }, + { 13345717282537140784u, 9283986497984645814u, 103486904773u }, + { 9313926784816939953u, 8981807745082630995u, 170994763111u }, + { 550974205049535019u, 18350140531565934621u, 69239154346u }, + { 4494692285504086222u, 4411619033127524142u, 206100413253u }, + { 1134308559863725587u, 1852297584111266888u, 25636765134u }, + { 17587558045116130233u, 11746243463811666095u, 54343434265u }, + { 9817142032346161594u, 6335244004343789146u, 50276986678u }, + { 6071944935834172568u, 5109502367228239843u, 10086913586u }, + { 11564168293299416955u, 1603272682579847820u, 10u }, + { 12458266507226064437u, 186070713419u, 0u }, + { 1304432355328256915u, 186u, 0u }, + { 1u, 0u, 191358304256u }, + { 15946798815542087355u, 6609546910952910051u, 231212025023u }, + { 12082566083831286138u, 3911171343112928287u, 35284847591u }, + { 11449623684706196411u, 5254510615100863554u, 165210439715u }, + { 17518743620362604446u, 3881927570803887649u, 215345825189u }, + { 9451061563087633805u, 6379348759607163189u, 165791236311u }, + { 13191114787623314926u, 14595733737222406465u, 168795274405u }, + { 8367349876734474799u, 14670223432002373541u, 57219284648u }, + { 6544253801674393507u, 4045087795619708512u, 180682964281u }, + { 16113906253336597498u, 12598467307137142717u, 3039828404u }, + { 10294087136797312392u, 734704388050777107u, 235308032771u }, + { 9127173070014462803u, 5682201693687285821u, 232598951915u }, + { 16266900839595484952u, 11048712694145438787u, 63968790248u }, + { 3299745387370952632u, 17871025777010319484u, 661055u }, + { 12061115182604399189u, 12194330274671844u, 0u }, + { 5066801222582989646u, 12194330u, 0u }, + { 1u, 0u, 185827721216u }, + { 7568423425299591513u, 15268761435931663694u, 71271930809u }, + { 16561505984665207377u, 5016238054648555437u, 235771737671u }, + { 4329114621856906245u, 14236047313993899749u, 223377180907u }, + { 1477500474861899139u, 6957759675154690847u, 135999600095u }, + { 16891579639263969684u, 18439367135478514472u, 142462900359u }, + { 4684451357140027420u, 8539004472540641040u, 151103457934u }, + { 14727186580409080709u, 1908462039431738398u, 35038743447u }, + { 15864176859687308834u, 714690453250792145u, 214747133987u }, + { 1755486942842684438u, 13782189447673929632u, 50194329302u }, + { 17417077516652710041u, 3584742913798803163u, 219235682866u }, + { 4290982361913532783u, 4347581515245125290u, 84912721627u }, + { 11826659981004351409u, 16836742268156371391u, 2637732180u }, + { 932930645678090820u, 11764082328865615307u, 43322963970u }, + { 12707792781328052617u, 5957633711383291745u, 43u }, + { 16491596426880311906u, 799167628880u, 0u }, + { 3092207065214166010u, 799u, 0u }, + { 1u, 0u, 229537611776u }, + { 8142946531605512550u, 9917186842884466952u, 157257552869u }, + { 5328402096432654515u, 4751011869809829334u, 144600024477u }, + { 1932004361303814512u, 11068497969931435028u, 142927971728u }, + { 2511477647985517771u, 17118056985122509953u, 229791850638u }, + { 17451375493324716694u, 14607066080907684458u, 128637992933u }, + { 9489266854478998489u, 11768892370493391106u, 124219192960u }, + { 8803053132063235169u, 4043396447647747169u, 235090549372u }, + { 16198682197142616773u, 1670341095362518056u, 68172974571u }, + { 13696242485403414202u, 3190817644167043164u, 191565184836u }, + { 16409082426079859931u, 10425820027224322485u, 85712318911u }, + { 11653410736879597610u, 13139964660506311564u, 168124562517u }, + { 13589514120653213261u, 2297772885416059936u, 66416208296u }, + { 8032934885905905774u, 7677687919964523762u, 173766779714u }, + { 2753021350129449273u, 14144589152747892827u, 2839213u }, + { 16974897459201404133u, 52374249726338269u, 0u }, + { 13398576176159101589u, 52374249u, 0u }, + { 1u, 0u, 160925351936u }, + { 10284586955251725351u, 17069730341503660289u, 238984858016u }, + { 5294476488634150891u, 18167423787163077106u, 155204141550u }, + { 15833244538135063323u, 3765746945827805903u, 143555205531u }, + { 10348512742273116664u, 10241734342430761690u, 182723472783u }, + { 13658504610142595663u, 13345717282537140783u, 83504908982u }, + { 11956362239240850266u, 9313926784816939952u, 29029868371u }, + { 13415901703662731781u, 550974205049535018u, 46243657757u }, + { 5161774027546852762u, 4494692285504086221u, 72061490990u }, + { 15274384838790587711u, 1134308559863725586u, 175953423432u }, + { 14233354597679374929u, 17587558045116130232u, 90532188335u }, + { 4274656492162486921u, 9817142032346161593u, 227329160794u }, + { 12040276505541795046u, 6071944935834172567u, 140626894819u }, + { 13238307206256765457u, 11564168293299416954u, 75675363980u }, + { 12850161204172713271u, 12458266507226064436u, 186070713419u }, + { 17531777095001445154u, 1304432355328256914u, 186u }, + { 5623628114515245990u, 3432398830065u, 0u }, + { 7357116143579573377u, 3432u, 0u }, + { 1u, 0u, 227864477696u }, + { 3555734177475596582u, 15946798815542087354u, 31654997219u }, + { 14001876724756424382u, 12082566083831286137u, 66620685343u }, + { 18159905057231476140u, 11449623684706196410u, 33949692994u }, + { 5585207679308509467u, 17518743620362604445u, 53512343073u }, + { 13948697622866724672u, 9451061563087633804u, 65715091765u }, + { 9807691927739036432u, 13191114787623314925u, 165453594945u }, + { 15818010096140820918u, 8367349876734474798u, 96354764709u }, + { 5629845624785010943u, 6544253801674393506u, 189873536608u }, + { 9517635131137734707u, 16113906253336597497u, 19558043581u }, + { 619338244618780585u, 10294087136797312391u, 61494785043u }, + { 11632367007491958899u, 9127173070014462802u, 67881830461u }, + { 12083314261009739916u, 16266900839595484951u, 124178879555u }, + { 16880538609458881650u, 3299745387370952631u, 228653834364u }, + { 17404223674486504228u, 12061115182604399188u, 26274671844u }, + { 7089067015287185433u, 5066801222582989645u, 12194330u }, + { 2592264228029443648u, 224945689727159819u, 0u }, + { 13413731084370224440u, 224945689u, 0u }, + { 1u, 0u, 78410285056u }, + { 9323915941641553425u, 7568423425299591512u, 173897801038u }, + { 12155831029092699564u, 16561505984665207376u, 229234681773u }, + { 17397171276588232676u, 4329114621856906244u, 31080095461u }, + { 11874560617553253769u, 1477500474861899138u, 40915694367u }, + { 13444839516837727954u, 16891579639263969683u, 16253944616u }, + { 16994416043584590671u, 4684451357140027419u, 30798362384u }, + { 15879694502877015730u, 14727186580409080708u, 209859998750u }, + { 4234647645735263359u, 15864176859687308833u, 160095165137u }, + { 7978589901512919496u, 1755486942842684437u, 219944181664u }, + { 6114237175390859894u, 17417077516652710040u, 170232614619u }, + { 8658612872088282708u, 4290982361913532782u, 191641124522u }, + { 10253813330683324853u, 11826659981004351408u, 203050574271u }, + { 13289465061747830991u, 932930645678090819u, 97688890827u }, + { 4123165538545565412u, 12707792781328052616u, 80894011233u }, + { 7846417485927038481u, 16491596426880311905u, 31167628880u }, + { 10562273346358018864u, 3092207065214166009u, 799u }, + { 2691512658346619120u, 14742040721959u, 0u }, + { 751187558544605998u, 14742u, 0u }, + { 1u, 0u, 8441430016u }, + { 3757709791947931308u, 8142946531605512549u, 214288853256u }, + { 3452755398462519465u, 5328402096432654514u, 20104734166u }, + { 3105818720159874523u, 1932004361303814511u, 129136147476u }, + { 16859138458894499364u, 2511477647985517770u, 106946040961u }, + { 12271894740606233755u, 17451375493324716693u, 2514414186u }, + { 5429638071845793701u, 9489266854478998488u, 97477214466u }, + { 145278150038876889u, 8803053132063235168u, 40878132321u }, + { 9050266019724932450u, 16198682197142616772u, 92742474792u }, + { 11907016253451490866u, 13696242485403414201u, 181889538140u }, + { 2472757296513770735u, 16409082426079859930u, 140631732661u }, + { 10558733798178239360u, 11653410736879597609u, 32736689036u }, + { 15917322570831255850u, 13589514120653213260u, 242435466272u }, + { 12254334656791355238u, 8032934885905905773u, 91149241586u }, + { 7869542424662730262u, 2753021350129449272u, 221920211035u }, + { 1378558986933000253u, 16974897459201404132u, 233726338269u }, + { 13521405041909411105u, 13398576176159101588u, 52374249u }, + { 3206744593298092012u, 966134380754314586u, 0u }, + { 13914648122214918505u, 966134380u, 0u }, + { 1u, 0u, 1557528576u }, + { 1235541077112082496u, 10284586955251725350u, 242287014145u }, + { 12014985518315533846u, 5294476488634150890u, 207858321906u }, + { 1561535086344155741u, 15833244538135063322u, 218560993999u }, + { 12761747276316224577u, 10348512742273116663u, 47740429018u }, + { 9745594781103966137u, 13658504610142595662u, 176648155695u }, + { 17514238702394846785u, 11956362239240850265u, 42727277488u }, + { 2428898913707151713u, 13415901703662731780u, 205279820330u }, + { 71666709959904945u, 5161774027546852761u, 18828026061u }, + { 4049380135452919193u, 15274384838790587710u, 184771591698u }, + { 18422240861777453733u, 14233354597679374928u, 185231729592u }, + { 2914504416394425696u, 4274656492162486920u, 151652704697u }, + { 12721377795748989418u, 12040276505541795045u, 122717650071u }, + { 2626074459217717422u, 13238307206256765456u, 52696608634u }, + { 4261529925046307655u, 12850161204172713270u, 146950399540u }, + { 11536038685430305586u, 17531777095001445153u, 241304857490u }, + { 12555757789435162768u, 5623628114515245989u, 104398830065u }, + { 11905178684546080059u, 7357116143579573376u, 3432u }, + { 14032797718924543051u, 63316582777114u, 0u }, + { 10750340288005853484u, 63316u, 0u }, + { 1u, 0u, 186192756736u }, + { 9660290106216358253u, 3555734177475596581u, 121759043258u }, + { 14820142034615351103u, 14001876724756424381u, 186984450425u }, + { 12674041783707777619u, 18159905057231476139u, 157302774714u }, + { 15386686816442679994u, 5585207679308509466u, 140756160413u }, + { 5679510383719146248u, 13948697622866724671u, 237531676044u }, + { 1391101719248678506u, 9807691927739036431u, 46857496045u }, + { 3364596672173710517u, 15818010096140820917u, 162305194542u }, + { 11276509210104319732u, 5629845624785010942u, 249515952034u }, + { 5316312656902630164u, 9517635131137734706u, 135033574393u }, + { 17470981304473644647u, 619338244618780584u, 82630591879u }, + { 7373293636384920591u, 11632367007491958898u, 23655037778u }, + { 7616810902585191937u, 12083314261009739915u, 183915095831u }, + { 12740295655921903924u, 16880538609458881649u, 84943484855u }, + { 18366635945916526940u, 17404223674486504227u, 77384299092u }, + { 4472171448243407067u, 7089067015287185432u, 11140526925u }, + { 229592460858185629u, 2592264228029443647u, 25727159819u }, + { 12749672866417114996u, 13413731084370224439u, 224945689u }, + { 9452256722867098693u, 4149515568880992958u, 0u }, + { 16251451636418604634u, 4149515568u, 0u }, + { 1u, 0u, 88505450496u }, + { 4515791283442995454u, 9323915941641553424u, 80658968920u }, + { 13306155670047701346u, 12155831029092699563u, 4943102544u }, + { 4456930152933417601u, 17397171276588232675u, 130643721220u }, + { 9089157128546489637u, 11874560617553253768u, 147728846210u }, + { 12437332180345515840u, 13444839516837727953u, 27921269139u }, + { 3433060408790452524u, 16994416043584590670u, 132860839963u }, + { 8275594526021936172u, 15879694502877015729u, 33229560708u }, + { 3846512444641107689u, 4234647645735263358u, 21432520225u }, + { 6210962618469046250u, 7978589901512919495u, 152331453461u }, + { 7272858906616296575u, 6114237175390859893u, 110469384344u }, + { 3710743300451225347u, 8658612872088282707u, 176555860334u }, + { 6424677242672030600u, 10253813330683324852u, 67720423344u }, + { 11485842256170301862u, 13289465061747830990u, 136223517251u }, + { 7355797963557024308u, 4123165538545565411u, 97425355144u }, + { 6358188982569427273u, 7846417485927038480u, 249572581985u }, + { 12475094728768767402u, 10562273346358018863u, 39145907193u }, + { 17288154837907896183u, 2691512658346619119u, 150040721959u }, + { 2983850577727105262u, 751187558544605997u, 14742u }, + { 13918604635001185935u, 271942652322184u, 0u }, + { 12033220395769876327u, 271942u, 0u }, + { 1u, 0u, 101203705856u }, + { 5782377197813462997u, 3757709791947931307u, 178187174245u }, + { 17732139848231399226u, 3452755398462519464u, 111168366770u }, + { 3628839527415562921u, 3105818720159874522u, 202913935727u }, + { 3188692267613601004u, 16859138458894499363u, 149665260746u }, + { 5168130193478377352u, 12271894740606233754u, 216294341269u }, + { 12556227529405091290u, 5429638071845793700u, 96007875544u }, + { 15087090312791441192u, 145278150038876888u, 196490615904u }, + { 10281804758610642494u, 9050266019724932449u, 185645480644u }, + { 14238177586158586580u, 11907016253451490865u, 218134048441u }, + { 7107927498217678128u, 2472757296513770734u, 41572390106u }, + { 3845814658485364450u, 10558733798178239359u, 76862879785u }, + { 714293333681725946u, 15917322570831255849u, 109664308812u }, + { 16766172658649116982u, 12254334656791355237u, 56426608749u }, + { 812461421432632215u, 7869542424662730261u, 228074731832u }, + { 15218024718633799196u, 1378558986933000252u, 148732996836u }, + { 8110797782612805146u, 13521405041909411104u, 90173837972u }, + { 15941193964933529227u, 3206744593298092011u, 108754314586u }, + { 14144280602323277933u, 13914648122214918504u, 966134380u }, + { 15072402647813125245u, 17822033662586700072u, 0u }, + { 10822706091283369889u, 17822033662u, 0u }, + { 15163844593710966731u, 17u, 0u }, + { 1u, 0u, 38066978816u }, + { 2408529687792073670u, 1235541077112082495u, 234651333670u }, + { 3980682212356510808u, 12014985518315533845u, 26084650986u }, + { 4202670442792148519u, 1561535086344155740u, 247691815706u }, + { 9419583343154651922u, 12761747276316224576u, 78528309751u }, + { 16359166491570434575u, 9745594781103966136u, 89949448782u }, + { 12567727056384237385u, 17514238702394846784u, 4131670873u }, + { 2068388267923286639u, 2428898913707151712u, 153003885060u }, + { 5689135844565021196u, 71666709959904944u, 62219517337u }, + { 3104061965171139313u, 4049380135452919192u, 80998671678u }, + { 7955173880156328016u, 18422240861777453732u, 136157995600u }, + { 1445179403240833754u, 2914504416394425695u, 229689627272u }, + { 12538201164459126715u, 12721377795748989417u, 16142359781u }, + { 7580606719088482667u, 2626074459217717421u, 54231018000u }, + { 8168318283218819755u, 4261529925046307654u, 33625369910u }, + { 5249615277755961676u, 11536038685430305585u, 165680648993u }, + { 6312997372068219831u, 12555757789435162767u, 128645381029u }, + { 9183815417025176703u, 11905178684546080058u, 26760719488u }, + { 10683849953373876937u, 14032797718924543050u, 84582777114u }, + { 17175012155615667568u, 10750340288005853483u, 63316u }, + { 18003508288378896912u, 1167984798111281u, 0u }, + { 14722554560950996951u, 1167984u, 0u }, + { 1u, 0u, 37523685376u }, + { 15059324482416394930u, 9660290106216358252u, 189803401509u }, + { 4134778595813308312u, 14820142034615351102u, 171687061181u }, + { 16321118342639660948u, 12674041783707777618u, 26834113963u }, + { 1523550293123468805u, 15386686816442679993u, 63307886874u }, + { 8016371634569878509u, 5679510383719146247u, 15075411775u }, + { 9884220139611134110u, 1391101719248678505u, 181182395151u }, + { 7218073002727840414u, 3364596672173710516u, 254611300789u }, + { 16062235669481359233u, 11276509210104319731u, 50288197886u }, + { 15558048660560338002u, 5316312656902630163u, 168947103794u }, + { 8394398745765058609u, 17470981304473644646u, 114399707048u }, + { 5693296366442904274u, 7373293636384920590u, 139412908146u }, + { 11783494675061161358u, 7616810902585191936u, 113690652811u }, + { 13377293110865447894u, 12740295655921903923u, 35995657329u }, + { 12840734051093062130u, 18366635945916526939u, 24242436899u }, + { 7009868331566697505u, 4472171448243407066u, 63012446232u }, + { 5019690705031194477u, 229592460858185628u, 55691161151u }, + { 8608277240439804984u, 12749672866417114995u, 190512407863u }, + { 12172482590657749222u, 9452256722867098692u, 48880992958u }, + { 16613484892678771990u, 16251451636418604633u, 4149515568u }, + { 5721488662757049244u, 2758075434182769113u, 4u }, + { 386931106438877039u, 76545051729u, 0u }, + { 10054429752182825659u, 76u, 0u }, + { 1u, 0u, 16244801536u }, + { 8634592106137071313u, 4515791283442995453u, 171721328144u }, + { 12626356501369830731u, 13306155670047701345u, 227241610667u }, + { 4803333258178976933u, 4456930152933417600u, 136492724195u }, + { 13613083223558209297u, 9089157128546489636u, 209674229128u }, + { 16106967997237446989u, 12437332180345515839u, 78186106577u }, + { 14832921244380020170u, 3433060408790452523u, 177448620878u }, + { 13774024637717231397u, 8275594526021936171u, 126208519857u }, + { 9673012968505228885u, 3846512444641107688u, 199336696958u }, + { 5391832334264815667u, 6210962618469046249u, 117394262471u }, + { 16514436292632703088u, 7272858906616296574u, 83201159797u }, + { 12025036352783454153u, 3710743300451225346u, 180348282451u }, + { 7059867105311401050u, 6424677242672030599u, 206622648756u }, + { 12769210631552594670u, 11485842256170301861u, 227398758606u }, + { 8328873878884556145u, 7355797963557024307u, 16344678115u }, + { 1016565892414238685u, 6358188982569427272u, 47676276240u }, + { 9662978461927250281u, 12475094728768767401u, 239937192751u }, + { 13729967277551868112u, 17288154837907896182u, 45161754863u }, + { 6371593776693359475u, 2983850577727105261u, 136754529069u }, + { 17617208110845643245u, 13918604635001185934u, 70652322184u }, + { 14960960225633086797u, 12033220395769876326u, 271942u }, + { 12090634301321662558u, 5016456510113118u, 0u }, + { 9409926148478635503u, 5016456u, 0u }, + { 1u, 0u, 171313463296u }, + { 4307062684900157136u, 5782377197813462996u, 168961261227u }, + { 15300759383869911853u, 17732139848231399225u, 218196719784u }, + { 16007534237643445447u, 3628839527415562920u, 35172859354u }, + { 7138502295759677634u, 3188692267613601003u, 154280164899u }, + { 8218537071653683708u, 5168130193478377351u, 164680674458u }, + { 2254219416760329296u, 12556227529405091289u, 216817872804u }, + { 3057410459568460683u, 15087090312791441191u, 97557377752u }, + { 8217810929938874370u, 10281804758610642493u, 49771853153u }, + { 11741126472498340929u, 14238177586158586579u, 238385321521u }, + { 1175325363726654805u, 7107927498217678127u, 127208482030u }, + { 9428843070696730900u, 3845814658485364449u, 41038721919u }, + { 12662500978715131896u, 714293333681725945u, 101908896041u }, + { 6443045597035184564u, 16766172658649116981u, 21044043621u }, + { 1921385512639171183u, 812461421432632214u, 60824970773u }, + { 10469475094355551399u, 15218024718633799195u, 32439687228u }, + { 14679174489076953574u, 8110797782612805145u, 235864173856u }, + { 11853074234719825644u, 15941193964933529226u, 104766762987u }, + { 8270896886596139124u, 14144280602323277932u, 40817076584u }, + { 16532667046659118126u, 15072402647813125244u, 254586700072u }, + { 148341279888833483u, 10822706091283369888u, 17822033662u }, + { 10364629296397276041u, 15163844593710966730u, 17u }, + { 14265682585545771671u, 328758493846u, 0u }, + { 13991741872911347878u, 328u, 0u }, + { 1u, 0u, 63130566656u }, + { 14029045786848724433u, 2408529687792073669u, 21215793215u }, + { 4005878521026842341u, 3980682212356510807u, 92227827221u }, + { 3428326338640386488u, 4202670442792148518u, 64510636636u }, + { 1010001558294829380u, 9419583343154651921u, 184886832192u }, + { 2012063724327403418u, 16359166491570434574u, 64681297848u }, + { 10997154538851372612u, 12567727056384237384u, 96112127552u }, + { 1917749645489607898u, 2068388267923286638u, 176308408672u }, + { 9763872523711218805u, 5689135844565021195u, 152168271536u }, + { 15875699078454059311u, 3104061965171139312u, 164431250840u }, + { 10966529452671276106u, 7955173880156328015u, 95078343332u }, + { 18073244132105736913u, 1445179403240833753u, 233679697247u }, + { 4435241176994913173u, 12538201164459126714u, 173410945513u }, + { 5464400086219074323u, 7580606719088482666u, 70442805421u }, + { 2445909179323258812u, 8168318283218819754u, 49284582214u }, + { 873962058644121211u, 5249615277755961675u, 143342228273u }, + { 16675872194112650857u, 6312997372068219830u, 58497855631u }, + { 10680102689274800355u, 9183815417025176702u, 74579172666u }, + { 2370498083108897524u, 10683849953373876936u, 43931059274u }, + { 15354400521451334666u, 17175012155615667567u, 49975972139u }, + { 259991949657381021u, 18003508288378896911u, 112798111281u }, + { 10335286558772966917u, 14722554560950996950u, 1167984u }, + { 16337526653906757263u, 21545516652742137u, 0u }, + { 12040967163702784894u, 21545516u, 0u }, + { 1u, 0u, 108816367616u }, + { 3373309160242342187u, 15059324482416394929u, 62224146796u }, + { 13639841054510584221u, 4134778595813308311u, 82884769598u }, + { 15898855427739708031u, 16321118342639660947u, 185082591826u }, + { 4544387940067005419u, 1523550293123468804u, 7434568377u }, + { 5281598644835398575u, 8016371634569878508u, 105535824647u }, + { 13675642405083408835u, 9884220139611134109u, 180391292521u }, + { 3973392623768015721u, 7218073002727840413u, 243870735540u }, + { 4491285101509114191u, 16062235669481359232u, 19843403507u }, + { 15002304272810270500u, 15558048660560338001u, 102455061267u }, + { 17325098540619893468u, 8394398745765058608u, 14308634214u }, + { 1137212864974584822u, 5693296366442904273u, 638784526u }, + { 2619406097224859078u, 11783494675061161357u, 51725184512u }, + { 8281347529729293732u, 13377293110865447893u, 91696097587u }, + { 11344719666795450104u, 12840734051093062129u, 218380005723u }, + { 17283870506679425783u, 7009868331566697504u, 156272117978u }, + { 11054210518010603775u, 5019690705031194476u, 115466655644u }, + { 6399455551799092885u, 8608277240439804983u, 68659871603u }, + { 12930529916573967170u, 12172482590657749221u, 89900618820u }, + { 14550097052337552404u, 16613484892678771989u, 217310162521u }, + { 12487632712206414748u, 5721488662757049243u, 81020975577u }, + { 5791017277843595715u, 386931106438877038u, 76545051729u }, + { 10227264183449036113u, 10054429752182825658u, 76u }, + { 2006055278511721441u, 1412006979354u, 0u }, + { 128746359043876333u, 1412u, 0u }, + { 1u, 0u, 253468082176u }, + { 7408146306870995754u, 8634592106137071312u, 97684476157u }, + { 8299024588195267962u, 12626356501369830730u, 128260389217u }, + { 1497052939192040881u, 4803333258178976932u, 36737966720u }, + { 16771714264265803747u, 13613083223558209296u, 63873160484u }, + { 142988846654429432u, 16106967997237446988u, 43804094271u }, + { 11839838367716104145u, 14832921244380020169u, 43746691371u }, + { 6019646776647679765u, 13774024637717231396u, 232524375083u }, + { 4611972391702034948u, 9673012968505228884u, 233292291816u }, + { 16447182322205429545u, 5391832334264815666u, 126895249385u }, + { 2113477168726764245u, 16514436292632703087u, 2651878526u }, + { 3536261187802311516u, 12025036352783454152u, 135382716162u }, + { 18444381860986709854u, 7059867105311401049u, 165692220295u }, + { 4734315730275909838u, 12769210631552594669u, 51451509157u }, + { 9974936316849658174u, 8328873878884556144u, 72055108147u }, + { 11864423681540657642u, 1016565892414238684u, 169523831112u }, + { 8207245621417902667u, 9662978461927250280u, 118744303017u }, + { 7992526918695295028u, 13729967277551868111u, 237345404790u }, + { 8679354522130259987u, 6371593776693359474u, 142955030765u }, + { 6065763799692166461u, 17617208110845643244u, 102811035278u }, + { 18143341109049024976u, 14960960225633086796u, 94655434598u }, + { 15242492331283350570u, 12090634301321662557u, 136510113118u }, + { 9986352353182266963u, 9409926148478635502u, 5016456u }, + { 17340463289911536077u, 92537289398950870u, 0u }, + { 7359344614214233035u, 92537289u, 0u }, + { 1u, 0u, 212233486336u }, + { 419091135888749535u, 4307062684900157135u, 57829455828u }, + { 1073142712661309790u, 15300759383869911852u, 168867770169u }, + { 11076438902195672286u, 16007534237643445446u, 235386978984u }, + { 1820390940081322073u, 7138502295759677633u, 135445527787u }, + { 18417808973944523597u, 8218537071653683707u, 217122201479u }, + { 10251294197731582957u, 2254219416760329295u, 39165742553u }, + { 1502394029870156428u, 3057410459568460682u, 61445488423u }, + { 321014853559106075u, 8217810929938874369u, 211636487741u }, + { 2390953058510591778u, 11741126472498340928u, 47063714515u }, + { 10685224265907994087u, 1175325363726654804u, 225511138607u }, + { 5967405799190505023u, 9428843070696730899u, 249686435553u }, + { 11210723659228214761u, 12662500978715131895u, 53349278201u }, + { 12327123641078462773u, 6443045597035184563u, 150104158517u }, + { 1709976940107894237u, 1921385512639171182u, 27567551382u }, + { 16607686590938553511u, 10469475094355551398u, 25795759643u }, + { 18332088094272679457u, 14679174489076953573u, 138642556441u }, + { 2946170632136780882u, 11853074234719825643u, 108448366218u }, + { 4824449494694383419u, 8270896886596139123u, 124896237676u }, + { 17008332258693407134u, 16532667046659118125u, 160008041596u }, + { 1773419466622750661u, 148341279888833482u, 202561867680u }, + { 3892343466023784379u, 10364629296397276040u, 150773344202u }, + { 12001571085575422796u, 14265682585545771670u, 72758493846u }, + { 12933506765500977582u, 13991741872911347877u, 328u }, + { 11884830007749143734u, 6064523798049u, 0u }, + { 9662368568096205337u, 6064u, 0u }, + { 1u, 0u, 197760516096u }, + { 16801499925276664442u, 14029045786848724432u, 87217159109u }, + { 10492407990787637084u, 4005878521026842340u, 38185849943u }, + { 7673849751013230269u, 3428326338640386487u, 17054752294u }, + { 6046724489853072367u, 1010001558294829379u, 14109074193u }, + { 3723941391207507903u, 2012063724327403417u, 72596156942u }, + { 16844122108860347659u, 10997154538851372611u, 110103961416u }, + { 10622020182694668027u, 1917749645489607897u, 11529300590u }, + { 8741198820686854862u, 9763872523711218804u, 240860623371u }, + { 6855480461211306807u, 15875699078454059310u, 79594496752u }, + { 10005708458011566304u, 10966529452671276105u, 217979752527u }, + { 8932093106442919061u, 18073244132105736912u, 186240434905u }, + { 9062763476260756743u, 4435241176994913172u, 106296225722u }, + { 13664977682032775521u, 5464400086219074322u, 170132593002u }, + { 1078499125430623453u, 2445909179323258811u, 75047377578u }, + { 6554586738078431161u, 873962058644121210u, 182904000843u }, + { 12177313698643242883u, 16675872194112650856u, 126578969526u }, + { 16615072271904633953u, 10680102689274800354u, 200128504958u }, + { 16375404983106569285u, 2370498083108897523u, 111832363720u }, + { 13552251831473522729u, 15354400521451334665u, 15014094191u }, + { 8330500218412111874u, 259991949657381020u, 214560277007u }, + { 7044338079053294004u, 10335286558772966916u, 249885659094u }, + { 2688849443046530184u, 16337526653906757262u, 44652742137u }, + { 855940991879596845u, 12040967163702784893u, 21545516u }, + { 7344363609485825662u, 397444631628981487u, 0u }, + { 11602660525134634992u, 397444631u, 0u }, + { 1u, 0u, 177182867456u }, + { 16945343208344873835u, 3373309160242342186u, 151739417265u }, + { 9617992661337889145u, 13639841054510584220u, 147861878679u }, + { 18280344933262742088u, 15898855427739708030u, 4246351763u }, + { 5179975582362777795u, 4544387940067005418u, 236286316036u }, + { 1798918997870037130u, 5281598644835398574u, 157741358060u }, + { 6327667344756325883u, 13675642405083408834u, 157215398045u }, + { 18380327574124007701u, 3973392623768015720u, 128243473053u }, + { 18015447557304295289u, 4491285101509114190u, 81813276544u }, + { 10315590748073249878u, 15002304272810270499u, 48939195473u }, + { 7697916092577993382u, 17325098540619893467u, 209061648432u }, + { 3124132817942110723u, 1137212864974584821u, 141141998289u }, + { 7448238998520507049u, 2619406097224859077u, 213448932749u }, + { 13892823322374205297u, 8281347529729293731u, 241614998485u }, + { 11042137840046332564u, 11344719666795450103u, 32936960497u }, + { 10513966307445593804u, 17283870506679425782u, 108599249952u }, + { 9388437460943526958u, 11054210518010603774u, 55346915180u }, + { 10967228614677896228u, 6399455551799092884u, 229700965431u }, + { 2310996671540235542u, 12930529916573967169u, 21788762341u }, + { 4989110555003898587u, 14550097052337552403u, 155676955925u }, + { 16271452421983657679u, 12487632712206414747u, 110313931675u }, + { 9523160181437090473u, 5791017277843595714u, 186554421102u }, + { 13137707423765072250u, 10227264183449036112u, 26108748474u }, + { 16846859744221860705u, 2006055278511721440u, 132006979354u }, + { 7767140033449795569u, 128746359043876332u, 1412u }, + { 17169456915721160017u, 26046931378436u, 0u }, + { 17180899661833327819u, 26046u, 0u }, + { 1u, 0u, 208401596416u }, + { 17572520700934791416u, 7408146306870995753u, 74449891024u }, + { 17968798858233825417u, 8299024588195267961u, 164081155402u }, + { 15338423313945305609u, 1497052939192040880u, 16909196452u }, + { 17895321323836726301u, 16771714264265803746u, 76007751440u }, + { 814069333008965773u, 142988846654429431u, 201641838924u }, + { 7200328959852723947u, 11839838367716104144u, 36326325705u }, + { 759884557248133773u, 6019646776647679764u, 84250015524u }, + { 13410165861863974851u, 4611972391702034947u, 50891603540u }, + { 6278452420856351570u, 16447182322205429544u, 111114571826u }, + { 9072115382556676442u, 2113477168726764244u, 200191701103u }, + { 2755882551854926563u, 3536261187802311515u, 89999871944u }, + { 8496072611504649269u, 18444381860986709853u, 237256647769u }, + { 4122009033579215815u, 4734315730275909837u, 112540742381u }, + { 10222217724450527221u, 9974936316849658173u, 220643171696u }, + { 2064539481554006325u, 11864423681540657641u, 104444915676u }, + { 7935605886598063693u, 8207245621417902666u, 207433275752u }, + { 7805147585347548429u, 7992526918695295027u, 114470508751u }, + { 5709020905457661273u, 8679354522130259986u, 236328825714u }, + { 16257370307404906674u, 6065763799692166460u, 76983552492u }, + { 14971258192939373646u, 18143341109049024975u, 93826297164u }, + { 1133404845901376390u, 15242492331283350569u, 238541361245u }, + { 9460827548162822047u, 9986352353182266962u, 214940028398u }, + { 1273897659779791346u, 17340463289911536076u, 201398950870u }, + { 7833262224435092783u, 7359344614214233034u, 92537289u }, + { 3033420566713364587u, 1707011694817242694u, 0u }, + { 15075466825360349103u, 1707011694u, 0u }, + { 1u, 0u, 207022718976u }, + { 2484134775182816690u, 419091135888749534u, 44058175183u }, + { 18400539815335991277u, 1073142712661309789u, 198600454956u }, + { 485494064952118286u, 11076438902195672285u, 193098683590u }, + { 17577048805241314891u, 1820390940081322072u, 251998431425u }, + { 2863946907557583807u, 18417808973944523596u, 79555723771u }, + { 13045307417786230800u, 10251294197731582956u, 138081444943u }, + { 12032088871615097766u, 1502394029870156427u, 1017402250u }, + { 8848763446997690580u, 321014853559106074u, 64129613825u }, + { 10031289150307672684u, 2390953058510591777u, 84579247168u }, + { 11592215575498656563u, 10685224265907994086u, 19323493716u }, + { 15894436747956898388u, 5967405799190505022u, 247607734547u }, + { 2091546719588500923u, 11210723659228214760u, 179668254711u }, + { 5863809244813756109u, 12327123641078462772u, 110092698035u }, + { 11303008753675411245u, 1709976940107894236u, 166900304494u }, + { 13238426537506910532u, 16607686590938553510u, 229993784486u }, + { 17258458071023005565u, 18332088094272679456u, 235159712229u }, + { 8385733444777075179u, 2946170632136780881u, 115261533931u }, + { 9530757096163247300u, 4824449494694383418u, 45922023539u }, + { 14423000845391072217u, 17008332258693407133u, 202096137261u }, + { 10953140011159884311u, 1773419466622750660u, 136211004362u }, + { 12228340237948264127u, 3892343466023784378u, 150650606472u }, + { 11279134946966259189u, 12001571085575422795u, 165701126806u }, + { 14640097792684582651u, 12933506765500977581u, 33644277925u }, + { 6232313315128656728u, 11884830007749143733u, 176523798049u }, + { 16136121832933322088u, 9662368568096205336u, 6064u }, + { 15074767079673358271u, 111870718431542u, 0u }, + { 13252722804829281908u, 111870u, 0u }, + { 1u, 0u, 208910811136u }, + { 7740175894281560509u, 16801499925276664441u, 228568794576u }, + { 15670495392425593226u, 10492407990787637083u, 183416000228u }, + { 15152257626756992778u, 7673849751013230268u, 67327793591u }, + { 4090073428152440422u, 6046724489853072366u, 153201875267u }, + { 14450327772834205584u, 3723941391207507902u, 67913121689u }, + { 4466091895542494216u, 16844122108860347658u, 217575820867u }, + { 10454115378553795377u, 10622020182694668026u, 116473861337u }, + { 2267817233475657788u, 8741198820686854861u, 46371636340u }, + { 5500455702636497521u, 6855480461211306806u, 73542410542u }, + { 15178768299492252549u, 10005708458011566303u, 208484209737u }, + { 7062359872332045590u, 8932093106442919060u, 148491293392u }, + { 12297347290027942576u, 9062763476260756742u, 18740779924u }, + { 8030124596941085588u, 13664977682032775520u, 187058465554u }, + { 6526656990996654843u, 1078499125430623452u, 122355324859u }, + { 6254287345256979850u, 6554586738078431160u, 104660133498u }, + { 6642007136244870032u, 12177313698643242882u, 226900704872u }, + { 2027592955437164718u, 16615072271904633952u, 243887712482u }, + { 942718349157325567u, 16375404983106569284u, 9734669043u }, + { 14617066671884002278u, 13552251831473522728u, 156451597321u }, + { 6831631114396133348u, 8330500218412111873u, 4381874332u }, + { 14603040013386939258u, 7044338079053294003u, 142145762820u }, + { 9906106765319401103u, 2688849443046530183u, 125046400654u }, + { 1396179595609933063u, 855940991879596844u, 239398138749u }, + { 11524884268464976417u, 7344363609485825661u, 23628981487u }, + { 382929570730827274u, 11602660525134634991u, 397444631u }, + { 6109721884461301381u, 7331559403129590068u, 0u }, + { 2390514825000339691u, 7331559403u, 0u }, + { 6116191454763441755u, 7u, 0u }, + { 1u, 0u, 42918608896u }, + { 11598868771099176310u, 16945343208344873834u, 156521392426u }, + { 14449966445520085105u, 9617992661337889144u, 126990979484u }, + { 11675595287405614726u, 18280344933262742087u, 234280807038u }, + { 15860796398550489897u, 5179975582362777794u, 174097519594u }, + { 16180408435245829662u, 1798918997870037129u, 194343023534u }, + { 13756992797154950706u, 6327667344756325882u, 104996399554u }, + { 8830551328786758466u, 18380327574124007700u, 78976619368u }, + { 16699955256560951264u, 18015447557304295288u, 35559209294u }, + { 10038983627153402074u, 10315590748073249877u, 219417304867u }, + { 15085100736692127346u, 7697916092577993381u, 245169359579u }, + { 10007783780289711125u, 3124132817942110722u, 197403769845u }, + { 17596907048353602192u, 7448238998520507048u, 163753131461u }, + { 13530650344896573509u, 13892823322374205296u, 247598595491u }, + { 6337724853398437005u, 11042137840046332563u, 246569963255u }, + { 12768885008904063297u, 10513966307445593803u, 254508948214u }, + { 2759773619512884114u, 9388437460943526957u, 148594534654u }, + { 8434364600126655292u, 10967228614677896227u, 65125279380u }, + { 3843827521199949338u, 2310996671540235541u, 19270460225u }, + { 4661660852957808994u, 4989110555003898586u, 155882077203u }, + { 15298044134177324417u, 16271452421983657678u, 194516251547u }, + { 7747773274913338217u, 9523160181437090472u, 80712196546u }, + { 10348785912020632966u, 13137707423765072249u, 224913270096u }, + { 4175372293197190170u, 16846859744221860704u, 236421057504u }, + { 11326064156813083145u, 7767140033449795568u, 4930758124u }, + { 8100407170505981763u, 17169456915721160016u, 190931378436u }, + { 1706556116319916846u, 17180899661833327818u, 26046u }, + { 15028897280749641942u, 480481077043500u, 0u }, + { 1421201742071739121u, 480481u, 0u }, + { 1u, 0u, 41952608256u }, + { 8480737406125178272u, 17572520700934791415u, 121974090537u }, + { 10947205650755620361u, 17968798858233825416u, 176831497593u }, + { 868577942165647781u, 15338423313945305608u, 226970107312u }, + { 16017710019091388479u, 17895321323836726300u, 247044130786u }, + { 6610879150827623375u, 814069333008965772u, 208390330615u }, + { 12110095866223762092u, 7200328959852723946u, 20041193424u }, + { 7756802952949470775u, 759884557248133772u, 3726966548u }, + { 2941800790804618759u, 13410165861863974850u, 40340355587u }, + { 11703600274199927522u, 6278452420856351569u, 212491800360u }, + { 806737539257940346u, 9072115382556676441u, 91149396692u }, + { 14579028397110132023u, 2755882551854926562u, 93460573019u }, + { 14247808875344366934u, 8496072611504649268u, 205223454557u }, + { 9713379923695279513u, 4122009033579215814u, 61554147533u }, + { 2246428675703313877u, 10222217724450527220u, 233111918909u }, + { 3549783776592680620u, 2064539481554006324u, 74430190057u }, + { 12645029747929213033u, 7935605886598063692u, 51423117898u }, + { 16279009267476580506u, 7805147585347548428u, 18309486643u }, + { 343358782242907186u, 5709020905457661272u, 60881313810u }, + { 10077054739085890321u, 16257370307404906673u, 207811593532u }, + { 10526715404712173586u, 14971258192939373645u, 41061441999u }, + { 11438715865125144243u, 1133404845901376389u, 82512872489u }, + { 5040916178827294801u, 9460827548162822046u, 204069058130u }, + { 16643761637275849508u, 1273897659779791345u, 202424641996u }, + { 4852542977279030386u, 7833262224435092782u, 70164442058u }, + { 7883373066544387129u, 3033420566713364586u, 110817242694u }, + { 16699064314768500978u, 15075466825360349102u, 1707011694u }, + { 6805863634444817214u, 13042063791413317777u, 1u }, + { 2266540253968903500u, 31488807865u, 0u }, + { 9016913589137908810u, 31u, 0u }, + { 1u, 0u, 222134665216u }, + { 11654451024602552034u, 2484134775182816689u, 93997495262u }, + { 5299013208454526793u, 18400539815335991276u, 221026318685u }, + { 14918550373926182540u, 485494064952118285u, 88952853725u }, + { 6225552657491071054u, 17577048805241314890u, 76155254872u }, + { 10344713496596235785u, 2863946907557583806u, 236707187532u }, + { 12972405634433280209u, 13045307417786230799u, 139652260844u }, + { 12911885282402784945u, 12032088871615097765u, 26479692427u }, + { 6934311832970995868u, 8848763446997690579u, 33543797274u }, + { 9975729197003430461u, 10031289150307672683u, 230628415265u }, + { 1982857556803548935u, 11592215575498656562u, 62861639142u }, + { 2095735223386298223u, 15894436747956898387u, 232113382974u }, + { 7110931538347639365u, 2091546719588500922u, 52317877736u }, + { 15822183724630969535u, 5863809244813756108u, 220612737332u }, + { 16931982690156327501u, 11303008753675411244u, 166717656540u }, + { 6740069226761666110u, 13238426537506910531u, 32935582886u }, + { 3138792961008474902u, 17258458071023005564u, 81454591520u }, + { 12154594426971851390u, 8385733444777075178u, 58516663377u }, + { 15780127219221910902u, 9530757096163247299u, 157781872442u }, + { 16421541930960194381u, 14423000845391072216u, 196593770909u }, + { 7485894627196740576u, 10953140011159884310u, 186662899652u }, + { 8897269432694476707u, 12228340237948264126u, 75611443130u }, + { 17189823634941678805u, 11279134946966259188u, 173793641291u }, + { 9585582064286255216u, 14640097792684582650u, 181337854381u }, + { 12835472279575022097u, 6232313315128656727u, 24874740917u }, + { 6776016669542754608u, 16136121832933322087u, 54817204760u }, + { 18340015775620871027u, 15074767079673358270u, 254718431542u }, + { 5254188752292365830u, 13252722804829281907u, 111870u }, + { 6798802596750151183u, 2063650512248692u, 0u }, + { 9449320530215272000u, 2063650u, 0u }, + { 1u, 0u, 121419595776u }, + { 17110720482574968811u, 7740175894281560508u, 91849499257u }, + { 16172441693558688213u, 15670495392425593225u, 188821405531u }, + { 6234654946353717320u, 15152257626756992777u, 238221723324u }, + { 11180283100679445438u, 4090073428152440421u, 190783353838u }, + { 14852260031176961272u, 14450327772834205583u, 10242107326u }, + { 4481533167346438750u, 4466091895542494215u, 250566718730u }, + { 4269718344362365664u, 10454115378553795376u, 205122938618u }, + { 11520029752381101466u, 2267817233475657787u, 54298180301u }, + { 16778682550309368417u, 5500455702636497520u, 223822842678u }, + { 9687587467301363608u, 15178768299492252548u, 148382851295u }, + { 10093971076828497318u, 7062359872332045589u, 6666640532u }, + { 1913763026490934696u, 12297347290027942575u, 96435313926u }, + { 12701450127613557000u, 8030124596941085587u, 220353810784u }, + { 8974572160711134644u, 6526656990996654842u, 184339045596u }, + { 9890000077336694124u, 6254287345256979849u, 130360063928u }, + { 4292326716201059148u, 6642007136244870031u, 96109916034u }, + { 14644519175104337420u, 2027592955437164717u, 68051104864u }, + { 5051178622270136798u, 942718349157325566u, 40792392772u }, + { 675983118348065839u, 14617066671884002277u, 1370343464u }, + { 4431647660065117244u, 6831631114396133347u, 179791632385u }, + { 8316115180008411962u, 14603040013386939257u, 135537011123u }, + { 9621158095544965602u, 9906106765319401102u, 44075687047u }, + { 15283478958951102072u, 1396179595609933062u, 125624765228u }, + { 13981553073094447813u, 11524884268464976416u, 239020758653u }, + { 4558368743929911607u, 382929570730827273u, 52331208687u }, + { 15217004469858477791u, 6109721884461301380u, 235129590068u }, + { 11589190369996515737u, 2390514825000339690u, 7331559403u }, + { 3670624237398152929u, 6116191454763441754u, 7u }, + { 13471713758418039777u, 135243399970u, 0u }, + { 4489936967610296411u, 135u, 0u }, + { 1u, 0u, 106628775936u }, + { 9052049303222747950u, 11598868771099176309u, 120783334250u }, + { 1011330006193020538u, 14449966445520085104u, 71632935288u }, + { 17412075644359478612u, 11675595287405614725u, 194859815495u }, + { 6358678384745980468u, 15860796398550489896u, 137877141698u }, + { 15262353928842850919u, 16180408435245829661u, 250745768073u }, + { 11145257686438581736u, 13756992797154950705u, 20478705146u }, + { 1600562031807691890u, 8830551328786758465u, 120905306388u }, + { 6775147337046626724u, 16699955256560951263u, 85544214392u }, + { 15772127322106297822u, 10038983627153402073u, 165817764949u }, + { 4141472200527441474u, 15085100736692127345u, 2542523045u }, + { 18246007807879281267u, 10007783780289711124u, 168953930242u }, + { 960746958654787123u, 17596907048353602191u, 112733498024u }, + { 11355981212264408477u, 13530650344896573508u, 147343568752u }, + { 1573078209576251481u, 6337724853398437004u, 203692202643u }, + { 6245294478780491367u, 12768885008904063296u, 45149607627u }, + { 7523292955659721510u, 2759773619512884113u, 35457227821u }, + { 14454736751015226505u, 8434364600126655291u, 21208374307u }, + { 7219786377781411316u, 3843827521199949337u, 218252709141u }, + { 10597123082209392431u, 4661660852957808993u, 206829308634u }, + { 6922353544343010714u, 15298044134177324416u, 168420007630u }, + { 14317523356293377430u, 7747773274913338216u, 121561008808u }, + { 4057766168681892717u, 10348785912020632965u, 96226347385u }, + { 15214083611901244045u, 4175372293197190169u, 240613987168u }, + { 8390569016883950721u, 11326064156813083144u, 80439123952u }, + { 10680472538208175055u, 8100407170505981762u, 202092512592u }, + { 12173567833130544927u, 1706556116319916845u, 44814718154u }, + { 1386341248286610026u, 15028897280749641941u, 225077043500u }, + { 12487300952797237352u, 1421201742071739120u, 480481u }, + { 2614759871804869720u, 8863311460481781u, 0u }, + { 8494389567327729477u, 8863311u, 0u }, + { 1u, 0u, 247459741696u }, + { 6260469580539185878u, 8480737406125178271u, 136593449207u }, + { 17818573101084525841u, 10947205650755620360u, 8047085704u }, + { 2201029069927307150u, 868577942165647780u, 28868321800u }, + { 10397997613804897039u, 16017710019091388478u, 140358376476u }, + { 14269915965770103741u, 6610879150827623374u, 234656489612u }, + { 16776139909196366727u, 12110095866223762091u, 140420497130u }, + { 6246513436385199720u, 7756802952949470774u, 194159475340u }, + { 2926026498821554288u, 2941800790804618758u, 81634453442u }, + { 15725499391028340982u, 11703600274199927521u, 89043733329u }, + { 8576577277771450827u, 806737539257940345u, 226790330713u }, + { 15523351176022259335u, 14579028397110132022u, 52772375266u }, + { 4775158829429176134u, 14247808875344366933u, 198526563380u }, + { 10141817222123532462u, 9713379923695279512u, 244121779142u }, + { 12847658900242624586u, 2246428675703313876u, 52192434164u }, + { 13708197964460514655u, 3549783776592680619u, 76685488436u }, + { 1951540006613246932u, 12645029747929213032u, 12882486860u }, + { 9979297327280092199u, 16279009267476580505u, 88018613516u }, + { 15381307706282553684u, 343358782242907185u, 177546278232u }, + { 10037428657543061177u, 10077054739085890320u, 77570654385u }, + { 2584877324547208668u, 10526715404712173585u, 133620094029u }, + { 1126624732730703576u, 11438715865125144242u, 158273268613u }, + { 1501064139624981020u, 5040916178827294800u, 241902260126u }, + { 5219661484955306109u, 16643761637275849507u, 46263056881u }, + { 5336997298570282212u, 4852542977279030385u, 106427358510u }, + { 12191131175733833362u, 7883373066544387128u, 174905258090u }, + { 3707068178994436536u, 16699064314768500977u, 145368946606u }, + { 5045484691732942022u, 6805863634444817213u, 185122869393u }, + { 14847900542908711232u, 2266540253968903499u, 31488807865u }, + { 9097257915916965135u, 9016913589137908809u, 31u }, + { 2472027983230314217u, 580865979874u, 0u }, + { 15974509111133272205u, 580u, 0u }, + { 1u, 0u, 177631789056u }, + { 12099486841948187399u, 11654451024602552033u, 236287260081u }, + { 5319910566029976328u, 5299013208454526792u, 13808736236u }, + { 11549214421017285864u, 14918550373926182539u, 74337487885u }, + { 1998791413186046700u, 6225552657491071053u, 190560788042u }, + { 17075171930090011210u, 10344713496596235784u, 15703235518u }, + { 15158296003813501474u, 12972405634433280208u, 165699954703u }, + { 1360083178079384115u, 12911885282402784944u, 211375909797u }, + { 6167980558592741158u, 6934311832970995867u, 107540785363u }, + { 3630180428124865653u, 9975729197003430460u, 50107490923u }, + { 2276550099763657677u, 1982857556803548934u, 83113610034u }, + { 407006713016100655u, 2095735223386298222u, 186385484371u }, + { 14242579061653496002u, 7110931538347639364u, 204857722298u }, + { 17944493332678643704u, 15822183724630969534u, 44917884620u }, + { 987185901870869452u, 16931982690156327500u, 67365379884u }, + { 5578665155415167745u, 6740069226761666109u, 124170154307u }, + { 4849210377429577536u, 3138792961008474901u, 234658901884u }, + { 10811995403388891862u, 12154594426971851389u, 195855442410u }, + { 7051931074990177294u, 15780127219221910901u, 216890213571u }, + { 2030832259446664275u, 16421541930960194380u, 22405811160u }, + { 6069512651054767896u, 7485894627196740575u, 190482321942u }, + { 10608701253763958799u, 8897269432694476706u, 244931862206u }, + { 15700053443426906717u, 17189823634941678804u, 250519635444u }, + { 17759719234725541222u, 9585582064286255215u, 87695812346u }, + { 15187321568916405210u, 12835472279575022096u, 103367328599u }, + { 11040156458113129594u, 6776016669542754607u, 190994214247u }, + { 2800727824598008497u, 18340015775620871026u, 115284830142u }, + { 2997236166375604479u, 5254188752292365829u, 116368563827u }, + { 6260091886451512841u, 6798802596750151182u, 34512248692u }, + { 17573059315228347474u, 9449320530215271999u, 2063650u }, + { 7519453664590169251u, 38067632857031246u, 0u }, + { 15809436065653866529u, 38067632u, 0u }, + { 1u, 0u, 188927574016u }, + { 228921437623588922u, 17110720482574968810u, 137876709820u }, + { 2195862230003073884u, 16172441693558688212u, 9337981321u }, + { 960207412233973688u, 6234654946353717319u, 101606084361u }, + { 2464387149230492479u, 11180283100679445437u, 143805142629u }, + { 3631866936444955213u, 14852260031176961271u, 7242944399u }, + { 1578304441149380227u, 4481533167346438749u, 48231461895u }, + { 18190538519673445181u, 4269718344362365663u, 59624502064u }, + { 1271000736479934749u, 11520029752381101465u, 112909574203u }, + { 18292963032817745634u, 16778682550309368416u, 132525165168u }, + { 17168014021925537455u, 9687587467301363607u, 21547195268u }, + { 18046757712870378949u, 10093971076828497317u, 175103745301u }, + { 14857998893911743220u, 1913763026490934695u, 147688546991u }, + { 11933607369968684575u, 12701450127613556999u, 250486512531u }, + { 3483798509902859162u, 8974572160711134643u, 137536137978u }, + { 7378828438829845831u, 9890000077336694123u, 143232687497u }, + { 15791137430347699565u, 4292326716201059147u, 173793880975u }, + { 17044141236829932641u, 14644519175104337419u, 254273824941u }, + { 9075651910862456484u, 5051178622270136797u, 229036645118u }, + { 17811207355884564095u, 675983118348065838u, 227240240101u }, + { 4438638126207305937u, 4431647660065117243u, 121450817507u }, + { 12507972635512950185u, 8316115180008411961u, 142521564025u }, + { 14658269128098109408u, 9621158095544965601u, 6828519054u }, + { 3642436268910286111u, 15283478958951102071u, 32757941510u }, + { 3783099432964819561u, 13981553073094447812u, 9247109664u }, + { 9497579866027539638u, 4558368743929911606u, 132824915465u }, + { 3395179445046271361u, 15217004469858477790u, 234628251268u }, + { 5938502732309497276u, 11589190369996515736u, 90198984938u }, + { 5793671185917606255u, 3670624237398152928u, 34730303066u }, + { 889272970253526588u, 13471713758418039776u, 135243399970u }, + { 8594177504370135501u, 4489936967610296410u, 135u }, + { 7374354721120724712u, 2494800386918u, 0u }, + { 14764532643665507567u, 2494u, 0u }, + { 1u, 0u, 117490712576u }, + { 5392404173658087695u, 9052049303222747949u, 112054824309u }, + { 4976586473237854316u, 1011330006193020537u, 133943910512u }, + { 6308932742419013569u, 17412075644359478611u, 40344704645u }, + { 4831846642430703059u, 6358678384745980467u, 29827373864u }, + { 18139507855949846901u, 15262353928842850918u, 49604185629u }, + { 4865833876326628410u, 11145257686438581735u, 65086766641u }, + { 14296661839130179261u, 1600562031807691889u, 223367281473u }, + { 9254773150378118248u, 6775147337046626723u, 217855008735u }, + { 12174712433727875143u, 15772127322106297821u, 113224509657u }, + { 705653145340915199u, 4141472200527441473u, 20989118065u }, + { 17763928858962481812u, 18246007807879281266u, 143052082196u }, + { 3982836567612046296u, 960746958654787122u, 68615608975u }, + { 12730849277561967739u, 11355981212264408476u, 140085276740u }, + { 17314488764367235908u, 1573078209576251480u, 64338558092u }, + { 15951418930590301119u, 6245294478780491366u, 145407838528u }, + { 7193356087283467261u, 7523292955659721509u, 59783592849u }, + { 17592945625696089446u, 14454736751015226504u, 25391385403u }, + { 3554461664875361428u, 7219786377781411315u, 97574471193u }, + { 2213779057785318208u, 10597123082209392430u, 128375261537u }, + { 3880940796082421148u, 6922353544343010713u, 104776154496u }, + { 4528237545358141043u, 14317523356293377429u, 133219971944u }, + { 11681196539088147363u, 4057766168681892716u, 25824757125u }, + { 9835005502912643017u, 15214083611901244044u, 8454853657u }, + { 4964088126040986696u, 8390569016883950720u, 66578989576u }, + { 3355564873147047622u, 10680472538208175054u, 45659930434u }, + { 1853093467828272927u, 12173567833130544926u, 213075153709u }, + { 14755341584803008677u, 1386341248286610025u, 240676937941u }, + { 4701571132542556621u, 12487300952797237351u, 245141746416u }, + { 6128849686644853851u, 2614759871804869719u, 79460481781u }, + { 12026867901170202094u, 8494389567327729476u, 8863311u }, + { 17909760324981426303u, 163499238157084246u, 0u }, + { 2897692901883393664u, 163499238u, 0u }, + { 1u, 0u, 159339380736u }, + { 12323704802554838154u, 6260469580539185877u, 8965946783u }, + { 7135886931147821732u, 17818573101084525840u, 164119318024u }, + { 15341283120292884947u, 2201029069927307149u, 62563676580u }, + { 3092789040392634166u, 10397997613804897038u, 206773573694u }, + { 8811761390822097865u, 14269915965770103740u, 171909436366u }, + { 16870860798610218169u, 16776139909196366726u, 54338624171u }, + { 17452041453591904833u, 6246513436385199719u, 6158620214u }, + { 10314783684009874908u, 2926026498821554287u, 225852481030u }, + { 4932636630789274903u, 15725499391028340981u, 121464937185u }, + { 18143884346082124480u, 8576577277771450826u, 54841522553u }, + { 2823209155405527322u, 15523351176022259334u, 85258861878u }, + { 16195396106620226251u, 4775158829429176133u, 152549789013u }, + { 1150544491807648944u, 10141817222123532461u, 212696472984u }, + { 7767455475523884824u, 12847658900242624585u, 171743122900u }, + { 15204378045683991808u, 13708197964460514654u, 104105793195u }, + { 17239732561718805622u, 1951540006613246931u, 153540978792u }, + { 12886430624522800062u, 9979297327280092198u, 49833822361u }, + { 18162250541178258136u, 15381307706282553683u, 16544130097u }, + { 17028935366700158084u, 10037428657543061176u, 17140126480u }, + { 16075467823964198637u, 2584877324547208667u, 178061074449u }, + { 9803858825574498304u, 1126624732730703575u, 80081372850u }, + { 17464070808143041817u, 1501064139624981019u, 35282958416u }, + { 17682703471239266776u, 5219661484955306108u, 113289319203u }, + { 18147688354161351336u, 5336997298570282211u, 56660882545u }, + { 6663423873348080051u, 12191131175733833361u, 241200960568u }, + { 9417270363716235133u, 3707068178994436535u, 61273516273u }, + { 9295013721571344179u, 5045484691732942021u, 75804906301u }, + { 6199479138350037783u, 14847900542908711231u, 73493163339u }, + { 887603005365085688u, 9097257915916965134u, 226134008905u }, + { 333989628642975696u, 2472027983230314216u, 68865979874u }, + { 4620735991403939439u, 15974509111133272204u, 580u }, + { 12418523063962801201u, 10715086071862u, 0u }, + { 1587745622680169419u, 10715u, 0u }, + { 1u, 0u, 225655914496u }, + { 10968905082284365638u, 12099486841948187398u, 72288392929u }, + { 14076907092801977812u, 5319910566029976327u, 139626084168u }, + { 3438322122816124202u, 11549214421017285863u, 77108354699u }, + { 14645413324829073676u, 1998791413186046699u, 8925646925u }, + { 12271281439492289999u, 17075171930090011209u, 208821732872u }, + { 6233751789862708246u, 15158296003813501473u, 176073730256u }, + { 1962644459455827991u, 1360083178079384114u, 155334366896u }, + { 8726934184642952500u, 6167980558592741157u, 60196792475u }, + { 4531087719737475147u, 3630180428124865652u, 6123412028u }, + { 481513520412720775u, 2276550099763657676u, 110022063878u }, + { 992149349835802669u, 407006713016100654u, 68772091758u }, + { 11165474436676191361u, 14242579061653496001u, 190972772932u }, + { 10240785855143707184u, 17944493332678643703u, 76053515454u }, + { 10059329918238932466u, 987185901870869451u, 61302420044u }, + { 14791716450947031886u, 5578665155415167744u, 21262876221u }, + { 15378882314737417403u, 4849210377429577535u, 125586119445u }, + { 14726970229242271128u, 10811995403388891861u, 117382285949u }, + { 5090110549507128156u, 7051931074990177293u, 76110091637u }, + { 17185220781106503841u, 2030832259446664274u, 223329028940u }, + { 9858517691519529306u, 6069512651054767895u, 162575098847u }, + { 5595905546638020703u, 10608701253763958798u, 212851101602u }, + { 15555173226968030256u, 15700053443426906716u, 111962756308u }, + { 10745236628845355771u, 17759719234725541221u, 16823306351u }, + { 9973314042399760760u, 15187321568916405209u, 47598488080u }, + { 4374506813558796576u, 11040156458113129593u, 114151827759u }, + { 15960826480426749933u, 2800727824598008496u, 5162480498u }, + { 9636454862798615738u, 2997236166375604478u, 14339360261u }, + { 17973331528911319269u, 6260091886451512840u, 63952637454u }, + { 7366495200039369602u, 17573059315228347473u, 78407630399u }, + { 10505831326526933399u, 7519453664590169250u, 176857031246u }, + { 2803218632575724145u, 15809436065653866528u, 38067632u }, + { 8425731874431741636u, 702223880805592151u, 0u }, + { 14860552245711912111u, 702223880u, 0u }, + { 1u, 0u, 234012409856u }, + { 6993664200669526994u, 228921437623588921u, 212119037930u }, + { 4065363582031999356u, 2195862230003073883u, 71052052948u }, + { 6899780515342669867u, 960207412233973687u, 189133594695u }, + { 17713500890201844939u, 2464387149230492478u, 247196883901u }, + { 6445781125105107086u, 3631866936444955212u, 93085560055u }, + { 13563044070717478571u, 1578304441149380226u, 223986111069u }, + { 13167612994149348885u, 18190538519673445180u, 153068901087u }, + { 5505463469596727288u, 1271000736479934748u, 96991663513u }, + { 12125446212518819372u, 18292963032817745633u, 151930679904u }, + { 12537707724735421794u, 17168014021925537454u, 165978316695u }, + { 15173675086703777069u, 18046757712870378948u, 167805453733u }, + { 13535510174093048476u, 14857998893911743219u, 7646922151u }, + { 10698912997087096629u, 11933607369968684574u, 179188857095u }, + { 16952559548431933861u, 3483798509902859161u, 107400007091u }, + { 13528255827744249993u, 7378828438829845830u, 75856039275u }, + { 14122167436324771955u, 15791137430347699564u, 11923964747u }, + { 13071007137740038297u, 17044141236829932640u, 221491992075u }, + { 13011887609328904025u, 9075651910862456483u, 46965547485u }, + { 3116434332871336590u, 17811207355884564094u, 59240619054u }, + { 9050993820536772770u, 4438638126207305936u, 57678058555u }, + { 11993719123438634238u, 12507972635512950184u, 225794626361u }, + { 1414857165879849301u, 14658269128098109407u, 119197456865u }, + { 13819438220812375094u, 3642436268910286110u, 196205082231u }, + { 6073063033888264440u, 3783099432964819560u, 54514864836u }, + { 6828883869150720294u, 9497579866027539637u, 222184053046u }, + { 4548265621068768345u, 3395179445046271360u, 152321926878u }, + { 10422524923581371874u, 5938502732309497275u, 224314075544u }, + { 1858996082510682634u, 5793671185917606254u, 224048207584u }, + { 890276727450878316u, 889272970253526587u, 90465891296u }, + { 3886008133802710905u, 8594177504370135500u, 102399764570u }, + { 612074409233016757u, 7374354721120724711u, 190800386918u }, + { 3927020336901729264u, 14764532643665507566u, 2494u }, + { 5298603480094474942u, 46020944252475u, 0u }, + { 17418383752590430025u, 46020u, 0u }, + { 1u, 0u, 45292322816u }, + { 8973799690601597929u, 5392404173658087694u, 121269781293u }, + { 1343055462055792431u, 4976586473237854315u, 83342007929u }, + { 17425118728683169659u, 6308932742419013568u, 51261934931u }, + { 18389781726026675967u, 4831846642430703058u, 102983344691u }, + { 272526939565961561u, 18139507855949846900u, 231263777382u }, + { 11293026845930963228u, 4865833876326628409u, 113775023591u }, + { 13997416438903902597u, 14296661839130179260u, 163501702257u }, + { 6186605805999441184u, 9254773150378118247u, 221659992483u }, + { 4401776373281836138u, 12174712433727875142u, 65038253533u }, + { 16338917089754547008u, 705653145340915198u, 114962984513u }, + { 13337700757935003056u, 17763928858962481811u, 50215910002u }, + { 14612496890816348693u, 3982836567612046295u, 156690140722u }, + { 3219935399907691719u, 12730849277561967738u, 88938620316u }, + { 10887238730052330387u, 17314488764367235907u, 102864728152u }, + { 360256418697768294u, 15951418930590301118u, 37389952614u }, + { 321440824631118565u, 7193356087283467260u, 136953715493u }, + { 10069228080701402580u, 17592945625696089445u, 243192687752u }, + { 9428069607611622975u, 3554461664875361427u, 46120009203u }, + { 14736799017468812344u, 2213779057785318207u, 153210386222u }, + { 10875332567307979280u, 3880940796082421147u, 149245476249u }, + { 4611492910339012807u, 4528237545358141042u, 108633238933u }, + { 10743508637597314786u, 11681196539088147362u, 140533156716u }, + { 9356196315668016028u, 9835005502912643016u, 128269103756u }, + { 15755598617722189347u, 4964088126040986695u, 206181905536u }, + { 1275276394173375542u, 3355564873147047621u, 30100456398u }, + { 12644999363867216251u, 1853093467828272926u, 105799888670u }, + { 4553830511509832021u, 14755341584803008676u, 103254872681u }, + { 8869400642218174412u, 4701571132542556620u, 87332245607u }, + { 16570849151159054040u, 6128849686644853850u, 68651977815u }, + { 16127119334101797673u, 12026867901170202093u, 86970890052u }, + { 9686867250420930550u, 17909760324981426302u, 230157084246u }, + { 10678226869774428035u, 2897692901883393663u, 163499238u }, + { 7767227962910162068u, 3016028602530220424u, 0u }, + { 9780840471948993674u, 3016028602u, 0u }, + { 1u, 0u, 213668069376u }, + { 6288709332106746357u, 12323704802554838153u, 16386837205u }, + { 9066785620141948673u, 7135886931147821731u, 141831652624u }, + { 8442375916704414909u, 15341283120292884946u, 14167660429u }, + { 11604629218100425803u, 3092789040392634165u, 188477686542u }, + { 3877248044010875762u, 8811761390822097864u, 134914571196u }, + { 16435137704395217283u, 16870860798610218168u, 103946077062u }, + { 14994442577577813271u, 17452041453591904832u, 111559165543u }, + { 4410105917142436089u, 10314783684009874907u, 245267398767u }, + { 4632574728444936970u, 4932636630789274902u, 202983581941u }, + { 9117147535650050359u, 18143884346082124479u, 134153046474u }, + { 588939301256904809u, 2823209155405527321u, 69877954182u }, + { 324393982565305683u, 16195396106620226250u, 173062371141u }, + { 9380909186923521175u, 1150544491807648943u, 73421074605u }, + { 4463385697777230217u, 7767455475523884823u, 94824230985u }, + { 16378985502426333808u, 15204378045683991807u, 211934567774u }, + { 18210894922387834354u, 17239732561718805621u, 38698574803u }, + { 1555748035329493205u, 12886430624522800061u, 83984577574u }, + { 4277055533891898507u, 18162250541178258135u, 184923140435u }, + { 11574429772510874408u, 17028935366700158083u, 219871452856u }, + { 17391099253493808815u, 16075467823964198636u, 215531468251u }, + { 5791212393959129882u, 9803858825574498303u, 27946729175u }, + { 11254268231455680880u, 17464070808143041816u, 124958581275u }, + { 16355477587312235322u, 17682703471239266775u, 227983788156u }, + { 2411485149249320633u, 18147688354161351335u, 145361224931u }, + { 12763114642070638360u, 6663423873348080050u, 183510511249u }, + { 1147543073987366419u, 9417270363716235132u, 197503883703u }, + { 8410777835225272692u, 9295013721571344178u, 63336074437u }, + { 8134725822306818018u, 6199479138350037782u, 14048117055u }, + { 8899607004752328377u, 887603005365085687u, 232018105614u }, + { 690976506652396830u, 333989628642975695u, 140250490600u }, + { 12281570945595192074u, 4620735991403939438u, 54673209484u }, + { 12592957291365552899u, 12418523063962801200u, 219086071862u }, + { 13595807339013970272u, 1587745622680169418u, 10715u }, + { 9698096389749839992u, 197658450495420u, 0u }, + { 8310173728816391804u, 197658u, 0u }, +}; + +inline constexpr int __TABLE_SIZE_2 = 69; +inline constexpr int __ADDITIONAL_BITS_2 = 120; + +inline constexpr uint16_t __POW10_OFFSET_2[__TABLE_SIZE_2] = { + 0, 2, 6, 12, 20, 29, 40, 52, 66, 80, + 95, 112, 130, 150, 170, 192, 215, 240, 265, 292, + 320, 350, 381, 413, 446, 480, 516, 552, 590, 629, + 670, 712, 755, 799, 845, 892, 940, 989, 1040, 1092, + 1145, 1199, 1254, 1311, 1369, 1428, 1488, 1550, 1613, 1678, + 1743, 1810, 1878, 1947, 2017, 2088, 2161, 2235, 2311, 2387, + 2465, 2544, 2625, 2706, 2789, 2873, 2959, 3046, 3133 +}; + +inline constexpr uint8_t __MIN_BLOCK_2[__TABLE_SIZE_2] = { + 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, + 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, + 8, 9, 9, 10, 11, 11, 12, 12, 13, 13, + 14, 14, 15, 15, 16, 16, 17, 17, 18, 19, + 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, + 24, 25, 26, 26, 27, 27, 28, 28, 29, 29, + 30, 30, 31, 31, 32, 32, 33, 34, 0 +}; + +inline constexpr uint64_t __POW10_SPLIT_2[3133][3] = { + { 0u, 0u, 3906250u }, + { 0u, 0u, 202000000000u }, + { 0u, 11153727427136454656u, 59u }, + { 0u, 7205759403792793600u, 59604644775u }, + { 0u, 0u, 167390625000u }, + { 0u, 0u, 232000000000u }, + { 0u, 16777216000000000u, 0u }, + { 0u, 12945425605062557696u, 909494u }, + { 0u, 4388757836872548352u, 182701772928u }, + { 0u, 1152921504606846976u, 128237915039u }, + { 0u, 0u, 159062500000u }, + { 0u, 0u, 160000000000u }, + { 0u, 256000000000u, 0u }, + { 0u, 16192327041775828992u, 13u }, + { 0u, 15024075324038053888u, 13877787807u }, + { 0u, 5449091666327633920u, 159814456755u }, + { 0u, 2494994193563254784u, 179295395851u }, + { 0u, 4611686018427387904u, 11135253906u }, + { 0u, 0u, 146250000000u }, + { 0u, 0u, 128000000000u }, + { 0u, 3906250u, 0u }, + { 0u, 3906250000000000u, 0u }, + { 0u, 4368439412768899072u, 211758u }, + { 0u, 1563676642168012800u, 46236813575u }, + { 0u, 11532349341402398720u, 7084767080u }, + { 0u, 9048364970084925440u, 104625169910u }, + { 0u, 16609275425742389248u, 246490512847u }, + { 0u, 0u, 207900390625u }, + { 0u, 0u, 225000000000u }, + { 11153727427136454656u, 59u, 0u }, + { 7205759403792793600u, 59604644775u, 0u }, + { 0u, 4264412554261970152u, 3u }, + { 0u, 14485570586272534528u, 3231174267u }, + { 0u, 17827675094632103936u, 123785264354u }, + { 0u, 7347197909193981952u, 226966440203u }, + { 0u, 13677404030777688064u, 11398292396u }, + { 0u, 3810326759732150272u, 172741453558u }, + { 0u, 9943947977234055168u, 246206558227u }, + { 0u, 0u, 19539062500u }, + { 0u, 0u, 228000000000u }, + { 12945425605062557696u, 909494u, 0u }, + { 4388757836872548352u, 909494701772928u, 0u }, + { 1152921504606846976u, 14878706826214591391u, 49303u }, + { 0u, 4387341015746028192u, 151806576313u }, + { 0u, 651726680428265472u, 185237838233u }, + { 0u, 2570638187944738816u, 153035330174u }, + { 0u, 7419175577111756800u, 126139354575u }, + { 0u, 17299322326264840192u, 207402194313u }, + { 0u, 7990511638862102528u, 137937798142u }, + { 0u, 16717361816799281152u, 254433166503u }, + { 0u, 0u, 167906250000u }, + { 0u, 0u, 16000000000u }, + { 16192327041775828992u, 13u, 0u }, + { 15024075324038053888u, 13877787807u, 0u }, + { 5449091666327633920u, 13877787807814456755u, 0u }, + { 2494994193563254784u, 9707857417284919307u, 752316384u }, + { 4611686018427387904u, 1844515466944871826u, 224526264005u }, + { 0u, 15167599819856275072u, 197099991383u }, + { 0u, 14830185305589481472u, 87822237233u }, + { 0u, 6163721531743535104u, 49803945956u }, + { 0u, 14122847407012052992u, 228334136013u }, + { 0u, 335491783960035328u, 205765601092u }, + { 0u, 941252322120433664u, 68018187046u }, + { 0u, 11529215046068469760u, 38051025390u }, + { 0u, 0u, 238625000000u }, + { 0u, 0u, 64000000000u }, + { 4368439412768899072u, 211758u, 0u }, + { 1563676642168012800u, 211758236813575u, 0u }, + { 11532349341402398720u, 8061591463141767016u, 11479u }, + { 9048364970084925440u, 16628725344207857142u, 215437019748u }, + { 16609275425742389248u, 3555541870038531535u, 100901445007u }, + { 0u, 18316647450161853665u, 143192746310u }, + { 0u, 16709574568378075648u, 70992947447u }, + { 0u, 7696022835795591168u, 247905827852u }, + { 0u, 16664449640376041472u, 12417202233u }, + { 0u, 3109186955116544000u, 57903381625u }, + { 0u, 10515518101817131008u, 121168549362u }, + { 0u, 9961962375743537152u, 242570047378u }, + { 0u, 9223372036854775808u, 146540039062u }, + { 0u, 0u, 150500000000u }, + { 14485570586272534528u, 3231174267u, 0u }, + { 17827675094632103936u, 3231174267785264354u, 0u }, + { 7347197909193981952u, 748977172262750475u, 175162308u }, + { 13677404030777688064u, 15965033457315095468u, 196040602133u }, + { 3810326759732150272u, 16809402149066729206u, 21865466197u }, + { 9943947977234055168u, 7563769067065700371u, 85911239516u }, + { 0u, 13550322810840051428u, 92410032742u }, + { 0u, 8663209637545764864u, 102734564471u }, + { 0u, 8969247575312957440u, 119469633535u }, + { 0u, 6193172891660451840u, 255486223885u }, + { 0u, 3427954273864908800u, 13335732575u }, + { 0u, 10058367555266936832u, 95185829773u }, + { 0u, 13907115649320091648u, 141545265197u }, + { 0u, 0u, 45753906250u }, + { 0u, 0u, 74000000000u }, + { 14878706826214591391u, 49303u, 0u }, + { 4387341015746028192u, 49303806576313u, 0u }, + { 651726680428265472u, 14106411361315920281u, 2672u }, + { 2570638187944738816u, 3609034283485221502u, 112764710092u }, + { 7419175577111756800u, 9896072247338192335u, 204195646140u }, + { 17299322326264840192u, 8889095178479228297u, 188536467151u }, + { 7990511638862102528u, 3631796911038383102u, 207481878815u }, + { 16717361816799281152u, 898318840772166823u, 31196880105u }, + { 0u, 17293677953982795024u, 233048697961u }, + { 0u, 7353628266884669440u, 105937492160u }, + { 0u, 2404693032470315008u, 192398640987u }, + { 0u, 9191155893041889280u, 91130358670u }, + { 0u, 6353946855033798656u, 142498253559u }, + { 0u, 3767824038248841216u, 247344448149u }, + { 0u, 7205759403792793600u, 149204254150u }, + { 0u, 0u, 198390625000u }, + { 0u, 0u, 232000000000u }, + { 9707857417284919307u, 752316384u, 0u }, + { 1844515466944871826u, 752316384526264005u, 0u }, + { 15167599819856275072u, 17063068157692817751u, 40783152u }, + { 14830185305589481472u, 5385330256507239985u, 48924990778u }, + { 6163721531743535104u, 3373050282752075748u, 58291939338u }, + { 14122847407012052992u, 4116064001262906061u, 10182853422u }, + { 335491783960035328u, 11306582046748043076u, 46223132276u }, + { 941252322120433664u, 17035410946089626406u, 116612931040u }, + { 11529215046068469760u, 15618595715183448558u, 224923491477u }, + { 0u, 5141740092277295680u, 149846685770u }, + { 0u, 16973644291514990592u, 74278734288u }, + { 0u, 14625255268443750400u, 208920143100u }, + { 0u, 14021170507320131584u, 252792836676u }, + { 0u, 4451355232865091584u, 68760089176u }, + { 0u, 12891553933348044800u, 88241308450u }, + { 0u, 1152921504606846976u, 34698852539u }, + { 0u, 0u, 187062500000u }, + { 0u, 0u, 160000000000u }, + { 8061591463141767016u, 11479u, 0u }, + { 16628725344207857142u, 11479437019748u, 0u }, + { 3555541870038531535u, 5562205901560339855u, 622u }, + { 18316647450161853665u, 2106077949367544134u, 110301527786u }, + { 16709574568378075648u, 7496855998374373623u, 234114170714u }, + { 7696022835795591168u, 229183437194837004u, 90406405378u }, + { 16664449640376041472u, 465169186276472889u, 2012424059u }, + { 3109186955116544000u, 2152980561625316473u, 123025216872u }, + { 10515518101817131008u, 2059790725449340402u, 104116713310u }, + { 9961962375743537152u, 17891190926410198930u, 94111661478u }, + { 9223372036854775808u, 9930696175609809814u, 166969883403u }, + { 0u, 7276914261609005312u, 11538344118u }, + { 0u, 10539762974036983808u, 182394482312u }, + { 0u, 12851089458992250880u, 136571361695u }, + { 0u, 9449311677678878720u, 159696658955u }, + { 0u, 8699564697382289408u, 11512248212u }, + { 0u, 4224376450473525248u, 148471604347u }, + { 0u, 4611686018427387904u, 123229003906u }, + { 0u, 0u, 130250000000u }, + { 0u, 0u, 128000000000u }, + { 748977172262750475u, 175162308u, 0u }, + { 15965033457315095468u, 175162308040602133u, 0u }, + { 16809402149066729206u, 13756840147955779925u, 9495567u }, + { 7563769067065700371u, 13788447602092505948u, 15745759798u }, + { 13550322810840051428u, 4972540435632173670u, 54747473242u }, + { 8663209637545764864u, 2844874687533091959u, 90269561957u }, + { 8969247575312957440u, 15377573779532804095u, 101154220965u }, + { 6193172891660451840u, 17824715805091194381u, 165833619944u }, + { 3427954273864908800u, 18277569135638159711u, 232966279779u }, + { 10058367555266936832u, 4254645803379752845u, 99990829008u }, + { 13907115649320091648u, 2933643244178200621u, 208230644811u }, + { 0u, 17188148801879487562u, 75159033118u }, + { 0u, 11069762501163246592u, 30931771413u }, + { 0u, 11676570643941818368u, 21600093027u }, + { 0u, 17840016768744030208u, 99632988162u }, + { 0u, 16463817321652158464u, 2967109246u }, + { 0u, 6954191143357644800u, 126892505325u }, + { 0u, 5080060379673919488u, 237376987457u }, + { 0u, 0u, 65275390625u }, + { 0u, 0u, 161000000000u }, + { 14106411361315920281u, 2672u, 0u }, + { 3609034283485221502u, 2672764710092u, 0u }, + { 9896072247338192335u, 16433563478020213436u, 144u }, + { 8889095178479228297u, 4194750497955655375u, 144890865261u }, + { 3631796911038383102u, 2691539602252904735u, 109227397880u }, + { 898318840772166823u, 3775467271962795241u, 248145908654u }, + { 17293677953982795024u, 16980212613224918121u, 174204668490u }, + { 7353628266884669440u, 4172857038337333440u, 74920499170u }, + { 2404693032470315008u, 5936867627376461659u, 226226211033u }, + { 9191155893041889280u, 17856837443266866062u, 217321838238u }, + { 6353946855033798656u, 8956297047799810807u, 158968021097u }, + { 3767824038248841216u, 15356974049716912789u, 105485521835u }, + { 7205759403792793600u, 6923608913322982854u, 171832503231u }, + { 0u, 4855902993563955944u, 191375329591u }, + { 0u, 13835893222288330752u, 55263239028u }, + { 0u, 9114973913760137216u, 116750045274u }, + { 0u, 17937099003422310400u, 90494123725u }, + { 0u, 7007960010734960640u, 205972372085u }, + { 0u, 7683422439270776832u, 117379902273u }, + { 0u, 720575940379279360u, 65416519165u }, + { 0u, 0u, 253039062500u }, + { 0u, 0u, 228000000000u }, + { 17063068157692817751u, 40783152u, 0u }, + { 5385330256507239985u, 40783152924990778u, 0u }, + { 3373050282752075748u, 2768933352715741194u, 2210859u }, + { 4116064001262906061u, 15201941611824153390u, 43150104177u }, + { 11306582046748043076u, 1418128541727000180u, 113824098906u }, + { 17035410946089626406u, 5353350204565757408u, 90076876902u }, + { 15618595715183448558u, 1721001680354286741u, 102290205696u }, + { 5141740092277295680u, 637631411660453962u, 93295688u }, + { 16973644291514990592u, 1630012588870568400u, 72034566068u }, + { 14625255268443750400u, 9253063571656828156u, 180088363159u }, + { 14021170507320131584u, 6029146854993203780u, 151501609581u }, + { 4451355232865091584u, 16987401965352759896u, 109326840705u }, + { 12891553933348044800u, 14499131620542087970u, 129920888905u }, + { 1152921504606846976u, 1978417255298660539u, 73785999500u }, + { 0u, 5790079354402454176u, 140107250214u }, + { 0u, 13748918935842078720u, 38313880830u }, + { 0u, 18047438014740692992u, 254745330388u }, + { 0u, 3116889656839372800u, 212978353575u }, + { 0u, 15995952446606147584u, 167168966926u }, + { 0u, 12530140063251562496u, 14867142319u }, + { 0u, 16717361816799281152u, 175679260253u }, + { 0u, 0u, 93906250000u }, + { 0u, 0u, 16000000000u }, + { 5562205901560339855u, 622u, 0u }, + { 2106077949367544134u, 622301527786u, 0u }, + { 7496855998374373623u, 13558973353698967386u, 33u }, + { 229183437194837004u, 6228991722850501890u, 33735033418u }, + { 465169186276472889u, 16886831391703377787u, 74337674317u }, + { 2152980561625316473u, 1181713637872883048u, 77915436964u }, + { 2059790725449340402u, 12393932434925221726u, 164064060824u }, + { 17891190926410198930u, 10684799845419711910u, 152671876423u }, + { 9930696175609809814u, 4590318792215640843u, 71579224160u }, + { 7276914261609005312u, 6383712187366189238u, 96248841680u }, + { 10539762974036983808u, 1904270214927675016u, 208346061731u }, + { 12851089458992250880u, 3711506775113308575u, 163103230695u }, + { 9449311677678878720u, 8091219444738793995u, 231201201185u }, + { 8699564697382289408u, 39436684991068052u, 33438625885u }, + { 4224376450473525248u, 18025182908196512891u, 93002137866u }, + { 4611686018427387904u, 7853924592034603138u, 10977147123u }, + { 0u, 4815749283615688320u, 243425762105u }, + { 0u, 14242399906544287744u, 57261062291u }, + { 0u, 76242322576113664u, 147772082046u }, + { 0u, 10858088421377703936u, 126004133104u }, + { 0u, 14293835879041466368u, 240588618152u }, + { 0u, 12182236992037191680u, 168774870395u }, + { 0u, 11529215046068469760u, 123660400390u }, + { 0u, 0u, 6625000000u }, + { 0u, 0u, 64000000000u }, + { 13756840147955779925u, 9495567u, 0u }, + { 13788447602092505948u, 9495567745759798u, 0u }, + { 4972540435632173670u, 14000097438505379162u, 514755u }, + { 2844874687533091959u, 16451062686452429925u, 195758946802u }, + { 15377573779532804095u, 4009347599785716645u, 242891813895u }, + { 17824715805091194381u, 16544162347546196456u, 7217347168u }, + { 18277569135638159711u, 17674258299745817187u, 96896860837u }, + { 4254645803379752845u, 5215238411201214416u, 165958123462u }, + { 2933643244178200621u, 14253990228345322571u, 198282718640u }, + { 17188148801879487562u, 11214836553940194590u, 176772710358u }, + { 11069762501163246592u, 14620711348380590101u, 214607957507u }, + { 11676570643941818368u, 6638710787931587427u, 3792590350u }, + { 17840016768744030208u, 17320000343692853250u, 14359885232u }, + { 16463817321652158464u, 75147386268843646u, 176938919100u }, + { 6954191143357644800u, 17938801582125480173u, 188004073747u }, + { 5080060379673919488u, 6573358613626446145u, 19972464382u }, + { 0u, 8688505427903736481u, 254356342484u }, + { 0u, 539870168696556032u, 212471004823u }, + { 0u, 9002861336394465280u, 151029266420u }, + { 0u, 17989846818158018560u, 244488046090u }, + { 0u, 2700938287723315200u, 10975231550u }, + { 0u, 17800090499088908288u, 62146418157u }, + { 0u, 8809040871136690176u, 237964944839u }, + { 0u, 9223372036854775808u, 199477539062u }, + { 0u, 0u, 246500000000u }, + { 16433563478020213436u, 144u, 0u }, + { 4194750497955655375u, 144890865261u, 0u }, + { 2691539602252904735u, 15763656745260536568u, 7u }, + { 3775467271962795241u, 8787336846248645550u, 7854549544u }, + { 16980212613224918121u, 17584084447880694346u, 40476362484u }, + { 4172857038337333440u, 18041672551129683938u, 244953235127u }, + { 5936867627376461659u, 14025886302294509785u, 183978041028u }, + { 17856837443266866062u, 18430498103283160734u, 196760344819u }, + { 8956297047799810807u, 3292348826238025833u, 243999119304u }, + { 15356974049716912789u, 9211721212658275243u, 200178478587u }, + { 6923608913322982854u, 10233245872666307519u, 251499368407u }, + { 4855902993563955944u, 6200995035623311671u, 215554745370u }, + { 13835893222288330752u, 8480542380570450804u, 26336156614u }, + { 9114973913760137216u, 11870363864499900506u, 198459731123u }, + { 17937099003422310400u, 9301051379839581901u, 179643493714u }, + { 7007960010734960640u, 11456694803569638005u, 82504211005u }, + { 7683422439270776832u, 14327208890643983169u, 61621068669u }, + { 720575940379279360u, 4510081789599866365u, 125776679550u }, + { 0u, 13255356976020303332u, 126244492023u }, + { 0u, 9658806854127314944u, 247718574341u }, + { 0u, 13708435528809971712u, 5523604968u }, + { 0u, 1580190652103131136u, 232743135779u }, + { 0u, 16557336970347413504u, 35085662306u }, + { 0u, 12751520132434493440u, 98897575035u }, + { 0u, 9295429630892703744u, 123691261291u }, + { 0u, 0u, 107503906250u }, + { 0u, 0u, 202000000000u }, + { 2768933352715741194u, 2210859u, 0u }, + { 15201941611824153390u, 2210859150104177u, 0u }, + { 1418128541727000180u, 16872870088062921306u, 119850u }, + { 5353350204565757408u, 5112979788807802982u, 42914680120u }, + { 1721001680354286741u, 13742728082020150272u, 56277175189u }, + { 637631411660453962u, 2217110934613627976u, 149744994782u }, + { 1630012588870568400u, 11021433940188610484u, 222120189824u }, + { 9253063571656828156u, 1713669895470733463u, 128597473131u }, + { 6029146854993203780u, 3313382510572018285u, 107092898231u }, + { 16987401965352759896u, 14976595232784069505u, 183179618825u }, + { 14499131620542087970u, 7213172372862496841u, 9811882854u }, + { 1978417255298660539u, 15836474542502248588u, 102391026857u }, + { 5790079354402454176u, 3221099285878340134u, 169858497005u }, + { 13748918935842078720u, 3265814602578095358u, 237174616142u }, + { 18047438014740692992u, 6502528252282225364u, 78177040164u }, + { 3116889656839372800u, 16392476834556790183u, 36352502762u }, + { 15995952446606147584u, 15167629413417091342u, 234888637949u }, + { 12530140063251562496u, 1366763272626280111u, 253822238838u }, + { 16717361816799281152u, 8720523635169216093u, 118074092385u }, + { 0u, 9649171375767398672u, 97472740533u }, + { 0u, 7647980704001073152u, 181523082628u }, + { 0u, 13286434495608651776u, 132414597864u }, + { 0u, 4358271637167013888u, 232720259057u }, + { 0u, 15954987941890097152u, 241236262378u }, + { 0u, 7911135695429697536u, 234864921629u }, + { 0u, 7205759403792793600u, 29428863525u }, + { 0u, 0u, 37390625000u }, + { 0u, 0u, 232000000000u }, + { 13558973353698967386u, 33u, 0u }, + { 6228991722850501890u, 33735033418u, 0u }, + { 16886831391703377787u, 15288289344628122701u, 1u }, + { 1181713637872883048u, 952589339068938148u, 1828779826u }, + { 12393932434925221726u, 10058155040190817688u, 50051639971u }, + { 10684799845419711910u, 5322725640026584391u, 163545253677u }, + { 4590318792215640843u, 2269982385930389600u, 45288545535u }, + { 6383712187366189238u, 13216683679976310224u, 255123055991u }, + { 1904270214927675016u, 17417440642083494819u, 119716477857u }, + { 3711506775113308575u, 3029180749090900711u, 161944201349u }, + { 8091219444738793995u, 8315443826261908513u, 133164212217u }, + { 39436684991068052u, 1488962797247197277u, 249450781113u }, + { 18025182908196512891u, 18009099634999034122u, 185080716834u }, + { 7853924592034603138u, 8092455412807497971u, 34976275247u }, + { 4815749283615688320u, 17808458047236758329u, 47438692886u }, + { 14242399906544287744u, 3164591817527425171u, 22965398445u }, + { 76242322576113664u, 3314036340472350590u, 173171552866u }, + { 10858088421377703936u, 33234902404332784u, 98179654270u }, + { 14293835879041466368u, 12349284717857274280u, 126001801667u }, + { 12182236992037191680u, 18209607903013119355u, 195669456065u }, + { 11529215046068469760u, 7891549145984268038u, 193987144822u }, + { 0u, 7703609897518594624u, 118427801736u }, + { 0u, 6336912652634587136u, 136417613529u }, + { 0u, 4461621834659397632u, 217343524723u }, + { 0u, 5484660635557953536u, 115241865004u }, + { 0u, 15142619273265938432u, 44297324048u }, + { 0u, 12170977992968765440u, 16820883035u }, + { 0u, 1152921504606846976u, 91659790039u }, + { 0u, 0u, 215062500000u }, + { 0u, 0u, 160000000000u }, + { 14000097438505379162u, 514755u, 0u }, + { 16451062686452429925u, 514755758946802u, 0u }, + { 4009347599785716645u, 17812314011563521031u, 27904u }, + { 16544162347546196456u, 7684138864490314336u, 965607477u }, + { 17674258299745817187u, 9740522787420029605u, 53416558002u }, + { 5215238411201214416u, 6701109407732989894u, 178528034798u }, + { 14253990228345322571u, 16534886227502443952u, 238363267868u }, + { 11214836553940194590u, 8908667306968317910u, 28896357978u }, + { 14620711348380590101u, 7531472173477105155u, 90482939822u }, + { 6638710787931587427u, 11527371604834801166u, 174408281924u }, + { 17320000343692853250u, 15688593496691078576u, 68624900066u }, + { 75147386268843646u, 11394944804253312188u, 226850480357u }, + { 17938801582125480173u, 11182279880854372627u, 229617721195u }, + { 6573358613626446145u, 150579373068361470u, 107606192607u }, + { 8688505427903736481u, 3147220002440857300u, 223008162924u }, + { 539870168696556032u, 3630514817795505815u, 108170611138u }, + { 9002861336394465280u, 11708796588334233588u, 194196810602u }, + { 17989846818158018560u, 16844495466426369546u, 106634735134u }, + { 2700938287723315200u, 17636655472325475902u, 30913141928u }, + { 17800090499088908288u, 17038926655686645229u, 168956085008u }, + { 8809040871136690176u, 15602838456783529415u, 16923682064u }, + { 9223372036854775808u, 10869815869248876790u, 16845831567u }, + { 0u, 18407124180939800832u, 143589253898u }, + { 0u, 5705018517251293184u, 10997852201u }, + { 0u, 9660452258743058432u, 41309269673u }, + { 0u, 5646292272224927744u, 169523694166u }, + { 0u, 7410409304047484928u, 86306086117u }, + { 0u, 5953758707383795712u, 229401719093u }, + { 0u, 4611686018427387904u, 53322753906u }, + { 0u, 0u, 114250000000u }, + { 0u, 0u, 128000000000u }, + { 15763656745260536568u, 7u, 0u }, + { 8787336846248645550u, 7854549544u, 0u }, + { 17584084447880694346u, 7854549544476362484u, 0u }, + { 18041672551129683938u, 15035424419724983u, 425795984u }, + { 14025886302294509785u, 18280822466032836292u, 144000815071u }, + { 18430498103283160734u, 11524250747302615283u, 223991005371u }, + { 3292348826238025833u, 15212285943691810760u, 187624730884u }, + { 9211721212658275243u, 7951804027551297019u, 4824659673u }, + { 10233245872666307519u, 1706416229965221847u, 217431068160u }, + { 6200995035623311671u, 3406023111930700826u, 92505009u }, + { 8480542380570450804u, 16132696204133391302u, 177184640882u }, + { 11870363864499900506u, 11593846688794356915u, 114874555213u }, + { 9301051379839581901u, 6875759884161133906u, 77628503688u }, + { 11456694803569638005u, 3593593325323835965u, 136372735690u }, + { 14327208890643983169u, 9542049733257388925u, 202194809084u }, + { 4510081789599866365u, 9926551925937787518u, 252517275552u }, + { 13255356976020303332u, 3128491553219547895u, 160538119458u }, + { 9658806854127314944u, 17158408656931354885u, 34169595866u }, + { 13708435528809971712u, 2065169543154992616u, 218930159197u }, + { 1580190652103131136u, 4832622393556232739u, 93111953065u }, + { 16557336970347413504u, 16505930714733656162u, 169261976984u }, + { 12751520132434493440u, 18270988073492888699u, 152894788296u }, + { 9295429630892703744u, 2525111411519708523u, 200990472248u }, + { 0u, 16728989342518570442u, 56136886563u }, + { 0u, 7974052022039438336u, 35906880329u }, + { 0u, 5356554962386550784u, 73432274226u }, + { 0u, 6693869495028547584u, 50290379426u }, + { 0u, 8157517147199766528u, 162362875392u }, + { 0u, 12065776720423157760u, 442219890u }, + { 0u, 11997589407315001344u, 114654087066u }, + { 0u, 0u, 154650390625u }, + { 0u, 0u, 97000000000u }, + { 16872870088062921306u, 119850u, 0u }, + { 5112979788807802982u, 119850914680120u, 0u }, + { 13742728082020150272u, 2418433229320326037u, 6497u }, + { 2217110934613627976u, 1143911773589293534u, 97131103528u }, + { 11021433940188610484u, 9276183703610924928u, 40062011581u }, + { 1713669895470733463u, 3532180128827684715u, 189502862926u }, + { 3313382510572018285u, 8563997501322031543u, 78191479868u }, + { 14976595232784069505u, 14843890409658460681u, 60464255234u }, + { 7213172372862496841u, 9489417861634552678u, 2804688911u }, + { 15836474542502248588u, 1113198223322322089u, 15514422373u }, + { 3221099285878340134u, 11190777557146597869u, 101060346596u }, + { 3265814602578095358u, 17764553645932638286u, 228606653266u }, + { 6502528252282225364u, 14900777150991234852u, 82963018382u }, + { 16392476834556790183u, 17364899863357893610u, 142807772747u }, + { 15167629413417091342u, 15537570181590167037u, 75941353107u }, + { 1366763272626280111u, 5558052627121307766u, 147842293367u }, + { 8720523635169216093u, 12095241565795232609u, 119301302636u }, + { 9649171375767398672u, 2187936505958366389u, 108655684359u }, + { 7647980704001073152u, 12009203621325860228u, 7118608275u }, + { 13286434495608651776u, 14814842834750302952u, 147651020232u }, + { 4358271637167013888u, 5965296499605198833u, 200803114239u }, + { 15954987941890097152u, 4051026394962148842u, 255323379371u }, + { 7911135695429697536u, 16799526299141688349u, 171219606580u }, + { 7205759403792793600u, 9460214166646215205u, 52910704145u }, + { 0u, 10750736995029068008u, 17512839237u }, + { 0u, 5377963045376430080u, 69582798620u }, + { 0u, 15996910350253424640u, 28291539960u }, + { 0u, 13651157529655246848u, 248867194247u }, + { 0u, 9771305410219737088u, 135740030732u }, + { 0u, 12709439623416250368u, 12529703527u }, + { 0u, 9943947977234055168u, 103688980102u }, + { 0u, 0u, 134539062500u }, + { 0u, 0u, 228000000000u }, + { 952589339068938148u, 1828779826u, 0u }, + { 10058155040190817688u, 1828779826051639971u, 0u }, + { 5322725640026584391u, 371564423966525229u, 99138353u }, + { 2269982385930389600u, 14464859121514339583u, 49020142547u }, + { 13216683679976310224u, 3913119023023056247u, 211784141584u }, + { 17417440642083494819u, 5493396321716566945u, 16212130607u }, + { 3029180749090900711u, 5837454566818211973u, 47297797611u }, + { 8315443826261908513u, 2886670683193253881u, 235316449046u }, + { 1488962797247197277u, 5504823105587173817u, 22156486731u }, + { 18009099634999034122u, 9431834277334851106u, 75298417058u }, + { 8092455412807497971u, 12921661346456247087u, 162511300760u }, + { 17808458047236758329u, 3643076516404724246u, 152700484665u }, + { 3164591817527425171u, 12559396953196866477u, 57197491573u }, + { 3314036340472350590u, 1626880974916825698u, 117680846273u }, + { 33234902404332784u, 6806994170946429566u, 193088193394u }, + { 12349284717857274280u, 7596631230206896579u, 114369007893u }, + { 18209607903013119355u, 3100480253729502401u, 21411814204u }, + { 7891549145984268038u, 6310570748781063286u, 60168077371u }, + { 7703609897518594624u, 14251867077375744136u, 59342096725u }, + { 6336912652634587136u, 6701165793751570137u, 85772595262u }, + { 4461621834659397632u, 10856833140463959923u, 62363270925u }, + { 5484660635557953536u, 15867563727561248556u, 13588550103u }, + { 15142619273265938432u, 5048961008671491600u, 215860182353u }, + { 12170977992968765440u, 13278183119599849051u, 81273704724u }, + { 1152921504606846976u, 4547591784941053655u, 20719811749u }, + { 0u, 11815437715887182496u, 165246525444u }, + { 0u, 398495392178782208u, 4640516162u }, + { 0u, 9154841240825495552u, 66021602478u }, + { 0u, 1902683298245640192u, 174496284938u }, + { 0u, 5081900962138816512u, 10103144668u }, + { 0u, 3234710432358858752u, 220275490403u }, + { 0u, 16717361816799281152u, 99175354003u }, + { 0u, 0u, 147906250000u }, + { 0u, 0u, 16000000000u }, + { 17812314011563521031u, 27904u, 0u }, + { 7684138864490314336u, 27904965607477u, 0u }, + { 9740522787420029605u, 13488568028574514610u, 1512u }, + { 6701109407732989894u, 275784718433886190u, 232731216738u }, + { 16534886227502443952u, 10020568880357102364u, 98014950319u }, + { 8908667306968317910u, 8876397213146246746u, 175543216127u }, + { 7531472173477105155u, 2155905919114811310u, 255481190457u }, + { 11527371604834801166u, 1087100407155601220u, 57116871894u }, + { 15688593496691078576u, 2903498381705011170u, 214058931831u }, + { 11394944804253312188u, 12223476257006657765u, 119157398962u }, + { 11182279880854372627u, 12148657163736735595u, 178662635975u }, + { 150579373068361470u, 8951241323311673823u, 199658580024u }, + { 3147220002440857300u, 8463862715901576300u, 56485247764u }, + { 3630514817795505815u, 3873401978748963266u, 20458826917u }, + { 11708796588334233588u, 248364795947002730u, 165209977542u }, + { 16844495466426369546u, 10454378025404001822u, 198013463882u }, + { 17636655472325475902u, 6574176865628265640u, 74566732968u }, + { 17038926655686645229u, 16703315293848336u, 168356386842u }, + { 15602838456783529415u, 9896033222450013456u, 26000905488u }, + { 10869815869248876790u, 17311376269334085007u, 16536465035u }, + { 18407124180939800832u, 18378511316495639306u, 139938451587u }, + { 5705018517251293184u, 15120796393727584297u, 131996301094u }, + { 9660452258743058432u, 18253447805740347049u, 38819700014u }, + { 5646292272224927744u, 5842497225601731158u, 46989521388u }, + { 7410409304047484928u, 4369968404176723173u, 236316722409u }, + { 5953758707383795712u, 16142207253674488117u, 233236896461u }, + { 4611686018427387904u, 12124259227391928178u, 205875070808u }, + { 0u, 13019483264566077056u, 88657257409u }, + { 0u, 74901376448135168u, 193705787602u }, + { 0u, 13897060093813325824u, 210004060411u }, + { 0u, 4495486210810052608u, 251753361137u }, + { 0u, 14885496280087265280u, 241243700795u }, + { 0u, 4976477588244398080u, 59806944370u }, + { 0u, 11529215046068469760u, 114269775390u }, + { 0u, 0u, 30625000000u }, + { 0u, 0u, 64000000000u }, + { 15035424419724983u, 425795984u, 0u }, + { 18280822466032836292u, 425795984000815071u, 0u }, + { 11524250747302615283u, 10043594327130472635u, 23082446u }, + { 15212285943691810760u, 8336034337032909060u, 206544464339u }, + { 7951804027551297019u, 16717215784895280857u, 211451897326u }, + { 1706416229965221847u, 10968831263951212032u, 238906242083u }, + { 3406023111930700826u, 5536629379734406065u, 35594621534u }, + { 16132696204133391302u, 1618806894932332402u, 94300141280u }, + { 11593846688794356915u, 11363331325254998861u, 224087755697u }, + { 6875759884161133906u, 8775167772751754888u, 177616007425u }, + { 3593593325323835965u, 2898202945316114122u, 1475702798u }, + { 9542049733257388925u, 8868842714495185148u, 14157111896u }, + { 9926551925937787518u, 17052094667531999136u, 88480780926u }, + { 3128491553219547895u, 3658615537031138594u, 126924395904u }, + { 17158408656931354885u, 12486952437987190746u, 128198333945u }, + { 2065169543154992616u, 912079238520577629u, 249676919048u }, + { 4832622393556232739u, 10960072898031888041u, 8049443914u }, + { 16505930714733656162u, 6129550094334741912u, 74594146742u }, + { 18270988073492888699u, 7965724516573729480u, 182332283576u }, + { 2525111411519708523u, 5801761178810791992u, 184431822791u }, + { 16728989342518570442u, 13197466483098446115u, 199314514103u }, + { 7974052022039438336u, 11326268638393107273u, 183715436091u }, + { 5356554962386550784u, 3597339351794947378u, 59613998253u }, + { 6693869495028547584u, 353880726151383714u, 173195012157u }, + { 8157517147199766528u, 11154818162602073600u, 61019183912u }, + { 12065776720423157760u, 5141043976157511026u, 40604703904u }, + { 11997589407315001344u, 7188225141808859034u, 160278696552u }, + { 0u, 13894168943295705185u, 104389674465u }, + { 0u, 12176538069834828288u, 225753204407u }, + { 0u, 7994239409235165184u, 183660091451u }, + { 0u, 13707777025480065024u, 59433368586u }, + { 0u, 10120227247676719104u, 10743100081u }, + { 0u, 7358494763030413312u, 177548618618u }, + { 0u, 7656119366529843200u, 122398904800u }, + { 0u, 9223372036854775808u, 224415039062u }, + { 0u, 0u, 86500000000u }, + { 2418433229320326037u, 6497u, 0u }, + { 1143911773589293534u, 6497131103528u, 0u }, + { 9276183703610924928u, 3877189582299842749u, 352u }, + { 3532180128827684715u, 7625565791857948238u, 96210182868u }, + { 8563997501322031543u, 16568435163612007484u, 212413382749u }, + { 14843890409658460681u, 17592071940521808130u, 93898176669u }, + { 9489417861634552678u, 15158637878035490831u, 157953668130u }, + { 1113198223322322089u, 17789243229146401893u, 34821751405u }, + { 11190777557146597869u, 14677686051252896484u, 109964356807u }, + { 17764553645932638286u, 3531237481269211986u, 199795678955u }, + { 14900777150991234852u, 8074435404989280910u, 235191428767u }, + { 17364899863357893610u, 7086549341467684427u, 159437716020u }, + { 15537570181590167037u, 10556134770918626963u, 52384162609u }, + { 5558052627121307766u, 10772666134712966775u, 49572249212u }, + { 12095241565795232609u, 6195173298198112620u, 124583987401u }, + { 2187936505958366389u, 8144773843324250887u, 201335841017u }, + { 12009203621325860228u, 14144284817150924691u, 249441529074u }, + { 14814842834750302952u, 6464447844648863176u, 242766763216u }, + { 5965296499605198833u, 15760468443293179135u, 208350438419u }, + { 4051026394962148842u, 5172191224908322475u, 19854376706u }, + { 16799526299141688349u, 2357554307308969012u, 2280385048u }, + { 9460214166646215205u, 1602046917604361745u, 24127803275u }, + { 10750736995029068008u, 7830970218109515845u, 139086847137u }, + { 5377963045376430080u, 2899479134887821084u, 161424517746u }, + { 15996910350253424640u, 15792042302392017912u, 114157181078u }, + { 13651157529655246848u, 11286099112296056199u, 150856088328u }, + { 9771305410219737088u, 15161477829153947404u, 8611820658u }, + { 12709439623416250368u, 423831848142641767u, 114821905360u }, + { 9943947977234055168u, 9707413321046312582u, 208022975970u }, + { 0u, 10969483299803835620u, 226526239930u }, + { 0u, 4326479556120930304u, 186594656881u }, + { 0u, 12876227232041795584u, 113234538926u }, + { 0u, 16967986827791171584u, 174698021676u }, + { 0u, 1288146316538413056u, 44919836409u }, + { 0u, 13715290452691779584u, 249069830551u }, + { 0u, 4683743612465315840u, 151743507385u }, + { 0u, 0u, 185253906250u }, + { 0u, 0u, 74000000000u }, + { 371564423966525229u, 99138353u, 0u }, + { 14464859121514339583u, 99138353020142547u, 0u }, + { 3913119023023056247u, 16344805304534272784u, 5374300u }, + { 5493396321716566945u, 26429987091348271u, 92886053671u }, + { 5837454566818211973u, 8691371289609838059u, 39001432772u }, + { 2886670683193253881u, 12980168378493046550u, 196471160181u }, + { 5504823105587173817u, 14010125458129496139u, 117703656337u }, + { 9431834277334851106u, 17061829677031795106u, 145759490422u }, + { 12921661346456247087u, 2227928323072698520u, 118924923640u }, + { 3643076516404724246u, 7394752319272287289u, 248120776236u }, + { 12559396953196866477u, 8805771303577744757u, 44400870326u }, + { 1626880974916825698u, 16371027194302248385u, 182477361818u }, + { 6806994170946429566u, 9114324123731231602u, 154887475162u }, + { 7596631230206896579u, 14468189808746991893u, 218494088500u }, + { 3100480253729502401u, 2376054557800684348u, 52784322141u }, + { 6310570748781063286u, 12462238943546048571u, 93128806175u }, + { 14251867077375744136u, 15334855370842605909u, 31675579326u }, + { 6701165793751570137u, 7211347914013798462u, 190831304175u }, + { 10856833140463959923u, 13763642332572548877u, 239390927953u }, + { 15867563727561248556u, 16868268377740071383u, 81746128545u }, + { 5048961008671491600u, 1120013377627684177u, 161914430661u }, + { 13278183119599849051u, 15898107650717274388u, 197060716046u }, + { 4547591784941053655u, 12281923376333274277u, 14861838142u }, + { 11815437715887182496u, 6383530489286615044u, 62665804400u }, + { 398495392178782208u, 4253822060257126466u, 112346051881u }, + { 9154841240825495552u, 17614372438391501998u, 41230600155u }, + { 1902683298245640192u, 4309951310554333450u, 219954877043u }, + { 5081900962138816512u, 13106185988973773020u, 115233642928u }, + { 3234710432358858752u, 2070134359761960547u, 176710487766u }, + { 16717361816799281152u, 9399359914137865875u, 214112222208u }, + { 0u, 17415053284723541264u, 509540321u }, + { 0u, 4840502610448261120u, 225944071930u }, + { 0u, 5690599259712258048u, 250262404172u }, + { 0u, 114769594245185536u, 76308488004u }, + { 0u, 3150620882578178048u, 68006221672u }, + { 0u, 5136918324969472000u, 104170795500u }, + { 0u, 7205759403792793600u, 236278472900u }, + { 0u, 0u, 196390625000u }, + { 0u, 0u, 232000000000u }, + { 13488568028574514610u, 1512u, 0u }, + { 275784718433886190u, 1512731216738u, 0u }, + { 10020568880357102364u, 98202693831717807u, 82u }, + { 8876397213146246746u, 12909287260170414079u, 82005323578u }, + { 2155905919114811310u, 11728631949380786233u, 58699813864u }, + { 1087100407155601220u, 18263701925522197718u, 232635810411u }, + { 2903498381705011170u, 4868886449713321591u, 107990077265u }, + { 12223476257006657765u, 5870139507184082354u, 81263942863u }, + { 12148657163736735595u, 5978562500822661575u, 207318220900u }, + { 8951241323311673823u, 10821136839630268472u, 100324098522u }, + { 8463862715901576300u, 9490907630136752916u, 218586615003u }, + { 3873401978748963266u, 10564005678001613989u, 219514503133u }, + { 248364795947002730u, 5754050547468481222u, 221572675895u }, + { 10454378025404001822u, 3833909949855542602u, 55311927705u }, + { 6574176865628265640u, 15446538552665967784u, 153207836674u }, + { 16703315293848336u, 14924837848804399130u, 2837358532u }, + { 9896033222450013456u, 18140170340418344208u, 196809077080u }, + { 17311376269334085007u, 11380424819825208971u, 88983380604u }, + { 18378511316495639306u, 12416915664152252547u, 124616934065u }, + { 15120796393727584297u, 17195282241626289958u, 177673122346u }, + { 18253447805740347049u, 2649541045825281326u, 42932158118u }, + { 5842497225601731158u, 16577429864268509676u, 166143631907u }, + { 4369968404176723173u, 12051257060168107241u, 35898664273u }, + { 16142207253674488117u, 5363884561143470797u, 81653299954u }, + { 12124259227391928178u, 13054029903083620184u, 242290776764u }, + { 13019483264566077056u, 566314952158634945u, 188707660379u }, + { 74901376448135168u, 1329472079642345682u, 91030699995u }, + { 13897060093813325824u, 15686237486658857211u, 219072070825u }, + { 4495486210810052608u, 1069073549290598129u, 169850352638u }, + { 14885496280087265280u, 4323599065125928507u, 254057954593u }, + { 4976477588244398080u, 17861823329752681586u, 33234382774u }, + { 11529215046068469760u, 17220149985412802078u, 182968291382u }, + { 0u, 4344934572159429184u, 54933506201u }, + { 0u, 2252927464837120000u, 153235539375u }, + { 0u, 10910018171964489728u, 175122131442u }, + { 0u, 3597328585515335680u, 242591433270u }, + { 0u, 6972808074239148032u, 54195011573u }, + { 0u, 2227030015734710272u, 245377996683u }, + { 0u, 1152921504606846976u, 139120727539u }, + { 0u, 0u, 243062500000u }, + { 0u, 0u, 160000000000u }, + { 10043594327130472635u, 23082446u, 0u }, + { 8336034337032909060u, 23082446544464339u, 0u }, + { 16717215784895280857u, 17238287503805244910u, 1251301u }, + { 10968831263951212032u, 1434575446038410275u, 229934489438u }, + { 5536629379734406065u, 14009569747841241694u, 94077768490u }, + { 1618806894932332402u, 14938795732275951328u, 42759460297u }, + { 11363331325254998861u, 6687653542888983473u, 201809833739u }, + { 8775167772751754888u, 28238723295162625u, 11362538425u }, + { 2898202945316114122u, 4745270274832691214u, 185001530824u }, + { 8868842714495185148u, 926478968112308824u, 200257241617u }, + { 17052094667531999136u, 9213681606604198526u, 17050224525u }, + { 3658615537031138594u, 13346223820579313024u, 141499474680u }, + { 12486952437987190746u, 691642518601291257u, 248723500243u }, + { 912079238520577629u, 1153720150033789192u, 211037494016u }, + { 10960072898031888041u, 12089015034721780810u, 62543294u }, + { 6129550094334741912u, 3555868702841788854u, 190655346818u }, + { 7965724516573729480u, 11708406782758214328u, 130192764028u }, + { 5801761178810791992u, 9417497762905343943u, 124634714003u }, + { 13197466483098446115u, 12838336066957615287u, 147510523576u }, + { 11326268638393107273u, 13737708142128207419u, 184695967592u }, + { 3597339351794947378u, 11683434809834695853u, 104744722650u }, + { 353880726151383714u, 2689114340106315837u, 218633360270u }, + { 11154818162602073600u, 8859225263374261032u, 142145777180u }, + { 5141043976157511026u, 15761671984578600096u, 28480259563u }, + { 7188225141808859034u, 7087267079878005352u, 235854441950u }, + { 13894168943295705185u, 4601291730423121377u, 222384201518u }, + { 12176538069834828288u, 9559411037059581623u, 46249436524u }, + { 7994239409235165184u, 12969820289641388091u, 108518216710u }, + { 13707777025480065024u, 13628239920285957130u, 6703095366u }, + { 10120227247676719104u, 8049893933765800625u, 70738788366u }, + { 7358494763030413312u, 10391755948840250234u, 14436385624u }, + { 7656119366529843200u, 14454650777462444512u, 88563338218u }, + { 9223372036854775808u, 14244638523341127254u, 234783588188u }, + { 0u, 12246016810439753984u, 92772203401u }, + { 0u, 9382741764551081984u, 137663857901u }, + { 0u, 4608696190291148800u, 237508639450u }, + { 0u, 1696483666416369664u, 218249837921u }, + { 0u, 15416683541605384192u, 97091966563u }, + { 0u, 7683140964294066176u, 99835740089u }, + { 0u, 4611686018427387904u, 185416503906u }, + { 0u, 0u, 98250000000u }, + { 0u, 0u, 128000000000u }, + { 3877189582299842749u, 352u, 0u }, + { 7625565791857948238u, 352210182868u, 0u }, + { 16568435163612007484u, 1722045467931902045u, 19u }, + { 17592071940521808130u, 16095324008152856733u, 19093352271u }, + { 15158637878035490831u, 15216188060094280738u, 79872529262u }, + { 17789243229146401893u, 10793385929903030893u, 110824871207u }, + { 14677686051252896484u, 12613277226875940039u, 39585110623u }, + { 3531237481269211986u, 10644539625155600107u, 95683767128u }, + { 8074435404989280910u, 6181262895644173983u, 88577041649u }, + { 7086549341467684427u, 148914399627082292u, 241335086933u }, + { 10556134770918626963u, 14379289774887985969u, 85008072665u }, + { 10772666134712966775u, 11743339675582627452u, 217779502860u }, + { 6195173298198112620u, 7841621929809463497u, 12636607719u }, + { 8144773843324250887u, 11168944680251236601u, 231425095176u }, + { 14144284817150924691u, 6178560202529287410u, 8605469704u }, + { 6464447844648863176u, 13295243308201596112u, 8334940419u }, + { 15760468443293179135u, 17040673746172470291u, 3720736583u }, + { 5172191224908322475u, 14957442487039409922u, 71923776774u }, + { 2357554307308969012u, 17778155426506992152u, 6810844581u }, + { 1602046917604361745u, 14945404984219733899u, 165963755736u }, + { 7830970218109515845u, 11590754866058681505u, 216810192027u }, + { 2899479134887821084u, 6020790784469412466u, 155628336080u }, + { 15792042302392017912u, 7934351824569522326u, 208326387722u }, + { 11286099112296056199u, 5038361112172116744u, 10430122074u }, + { 15161477829153947404u, 3305187319649924210u, 90273130103u }, + { 423831848142641767u, 11470175511099161552u, 119179174563u }, + { 9707413321046312582u, 7308362160352048610u, 163621799460u }, + { 10969483299803835620u, 10666410671225576634u, 36396187106u }, + { 4326479556120930304u, 2181639019945820785u, 226578227281u }, + { 12876227232041795584u, 4615749499734847918u, 81118266888u }, + { 16967986827791171584u, 14076159200958497580u, 8250220281u }, + { 1288146316538413056u, 5470405257862074105u, 249763070119u }, + { 13715290452691779584u, 4565741478181339543u, 167296551263u }, + { 4683743612465315840u, 8901832997861862329u, 95247509341u }, + { 0u, 14190141170191714122u, 93482569333u }, + { 0u, 4240772322245764096u, 117769249094u }, + { 0u, 4422842195340951552u, 70229892728u }, + { 0u, 15448426386733137920u, 120239762755u }, + { 0u, 9203504548935630848u, 67837460872u }, + { 0u, 5936377627571912704u, 136498922981u }, + { 0u, 468374361246531584u, 229321811676u }, + { 0u, 0u, 220025390625u }, + { 0u, 0u, 33000000000u }, + { 16344805304534272784u, 5374300u, 0u }, + { 26429987091348271u, 5374300886053671u, 0u }, + { 8691371289609838059u, 8020875056524075716u, 291341u }, + { 12980168378493046550u, 1400288714762747253u, 13434812508u }, + { 14010125458129496139u, 6136037711314764689u, 92075909803u }, + { 17061829677031795106u, 15735488086392394102u, 171332635270u }, + { 2227928323072698520u, 7735094782793634552u, 134853022518u }, + { 7394752319272287289u, 7273689191766726188u, 54419320328u }, + { 8805771303577744757u, 3410634565056431030u, 8394307481u }, + { 16371027194302248385u, 4600927904885215898u, 153184890870u }, + { 9114324123731231602u, 9154871331680374746u, 246249416801u }, + { 14468189808746991893u, 6117978272461042996u, 97496286569u }, + { 2376054557800684348u, 13116904339287496285u, 105331656266u }, + { 12462238943546048571u, 867037205615660831u, 74711068809u }, + { 15334855370842605909u, 1802487145191504830u, 137047002181u }, + { 7211347914013798462u, 17242009718457409007u, 69097713023u }, + { 13763642332572548877u, 13620802355488468049u, 127934691219u }, + { 16868268377740071383u, 4442227880594435745u, 147738385175u }, + { 1120013377627684177u, 17354849212854314181u, 23240813655u }, + { 15898107650717274388u, 18202319179831567886u, 87940808260u }, + { 12281923376333274277u, 17568634016348874558u, 68986749699u }, + { 6383530489286615044u, 7496925598312450672u, 3952397558u }, + { 4253822060257126466u, 601870379496813865u, 246406409151u }, + { 17614372438391501998u, 11995106565680728027u, 191032627458u }, + { 4309951310554333450u, 16331071694764184179u, 2650256029u }, + { 13106185988973773020u, 9665962217000524208u, 157885309170u }, + { 2070134359761960547u, 13682661374415474390u, 242523992861u }, + { 9399359914137865875u, 6940361789924260864u, 29741738559u }, + { 17415053284723541264u, 9658039831644010465u, 63376237766u }, + { 4840502610448261120u, 6843715893910236922u, 198523563388u }, + { 5690599259712258048u, 47089792870595660u, 124370998582u }, + { 114769594245185536u, 14510386192097156932u, 54002552742u }, + { 3150620882578178048u, 12059931208360040296u, 166786609611u }, + { 5136918324969472000u, 14877013468459184620u, 203653770180u }, + { 7205759403792793600u, 2397668560671695044u, 196806484516u }, + { 0u, 2195572305559232232u, 36129977873u }, + { 0u, 3261686279425953792u, 17119022213u }, + { 0u, 9333850662059900928u, 133176816367u }, + { 0u, 5036522340217782272u, 239505989058u }, + { 0u, 2800120215143186432u, 194273030423u }, + { 0u, 441634238459019264u, 23151794821u }, + { 0u, 720575940379279360u, 133023941040u }, + { 0u, 0u, 176039062500u }, + { 0u, 0u, 228000000000u }, + { 98202693831717807u, 82u, 0u }, + { 12909287260170414079u, 82005323578u, 0u }, + { 11728631949380786233u, 8218347283861607400u, 4u }, + { 18263701925522197718u, 17896200385973633643u, 4445517498u }, + { 4868886449713321591u, 16333242102094352209u, 186970154966u }, + { 5870139507184082354u, 9981905728606788815u, 214885426828u }, + { 5978562500822661575u, 15219470018924839012u, 140541120193u }, + { 10821136839630268472u, 17152070168529617370u, 193825049122u }, + { 9490907630136752916u, 17841343440958328027u, 34929815586u }, + { 10564005678001613989u, 17291078023923990493u, 34967181165u }, + { 5754050547468481222u, 16744804581790759223u, 109937351217u }, + { 3833909949855542602u, 5001622214111594905u, 49907737675u }, + { 15446538552665967784u, 9676746897435398146u, 75271138483u }, + { 14924837848804399130u, 8109025833995118532u, 179524577500u }, + { 18140170340418344208u, 5495826424046694744u, 220439591171u }, + { 11380424819825208971u, 7890288164365705852u, 3297929347u }, + { 12416915664152252547u, 8616438349039895217u, 131427733378u }, + { 17195282241626289958u, 15787154801788760618u, 130467098058u }, + { 2649541045825281326u, 12418659311480782502u, 202855823376u }, + { 16577429864268509676u, 4486988874116669987u, 16673216870u }, + { 12051257060168107241u, 4828971301551875409u, 102243240154u }, + { 5363884561143470797u, 14769106422014442226u, 218261779058u }, + { 13054029903083620184u, 7763933466423188156u, 114800634863u }, + { 566314952158634945u, 10449097116253839963u, 239420883676u }, + { 1329472079642345682u, 12870692502472900571u, 220566446689u }, + { 15686237486658857211u, 11597479481311003817u, 97697721638u }, + { 1069073549290598129u, 8294994869530047486u, 38628700622u }, + { 4323599065125928507u, 16879315829924478241u, 206449672572u }, + { 17861823329752681586u, 11873324837601439670u, 124915029544u }, + { 17220149985412802078u, 3277599055636107318u, 40643654229u }, + { 4344934572159429184u, 15363467897354242201u, 85177679000u }, + { 2252927464837120000u, 10351182204479784367u, 152832855263u }, + { 10910018171964489728u, 12811517584931924466u, 223561138711u }, + { 3597328585515335680u, 16988930699558748726u, 23694513759u }, + { 6972808074239148032u, 11683499918824718325u, 95920971778u }, + { 2227030015734710272u, 13119300691281647499u, 2633363799u }, + { 1152921504606846976u, 10125549106595354099u, 87711198715u }, + { 0u, 17505352699870800544u, 251548907116u }, + { 0u, 6756039242241163264u, 108948967071u }, + { 0u, 3537338758766526464u, 159366245621u }, + { 0u, 6522626374119718912u, 245191759518u }, + { 0u, 4733294203482669056u, 158353592284u }, + { 0u, 16997710893603094528u, 220256592392u }, + { 0u, 16717361816799281152u, 8921447753u }, + { 0u, 0u, 73906250000u }, + { 0u, 0u, 16000000000u }, + { 17238287503805244910u, 1251301u, 0u }, + { 1434575446038410275u, 1251301934489438u, 0u }, + { 14009569747841241694u, 3943737498063000362u, 67833u }, + { 14938795732275951328u, 2870731037991212489u, 249213790438u }, + { 6687653542888983473u, 7389433400402095883u, 230155622641u }, + { 28238723295162625u, 5675049236146197433u, 241400581987u }, + { 4745270274832691214u, 9953779846262904264u, 99307645035u }, + { 926478968112308824u, 12691978937179636241u, 107539595486u }, + { 9213681606604198526u, 15523327331528198029u, 222688033556u }, + { 13346223820579313024u, 15722603279568118520u, 20841521260u }, + { 691642518601291257u, 11838632364171816147u, 108852324031u }, + { 1153720150033789192u, 7832751832367143680u, 191641773546u }, + { 12089015034721780810u, 12167724027162940862u, 234424614327u }, + { 3555868702841788854u, 4108211144748152962u, 183659613641u }, + { 11708406782758214328u, 7530983398136343676u, 201222706572u }, + { 9417497762905343943u, 1117587133956542355u, 140408255428u }, + { 12838336066957615287u, 17134748625149490872u, 196060584519u }, + { 13737708142128207419u, 4039918359454207848u, 71928876584u }, + { 11683434809834695853u, 1830218764589441242u, 40219004413u }, + { 2689114340106315837u, 637895981480825742u, 253099216358u }, + { 8859225263374261032u, 8246879226348334620u, 230034580410u }, + { 15761671984578600096u, 12389239568142583275u, 186447064218u }, + { 7087267079878005352u, 14041257178803154398u, 154671622022u }, + { 4601291730423121377u, 16312515716494630702u, 134761178076u }, + { 9559411037059581623u, 17088522799596987756u, 220884303248u }, + { 12969820289641388091u, 3588932524637852678u, 144926370677u }, + { 13628239920285957130u, 107218049069817414u, 117194556422u }, + { 8049893933765800625u, 1596707240462008334u, 6005812302u }, + { 10391755948840250234u, 17461913142391587672u, 78086557672u }, + { 14454650777462444512u, 4366474266651610090u, 232946612208u }, + { 14244638523341127254u, 5539304013194805084u, 240236707044u }, + { 12246016810439753984u, 4762470619211987849u, 228300286272u }, + { 9382741764551081984u, 10835638458986644717u, 64258174049u }, + { 4608696190291148800u, 16141642290510052058u, 97587401137u }, + { 1696483666416369664u, 17390568670756355425u, 177875040181u }, + { 15416683541605384192u, 12536768491333867107u, 181942744616u }, + { 7683140964294066176u, 13145148522871947193u, 40679619581u }, + { 4611686018427387904u, 5665349945233068642u, 253712599929u }, + { 0u, 17074607537751066240u, 121307119235u }, + { 0u, 6241525660962062336u, 131925616329u }, + { 0u, 1142860629783085056u, 201338353784u }, + { 0u, 16287527416870469632u, 120061954598u }, + { 0u, 9028002014738513920u, 38882948630u }, + { 0u, 16217462258161156096u, 22489408969u }, + { 0u, 11529215046068469760u, 201879150390u }, + { 0u, 0u, 54625000000u }, + { 0u, 0u, 64000000000u }, + { 1722045467931902045u, 19u, 0u }, + { 16095324008152856733u, 19093352271u, 0u }, + { 15216188060094280738u, 646608198162977646u, 1u }, + { 10793385929903030893u, 12170458846894708007u, 1035052700u }, + { 12613277226875940039u, 1797330480103086687u, 156659761896u }, + { 10644539625155600107u, 10332188564497263448u, 232097433480u }, + { 6181262895644173983u, 7524259485079594225u, 136560109064u }, + { 148914399627082292u, 62681109059153749u, 8407890924u }, + { 14379289774887985969u, 13480636451804037081u, 236003397949u }, + { 11743339675582627452u, 6948168233012789004u, 61730786766u }, + { 7841621929809463497u, 12015502974041806055u, 206376660954u }, + { 11168944680251236601u, 7343801660689004040u, 218651361721u }, + { 6178560202529287410u, 13670580858640731144u, 185398108285u }, + { 13295243308201596112u, 5605073897566574851u, 125741083673u }, + { 17040673746172470291u, 15387788940505247559u, 25303851664u }, + { 14957442487039409922u, 17565181499678113030u, 144834173709u }, + { 17778155426506992152u, 1893743623847493029u, 13952210397u }, + { 14945404984219733899u, 10243498996716269784u, 221102660047u }, + { 11590754866058681505u, 5619675836950314139u, 207555301193u }, + { 6020790784469412466u, 10224869737511515088u, 73304643237u }, + { 7934351824569522326u, 2574495974386198538u, 165554291299u }, + { 5038361112172116744u, 7825756347302873178u, 99139563706u }, + { 3305187319649924210u, 12071550103794656887u, 186424235101u }, + { 11470175511099161552u, 7195875213867606691u, 93654400042u }, + { 7308362160352048610u, 18271364438406891044u, 42390089176u }, + { 10666410671225576634u, 16966521933952564706u, 216990492650u }, + { 2181639019945820785u, 289920862029570129u, 234919756997u }, + { 4615749499734847918u, 7804199568098625032u, 197015716641u }, + { 14076159200958497580u, 5758118571242446585u, 33423066506u }, + { 5470405257862074105u, 4030788293606375591u, 138312148233u }, + { 4565741478181339543u, 4387716460037196127u, 9218509471u }, + { 8901832997861862329u, 16807506478881285981u, 159237858585u }, + { 14190141170191714122u, 17033060604413529717u, 25911136751u }, + { 4240772322245764096u, 10498418508292170054u, 239923364065u }, + { 4422842195340951552u, 13237752038744465016u, 225569120407u }, + { 15448426386733137920u, 17737618428304633155u, 151717619975u }, + { 9203504548935630848u, 13546183833248825736u, 7961558221u }, + { 5936377627571912704u, 826778452978976229u, 205734340097u }, + { 468374361246531584u, 13728076626990147292u, 1044819749u }, + { 0u, 2794860281883592225u, 37744200525u }, + { 0u, 8680705720425908736u, 77151509679u }, + { 0u, 731520517439488000u, 175470582000u }, + { 0u, 13120812320768917504u, 240039655806u }, + { 0u, 2722954908557901824u, 126711280661u }, + { 0u, 6860847004205973504u, 21147611681u }, + { 0u, 6503197861922996224u, 33371927261u }, + { 0u, 9223372036854775808u, 221352539062u }, + { 0u, 0u, 182500000000u }, + { 8020875056524075716u, 291341u, 0u }, + { 1400288714762747253u, 291341434812508u, 0u }, + { 6136037711314764689u, 12005656413127238315u, 15793u }, + { 15735488086392394102u, 4821130826186787462u, 177650827938u }, + { 7735094782793634552u, 14377899467066168118u, 162261354025u }, + { 7273689191766726188u, 16575613239625444872u, 41779427491u }, + { 3410634565056431030u, 4317827099179284377u, 163898565794u }, + { 4600927904885215898u, 1242354770412171254u, 162234069876u }, + { 9154871331680374746u, 994838588328896609u, 116067348187u }, + { 6117978272461042996u, 17283309862013060457u, 219053930307u }, + { 13116904339287496285u, 124242522249856586u, 67936930105u }, + { 867037205615660831u, 11564608014666985609u, 57006735200u }, + { 1802487145191504830u, 12401028575581654085u, 96626918656u }, + { 17242009718457409007u, 2490725392961465727u, 672261106u }, + { 13620802355488468049u, 1949482237120640915u, 242135022494u }, + { 4442227880594435745u, 15410502396166200087u, 158105681643u }, + { 17354849212854314181u, 15694919529799920727u, 235835405008u }, + { 18202319179831567886u, 10324869370171768388u, 208850823292u }, + { 17568634016348874558u, 1631866459122189059u, 124559712290u }, + { 7496925598312450672u, 172020494461226230u, 34088463658u }, + { 601870379496813865u, 12734610307908856767u, 42009325249u }, + { 11995106565680728027u, 1467513250829340930u, 193690344608u }, + { 16331071694764184179u, 13558759428494307997u, 160079554052u }, + { 9665962217000524208u, 7915355143999496434u, 4735021821u }, + { 13682661374415474390u, 2876370200608797469u, 253429092262u }, + { 6940361789924260864u, 343685370404989503u, 166155928341u }, + { 9658039831644010465u, 4837266557407634630u, 21018631221u }, + { 6843715893910236922u, 9622591415747161468u, 53262228745u }, + { 47089792870595660u, 16503783814424220982u, 9521641725u }, + { 14510386192097156932u, 5377083431343591334u, 253894671913u }, + { 12059931208360040296u, 16508482371299291595u, 41291492276u }, + { 14877013468459184620u, 10515883558812249028u, 180894926622u }, + { 2397668560671695044u, 63492062913405476u, 30570067190u }, + { 2195572305559232232u, 11571919759617799697u, 246003441911u }, + { 3261686279425953792u, 2956602334970088581u, 247627315027u }, + { 9333850662059900928u, 13604736747717849839u, 83160277733u }, + { 5036522340217782272u, 16573540719338151362u, 229737514256u }, + { 2800120215143186432u, 12620703004601168151u, 16898453442u }, + { 441634238459019264u, 14649407809089591941u, 194684169680u }, + { 720575940379279360u, 11290375247898624432u, 208794145988u }, + { 0u, 11020319450292874212u, 196612052468u }, + { 0u, 8754634933362354176u, 244597412714u }, + { 0u, 12976319450332528640u, 106474589710u }, + { 0u, 17447331119627239424u, 14703447686u }, + { 0u, 3665184902673858560u, 134945821715u }, + { 0u, 12949678516038795264u, 19198690071u }, + { 0u, 72057594037927936u, 23702003479u }, + { 0u, 0u, 23003906250u }, + { 0u, 0u, 202000000000u }, + { 8218347283861607400u, 4u, 0u }, + { 17896200385973633643u, 4445517498u, 0u }, + { 16333242102094352209u, 4445517498970154966u, 0u }, + { 9981905728606788815u, 9413159735776077452u, 240991986u }, + { 15219470018924839012u, 14279163482889998017u, 242510288411u }, + { 17152070168529617370u, 8693044629541194274u, 27774075003u }, + { 17841343440958328027u, 11863110253260222498u, 123471250893u }, + { 17291078023923990493u, 8319293368489531245u, 205643100495u }, + { 16744804581790759223u, 3376307525676489265u, 79450989797u }, + { 5001622214111594905u, 13205662254759912523u, 229183029997u }, + { 9676746897435398146u, 5276250334231686323u, 237715880385u }, + { 8109025833995118532u, 13790198520922745052u, 193286026103u }, + { 5495826424046694744u, 14195535250150996227u, 119747568159u }, + { 7890288164365705852u, 16425228796427004035u, 31769541507u }, + { 8616438349039895217u, 4295900841296269186u, 131890413437u }, + { 15787154801788760618u, 4533952595483946442u, 125232881251u }, + { 12418659311480782502u, 12885038019373447184u, 99245786062u }, + { 4486988874116669987u, 12140736240487831910u, 206698499310u }, + { 4828971301551875409u, 6927124077155322074u, 238658150630u }, + { 14769106422014442226u, 12477788342407819890u, 230375520148u }, + { 7763933466423188156u, 7980854329409711087u, 148676422261u }, + { 10449097116253839963u, 2062671021810827996u, 117432642980u }, + { 12870692502472900571u, 2739521363598172769u, 164111817620u }, + { 11597479481311003817u, 12897585686593465638u, 148148509750u }, + { 8294994869530047486u, 1127632646629044686u, 54699179521u }, + { 16879315829924478241u, 4833775019274666364u, 1061129088u }, + { 11873324837601439670u, 15867662672939849256u, 128262039468u }, + { 3277599055636107318u, 2092350330982953557u, 172860187717u }, + { 15363467897354242201u, 13330062299842493592u, 69113426538u }, + { 10351182204479784367u, 4479193352178519263u, 106722624125u }, + { 12811517584931924466u, 3149393938889064983u, 125242817558u }, + { 16988930699558748726u, 9736379904070620767u, 22170728987u }, + { 11683499918824718325u, 3816238703055069186u, 27527810212u }, + { 13119300691281647499u, 11598915938798661975u, 164206878714u }, + { 10125549106595354099u, 17821633264606555643u, 250628778492u }, + { 17505352699870800544u, 2514623558764574316u, 252966112675u }, + { 6756039242241163264u, 4976730480406253215u, 163136318016u }, + { 3537338758766526464u, 17276563697191611637u, 64269789099u }, + { 6522626374119718912u, 12524734095940998814u, 171936564394u }, + { 4733294203482669056u, 15331551308930355164u, 170678967195u }, + { 16997710893603094528u, 15417115581125943816u, 155831125061u }, + { 16717361816799281152u, 6010750237807115593u, 69835763510u }, + { 0u, 5624630987553628432u, 54325843423u }, + { 0u, 14881848243837640704u, 223304911856u }, + { 0u, 15281613886881529856u, 240806746609u }, + { 0u, 14057902358273196032u, 241828417948u }, + { 0u, 16075318494433902592u, 156762080413u }, + { 0u, 13891916000577716224u, 157871444761u }, + { 0u, 7205759403792793600u, 25753082275u }, + { 0u, 0u, 163390625000u }, + { 0u, 0u, 232000000000u }, + { 3943737498063000362u, 67833u, 0u }, + { 2870731037991212489u, 67833213790438u, 0u }, + { 7389433400402095883u, 4535831408134330609u, 3677u }, + { 5675049236146197433u, 6204770794376564579u, 93245887913u }, + { 9953779846262904264u, 13869812122751887467u, 169336361298u }, + { 12691978937179636241u, 14253229412394467550u, 82751884021u }, + { 15523327331528198029u, 12776557610216045332u, 245772669114u }, + { 15722603279568118520u, 16493640728678654060u, 186692618575u }, + { 11838632364171816147u, 9434398296825833151u, 79894122055u }, + { 7832751832367143680u, 8773374058285327850u, 71511439756u }, + { 12167724027162940862u, 12932015276748029367u, 140475605560u }, + { 4108211144748152962u, 16293958583527755209u, 56701045952u }, + { 7530983398136343676u, 13511893936143127948u, 192883297264u }, + { 1117587133956542355u, 18409936402005226436u, 240732481237u }, + { 17134748625149490872u, 2189663026458466887u, 213998004652u }, + { 4039918359454207848u, 9497725274248154664u, 172118701870u }, + { 1830218764589441242u, 14766925481127792125u, 46514872718u }, + { 637895981480825742u, 6982373971809635814u, 142800516634u }, + { 8246879226348334620u, 8616702383006884794u, 26378515251u }, + { 12389239568142583275u, 3059473300040871066u, 51467112372u }, + { 14041257178803154398u, 17123843157031495558u, 180165854379u }, + { 16312515716494630702u, 11210627174210626524u, 171928285397u }, + { 17088522799596987756u, 15868067138625928592u, 213607729316u }, + { 3588932524637852678u, 4467869511636937589u, 164860209643u }, + { 107218049069817414u, 10052108125844341766u, 235242203691u }, + { 1596707240462008334u, 7470588003218451534u, 43544925873u }, + { 17461913142391587672u, 2613527085490786280u, 177404981387u }, + { 4366474266651610090u, 3632919450036549616u, 139141679587u }, + { 5539304013194805084u, 179367907231218916u, 227196940958u }, + { 4762470619211987849u, 13553068184555874624u, 158009723553u }, + { 10835638458986644717u, 8798774862365584481u, 161734713298u }, + { 16141642290510052058u, 910911255817064881u, 210476982541u }, + { 17390568670756355425u, 2304331144765093813u, 13049380598u }, + { 12536768491333867107u, 12248937023083640360u, 246124918041u }, + { 13145148522871947193u, 10206039550662130685u, 25664016206u }, + { 5665349945233068642u, 12267881323837852537u, 78553270512u }, + { 17074607537751066240u, 2858642007937891971u, 240665043179u }, + { 6241525660962062336u, 14171330289750320841u, 235154967293u }, + { 1142860629783085056u, 6601103619749017720u, 253768229354u }, + { 16287527416870469632u, 4919573414486739494u, 234357846544u }, + { 9028002014738513920u, 3401998285294974486u, 16266690609u }, + { 16217462258161156096u, 10799436256515532233u, 49184422696u }, + { 11529215046068469760u, 10083786644665753398u, 40585438612u }, + { 0u, 6481194517685688896u, 148546643169u }, + { 0u, 15104161756860547072u, 225351346258u }, + { 0u, 9556039274244079616u, 82818798249u }, + { 0u, 1376343134954323968u, 169518033927u }, + { 0u, 15682488278596976640u, 7074611710u }, + { 0u, 1506454075355430912u, 254850149393u }, + { 0u, 1152921504606846976u, 17081665039u }, + { 0u, 0u, 15062500000u }, + { 0u, 0u, 160000000000u }, + { 12170458846894708007u, 1035052700u, 0u }, + { 1797330480103086687u, 1035052700659761896u, 0u }, + { 10332188564497263448u, 6172559441576707976u, 56110319u }, + { 7524259485079594225u, 15083329738554729992u, 239334615117u }, + { 62681109059153749u, 10013126833549229036u, 77817668943u }, + { 13480636451804037081u, 5817156823499936061u, 79542812693u }, + { 6948168233012789004u, 5282692560913632718u, 21315348703u }, + { 12015502974041806055u, 10252307034225766362u, 223286375337u }, + { 7343801660689004040u, 17981881283247669689u, 169555778677u }, + { 13670580858640731144u, 11689290159733383293u, 117974799737u }, + { 5605073897566574851u, 5530668968487988249u, 121633677689u }, + { 15387788940505247559u, 10083765740821947024u, 121299818165u }, + { 17565181499678113030u, 2798423656816843533u, 181546642036u }, + { 1893743623847493029u, 7614494481582904797u, 116151702850u }, + { 10243498996716269784u, 17811318500083423695u, 66412782572u }, + { 5619675836950314139u, 11641467412200329033u, 236965553510u }, + { 10224869737511515088u, 17733593025296340645u, 102631085212u }, + { 2574495974386198538u, 3689424000190644835u, 156961340004u }, + { 7825756347302873178u, 14966634145516728506u, 100200004075u }, + { 12071550103794656887u, 14171681941562070109u, 235811342862u }, + { 7195875213867606691u, 8130575762882608170u, 14768248417u }, + { 18271364438406891044u, 5234550794400656856u, 97440759395u }, + { 16966521933952564706u, 3020576149360486378u, 99283765567u }, + { 289920862029570129u, 3038675756589057221u, 63163745761u }, + { 7804199568098625032u, 15470260187120878369u, 225164726942u }, + { 5758118571242446585u, 3497929414841828746u, 158838644485u }, + { 4030788293606375591u, 9935840636861015305u, 5189623133u }, + { 4387716460037196127u, 3647355485153741471u, 93538623000u }, + { 16807506478881285981u, 766100215038272793u, 24197723537u }, + { 17033060604413529717u, 16128087474216800751u, 145041530375u }, + { 10498418508292170054u, 16216631732633731297u, 7874305373u }, + { 13237752038744465016u, 13760220872779997335u, 93879105367u }, + { 17737618428304633155u, 3826276262374222087u, 87745943068u }, + { 13546183833248825736u, 14938032745839181005u, 28207422851u }, + { 826778452978976229u, 14479259995009508865u, 131809792377u }, + { 13728076626990147292u, 2372033248156102437u, 121784922257u }, + { 2794860281883592225u, 792005346826701645u, 145128588180u }, + { 8680705720425908736u, 16278924527931792559u, 148042934695u }, + { 731520517439488000u, 17442516423538940144u, 167882482266u }, + { 13120812320768917504u, 13844184233048446u, 90945560710u }, + { 2722954908557901824u, 13486193870480782357u, 134000750494u }, + { 6860847004205973504u, 11931315179184648737u, 158731088034u }, + { 6503197861922996224u, 16492562205587485405u, 162646797891u }, + { 9223372036854775808u, 12128987217680380854u, 67894063588u }, + { 0u, 10568123814189138176u, 228657513714u }, + { 0u, 17007583519117541376u, 242572899139u }, + { 0u, 143791533903052800u, 67921982950u }, + { 0u, 12398714235792654336u, 230007794954u }, + { 0u, 9659957317919047680u, 10672135645u }, + { 0u, 9412523221204336640u, 221523667335u }, + { 0u, 4611686018427387904u, 135510253906u }, + { 0u, 0u, 82250000000u }, + { 0u, 0u, 128000000000u }, + { 12005656413127238315u, 15793u, 0u }, + { 4821130826186787462u, 15793650827938u, 0u }, + { 14377899467066168118u, 3237900842885170729u, 856u }, + { 16575613239625444872u, 7515893506498066595u, 88175526956u }, + { 4317827099179284377u, 7300206309181072546u, 44407437403u }, + { 1242354770412171254u, 5999737279837044u, 91395744977u }, + { 994838588328896609u, 7556839307242450651u, 209000325246u }, + { 17283309862013060457u, 12946035041643640643u, 126409657079u }, + { 124242522249856586u, 15885877642352740665u, 247701805965u }, + { 11564608014666985609u, 10770818348246089568u, 141861175152u }, + { 12401028575581654085u, 11635415503599551744u, 112583887232u }, + { 2490725392961465727u, 6248053924100826098u, 128630757138u }, + { 1949482237120640915u, 16894170802729859998u, 18338707681u }, + { 15410502396166200087u, 6143589029651889899u, 225915834834u }, + { 15694919529799920727u, 11812087701837886160u, 210333044628u }, + { 10324869370171768388u, 7306705080150829180u, 148640334557u }, + { 1631866459122189059u, 1485332570280714274u, 221396097276u }, + { 172020494461226230u, 18042602303295630634u, 252080520039u }, + { 12734610307908856767u, 13397029889257074369u, 103978091430u }, + { 1467513250829340930u, 9948104869613411488u, 166726254445u }, + { 13558759428494307997u, 10836066241170646532u, 109539287845u }, + { 7915355143999496434u, 18330574781234459389u, 37587424327u }, + { 2876370200608797469u, 666297360208433062u, 71993702450u }, + { 343685370404989503u, 5035352224889324309u, 50036120052u }, + { 4837266557407634630u, 1341745796439923765u, 244272966991u }, + { 9622591415747161468u, 6846932182653803785u, 79072736185u }, + { 16503783814424220982u, 6727685027257825533u, 185371172937u }, + { 5377083431343591334u, 2168538874806877737u, 73364708536u }, + { 16508482371299291595u, 17694936100676971444u, 184117556727u }, + { 10515883558812249028u, 2163944241059563294u, 247959244408u }, + { 63492062913405476u, 6727780864524301558u, 120117307652u }, + { 11571919759617799697u, 8599551977795002615u, 4364713731u }, + { 2956602334970088581u, 15428264807806859091u, 3466182646u }, + { 13604736747717849839u, 2126771385339683557u, 246836367911u }, + { 16573540719338151362u, 15094316562082972944u, 39115292507u }, + { 12620703004601168151u, 8111300598225956802u, 91818264540u }, + { 14649407809089591941u, 9481215200564260304u, 220439714486u }, + { 11290375247898624432u, 16836674128623424708u, 182513977705u }, + { 11020319450292874212u, 7087243115299722740u, 105912717933u }, + { 8754634933362354176u, 2343560867338408810u, 109384200219u }, + { 12976319450332528640u, 3431385749090422286u, 27127044689u }, + { 17447331119627239424u, 3504545517469224582u, 81186015794u }, + { 3665184902673858560u, 3333759805712094227u, 50189981793u }, + { 12949678516038795264u, 3595183476205994775u, 97180723481u }, + { 72057594037927936u, 14191566632569921303u, 25194895286u }, + { 0u, 12917427671358095562u, 182769326368u }, + { 0u, 3883793922738316288u, 32700255157u }, + { 0u, 7857281689266421760u, 181210540890u }, + { 0u, 15987081651486195712u, 90425944093u }, + { 0u, 16827562156399525888u, 29866661432u }, + { 0u, 7012737938513461248u, 56912223972u }, + { 0u, 7385903388887613440u, 228380161285u }, + { 0u, 0u, 5400390625u }, + { 0u, 0u, 225000000000u }, + { 9413159735776077452u, 240991986u, 0u }, + { 14279163482889998017u, 240991986510288411u, 0u }, + { 8693044629541194274u, 14135788013842776187u, 13064201u }, + { 11863110253260222498u, 13284322918167594445u, 9766302603u }, + { 8319293368489531245u, 7264587765474046287u, 139720144588u }, + { 3376307525676489265u, 16176482219778368741u, 204393814091u }, + { 13205662254759912523u, 5401983818872095469u, 75876928858u }, + { 5276250334231686323u, 11208857446851049921u, 90292842129u }, + { 13790198520922745052u, 13794690008281035639u, 145607633379u }, + { 14195535250150996227u, 14519782740993303071u, 227747811643u }, + { 16425228796427004035u, 10885858587044789123u, 59787118999u }, + { 4295900841296269186u, 8710500938899914621u, 151590123576u }, + { 4533952595483946442u, 1284182587483102819u, 56472197202u }, + { 12885038019373447184u, 10346074482131502030u, 82069615677u }, + { 12140736240487831910u, 9429804686255246574u, 61560861821u }, + { 6927124077155322074u, 6412022633845121254u, 125511190736u }, + { 12477788342407819890u, 8892351297529018260u, 208347596443u }, + { 7980854329409711087u, 14098160105983060597u, 155482055329u }, + { 2062671021810827996u, 13793833029739474340u, 161764262790u }, + { 2739521363598172769u, 16367653765996977044u, 134747765186u }, + { 12897585686593465638u, 10684788343333772342u, 194887292288u }, + { 1127632646629044686u, 13272681218705145345u, 128579223536u }, + { 4833775019274666364u, 11093568615497829248u, 240719513490u }, + { 15867662672939849256u, 12488220765137758124u, 146601383559u }, + { 2092350330982953557u, 3727114642519696453u, 135676987804u }, + { 13330062299842493592u, 11549865375695057514u, 156202047289u }, + { 4479193352178519263u, 11292809154908783229u, 57626119456u }, + { 3149393938889064983u, 17723904861837310998u, 32612184410u }, + { 9736379904070620767u, 14877674388187150875u, 90960814807u }, + { 3816238703055069186u, 12178961950105734308u, 215806520344u }, + { 11598915938798661975u, 4540604068069253114u, 24660222850u }, + { 17821633264606555643u, 13832478722153359868u, 130246146639u }, + { 2514623558764574316u, 1308046668730371491u, 79749860174u }, + { 4976730480406253215u, 18400531023544756800u, 78070909351u }, + { 17276563697191611637u, 9789823458621466539u, 167997494785u }, + { 12524734095940998814u, 1924870562610267306u, 1530707393u }, + { 15331551308930355164u, 5290016144582400923u, 193104347442u }, + { 15417115581125943816u, 15162883663174059077u, 50286772349u }, + { 6010750237807115593u, 8078086116520046390u, 125821981570u }, + { 5624630987553628432u, 15731407332173190623u, 130437913925u }, + { 14881848243837640704u, 5346389182763011056u, 69852801300u }, + { 15281613886881529856u, 6368422217216252401u, 20289828338u }, + { 14057902358273196032u, 2961453088119116188u, 242345232860u }, + { 16075318494433902592u, 10932141691610170525u, 220160540693u }, + { 13891916000577716224u, 11034016191361782553u, 21592632588u }, + { 7205759403792793600u, 5455325785621453219u, 12598155216u }, + { 0u, 7735615202566149352u, 208295733803u }, + { 0u, 7502396497775759360u, 43419348540u }, + { 0u, 1601286435751591936u, 60406705729u }, + { 0u, 11449383158571597824u, 65086805911u }, + { 0u, 13043944595690356736u, 151620672304u }, + { 0u, 7773494431818186752u, 48707113653u }, + { 0u, 9943947977234055168u, 181421401977u }, + { 0u, 0u, 121539062500u }, + { 0u, 0u, 228000000000u }, + { 4535831408134330609u, 3677u, 0u }, + { 6204770794376564579u, 3677245887913u, 0u }, + { 13869812122751887467u, 6343817245135589714u, 199u }, + { 14253229412394467550u, 17549323075660516085u, 199343899021u }, + { 12776557610216045332u, 3948641822109421754u, 141951350710u }, + { 16493640728678654060u, 1750739713693534543u, 182214056302u }, + { 9434398296825833151u, 962163898128633415u, 110094907790u }, + { 8773374058285327850u, 7967320249386531212u, 142052159009u }, + { 12932015276748029367u, 3018466665533383224u, 33431909296u }, + { 16293958583527755209u, 15076865731854945472u, 176163631405u }, + { 13511893936143127948u, 691187172844604400u, 45817318529u }, + { 18409936402005226436u, 13274492813370992341u, 129037469331u }, + { 2189663026458466887u, 6364168818499152300u, 147719611697u }, + { 9497725274248154664u, 17599380787401914158u, 49345002282u }, + { 14766925481127792125u, 3782323149461692814u, 42954064344u }, + { 6982373971809635814u, 14470163442442237466u, 216205040148u }, + { 8616702383006884794u, 476109872130437939u, 20784429132u }, + { 3059473300040871066u, 16330548844673355700u, 76025809967u }, + { 17123843157031495558u, 14089158961463739563u, 47885280826u }, + { 11210627174210626524u, 13385510793074798805u, 58763774837u }, + { 15868067138625928592u, 1549401308746959012u, 117725629994u }, + { 4467869511636937589u, 4607384943843027435u, 42083993213u }, + { 10052108125844341766u, 5157353797716093483u, 125249766838u }, + { 7470588003218451534u, 10846828782671550129u, 182279580709u }, + { 2613527085490786280u, 9915857350819131531u, 37588007766u }, + { 3632919450036549616u, 1673544973504317923u, 86537539704u }, + { 179367907231218916u, 14780986291622785694u, 120090723054u }, + { 13553068184555874624u, 8168111319515466401u, 238801278872u }, + { 8798774862365584481u, 16345760387859734482u, 152442794201u }, + { 910911255817064881u, 3177475373321281805u, 217886105446u }, + { 2304331144765093813u, 2558676822419554038u, 102172251285u }, + { 12248937023083640360u, 8813474062662382873u, 149138706148u }, + { 10206039550662130685u, 5426294560236228430u, 228477779386u }, + { 12267881323837852537u, 9919177474128333040u, 186294160017u }, + { 2858642007937891971u, 6197383943089627371u, 145537719688u }, + { 14171330289750320841u, 13673239314867423997u, 136335960856u }, + { 6601103619749017720u, 9309584098968723946u, 24741227788u }, + { 4919573414486739494u, 4647101757759615504u, 12504673565u }, + { 3401998285294974486u, 1405809295505096753u, 29251919891u }, + { 10799436256515532233u, 11332704079573859112u, 19076209074u }, + { 10083786644665753398u, 2960072434514044308u, 178614347119u }, + { 6481194517685688896u, 3887266602785432801u, 111160465848u }, + { 15104161756860547072u, 14545546084687849554u, 184210729144u }, + { 9556039274244079616u, 4617763804182385321u, 184788515633u }, + { 1376343134954323968u, 7857823815580249095u, 49250329477u }, + { 15682488278596976640u, 10939326736548364798u, 133425973482u }, + { 1506454075355430912u, 12262012446566951953u, 234593022090u }, + { 1152921504606846976u, 12555024338687723023u, 138664725026u }, + { 0u, 3332969632922829472u, 34680609233u }, + { 0u, 15535060143360327680u, 209180680645u }, + { 0u, 15794322927987458048u, 197842157297u }, + { 0u, 10571474314433921024u, 241856211961u }, + { 0u, 16679514427547975680u, 249573080770u }, + { 0u, 16925653299565166592u, 194904198288u }, + { 0u, 16717361816799281152u, 144917541503u }, + { 0u, 0u, 127906250000u }, + { 0u, 0u, 16000000000u }, + { 6172559441576707976u, 56110319u, 0u }, + { 15083329738554729992u, 56110319334615117u, 0u }, + { 10013126833549229036u, 9335385384027907407u, 3041746u }, + { 5817156823499936061u, 13237828406194798613u, 210506072255u }, + { 5282692560913632718u, 15667486867836528863u, 191717624115u }, + { 10252307034225766362u, 17982325043592934313u, 51849336164u }, + { 17981881283247669689u, 17159117626917379189u, 100974823793u }, + { 11689290159733383293u, 8336208968408929657u, 113930197630u }, + { 5530668968487988249u, 12767090573379150201u, 126451906793u }, + { 10083765740821947024u, 14736070002412246709u, 233692105366u }, + { 2798423656816843533u, 9697296975344560756u, 150798843955u }, + { 7614494481582904797u, 7291706381199103298u, 51525691522u }, + { 17811318500083423695u, 18098546597780825068u, 130395284194u }, + { 11641467412200329033u, 132913902678533478u, 226981124177u }, + { 17733593025296340645u, 1879347741692007580u, 81007205277u }, + { 3689424000190644835u, 4056624629214083684u, 157101879645u }, + { 14966634145516728506u, 14713227692042795499u, 93219910061u }, + { 14171681941562070109u, 7366415124022528526u, 173797605671u }, + { 8130575762882608170u, 825770353378039393u, 39399334164u }, + { 5234550794400656856u, 10244023944395357795u, 20044765100u }, + { 3020576149360486378u, 14302658294713551167u, 172555329650u }, + { 3038675756589057221u, 14246653166206862817u, 114775348659u }, + { 15470260187120878369u, 12404486258134291102u, 179772312615u }, + { 3497929414841828746u, 8887442218637942533u, 39672448547u }, + { 9935840636861015305u, 1186724038081863005u, 35481789208u }, + { 3647355485153741471u, 211331772484951576u, 24064332439u }, + { 766100215038272793u, 6311919513247413649u, 151011456318u }, + { 16128087474216800751u, 8131780018703965703u, 62342169842u }, + { 16216631732633731297u, 2262544347226725725u, 242440824678u }, + { 13760220872779997335u, 15318188749880522583u, 102122652774u }, + { 3826276262374222087u, 1073117094162650652u, 102830400676u }, + { 14938032745839181005u, 4447950380665871747u, 164058173794u }, + { 14479259995009508865u, 5373227185066463609u, 98241123873u }, + { 2372033248156102437u, 6739731406934274193u, 33291283229u }, + { 792005346826701645u, 12328812617001239444u, 29365361571u }, + { 16278924527931792559u, 3246111484407310759u, 163668346271u }, + { 17442516423538940144u, 3250825415176839770u, 159175972056u }, + { 13844184233048446u, 16146270540000862342u, 216176227598u }, + { 13486193870480782357u, 15686773375425916830u, 14875291079u }, + { 11931315179184648737u, 11920791905793880226u, 199850381688u }, + { 16492562205587485405u, 1853290561644080707u, 120646227424u }, + { 12128987217680380854u, 12157689141506159076u, 224100467082u }, + { 10568123814189138176u, 18100318838862562546u, 138659069648u }, + { 17007583519117541376u, 7171257882533475139u, 208981220250u }, + { 143791533903052800u, 14477550873015039462u, 154388754668u }, + { 12398714235792654336u, 8109481182495403274u, 236784829605u }, + { 9659957317919047680u, 14565395719337663965u, 165439615855u }, + { 9412523221204336640u, 1860318978161305991u, 111789591684u }, + { 4611686018427387904u, 16268646275151585618u, 132100848093u }, + { 0u, 13759019338835519104u, 221881925081u }, + { 0u, 17003783176010661888u, 217745877932u }, + { 0u, 18357489540307877888u, 172921776932u }, + { 0u, 905481790074912768u, 36995161502u }, + { 0u, 3638882110636294144u, 158049086266u }, + { 0u, 9011702854368362496u, 58197264194u }, + { 0u, 11529215046068469760u, 66488525390u }, + { 0u, 0u, 78625000000u }, + { 0u, 0u, 64000000000u }, + { 3237900842885170729u, 856u, 0u }, + { 7515893506498066595u, 856175526956u, 0u }, + { 7300206309181072546u, 7625299565768063067u, 46u }, + { 5999737279837044u, 13889021769065194705u, 46413368317u }, + { 7556839307242450651u, 14498170692313014398u, 253752925378u }, + { 12946035041643640643u, 1541631360972245751u, 194785947408u }, + { 15885877642352740665u, 9903958882920799117u, 16083572003u }, + { 10770818348246089568u, 15744148547788062576u, 35536894686u }, + { 11635415503599551744u, 17936061801321712000u, 222853492002u }, + { 6248053924100826098u, 9986394078324430610u, 34972315858u }, + { 16894170802729859998u, 13849561248103430369u, 210541363507u }, + { 6143589029651889899u, 12142378807953854930u, 51750786219u }, + { 11812087701837886160u, 2513847703931031444u, 171658239674u }, + { 7306705080150829180u, 1752183758129038045u, 186136275957u }, + { 1485332570280714274u, 15824833342220556540u, 245094986071u }, + { 18042602303295630634u, 8168747198299470695u, 87857865934u }, + { 13397029889257074369u, 17414799840149357478u, 206442828672u }, + { 9948104869613411488u, 83147520704167789u, 128944058191u }, + { 10836066241170646532u, 2383542703041471269u, 79004507436u }, + { 18330574781234459389u, 15540952725549257799u, 44129212108u }, + { 666297360208433062u, 6949835416232048690u, 204842476735u }, + { 5035352224889324309u, 15398868937585367540u, 191376751332u }, + { 1341745796439923765u, 14710915985268256079u, 228834774357u }, + { 6846932182653803785u, 9665704836873335737u, 85797480353u }, + { 6727685027257825533u, 2528789298740305993u, 161523978909u }, + { 2168538874806877737u, 10562914675687726264u, 157137085942u }, + { 17694936100676971444u, 17671658300096837111u, 246572616751u }, + { 2163944241059563294u, 356471401631698552u, 47957982516u }, + { 6727780864524301558u, 7450677157218003204u, 52019324353u }, + { 8599551977795002615u, 317174560787152643u, 193403902018u }, + { 15428264807806859091u, 7251937674440720374u, 66017194067u }, + { 2126771385339683557u, 1252631516699038247u, 83393128329u }, + { 15094316562082972944u, 10818009768860843867u, 137067905290u }, + { 8111300598225956802u, 12330114194950162396u, 10586445484u }, + { 9481215200564260304u, 15826681638261168822u, 172668416829u }, + { 16836674128623424708u, 14240150078499211625u, 61857966130u }, + { 7087243115299722740u, 10725372116242125421u, 50771960082u }, + { 2343560867338408810u, 8434925524647833627u, 18581423587u }, + { 3431385749090422286u, 17133902668520348241u, 227457258228u }, + { 3504545517469224582u, 15093996047981365810u, 244928830724u }, + { 3333759805712094227u, 6187974166976813153u, 4818247165u }, + { 3595183476205994775u, 13946144707720259865u, 253335450751u }, + { 14191566632569921303u, 9138079832881862582u, 127756022019u }, + { 12917427671358095562u, 6600697628576225568u, 3495376300u }, + { 3883793922738316288u, 8137099536646556597u, 172357824535u }, + { 7857281689266421760u, 14169855543453903706u, 23441113049u }, + { 15987081651486195712u, 3706403268650100765u, 217768149408u }, + { 16827562156399525888u, 14736932266877982264u, 160200924523u }, + { 7012737938513461248u, 18004795125138956004u, 107798890698u }, + { 7385903388887613440u, 9068489270661002501u, 202976041899u }, + { 0u, 7758835715193269217u, 171491603788u }, + { 0u, 16943947811135261184u, 76420607326u }, + { 0u, 6745843108403216384u, 94918533251u }, + { 0u, 12338229654069444608u, 131365692887u }, + { 0u, 14358176069683511296u, 215668856769u }, + { 0u, 7083775185760813056u, 193778358284u }, + { 0u, 5350276357316149248u, 12384012222u }, + { 0u, 9223372036854775808u, 190290039062u }, + { 0u, 0u, 22500000000u }, + { 14135788013842776187u, 13064201u, 0u }, + { 13284322918167594445u, 13064201766302603u, 0u }, + { 7264587765474046287u, 14699116688460625612u, 708211u }, + { 16176482219778368741u, 6684126021499623499u, 115796840712u }, + { 5401983818872095469u, 12614606079692508506u, 8362347197u }, + { 11208857446851049921u, 15358270276683001489u, 189683839165u }, + { 13794690008281035639u, 18077126190953408995u, 189832573499u }, + { 14519782740993303071u, 7864121581925945659u, 59979962974u }, + { 10885858587044789123u, 3518026639210514839u, 94426314885u }, + { 8710500938899914621u, 4698310163811252280u, 133190712606u }, + { 1284182587483102819u, 6101155398200416338u, 30254695904u }, + { 10346074482131502030u, 16049178580360033341u, 224330744296u }, + { 9429804686255246574u, 3167464649127375997u, 232870027714u }, + { 6412022633845121254u, 12778923935480989904u, 194171708602u }, + { 8892351297529018260u, 11875553912612980379u, 186692746854u }, + { 14098160105983060597u, 10628760849351697057u, 102643775067u }, + { 13793833029739474340u, 3408944711673234310u, 91576186280u }, + { 16367653765996977044u, 2102091496050506178u, 168184799263u }, + { 10684788343333772342u, 6254611118630245760u, 31113954608u }, + { 13272681218705145345u, 2647941151989776368u, 48339063148u }, + { 11093568615497829248u, 8855437735410157458u, 108143545177u }, + { 12488220765137758124u, 10184270603132180103u, 89480054241u }, + { 3727114642519696453u, 12079083162535627164u, 225552090415u }, + { 11549865375695057514u, 5952952868716156729u, 47654808410u }, + { 11292809154908783229u, 11958907037815852320u, 90322710221u }, + { 17723904861837310998u, 10101562137321697626u, 205648293649u }, + { 14877674388187150875u, 13633527411279258327u, 17547606780u }, + { 12178961950105734308u, 16555627393501768728u, 252739075001u }, + { 4540604068069253114u, 6359650463500280706u, 185897482359u }, + { 13832478722153359868u, 8093923611102181967u, 119344757342u }, + { 1308046668730371491u, 2848827352928635726u, 94438772478u }, + { 18400531023544756800u, 4686723431961561511u, 254154435240u }, + { 9789823458621466539u, 6245554925867652609u, 168254067786u }, + { 1924870562610267306u, 17527406820792516033u, 74338572210u }, + { 5290016144582400923u, 12119966834653692210u, 178950162627u }, + { 15162883663174059077u, 11606502845877928061u, 195657024718u }, + { 8078086116520046390u, 424311496652297090u, 206629189780u }, + { 15731407332173190623u, 5977664048034127173u, 148023001972u }, + { 5346389182763011056u, 6702712461535947028u, 116324049817u }, + { 6368422217216252401u, 11384349854055020018u, 153363354770u }, + { 2961453088119116188u, 3782955013294836188u, 146617146842u }, + { 10932141691610170525u, 3531805968821207061u, 218205074402u }, + { 11034016191361782553u, 3867566898657193228u, 226191459585u }, + { 5455325785621453219u, 12688734637425072080u, 1209661221u }, + { 7735615202566149352u, 18435982764454619691u, 37687857682u }, + { 7502396497775759360u, 4728836163964677692u, 18999416628u }, + { 1601286435751591936u, 2120012917348838977u, 52256350722u }, + { 11449383158571597824u, 9856965465824679831u, 2114926130u }, + { 13043944595690356736u, 11217197671061248816u, 50534347168u }, + { 7773494431818186752u, 3840562972677739189u, 160608085504u }, + { 9943947977234055168u, 17104366978925258617u, 208197335u }, + { 0u, 16177877219841993444u, 215927229591u }, + { 0u, 7338522384267208704u, 151877004481u }, + { 0u, 10935240458612244480u, 193397822095u }, + { 0u, 1732868046462124032u, 143592800573u }, + { 0u, 557965042578882560u, 61093938965u }, + { 0u, 10454684322475540480u, 21030247345u }, + { 0u, 13907115649320091648u, 177566749572u }, + { 0u, 0u, 132753906250u }, + { 0u, 0u, 74000000000u }, + { 6343817245135589714u, 199u, 0u }, + { 17549323075660516085u, 199343899021u, 0u }, + { 3948641822109421754u, 14876458284855834550u, 10u }, + { 1750739713693534543u, 10450704926982265198u, 10806454419u }, + { 962163898128633415u, 5385653213018257806u, 147566533849u }, + { 7967320249386531212u, 12735569669880147489u, 217291956845u }, + { 3018466665533383224u, 3619762560577729456u, 109690396615u }, + { 15076865731854945472u, 11123448126624084269u, 199196227721u }, + { 691187172844604400u, 4072715118852885633u, 137603003331u }, + { 13274492813370992341u, 18239087231420827283u, 195220782328u }, + { 6364168818499152300u, 423431461216085297u, 248988742900u }, + { 17599380787401914158u, 9360976716520160042u, 244022954265u }, + { 3782323149461692814u, 11655927117263208920u, 25507459564u }, + { 14470163442442237466u, 2646622721938364948u, 236631869075u }, + { 476109872130437939u, 4496462484548171852u, 147143473705u }, + { 16330548844673355700u, 13140258519803350063u, 41243753719u }, + { 14089158961463739563u, 13089764333320627770u, 247712334841u }, + { 13385510793074798805u, 6926286827289840501u, 249709597546u }, + { 1549401308746959012u, 4985580225290866218u, 106375474761u }, + { 4607384943843027435u, 10478790837359789693u, 73270268845u }, + { 5157353797716093483u, 10041191967455692214u, 173568056389u }, + { 10846828782671550129u, 5035461258013813797u, 69544334107u }, + { 9915857350819131531u, 14208759661559249750u, 27272972901u }, + { 1673544973504317923u, 12347272163241758840u, 101770258404u }, + { 14780986291622785694u, 3372534174410277614u, 228669346965u }, + { 8168111319515466401u, 17226704187274712984u, 149182825443u }, + { 16345760387859734482u, 4250480179449852121u, 227933861505u }, + { 3177475373321281805u, 4303723537755414374u, 129230418992u }, + { 2558676822419554038u, 8680503847344854165u, 48233305320u }, + { 8813474062662382873u, 8817608623911079652u, 232470571056u }, + { 5426294560236228430u, 5692030448698539450u, 48478003521u }, + { 9919177474128333040u, 16908836314686769809u, 65308565588u }, + { 6197383943089627371u, 6073762347067727240u, 84916629853u }, + { 13673239314867423997u, 10931066692585106200u, 93329259316u }, + { 9309584098968723946u, 14466591364061539596u, 52592574312u }, + { 4647101757759615504u, 4958077340960173341u, 104784235489u }, + { 1405809295505096753u, 4076890037156765715u, 225268777911u }, + { 11332704079573859112u, 14083973146609179058u, 183221008651u }, + { 2960072434514044308u, 2565183738039805295u, 11763493714u }, + { 3887266602785432801u, 1482420938751351224u, 82139058889u }, + { 14545546084687849554u, 2151089495335413944u, 201080362200u }, + { 4617763804182385321u, 3738604531753220913u, 216116610795u }, + { 7857823815580249095u, 14195686514836005765u, 235202670157u }, + { 10939326736548364798u, 17808833916231796970u, 77769549707u }, + { 12262012446566951953u, 1302384553035657354u, 139965418821u }, + { 12555024338687723023u, 1672033517974833698u, 69070602408u }, + { 3332969632922829472u, 11673925532927662545u, 168090641118u }, + { 15535060143360327680u, 3905334232240480709u, 222632844771u }, + { 15794322927987458048u, 17411087320267472625u, 227211708592u }, + { 10571474314433921024u, 16573305231063706617u, 176943856934u }, + { 16679514427547975680u, 15481103236037148354u, 38898440676u }, + { 16925653299565166592u, 907440704754420880u, 228839232288u }, + { 16717361816799281152u, 3224970785139077759u, 32049192459u }, + { 0u, 10560826509734608144u, 11174826016u }, + { 0u, 4700940027512659968u, 32572503552u }, + { 0u, 9733694683502084096u, 254838469u }, + { 0u, 1995535635724632064u, 197527664646u }, + { 0u, 10629833226245373952u, 6108178203u }, + { 0u, 15729384648544878592u, 27576244413u }, + { 0u, 7205759403792793600u, 189852691650u }, + { 0u, 0u, 194390625000u }, + { 0u, 0u, 232000000000u }, + { 9335385384027907407u, 3041746u, 0u }, + { 13237828406194798613u, 3041746506072255u, 0u }, + { 15667486867836528863u, 7535526066623007027u, 164893u }, + { 17982325043592934313u, 11302146918409311588u, 29408501686u }, + { 17159117626917379189u, 2480833299122194801u, 182612690612u }, + { 8336208968408929657u, 11513226205589330558u, 180134486242u }, + { 12767090573379150201u, 4073957068281936105u, 226624133243u }, + { 14736070002412246709u, 3729887061093812886u, 123220849655u }, + { 9697296975344560756u, 13616911779739451443u, 247202197582u }, + { 7291706381199103298u, 13039053282195777666u, 78738174266u }, + { 18098546597780825068u, 14490756113210417890u, 58706848494u }, + { 132913902678533478u, 17432486112977557585u, 238785545462u }, + { 1879347741692007580u, 14308820825344039837u, 246945016965u }, + { 4056624629214083684u, 4190949538817536349u, 133775682731u }, + { 14713227692042795499u, 13616552502810964397u, 171227191829u }, + { 7366415124022528526u, 4898145803694965031u, 21738154790u }, + { 825770353378039393u, 1399036321001644308u, 38265529016u }, + { 10244023944395357795u, 17170331128243738540u, 184075841910u }, + { 14302658294713551167u, 10641321388205367410u, 118930805515u }, + { 14246653166206862817u, 6648873641312572851u, 11576867188u }, + { 12404486258134291102u, 5988456964560374823u, 116360436162u }, + { 8887442218637942533u, 9972593758348346915u, 194324634902u }, + { 1186724038081863005u, 16709668921872818968u, 22540615390u }, + { 211331772484951576u, 6094829131503407767u, 222905832967u }, + { 6311919513247413649u, 4892016478899926334u, 7330401349u }, + { 8131780018703965703u, 13150857244079031538u, 69265196744u }, + { 2262544347226725725u, 12983943395318785894u, 200712909399u }, + { 15318188749880522583u, 15341644584614757478u, 87703860981u }, + { 1073117094162650652u, 7507635124856644772u, 245831672219u }, + { 4447950380665871747u, 11619655367084544354u, 155406989715u }, + { 5373227185066463609u, 11553116952478783009u, 147629902779u }, + { 6739731406934274193u, 17392150014233193245u, 187626295724u }, + { 12328812617001239444u, 8877887560294980515u, 172942830341u }, + { 3246111484407310759u, 18404180619915609503u, 5481271248u }, + { 3250825415176839770u, 10079413095288181976u, 208997692630u }, + { 16146270540000862342u, 14102802966539105550u, 214546406078u }, + { 15686773375425916830u, 13333966026135891399u, 190764514480u }, + { 11920791905793880226u, 12344968670173516152u, 176722835746u }, + { 1853290561644080707u, 10577007819804726752u, 34669222092u }, + { 12157689141506159076u, 15337041354031088010u, 204573380742u }, + { 18100318838862562546u, 14333607285614673616u, 134831422677u }, + { 7171257882533475139u, 17171597563219696538u, 213777026407u }, + { 14477550873015039462u, 2849642930482147564u, 103930874169u }, + { 8109481182495403274u, 14791248423979435173u, 57154479452u }, + { 14565395719337663965u, 13882371364576310127u, 92801835183u }, + { 1860318978161305991u, 11735995808941329540u, 175752564859u }, + { 16268646275151585618u, 11376996674339273181u, 123636209607u }, + { 13759019338835519104u, 9849638057168043481u, 199616748225u }, + { 17003783176010661888u, 18241520229279361964u, 193533949948u }, + { 18357489540307877888u, 1865852368526961444u, 252988874793u }, + { 905481790074912768u, 10601487369276448158u, 41101148059u }, + { 3638882110636294144u, 15999931310312762170u, 155574707781u }, + { 9011702854368362496u, 5773775867713013570u, 69867358014u }, + { 11529215046068469760u, 17726239863982547534u, 62312997016u }, + { 0u, 9711316695888316992u, 152960941388u }, + { 0u, 17872002620723724288u, 76526451532u }, + { 0u, 7429694208660733952u, 76968843203u }, + { 0u, 1782821038871019520u, 195402764530u }, + { 0u, 3225250234313474048u, 242096646922u }, + { 0u, 10009250171830927360u, 10174841165u }, + { 0u, 1152921504606846976u, 77542602539u }, + { 0u, 0u, 43062500000u }, + { 0u, 0u, 160000000000u }, + { 7625299565768063067u, 46u, 0u }, + { 13889021769065194705u, 46413368317u, 0u }, + { 14498170692313014398u, 9519880170333822146u, 2u }, + { 1541631360972245751u, 2285186318012886800u, 2516073738u }, + { 9903958882920799117u, 9706420951402272035u, 10123880198u }, + { 15744148547788062576u, 2369632031840402142u, 6526186134u }, + { 17936061801321712000u, 15599123897979399458u, 150128458009u }, + { 9986394078324430610u, 17579576584023912658u, 25845630200u }, + { 13849561248103430369u, 3480927339588501811u, 248952990756u }, + { 12142378807953854930u, 3547346616671294635u, 36188701449u }, + { 2513847703931031444u, 7705317123868384954u, 9192302045u }, + { 1752183758129038045u, 4969425237478353909u, 221417706078u }, + { 15824833342220556540u, 17043246700132217175u, 94269393081u }, + { 8168747198299470695u, 17053788362783499470u, 185923916254u }, + { 17414799840149357478u, 11102988228454224768u, 222924487719u }, + { 83147520704167789u, 16944305387801685839u, 39601894197u }, + { 2383542703041471269u, 11725142977459199276u, 53918552635u }, + { 15540952725549257799u, 8175984171998533324u, 59635621274u }, + { 6949835416232048690u, 1372352885142856895u, 154443220990u }, + { 15398868937585367540u, 17975093466502888164u, 254074395398u }, + { 14710915985268256079u, 6467823391459085653u, 6974431769u }, + { 9665704836873335737u, 11319386883146885025u, 25350621408u }, + { 2528789298740305993u, 9141999262922068637u, 224613625192u }, + { 10562914675687726264u, 1587330393383478774u, 104495588773u }, + { 17671658300096837111u, 884187548095712303u, 165086049353u }, + { 356471401631698552u, 488841225726377268u, 73047931903u }, + { 7450677157218003204u, 17462624199405856193u, 255026500135u }, + { 317174560787152643u, 13183677579115583554u, 39946650754u }, + { 7251937674440720374u, 11645015818917277779u, 130714688593u }, + { 1252631516699038247u, 8760523002035971977u, 81631277572u }, + { 10818009768860843867u, 10068817678491468042u, 4474908903u }, + { 12330114194950162396u, 1273658177787418284u, 231545831700u }, + { 15826681638261168822u, 3100019384328057661u, 20069045148u }, + { 14240150078499211625u, 10363063568089458738u, 156168052387u }, + { 10725372116242125421u, 13030756371481403666u, 163561782801u }, + { 8434925524647833627u, 6538878900684195299u, 17706398718u }, + { 17133902668520348241u, 8984884716779098868u, 254354473335u }, + { 15093996047981365810u, 8728727397070363908u, 119487071576u }, + { 6187974166976813153u, 6398650562917867005u, 88473185260u }, + { 13946144707720259865u, 1190873176164938879u, 236346871542u }, + { 9138079832881862582u, 4383628525805121795u, 246064557364u }, + { 6600697628576225568u, 10189374699734119852u, 52237636978u }, + { 8137099536646556597u, 5276291920541626391u, 114552367109u }, + { 14169855543453903706u, 2692252373800386521u, 5286028358u }, + { 3706403268650100765u, 11578684995169173920u, 70145947293u }, + { 14736932266877982264u, 5799408022254132587u, 157627681771u }, + { 18004795125138956004u, 15548569837712345290u, 235314386538u }, + { 9068489270661002501u, 15763030464322902955u, 106842889659u }, + { 7758835715193269217u, 13257749746581255500u, 187854515593u }, + { 16943947811135261184u, 16152470009188707678u, 137718704053u }, + { 6745843108403216384u, 13806790848493904003u, 181875627153u }, + { 12338229654069444608u, 11981226523265951191u, 145748467631u }, + { 14358176069683511296u, 5133628726077003713u, 175649503591u }, + { 7083775185760813056u, 16183955741910833164u, 103278294570u }, + { 5350276357316149248u, 13640425554331371454u, 42877333998u }, + { 9223372036854775808u, 18108120906868035862u, 238739448950u }, + { 0u, 6324011669895037184u, 118981643201u }, + { 0u, 10444437689515769856u, 193342825359u }, + { 0u, 12324712543665782784u, 143566194101u }, + { 0u, 13928941951563857920u, 181668124005u }, + { 0u, 3975288688270639104u, 101755089456u }, + { 0u, 11141905478114607104u, 48215500831u }, + { 0u, 4611686018427387904u, 31604003906u }, + { 0u, 0u, 66250000000u }, + { 0u, 0u, 128000000000u }, + { 14699116688460625612u, 708211u, 0u }, + { 6684126021499623499u, 708211796840712u, 0u }, + { 12614606079692508506u, 4398362855256705725u, 38392u }, + { 15358270276683001489u, 2812083125569302717u, 248238435728u }, + { 18077126190953408995u, 12868509142973100603u, 144152443331u }, + { 7864121581925945659u, 8726243776748165726u, 195697603278u }, + { 3518026639210514839u, 358304413426858117u, 206473050623u }, + { 4698310163811252280u, 3180720351566429470u, 255019423721u }, + { 6101155398200416338u, 14053818240400098784u, 233172427195u }, + { 16049178580360033341u, 7340140541492429288u, 187761859013u }, + { 3167464649127375997u, 1323571167904965058u, 197397909816u }, + { 12778923935480989904u, 14463851737583396026u, 56071750936u }, + { 11875553912612980379u, 15122784818916048486u, 24784086973u }, + { 10628760849351697057u, 13557974621377508955u, 189819807807u }, + { 3408944711673234310u, 17525172074563876264u, 63734979276u }, + { 2102091496050506178u, 15148880683074215967u, 204950041481u }, + { 6254611118630245760u, 6744828147558597936u, 137821222467u }, + { 2647941151989776368u, 9799290779647971692u, 67365637866u }, + { 8855437735410157458u, 11170890203898678105u, 234531220617u }, + { 10184270603132180103u, 7068779781287527905u, 137605575171u }, + { 12079083162535627164u, 14474741922505540911u, 3383199319u }, + { 5952952868716156729u, 17107062680405191514u, 87784677331u }, + { 11958907037815852320u, 2712598571300237005u, 211927375726u }, + { 10101562137321697626u, 3767556054903418641u, 110147050263u }, + { 13633527411279258327u, 18158239681706277628u, 23204239622u }, + { 16555627393501768728u, 10531652712128330681u, 6984360145u }, + { 6359650463500280706u, 9548395326934120567u, 209570922037u }, + { 8093923611102181967u, 15875647850297719390u, 53517619547u }, + { 2848827352928635726u, 8215825295203192574u, 91860620594u }, + { 4686723431961561511u, 12747310908260543144u, 50445380781u }, + { 6245554925867652609u, 77706528053613642u, 173691033109u }, + { 17527406820792516033u, 6024737704056756146u, 21004212479u }, + { 12119966834653692210u, 6819452388570089667u, 255326601685u }, + { 11606502845877928061u, 13695926775373186254u, 213369683254u }, + { 424311496652297090u, 3746531715392682132u, 54742457678u }, + { 5977664048034127173u, 4717376233154528116u, 78203099891u }, + { 6702712461535947028u, 385190957950313369u, 243255729478u }, + { 11384349854055020018u, 12388374310648616082u, 70020881243u }, + { 3782955013294836188u, 1078067332084407770u, 91671575117u }, + { 3531805968821207061u, 3257295319358714850u, 77058442147u }, + { 3867566898657193228u, 1545453099660723457u, 163176578333u }, + { 12688734637425072080u, 7495477664653506341u, 29083779180u }, + { 18435982764454619691u, 7225503732673614354u, 108406330658u }, + { 4728836163964677692u, 3935478326103643956u, 34391695342u }, + { 2120012917348838977u, 10082240682742686210u, 238213342707u }, + { 9856965465824679831u, 10838712705567897138u, 243546559362u }, + { 11217197671061248816u, 2142546572501643680u, 130587567793u }, + { 3840562972677739189u, 7893042119150331392u, 177116147682u }, + { 17104366978925258617u, 12084811642251302615u, 226427882670u }, + { 16177877219841993444u, 15317234482572954775u, 174655118951u }, + { 7338522384267208704u, 2283226355108359361u, 103830348945u }, + { 10935240458612244480u, 13359725152575722127u, 145123773948u }, + { 1732868046462124032u, 13126551011491594557u, 252724232151u }, + { 557965042578882560u, 3598021288691861269u, 215711591756u }, + { 10454684322475540480u, 16462621795896662961u, 76195049124u }, + { 13907115649320091648u, 14682112756964627332u, 164892440515u }, + { 0u, 7174112100896070218u, 195795918927u }, + { 0u, 5023109019590616064u, 79388909396u }, + { 0u, 10765223023086141440u, 84272303285u }, + { 0u, 8228137177297453056u, 181583583909u }, + { 0u, 2891199497780592640u, 165446048210u }, + { 0u, 15294857653247803392u, 210156732238u }, + { 0u, 14303432416528695296u, 78829135894u }, + { 0u, 0u, 22775390625u }, + { 0u, 0u, 161000000000u }, + { 14876458284855834550u, 10u, 0u }, + { 10450704926982265198u, 10806454419u, 0u }, + { 5385653213018257806u, 10806454419566533849u, 0u }, + { 12735569669880147489u, 17118225092618494573u, 585819067u }, + { 3619762560577729456u, 13385738875341807559u, 187927980841u }, + { 11123448126624084269u, 8272682717439277193u, 41725642358u }, + { 4072715118852885633u, 13402436483369350083u, 118448463028u }, + { 18239087231420827283u, 10946328903241612536u, 180726547537u }, + { 423431461216085297u, 16265808923426731252u, 81593401678u }, + { 9360976716520160042u, 11080374459871185177u, 78881771268u }, + { 11655927117263208920u, 1240761893433831916u, 4600668303u }, + { 2646622721938364948u, 367264070493390483u, 143067261837u }, + { 4496462484548171852u, 2863675693461092905u, 141019909425u }, + { 13140258519803350063u, 7511929581752138999u, 49155240170u }, + { 13089764333320627770u, 11154557789993845753u, 234407222518u }, + { 6926286827289840501u, 8325416539745948522u, 246604689789u }, + { 4985580225290866218u, 17745129874679852617u, 125451321734u }, + { 10478790837359789693u, 1074820986392253357u, 134961965418u }, + { 10041191967455692214u, 7820952682162838597u, 106058266162u }, + { 5035461258013813797u, 8215518006273528603u, 50423974694u }, + { 14208759661559249750u, 9680426791089900133u, 38445364123u }, + { 12347272163241758840u, 16128495723604797412u, 155524776987u }, + { 3372534174410277614u, 2264789053583348885u, 27874327505u }, + { 17226704187274712984u, 11175458488686298083u, 209122774460u }, + { 4250480179449852121u, 11026777810412287617u, 188605822818u }, + { 4303723537755414374u, 16199890034895598640u, 98597762822u }, + { 8680503847344854165u, 9094320719494763752u, 6878197798u }, + { 8817608623911079652u, 1250835564687222832u, 38493004114u }, + { 5692030448698539450u, 15362466642459337025u, 82067807931u }, + { 16908836314686769809u, 7831109835595423828u, 187832800985u }, + { 6073762347067727240u, 15426237284335022429u, 217424525314u }, + { 10931066692585106200u, 15636308361455434548u, 2836257998u }, + { 14466591364061539596u, 13967173875944980328u, 206847645974u }, + { 4958077340960173341u, 18245979923595824097u, 22757162012u }, + { 4076890037156765715u, 11335054479675278263u, 28989116553u }, + { 14083973146609179058u, 11165339882630461707u, 137614474534u }, + { 2565183738039805295u, 15944437408299395922u, 38605274287u }, + { 1482420938751351224u, 15806416348777321161u, 175864349683u }, + { 2151089495335413944u, 4201030477408556248u, 243856867547u }, + { 3738604531753220913u, 9485474942554588907u, 219227738318u }, + { 14195686514836005765u, 18238757647663230541u, 206514208626u }, + { 17808833916231796970u, 4642199687824746379u, 114988725033u }, + { 1302384553035657354u, 6134575894869364037u, 41251654149u }, + { 1672033517974833698u, 11524208547121316008u, 5332556025u }, + { 11673925532927662545u, 2734683241527878366u, 249624728597u }, + { 3905334232240480709u, 10629223456178675171u, 21148247475u }, + { 17411087320267472625u, 2788042336985254064u, 179576211358u }, + { 16573305231063706617u, 17285498758066142502u, 158151140077u }, + { 15481103236037148354u, 5525538192421886436u, 237937048765u }, + { 907440704754420880u, 11414325503043801888u, 189299540025u }, + { 3224970785139077759u, 7246608114685173259u, 57618771825u }, + { 10560826509734608144u, 1007884269852184608u, 113392839413u }, + { 4700940027512659968u, 13823717876510029312u, 245054637515u }, + { 9733694683502084096u, 12487410768239429317u, 203749385247u }, + { 1995535635724632064u, 3361062421598631942u, 31676943894u }, + { 10629833226245373952u, 17853337379088328475u, 22182203558u }, + { 15729384648544878592u, 11551561037491869885u, 166967831358u }, + { 7205759403792793600u, 11480877996635204802u, 62626211378u }, + { 0u, 5527488381934471912u, 50622379643u }, + { 0u, 11143438404407726080u, 123299645745u }, + { 0u, 6472279730688098304u, 49604087006u }, + { 0u, 4561816853579563008u, 222350862987u }, + { 0u, 2888714464062865408u, 139247296587u }, + { 0u, 16258276129784201216u, 75156597524u }, + { 0u, 720575940379279360u, 20881362915u }, + { 0u, 0u, 227039062500u }, + { 0u, 0u, 228000000000u }, + { 7535526066623007027u, 164893u, 0u }, + { 11302146918409311588u, 164893408501686u, 0u }, + { 2480833299122194801u, 16409970870640346804u, 8938u }, + { 11513226205589330558u, 7721907286269370594u, 234889586303u }, + { 4073957068281936105u, 14300743897882155131u, 127418605432u }, + { 3729887061093812886u, 2068482633821123575u, 120775244880u }, + { 13616911779739451443u, 4922882895416406094u, 80112132668u }, + { 13039053282195777666u, 9317632875623428410u, 60266870016u }, + { 14490756113210417890u, 5693844901999766254u, 505109890u }, + { 17432486112977557585u, 11569484900262102262u, 130308663950u }, + { 14308820825344039837u, 3138170119352085637u, 142627183033u }, + { 4190949538817536349u, 950584692575235243u, 185170120543u }, + { 13616552502810964397u, 8136430299747162645u, 95051531299u }, + { 4898145803694965031u, 6698711700804594470u, 35441076770u }, + { 1399036321001644308u, 17401191571004302008u, 34363137888u }, + { 17170331128243738540u, 4721732028538188150u, 96943320485u }, + { 10641321388205367410u, 2984214103553086219u, 165255965606u }, + { 6648873641312572851u, 13128675202005662068u, 166161774570u }, + { 5988456964560374823u, 14638512997670672834u, 234711706908u }, + { 9972593758348346915u, 12942085665769692438u, 28793555379u }, + { 16709668921872818968u, 14131134357119205086u, 179701591869u }, + { 6094829131503407767u, 8921946894736102919u, 61766050328u }, + { 4892016478899926334u, 5601522560505809989u, 24483659710u }, + { 13150857244079031538u, 8602606493507716808u, 190303659146u }, + { 12983943395318785894u, 8576789731078566487u, 138466348232u }, + { 15341644584614757478u, 17881118138842658549u, 200464948702u }, + { 7507635124856644772u, 11624372674432704923u, 222969337356u }, + { 11619655367084544354u, 6826284072848095635u, 12630158505u }, + { 11553116952478783009u, 1646466632033733563u, 169370053601u }, + { 17392150014233193245u, 17871081657060299180u, 225089255134u }, + { 8877887560294980515u, 15910893124677544709u, 222968793277u }, + { 18404180619915609503u, 11031217459450580944u, 189862531244u }, + { 10079413095288181976u, 13554987390037243094u, 172598003496u }, + { 14102802966539105550u, 15026714590903687870u, 40734817338u }, + { 13333966026135891399u, 4406379654994689200u, 58814599830u }, + { 12344968670173516152u, 13596329092861950242u, 150238870319u }, + { 10577007819804726752u, 284812388227373260u, 47737058477u }, + { 15337041354031088010u, 9285079159392309382u, 173015439710u }, + { 14333607285614673616u, 15046108141952711893u, 94503345149u }, + { 17171597563219696538u, 13795366909944958311u, 253815651156u }, + { 2849642930482147564u, 12909920641180059961u, 84747848338u }, + { 14791248423979435173u, 5333762939889788252u, 146699848200u }, + { 13882371364576310127u, 6411331390005944495u, 8289143868u }, + { 11735995808941329540u, 1447104583224217723u, 60347558971u }, + { 11376996674339273181u, 11940049226167932871u, 59078447696u }, + { 9849638057168043481u, 9772290783590472385u, 80647271365u }, + { 18241520229279361964u, 16351989577831528444u, 197529756944u }, + { 1865852368526961444u, 4376738725895725097u, 16886443131u }, + { 10601487369276448158u, 13851276297739812763u, 123237263481u }, + { 15999931310312762170u, 12641996203470333509u, 121750879192u }, + { 5773775867713013570u, 7707081716407945022u, 216685323987u }, + { 17726239863982547534u, 417638323657040024u, 211417801737u }, + { 9711316695888316992u, 16438047707692449100u, 9022640218u }, + { 17872002620723724288u, 14850108107043306316u, 90891108351u }, + { 7429694208660733952u, 10423290807904720835u, 255805025973u }, + { 1782821038871019520u, 16951162310302339314u, 181565047726u }, + { 3225250234313474048u, 2752437506572397322u, 174918924350u }, + { 10009250171830927360u, 3925815842962784589u, 62149209936u }, + { 1152921504606846976u, 5274166674003605291u, 80212818903u }, + { 0u, 5538963350863452832u, 215285913148u }, + { 0u, 16900671634439028736u, 60300267804u }, + { 0u, 2326997710751662080u, 28916187245u }, + { 0u, 12327726161625874432u, 109126146798u }, + { 0u, 5756455743825903616u, 238668287374u }, + { 0u, 3018537650245074944u, 142312058091u }, + { 0u, 16717361816799281152u, 235163635253u }, + { 0u, 0u, 53906250000u }, + { 0u, 0u, 16000000000u }, + { 2285186318012886800u, 2516073738u, 0u }, + { 9706420951402272035u, 2516073738123880198u, 0u }, + { 2369632031840402142u, 11997425759292732054u, 136396630u }, + { 15599123897979399458u, 11491152661270395161u, 86650381753u }, + { 17579576584023912658u, 18181063258234881272u, 185622936633u }, + { 3480927339588501811u, 2466921813123869732u, 57985597414u }, + { 3547346616671294635u, 8430880678232179465u, 230133732099u }, + { 7705317123868384954u, 6738034873677997533u, 3457038957u }, + { 4969425237478353909u, 7678250951042929246u, 109365269602u }, + { 17043246700132217175u, 1853560606315563193u, 98416238818u }, + { 17053788362783499470u, 14942676593409905118u, 226100481721u }, + { 11102988228454224768u, 4909892170837638183u, 185810044121u }, + { 16944305387801685839u, 16871149368312132405u, 217266165787u }, + { 11725142977459199276u, 16096130589333770811u, 27914586839u }, + { 8175984171998533324u, 12512479187631824282u, 215872572987u }, + { 1372352885142856895u, 16980304980540557310u, 59678302855u }, + { 17975093466502888164u, 8640919162749295366u, 135920504177u }, + { 6467823391459085653u, 7862382415464063513u, 113468425166u }, + { 11319386883146885025u, 14534157903009925344u, 206426220604u }, + { 9141999262922068637u, 12627464554215107944u, 60787898278u }, + { 1587330393383478774u, 2456849734836299173u, 166684536225u }, + { 884187548095712303u, 18428252197697827913u, 161133186090u }, + { 488841225726377268u, 7244734215936736255u, 42998997553u }, + { 17462624199405856193u, 14756175050504770087u, 49392737828u }, + { 13183677579115583554u, 6764116534566945922u, 36799933852u }, + { 11645015818917277779u, 1588822142405565521u, 156366683492u }, + { 8760523002035971977u, 17053265624843842052u, 100086130220u }, + { 10068817678491468042u, 16996891591759999207u, 44924459381u }, + { 1273658177787418284u, 8565556232370585876u, 117921403339u }, + { 3100019384328057661u, 14464960359145886620u, 203464339733u }, + { 10363063568089458738u, 5813189542048784035u, 21784147072u }, + { 13030756371481403666u, 9739241026882027025u, 128315133636u }, + { 6538878900684195299u, 18175068535675302910u, 196527965313u }, + { 8984884716779098868u, 10562697212061761911u, 129985272439u }, + { 8728727397070363908u, 4264834835660801368u, 119572604963u }, + { 6398650562917867005u, 13019066443690126316u, 35231197159u }, + { 1190873176164938879u, 1828040177823321846u, 231705765006u }, + { 4383628525805121795u, 11240369830376975668u, 142099098256u }, + { 10189374699734119852u, 8886938465302549874u, 144609341669u }, + { 5276291920541626391u, 9985240313589688325u, 229481761899u }, + { 2692252373800386521u, 722909126956573766u, 107541300962u }, + { 11578684995169173920u, 5493363474638452381u, 226039188982u }, + { 5799408022254132587u, 12410535279213120491u, 246297795830u }, + { 15548569837712345290u, 10543108918366869098u, 246672776465u }, + { 15763030464322902955u, 12953909016524823995u, 17571543079u }, + { 13257749746581255500u, 16505942145872588169u, 39702232814u }, + { 16152470009188707678u, 12428594380392015797u, 238894788916u }, + { 13806790848493904003u, 7528259605829768337u, 52673755451u }, + { 11981226523265951191u, 18147447600042811311u, 59408107770u }, + { 5133628726077003713u, 12021069431116183911u, 250983775105u }, + { 16183955741910833164u, 11819985069665662506u, 129651663479u }, + { 13640425554331371454u, 10401877114068152814u, 119640762674u }, + { 18108120906868035862u, 4611631138117837942u, 50563886888u }, + { 6324011669895037184u, 17200813398607252417u, 40249997024u }, + { 10444437689515769856u, 14100466137553658767u, 224932457962u }, + { 12324712543665782784u, 17887776768825509301u, 234764387800u }, + { 13928941951563857920u, 12632656857970087269u, 216969698321u }, + { 3975288688270639104u, 8923681664054686256u, 17684817700u }, + { 11141905478114607104u, 6213926103737837599u, 36483753752u }, + { 4611686018427387904u, 1233118281776157762u, 24336857609u }, + { 0u, 30716279628678784u, 9066847476u }, + { 0u, 15775734650898546688u, 244001665132u }, + { 0u, 976806005729918976u, 108855204289u }, + { 0u, 12460098853279891456u, 193052952759u }, + { 0u, 5635665595421687808u, 183675463312u }, + { 0u, 1805943450575568896u, 144305510044u }, + { 0u, 11529215046068469760u, 156097900390u }, + { 0u, 0u, 102625000000u }, + { 0u, 0u, 64000000000u }, + { 4398362855256705725u, 38392u, 0u }, + { 2812083125569302717u, 38392238435728u, 0u }, + { 12868509142973100603u, 4564018338575530435u, 2081u }, + { 8726243776748165726u, 16553437246451512014u, 33247415929u }, + { 358304413426858117u, 4339777136957372927u, 121897363631u }, + { 3180720351566429470u, 18439463366554654697u, 175235259789u }, + { 14053818240400098784u, 1370067356680643003u, 141999605312u }, + { 7340140541492429288u, 4210124040914115013u, 64074271500u }, + { 1323571167904965058u, 10692225626142609720u, 12228231281u }, + { 14463851737583396026u, 11592856673895384344u, 113579626712u }, + { 15122784818916048486u, 10284479231227406269u, 216628450019u }, + { 13557974621377508955u, 4961071383534266431u, 227557522736u }, + { 17525172074563876264u, 10960611551445686988u, 48268940218u }, + { 15148880683074215967u, 14616396723115619209u, 186594175942u }, + { 6744828147558597936u, 1025604265437492803u, 198792356454u }, + { 9799290779647971692u, 11711588454892179178u, 102055598118u }, + { 11170890203898678105u, 5580373263251565705u, 38634886482u }, + { 7068779781287527905u, 14109334653033148931u, 82302512640u }, + { 14474741922505540911u, 2899414033769399895u, 764868564u }, + { 17107062680405191514u, 13233457234892808147u, 212157177549u }, + { 2712598571300237005u, 3287946691509034862u, 205717387154u }, + { 3767556054903418641u, 5488480288717445911u, 146178239947u }, + { 18158239681706277628u, 11687233053874362630u, 203297531112u }, + { 10531652712128330681u, 6783772100089274577u, 232633566173u }, + { 9548395326934120567u, 7898291058728402485u, 221367749022u }, + { 15875647850297719390u, 4423684977486598491u, 158428167216u }, + { 8215825295203192574u, 2750833684599526706u, 48239808443u }, + { 12747310908260543144u, 15669689830489025709u, 187149122992u }, + { 77706528053613642u, 15117307274214954517u, 176849455587u }, + { 6024737704056756146u, 8148639818575698175u, 227819510869u }, + { 6819452388570089667u, 13006484426078994901u, 85441738649u }, + { 13695926775373186254u, 10287496057845513526u, 153705082933u }, + { 3746531715392682132u, 14159876032966532430u, 53557686278u }, + { 4717376233154528116u, 15742212196465548019u, 6767608417u }, + { 385190957950313369u, 2892220461917134150u, 97853387033u }, + { 12388374310648616082u, 7487151560715393883u, 25156787585u }, + { 1078067332084407770u, 7245756744165177933u, 129405879299u }, + { 3257295319358714850u, 3067122860671533987u, 3392793260u }, + { 1545453099660723457u, 8135043905834122525u, 172166269063u }, + { 7495477664653506341u, 14730019368921022572u, 135441001613u }, + { 7225503732673614354u, 495969939682055458u, 141798515950u }, + { 3935478326103643956u, 5617761407265775598u, 238026886584u }, + { 10082240682742686210u, 2087044847072781811u, 184304539456u }, + { 10838712705567897138u, 15929674232061203330u, 64113138927u }, + { 2142546572501643680u, 8658086469608285873u, 239863549370u }, + { 7893042119150331392u, 18369871790780313570u, 186469355807u }, + { 12084811642251302615u, 3545648451947416750u, 31995832745u }, + { 15317234482572954775u, 13347376792767929959u, 169192209987u }, + { 2283226355108359361u, 14482164459838203025u, 67723562745u }, + { 13359725152575722127u, 8899577765623565820u, 249785079708u }, + { 13126551011491594557u, 7095320096604405719u, 156482447077u }, + { 3598021288691861269u, 2968593824439315788u, 229384638073u }, + { 16462621795896662961u, 12621408323612585636u, 121160927793u }, + { 14682112756964627332u, 3954422936414648259u, 49684207916u }, + { 7174112100896070218u, 17143730087577690191u, 44214369696u }, + { 5023109019590616064u, 5033045529399041876u, 160929363470u }, + { 10765223023086141440u, 15857648521994521781u, 14272841944u }, + { 8228137177297453056u, 16655573486499109541u, 216859644848u }, + { 2891199497780592640u, 16652154439190075858u, 176902900447u }, + { 15294857653247803392u, 18016950600164130638u, 223902715100u }, + { 14303432416528695296u, 2086292996072613910u, 220976700849u }, + { 0u, 17324462585194799521u, 177113098169u }, + { 0u, 11079151463184927232u, 185939160998u }, + { 0u, 5239846817488961536u, 166600602004u }, + { 0u, 2778806963520143360u, 148284052665u }, + { 0u, 6240890740138835968u, 185150639427u }, + { 0u, 17250651344549707776u, 67338319364u }, + { 0u, 4197354852709302272u, 4935159683u }, + { 0u, 9223372036854775808u, 131227539062u }, + { 0u, 0u, 118500000000u }, + { 17118225092618494573u, 585819067u, 0u }, + { 13385738875341807559u, 585819067927980841u, 0u }, + { 8272682717439277193u, 5654803392547571318u, 31757315u }, + { 13402436483369350083u, 2931628102185393332u, 3306547506u }, + { 10946328903241612536u, 15964697617980212305u, 50158923877u }, + { 16265808923426731252u, 450380868305846606u, 101865447992u }, + { 11080374459871185177u, 14631133530814566148u, 56024415195u }, + { 1240761893433831916u, 31969822783742095u, 219793155338u }, + { 367264070493390483u, 10437269029385743245u, 10001733087u }, + { 2863675693461092905u, 15196146496377392433u, 223565805487u }, + { 7511929581752138999u, 4409099735137480938u, 175823784752u }, + { 11154557789993845753u, 10644987914903248118u, 48239017775u }, + { 8325416539745948522u, 3154431617534062973u, 47577065951u }, + { 17745129874679852617u, 11702056331247960454u, 223171002080u }, + { 1074820986392253357u, 15575315065965259114u, 224634369744u }, + { 7820952682162838597u, 10759747609480050226u, 208844339521u }, + { 8215518006273528603u, 12538236653960743718u, 65583287086u }, + { 9680426791089900133u, 17857942663978005403u, 46679699170u }, + { 16128495723604797412u, 11443004154750813211u, 226968081011u }, + { 2264789053583348885u, 4004313188770806737u, 115620326498u }, + { 11175458488686298083u, 17134872954824183228u, 98217074252u }, + { 11026777810412287617u, 2659553912986171234u, 76928883324u }, + { 16199890034895598640u, 9501854300969137926u, 124144174706u }, + { 9094320719494763752u, 14528169966301018150u, 114515096553u }, + { 1250835564687222832u, 18172091996515901778u, 233787573671u }, + { 15362466642459337025u, 1133541705604751035u, 167985111081u }, + { 7831109835595423828u, 18280349987988641497u, 41061449418u }, + { 15426237284335022429u, 9936015874712336386u, 202990979758u }, + { 15636308361455434548u, 15876720399740689614u, 174538632499u }, + { 13967173875944980328u, 8618117825152456982u, 51860678737u }, + { 18245979923595824097u, 8085525680745921564u, 81467189103u }, + { 11335054479675278263u, 8072355444669730953u, 111438317225u }, + { 11165339882630461707u, 9395030504766848294u, 169437603265u }, + { 15944437408299395922u, 3537903114058185903u, 193509305624u }, + { 15806416348777321161u, 2126094743961928691u, 24191790112u }, + { 4201030477408556248u, 289185362555601115u, 32115255827u }, + { 9485474942554588907u, 16909937501450129614u, 19015676769u }, + { 18238757647663230541u, 14449642060360499058u, 97916689548u }, + { 4642199687824746379u, 12433818908498244393u, 140783316665u }, + { 6134575894869364037u, 11884444034578008581u, 185674038673u }, + { 11524208547121316008u, 988625838444140793u, 145644257002u }, + { 2734683241527878366u, 1675370907158909973u, 234053593514u }, + { 10629223456178675171u, 15920186275316934067u, 170090822038u }, + { 2788042336985254064u, 5600921198503757726u, 150863035027u }, + { 17285498758066142502u, 10457357161776341741u, 147303626546u }, + { 5525538192421886436u, 12225356765775740093u, 50566894467u }, + { 11414325503043801888u, 4486633318598164537u, 131662737918u }, + { 7246608114685173259u, 10302486602879381361u, 254243220879u }, + { 1007884269852184608u, 15536428611301239541u, 143558498917u }, + { 13823717876510029312u, 12026126645955462603u, 101842231482u }, + { 12487410768239429317u, 14877968141142123551u, 186651937631u }, + { 3361062421598631942u, 734560801645383190u, 95806536269u }, + { 17853337379088328475u, 15648943144911081638u, 77039820620u }, + { 11551561037491869885u, 13664182862003235646u, 76848330907u }, + { 11480877996635204802u, 3895127525902132786u, 155740736837u }, + { 5527488381934471912u, 5249187334214137467u, 69211155286u }, + { 11143438404407726080u, 10642260063359027505u, 86284559015u }, + { 6472279730688098304u, 783598951897779422u, 167576918074u }, + { 4561816853579563008u, 5538576558607624843u, 58042478984u }, + { 2888714464062865408u, 15974581187564609611u, 136300246836u }, + { 16258276129784201216u, 7474269406918257428u, 52865983781u }, + { 720575940379279360u, 8045286838779138019u, 37405180956u }, + { 0u, 8184246376556341732u, 28436135873u }, + { 0u, 1493267152679331840u, 193443668885u }, + { 0u, 10179074811222818816u, 149080950174u }, + { 0u, 3892499202005008384u, 158551808751u }, + { 0u, 10341173215925108736u, 239211012804u }, + { 0u, 6230307872002015232u, 196560596123u }, + { 0u, 9295429630892703744u, 155337745666u }, + { 0u, 0u, 2503906250u }, + { 0u, 0u, 202000000000u }, + { 16409970870640346804u, 8938u, 0u }, + { 7721907286269370594u, 8938889586303u, 0u }, + { 14300743897882155131u, 10665454627995623288u, 484u }, + { 2068482633821123575u, 16803537892767562832u, 228578175453u }, + { 4922882895416406094u, 8099123106849104444u, 221910921614u }, + { 9317632875623428410u, 7077413686679401728u, 142439054343u }, + { 5693844901999766254u, 13536636358372449666u, 7383667364u }, + { 11569484900262102262u, 7280632235418610318u, 164733822527u }, + { 3138170119352085637u, 6187823673116858809u, 63394683864u }, + { 950584692575235243u, 8624343686231740255u, 216335442593u }, + { 8136430299747162645u, 806211610822132771u, 161467526608u }, + { 6698711700804594470u, 18388078233202190882u, 208043704818u }, + { 17401191571004302008u, 7628864426595573600u, 242996819718u }, + { 4721732028538188150u, 4530799784343874981u, 6413561569u }, + { 2984214103553086219u, 8561580552078486438u, 225245615148u }, + { 13128675202005662068u, 13349114951221999594u, 44464124211u }, + { 14638512997670672834u, 10029144738508991772u, 51723656971u }, + { 12942085665769692438u, 12601907197916268979u, 11543681025u }, + { 14131134357119205086u, 1329580921391066941u, 1683150758u }, + { 8921946894736102919u, 3198179786356761112u, 166072076726u }, + { 5601522560505809989u, 11406753413634654142u, 182173373673u }, + { 8602606493507716808u, 11131812960525182090u, 233618361341u }, + { 8576789731078566487u, 14299636753645227208u, 253603456789u }, + { 17881118138842658549u, 12964114684643663326u, 21775184861u }, + { 11624372674432704923u, 5019257593846306316u, 221702786065u }, + { 6826284072848095635u, 6929086798159998121u, 17272094499u }, + { 1646466632033733563u, 18359765766933703649u, 35375626547u }, + { 17871081657060299180u, 9993076234752063198u, 51995284896u }, + { 15910893124677544709u, 3257189215046584509u, 160541725748u }, + { 11031217459450580944u, 2905234736672690348u, 52176572581u }, + { 13554987390037243094u, 12064985302079670056u, 165157493090u }, + { 15026714590903687870u, 14315096064942799930u, 98654044163u }, + { 4406379654994689200u, 11943971043551974038u, 3776022912u }, + { 13596329092861950242u, 12472773152119929647u, 128647483967u }, + { 284812388227373260u, 7791259796982183085u, 63676150387u }, + { 9285079159392309382u, 16866829442051086686u, 115422365039u }, + { 15046108141952711893u, 3702498393844653053u, 111914352656u }, + { 13795366909944958311u, 2057239613841701716u, 16200712840u }, + { 12909920641180059961u, 17201969976738286226u, 136111523182u }, + { 5333762939889788252u, 18271566505443461640u, 110932520660u }, + { 6411331390005944495u, 18368509115417119804u, 212990503604u }, + { 1447104583224217723u, 7613923684154518587u, 180995758874u }, + { 11940049226167932871u, 17984805084714865232u, 26412751629u }, + { 9772290783590472385u, 4220802739051410373u, 13974958237u }, + { 16351989577831528444u, 17812459042810815760u, 157228810174u }, + { 4376738725895725097u, 10629526089664605307u, 190965615339u }, + { 13851276297739812763u, 17437443267816548473u, 235576227763u }, + { 12641996203470333509u, 12506371893701049304u, 179945285693u }, + { 7707081716407945022u, 15737221540003030739u, 61677971778u }, + { 417638323657040024u, 2358380859011605513u, 66853116489u }, + { 16438047707692449100u, 10042972713837039706u, 73127848082u }, + { 14850108107043306316u, 13424397272769642495u, 146544430641u }, + { 10423290807904720835u, 6867102315755663029u, 49727738034u }, + { 16951162310302339314u, 8690748404825506734u, 178372266362u }, + { 2752437506572397322u, 956229930815387710u, 122471126415u }, + { 3925815842962784589u, 7734449506297687888u, 143051837328u }, + { 5274166674003605291u, 16332184961683848151u, 144419285347u }, + { 5538963350863452832u, 15580777817612768828u, 99885369520u }, + { 16900671634439028736u, 17404245271944696092u, 176844635657u }, + { 2326997710751662080u, 13201420160494469229u, 9943486026u }, + { 12327726161625874432u, 16511717657124068078u, 74715650420u }, + { 5756455743825903616u, 14131292492116594062u, 116895102007u }, + { 3018537650245074944u, 18429136031865875691u, 55766058900u }, + { 16717361816799281152u, 2563978348305862197u, 148999045466u }, + { 0u, 14239974392147482896u, 90138993544u }, + { 0u, 11164201396098998272u, 136771950558u }, + { 0u, 7116971104932986880u, 222605212570u }, + { 0u, 12437629862867369984u, 154385811776u }, + { 0u, 16501893821638901760u, 64674245265u }, + { 0u, 10649324268870959104u, 145894569456u }, + { 0u, 7205759403792793600u, 240577301025u }, + { 0u, 0u, 33390625000u }, + { 0u, 0u, 232000000000u }, + { 11997425759292732054u, 136396630u, 0u }, + { 11491152661270395161u, 136396630650381753u, 0u }, + { 18181063258234881272u, 3016823727048309817u, 7394076u }, + { 2466921813123869732u, 17405973192644624358u, 28163542341u }, + { 8430880678232179465u, 8937219978302591747u, 69943579697u }, + { 6738034873677997533u, 15178463196824222317u, 49484487665u }, + { 7678250951042929246u, 11979404627460330594u, 241822826138u }, + { 1853560606315563193u, 2006448052689740002u, 154649404826u }, + { 14942676593409905118u, 16330465320863239865u, 154108769766u }, + { 4909892170837638183u, 17136208883957646553u, 230885276298u }, + { 16871149368312132405u, 140455118208931867u, 138928955745u }, + { 16096130589333770811u, 3964972929179372247u, 97007614087u }, + { 12512479187631824282u, 3378050330022776379u, 135214941613u }, + { 16980304980540557310u, 6065353437512901255u, 173183124475u }, + { 8640919162749295366u, 12768753059854699889u, 251328803468u }, + { 7862382415464063513u, 6848720690951013326u, 140692195490u }, + { 14534157903009925344u, 10953228058585475132u, 162371269892u }, + { 12627464554215107944u, 15539127852083296166u, 4593775682u }, + { 2456849734836299173u, 14534853647735598497u, 66842377808u }, + { 18428252197697827913u, 1506909603576368170u, 80787935995u }, + { 7244734215936736255u, 5475702579938239025u, 251081689733u }, + { 14756175050504770087u, 12039747373985783332u, 133296838431u }, + { 6764116534566945922u, 17572399137760898460u, 31652676012u }, + { 1588822142405565521u, 869552790852091236u, 172952601666u }, + { 17053265624843842052u, 4549585778048181804u, 66047138551u }, + { 16996891591759999207u, 4121918231767210357u, 247246633539u }, + { 8565556232370585876u, 1558397953312543179u, 67223449635u }, + { 14464960359145886620u, 6067524298738069781u, 35084480922u }, + { 5813189542048784035u, 5811095224555517056u, 154328921151u }, + { 9739241026882027025u, 6440894514158997188u, 63315020103u }, + { 18175068535675302910u, 4612748874388784257u, 71349161591u }, + { 10562697212061761911u, 9908101430749813367u, 119250057617u }, + { 4264834835660801368u, 15150017990912190499u, 145537119254u }, + { 13019066443690126316u, 17470426264690059239u, 22821284120u }, + { 1828040177823321846u, 9615161096851907726u, 24947073705u }, + { 11240369830376975668u, 9227932132124142224u, 169521238927u }, + { 8886938465302549874u, 4794113194321211621u, 143500247203u }, + { 9985240313589688325u, 391512698859146347u, 163259889397u }, + { 722909126956573766u, 17209658878068655842u, 245021223945u }, + { 5493363474638452381u, 3077364726606876150u, 9932937477u }, + { 12410535279213120491u, 1952989567673965814u, 5166824276u }, + { 10543108918366869098u, 11172860676923186449u, 84105871776u }, + { 12953909016524823995u, 17338078544784947239u, 160605681990u }, + { 16505942145872588169u, 4593380466519703278u, 70939899121u }, + { 12428594380392015797u, 786884753602720052u, 241249007654u }, + { 7528259605829768337u, 17848875822468020539u, 38042657107u }, + { 18147447600042811311u, 2899664567187130618u, 83967589497u }, + { 12021069431116183911u, 2973178834961857409u, 121157191131u }, + { 11819985069665662506u, 11117453141176836727u, 219161176347u }, + { 10401877114068152814u, 7535238370146462002u, 27602678342u }, + { 4611631138117837942u, 10246175467290865448u, 70408486090u }, + { 17200813398607252417u, 1203128834127050464u, 202555446285u }, + { 14100466137553658767u, 14518048959078919658u, 13065221744u }, + { 17887776768825509301u, 1553474987376920024u, 112787025011u }, + { 12632656857970087269u, 14956572380830948369u, 115084214047u }, + { 8923681664054686256u, 7594162606042048292u, 31810797413u }, + { 6213926103737837599u, 14461296147288811288u, 101411680379u }, + { 1233118281776157762u, 18305427728131488265u, 123783948434u }, + { 30716279628678784u, 10253208939347909876u, 146992339225u }, + { 15775734650898546688u, 6446028915490812012u, 25555827570u }, + { 976806005729918976u, 12986063676957432257u, 114349439927u }, + { 12460098853279891456u, 9769714697972762807u, 183703975922u }, + { 5635665595421687808u, 97429465146664592u, 242529617295u }, + { 1805943450575568896u, 16395571728207795868u, 143005281661u }, + { 11529215046068469760u, 6331668478323650406u, 125888805724u }, + { 0u, 18129911846294207040u, 92343240435u }, + { 0u, 9890094564876124160u, 243982824490u }, + { 0u, 12290856656987750400u, 42536143100u }, + { 0u, 8498454992640802816u, 252666288674u }, + { 0u, 5341660584200896512u, 34460702168u }, + { 0u, 9288674231451648000u, 216289572000u }, + { 0u, 1152921504606846976u, 160503540039u }, + { 0u, 0u, 71062500000u }, + { 0u, 0u, 160000000000u }, + { 4564018338575530435u, 2081u, 0u }, + { 16553437246451512014u, 2081247415929u, 0u }, + { 4339777136957372927u, 15212079674427582639u, 112u }, + { 18439463366554654697u, 10179808126814248333u, 112824648491u }, + { 1370067356680643003u, 6066766544199222848u, 43551848504u }, + { 4210124040914115013u, 6625308131806923532u, 56328880073u }, + { 10692225626142609720u, 9122786786400665713u, 201359158673u }, + { 11592856673895384344u, 11932880778639151320u, 145494547262u }, + { 10284479231227406269u, 3884040911779255011u, 62646882763u }, + { 4961071383534266431u, 13441817515637357872u, 203210554279u }, + { 10960611551445686988u, 11628577856022352826u, 167728682387u }, + { 14616396723115619209u, 13296656925520243654u, 147630386468u }, + { 1025604265437492803u, 5020720704545399398u, 36720813216u }, + { 11711588454892179178u, 14121973606499014694u, 160272173814u }, + { 5580373263251565705u, 3642481034345420114u, 246765553723u }, + { 14109334653033148931u, 9845536238569696768u, 59197459292u }, + { 2899414033769399895u, 17655403572195686356u, 92533727588u }, + { 13233457234892808147u, 8377495365136654029u, 100957101345u }, + { 3287946691509034862u, 13713682649609025426u, 33454144933u }, + { 5488480288717445911u, 1367709905452854731u, 165743420226u }, + { 11687233053874362630u, 9981467701727208680u, 66074143702u }, + { 6783772100089274577u, 6277920117543306205u, 214541096448u }, + { 7898291058728402485u, 9344111460418701726u, 340326731u }, + { 4423684977486598491u, 4918507011364617264u, 75506545297u }, + { 2750833684599526706u, 6554777203830755259u, 145266632799u }, + { 15669689830489025709u, 4198262173120265648u, 95355335184u }, + { 15117307274214954517u, 8080325935698446819u, 16227588248u }, + { 8148639818575698175u, 12797633874200091733u, 152438035346u }, + { 13006484426078994901u, 8376502502208665497u, 146693761122u }, + { 10287496057845513526u, 9891973386793349173u, 98454091110u }, + { 14159876032966532430u, 14877430279003795462u, 102536244951u }, + { 15742212196465548019u, 8759933935842067041u, 215806507111u }, + { 2892220461917134150u, 3753418510388703513u, 103474876970u }, + { 7487151560715393883u, 2961383332545305985u, 42203473225u }, + { 7245756744165177933u, 2497674184068629507u, 73160536912u }, + { 3067122860671533987u, 15244544070742305452u, 80135399188u }, + { 8135043905834122525u, 45953573565810823u, 20826408390u }, + { 14730019368921022572u, 3960077421351906445u, 198002491148u }, + { 495969939682055458u, 3173330011013883118u, 12214676227u }, + { 5617761407265775598u, 11026266219545759160u, 3172026564u }, + { 2087044847072781811u, 8886757764964685632u, 196597735089u }, + { 15929674232061203330u, 13952322129918090479u, 177481752103u }, + { 8658086469608285873u, 4127250666614902202u, 39756356898u }, + { 18369871790780313570u, 17649958504065306911u, 34223738706u }, + { 3545648451947416750u, 13269305359002216873u, 82956806167u }, + { 13347376792767929959u, 16236593433831947843u, 23719330484u }, + { 14482164459838203025u, 13580930396682424057u, 180880187493u }, + { 8899577765623565820u, 421976357197961116u, 101736223712u }, + { 7095320096604405719u, 2962130818798626533u, 224022875384u }, + { 2968593824439315788u, 8234383947306356345u, 248160577433u }, + { 12621408323612585636u, 4380469931801381425u, 153446386848u }, + { 3954422936414648259u, 15279887469027055916u, 160237465750u }, + { 17143730087577690191u, 8534542821713755552u, 150828324359u }, + { 5033045529399041876u, 7814613482565088782u, 7462658493u }, + { 15857648521994521781u, 13771954404705323224u, 189423631045u }, + { 16655573486499109541u, 4568173274762548144u, 197746579144u }, + { 16652154439190075858u, 8105292616250821343u, 200247641169u }, + { 18016950600164130638u, 2923678426777275612u, 81439388793u }, + { 2086292996072613910u, 1808633176918384049u, 121158492925u }, + { 17324462585194799521u, 18118642609460438969u, 253098046200u }, + { 11079151463184927232u, 18138164175864360870u, 248982213583u }, + { 5239846817488961536u, 4031433690465792404u, 207983271850u }, + { 2778806963520143360u, 5012226396942308537u, 170218544458u }, + { 6240890740138835968u, 7889712298793536835u, 74271713337u }, + { 17250651344549707776u, 13500762396543628804u, 57427702160u }, + { 4197354852709302272u, 501020624068841347u, 144731877796u }, + { 9223372036854775808u, 8370653768288261750u, 164027160382u }, + { 0u, 647579990023635200u, 62453774050u }, + { 0u, 11106569307181154304u, 226035105381u }, + { 0u, 10797461613892861952u, 101602088328u }, + { 0u, 17627230675448889344u, 136585331566u }, + { 0u, 12197735707942322176u, 110955574089u }, + { 0u, 12871287735024877568u, 73661240577u }, + { 0u, 4611686018427387904u, 1697753906u }, + { 0u, 0u, 50250000000u }, + { 0u, 0u, 128000000000u }, + { 5654803392547571318u, 31757315u, 0u }, + { 2931628102185393332u, 31757315306547506u, 0u }, + { 15964697617980212305u, 9451803574512021605u, 1721567u }, + { 450380868305846606u, 8662766454758138424u, 223512383298u }, + { 14631133530814566148u, 9207992007314947035u, 66469609510u }, + { 31969822783742095u, 17118602861291201802u, 38499166246u }, + { 10437269029385743245u, 11186560605745599967u, 38928001320u }, + { 15196146496377392433u, 10505549821532796847u, 40606424665u }, + { 4409099735137480938u, 18133667530488679216u, 89569506996u }, + { 10644987914903248118u, 10778135771244330799u, 180983028086u }, + { 3154431617534062973u, 17087985777033767391u, 118584283910u }, + { 11702056331247960454u, 2639185991757283040u, 6926341565u }, + { 15575315065965259114u, 5401720287293896400u, 189143070559u }, + { 10759747609480050226u, 9816495392633895233u, 95292827843u }, + { 12538236653960743718u, 10042051500090034990u, 195532153281u }, + { 17857942663978005403u, 11629689537856384738u, 193544380702u }, + { 11443004154750813211u, 2099086731766010483u, 30630446733u }, + { 4004313188770806737u, 13665537898516458594u, 141113791719u }, + { 17134872954824183228u, 16375672064669490764u, 231740810293u }, + { 2659553912986171234u, 7770550512184564348u, 53887726961u }, + { 9501854300969137926u, 6197048880720627314u, 113421242387u }, + { 14528169966301018150u, 17963594118523106281u, 19335942692u }, + { 18172091996515901778u, 8255454642407818663u, 36973808388u }, + { 1133541705604751035u, 16744201957549498409u, 4447529092u }, + { 18280349987988641497u, 17442505417202859722u, 132907705006u }, + { 9936015874712336386u, 6383975767786687150u, 174945560113u }, + { 15876720399740689614u, 15245442964998335795u, 49346076019u }, + { 8618117825152456982u, 2910016124519524433u, 115826457119u }, + { 8085525680745921564u, 3847913871169988463u, 31157752290u }, + { 8072355444669730953u, 17210451512590059177u, 226208595828u }, + { 9395030504766848294u, 17899408909991454145u, 116932980445u }, + { 3537903114058185903u, 5920601932753251608u, 221970328901u }, + { 2126094743961928691u, 16521781895108979744u, 69320956473u }, + { 289185362555601115u, 3697493405554698771u, 57895647591u }, + { 16909937501450129614u, 2816108280295732065u, 103200441519u }, + { 14449642060360499058u, 14251078772056398988u, 175152661535u }, + { 12433818908498244393u, 4543066550096031417u, 31772552528u }, + { 11884444034578008581u, 3099369389734296977u, 80246280131u }, + { 988625838444140793u, 5243484113636490986u, 195168017151u }, + { 1675370907158909973u, 6823370511605197226u, 255284249843u }, + { 15920186275316934067u, 11396290277624641942u, 243369895656u }, + { 5600921198503757726u, 15934361408437566099u, 232617794133u }, + { 10457357161776341741u, 14939272230935131954u, 85863803462u }, + { 12225356765775740093u, 7500666177940329347u, 70809859570u }, + { 4486633318598164537u, 4806714453065462270u, 242406611928u }, + { 10302486602879381361u, 11557851247268441487u, 216260572512u }, + { 15536428611301239541u, 10655523157206817381u, 96626552371u }, + { 12026126645955462603u, 14769600176490881210u, 51577637067u }, + { 14877968141142123551u, 16688495540925795167u, 203800661629u }, + { 734560801645383190u, 909793965395524173u, 125904685156u }, + { 15648943144911081638u, 12724590949761703756u, 100049320029u }, + { 13664182862003235646u, 10810739657314826395u, 93689801457u }, + { 3895127525902132786u, 2431218615388671301u, 241586051371u }, + { 5249187334214137467u, 4235001167959059286u, 43131796625u }, + { 10642260063359027505u, 6253317787396334247u, 145229579873u }, + { 783598951897779422u, 9534525563070371898u, 97338993036u }, + { 5538576558607624843u, 8392783992374030728u, 140516867666u }, + { 15974581187564609611u, 16356257019231647540u, 82454973731u }, + { 7474269406918257428u, 12896334001521091877u, 35886674469u }, + { 8045286838779138019u, 1427636373320877084u, 37699111667u }, + { 8184246376556341732u, 16116755731295043521u, 243077392322u }, + { 1493267152679331840u, 15945633911163986837u, 194873691078u }, + { 10179074811222818816u, 7510154241072743838u, 198864414546u }, + { 3892499202005008384u, 3571560509790395119u, 82407126277u }, + { 10341173215925108736u, 3576991649007035076u, 5193614683u }, + { 6230307872002015232u, 15509961892750732443u, 91193909105u }, + { 9295429630892703744u, 17789791359353349378u, 113840796718u }, + { 0u, 18331227331079738314u, 46964386521u }, + { 0u, 15386712883100476416u, 217993737824u }, + { 0u, 14082462055028752384u, 96834115376u }, + { 0u, 12919043128765186048u, 48763411797u }, + { 0u, 6125373368465096704u, 85700342731u }, + { 0u, 12335992698065387520u, 203332057155u }, + { 0u, 2774217370460225536u, 67668735504u }, + { 0u, 0u, 16150390625u }, + { 0u, 0u, 97000000000u }, + { 10665454627995623288u, 484u, 0u }, + { 16803537892767562832u, 484578175453u, 0u }, + { 8099123106849104444u, 4962829537462579598u, 26u }, + { 7077413686679401728u, 5711259460785241095u, 26269035528u }, + { 13536636358372449666u, 13845894607204897444u, 8309607995u }, + { 7280632235418610318u, 12116633056637003327u, 59750587450u }, + { 6187823673116858809u, 2965791047992089560u, 58656843994u }, + { 8624343686231740255u, 16021997451315962529u, 218160775854u }, + { 806211610822132771u, 3942052271663803856u, 174868554222u }, + { 18388078233202190882u, 15669876414782439922u, 238213699081u }, + { 7628864426595573600u, 10594415915406145286u, 9849465702u }, + { 4530799784343874981u, 10789820553031921377u, 102574324437u }, + { 8561580552078486438u, 3989990218583987244u, 213584917344u }, + { 13349114951221999594u, 2937341169808224563u, 96216297803u }, + { 10029144738508991772u, 16267436558584536843u, 75159233583u }, + { 12601907197916268979u, 16221580362814625793u, 47881859502u }, + { 1329580921391066941u, 9695437602320209830u, 174879373633u }, + { 3198179786356761112u, 10729753156793715126u, 65525590725u }, + { 11406753413634654142u, 2609241432056861929u, 197581661084u }, + { 11131812960525182090u, 8462663743997037565u, 156141447261u }, + { 14299636753645227208u, 14993422143908194069u, 93458761920u }, + { 12964114684643663326u, 1307443894537745373u, 192812795043u }, + { 5019257593846306316u, 10017257439419829265u, 163070876675u }, + { 6929086798159998121u, 16754772009970777891u, 3543036613u }, + { 18359765766933703649u, 11722573031602862387u, 197908278010u }, + { 9993076234752063198u, 7363764277467092384u, 250635481957u }, + { 3257189215046584509u, 6733958494847390772u, 101399190461u }, + { 2905234736672690348u, 8799796600227451045u, 189365048621u }, + { 12064985302079670056u, 10512023194742249826u, 45477037929u }, + { 14315096064942799930u, 4572542132337197059u, 105569857919u }, + { 11943971043551974038u, 12600500455757416832u, 127247878005u }, + { 12472773152119929647u, 7873789864743195199u, 117683074498u }, + { 7791259796982183085u, 15724851676325671539u, 194426839003u }, + { 16866829442051086686u, 8748017220462413167u, 219852445917u }, + { 3702498393844653053u, 14172589522760466448u, 221474230963u }, + { 2057239613841701716u, 9520545591489413768u, 179768297617u }, + { 17201969976738286226u, 12488551088392570222u, 145516109810u }, + { 18271566505443461640u, 1135798823651241684u, 242677005711u }, + { 18368509115417119804u, 11168725610120161972u, 143061571777u }, + { 7613923684154518587u, 9580104948718508826u, 193605457828u }, + { 17984805084714865232u, 16638722716909738765u, 164519338529u }, + { 4220802739051410373u, 15732724012348272797u, 33901986965u }, + { 17812459042810815760u, 12269722190021214142u, 149852872677u }, + { 10629526089664605307u, 13110655916311972587u, 229665142972u }, + { 17437443267816548473u, 6618112997062866867u, 188710730081u }, + { 12506371893701049304u, 8457936459015989309u, 97358768624u }, + { 15737221540003030739u, 3329167139937134914u, 240458505654u }, + { 2358380859011605513u, 5245511557216705097u, 182180474512u }, + { 10042972713837039706u, 5655931353280440466u, 144284359751u }, + { 13424397272769642495u, 604622132328697393u, 71306608653u }, + { 6867102315755663029u, 8673282619234652338u, 13032776631u }, + { 8690748404825506734u, 16929477433058445690u, 183470179592u }, + { 956229930815387710u, 11036952409253549455u, 8917748810u }, + { 7734449506297687888u, 18199392190170386320u, 74598314388u }, + { 16332184961683848151u, 9683116091880335715u, 148986591027u }, + { 15580777817612768828u, 2993913337608915120u, 51524922775u }, + { 17404245271944696092u, 4490779842162392585u, 151162300367u }, + { 13201420160494469229u, 946849923353644618u, 207243445663u }, + { 16511717657124068078u, 3613491058474899828u, 159051328837u }, + { 14131292492116594062u, 14624054199004410935u, 69195887742u }, + { 18429136031865875691u, 12088470271991908244u, 126792771566u }, + { 2563978348305862197u, 10071980927725011290u, 238655317286u }, + { 14239974392147482896u, 2833441711428854664u, 38546003180u }, + { 11164201396098998272u, 17655572411864340446u, 236153601182u }, + { 7116971104932986880u, 4997642792058747802u, 158957110498u }, + { 12437629862867369984u, 11489200787635734848u, 226270922758u }, + { 16501893821638901760u, 12983586226429536913u, 6622830822u }, + { 10649324268870959104u, 12311150768725063152u, 230703841619u }, + { 7205759403792793600u, 8530052476845967905u, 83667388820u }, + { 0u, 6282736361499820264u, 148462415071u }, + { 0u, 11337164765929082880u, 223340587820u }, + { 0u, 8343856200414134272u, 44614588933u }, + { 0u, 17889330377156198400u, 5452321350u }, + { 0u, 17730714064155312128u, 70969782542u }, + { 0u, 7449235258647511040u, 14961183935u }, + { 0u, 9943947977234055168u, 191403823852u }, + { 0u, 0u, 236539062500u }, + { 0u, 0u, 228000000000u }, + { 3016823727048309817u, 7394076u, 0u }, + { 17405973192644624358u, 7394076163542341u, 0u }, + { 8937219978302591747u, 12396245121240683569u, 400833u }, + { 15178463196824222317u, 10248996648596888561u, 193672001794u }, + { 11979404627460330594u, 11257495103713935002u, 2555599221u }, + { 2006448052689740002u, 7555396579247433114u, 117610270032u }, + { 16330465320863239865u, 4805022328730367462u, 80409578869u }, + { 17136208883957646553u, 7056637817080232586u, 117260480782u }, + { 140455118208931867u, 10811411483818434913u, 14382541102u }, + { 3964972929179372247u, 16962406704495245447u, 46586087790u }, + { 3378050330022776379u, 18074517319117194669u, 110919533909u }, + { 6065353437512901255u, 3702019776117654523u, 85979821547u }, + { 12768753059854699889u, 3551977551381082764u, 235200686894u }, + { 6848720690951013326u, 16442608985936005282u, 46192553088u }, + { 10953228058585475132u, 3580046275479139588u, 128891355619u }, + { 15539127852083296166u, 8737412692712715330u, 227194074697u }, + { 14534853647735598497u, 3082033243045084752u, 73473656091u }, + { 1506909603576368170u, 16401023756841128699u, 27167077356u }, + { 5475702579938239025u, 7520296082779572869u, 236889101279u }, + { 12039747373985783332u, 9854104766152464159u, 223407676067u }, + { 17572399137760898460u, 14169188802648310188u, 163534192089u }, + { 869552790852091236u, 2018609909210367042u, 217768113264u }, + { 4549585778048181804u, 8270271948267674359u, 112109429062u }, + { 4121918231767210357u, 12320338602894572099u, 70448332340u }, + { 1558397953312543179u, 17538536685990080547u, 52667886893u }, + { 6067524298738069781u, 15833914616956760474u, 45950765978u }, + { 5811095224555517056u, 6137696141415969855u, 154858358231u }, + { 6440894514158997188u, 9757490468419438919u, 215332725174u }, + { 4612748874388784257u, 3566639201356598903u, 182528954618u }, + { 9908101430749813367u, 9760900035773954449u, 250193347898u }, + { 15150017990912190499u, 3873778773990716438u, 58529139451u }, + { 17470426264690059239u, 2295668377270167832u, 251209997968u }, + { 9615161096851907726u, 1791721710912807593u, 144124448432u }, + { 9227932132124142224u, 10571009006922683279u, 176097129428u }, + { 4794113194321211621u, 9840791932778184867u, 212573055546u }, + { 391512698859146347u, 11525464956561274613u, 58533470399u }, + { 17209658878068655842u, 4435781488897895433u, 191624796707u }, + { 3077364726606876150u, 6395563367070996741u, 35240464196u }, + { 1952989567673965814u, 15538690795135662932u, 68346704184u }, + { 11172860676923186449u, 16294558813563371936u, 56842354115u }, + { 17338078544784947239u, 4942096228426070342u, 195883329803u }, + { 4593380466519703278u, 6910116424372647153u, 11267911573u }, + { 786884753602720052u, 17923400669760829478u, 149374598161u }, + { 17848875822468020539u, 4134686917293039955u, 17971629497u }, + { 2899664567187130618u, 16857102463116098681u, 185224141826u }, + { 2973178834961857409u, 11364321508775167451u, 2913825355u }, + { 11117453141176836727u, 7966947780972783899u, 75616061103u }, + { 7535238370146462002u, 11261055695926686278u, 175431889104u }, + { 10246175467290865448u, 9227040437353594058u, 208610463052u }, + { 1203128834127050464u, 7185344074282882061u, 76500198864u }, + { 14518048959078919658u, 14197856148610578032u, 208389518282u }, + { 1553474987376920024u, 885688687260429427u, 202769667324u }, + { 14956572380830948369u, 17407816160380305183u, 252048013279u }, + { 7594162606042048292u, 17812728703806357349u, 223943679604u }, + { 14461296147288811288u, 17120198191964319867u, 116965629957u }, + { 18305427728131488265u, 12091952048375408786u, 5928087803u }, + { 10253208939347909876u, 405056939269888281u, 251655506034u }, + { 6446028915490812012u, 12485440679452408690u, 114021958180u }, + { 12986063676957432257u, 8394369900823444407u, 36676837095u }, + { 9769714697972762807u, 2877421667354294258u, 231455059704u }, + { 97429465146664592u, 2676980714750756239u, 248155985341u }, + { 16395571728207795868u, 6119309228579057021u, 189145119415u }, + { 6331668478323650406u, 18203256146533333852u, 183331728417u }, + { 18129911846294207040u, 351919978865493747u, 33986800493u }, + { 9890094564876124160u, 5190010931882390570u, 109019077620u }, + { 12290856656987750400u, 6982466386088036604u, 244281351056u }, + { 8498454992640802816u, 4707293888784996898u, 144378520261u }, + { 5341660584200896512u, 690306801165964760u, 197255182913u }, + { 9288674231451648000u, 12456770961278956704u, 65037421606u }, + { 1152921504606846976u, 16946092489294063943u, 38675282906u }, + { 0u, 11098404173866185376u, 218918649514u }, + { 0u, 15152070965853306880u, 170601645695u }, + { 0u, 17370091362040414208u, 127821395412u }, + { 0u, 10141938552171134976u, 212941634539u }, + { 0u, 10586988556645826560u, 235549795590u }, + { 0u, 12169852093061922816u, 6573921799u }, + { 0u, 16717361816799281152u, 7659729003u }, + { 0u, 0u, 107906250000u }, + { 0u, 0u, 16000000000u }, + { 15212079674427582639u, 112u, 0u }, + { 10179808126814248333u, 112824648491u, 0u }, + { 6066766544199222848u, 2144184049294538808u, 6u }, + { 6625308131806923532u, 4108002197393276873u, 6116236450u }, + { 9122786786400665713u, 6446230217393892753u, 162222695245u }, + { 11932880778639151320u, 5571068025259989822u, 77349450840u }, + { 3884040911779255011u, 14804812668872528331u, 88302008202u }, + { 13441817515637357872u, 17369928488562523047u, 138802570502u }, + { 11628577856022352826u, 2967474173531035027u, 6941625710u }, + { 13296656925520243654u, 5291425437992807716u, 110160867097u }, + { 5020720704545399398u, 14219547193739388064u, 25286848747u }, + { 14121973606499014694u, 17720313647158217462u, 235770843197u }, + { 3642481034345420114u, 12334850628290578491u, 61960620127u }, + { 9845536238569696768u, 7818499847417334620u, 95668673592u }, + { 17655403572195686356u, 136007040922198372u, 56423841726u }, + { 8377495365136654029u, 8523477092112604449u, 190007372956u }, + { 13713682649609025426u, 367934822655966629u, 156462058619u }, + { 1367709905452854731u, 12964987687054730050u, 123019945786u }, + { 9981467701727208680u, 15267036012420885462u, 58702833390u }, + { 6277920117543306205u, 11142900264750765568u, 238827627680u }, + { 9344111460418701726u, 13680181547777718603u, 160604057833u }, + { 4918507011364617264u, 13001922925761426065u, 233741604127u }, + { 6554777203830755259u, 2397730045956515935u, 31704835654u }, + { 4198262173120265648u, 4482395522588406288u, 70129981206u }, + { 8080325935698446819u, 3255525722490493080u, 22242991148u }, + { 12797633874200091733u, 836222287193822098u, 44176482403u }, + { 8376502502208665497u, 420898743993182306u, 99045331701u }, + { 9891973386793349173u, 11652649973356574054u, 245022816966u }, + { 14877430279003795462u, 15058402726661910231u, 198631691420u }, + { 8759933935842067041u, 9600134495208339559u, 156816317647u }, + { 3753418510388703513u, 14626343323989004842u, 207520424333u }, + { 2961383332545305985u, 6813981265331086665u, 141792895660u }, + { 2497674184068629507u, 10281745288790487888u, 172369386664u }, + { 15244544070742305452u, 17569829347075761940u, 168557374528u }, + { 45953573565810823u, 7654580675237889478u, 64952462357u }, + { 3960077421351906445u, 16194838649686212364u, 21414955649u }, + { 3173330011013883118u, 6495102772252453635u, 129877923962u }, + { 11026266219545759160u, 14935159852819761348u, 122352100226u }, + { 8886757764964685632u, 17381879863441579697u, 130809636637u }, + { 13952322129918090479u, 9062335510435372583u, 29942273595u }, + { 4127250666614902202u, 7569219009130126626u, 59491270192u }, + { 17649958504065306911u, 12652124168176193362u, 48410328184u }, + { 13269305359002216873u, 8940200224697247767u, 120685873025u }, + { 16236593433831947843u, 5600570701927432884u, 129484649225u }, + { 13580930396682424057u, 2018432801986093157u, 9303607546u }, + { 421976357197961116u, 8235849749361824736u, 250109419461u }, + { 2962130818798626533u, 9705097287982370040u, 197446466309u }, + { 8234383947306356345u, 3517483139049842585u, 5526114378u }, + { 4380469931801381425u, 958281614186777760u, 74190683143u }, + { 15279887469027055916u, 7336473432636108950u, 7051948550u }, + { 8534542821713755552u, 12955383920176764423u, 6397711021u }, + { 7814613482565088782u, 10735469126281273789u, 173702312769u }, + { 13771954404705323224u, 8637888232514730693u, 65581970947u }, + { 4568173274762548144u, 6806336737533581000u, 3468260859u }, + { 8105292616250821343u, 16142569672872330321u, 251368972253u }, + { 2923678426777275612u, 8141285259947963513u, 221875090455u }, + { 1808633176918384049u, 5220241098754220797u, 23441339958u }, + { 18118642609460438969u, 154438799943119608u, 54282989837u }, + { 18138164175864360870u, 2226876628677628879u, 13008372144u }, + { 4031433690465792404u, 17219557081221357482u, 176120719223u }, + { 5012226396942308537u, 15401507148161015114u, 119933474059u }, + { 7889712298793536835u, 8842629766613985337u, 11834917375u }, + { 13500762396543628804u, 3180100571546071440u, 255479359920u }, + { 501020624068841347u, 7740848704392475044u, 176172393597u }, + { 8370653768288261750u, 2014314126623495998u, 125419632249u }, + { 647579990023635200u, 11209566016506885858u, 121109196187u }, + { 11106569307181154304u, 7117166613733441125u, 155607671791u }, + { 10797461613892861952u, 4197646860931880328u, 239385822375u }, + { 17627230675448889344u, 5487263271238026094u, 167227554892u }, + { 12197735707942322176u, 18148076225293562697u, 76297465137u }, + { 12871287735024877568u, 9127276943027950849u, 49983809183u }, + { 4611686018427387904u, 9691696125379324722u, 159494790674u }, + { 0u, 13102362262487705216u, 18525387899u }, + { 0u, 8929385439893192704u, 123710280481u }, + { 0u, 11891353410743566336u, 33484062954u }, + { 0u, 1587423090877399040u, 234644631560u }, + { 0u, 3489137423026225152u, 8086054378u }, + { 0u, 13046928120492326912u, 234189146518u }, + { 0u, 11529215046068469760u, 150707275390u }, + { 0u, 0u, 126625000000u }, + { 0u, 0u, 64000000000u }, + { 9451803574512021605u, 1721567u, 0u }, + { 8662766454758138424u, 1721567512383298u, 0u }, + { 9207992007314947035u, 6674960280855494694u, 93326u }, + { 17118602861291201802u, 16378845781483497510u, 142361850321u }, + { 11186560605745599967u, 17606907750956804392u, 209887899008u }, + { 10505549821532796847u, 13225609159240506969u, 128954472381u }, + { 18133667530488679216u, 2668084873338435252u, 189716961709u }, + { 10778135771244330799u, 14802814305275861366u, 173144637170u }, + { 17087985777033767391u, 8005510553372365574u, 242802462171u }, + { 2639185991757283040u, 12748500143273514429u, 219433979596u }, + { 5401720287293896400u, 10393733905569036127u, 204691097577u }, + { 9816495392633895233u, 603389089974790339u, 233563445444u }, + { 10042051500090034990u, 2033494532597735873u, 196032709788u }, + { 11629689537856384738u, 9204796763694620958u, 156110235959u }, + { 2099086731766010483u, 7826260310402107021u, 55498993032u }, + { 13665537898516458594u, 10122690201685169383u, 136424262421u }, + { 16375672064669490764u, 7438455564568110133u, 21548752135u }, + { 7770550512184564348u, 2805412574380520817u, 7403239484u }, + { 6197048880720627314u, 7250965427231182867u, 60152081720u }, + { 17963594118523106281u, 8136242944826085924u, 56393075623u }, + { 8255454642407818663u, 15357191647956011780u, 167441066613u }, + { 16744201957549498409u, 7369614426695395460u, 117832515027u }, + { 17442505417202859722u, 10886957545142526638u, 211399507598u }, + { 6383975767786687150u, 2030047207417538097u, 142590183151u }, + { 15245442964998335795u, 11557093828502314355u, 239110049079u }, + { 2910016124519524433u, 15201062539664128543u, 55626511311u }, + { 3847913871169988463u, 8846936323343880674u, 207824051251u }, + { 17210451512590059177u, 1485291750116245364u, 51479593379u }, + { 17899408909991454145u, 2076024439668322013u, 163080517827u }, + { 5920601932753251608u, 7029497773682748741u, 195112541510u }, + { 16521781895108979744u, 16333533921668749881u, 70381069837u }, + { 3697493405554698771u, 2065057316131928423u, 13885442648u }, + { 2816108280295732065u, 7800502648925570223u, 88111946981u }, + { 14251078772056398988u, 17011619967093802015u, 229422866095u }, + { 4543066550096031417u, 5368819344429198672u, 175922201766u }, + { 3099369389734296977u, 15598879366754275267u, 166291044279u }, + { 5243484113636490986u, 16393893486035835647u, 183845616944u }, + { 6823370511605197226u, 12042046205096920307u, 48888714746u }, + { 11396290277624641942u, 15437070428008474344u, 250652800632u }, + { 15934361408437566099u, 13704569163204647509u, 120836845264u }, + { 14939272230935131954u, 18192483750856993350u, 208742926182u }, + { 7500666177940329347u, 5152535865317963250u, 102986216520u }, + { 4806714453065462270u, 17512614083933854680u, 72279319528u }, + { 11557851247268441487u, 14481918350603613536u, 232949360711u }, + { 10655523157206817381u, 16124419709964004915u, 71785066366u }, + { 14769600176490881210u, 18088011566435813579u, 126874106543u }, + { 16688495540925795167u, 15008862380698848893u, 175980553071u }, + { 909793965395524173u, 18160498644611827812u, 111813632059u }, + { 12724590949761703756u, 3604680497457231965u, 59984482604u }, + { 10810739657314826395u, 5957615565551495921u, 44195410121u }, + { 2431218615388671301u, 17528455034961565995u, 201322962986u }, + { 4235001167959059286u, 8503772325120113809u, 42950219451u }, + { 6253317787396334247u, 8501492578048509537u, 187460990421u }, + { 9534525563070371898u, 2296237701094386060u, 213460866836u }, + { 8392783992374030728u, 3753593040591076946u, 20124479295u }, + { 16356257019231647540u, 8518075399775653155u, 63203482686u }, + { 12896334001521091877u, 12757855675959554597u, 62461765792u }, + { 1427636373320877084u, 121631169379748595u, 160691604742u }, + { 16116755731295043521u, 16679062494579173314u, 6006593638u }, + { 15945633911163986837u, 10739912744743898054u, 102904173789u }, + { 7510154241072743838u, 9367340677776287570u, 221582211836u }, + { 3571560509790395119u, 12227321512794715397u, 252507804555u }, + { 3576991649007035076u, 7241061891859170651u, 139662844427u }, + { 15509961892750732443u, 13148571323079237489u, 11392538751u }, + { 17789791359353349378u, 12509763434355012654u, 127712785479u }, + { 18331227331079738314u, 11812768946960181977u, 71678155634u }, + { 15386712883100476416u, 14170358803552564832u, 114640371487u }, + { 14082462055028752384u, 18179989524780635952u, 31768176689u }, + { 12919043128765186048u, 17091718978514754901u, 49985539206u }, + { 6125373368465096704u, 7394768384359232459u, 134926543942u }, + { 12335992698065387520u, 6778628272692852803u, 70400871197u }, + { 2774217370460225536u, 18193335045875234320u, 29367470174u }, + { 0u, 1378519212560967521u, 94986262669u }, + { 0u, 4677732610631043584u, 141074729676u }, + { 0u, 17296098591070486528u, 204253580392u }, + { 0u, 7343735382392963072u, 104937623383u }, + { 0u, 14525996728454217728u, 87398104692u }, + { 0u, 9691359370008330240u, 116787455860u }, + { 0u, 3044433348102455296u, 116525369644u }, + { 0u, 9223372036854775808u, 44165039062u }, + { 0u, 0u, 214500000000u }, + { 4962829537462579598u, 26u, 0u }, + { 5711259460785241095u, 26269035528u, 0u }, + { 13845894607204897444u, 7822291454600056379u, 1u }, + { 12116633056637003327u, 8201586317771250746u, 1424047269u }, + { 2965791047992089560u, 3278889188817135834u, 165444608885u }, + { 16021997451315962529u, 1710725240251040430u, 117177748939u }, + { 3942052271663803856u, 1850175733663425006u, 203092738601u }, + { 15669876414782439922u, 9147599666163914249u, 41100298227u }, + { 10594415915406145286u, 10221885933644344166u, 243495892371u }, + { 10789820553031921377u, 14901479793736678101u, 147554129546u }, + { 3989990218583987244u, 5181831442059703136u, 138807810838u }, + { 2937341169808224563u, 6396246577759793483u, 22280907645u }, + { 16267436558584536843u, 14167229556464870447u, 125346741221u }, + { 16221580362814625793u, 2969982933326311854u, 229768007053u }, + { 9695437602320209830u, 7892677766222018881u, 141161003097u }, + { 10729753156793715126u, 798698968922663621u, 89427862919u }, + { 2609241432056861929u, 15926812109043458972u, 135043297557u }, + { 8462663743997037565u, 8663842590352697437u, 21863394214u }, + { 14993422143908194069u, 17093523026636671168u, 166469667847u }, + { 1307443894537745373u, 839764004742743203u, 7926641740u }, + { 10017257439419829265u, 16894643909298232323u, 76045523697u }, + { 16754772009970777891u, 9066702926218949317u, 241915860481u }, + { 11722573031602862387u, 9119392417260546810u, 1491506950u }, + { 7363764277467092384u, 9723021096578315109u, 6494363253u }, + { 6733958494847390772u, 14787464248751217597u, 117527086029u }, + { 8799796600227451045u, 3733434565920249133u, 205801630043u }, + { 10512023194742249826u, 6643788868836820841u, 91202389893u }, + { 4572542132337197059u, 4729646697422664063u, 133360160516u }, + { 12600500455757416832u, 4090144564201555829u, 4256394661u }, + { 7873789864743195199u, 2109480737093400002u, 165221727181u }, + { 15724851676325671539u, 16577155033369419739u, 205114355179u }, + { 8748017220462413167u, 745377248603805917u, 235898649375u }, + { 14172589522760466448u, 11305561465807999667u, 31040406981u }, + { 9520545591489413768u, 2211245518782892177u, 197612875715u }, + { 12488551088392570222u, 14170095199249735666u, 195119871859u }, + { 1135798823651241684u, 17849973668116118927u, 115768162399u }, + { 11168725610120161972u, 9020960204585720001u, 95967649011u }, + { 9580104948718508826u, 10807134002871850916u, 243489027232u }, + { 16638722716909738765u, 3925122626254791201u, 160585855908u }, + { 15732724012348272797u, 17208463291312718997u, 164212781323u }, + { 12269722190021214142u, 5145077219589447653u, 11932872664u }, + { 13110655916311972587u, 17602397765035489468u, 216278915194u }, + { 6618112997062866867u, 16422643262490753377u, 122954227894u }, + { 8457936459015989309u, 2902509461400906224u, 182890273275u }, + { 3329167139937134914u, 3422418805967265206u, 251157345353u }, + { 5245511557216705097u, 4228874576277237392u, 73185529695u }, + { 5655931353280440466u, 2553488530807495751u, 95229247750u }, + { 604622132328697393u, 11546099176912486413u, 6138424890u }, + { 8673282619234652338u, 10460791037534167991u, 58625915290u }, + { 16929477433058445690u, 8127117908566000904u, 154567080618u }, + { 11036952409253549455u, 11541304458088287306u, 170440571944u }, + { 18199392190170386320u, 6249718665174839700u, 40625655368u }, + { 9683116091880335715u, 13102508413386290995u, 72338797927u }, + { 2993913337608915120u, 6274675218640661911u, 103710288404u }, + { 4490779842162392585u, 3404497118599817167u, 20340150825u }, + { 946849923353644618u, 11258566093988562335u, 41184558158u }, + { 3613491058474899828u, 16762592482501635397u, 78610328090u }, + { 14624054199004410935u, 5550125446725071998u, 26908701959u }, + { 12088470271991908244u, 6370033225258510318u, 7300872903u }, + { 10071980927725011290u, 1503521728674735398u, 199345320193u }, + { 2833441711428854664u, 4250415082606384364u, 1081506076u }, + { 17655572411864340446u, 6020091901030562974u, 28230415463u }, + { 4997642792058747802u, 16288222967151527138u, 103326349835u }, + { 11489200787635734848u, 6377016228656203782u, 11882986336u }, + { 12983586226429536913u, 8378856515587563750u, 96345698742u }, + { 12311150768725063152u, 15812881490200838483u, 182454218721u }, + { 8530052476845967905u, 4548570371183413652u, 225857218023u }, + { 6282736361499820264u, 16731431495283420383u, 231246578493u }, + { 11337164765929082880u, 14737727629551135532u, 61907012718u }, + { 8343856200414134272u, 12413722258104293893u, 110798933815u }, + { 17889330377156198400u, 800899742400762438u, 55672949232u }, + { 17730714064155312128u, 603197008376033550u, 240043416862u }, + { 7449235258647511040u, 6380777281587743935u, 30032699375u }, + { 9943947977234055168u, 10001440249018225388u, 239345902629u }, + { 0u, 5505914461980436708u, 37542179162u }, + { 0u, 1105464290051876864u, 90298476221u }, + { 0u, 4500443576769970176u, 189059927339u }, + { 0u, 2843045143185981440u, 43243969535u }, + { 0u, 660949699682893824u, 255154121786u }, + { 0u, 276549164618219520u, 58035830155u }, + { 0u, 4683743612465315840u, 139014991760u }, + { 0u, 0u, 144253906250u }, + { 0u, 0u, 74000000000u }, + { 12396245121240683569u, 400833u, 0u }, + { 10248996648596888561u, 400833672001794u, 0u }, + { 11257495103713935002u, 4370024159708535157u, 21729u }, + { 7555396579247433114u, 7166684413908503888u, 225236899484u }, + { 4805022328730367462u, 10217286283215687029u, 156388506740u }, + { 7056637817080232586u, 4767369911989629198u, 116553880199u }, + { 10811411483818434913u, 14407999214182082862u, 135258439640u }, + { 16962406704495245447u, 8472271297615317358u, 216781059202u }, + { 18074517319117194669u, 6236024012584764757u, 130459282747u }, + { 3702019776117654523u, 1951826556984620523u, 59338055539u }, + { 3551977551381082764u, 12357130551551830830u, 115105808729u }, + { 16442608985936005282u, 8927758011099278464u, 89669881389u }, + { 3580046275479139588u, 10199854049407140323u, 45483974731u }, + { 8737412692712715330u, 17895455027038549577u, 75552935195u }, + { 3082033243045084752u, 16539200343720527131u, 27970114560u }, + { 16401023756841128699u, 3536976106235802604u, 896591847u }, + { 7520296082779572869u, 16980391644793590751u, 231191739858u }, + { 9854104766152464159u, 10090294316609084067u, 210920508875u }, + { 14169188802648310188u, 17603457857266236889u, 203546995950u }, + { 2018609909210367042u, 11164962743035868272u, 238954285362u }, + { 8270271948267674359u, 1585686890718568774u, 50605253843u }, + { 12320338602894572099u, 10882524700472655412u, 211085960258u }, + { 17538536685990080547u, 2194808754940947757u, 66589942846u }, + { 15833914616956760474u, 274100791137209242u, 62118980821u }, + { 6137696141415969855u, 12203404582981010903u, 213014859033u }, + { 9757490468419438919u, 541940706340938166u, 25661547888u }, + { 3566639201356598903u, 10305434016011833594u, 112029378664u }, + { 9760900035773954449u, 7900783531944543546u, 104558658697u }, + { 3873778773990716438u, 8920818625012419323u, 137428302333u }, + { 2295668377270167832u, 12532363335400447632u, 253483598546u }, + { 1791721710912807593u, 13483507182924762800u, 210679380777u }, + { 10571009006922683279u, 415911049779278804u, 41730942389u }, + { 9840791932778184867u, 3441628281170127418u, 181022546583u }, + { 11525464956561274613u, 17830811568183566527u, 151186571042u }, + { 4435781488897895433u, 17897295813176613411u, 34966610231u }, + { 6395563367070996741u, 2086148701331574596u, 55970214350u }, + { 15538690795135662932u, 13015567826878853432u, 206113090347u }, + { 16294558813563371936u, 12944531121587846595u, 43705575345u }, + { 4942096228426070342u, 3534180912913737995u, 177701724438u }, + { 6910116424372647153u, 3447584022400118677u, 22191588331u }, + { 17923400669760829478u, 6375676813770849297u, 235186893904u }, + { 4134686917293039955u, 11580694081479200185u, 80345626132u }, + { 16857102463116098681u, 1872134358882196482u, 20627790684u }, + { 11364321508775167451u, 17602652840520938059u, 92101488606u }, + { 7966947780972783899u, 10331040597716338351u, 222954241722u }, + { 11261055695926686278u, 73785407041056976u, 186560046833u }, + { 9227040437353594058u, 17166209109167902028u, 241003999914u }, + { 7185344074282882061u, 8762475644006589904u, 170930582060u }, + { 14197856148610578032u, 8839001228645872586u, 44475014756u }, + { 885688687260429427u, 13558262784529110268u, 100479163216u }, + { 17407816160380305183u, 5640853896420358111u, 80734994898u }, + { 17812728703806357349u, 8459930353450835572u, 210305791302u }, + { 17120198191964319867u, 7643830211500171269u, 70458613743u }, + { 12091952048375408786u, 1308629115231236347u, 239414372866u }, + { 405056939269888281u, 8957268500971669618u, 2070940926u }, + { 12485440679452408690u, 7645679094277669412u, 254485574498u }, + { 8394369900823444407u, 3821107497040617191u, 98414473094u }, + { 2877421667354294258u, 8847137191985934072u, 134207142652u }, + { 2676980714750756239u, 3531126524756088253u, 252479604268u }, + { 6119309228579057021u, 8726915034124352183u, 44191422752u }, + { 18203256146533333852u, 17611136727168068641u, 32473087011u }, + { 351919978865493747u, 18017743272784259949u, 35954701634u }, + { 5190010931882390570u, 18113575006829616116u, 66976743819u }, + { 6982466386088036604u, 12805550441678740368u, 139981938868u }, + { 4707293888784996898u, 8061966093393027781u, 180694190280u }, + { 690306801165964760u, 11954593141554100801u, 200437040057u }, + { 12456770961278956704u, 14068656112359197734u, 185648059792u }, + { 16946092489294063943u, 895878255770467290u, 144762663376u }, + { 11098404173866185376u, 10319906489512197802u, 208048565657u }, + { 15152070965853306880u, 14551142616794302079u, 153559443251u }, + { 17370091362040414208u, 15933181735739307476u, 51788819021u }, + { 10141938552171134976u, 11524527334398983147u, 77863739512u }, + { 10586988556645826560u, 11828012606225556742u, 120624745878u }, + { 12169852093061922816u, 3556238869349799431u, 150641197848u }, + { 16717361816799281152u, 7403090230513381483u, 24192784095u }, + { 0u, 10172292854665622800u, 223401322325u }, + { 0u, 11240746576366182400u, 85551441100u }, + { 0u, 17021927826892259328u, 204609362092u }, + { 0u, 9046328496309141504u, 172922760556u }, + { 0u, 8038996803112140800u, 108490402450u }, + { 0u, 17098478935265509376u, 146435794889u }, + { 0u, 7205759403792793600u, 201926910400u }, + { 0u, 0u, 192390625000u }, + { 0u, 0u, 232000000000u }, + { 2144184049294538808u, 6u, 0u }, + { 4108002197393276873u, 6116236450u, 0u }, + { 6446230217393892753u, 6116236450222695245u, 0u }, + { 5571068025259989822u, 6240972538554414168u, 331561842u }, + { 14804812668872528331u, 4356262642990299018u, 114338323799u }, + { 17369928488562523047u, 1335108558830511366u, 87236153471u }, + { 2967474173531035027u, 18435704923261947246u, 127072376379u }, + { 5291425437992807716u, 8395401931972636441u, 59999401566u }, + { 14219547193739388064u, 12482665946362458347u, 94455115650u }, + { 17720313647158217462u, 16101242875289374781u, 130676686676u }, + { 12334850628290578491u, 4708983440241068127u, 84872850125u }, + { 7818499847417334620u, 14856666972541426744u, 205255274503u }, + { 136007040922198372u, 6938795288315789246u, 7805381530u }, + { 8523477092112604449u, 5556307628265073820u, 154376152846u }, + { 367934822655966629u, 1441404248927865979u, 14301208040u }, + { 12964987687054730050u, 16710378912353838906u, 232078138680u }, + { 15267036012420885462u, 18289940136919312110u, 56905871455u }, + { 11142900264750765568u, 10217414145292657824u, 95991499641u }, + { 13680181547777718603u, 12461165826430955753u, 121553887130u }, + { 13001922925761426065u, 662762458988270879u, 154675521153u }, + { 2397730045956515935u, 16488546856395302470u, 129035928424u }, + { 4482395522588406288u, 2612816787977180950u, 104893845916u }, + { 3255525722490493080u, 16446616379327454252u, 156141641081u }, + { 836222287193822098u, 7842178508581740643u, 121891572860u }, + { 420898743993182306u, 14779029861369369333u, 124425125348u }, + { 11652649973356574054u, 2697664446153849542u, 228801172814u }, + { 15058402726661910231u, 12135106444393649308u, 78146240682u }, + { 9600134495208339559u, 9550285041205189839u, 170657845438u }, + { 14626343323989004842u, 8790318168586740109u, 190517721989u }, + { 6813981265331086665u, 14038474217155846828u, 133476524102u }, + { 10281745288790487888u, 4263144264274812072u, 70761027212u }, + { 17569829347075761940u, 11940456333341715520u, 140231105513u }, + { 7654580675237889478u, 15751110736831573013u, 233647293434u }, + { 16194838649686212364u, 18384528705472318081u, 250853869423u }, + { 6495102772252453635u, 2393654818032310394u, 111996627298u }, + { 14935159852819761348u, 12812209822018626434u, 98129760287u }, + { 17381879863441579697u, 3110778569433458461u, 31694551286u }, + { 9062335510435372583u, 2860264756226872891u, 246168635644u }, + { 7569219009130126626u, 2384146980060315184u, 252155055263u }, + { 12652124168176193362u, 14117430062880324728u, 159129244866u }, + { 8940200224697247767u, 3769610173216737153u, 194765307417u }, + { 5600570701927432884u, 17731974340232672009u, 25204350976u }, + { 2018432801986093157u, 1971479303384713466u, 961252255u }, + { 8235849749361824736u, 3449462959779012549u, 159106874107u }, + { 9705097287982370040u, 13743454852043766533u, 251186995761u }, + { 3517483139049842585u, 7417711187131879498u, 49745034180u }, + { 958281614186777760u, 3650992383501007879u, 196402114929u }, + { 7336473432636108950u, 12838770342493958662u, 113197920693u }, + { 12955383920176764423u, 16025068246546338477u, 181695991134u }, + { 10735469126281273789u, 6579965938260177729u, 94868720690u }, + { 8637888232514730693u, 4742939430174291459u, 50356700668u }, + { 6806336737533581000u, 13062256857527449083u, 252257115261u }, + { 16142569672872330321u, 2301174570202439645u, 125708106363u }, + { 8141285259947963513u, 7638687886069412887u, 123124746923u }, + { 5220241098754220797u, 936322449610274358u, 171414094100u }, + { 154438799943119608u, 12926010544311283981u, 20050758141u }, + { 2226876628677628879u, 12647854908989899184u, 253700720435u }, + { 17219557081221357482u, 8862093163358513015u, 51685641588u }, + { 15401507148161015114u, 444784343917630731u, 116480415033u }, + { 8842629766613985337u, 11033952249213387263u, 57024111807u }, + { 3180100571546071440u, 18168634046363183536u, 191598151749u }, + { 7740848704392475044u, 3837904761417065597u, 69984923625u }, + { 2014314126623495998u, 111459007020906105u, 233208053234u }, + { 11209566016506885858u, 16191761957496794523u, 242006042204u }, + { 7117166613733441125u, 9856250800340378607u, 92877757174u }, + { 4197646860931880328u, 9491800102275105959u, 246534308426u }, + { 5487263271238026094u, 10777328578953608268u, 74514551514u }, + { 18148076225293562697u, 17424440628313779505u, 218584240152u }, + { 9127276943027950849u, 3285814872419755679u, 24944580819u }, + { 9691696125379324722u, 2824823424107240978u, 211178124381u }, + { 13102362262487705216u, 12271707680713669755u, 93153133984u }, + { 8929385439893192704u, 6951481875178001185u, 160665250606u }, + { 11891353410743566336u, 10202522487003824362u, 46376840587u }, + { 1587423090877399040u, 4834668463880990728u, 139553079852u }, + { 3489137423026225152u, 10871520987687904746u, 44262087902u }, + { 13046928120492326912u, 12057698794225322390u, 222589346333u }, + { 11529215046068469760u, 7263351819222681214u, 29653649161u }, + { 0u, 1778055686910650944u, 9393747091u }, + { 0u, 17108187120491986944u, 147096388591u }, + { 0u, 3067636961549221888u, 239927436682u }, + { 0u, 16702141595163557888u, 138166296932u }, + { 0u, 2432053749942845440u, 100905424910u }, + { 0u, 17791470327927144448u, 14131841897u }, + { 0u, 1152921504606846976u, 105964477539u }, + { 0u, 0u, 99062500000u }, + { 0u, 0u, 160000000000u }, + { 6674960280855494694u, 93326u, 0u }, + { 16378845781483497510u, 93326361850321u, 0u }, + { 17606907750956804392u, 4283581425266273664u, 5059u }, + { 13225609159240506969u, 6725911039793895357u, 195232213414u }, + { 2668084873338435252u, 1188689198788975021u, 166364612368u }, + { 14802814305275861366u, 10825527435847761650u, 16064438970u }, + { 8005510553372365574u, 3917696829526085083u, 186586853018u }, + { 12748500143273514429u, 12646861173976387276u, 154212378770u }, + { 10393733905569036127u, 18398576063183996905u, 146685587717u }, + { 603389089974790339u, 16919251228485834948u, 5997388806u }, + { 2033494532597735873u, 17296019588687185052u, 6917194446u }, + { 9204796763694620958u, 12365301604512770359u, 206937619100u }, + { 7826260310402107021u, 2814271599679204744u, 156670324343u }, + { 10122690201685169383u, 2154994415780170517u, 119152561969u }, + { 7438455564568110133u, 6717373824370072839u, 49116822481u }, + { 2805412574380520817u, 12709155755801344060u, 209364149564u }, + { 7250965427231182867u, 826847911966403896u, 60688964714u }, + { 8136242944826085924u, 2277322703890025383u, 106044823515u }, + { 15357191647956011780u, 2774508958389496437u, 219123453911u }, + { 7369614426695395460u, 245697774950120915u, 215150406432u }, + { 10886957545142526638u, 1268929063431863950u, 32013319303u }, + { 2030047207417538097u, 6735665673159411439u, 135068788782u }, + { 11557093828502314355u, 14734771742997073207u, 46365141167u }, + { 15201062539664128543u, 13683287077957612495u, 175798773576u }, + { 8846936323343880674u, 15370263741354826803u, 72741772478u }, + { 1485291750116245364u, 48035913070297507u, 190833223667u }, + { 2076024439668322013u, 1206547475966802115u, 243002604032u }, + { 7029497773682748741u, 13512340386605768006u, 65407069u }, + { 16333533921668749881u, 2325760467700278797u, 93732505440u }, + { 2065057316131928423u, 10848110652847753816u, 96126079727u }, + { 7800502648925570223u, 15846378960784301285u, 239588077256u }, + { 17011619967093802015u, 14121839924449844911u, 200859033924u }, + { 5368819344429198672u, 5147613424753296550u, 68765546476u }, + { 15598879366754275267u, 16817040482828810167u, 236279052682u }, + { 16393893486035835647u, 5773528746119363888u, 138911653591u }, + { 12042046205096920307u, 8716201595536184826u, 215312983620u }, + { 15437070428008474344u, 5259122109038474872u, 68472506235u }, + { 13704569163204647509u, 14744540084230155984u, 123285097580u }, + { 18192483750856993350u, 10719345477982635878u, 108799303119u }, + { 5152535865317963250u, 13698037261310555208u, 207581096882u }, + { 17512614083933854680u, 16141171632951976936u, 178742572087u }, + { 14481918350603613536u, 10060790174955808839u, 55875014667u }, + { 16124419709964004915u, 4250043307981877118u, 11545396528u }, + { 18088011566435813579u, 7075646198054337199u, 48230395309u }, + { 15008862380698848893u, 18141738384245531503u, 173383571548u }, + { 18160498644611827812u, 8174370508376809531u, 92983465608u }, + { 3604680497457231965u, 3581964982731575596u, 136443133513u }, + { 5957615565551495921u, 14798509948722114761u, 73194178710u }, + { 17528455034961565995u, 14713923334885122090u, 150802228831u }, + { 8503772325120113809u, 5042978054260414139u, 95797643382u }, + { 8501492578048509537u, 2052996319372883413u, 118273380388u }, + { 2296237701094386060u, 8825683007899981588u, 36111293153u }, + { 3753593040591076946u, 9992196755378745151u, 225478441234u }, + { 8518075399775653155u, 9301073417573669950u, 18541678071u }, + { 12757855675959554597u, 5331614769144850592u, 247504212200u }, + { 121631169379748595u, 14354009428310052102u, 232289027415u }, + { 16679062494579173314u, 5581221063029119078u, 87778132410u }, + { 10739912744743898054u, 1529260335339476189u, 186302558600u }, + { 9367340677776287570u, 16483061525949201148u, 136082901368u }, + { 12227321512794715397u, 14431217812333089675u, 120893548555u }, + { 7241061891859170651u, 3452349151135392267u, 11782317885u }, + { 13148571323079237489u, 9075317899834447999u, 61187152222u }, + { 12509763434355012654u, 2764331337978901575u, 94491973969u }, + { 11812768946960181977u, 1942890683708857202u, 81149854702u }, + { 14170358803552564832u, 165089169728028447u, 238105324315u }, + { 18179989524780635952u, 15193620741871233073u, 27008949501u }, + { 17091718978514754901u, 14995000835194145926u, 253823647830u }, + { 7394768384359232459u, 1788823614552255558u, 86812880624u }, + { 6778628272692852803u, 8384901184618498845u, 240096972322u }, + { 18193335045875234320u, 405511217862281310u, 34454546404u }, + { 1378519212560967521u, 3111530463755196557u, 228021982807u }, + { 4677732610631043584u, 7893558450035460812u, 87168676404u }, + { 17296098591070486528u, 156573858237402216u, 52427910661u }, + { 7343735382392963072u, 15915324019419451223u, 5008487885u }, + { 14525996728454217728u, 16293363012778802804u, 205862771443u }, + { 9691359370008330240u, 14342105318291351412u, 243883264978u }, + { 3044433348102455296u, 3788398842525387052u, 210777487087u }, + { 9223372036854775808u, 14118764407048307670u, 239205369512u }, + { 0u, 2705021334614720768u, 168765379752u }, + { 0u, 7017988973805568000u, 168146639500u }, + { 0u, 10956732053634154496u, 140380445944u }, + { 0u, 14657517938546835456u, 248593965634u }, + { 0u, 11268868284797157376u, 66794585639u }, + { 0u, 14600669991935148032u, 39610886573u }, + { 0u, 4611686018427387904u, 173791503906u }, + { 0u, 0u, 34250000000u }, + { 0u, 0u, 128000000000u }, + { 8201586317771250746u, 1424047269u, 0u }, + { 3278889188817135834u, 1424047269444608885u, 0u }, + { 1710725240251040430u, 3001188830946823627u, 77197757u }, + { 1850175733663425006u, 9732296932705387049u, 189162694772u }, + { 9147599666163914249u, 16337535782679529459u, 116527588873u }, + { 10221885933644344166u, 7969742269895046547u, 9885659589u }, + { 14901479793736678101u, 2923592083903829642u, 197432040594u }, + { 5181831442059703136u, 8144196241160608534u, 146158488244u }, + { 6396246577759793483u, 16431078457793424253u, 180441497762u }, + { 14167229556464870447u, 202362949592775653u, 162890730548u }, + { 2969982933326311854u, 8835125248522947981u, 52010970117u }, + { 7892677766222018881u, 7959873808777345113u, 5478953099u }, + { 798698968922663621u, 14929747122315126151u, 139431505623u }, + { 15926812109043458972u, 4310328817360515349u, 215809343213u }, + { 8663842590352697437u, 7294899422760201126u, 237233663393u }, + { 17093523026636671168u, 2047461597291187207u, 161395457290u }, + { 839764004742743203u, 10942374468813517900u, 10110993115u }, + { 16894643909298232323u, 10364795403063433969u, 219593187308u }, + { 9066702926218949317u, 12330859528790939137u, 236561876684u }, + { 9119392417260546810u, 8973160144879916806u, 204668457234u }, + { 9723021096578315109u, 2895354388547509877u, 18486435986u }, + { 14787464248751217597u, 16766844772497556429u, 146156957475u }, + { 3733434565920249133u, 7442407174620948827u, 35908932476u }, + { 6643788868836820841u, 6683013428676659077u, 124403453701u }, + { 4729646697422664063u, 16713703375071907588u, 5362286883u }, + { 4090144564201555829u, 8791044883080637861u, 35906051675u }, + { 2109480737093400002u, 602844107089214413u, 91476563498u }, + { 16577155033369419739u, 9754832281172880875u, 42032680244u }, + { 745377248603805917u, 10587846778003503903u, 52528810517u }, + { 11305561465807999667u, 17206244172922947013u, 21573968323u }, + { 2211245518782892177u, 11620628420699303875u, 195932752365u }, + { 14170095199249735666u, 17864732368219338611u, 237629955528u }, + { 17849973668116118927u, 4146383014621345887u, 200968449082u }, + { 9020960204585720001u, 11445705075042688243u, 58224775873u }, + { 10807134002871850916u, 7369147888966546592u, 193620472915u }, + { 3925122626254791201u, 9762476865090597796u, 83399482307u }, + { 17208463291312718997u, 5507001428194242827u, 195529224931u }, + { 5145077219589447653u, 11371471148365328344u, 227298535145u }, + { 17602397765035489468u, 3148788104946538618u, 233616448686u }, + { 16422643262490753377u, 3762722308424507574u, 174170696145u }, + { 2902509461400906224u, 1156171244825745915u, 209203977585u }, + { 3422418805967265206u, 14208921674868257865u, 113062676168u }, + { 4228874576277237392u, 7903080886897905503u, 200770267187u }, + { 2553488530807495751u, 6367240794154270982u, 51428426873u }, + { 11546099176912486413u, 1623672396662369850u, 121345168815u }, + { 10460791037534167991u, 18323231215381674394u, 175088019456u }, + { 8127117908566000904u, 9842279843006544554u, 993304354u }, + { 11541304458088287306u, 7376839231308610600u, 34533551059u }, + { 6249718665174839700u, 609751749293657672u, 211399899256u }, + { 13102508413386290995u, 10386457966860989799u, 120033054708u }, + { 6274675218640661911u, 11160336020836149780u, 244563051014u }, + { 3404497118599817167u, 17947559933847409193u, 6605003027u }, + { 11258566093988562335u, 10229787001712704590u, 19972939173u }, + { 16762592482501635397u, 10441677090043619866u, 165554557864u }, + { 5550125446725071998u, 4996681336392922375u, 168566044449u }, + { 6370033225258510318u, 124497102381021895u, 33270870638u }, + { 1503521728674735398u, 8180812057779384577u, 110006749001u }, + { 4250415082606384364u, 5294232873532946716u, 73443482710u }, + { 6020091901030562974u, 2885620189169448039u, 86287000939u }, + { 16288222967151527138u, 16662526875008170507u, 107156429783u }, + { 6377016228656203782u, 15663095032402672480u, 215903277391u }, + { 8378856515587563750u, 1824281504410546614u, 79849098083u }, + { 15812881490200838483u, 9506565509584809953u, 99098894498u }, + { 4548570371183413652u, 16941136942345070055u, 162515351948u }, + { 16731431495283420383u, 15924115693705937725u, 140918380873u }, + { 14737727629551135532u, 9247807690406628462u, 73863248041u }, + { 12413722258104293893u, 7993916633864834871u, 169501324659u }, + { 800899742400762438u, 1018504409177639408u, 115433351089u }, + { 603197008376033550u, 12097800686634130718u, 177055213234u }, + { 6380777281587743935u, 6221488888422637551u, 178655823089u }, + { 10001440249018225388u, 8229322865256080421u, 241337267588u }, + { 5505914461980436708u, 7927745108183101786u, 132446112486u }, + { 1105464290051876864u, 8488683721235326653u, 230429763923u }, + { 4500443576769970176u, 11165516518170922283u, 83460172466u }, + { 2843045143185981440u, 5463648141113596927u, 178605283863u }, + { 660949699682893824u, 3958440403860778042u, 23296184959u }, + { 276549164618219520u, 5091534813990256011u, 127214587484u }, + { 4683743612465315840u, 6100166970623291280u, 92276012655u }, + { 0u, 1913011027739012426u, 111330690714u }, + { 0u, 11310957650604221440u, 154103704535u }, + { 0u, 16303817257009020928u, 215613168242u }, + { 0u, 9090406322154766336u, 114883831704u }, + { 0u, 3003279315069566976u, 152492791914u }, + { 0u, 16582887146675765248u, 106162808097u }, + { 0u, 9691746398101307392u, 33898960113u }, + { 0u, 0u, 241525390625u }, + { 0u, 0u, 33000000000u }, +}; + +_LIBCPP_END_NAMESPACE_STD + +// clang-format on + +#endif // RYU_D2FIXED_FULL_TABLE_H diff --git a/libcxx/src/ryu/d2s.cpp b/libcxx/src/ryu/d2s.cpp new file mode 100644 --- /dev/null +++ b/libcxx/src/ryu/d2s.cpp @@ -0,0 +1,776 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +// Copyright (c) Microsoft Corporation. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +// Copyright 2018 Ulf Adams +// Copyright (c) Microsoft Corporation. All rights reserved. + +// Boost Software License - Version 1.0 - August 17th, 2003 + +// Permission is hereby granted, free of charge, to any person or organization +// obtaining a copy of the software and accompanying documentation covered by +// this license (the "Software") to use, reproduce, display, distribute, +// execute, and transmit the Software, and to prepare derivative works of the +// Software, and to permit third-parties to whom the Software is furnished to +// do so, all subject to the following: + +// The copyright notices in the Software and this entire statement, including +// the above license grant, this restriction and the following disclaimer, +// must be included in all copies of the Software, in whole or in part, and +// all derivative works of the Software, unless such copies or derivative +// works are solely in the form of machine-executable object code generated by +// a source language processor. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +// DEALINGS IN THE SOFTWARE. + +// Avoid formatting to keep the changes with the original code minimal. +// clang-format off + +#include "charconv" + +#include "ryu/digit_table.h" +#include "ryu/d2s_full_table.h" + +_LIBCPP_BEGIN_NAMESPACE_STD + +// We need a 64x128-bit multiplication and a subsequent 128-bit shift. +// Multiplication: +// The 64-bit factor is variable and passed in, the 128-bit factor comes +// from a lookup table. We know that the 64-bit factor only has 55 +// significant bits (i.e., the 9 topmost bits are zeros). The 128-bit +// factor only has 124 significant bits (i.e., the 4 topmost bits are +// zeros). +// Shift: +// In principle, the multiplication result requires 55 + 124 = 179 bits to +// represent. However, we then shift this value to the right by __j, which is +// at least __j >= 115, so the result is guaranteed to fit into 179 - 115 = 64 +// bits. This means that we only need the topmost 64 significant bits of +// the 64x128-bit multiplication. +// +// There are several ways to do this: +// 1. Best case: the compiler exposes a 128-bit type. +// We perform two 64x64-bit multiplications, add the higher 64 bits of the +// lower result to the higher result, and shift by __j - 64 bits. +// +// We explicitly cast from 64-bit to 128-bit, so the compiler can tell +// that these are only 64-bit inputs, and can map these to the best +// possible sequence of assembly instructions. +// x64 machines happen to have matching assembly instructions for +// 64x64-bit multiplications and 128-bit shifts. +// +// 2. Second best case: the compiler exposes intrinsics for the x64 assembly +// instructions mentioned in 1. +// +// 3. We only have 64x64 bit instructions that return the lower 64 bits of +// the result, i.e., we have to use plain C. +// Our inputs are less than the full width, so we have three options: +// a. Ignore this fact and just implement the intrinsics manually. +// b. Split both into 31-bit pieces, which guarantees no internal overflow, +// but requires extra work upfront (unless we change the lookup table). +// c. Split only the first factor into 31-bit pieces, which also guarantees +// no internal overflow, but requires extra work since the intermediate +// results are not perfectly aligned. +#ifdef _LIBCPP_INTRINSIC128 + +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline uint64_t __mulShift(const uint64_t __m, const uint64_t* const __mul, const int32_t __j) { + // __m is maximum 55 bits + uint64_t __high1; // 128 + const uint64_t __low1 = __ryu_umul128(__m, __mul[1], &__high1); // 64 + uint64_t __high0; // 64 + (void) __ryu_umul128(__m, __mul[0], &__high0); // 0 + const uint64_t __sum = __high0 + __low1; + if (__sum < __high0) { + ++__high1; // overflow into __high1 + } + return __ryu_shiftright128(__sum, __high1, static_cast(__j - 64)); +} + +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline uint64_t __mulShiftAll(const uint64_t __m, const uint64_t* const __mul, const int32_t __j, + uint64_t* const __vp, uint64_t* const __vm, const uint32_t __mmShift) { + *__vp = __mulShift(4 * __m + 2, __mul, __j); + *__vm = __mulShift(4 * __m - 1 - __mmShift, __mul, __j); + return __mulShift(4 * __m, __mul, __j); +} + +#else // ^^^ intrinsics available ^^^ / vvv intrinsics unavailable vvv + +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline _LIBCPP_ALWAYS_INLINE uint64_t __mulShiftAll(uint64_t __m, const uint64_t* const __mul, const int32_t __j, + uint64_t* const __vp, uint64_t* const __vm, const uint32_t __mmShift) { // TRANSITION, VSO-634761 + __m <<= 1; + // __m is maximum 55 bits + uint64_t __tmp; + const uint64_t __lo = __ryu_umul128(__m, __mul[0], &__tmp); + uint64_t __hi; + const uint64_t __mid = __tmp + __ryu_umul128(__m, __mul[1], &__hi); + __hi += __mid < __tmp; // overflow into __hi + + const uint64_t __lo2 = __lo + __mul[0]; + const uint64_t __mid2 = __mid + __mul[1] + (__lo2 < __lo); + const uint64_t __hi2 = __hi + (__mid2 < __mid); + *__vp = __ryu_shiftright128(__mid2, __hi2, static_cast(__j - 64 - 1)); + + if (__mmShift == 1) { + const uint64_t __lo3 = __lo - __mul[0]; + const uint64_t __mid3 = __mid - __mul[1] - (__lo3 > __lo); + const uint64_t __hi3 = __hi - (__mid3 > __mid); + *__vm = __ryu_shiftright128(__mid3, __hi3, static_cast(__j - 64 - 1)); + } else { + const uint64_t __lo3 = __lo + __lo; + const uint64_t __mid3 = __mid + __mid + (__lo3 < __lo); + const uint64_t __hi3 = __hi + __hi + (__mid3 < __mid); + const uint64_t __lo4 = __lo3 - __mul[0]; + const uint64_t __mid4 = __mid3 - __mul[1] - (__lo4 > __lo3); + const uint64_t __hi4 = __hi3 - (__mid4 > __mid3); + *__vm = __ryu_shiftright128(__mid4, __hi4, static_cast(__j - 64)); + } + + return __ryu_shiftright128(__mid, __hi, static_cast(__j - 64 - 1)); +} + +#endif // ^^^ intrinsics unavailable ^^^ + +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline uint32_t __decimalLength17(const uint64_t __v) { + // This is slightly faster than a loop. + // The average output length is 16.38 digits, so we check high-to-low. + // Function precondition: __v is not an 18, 19, or 20-digit number. + // (17 digits are sufficient for round-tripping.) + _LIBCPP_ASSERT(__v < 100000000000000000u, ""); + if (__v >= 10000000000000000u) { return 17; } + if (__v >= 1000000000000000u) { return 16; } + if (__v >= 100000000000000u) { return 15; } + if (__v >= 10000000000000u) { return 14; } + if (__v >= 1000000000000u) { return 13; } + if (__v >= 100000000000u) { return 12; } + if (__v >= 10000000000u) { return 11; } + if (__v >= 1000000000u) { return 10; } + if (__v >= 100000000u) { return 9; } + if (__v >= 10000000u) { return 8; } + if (__v >= 1000000u) { return 7; } + if (__v >= 100000u) { return 6; } + if (__v >= 10000u) { return 5; } + if (__v >= 1000u) { return 4; } + if (__v >= 100u) { return 3; } + if (__v >= 10u) { return 2; } + return 1; +} + +// A floating decimal representing m * 10^e. +struct __floating_decimal_64 { + uint64_t __mantissa; + int32_t __exponent; +}; + +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline __floating_decimal_64 __d2d(const uint64_t __ieeeMantissa, const uint32_t __ieeeExponent) { + int32_t __e2; + uint64_t __m2; + if (__ieeeExponent == 0) { + // We subtract 2 so that the bounds computation has 2 additional bits. + __e2 = 1 - __DOUBLE_BIAS - __DOUBLE_MANTISSA_BITS - 2; + __m2 = __ieeeMantissa; + } else { + __e2 = static_cast(__ieeeExponent) - __DOUBLE_BIAS - __DOUBLE_MANTISSA_BITS - 2; + __m2 = (1ull << __DOUBLE_MANTISSA_BITS) | __ieeeMantissa; + } + const bool __even = (__m2 & 1) == 0; + const bool __acceptBounds = __even; + + // Step 2: Determine the interval of valid decimal representations. + const uint64_t __mv = 4 * __m2; + // Implicit bool -> int conversion. True is 1, false is 0. + const uint32_t __mmShift = __ieeeMantissa != 0 || __ieeeExponent <= 1; + // We would compute __mp and __mm like this: + // uint64_t __mp = 4 * __m2 + 2; + // uint64_t __mm = __mv - 1 - __mmShift; + + // Step 3: Convert to a decimal power base using 128-bit arithmetic. + uint64_t __vr, __vp, __vm; + int32_t __e10; + bool __vmIsTrailingZeros = false; + bool __vrIsTrailingZeros = false; + if (__e2 >= 0) { + // I tried special-casing __q == 0, but there was no effect on performance. + // This expression is slightly faster than max(0, __log10Pow2(__e2) - 1). + const uint32_t __q = __log10Pow2(__e2) - (__e2 > 3); + __e10 = static_cast(__q); + const int32_t __k = __DOUBLE_POW5_INV_BITCOUNT + __pow5bits(static_cast(__q)) - 1; + const int32_t __i = -__e2 + static_cast(__q) + __k; + __vr = __mulShiftAll(__m2, __DOUBLE_POW5_INV_SPLIT[__q], __i, &__vp, &__vm, __mmShift); + if (__q <= 21) { + // This should use __q <= 22, but I think 21 is also safe. Smaller values + // may still be safe, but it's more difficult to reason about them. + // Only one of __mp, __mv, and __mm can be a multiple of 5, if any. + const uint32_t __mvMod5 = static_cast(__mv) - 5 * static_cast(__div5(__mv)); + if (__mvMod5 == 0) { + __vrIsTrailingZeros = __multipleOfPowerOf5(__mv, __q); + } else if (__acceptBounds) { + // Same as min(__e2 + (~__mm & 1), __pow5Factor(__mm)) >= __q + // <=> __e2 + (~__mm & 1) >= __q && __pow5Factor(__mm) >= __q + // <=> true && __pow5Factor(__mm) >= __q, since __e2 >= __q. + __vmIsTrailingZeros = __multipleOfPowerOf5(__mv - 1 - __mmShift, __q); + } else { + // Same as min(__e2 + 1, __pow5Factor(__mp)) >= __q. + __vp -= __multipleOfPowerOf5(__mv + 2, __q); + } + } + } else { + // This expression is slightly faster than max(0, __log10Pow5(-__e2) - 1). + const uint32_t __q = __log10Pow5(-__e2) - (-__e2 > 1); + __e10 = static_cast(__q) + __e2; + const int32_t __i = -__e2 - static_cast(__q); + const int32_t __k = __pow5bits(__i) - __DOUBLE_POW5_BITCOUNT; + const int32_t __j = static_cast(__q) - __k; + __vr = __mulShiftAll(__m2, __DOUBLE_POW5_SPLIT[__i], __j, &__vp, &__vm, __mmShift); + if (__q <= 1) { + // {__vr,__vp,__vm} is trailing zeros if {__mv,__mp,__mm} has at least __q trailing 0 bits. + // __mv = 4 * __m2, so it always has at least two trailing 0 bits. + __vrIsTrailingZeros = true; + if (__acceptBounds) { + // __mm = __mv - 1 - __mmShift, so it has 1 trailing 0 bit iff __mmShift == 1. + __vmIsTrailingZeros = __mmShift == 1; + } else { + // __mp = __mv + 2, so it always has at least one trailing 0 bit. + --__vp; + } + } else if (__q < 63) { // TRANSITION(ulfjack): Use a tighter bound here. + // We need to compute min(ntz(__mv), __pow5Factor(__mv) - __e2) >= __q - 1 + // <=> ntz(__mv) >= __q - 1 && __pow5Factor(__mv) - __e2 >= __q - 1 + // <=> ntz(__mv) >= __q - 1 (__e2 is negative and -__e2 >= __q) + // <=> (__mv & ((1 << (__q - 1)) - 1)) == 0 + // We also need to make sure that the left shift does not overflow. + __vrIsTrailingZeros = __multipleOfPowerOf2(__mv, __q - 1); + } + } + + // Step 4: Find the shortest decimal representation in the interval of valid representations. + int32_t __removed = 0; + uint8_t __lastRemovedDigit = 0; + uint64_t _Output; + // On average, we remove ~2 digits. + if (__vmIsTrailingZeros || __vrIsTrailingZeros) { + // General case, which happens rarely (~0.7%). + for (;;) { + const uint64_t __vpDiv10 = __div10(__vp); + const uint64_t __vmDiv10 = __div10(__vm); + if (__vpDiv10 <= __vmDiv10) { + break; + } + const uint32_t __vmMod10 = static_cast(__vm) - 10 * static_cast(__vmDiv10); + const uint64_t __vrDiv10 = __div10(__vr); + const uint32_t __vrMod10 = static_cast(__vr) - 10 * static_cast(__vrDiv10); + __vmIsTrailingZeros &= __vmMod10 == 0; + __vrIsTrailingZeros &= __lastRemovedDigit == 0; + __lastRemovedDigit = static_cast(__vrMod10); + __vr = __vrDiv10; + __vp = __vpDiv10; + __vm = __vmDiv10; + ++__removed; + } + if (__vmIsTrailingZeros) { + for (;;) { + const uint64_t __vmDiv10 = __div10(__vm); + const uint32_t __vmMod10 = static_cast(__vm) - 10 * static_cast(__vmDiv10); + if (__vmMod10 != 0) { + break; + } + const uint64_t __vpDiv10 = __div10(__vp); + const uint64_t __vrDiv10 = __div10(__vr); + const uint32_t __vrMod10 = static_cast(__vr) - 10 * static_cast(__vrDiv10); + __vrIsTrailingZeros &= __lastRemovedDigit == 0; + __lastRemovedDigit = static_cast(__vrMod10); + __vr = __vrDiv10; + __vp = __vpDiv10; + __vm = __vmDiv10; + ++__removed; + } + } + if (__vrIsTrailingZeros && __lastRemovedDigit == 5 && __vr % 2 == 0) { + // Round even if the exact number is .....50..0. + __lastRemovedDigit = 4; + } + // We need to take __vr + 1 if __vr is outside bounds or we need to round up. + _Output = __vr + ((__vr == __vm && (!__acceptBounds || !__vmIsTrailingZeros)) || __lastRemovedDigit >= 5); + } else { + // Specialized for the common case (~99.3%). Percentages below are relative to this. + bool __roundUp = false; + const uint64_t __vpDiv100 = __div100(__vp); + const uint64_t __vmDiv100 = __div100(__vm); + if (__vpDiv100 > __vmDiv100) { // Optimization: remove two digits at a time (~86.2%). + const uint64_t __vrDiv100 = __div100(__vr); + const uint32_t __vrMod100 = static_cast(__vr) - 100 * static_cast(__vrDiv100); + __roundUp = __vrMod100 >= 50; + __vr = __vrDiv100; + __vp = __vpDiv100; + __vm = __vmDiv100; + __removed += 2; + } + // Loop iterations below (approximately), without optimization above: + // 0: 0.03%, 1: 13.8%, 2: 70.6%, 3: 14.0%, 4: 1.40%, 5: 0.14%, 6+: 0.02% + // Loop iterations below (approximately), with optimization above: + // 0: 70.6%, 1: 27.8%, 2: 1.40%, 3: 0.14%, 4+: 0.02% + for (;;) { + const uint64_t __vpDiv10 = __div10(__vp); + const uint64_t __vmDiv10 = __div10(__vm); + if (__vpDiv10 <= __vmDiv10) { + break; + } + const uint64_t __vrDiv10 = __div10(__vr); + const uint32_t __vrMod10 = static_cast(__vr) - 10 * static_cast(__vrDiv10); + __roundUp = __vrMod10 >= 5; + __vr = __vrDiv10; + __vp = __vpDiv10; + __vm = __vmDiv10; + ++__removed; + } + // We need to take __vr + 1 if __vr is outside bounds or we need to round up. + _Output = __vr + (__vr == __vm || __roundUp); + } + const int32_t __exp = __e10 + __removed; + + __floating_decimal_64 __fd; + __fd.__exponent = __exp; + __fd.__mantissa = _Output; + return __fd; +} + +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline to_chars_result __to_chars(char* const _First, char* const _Last, const __floating_decimal_64 __v, + chars_format _Fmt, const double __f) { + // Step 5: Print the decimal representation. + uint64_t _Output = __v.__mantissa; + int32_t _Ryu_exponent = __v.__exponent; + const uint32_t __olength = __decimalLength17(_Output); + int32_t _Scientific_exponent = _Ryu_exponent + static_cast(__olength) - 1; + + if (_Fmt == chars_format{}) { + int32_t _Lower; + int32_t _Upper; + + if (__olength == 1) { + // Value | Fixed | Scientific + // 1e-3 | "0.001" | "1e-03" + // 1e4 | "10000" | "1e+04" + _Lower = -3; + _Upper = 4; + } else { + // Value | Fixed | Scientific + // 1234e-7 | "0.0001234" | "1.234e-04" + // 1234e5 | "123400000" | "1.234e+08" + _Lower = -static_cast(__olength + 3); + _Upper = 5; + } + + if (_Lower <= _Ryu_exponent && _Ryu_exponent <= _Upper) { + _Fmt = chars_format::fixed; + } else { + _Fmt = chars_format::scientific; + } + } else if (_Fmt == chars_format::general) { + // C11 7.21.6.1 "The fprintf function"/8: + // "Let P equal [...] 6 if the precision is omitted [...]. + // Then, if a conversion with style E would have an exponent of X: + // - if P > X >= -4, the conversion is with style f [...]. + // - otherwise, the conversion is with style e [...]." + if (-4 <= _Scientific_exponent && _Scientific_exponent < 6) { + _Fmt = chars_format::fixed; + } else { + _Fmt = chars_format::scientific; + } + } + + if (_Fmt == chars_format::fixed) { + // Example: _Output == 1729, __olength == 4 + + // _Ryu_exponent | Printed | _Whole_digits | _Total_fixed_length | Notes + // --------------|----------|---------------|----------------------|--------------------------------------- + // 2 | 172900 | 6 | _Whole_digits | Ryu can't be used for printing + // 1 | 17290 | 5 | (sometimes adjusted) | when the trimmed digits are nonzero. + // --------------|----------|---------------|----------------------|--------------------------------------- + // 0 | 1729 | 4 | _Whole_digits | Unified length cases. + // --------------|----------|---------------|----------------------|--------------------------------------- + // -1 | 172.9 | 3 | __olength + 1 | This case can't happen for + // -2 | 17.29 | 2 | | __olength == 1, but no additional + // -3 | 1.729 | 1 | | code is needed to avoid it. + // --------------|----------|---------------|----------------------|--------------------------------------- + // -4 | 0.1729 | 0 | 2 - _Ryu_exponent | C11 7.21.6.1 "The fprintf function"/8: + // -5 | 0.01729 | -1 | | "If a decimal-point character appears, + // -6 | 0.001729 | -2 | | at least one digit appears before it." + + const int32_t _Whole_digits = static_cast(__olength) + _Ryu_exponent; + + uint32_t _Total_fixed_length; + if (_Ryu_exponent >= 0) { // cases "172900" and "1729" + _Total_fixed_length = static_cast(_Whole_digits); + if (_Output == 1) { + // Rounding can affect the number of digits. + // For example, 1e23 is exactly "99999999999999991611392" which is 23 digits instead of 24. + // We can use a lookup table to detect this and adjust the total length. + static constexpr uint8_t _Adjustment[309] = { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,1,0,1,1,1,0,1,1,1,0,0,0,0,0, + 1,1,0,0,1,0,1,1,1,0,0,0,0,1,1,1,1,0,0,0,1,1,1,1,0,0,0,1,1,1,1,0,1,0,1,0,1,1,0,0,0,0,1,1,1, + 1,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1,0,1,0,1,0,1,1,0,0,0,0,0,1,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,1, + 1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,0,0,1,1,1,1,0,0,1,1,0,1,1,0,1,1,0,1,0,0,0,1,0,0,0,1, + 0,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,1,0,1,1,1,1,1,1,0,1,0,1,1,0,0,0,1, + 1,1,0,1,1,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,1,0,0,0,1,0,1,0,0,0,0,0,1,1,0, + 0,1,0,1,1,1,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,1,0,1,0,1,1,0,1,0,0,0,0,0,1,1,0,1,0 }; + _Total_fixed_length -= _Adjustment[_Ryu_exponent]; + // _Whole_digits doesn't need to be adjusted because these cases won't refer to it later. + } + } else if (_Whole_digits > 0) { // case "17.29" + _Total_fixed_length = __olength + 1; + } else { // case "0.001729" + _Total_fixed_length = static_cast(2 - _Ryu_exponent); + } + + if (_Last - _First < static_cast(_Total_fixed_length)) { + return { _Last, errc::value_too_large }; + } + + char* _Mid; + if (_Ryu_exponent > 0) { // case "172900" + bool _Can_use_ryu; + + if (_Ryu_exponent > 22) { // 10^22 is the largest power of 10 that's exactly representable as a double. + _Can_use_ryu = false; + } else { + // Ryu generated X: __v.__mantissa * 10^_Ryu_exponent + // __v.__mantissa == 2^_Trailing_zero_bits * (__v.__mantissa >> _Trailing_zero_bits) + // 10^_Ryu_exponent == 2^_Ryu_exponent * 5^_Ryu_exponent + + // _Trailing_zero_bits is [0, 56] (aside: because 2^56 is the largest power of 2 + // with 17 decimal digits, which is double's round-trip limit.) + // _Ryu_exponent is [1, 22]. + // Normalization adds [2, 52] (aside: at least 2 because the pre-normalized mantissa is at least 5). + // This adds up to [3, 130], which is well below double's maximum binary exponent 1023. + + // Therefore, we just need to consider (__v.__mantissa >> _Trailing_zero_bits) * 5^_Ryu_exponent. + + // If that product would exceed 53 bits, then X can't be exactly represented as a double. + // (That's not a problem for round-tripping, because X is close enough to the original double, + // but X isn't mathematically equal to the original double.) This requires a high-precision fallback. + + // If the product is 53 bits or smaller, then X can be exactly represented as a double (and we don't + // need to re-synthesize it; the original double must have been X, because Ryu wouldn't produce the + // same output for two different doubles X and Y). This allows Ryu's output to be used (zero-filled). + + // (2^53 - 1) / 5^0 (for indexing), (2^53 - 1) / 5^1, ..., (2^53 - 1) / 5^22 + static constexpr uint64_t _Max_shifted_mantissa[23] = { + 9007199254740991u, 1801439850948198u, 360287970189639u, 72057594037927u, 14411518807585u, + 2882303761517u, 576460752303u, 115292150460u, 23058430092u, 4611686018u, 922337203u, 184467440u, + 36893488u, 7378697u, 1475739u, 295147u, 59029u, 11805u, 2361u, 472u, 94u, 18u, 3u }; + + unsigned long _Trailing_zero_bits; +#ifdef _LIBCPP_HAS_BITSCAN64 + (void) _BitScanForward64(&_Trailing_zero_bits, __v.__mantissa); // __v.__mantissa is guaranteed nonzero +#else // ^^^ 64-bit ^^^ / vvv 32-bit vvv + const uint32_t _Low_mantissa = static_cast(__v.__mantissa); + if (_Low_mantissa != 0) { + (void) _BitScanForward(&_Trailing_zero_bits, _Low_mantissa); + } else { + const uint32_t _High_mantissa = static_cast(__v.__mantissa >> 32); // nonzero here + (void) _BitScanForward(&_Trailing_zero_bits, _High_mantissa); + _Trailing_zero_bits += 32; + } +#endif // ^^^ 32-bit ^^^ + const uint64_t _Shifted_mantissa = __v.__mantissa >> _Trailing_zero_bits; + _Can_use_ryu = _Shifted_mantissa <= _Max_shifted_mantissa[_Ryu_exponent]; + } + + if (!_Can_use_ryu) { + // Print the integer exactly. + // Performance note: This will redundantly perform bounds checking. + // Performance note: This will redundantly decompose the IEEE representation. + return __d2fixed_buffered_n(_First, _Last, __f, 0); + } + + // _Can_use_ryu + // Print the decimal digits, left-aligned within [_First, _First + _Total_fixed_length). + _Mid = _First + __olength; + } else { // cases "1729", "17.29", and "0.001729" + // Print the decimal digits, right-aligned within [_First, _First + _Total_fixed_length). + _Mid = _First + _Total_fixed_length; + } + + // We prefer 32-bit operations, even on 64-bit platforms. + // We have at most 17 digits, and uint32_t can store 9 digits. + // If _Output doesn't fit into uint32_t, we cut off 8 digits, + // so the rest will fit into uint32_t. + if ((_Output >> 32) != 0) { + // Expensive 64-bit division. + const uint64_t __q = __div1e8(_Output); + uint32_t __output2 = static_cast(_Output - 100000000 * __q); + _Output = __q; + + const uint32_t __c = __output2 % 10000; + __output2 /= 10000; + const uint32_t __d = __output2 % 10000; + const uint32_t __c0 = (__c % 100) << 1; + const uint32_t __c1 = (__c / 100) << 1; + const uint32_t __d0 = (__d % 100) << 1; + const uint32_t __d1 = (__d / 100) << 1; + + _VSTD::memcpy(_Mid -= 2, __DIGIT_TABLE + __c0, 2); + _VSTD::memcpy(_Mid -= 2, __DIGIT_TABLE + __c1, 2); + _VSTD::memcpy(_Mid -= 2, __DIGIT_TABLE + __d0, 2); + _VSTD::memcpy(_Mid -= 2, __DIGIT_TABLE + __d1, 2); + } + uint32_t __output2 = static_cast(_Output); + while (__output2 >= 10000) { +#ifdef __clang__ // TRANSITION, LLVM-38217 + const uint32_t __c = __output2 - 10000 * (__output2 / 10000); +#else + const uint32_t __c = __output2 % 10000; +#endif + __output2 /= 10000; + const uint32_t __c0 = (__c % 100) << 1; + const uint32_t __c1 = (__c / 100) << 1; + _VSTD::memcpy(_Mid -= 2, __DIGIT_TABLE + __c0, 2); + _VSTD::memcpy(_Mid -= 2, __DIGIT_TABLE + __c1, 2); + } + if (__output2 >= 100) { + const uint32_t __c = (__output2 % 100) << 1; + __output2 /= 100; + _VSTD::memcpy(_Mid -= 2, __DIGIT_TABLE + __c, 2); + } + if (__output2 >= 10) { + const uint32_t __c = __output2 << 1; + _VSTD::memcpy(_Mid -= 2, __DIGIT_TABLE + __c, 2); + } else { + *--_Mid = static_cast('0' + __output2); + } + + if (_Ryu_exponent > 0) { // case "172900" with _Can_use_ryu + // Performance note: it might be more efficient to do this immediately after setting _Mid. + _VSTD::memset(_First + __olength, '0', static_cast(_Ryu_exponent)); + } else if (_Ryu_exponent == 0) { // case "1729" + // Done! + } else if (_Whole_digits > 0) { // case "17.29" + // Performance note: moving digits might not be optimal. + _VSTD::memmove(_First, _First + 1, static_cast(_Whole_digits)); + _First[_Whole_digits] = '.'; + } else { // case "0.001729" + // Performance note: a larger memset() followed by overwriting '.' might be more efficient. + _First[0] = '0'; + _First[1] = '.'; + _VSTD::memset(_First + 2, '0', static_cast(-_Whole_digits)); + } + + return { _First + _Total_fixed_length, errc{} }; + } + + const uint32_t _Total_scientific_length = __olength + (__olength > 1) // digits + possible decimal point + + (-100 < _Scientific_exponent && _Scientific_exponent < 100 ? 4 : 5); // + scientific exponent + if (_Last - _First < static_cast(_Total_scientific_length)) { + return { _Last, errc::value_too_large }; + } + char* const __result = _First; + + // Print the decimal digits. + uint32_t __i = 0; + // We prefer 32-bit operations, even on 64-bit platforms. + // We have at most 17 digits, and uint32_t can store 9 digits. + // If _Output doesn't fit into uint32_t, we cut off 8 digits, + // so the rest will fit into uint32_t. + if ((_Output >> 32) != 0) { + // Expensive 64-bit division. + const uint64_t __q = __div1e8(_Output); + uint32_t __output2 = static_cast(_Output) - 100000000 * static_cast(__q); + _Output = __q; + + const uint32_t __c = __output2 % 10000; + __output2 /= 10000; + const uint32_t __d = __output2 % 10000; + const uint32_t __c0 = (__c % 100) << 1; + const uint32_t __c1 = (__c / 100) << 1; + const uint32_t __d0 = (__d % 100) << 1; + const uint32_t __d1 = (__d / 100) << 1; + _VSTD::memcpy(__result + __olength - __i - 1, __DIGIT_TABLE + __c0, 2); + _VSTD::memcpy(__result + __olength - __i - 3, __DIGIT_TABLE + __c1, 2); + _VSTD::memcpy(__result + __olength - __i - 5, __DIGIT_TABLE + __d0, 2); + _VSTD::memcpy(__result + __olength - __i - 7, __DIGIT_TABLE + __d1, 2); + __i += 8; + } + uint32_t __output2 = static_cast(_Output); + while (__output2 >= 10000) { +#ifdef __clang__ // TRANSITION, LLVM-38217 + const uint32_t __c = __output2 - 10000 * (__output2 / 10000); +#else + const uint32_t __c = __output2 % 10000; +#endif + __output2 /= 10000; + const uint32_t __c0 = (__c % 100) << 1; + const uint32_t __c1 = (__c / 100) << 1; + _VSTD::memcpy(__result + __olength - __i - 1, __DIGIT_TABLE + __c0, 2); + _VSTD::memcpy(__result + __olength - __i - 3, __DIGIT_TABLE + __c1, 2); + __i += 4; + } + if (__output2 >= 100) { + const uint32_t __c = (__output2 % 100) << 1; + __output2 /= 100; + _VSTD::memcpy(__result + __olength - __i - 1, __DIGIT_TABLE + __c, 2); + __i += 2; + } + if (__output2 >= 10) { + const uint32_t __c = __output2 << 1; + // We can't use memcpy here: the decimal dot goes between these two digits. + __result[2] = __DIGIT_TABLE[__c + 1]; + __result[0] = __DIGIT_TABLE[__c]; + } else { + __result[0] = static_cast('0' + __output2); + } + + // Print decimal point if needed. + uint32_t __index; + if (__olength > 1) { + __result[1] = '.'; + __index = __olength + 1; + } else { + __index = 1; + } + + // Print the exponent. + __result[__index++] = 'e'; + if (_Scientific_exponent < 0) { + __result[__index++] = '-'; + _Scientific_exponent = -_Scientific_exponent; + } else { + __result[__index++] = '+'; + } + + if (_Scientific_exponent >= 100) { + const int32_t __c = _Scientific_exponent % 10; + _VSTD::memcpy(__result + __index, __DIGIT_TABLE + 2 * (_Scientific_exponent / 10), 2); + __result[__index + 2] = static_cast('0' + __c); + __index += 3; + } else { + _VSTD::memcpy(__result + __index, __DIGIT_TABLE + 2 * _Scientific_exponent, 2); + __index += 2; + } + + return { _First + _Total_scientific_length, errc{} }; +} + +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline bool __d2d_small_int(const uint64_t __ieeeMantissa, const uint32_t __ieeeExponent, + __floating_decimal_64* const __v) { + const uint64_t __m2 = (1ull << __DOUBLE_MANTISSA_BITS) | __ieeeMantissa; + const int32_t __e2 = static_cast(__ieeeExponent) - __DOUBLE_BIAS - __DOUBLE_MANTISSA_BITS; + + if (__e2 > 0) { + // f = __m2 * 2^__e2 >= 2^53 is an integer. + // Ignore this case for now. + return false; + } + + if (__e2 < -52) { + // f < 1. + return false; + } + + // Since 2^52 <= __m2 < 2^53 and 0 <= -__e2 <= 52: 1 <= f = __m2 / 2^-__e2 < 2^53. + // Test if the lower -__e2 bits of the significand are 0, i.e. whether the fraction is 0. + const uint64_t __mask = (1ull << -__e2) - 1; + const uint64_t __fraction = __m2 & __mask; + if (__fraction != 0) { + return false; + } + + // f is an integer in the range [1, 2^53). + // Note: __mantissa might contain trailing (decimal) 0's. + // Note: since 2^53 < 10^16, there is no need to adjust __decimalLength17(). + __v->__mantissa = __m2 >> -__e2; + __v->__exponent = 0; + return true; +} + +[[nodiscard]] _LIBCPP_FUNC_VIS to_chars_result __d2s_buffered_n(char* const _First, char* const _Last, const double __f, + const chars_format _Fmt) { + + // Step 1: Decode the floating-point number, and unify normalized and subnormal cases. + const uint64_t __bits = __double_to_bits(__f); + + // Case distinction; exit early for the easy cases. + if (__bits == 0) { + if (_Fmt == chars_format::scientific) { + if (_Last - _First < 5) { + return { _Last, errc::value_too_large }; + } + + _VSTD::memcpy(_First, "0e+00", 5); + + return { _First + 5, errc{} }; + } + + // Print "0" for chars_format::fixed, chars_format::general, and chars_format{}. + if (_First == _Last) { + return { _Last, errc::value_too_large }; + } + + *_First = '0'; + + return { _First + 1, errc{} }; + } + + // Decode __bits into mantissa and exponent. + const uint64_t __ieeeMantissa = __bits & ((1ull << __DOUBLE_MANTISSA_BITS) - 1); + const uint32_t __ieeeExponent = static_cast(__bits >> __DOUBLE_MANTISSA_BITS); + + if (_Fmt == chars_format::fixed) { + // const uint64_t _Mantissa2 = __ieeeMantissa | (1ull << __DOUBLE_MANTISSA_BITS); // restore implicit bit + const int32_t _Exponent2 = static_cast(__ieeeExponent) + - __DOUBLE_BIAS - __DOUBLE_MANTISSA_BITS; // bias and normalization + + // Normal values are equal to _Mantissa2 * 2^_Exponent2. + // (Subnormals are different, but they'll be rejected by the _Exponent2 test here, so they can be ignored.) + + // For nonzero integers, _Exponent2 >= -52. (The minimum value occurs when _Mantissa2 * 2^_Exponent2 is 1. + // In that case, _Mantissa2 is the implicit 1 bit followed by 52 zeros, so _Exponent2 is -52 to shift away + // the zeros.) The dense range of exactly representable integers has negative or zero exponents + // (as positive exponents make the range non-dense). For that dense range, Ryu will always be used: + // every digit is necessary to uniquely identify the value, so Ryu must print them all. + + // Positive exponents are the non-dense range of exactly representable integers. This contains all of the values + // for which Ryu can't be used (and a few Ryu-friendly values). We can save time by detecting positive + // exponents here and skipping Ryu. Calling __d2fixed_buffered_n() with precision 0 is valid for all integers + // (so it's okay if we call it with a Ryu-friendly value). + if (_Exponent2 > 0) { + return __d2fixed_buffered_n(_First, _Last, __f, 0); + } + } + + __floating_decimal_64 __v; + const bool __isSmallInt = __d2d_small_int(__ieeeMantissa, __ieeeExponent, &__v); + if (__isSmallInt) { + // For small integers in the range [1, 2^53), __v.__mantissa might contain trailing (decimal) zeros. + // For scientific notation we need to move these zeros into the exponent. + // (This is not needed for fixed-point notation, so it might be beneficial to trim + // trailing zeros in __to_chars only if needed - once fixed-point notation output is implemented.) + for (;;) { + const uint64_t __q = __div10(__v.__mantissa); + const uint32_t __r = static_cast(__v.__mantissa) - 10 * static_cast(__q); + if (__r != 0) { + break; + } + __v.__mantissa = __q; + ++__v.__exponent; + } + } else { + __v = __d2d(__ieeeMantissa, __ieeeExponent); + } + + return __to_chars(_First, _Last, __v, _Fmt, __f); +} + +_LIBCPP_END_NAMESPACE_STD + +// clang-format on diff --git a/libcxx/src/ryu/d2s_full_table.h b/libcxx/src/ryu/d2s_full_table.h new file mode 100644 --- /dev/null +++ b/libcxx/src/ryu/d2s_full_table.h @@ -0,0 +1,368 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +// Copyright (c) Microsoft Corporation. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +// Copyright 2018 Ulf Adams +// Copyright (c) Microsoft Corporation. All rights reserved. + +// Boost Software License - Version 1.0 - August 17th, 2003 + +// Permission is hereby granted, free of charge, to any person or organization +// obtaining a copy of the software and accompanying documentation covered by +// this license (the "Software") to use, reproduce, display, distribute, +// execute, and transmit the Software, and to prepare derivative works of the +// Software, and to permit third-parties to whom the Software is furnished to +// do so, all subject to the following: + +// The copyright notices in the Software and this entire statement, including +// the above license grant, this restriction and the following disclaimer, +// must be included in all copies of the Software, in whole or in part, and +// all derivative works of the Software, unless such copies or derivative +// works are solely in the form of machine-executable object code generated by +// a source language processor. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +// DEALINGS IN THE SOFTWARE. + +#ifndef RYU_D2S_FULL_TABLE_H +#define RYU_D2S_FULL_TABLE_H + +// Avoid formatting to keep the changes with the original code minimal. +// clang-format off + +#include "__config" + +_LIBCPP_BEGIN_NAMESPACE_STD + +inline constexpr uint64_t __DOUBLE_POW5_INV_SPLIT[292][2] = { + { 1u, 288230376151711744u }, { 3689348814741910324u, 230584300921369395u }, + { 2951479051793528259u, 184467440737095516u }, { 17118578500402463900u, 147573952589676412u }, + { 12632330341676300947u, 236118324143482260u }, { 10105864273341040758u, 188894659314785808u }, + { 15463389048156653253u, 151115727451828646u }, { 17362724847566824558u, 241785163922925834u }, + { 17579528692795369969u, 193428131138340667u }, { 6684925324752475329u, 154742504910672534u }, + { 18074578149087781173u, 247588007857076054u }, { 18149011334012135262u, 198070406285660843u }, + { 3451162622983977240u, 158456325028528675u }, { 5521860196774363583u, 253530120045645880u }, + { 4417488157419490867u, 202824096036516704u }, { 7223339340677503017u, 162259276829213363u }, + { 7867994130342094503u, 259614842926741381u }, { 2605046489531765280u, 207691874341393105u }, + { 2084037191625412224u, 166153499473114484u }, { 10713157136084480204u, 265845599156983174u }, + { 12259874523609494487u, 212676479325586539u }, { 13497248433629505913u, 170141183460469231u }, + { 14216899864323388813u, 272225893536750770u }, { 11373519891458711051u, 217780714829400616u }, + { 5409467098425058518u, 174224571863520493u }, { 4965798542738183305u, 278759314981632789u }, + { 7661987648932456967u, 223007451985306231u }, { 2440241304404055250u, 178405961588244985u }, + { 3904386087046488400u, 285449538541191976u }, { 17880904128604832013u, 228359630832953580u }, + { 14304723302883865611u, 182687704666362864u }, { 15133127457049002812u, 146150163733090291u }, + { 16834306301794583852u, 233840261972944466u }, { 9778096226693756759u, 187072209578355573u }, + { 15201174610838826053u, 149657767662684458u }, { 2185786488890659746u, 239452428260295134u }, + { 5437978005854438120u, 191561942608236107u }, { 15418428848909281466u, 153249554086588885u }, + { 6222742084545298729u, 245199286538542217u }, { 16046240111861969953u, 196159429230833773u }, + { 1768945645263844993u, 156927543384667019u }, { 10209010661905972635u, 251084069415467230u }, + { 8167208529524778108u, 200867255532373784u }, { 10223115638361732810u, 160693804425899027u }, + { 1599589762411131202u, 257110087081438444u }, { 4969020624670815285u, 205688069665150755u }, + { 3975216499736652228u, 164550455732120604u }, { 13739044029062464211u, 263280729171392966u }, + { 7301886408508061046u, 210624583337114373u }, { 13220206756290269483u, 168499666669691498u }, + { 17462981995322520850u, 269599466671506397u }, { 6591687966774196033u, 215679573337205118u }, + { 12652048002903177473u, 172543658669764094u }, { 9175230360419352987u, 276069853871622551u }, + { 3650835473593572067u, 220855883097298041u }, { 17678063637842498946u, 176684706477838432u }, + { 13527506561580357021u, 282695530364541492u }, { 3443307619780464970u, 226156424291633194u }, + { 6443994910566282300u, 180925139433306555u }, { 5155195928453025840u, 144740111546645244u }, + { 15627011115008661990u, 231584178474632390u }, { 12501608892006929592u, 185267342779705912u }, + { 2622589484121723027u, 148213874223764730u }, { 4196143174594756843u, 237142198758023568u }, + { 10735612169159626121u, 189713759006418854u }, { 12277838550069611220u, 151771007205135083u }, + { 15955192865369467629u, 242833611528216133u }, { 1696107848069843133u, 194266889222572907u }, + { 12424932722681605476u, 155413511378058325u }, { 1433148282581017146u, 248661618204893321u }, + { 15903913885032455010u, 198929294563914656u }, { 9033782293284053685u, 159143435651131725u }, + { 14454051669254485895u, 254629497041810760u }, { 11563241335403588716u, 203703597633448608u }, + { 16629290697806691620u, 162962878106758886u }, { 781423413297334329u, 260740604970814219u }, + { 4314487545379777786u, 208592483976651375u }, { 3451590036303822229u, 166873987181321100u }, + { 5522544058086115566u, 266998379490113760u }, { 4418035246468892453u, 213598703592091008u }, + { 10913125826658934609u, 170878962873672806u }, { 10082303693170474728u, 273406340597876490u }, + { 8065842954536379782u, 218725072478301192u }, { 17520720807854834795u, 174980057982640953u }, + { 5897060404116273733u, 279968092772225526u }, { 1028299508551108663u, 223974474217780421u }, + { 15580034865808528224u, 179179579374224336u }, { 17549358155809824511u, 286687326998758938u }, + { 2971440080422128639u, 229349861599007151u }, { 17134547323305344204u, 183479889279205720u }, + { 13707637858644275364u, 146783911423364576u }, { 14553522944347019935u, 234854258277383322u }, + { 4264120725993795302u, 187883406621906658u }, { 10789994210278856888u, 150306725297525326u }, + { 9885293106962350374u, 240490760476040522u }, { 529536856086059653u, 192392608380832418u }, + { 7802327114352668369u, 153914086704665934u }, { 1415676938738538420u, 246262538727465495u }, + { 1132541550990830736u, 197010030981972396u }, { 15663428499760305882u, 157608024785577916u }, + { 17682787970132668764u, 252172839656924666u }, { 10456881561364224688u, 201738271725539733u }, + { 15744202878575200397u, 161390617380431786u }, { 17812026976236499989u, 258224987808690858u }, + { 3181575136763469022u, 206579990246952687u }, { 13613306553636506187u, 165263992197562149u }, + { 10713244041592678929u, 264422387516099439u }, { 12259944048016053467u, 211537910012879551u }, + { 6118606423670932450u, 169230328010303641u }, { 2411072648389671274u, 270768524816485826u }, + { 16686253377679378312u, 216614819853188660u }, { 13349002702143502650u, 173291855882550928u }, + { 17669055508687693916u, 277266969412081485u }, { 14135244406950155133u, 221813575529665188u }, + { 240149081334393137u, 177450860423732151u }, { 11452284974360759988u, 283921376677971441u }, + { 5472479164746697667u, 227137101342377153u }, { 11756680961281178780u, 181709681073901722u }, + { 2026647139541122378u, 145367744859121378u }, { 18000030682233437097u, 232588391774594204u }, + { 18089373360528660001u, 186070713419675363u }, { 3403452244197197031u, 148856570735740291u }, + { 16513570034941246220u, 238170513177184465u }, { 13210856027952996976u, 190536410541747572u }, + { 3189987192878576934u, 152429128433398058u }, { 1414630693863812771u, 243886605493436893u }, + { 8510402184574870864u, 195109284394749514u }, { 10497670562401807014u, 156087427515799611u }, + { 9417575270359070576u, 249739884025279378u }, { 14912757845771077107u, 199791907220223502u }, + { 4551508647133041040u, 159833525776178802u }, { 10971762650154775986u, 255733641241886083u }, + { 16156107749607641435u, 204586912993508866u }, { 9235537384944202825u, 163669530394807093u }, + { 11087511001168814197u, 261871248631691349u }, { 12559357615676961681u, 209496998905353079u }, + { 13736834907283479668u, 167597599124282463u }, { 18289587036911657145u, 268156158598851941u }, + { 10942320814787415393u, 214524926879081553u }, { 16132554281313752961u, 171619941503265242u }, + { 11054691591134363444u, 274591906405224388u }, { 16222450902391311402u, 219673525124179510u }, + { 12977960721913049122u, 175738820099343608u }, { 17075388340318968271u, 281182112158949773u }, + { 2592264228029443648u, 224945689727159819u }, { 5763160197165465241u, 179956551781727855u }, + { 9221056315464744386u, 287930482850764568u }, { 14755542681855616155u, 230344386280611654u }, + { 15493782960226403247u, 184275509024489323u }, { 1326979923955391628u, 147420407219591459u }, + { 9501865507812447252u, 235872651551346334u }, { 11290841220991868125u, 188698121241077067u }, + { 1653975347309673853u, 150958496992861654u }, { 10025058185179298811u, 241533595188578646u }, + { 4330697733401528726u, 193226876150862917u }, { 14532604630946953951u, 154581500920690333u }, + { 1116074521063664381u, 247330401473104534u }, { 4582208431592841828u, 197864321178483627u }, + { 14733813189500004432u, 158291456942786901u }, { 16195403473716186445u, 253266331108459042u }, + { 5577625149489128510u, 202613064886767234u }, { 8151448934333213131u, 162090451909413787u }, + { 16731667109675051333u, 259344723055062059u }, { 17074682502481951390u, 207475778444049647u }, + { 6281048372501740465u, 165980622755239718u }, { 6360328581260874421u, 265568996408383549u }, + { 8777611679750609860u, 212455197126706839u }, { 10711438158542398211u, 169964157701365471u }, + { 9759603424184016492u, 271942652322184754u }, { 11497031554089123517u, 217554121857747803u }, + { 16576322872755119460u, 174043297486198242u }, { 11764721337440549842u, 278469275977917188u }, + { 16790474699436260520u, 222775420782333750u }, { 13432379759549008416u, 178220336625867000u }, + { 3045063541568861850u, 285152538601387201u }, { 17193446092222730773u, 228122030881109760u }, + { 13754756873778184618u, 182497624704887808u }, { 18382503128506368341u, 145998099763910246u }, + { 3586563302416817083u, 233596959622256395u }, { 2869250641933453667u, 186877567697805116u }, + { 17052795772514404226u, 149502054158244092u }, { 12527077977055405469u, 239203286653190548u }, + { 17400360011128145022u, 191362629322552438u }, { 2852241564676785048u, 153090103458041951u }, + { 15631632947708587046u, 244944165532867121u }, { 8815957543424959314u, 195955332426293697u }, + { 18120812478965698421u, 156764265941034957u }, { 14235904707377476180u, 250822825505655932u }, + { 4010026136418160298u, 200658260404524746u }, { 17965416168102169531u, 160526608323619796u }, + { 2919224165770098987u, 256842573317791675u }, { 2335379332616079190u, 205474058654233340u }, + { 1868303466092863352u, 164379246923386672u }, { 6678634360490491686u, 263006795077418675u }, + { 5342907488392393349u, 210405436061934940u }, { 4274325990713914679u, 168324348849547952u }, + { 10528270399884173809u, 269318958159276723u }, { 15801313949391159694u, 215455166527421378u }, + { 1573004715287196786u, 172364133221937103u }, { 17274202803427156150u, 275782613155099364u }, + { 17508711057483635243u, 220626090524079491u }, { 10317620031244997871u, 176500872419263593u }, + { 12818843235250086271u, 282401395870821749u }, { 13944423402941979340u, 225921116696657399u }, + { 14844887537095493795u, 180736893357325919u }, { 15565258844418305359u, 144589514685860735u }, + { 6457670077359736959u, 231343223497377177u }, { 16234182506113520537u, 185074578797901741u }, + { 9297997190148906106u, 148059663038321393u }, { 11187446689496339446u, 236895460861314229u }, + { 12639306166338981880u, 189516368689051383u }, { 17490142562555006151u, 151613094951241106u }, + { 2158786396894637579u, 242580951921985771u }, { 16484424376483351356u, 194064761537588616u }, + { 9498190686444770762u, 155251809230070893u }, { 11507756283569722895u, 248402894768113429u }, + { 12895553841597688639u, 198722315814490743u }, { 17695140702761971558u, 158977852651592594u }, + { 17244178680193423523u, 254364564242548151u }, { 10105994129412828495u, 203491651394038521u }, + { 4395446488788352473u, 162793321115230817u }, { 10722063196803274280u, 260469313784369307u }, + { 1198952927958798777u, 208375451027495446u }, { 15716557601334680315u, 166700360821996356u }, + { 17767794532651667857u, 266720577315194170u }, { 14214235626121334286u, 213376461852155336u }, + { 7682039686155157106u, 170701169481724269u }, { 1223217053622520399u, 273121871170758831u }, + { 15735968901865657612u, 218497496936607064u }, { 16278123936234436413u, 174797997549285651u }, + { 219556594781725998u, 279676796078857043u }, { 7554342905309201445u, 223741436863085634u }, + { 9732823138989271479u, 178993149490468507u }, { 815121763415193074u, 286389039184749612u }, + { 11720143854957885429u, 229111231347799689u }, { 13065463898708218666u, 183288985078239751u }, + { 6763022304224664610u, 146631188062591801u }, { 3442138057275642729u, 234609900900146882u }, + { 13821756890046245153u, 187687920720117505u }, { 11057405512036996122u, 150150336576094004u }, + { 6623802375033462826u, 240240538521750407u }, { 16367088344252501231u, 192192430817400325u }, + { 13093670675402000985u, 153753944653920260u }, { 2503129006933649959u, 246006311446272417u }, + { 13070549649772650937u, 196805049157017933u }, { 17835137349301941396u, 157444039325614346u }, + { 2710778055689733971u, 251910462920982955u }, { 2168622444551787177u, 201528370336786364u }, + { 5424246770383340065u, 161222696269429091u }, { 1300097203129523457u, 257956314031086546u }, + { 15797473021471260058u, 206365051224869236u }, { 8948629602435097724u, 165092040979895389u }, + { 3249760919670425388u, 264147265567832623u }, { 9978506365220160957u, 211317812454266098u }, + { 15361502721659949412u, 169054249963412878u }, { 2442311466204457120u, 270486799941460606u }, + { 16711244431931206989u, 216389439953168484u }, { 17058344360286875914u, 173111551962534787u }, + { 12535955717491360170u, 276978483140055660u }, { 10028764573993088136u, 221582786512044528u }, + { 15401709288678291155u, 177266229209635622u }, { 9885339602917624555u, 283625966735416996u }, + { 4218922867592189321u, 226900773388333597u }, { 14443184738299482427u, 181520618710666877u }, + { 4175850161155765295u, 145216494968533502u }, { 10370709072591134795u, 232346391949653603u }, + { 15675264887556728482u, 185877113559722882u }, { 5161514280561562140u, 148701690847778306u }, + { 879725219414678777u, 237922705356445290u }, { 703780175531743021u, 190338164285156232u }, + { 11631070584651125387u, 152270531428124985u }, { 162968861732249003u, 243632850284999977u }, + { 11198421533611530172u, 194906280227999981u }, { 5269388412147313814u, 155925024182399985u }, + { 8431021459435702103u, 249480038691839976u }, { 3055468352806651359u, 199584030953471981u }, + { 17201769941212962380u, 159667224762777584u }, { 16454785461715008838u, 255467559620444135u }, + { 13163828369372007071u, 204374047696355308u }, { 17909760324981426303u, 163499238157084246u }, + { 2830174816776909822u, 261598781051334795u }, { 2264139853421527858u, 209279024841067836u }, + { 16568707141704863579u, 167423219872854268u }, { 4373838538276319787u, 267877151796566830u }, + { 3499070830621055830u, 214301721437253464u }, { 6488605479238754987u, 171441377149802771u }, + { 3003071137298187333u, 274306203439684434u }, { 6091805724580460189u, 219444962751747547u }, + { 15941491023890099121u, 175555970201398037u }, { 10748990379256517301u, 280889552322236860u }, + { 8599192303405213841u, 224711641857789488u }, { 14258051472207991719u, 179769313486231590u } +}; + +inline constexpr uint64_t __DOUBLE_POW5_SPLIT[326][2] = { + { 0u, 72057594037927936u }, { 0u, 90071992547409920u }, + { 0u, 112589990684262400u }, { 0u, 140737488355328000u }, + { 0u, 87960930222080000u }, { 0u, 109951162777600000u }, + { 0u, 137438953472000000u }, { 0u, 85899345920000000u }, + { 0u, 107374182400000000u }, { 0u, 134217728000000000u }, + { 0u, 83886080000000000u }, { 0u, 104857600000000000u }, + { 0u, 131072000000000000u }, { 0u, 81920000000000000u }, + { 0u, 102400000000000000u }, { 0u, 128000000000000000u }, + { 0u, 80000000000000000u }, { 0u, 100000000000000000u }, + { 0u, 125000000000000000u }, { 0u, 78125000000000000u }, + { 0u, 97656250000000000u }, { 0u, 122070312500000000u }, + { 0u, 76293945312500000u }, { 0u, 95367431640625000u }, + { 0u, 119209289550781250u }, { 4611686018427387904u, 74505805969238281u }, + { 10376293541461622784u, 93132257461547851u }, { 8358680908399640576u, 116415321826934814u }, + { 612489549322387456u, 72759576141834259u }, { 14600669991935148032u, 90949470177292823u }, + { 13639151471491547136u, 113686837721616029u }, { 3213881284082270208u, 142108547152020037u }, + { 4314518811765112832u, 88817841970012523u }, { 781462496279003136u, 111022302462515654u }, + { 10200200157203529728u, 138777878078144567u }, { 13292654125893287936u, 86736173798840354u }, + { 7392445620511834112u, 108420217248550443u }, { 4628871007212404736u, 135525271560688054u }, + { 16728102434789916672u, 84703294725430033u }, { 7075069988205232128u, 105879118406787542u }, + { 18067209522111315968u, 132348898008484427u }, { 8986162942105878528u, 82718061255302767u }, + { 6621017659204960256u, 103397576569128459u }, { 3664586055578812416u, 129246970711410574u }, + { 16125424340018921472u, 80779356694631608u }, { 1710036351314100224u, 100974195868289511u }, + { 15972603494424788992u, 126217744835361888u }, { 9982877184015493120u, 78886090522101180u }, + { 12478596480019366400u, 98607613152626475u }, { 10986559581596820096u, 123259516440783094u }, + { 2254913720070624656u, 77037197775489434u }, { 12042014186943056628u, 96296497219361792u }, + { 15052517733678820785u, 120370621524202240u }, { 9407823583549262990u, 75231638452626400u }, + { 11759779479436578738u, 94039548065783000u }, { 14699724349295723422u, 117549435082228750u }, + { 4575641699882439235u, 73468396926392969u }, { 10331238143280436948u, 91835496157991211u }, + { 8302361660673158281u, 114794370197489014u }, { 1154580038986672043u, 143492962746861268u }, + { 9944984561221445835u, 89683101716788292u }, { 12431230701526807293u, 112103877145985365u }, + { 1703980321626345405u, 140129846432481707u }, { 17205888765512323542u, 87581154020301066u }, + { 12283988920035628619u, 109476442525376333u }, { 1519928094762372062u, 136845553156720417u }, + { 12479170105294952299u, 85528470722950260u }, { 15598962631618690374u, 106910588403687825u }, + { 5663645234241199255u, 133638235504609782u }, { 17374836326682913246u, 83523897190381113u }, + { 7883487353071477846u, 104404871487976392u }, { 9854359191339347308u, 130506089359970490u }, + { 10770660513014479971u, 81566305849981556u }, { 13463325641268099964u, 101957882312476945u }, + { 2994098996302961243u, 127447352890596182u }, { 15706369927971514489u, 79654595556622613u }, + { 5797904354682229399u, 99568244445778267u }, { 2635694424925398845u, 124460305557222834u }, + { 6258995034005762182u, 77787690973264271u }, { 3212057774079814824u, 97234613716580339u }, + { 17850130272881932242u, 121543267145725423u }, { 18073860448192289507u, 75964541966078389u }, + { 8757267504958198172u, 94955677457597987u }, { 6334898362770359811u, 118694596821997484u }, + { 13182683513586250689u, 74184123013748427u }, { 11866668373555425458u, 92730153767185534u }, + { 5609963430089506015u, 115912692208981918u }, { 17341285199088104971u, 72445432630613698u }, + { 12453234462005355406u, 90556790788267123u }, { 10954857059079306353u, 113195988485333904u }, + { 13693571323849132942u, 141494985606667380u }, { 17781854114260483896u, 88434366004167112u }, + { 3780573569116053255u, 110542957505208891u }, { 114030942967678664u, 138178696881511114u }, + { 4682955357782187069u, 86361685550944446u }, { 15077066234082509644u, 107952106938680557u }, + { 5011274737320973344u, 134940133673350697u }, { 14661261756894078100u, 84337583545844185u }, + { 4491519140835433913u, 105421979432305232u }, { 5614398926044292391u, 131777474290381540u }, + { 12732371365632458552u, 82360921431488462u }, { 6692092170185797382u, 102951151789360578u }, + { 17588487249587022536u, 128688939736700722u }, { 15604490549419276989u, 80430587335437951u }, + { 14893927168346708332u, 100538234169297439u }, { 14005722942005997511u, 125672792711621799u }, + { 15671105866394830300u, 78545495444763624u }, { 1142138259283986260u, 98181869305954531u }, + { 15262730879387146537u, 122727336632443163u }, { 7233363790403272633u, 76704585395276977u }, + { 13653390756431478696u, 95880731744096221u }, { 3231680390257184658u, 119850914680120277u }, + { 4325643253124434363u, 74906821675075173u }, { 10018740084832930858u, 93633527093843966u }, + { 3300053069186387764u, 117041908867304958u }, { 15897591223523656064u, 73151193042065598u }, + { 10648616992549794273u, 91438991302581998u }, { 4087399203832467033u, 114298739128227498u }, + { 14332621041645359599u, 142873423910284372u }, { 18181260187883125557u, 89295889943927732u }, + { 4279831161144355331u, 111619862429909666u }, { 14573160988285219972u, 139524828037387082u }, + { 13719911636105650386u, 87203017523366926u }, { 7926517508277287175u, 109003771904208658u }, + { 684774848491833161u, 136254714880260823u }, { 7345513307948477581u, 85159196800163014u }, + { 18405263671790372785u, 106448996000203767u }, { 18394893571310578077u, 133061245000254709u }, + { 13802651491282805250u, 83163278125159193u }, { 3418256308821342851u, 103954097656448992u }, + { 4272820386026678563u, 129942622070561240u }, { 2670512741266674102u, 81214138794100775u }, + { 17173198981865506339u, 101517673492625968u }, { 3019754653622331308u, 126897091865782461u }, + { 4193189667727651020u, 79310682416114038u }, { 14464859121514339583u, 99138353020142547u }, + { 13469387883465536574u, 123922941275178184u }, { 8418367427165960359u, 77451838296986365u }, + { 15134645302384838353u, 96814797871232956u }, { 471562554271496325u, 121018497339041196u }, + { 9518098633274461011u, 75636560836900747u }, { 7285937273165688360u, 94545701046125934u }, + { 18330793628311886258u, 118182126307657417u }, { 4539216990053847055u, 73863828942285886u }, + { 14897393274422084627u, 92329786177857357u }, { 4786683537745442072u, 115412232722321697u }, + { 14520892257159371055u, 72132645451451060u }, { 18151115321449213818u, 90165806814313825u }, + { 8853836096529353561u, 112707258517892282u }, { 1843923083806916143u, 140884073147365353u }, + { 12681666973447792349u, 88052545717103345u }, { 2017025661527576725u, 110065682146379182u }, + { 11744654113764246714u, 137582102682973977u }, { 422879793461572340u, 85988814176858736u }, + { 528599741826965425u, 107486017721073420u }, { 660749677283706782u, 134357522151341775u }, + { 7330497575943398595u, 83973451344588609u }, { 13774807988356636147u, 104966814180735761u }, + { 3383451930163631472u, 131208517725919702u }, { 15949715511634433382u, 82005323578699813u }, + { 6102086334260878016u, 102506654473374767u }, { 3015921899398709616u, 128133318091718459u }, + { 18025852251620051174u, 80083323807324036u }, { 4085571240815512351u, 100104154759155046u }, + { 14330336087874166247u, 125130193448943807u }, { 15873989082562435760u, 78206370905589879u }, + { 15230800334775656796u, 97757963631987349u }, { 5203442363187407284u, 122197454539984187u }, + { 946308467778435600u, 76373409087490117u }, { 5794571603150432404u, 95466761359362646u }, + { 16466586540792816313u, 119333451699203307u }, { 7985773578781816244u, 74583407312002067u }, + { 5370530955049882401u, 93229259140002584u }, { 6713163693812353001u, 116536573925003230u }, + { 18030785363914884337u, 72835358703127018u }, { 13315109668038829614u, 91044198378908773u }, + { 2808829029766373305u, 113805247973635967u }, { 17346094342490130344u, 142256559967044958u }, + { 6229622945628943561u, 88910349979403099u }, { 3175342663608791547u, 111137937474253874u }, + { 13192550366365765242u, 138922421842817342u }, { 3633657960551215372u, 86826513651760839u }, + { 18377130505971182927u, 108533142064701048u }, { 4524669058754427043u, 135666427580876311u }, + { 9745447189362598758u, 84791517238047694u }, { 2958436949848472639u, 105989396547559618u }, + { 12921418224165366607u, 132486745684449522u }, { 12687572408530742033u, 82804216052780951u }, + { 11247779492236039638u, 103505270065976189u }, { 224666310012885835u, 129381587582470237u }, + { 2446259452971747599u, 80863492239043898u }, { 12281196353069460307u, 101079365298804872u }, + { 15351495441336825384u, 126349206623506090u }, { 14206370669262903769u, 78968254139691306u }, + { 8534591299723853903u, 98710317674614133u }, { 15279925143082205283u, 123387897093267666u }, + { 14161639232853766206u, 77117435683292291u }, { 13090363022639819853u, 96396794604115364u }, + { 16362953778299774816u, 120495993255144205u }, { 12532689120651053212u, 75309995784465128u }, + { 15665861400813816515u, 94137494730581410u }, { 10358954714162494836u, 117671868413226763u }, + { 4168503687137865320u, 73544917758266727u }, { 598943590494943747u, 91931147197833409u }, + { 5360365506546067587u, 114913933997291761u }, { 11312142901609972388u, 143642417496614701u }, + { 9375932322719926695u, 89776510935384188u }, { 11719915403399908368u, 112220638669230235u }, + { 10038208235822497557u, 140275798336537794u }, { 10885566165816448877u, 87672373960336121u }, + { 18218643725697949000u, 109590467450420151u }, { 18161618638695048346u, 136988084313025189u }, + { 13656854658398099168u, 85617552695640743u }, { 12459382304570236056u, 107021940869550929u }, + { 1739169825430631358u, 133777426086938662u }, { 14922039196176308311u, 83610891304336663u }, + { 14040862976792997485u, 104513614130420829u }, { 3716020665709083144u, 130642017663026037u }, + { 4628355925281870917u, 81651261039391273u }, { 10397130925029726550u, 102064076299239091u }, + { 8384727637859770284u, 127580095374048864u }, { 5240454773662356427u, 79737559608780540u }, + { 6550568467077945534u, 99671949510975675u }, { 3576524565420044014u, 124589936888719594u }, + { 6847013871814915412u, 77868710555449746u }, { 17782139376623420074u, 97335888194312182u }, + { 13004302183924499284u, 121669860242890228u }, { 17351060901807587860u, 76043662651806392u }, + { 3242082053549933210u, 95054578314757991u }, { 17887660622219580224u, 118818222893447488u }, + { 11179787888887237640u, 74261389308404680u }, { 13974734861109047050u, 92826736635505850u }, + { 8245046539531533005u, 116033420794382313u }, { 16682369133275677888u, 72520887996488945u }, + { 7017903361312433648u, 90651109995611182u }, { 17995751238495317868u, 113313887494513977u }, + { 8659630992836983623u, 141642359368142472u }, { 5412269370523114764u, 88526474605089045u }, + { 11377022731581281359u, 110658093256361306u }, { 4997906377621825891u, 138322616570451633u }, + { 14652906532082110942u, 86451635356532270u }, { 9092761128247862869u, 108064544195665338u }, + { 2142579373455052779u, 135080680244581673u }, { 12868327154477877747u, 84425425152863545u }, + { 2250350887815183471u, 105531781441079432u }, { 2812938609768979339u, 131914726801349290u }, + { 6369772649532999991u, 82446704250843306u }, { 17185587848771025797u, 103058380313554132u }, + { 3035240737254230630u, 128822975391942666u }, { 6508711479211282048u, 80514359619964166u }, + { 17359261385868878368u, 100642949524955207u }, { 17087390713908710056u, 125803686906194009u }, + { 3762090168551861929u, 78627304316371256u }, { 4702612710689827411u, 98284130395464070u }, + { 15101637925217060072u, 122855162994330087u }, { 16356052730901744401u, 76784476871456304u }, + { 1998321839917628885u, 95980596089320381u }, { 7109588318324424010u, 119975745111650476u }, + { 13666864735807540814u, 74984840694781547u }, { 12471894901332038114u, 93731050868476934u }, + { 6366496589810271835u, 117163813585596168u }, { 3979060368631419896u, 73227383490997605u }, + { 9585511479216662775u, 91534229363747006u }, { 2758517312166052660u, 114417786704683758u }, + { 12671518677062341634u, 143022233380854697u }, { 1002170145522881665u, 89388895863034186u }, + { 10476084718758377889u, 111736119828792732u }, { 13095105898447972362u, 139670149785990915u }, + { 5878598177316288774u, 87293843616244322u }, { 16571619758500136775u, 109117304520305402u }, + { 11491152661270395161u, 136396630650381753u }, { 264441385652915120u, 85247894156488596u }, + { 330551732066143900u, 106559867695610745u }, { 5024875683510067779u, 133199834619513431u }, + { 10058076329834874218u, 83249896637195894u }, { 3349223375438816964u, 104062370796494868u }, + { 4186529219298521205u, 130077963495618585u }, { 14145795808130045513u, 81298727184761615u }, + { 13070558741735168987u, 101623408980952019u }, { 11726512408741573330u, 127029261226190024u }, + { 7329070255463483331u, 79393288266368765u }, { 13773023837756742068u, 99241610332960956u }, + { 17216279797195927585u, 124052012916201195u }, { 8454331864033760789u, 77532508072625747u }, + { 5956228811614813082u, 96915635090782184u }, { 7445286014518516353u, 121144543863477730u }, + { 9264989777501460624u, 75715339914673581u }, { 16192923240304213684u, 94644174893341976u }, + { 1794409976670715490u, 118305218616677471u }, { 8039035263060279037u, 73940761635423419u }, + { 5437108060397960892u, 92425952044279274u }, { 16019757112352226923u, 115532440055349092u }, + { 788976158365366019u, 72207775034593183u }, { 14821278253238871236u, 90259718793241478u }, + { 9303225779693813237u, 112824648491551848u }, { 11629032224617266546u, 141030810614439810u }, + { 11879831158813179495u, 88144256634024881u }, { 1014730893234310657u, 110180320792531102u }, + { 10491785653397664129u, 137725400990663877u }, { 8863209042587234033u, 86078375619164923u }, + { 6467325284806654637u, 107597969523956154u }, { 17307528642863094104u, 134497461904945192u }, + { 10817205401789433815u, 84060913690590745u }, { 18133192770664180173u, 105076142113238431u }, + { 18054804944902837312u, 131345177641548039u }, { 18201782118205355176u, 82090736025967524u }, + { 4305483574047142354u, 102613420032459406u }, { 14605226504413703751u, 128266775040574257u }, + { 2210737537617482988u, 80166734400358911u }, { 16598479977304017447u, 100208418000448638u }, + { 11524727934775246001u, 125260522500560798u }, { 2591268940807140847u, 78287826562850499u }, + { 17074144231291089770u, 97859783203563123u }, { 16730994270686474309u, 122324729004453904u }, + { 10456871419179046443u, 76452955627783690u }, { 3847717237119032246u, 95566194534729613u }, + { 9421332564826178211u, 119457743168412016u }, { 5888332853016361382u, 74661089480257510u }, + { 16583788103125227536u, 93326361850321887u }, { 16118049110479146516u, 116657952312902359u }, + { 16991309721690548428u, 72911220195563974u }, { 12015765115258409727u, 91139025244454968u }, + { 15019706394073012159u, 113923781555568710u }, { 9551260955736489391u, 142404726944460888u }, + { 5969538097335305869u, 89002954340288055u }, { 2850236603241744433u, 111253692925360069u } +}; + +_LIBCPP_END_NAMESPACE_STD + +// clang-format on + +#endif // RYU_D2S_FULL_TABLE_H diff --git a/libcxx/src/ryu/digit_table.h b/libcxx/src/ryu/digit_table.h new file mode 100644 --- /dev/null +++ b/libcxx/src/ryu/digit_table.h @@ -0,0 +1,67 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +// Copyright (c) Microsoft Corporation. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +// Copyright 2018 Ulf Adams +// Copyright (c) Microsoft Corporation. All rights reserved. + +// Boost Software License - Version 1.0 - August 17th, 2003 + +// Permission is hereby granted, free of charge, to any person or organization +// obtaining a copy of the software and accompanying documentation covered by +// this license (the "Software") to use, reproduce, display, distribute, +// execute, and transmit the Software, and to prepare derivative works of the +// Software, and to permit third-parties to whom the Software is furnished to +// do so, all subject to the following: + +// The copyright notices in the Software and this entire statement, including +// the above license grant, this restriction and the following disclaimer, +// must be included in all copies of the Software, in whole or in part, and +// all derivative works of the Software, unless such copies or derivative +// works are solely in the form of machine-executable object code generated by +// a source language processor. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +// DEALINGS IN THE SOFTWARE. + +#ifndef RYU_DIGIT_TABLE_H +#define RYU_DIGIT_TABLE_H + +// Avoid formatting to keep the changes with the original code minimal. +// clang-format off + +#include "__config" + +_LIBCPP_BEGIN_NAMESPACE_STD + +// A table of all two-digit numbers. This is used to speed up decimal digit +// generation by copying pairs of digits into the final output. +inline constexpr char __DIGIT_TABLE[200] = { + '0','0','0','1','0','2','0','3','0','4','0','5','0','6','0','7','0','8','0','9', + '1','0','1','1','1','2','1','3','1','4','1','5','1','6','1','7','1','8','1','9', + '2','0','2','1','2','2','2','3','2','4','2','5','2','6','2','7','2','8','2','9', + '3','0','3','1','3','2','3','3','3','4','3','5','3','6','3','7','3','8','3','9', + '4','0','4','1','4','2','4','3','4','4','4','5','4','6','4','7','4','8','4','9', + '5','0','5','1','5','2','5','3','5','4','5','5','5','6','5','7','5','8','5','9', + '6','0','6','1','6','2','6','3','6','4','6','5','6','6','6','7','6','8','6','9', + '7','0','7','1','7','2','7','3','7','4','7','5','7','6','7','7','7','8','7','9', + '8','0','8','1','8','2','8','3','8','4','8','5','8','6','8','7','8','8','8','9', + '9','0','9','1','9','2','9','3','9','4','9','5','9','6','9','7','9','8','9','9' +}; + +_LIBCPP_END_NAMESPACE_STD + +// clang-format on +#endif // RYU_DIGIT_TABLE_H diff --git a/libcxx/src/ryu/f2s.cpp b/libcxx/src/ryu/f2s.cpp new file mode 100644 --- /dev/null +++ b/libcxx/src/ryu/f2s.cpp @@ -0,0 +1,709 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +// Copyright (c) Microsoft Corporation. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +// Copyright 2018 Ulf Adams +// Copyright (c) Microsoft Corporation. All rights reserved. + +// Boost Software License - Version 1.0 - August 17th, 2003 + +// Permission is hereby granted, free of charge, to any person or organization +// obtaining a copy of the software and accompanying documentation covered by +// this license (the "Software") to use, reproduce, display, distribute, +// execute, and transmit the Software, and to prepare derivative works of the +// Software, and to permit third-parties to whom the Software is furnished to +// do so, all subject to the following: + +// The copyright notices in the Software and this entire statement, including +// the above license grant, this restriction and the following disclaimer, +// must be included in all copies of the Software, in whole or in part, and +// all derivative works of the Software, unless such copies or derivative +// works are solely in the form of machine-executable object code generated by +// a source language processor. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +// DEALINGS IN THE SOFTWARE. + +// Avoid formatting to keep the changes with the original code minimal. +// clang-format off + +#include "charconv" + +#include "ryu/digit_table.h" + +_LIBCPP_BEGIN_NAMESPACE_STD + +inline constexpr int __FLOAT_MANTISSA_BITS = 23; +inline constexpr int __FLOAT_EXPONENT_BITS = 8; +inline constexpr int __FLOAT_BIAS = 127; + +inline constexpr int __FLOAT_POW5_INV_BITCOUNT = 59; +inline constexpr uint64_t __FLOAT_POW5_INV_SPLIT[31] = { + 576460752303423489u, 461168601842738791u, 368934881474191033u, 295147905179352826u, + 472236648286964522u, 377789318629571618u, 302231454903657294u, 483570327845851670u, + 386856262276681336u, 309485009821345069u, 495176015714152110u, 396140812571321688u, + 316912650057057351u, 507060240091291761u, 405648192073033409u, 324518553658426727u, + 519229685853482763u, 415383748682786211u, 332306998946228969u, 531691198313966350u, + 425352958651173080u, 340282366920938464u, 544451787073501542u, 435561429658801234u, + 348449143727040987u, 557518629963265579u, 446014903970612463u, 356811923176489971u, + 570899077082383953u, 456719261665907162u, 365375409332725730u +}; +inline constexpr int __FLOAT_POW5_BITCOUNT = 61; +inline constexpr uint64_t __FLOAT_POW5_SPLIT[47] = { + 1152921504606846976u, 1441151880758558720u, 1801439850948198400u, 2251799813685248000u, + 1407374883553280000u, 1759218604441600000u, 2199023255552000000u, 1374389534720000000u, + 1717986918400000000u, 2147483648000000000u, 1342177280000000000u, 1677721600000000000u, + 2097152000000000000u, 1310720000000000000u, 1638400000000000000u, 2048000000000000000u, + 1280000000000000000u, 1600000000000000000u, 2000000000000000000u, 1250000000000000000u, + 1562500000000000000u, 1953125000000000000u, 1220703125000000000u, 1525878906250000000u, + 1907348632812500000u, 1192092895507812500u, 1490116119384765625u, 1862645149230957031u, + 1164153218269348144u, 1455191522836685180u, 1818989403545856475u, 2273736754432320594u, + 1421085471520200371u, 1776356839400250464u, 2220446049250313080u, 1387778780781445675u, + 1734723475976807094u, 2168404344971008868u, 1355252715606880542u, 1694065894508600678u, + 2117582368135750847u, 1323488980084844279u, 1654361225106055349u, 2067951531382569187u, + 1292469707114105741u, 1615587133892632177u, 2019483917365790221u +}; + +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline uint32_t __pow5Factor(uint32_t __value) { + uint32_t __count = 0; + for (;;) { + _LIBCPP_ASSERT(__value != 0, ""); + const uint32_t __q = __value / 5; + const uint32_t __r = __value % 5; + if (__r != 0) { + break; + } + __value = __q; + ++__count; + } + return __count; +} + +// Returns true if __value is divisible by 5^__p. +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline bool __multipleOfPowerOf5(const uint32_t __value, const uint32_t __p) { + return __pow5Factor(__value) >= __p; +} + +// Returns true if __value is divisible by 2^__p. +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline bool __multipleOfPowerOf2(const uint32_t __value, const uint32_t __p) { + _LIBCPP_ASSERT(__value != 0, ""); + _LIBCPP_ASSERT(__p < 32, ""); + // __builtin_ctz doesn't appear to be faster here. + return (__value & ((1u << __p) - 1)) == 0; +} + +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline uint32_t __mulShift(const uint32_t __m, const uint64_t __factor, const int32_t __shift) { + _LIBCPP_ASSERT(__shift > 32, ""); + + // The casts here help MSVC to avoid calls to the __allmul library + // function. + const uint32_t __factorLo = static_cast(__factor); + const uint32_t __factorHi = static_cast(__factor >> 32); + const uint64_t __bits0 = static_cast(__m) * __factorLo; + const uint64_t __bits1 = static_cast(__m) * __factorHi; + +#ifndef _LIBCPP_64_BIT + // On 32-bit platforms we can avoid a 64-bit shift-right since we only + // need the upper 32 bits of the result and the shift value is > 32. + const uint32_t __bits0Hi = static_cast(__bits0 >> 32); + uint32_t __bits1Lo = static_cast(__bits1); + uint32_t __bits1Hi = static_cast(__bits1 >> 32); + __bits1Lo += __bits0Hi; + __bits1Hi += (__bits1Lo < __bits0Hi); + const int32_t __s = __shift - 32; + return (__bits1Hi << (32 - __s)) | (__bits1Lo >> __s); +#else // ^^^ 32-bit ^^^ / vvv 64-bit vvv + const uint64_t __sum = (__bits0 >> 32) + __bits1; + const uint64_t __shiftedSum = __sum >> (__shift - 32); + _LIBCPP_ASSERT(__shiftedSum <= UINT32_MAX, ""); + return static_cast(__shiftedSum); +#endif // ^^^ 64-bit ^^^ +} + +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline uint32_t __mulPow5InvDivPow2(const uint32_t __m, const uint32_t __q, const int32_t __j) { + return __mulShift(__m, __FLOAT_POW5_INV_SPLIT[__q], __j); +} + +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline uint32_t __mulPow5divPow2(const uint32_t __m, const uint32_t __i, const int32_t __j) { + return __mulShift(__m, __FLOAT_POW5_SPLIT[__i], __j); +} + +// A floating decimal representing m * 10^e. +struct __floating_decimal_32 { + uint32_t __mantissa; + int32_t __exponent; +}; + +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline __floating_decimal_32 __f2d(const uint32_t __ieeeMantissa, const uint32_t __ieeeExponent) { + int32_t __e2; + uint32_t __m2; + if (__ieeeExponent == 0) { + // We subtract 2 so that the bounds computation has 2 additional bits. + __e2 = 1 - __FLOAT_BIAS - __FLOAT_MANTISSA_BITS - 2; + __m2 = __ieeeMantissa; + } else { + __e2 = static_cast(__ieeeExponent) - __FLOAT_BIAS - __FLOAT_MANTISSA_BITS - 2; + __m2 = (1u << __FLOAT_MANTISSA_BITS) | __ieeeMantissa; + } + const bool __even = (__m2 & 1) == 0; + const bool __acceptBounds = __even; + + // Step 2: Determine the interval of valid decimal representations. + const uint32_t __mv = 4 * __m2; + const uint32_t __mp = 4 * __m2 + 2; + // Implicit bool -> int conversion. True is 1, false is 0. + const uint32_t __mmShift = __ieeeMantissa != 0 || __ieeeExponent <= 1; + const uint32_t __mm = 4 * __m2 - 1 - __mmShift; + + // Step 3: Convert to a decimal power base using 64-bit arithmetic. + uint32_t __vr, __vp, __vm; + int32_t __e10; + bool __vmIsTrailingZeros = false; + bool __vrIsTrailingZeros = false; + uint8_t __lastRemovedDigit = 0; + if (__e2 >= 0) { + const uint32_t __q = __log10Pow2(__e2); + __e10 = static_cast(__q); + const int32_t __k = __FLOAT_POW5_INV_BITCOUNT + __pow5bits(static_cast(__q)) - 1; + const int32_t __i = -__e2 + static_cast(__q) + __k; + __vr = __mulPow5InvDivPow2(__mv, __q, __i); + __vp = __mulPow5InvDivPow2(__mp, __q, __i); + __vm = __mulPow5InvDivPow2(__mm, __q, __i); + if (__q != 0 && (__vp - 1) / 10 <= __vm / 10) { + // We need to know one removed digit even if we are not going to loop below. We could use + // __q = X - 1 above, except that would require 33 bits for the result, and we've found that + // 32-bit arithmetic is faster even on 64-bit machines. + const int32_t __l = __FLOAT_POW5_INV_BITCOUNT + __pow5bits(static_cast(__q - 1)) - 1; + __lastRemovedDigit = static_cast(__mulPow5InvDivPow2(__mv, __q - 1, + -__e2 + static_cast(__q) - 1 + __l) % 10); + } + if (__q <= 9) { + // The largest power of 5 that fits in 24 bits is 5^10, but __q <= 9 seems to be safe as well. + // Only one of __mp, __mv, and __mm can be a multiple of 5, if any. + if (__mv % 5 == 0) { + __vrIsTrailingZeros = __multipleOfPowerOf5(__mv, __q); + } else if (__acceptBounds) { + __vmIsTrailingZeros = __multipleOfPowerOf5(__mm, __q); + } else { + __vp -= __multipleOfPowerOf5(__mp, __q); + } + } + } else { + const uint32_t __q = __log10Pow5(-__e2); + __e10 = static_cast(__q) + __e2; + const int32_t __i = -__e2 - static_cast(__q); + const int32_t __k = __pow5bits(__i) - __FLOAT_POW5_BITCOUNT; + int32_t __j = static_cast(__q) - __k; + __vr = __mulPow5divPow2(__mv, static_cast(__i), __j); + __vp = __mulPow5divPow2(__mp, static_cast(__i), __j); + __vm = __mulPow5divPow2(__mm, static_cast(__i), __j); + if (__q != 0 && (__vp - 1) / 10 <= __vm / 10) { + __j = static_cast(__q) - 1 - (__pow5bits(__i + 1) - __FLOAT_POW5_BITCOUNT); + __lastRemovedDigit = static_cast(__mulPow5divPow2(__mv, static_cast(__i + 1), __j) % 10); + } + if (__q <= 1) { + // {__vr,__vp,__vm} is trailing zeros if {__mv,__mp,__mm} has at least __q trailing 0 bits. + // __mv = 4 * __m2, so it always has at least two trailing 0 bits. + __vrIsTrailingZeros = true; + if (__acceptBounds) { + // __mm = __mv - 1 - __mmShift, so it has 1 trailing 0 bit iff __mmShift == 1. + __vmIsTrailingZeros = __mmShift == 1; + } else { + // __mp = __mv + 2, so it always has at least one trailing 0 bit. + --__vp; + } + } else if (__q < 31) { // TRANSITION(ulfjack): Use a tighter bound here. + __vrIsTrailingZeros = __multipleOfPowerOf2(__mv, __q - 1); + } + } + + // Step 4: Find the shortest decimal representation in the interval of valid representations. + int32_t __removed = 0; + uint32_t _Output; + if (__vmIsTrailingZeros || __vrIsTrailingZeros) { + // General case, which happens rarely (~4.0%). + while (__vp / 10 > __vm / 10) { +#ifdef __clang__ // TRANSITION, LLVM-23106 + __vmIsTrailingZeros &= __vm - (__vm / 10) * 10 == 0; +#else + __vmIsTrailingZeros &= __vm % 10 == 0; +#endif + __vrIsTrailingZeros &= __lastRemovedDigit == 0; + __lastRemovedDigit = static_cast(__vr % 10); + __vr /= 10; + __vp /= 10; + __vm /= 10; + ++__removed; + } + if (__vmIsTrailingZeros) { + while (__vm % 10 == 0) { + __vrIsTrailingZeros &= __lastRemovedDigit == 0; + __lastRemovedDigit = static_cast(__vr % 10); + __vr /= 10; + __vp /= 10; + __vm /= 10; + ++__removed; + } + } + if (__vrIsTrailingZeros && __lastRemovedDigit == 5 && __vr % 2 == 0) { + // Round even if the exact number is .....50..0. + __lastRemovedDigit = 4; + } + // We need to take __vr + 1 if __vr is outside bounds or we need to round up. + _Output = __vr + ((__vr == __vm && (!__acceptBounds || !__vmIsTrailingZeros)) || __lastRemovedDigit >= 5); + } else { + // Specialized for the common case (~96.0%). Percentages below are relative to this. + // Loop iterations below (approximately): + // 0: 13.6%, 1: 70.7%, 2: 14.1%, 3: 1.39%, 4: 0.14%, 5+: 0.01% + while (__vp / 10 > __vm / 10) { + __lastRemovedDigit = static_cast(__vr % 10); + __vr /= 10; + __vp /= 10; + __vm /= 10; + ++__removed; + } + // We need to take __vr + 1 if __vr is outside bounds or we need to round up. + _Output = __vr + (__vr == __vm || __lastRemovedDigit >= 5); + } + const int32_t __exp = __e10 + __removed; + + __floating_decimal_32 __fd; + __fd.__exponent = __exp; + __fd.__mantissa = _Output; + return __fd; +} + +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline to_chars_result _Large_integer_to_chars(char* const _First, char* const _Last, + const uint32_t _Mantissa2, const int32_t _Exponent2) { + + // Print the integer _Mantissa2 * 2^_Exponent2 exactly. + + // For nonzero integers, _Exponent2 >= -23. (The minimum value occurs when _Mantissa2 * 2^_Exponent2 is 1. + // In that case, _Mantissa2 is the implicit 1 bit followed by 23 zeros, so _Exponent2 is -23 to shift away + // the zeros.) The dense range of exactly representable integers has negative or zero exponents + // (as positive exponents make the range non-dense). For that dense range, Ryu will always be used: + // every digit is necessary to uniquely identify the value, so Ryu must print them all. + + // Positive exponents are the non-dense range of exactly representable integers. + // This contains all of the values for which Ryu can't be used (and a few Ryu-friendly values). + + // Performance note: Long division appears to be faster than losslessly widening float to double and calling + // __d2fixed_buffered_n(). If __f2fixed_buffered_n() is implemented, it might be faster than long division. + + _LIBCPP_ASSERT(_Exponent2 > 0, ""); + _LIBCPP_ASSERT(_Exponent2 <= 104, ""); // because __ieeeExponent <= 254 + + // Manually represent _Mantissa2 * 2^_Exponent2 as a large integer. _Mantissa2 is always 24 bits + // (due to the implicit bit), while _Exponent2 indicates a shift of at most 104 bits. + // 24 + 104 equals 128 equals 4 * 32, so we need exactly 4 32-bit elements. + // We use a little-endian representation, visualized like this: + + // << left shift << + // most significant + // _Data[3] _Data[2] _Data[1] _Data[0] + // least significant + // >> right shift >> + + constexpr uint32_t _Data_size = 4; + uint32_t _Data[_Data_size]{}; + + // _Maxidx is the index of the most significant nonzero element. + uint32_t _Maxidx = ((24 + static_cast(_Exponent2) + 31) / 32) - 1; + _LIBCPP_ASSERT(_Maxidx < _Data_size, ""); + + const uint32_t _Bit_shift = static_cast(_Exponent2) % 32; + if (_Bit_shift <= 8) { // _Mantissa2's 24 bits don't cross an element boundary + _Data[_Maxidx] = _Mantissa2 << _Bit_shift; + } else { // _Mantissa2's 24 bits cross an element boundary + _Data[_Maxidx - 1] = _Mantissa2 << _Bit_shift; + _Data[_Maxidx] = _Mantissa2 >> (32 - _Bit_shift); + } + + // If Ryu hasn't determined the total output length, we need to buffer the digits generated from right to left + // by long division. The largest possible float is: 340'282346638'528859811'704183484'516925440 + uint32_t _Blocks[4]; + int32_t _Filled_blocks = 0; + // From left to right, we're going to print: + // _Data[0] will be [1, 10] digits. + // Then if _Filled_blocks > 0: + // _Blocks[_Filled_blocks - 1], ..., _Blocks[0] will be 0-filled 9-digit blocks. + + if (_Maxidx != 0) { // If the integer is actually large, perform long division. + // Otherwise, skip to printing _Data[0]. + for (;;) { + // Loop invariant: _Maxidx != 0 (i.e. the integer is actually large) + + const uint32_t _Most_significant_elem = _Data[_Maxidx]; + const uint32_t _Initial_remainder = _Most_significant_elem % 1000000000; + const uint32_t _Initial_quotient = _Most_significant_elem / 1000000000; + _Data[_Maxidx] = _Initial_quotient; + uint64_t _Remainder = _Initial_remainder; + + // Process less significant elements. + uint32_t _Idx = _Maxidx; + do { + --_Idx; // Initially, _Remainder is at most 10^9 - 1. + + // Now, _Remainder is at most (10^9 - 1) * 2^32 + 2^32 - 1, simplified to 10^9 * 2^32 - 1. + _Remainder = (_Remainder << 32) | _Data[_Idx]; + + // floor((10^9 * 2^32 - 1) / 10^9) == 2^32 - 1, so uint32_t _Quotient is lossless. + const uint32_t _Quotient = static_cast(__div1e9(_Remainder)); + + // _Remainder is at most 10^9 - 1 again. + // For uint32_t truncation, see the __mod1e9() comment in d2s_intrinsics.h. + _Remainder = static_cast(_Remainder) - 1000000000u * _Quotient; + + _Data[_Idx] = _Quotient; + } while (_Idx != 0); + + // Store a 0-filled 9-digit block. + _Blocks[_Filled_blocks++] = static_cast(_Remainder); + + if (_Initial_quotient == 0) { // Is the large integer shrinking? + --_Maxidx; // log2(10^9) is 29.9, so we can't shrink by more than one element. + if (_Maxidx == 0) { + break; // We've finished long division. Now we need to print _Data[0]. + } + } + } + } + + _LIBCPP_ASSERT(_Data[0] != 0, ""); + for (uint32_t _Idx = 1; _Idx < _Data_size; ++_Idx) { + _LIBCPP_ASSERT(_Data[_Idx] == 0, ""); + } + + const uint32_t _Data_olength = _Data[0] >= 1000000000 ? 10 : __decimalLength9(_Data[0]); + const uint32_t _Total_fixed_length = _Data_olength + 9 * _Filled_blocks; + + if (_Last - _First < static_cast(_Total_fixed_length)) { + return { _Last, errc::value_too_large }; + } + + char* _Result = _First; + + // Print _Data[0]. While it's up to 10 digits, + // which is more than Ryu generates, the code below can handle this. + __append_n_digits(_Data_olength, _Data[0], _Result); + _Result += _Data_olength; + + // Print 0-filled 9-digit blocks. + for (int32_t _Idx = _Filled_blocks - 1; _Idx >= 0; --_Idx) { + __append_nine_digits(_Blocks[_Idx], _Result); + _Result += 9; + } + + return { _Result, errc{} }; +} + +[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline to_chars_result __to_chars(char* const _First, char* const _Last, const __floating_decimal_32 __v, + chars_format _Fmt, const uint32_t __ieeeMantissa, const uint32_t __ieeeExponent) { + // Step 5: Print the decimal representation. + uint32_t _Output = __v.__mantissa; + int32_t _Ryu_exponent = __v.__exponent; + const uint32_t __olength = __decimalLength9(_Output); + int32_t _Scientific_exponent = _Ryu_exponent + static_cast(__olength) - 1; + + if (_Fmt == chars_format{}) { + int32_t _Lower; + int32_t _Upper; + + if (__olength == 1) { + // Value | Fixed | Scientific + // 1e-3 | "0.001" | "1e-03" + // 1e4 | "10000" | "1e+04" + _Lower = -3; + _Upper = 4; + } else { + // Value | Fixed | Scientific + // 1234e-7 | "0.0001234" | "1.234e-04" + // 1234e5 | "123400000" | "1.234e+08" + _Lower = -static_cast(__olength + 3); + _Upper = 5; + } + + if (_Lower <= _Ryu_exponent && _Ryu_exponent <= _Upper) { + _Fmt = chars_format::fixed; + } else { + _Fmt = chars_format::scientific; + } + } else if (_Fmt == chars_format::general) { + // C11 7.21.6.1 "The fprintf function"/8: + // "Let P equal [...] 6 if the precision is omitted [...]. + // Then, if a conversion with style E would have an exponent of X: + // - if P > X >= -4, the conversion is with style f [...]. + // - otherwise, the conversion is with style e [...]." + if (-4 <= _Scientific_exponent && _Scientific_exponent < 6) { + _Fmt = chars_format::fixed; + } else { + _Fmt = chars_format::scientific; + } + } + + if (_Fmt == chars_format::fixed) { + // Example: _Output == 1729, __olength == 4 + + // _Ryu_exponent | Printed | _Whole_digits | _Total_fixed_length | Notes + // --------------|----------|---------------|----------------------|--------------------------------------- + // 2 | 172900 | 6 | _Whole_digits | Ryu can't be used for printing + // 1 | 17290 | 5 | (sometimes adjusted) | when the trimmed digits are nonzero. + // --------------|----------|---------------|----------------------|--------------------------------------- + // 0 | 1729 | 4 | _Whole_digits | Unified length cases. + // --------------|----------|---------------|----------------------|--------------------------------------- + // -1 | 172.9 | 3 | __olength + 1 | This case can't happen for + // -2 | 17.29 | 2 | | __olength == 1, but no additional + // -3 | 1.729 | 1 | | code is needed to avoid it. + // --------------|----------|---------------|----------------------|--------------------------------------- + // -4 | 0.1729 | 0 | 2 - _Ryu_exponent | C11 7.21.6.1 "The fprintf function"/8: + // -5 | 0.01729 | -1 | | "If a decimal-point character appears, + // -6 | 0.001729 | -2 | | at least one digit appears before it." + + const int32_t _Whole_digits = static_cast(__olength) + _Ryu_exponent; + + uint32_t _Total_fixed_length; + if (_Ryu_exponent >= 0) { // cases "172900" and "1729" + _Total_fixed_length = static_cast(_Whole_digits); + if (_Output == 1) { + // Rounding can affect the number of digits. + // For example, 1e11f is exactly "99999997952" which is 11 digits instead of 12. + // We can use a lookup table to detect this and adjust the total length. + static constexpr uint8_t _Adjustment[39] = { + 0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,1,1,0,1,1,1 }; + _Total_fixed_length -= _Adjustment[_Ryu_exponent]; + // _Whole_digits doesn't need to be adjusted because these cases won't refer to it later. + } + } else if (_Whole_digits > 0) { // case "17.29" + _Total_fixed_length = __olength + 1; + } else { // case "0.001729" + _Total_fixed_length = static_cast(2 - _Ryu_exponent); + } + + if (_Last - _First < static_cast(_Total_fixed_length)) { + return { _Last, errc::value_too_large }; + } + + char* _Mid; + if (_Ryu_exponent > 0) { // case "172900" + bool _Can_use_ryu; + + if (_Ryu_exponent > 10) { // 10^10 is the largest power of 10 that's exactly representable as a float. + _Can_use_ryu = false; + } else { + // Ryu generated X: __v.__mantissa * 10^_Ryu_exponent + // __v.__mantissa == 2^_Trailing_zero_bits * (__v.__mantissa >> _Trailing_zero_bits) + // 10^_Ryu_exponent == 2^_Ryu_exponent * 5^_Ryu_exponent + + // _Trailing_zero_bits is [0, 29] (aside: because 2^29 is the largest power of 2 + // with 9 decimal digits, which is float's round-trip limit.) + // _Ryu_exponent is [1, 10]. + // Normalization adds [2, 23] (aside: at least 2 because the pre-normalized mantissa is at least 5). + // This adds up to [3, 62], which is well below float's maximum binary exponent 127. + + // Therefore, we just need to consider (__v.__mantissa >> _Trailing_zero_bits) * 5^_Ryu_exponent. + + // If that product would exceed 24 bits, then X can't be exactly represented as a float. + // (That's not a problem for round-tripping, because X is close enough to the original float, + // but X isn't mathematically equal to the original float.) This requires a high-precision fallback. + + // If the product is 24 bits or smaller, then X can be exactly represented as a float (and we don't + // need to re-synthesize it; the original float must have been X, because Ryu wouldn't produce the + // same output for two different floats X and Y). This allows Ryu's output to be used (zero-filled). + + // (2^24 - 1) / 5^0 (for indexing), (2^24 - 1) / 5^1, ..., (2^24 - 1) / 5^10 + static constexpr uint32_t _Max_shifted_mantissa[11] = { + 16777215, 3355443, 671088, 134217, 26843, 5368, 1073, 214, 42, 8, 1 }; + + unsigned long _Trailing_zero_bits; + (void) _BitScanForward(&_Trailing_zero_bits, __v.__mantissa); // __v.__mantissa is guaranteed nonzero + const uint32_t _Shifted_mantissa = __v.__mantissa >> _Trailing_zero_bits; + _Can_use_ryu = _Shifted_mantissa <= _Max_shifted_mantissa[_Ryu_exponent]; + } + + if (!_Can_use_ryu) { + const uint32_t _Mantissa2 = __ieeeMantissa | (1u << __FLOAT_MANTISSA_BITS); // restore implicit bit + const int32_t _Exponent2 = static_cast(__ieeeExponent) + - __FLOAT_BIAS - __FLOAT_MANTISSA_BITS; // bias and normalization + + // Performance note: We've already called Ryu, so this will redundantly perform buffering and bounds checking. + return _Large_integer_to_chars(_First, _Last, _Mantissa2, _Exponent2); + } + + // _Can_use_ryu + // Print the decimal digits, left-aligned within [_First, _First + _Total_fixed_length). + _Mid = _First + __olength; + } else { // cases "1729", "17.29", and "0.001729" + // Print the decimal digits, right-aligned within [_First, _First + _Total_fixed_length). + _Mid = _First + _Total_fixed_length; + } + + while (_Output >= 10000) { +#ifdef __clang__ // TRANSITION, LLVM-38217 + const uint32_t __c = _Output - 10000 * (_Output / 10000); +#else + const uint32_t __c = _Output % 10000; +#endif + _Output /= 10000; + const uint32_t __c0 = (__c % 100) << 1; + const uint32_t __c1 = (__c / 100) << 1; + _VSTD::memcpy(_Mid -= 2, __DIGIT_TABLE + __c0, 2); + _VSTD::memcpy(_Mid -= 2, __DIGIT_TABLE + __c1, 2); + } + if (_Output >= 100) { + const uint32_t __c = (_Output % 100) << 1; + _Output /= 100; + _VSTD::memcpy(_Mid -= 2, __DIGIT_TABLE + __c, 2); + } + if (_Output >= 10) { + const uint32_t __c = _Output << 1; + _VSTD::memcpy(_Mid -= 2, __DIGIT_TABLE + __c, 2); + } else { + *--_Mid = static_cast('0' + _Output); + } + + if (_Ryu_exponent > 0) { // case "172900" with _Can_use_ryu + // Performance note: it might be more efficient to do this immediately after setting _Mid. + _VSTD::memset(_First + __olength, '0', static_cast(_Ryu_exponent)); + } else if (_Ryu_exponent == 0) { // case "1729" + // Done! + } else if (_Whole_digits > 0) { // case "17.29" + // Performance note: moving digits might not be optimal. + _VSTD::memmove(_First, _First + 1, static_cast(_Whole_digits)); + _First[_Whole_digits] = '.'; + } else { // case "0.001729" + // Performance note: a larger memset() followed by overwriting '.' might be more efficient. + _First[0] = '0'; + _First[1] = '.'; + _VSTD::memset(_First + 2, '0', static_cast(-_Whole_digits)); + } + + return { _First + _Total_fixed_length, errc{} }; + } + + const uint32_t _Total_scientific_length = + __olength + (__olength > 1) + 4; // digits + possible decimal point + scientific exponent + if (_Last - _First < static_cast(_Total_scientific_length)) { + return { _Last, errc::value_too_large }; + } + char* const __result = _First; + + // Print the decimal digits. + uint32_t __i = 0; + while (_Output >= 10000) { +#ifdef __clang__ // TRANSITION, LLVM-38217 + const uint32_t __c = _Output - 10000 * (_Output / 10000); +#else + const uint32_t __c = _Output % 10000; +#endif + _Output /= 10000; + const uint32_t __c0 = (__c % 100) << 1; + const uint32_t __c1 = (__c / 100) << 1; + _VSTD::memcpy(__result + __olength - __i - 1, __DIGIT_TABLE + __c0, 2); + _VSTD::memcpy(__result + __olength - __i - 3, __DIGIT_TABLE + __c1, 2); + __i += 4; + } + if (_Output >= 100) { + const uint32_t __c = (_Output % 100) << 1; + _Output /= 100; + _VSTD::memcpy(__result + __olength - __i - 1, __DIGIT_TABLE + __c, 2); + __i += 2; + } + if (_Output >= 10) { + const uint32_t __c = _Output << 1; + // We can't use memcpy here: the decimal dot goes between these two digits. + __result[2] = __DIGIT_TABLE[__c + 1]; + __result[0] = __DIGIT_TABLE[__c]; + } else { + __result[0] = static_cast('0' + _Output); + } + + // Print decimal point if needed. + uint32_t __index; + if (__olength > 1) { + __result[1] = '.'; + __index = __olength + 1; + } else { + __index = 1; + } + + // Print the exponent. + __result[__index++] = 'e'; + if (_Scientific_exponent < 0) { + __result[__index++] = '-'; + _Scientific_exponent = -_Scientific_exponent; + } else { + __result[__index++] = '+'; + } + + _VSTD::memcpy(__result + __index, __DIGIT_TABLE + 2 * _Scientific_exponent, 2); + __index += 2; + + return { _First + _Total_scientific_length, errc{} }; +} + +[[nodiscard]] _LIBCPP_FUNC_VIS to_chars_result __f2s_buffered_n(char* const _First, char* const _Last, const float __f, + const chars_format _Fmt) { + + // Step 1: Decode the floating-point number, and unify normalized and subnormal cases. + const uint32_t __bits = __float_to_bits(__f); + + // Case distinction; exit early for the easy cases. + if (__bits == 0) { + if (_Fmt == chars_format::scientific) { + if (_Last - _First < 5) { + return { _Last, errc::value_too_large }; + } + + _VSTD::memcpy(_First, "0e+00", 5); + + return { _First + 5, errc{} }; + } + + // Print "0" for chars_format::fixed, chars_format::general, and chars_format{}. + if (_First == _Last) { + return { _Last, errc::value_too_large }; + } + + *_First = '0'; + + return { _First + 1, errc{} }; + } + + // Decode __bits into mantissa and exponent. + const uint32_t __ieeeMantissa = __bits & ((1u << __FLOAT_MANTISSA_BITS) - 1); + const uint32_t __ieeeExponent = __bits >> __FLOAT_MANTISSA_BITS; + + // When _Fmt == chars_format::fixed and the floating-point number is a large integer, + // it's faster to skip Ryu and immediately print the integer exactly. + if (_Fmt == chars_format::fixed) { + const uint32_t _Mantissa2 = __ieeeMantissa | (1u << __FLOAT_MANTISSA_BITS); // restore implicit bit + const int32_t _Exponent2 = static_cast(__ieeeExponent) + - __FLOAT_BIAS - __FLOAT_MANTISSA_BITS; // bias and normalization + + // Normal values are equal to _Mantissa2 * 2^_Exponent2. + // (Subnormals are different, but they'll be rejected by the _Exponent2 test here, so they can be ignored.) + + if (_Exponent2 > 0) { + return _Large_integer_to_chars(_First, _Last, _Mantissa2, _Exponent2); + } + } + + const __floating_decimal_32 __v = __f2d(__ieeeMantissa, __ieeeExponent); + return __to_chars(_First, _Last, __v, _Fmt, __ieeeMantissa, __ieeeExponent); +} + +_LIBCPP_END_NAMESPACE_STD + +// clang-format on diff --git a/libcxx/test/libcxx/diagnostics/detail.headers/charconv/ryu.module.verify.cpp b/libcxx/test/libcxx/diagnostics/detail.headers/charconv/ryu.module.verify.cpp new file mode 100644 --- /dev/null +++ b/libcxx/test/libcxx/diagnostics/detail.headers/charconv/ryu.module.verify.cpp @@ -0,0 +1,16 @@ +// -*- C++ -*- +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +// REQUIRES: modules-build + +// WARNING: This test was generated by 'generate_private_header_tests.py' +// and should not be edited manually. + +// expected-error@*:* {{use of private header from outside its module: '__charconv/ryu.h'}} +#include <__charconv/ryu.h> diff --git a/libcxx/test/libcxx/diagnostics/detail.headers/charconv/ryu_tables.module.verify.cpp b/libcxx/test/libcxx/diagnostics/detail.headers/charconv/ryu_tables.module.verify.cpp new file mode 100644 --- /dev/null +++ b/libcxx/test/libcxx/diagnostics/detail.headers/charconv/ryu_tables.module.verify.cpp @@ -0,0 +1,16 @@ +// -*- C++ -*- +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +// REQUIRES: modules-build + +// WARNING: This test was generated by 'generate_private_header_tests.py' +// and should not be edited manually. + +// expected-error@*:* {{use of private header from outside its module: '__charconv/ryu_tables.h'}} +#include <__charconv/ryu_tables.h> diff --git a/libcxx/test/std/utilities/charconv/charconv.msvc/double_fixed_precision_to_chars_test_cases_1.hpp b/libcxx/test/std/utilities/charconv/charconv.msvc/double_fixed_precision_to_chars_test_cases_1.hpp new file mode 100644 --- /dev/null +++ b/libcxx/test/std/utilities/charconv/charconv.msvc/double_fixed_precision_to_chars_test_cases_1.hpp @@ -0,0 +1,296 @@ +// Copyright (c) Microsoft Corporation. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + + +// Copyright 2018 Ulf Adams +// Copyright (c) Microsoft Corporation. All rights reserved. + +// Boost Software License - Version 1.0 - August 17th, 2003 + +// Permission is hereby granted, free of charge, to any person or organization +// obtaining a copy of the software and accompanying documentation covered by +// this license (the "Software") to use, reproduce, display, distribute, +// execute, and transmit the Software, and to prepare derivative works of the +// Software, and to permit third-parties to whom the Software is furnished to +// do so, all subject to the following: + +// The copyright notices in the Software and this entire statement, including +// the above license grant, this restriction and the following disclaimer, +// must be included in all copies of the Software, in whole or in part, and +// all derivative works of the Software, unless such copies or derivative +// works are solely in the form of machine-executable object code generated by +// a source language processor. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +// DEALINGS IN THE SOFTWARE. + + +// This file contains test cases derived from: +// https://github.com/ulfjack/ryu +// See xcharconv_ryu.h for the exact commit. +// (Keep the cgmanifest.json commitHash in sync.) + + +#pragma once + +#include "test.hpp" +#include +using namespace std; + +inline constexpr DoublePrecisionToCharsTestCase double_fixed_precision_to_chars_test_cases_1[] = { + // Test special cases (zero, inf, nan) and an ordinary case. Also test negative signs. + {0.0, chars_format::fixed, 4, "0.0000"}, + {-0.0, chars_format::fixed, 4, "-0.0000"}, + {double_inf, chars_format::fixed, 4, "inf"}, + {-double_inf, chars_format::fixed, 4, "-inf"}, + {double_nan, chars_format::fixed, 4, "nan"}, + {-double_nan, chars_format::fixed, 4, "-nan(ind)"}, + {double_nan_payload, chars_format::fixed, 4, "nan"}, + {-double_nan_payload, chars_format::fixed, 4, "-nan"}, + {1.729, chars_format::fixed, 4, "1.7290"}, + {-1.729, chars_format::fixed, 4, "-1.7290"}, + + // Ryu Printf d2fixed_test.cc D2fixedTest Basic + {0x1.000000001869fp+211, chars_format::fixed, 0, + "3291009114715486435425664845573426149758869524108446525879746560"}, + + // Ryu Printf d2fixed_test.cc D2fixedTest Zero + {0.0, chars_format::fixed, 4, "0.0000"}, + {0.0, chars_format::fixed, 3, "0.000"}, + {0.0, chars_format::fixed, 2, "0.00"}, + {0.0, chars_format::fixed, 1, "0.0"}, + {0.0, chars_format::fixed, 0, "0"}, + + // Ryu Printf d2fixed_test.cc D2fixedTest MinMax + {0x0.0000000000001p-1022, chars_format::fixed, 1074, + "0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000049406564584124654417656879286822137" + "236505980261432476442558568250067550727020875186529983636163599237979656469544571773092665" + "671035593979639877479601078187812630071319031140452784581716784898210368871863605699873072" + "305000638740915356498438731247339727316961514003171538539807412623856559117102665855668676" + "818703956031062493194527159149245532930545654440112748012970999954193198940908041656332452" + "475714786901472678015935523861155013480352649347201937902681071074917033322268447533357208" + "324319360923828934583680601060115061698097530783422773183292479049825247307763759272478746" + "560847782037344696995336470179726777175851256605511991315048911014510378627381672509558373" + "89733598993664809941164205702637090279242767544565229087538682506419718265533447265625"}, + + {0x1.fffffffffffffp+1023, chars_format::fixed, 0, + "179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558" + "632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245" + "490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168" + "738177180919299881250404026184124858368"}, + + // Test more corner cases. + {0x0.fffffffffffffp-1022, chars_format::fixed, 1074, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022250738585" + "0720088902458687608585988765042311224095946549352480256244000922823569517877588880375915526423097809504343" + "1208587738715835729182199302029437922422355981982750124204178896957131179108226104397197960400045489739193" + "8079198936081525613113376149842043271751033627391549782731594143828136275113838604094249464942286316695429" + "1050802018159266421349966065178030950759130587198464239060686371020051087232827846788436319445158661350412" + "2347901479236958520832159762106637540161373658304419360371477835530668283453563400507407304013560296804637" + "5918583163124224521599262546494300836851861719422417646455137135420132217031370496583210154654068035397417" + "9060225895030235019375197730309457631732108525072993050897615825191597207572324554347709124613174935802817" + "34466552734375"}, // max subnormal + {0x1p-1022, chars_format::fixed, 1022, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022250738585" + "0720138309023271733240406421921598046233183055332741688720443481391819585428315901251102056406733973103581" + "1005152434161553460108856012385377718821130777993532002330479610147442583636071921565046942503734208375250" + "8066506166581589487204911799685916396485006359087701183048747997808877537499494515804516050509153998565824" + "7081864511353793580499211598108576605199243335211435239014879569960959128889160299264151106346631339366347" + "7586513029371762047325631781485664350872122828637642044846811407613911477062801689853244110024161447421618" + "5671661505401542850847167529019031613227788967297073731233340869889831750678388469260927739779728586596549" + "41091369095406136467568702398678315290680984617210924625396728515625"}, // min normal + + // Ryu Printf d2fixed_test.cc D2fixedTest RoundToEven + {0.125, chars_format::fixed, 3, "0.125"}, + {0.125, chars_format::fixed, 2, "0.12"}, + {0.375, chars_format::fixed, 3, "0.375"}, + {0.375, chars_format::fixed, 2, "0.38"}, + + // Ryu Printf d2fixed_test.cc D2fixedTest RoundToEvenInteger + {2.5, chars_format::fixed, 1, "2.5"}, + {2.5, chars_format::fixed, 0, "2"}, + {3.5, chars_format::fixed, 1, "3.5"}, + {3.5, chars_format::fixed, 0, "4"}, + + // Ryu Printf d2fixed_test.cc D2fixedTest NonRoundToEvenScenarios + {0.748046875, chars_format::fixed, 3, "0.748"}, + {0.748046875, chars_format::fixed, 2, "0.75"}, + {0.748046875, chars_format::fixed, 1, "0.7"}, // 0.75 would round to "0.8", but this is smaller + + {0.2509765625, chars_format::fixed, 3, "0.251"}, + {0.2509765625, chars_format::fixed, 2, "0.25"}, + {0.2509765625, chars_format::fixed, 1, "0.3"}, // 0.25 would round to "0.2", but this is larger + + {0x1.0000000000001p-2, chars_format::fixed, 54, "0.250000000000000055511151231257827021181583404541015625"}, + {0x1.0000000000001p-2, chars_format::fixed, 3, "0.250"}, + {0x1.0000000000001p-2, chars_format::fixed, 2, "0.25"}, + {0x1.0000000000001p-2, chars_format::fixed, 1, "0.3"}, // 0.25 would round to "0.2", but this is larger (again) + + // More rounding tests. + {9.5, chars_format::fixed, 1, "9.5"}, + {9.5, chars_format::fixed, 0, "10"}, + {10.5, chars_format::fixed, 1, "10.5"}, + {10.5, chars_format::fixed, 0, "10"}, + + {1.241, chars_format::fixed, 3, "1.241"}, + {1.241, chars_format::fixed, 1, "1.2"}, + {1.251, chars_format::fixed, 3, "1.251"}, + {1.251, chars_format::fixed, 1, "1.3"}, + {1.261, chars_format::fixed, 3, "1.261"}, + {1.261, chars_format::fixed, 1, "1.3"}, + {1.341, chars_format::fixed, 3, "1.341"}, + {1.341, chars_format::fixed, 1, "1.3"}, + {1.351, chars_format::fixed, 3, "1.351"}, + {1.351, chars_format::fixed, 1, "1.4"}, + {1.361, chars_format::fixed, 3, "1.361"}, + {1.361, chars_format::fixed, 1, "1.4"}, + + {2.41, chars_format::fixed, 2, "2.41"}, + {2.41, chars_format::fixed, 0, "2"}, + {2.51, chars_format::fixed, 2, "2.51"}, + {2.51, chars_format::fixed, 0, "3"}, + {2.61, chars_format::fixed, 2, "2.61"}, + {2.61, chars_format::fixed, 0, "3"}, + {3.41, chars_format::fixed, 2, "3.41"}, + {3.41, chars_format::fixed, 0, "3"}, + {3.51, chars_format::fixed, 2, "3.51"}, + {3.51, chars_format::fixed, 0, "4"}, + {3.61, chars_format::fixed, 2, "3.61"}, + {3.61, chars_format::fixed, 0, "4"}, + + // Ryu Printf d2fixed_test.cc D2fixedTest VaryingPrecision + {1729.142857142857, chars_format::fixed, 47, "1729.14285714285711037518922239542007446289062500000"}, + {1729.142857142857, chars_format::fixed, 46, "1729.1428571428571103751892223954200744628906250000"}, + {1729.142857142857, chars_format::fixed, 45, "1729.142857142857110375189222395420074462890625000"}, + {1729.142857142857, chars_format::fixed, 44, "1729.14285714285711037518922239542007446289062500"}, + {1729.142857142857, chars_format::fixed, 43, "1729.1428571428571103751892223954200744628906250"}, + {1729.142857142857, chars_format::fixed, 42, "1729.142857142857110375189222395420074462890625"}, + {1729.142857142857, chars_format::fixed, 41, "1729.14285714285711037518922239542007446289062"}, + {1729.142857142857, chars_format::fixed, 40, "1729.1428571428571103751892223954200744628906"}, + {1729.142857142857, chars_format::fixed, 39, "1729.142857142857110375189222395420074462891"}, + {1729.142857142857, chars_format::fixed, 38, "1729.14285714285711037518922239542007446289"}, + {1729.142857142857, chars_format::fixed, 37, "1729.1428571428571103751892223954200744629"}, + {1729.142857142857, chars_format::fixed, 36, "1729.142857142857110375189222395420074463"}, + {1729.142857142857, chars_format::fixed, 35, "1729.14285714285711037518922239542007446"}, + {1729.142857142857, chars_format::fixed, 34, "1729.1428571428571103751892223954200745"}, + {1729.142857142857, chars_format::fixed, 33, "1729.142857142857110375189222395420074"}, + {1729.142857142857, chars_format::fixed, 32, "1729.14285714285711037518922239542007"}, + {1729.142857142857, chars_format::fixed, 31, "1729.1428571428571103751892223954201"}, + {1729.142857142857, chars_format::fixed, 30, "1729.142857142857110375189222395420"}, + {1729.142857142857, chars_format::fixed, 29, "1729.14285714285711037518922239542"}, + {1729.142857142857, chars_format::fixed, 28, "1729.1428571428571103751892223954"}, + {1729.142857142857, chars_format::fixed, 27, "1729.142857142857110375189222395"}, + {1729.142857142857, chars_format::fixed, 26, "1729.14285714285711037518922240"}, + {1729.142857142857, chars_format::fixed, 25, "1729.1428571428571103751892224"}, + {1729.142857142857, chars_format::fixed, 24, "1729.142857142857110375189222"}, + {1729.142857142857, chars_format::fixed, 23, "1729.14285714285711037518922"}, + {1729.142857142857, chars_format::fixed, 22, "1729.1428571428571103751892"}, + {1729.142857142857, chars_format::fixed, 21, "1729.142857142857110375189"}, + {1729.142857142857, chars_format::fixed, 20, "1729.14285714285711037519"}, + {1729.142857142857, chars_format::fixed, 19, "1729.1428571428571103752"}, + {1729.142857142857, chars_format::fixed, 18, "1729.142857142857110375"}, + {1729.142857142857, chars_format::fixed, 17, "1729.14285714285711038"}, + {1729.142857142857, chars_format::fixed, 16, "1729.1428571428571104"}, + {1729.142857142857, chars_format::fixed, 15, "1729.142857142857110"}, + {1729.142857142857, chars_format::fixed, 14, "1729.14285714285711"}, + {1729.142857142857, chars_format::fixed, 13, "1729.1428571428571"}, + {1729.142857142857, chars_format::fixed, 12, "1729.142857142857"}, + {1729.142857142857, chars_format::fixed, 11, "1729.14285714286"}, + {1729.142857142857, chars_format::fixed, 10, "1729.1428571429"}, + {1729.142857142857, chars_format::fixed, 9, "1729.142857143"}, + {1729.142857142857, chars_format::fixed, 8, "1729.14285714"}, + {1729.142857142857, chars_format::fixed, 7, "1729.1428571"}, + {1729.142857142857, chars_format::fixed, 6, "1729.142857"}, + {1729.142857142857, chars_format::fixed, 5, "1729.14286"}, + {1729.142857142857, chars_format::fixed, 4, "1729.1429"}, + {1729.142857142857, chars_format::fixed, 3, "1729.143"}, + {1729.142857142857, chars_format::fixed, 2, "1729.14"}, + {1729.142857142857, chars_format::fixed, 1, "1729.1"}, + {1729.142857142857, chars_format::fixed, 0, "1729"}, + + // Negative precision requests 6 digits of precision. + {1729.142857142857, chars_format::fixed, -1, "1729.142857"}, + {1729.142857142857, chars_format::fixed, -2, "1729.142857"}, + {1729.142857142857, chars_format::fixed, -3, "1729.142857"}, + + // Ryu Printf d2fixed_test.cc D2fixedTest Carrying + {0.0009, chars_format::fixed, 4, "0.0009"}, + {0.0009, chars_format::fixed, 3, "0.001"}, + {0.0029, chars_format::fixed, 4, "0.0029"}, + {0.0029, chars_format::fixed, 3, "0.003"}, + {0.0099, chars_format::fixed, 4, "0.0099"}, + {0.0099, chars_format::fixed, 3, "0.010"}, + {0.0299, chars_format::fixed, 4, "0.0299"}, + {0.0299, chars_format::fixed, 3, "0.030"}, + {0.0999, chars_format::fixed, 4, "0.0999"}, + {0.0999, chars_format::fixed, 3, "0.100"}, + {0.2999, chars_format::fixed, 4, "0.2999"}, + {0.2999, chars_format::fixed, 3, "0.300"}, + {0.9999, chars_format::fixed, 4, "0.9999"}, + {0.9999, chars_format::fixed, 3, "1.000"}, + {2.9999, chars_format::fixed, 4, "2.9999"}, + {2.9999, chars_format::fixed, 3, "3.000"}, + {9.9999, chars_format::fixed, 4, "9.9999"}, + {9.9999, chars_format::fixed, 3, "10.000"}, + {29.9999, chars_format::fixed, 4, "29.9999"}, + {29.9999, chars_format::fixed, 3, "30.000"}, + {99.9999, chars_format::fixed, 4, "99.9999"}, + {99.9999, chars_format::fixed, 3, "100.000"}, + {299.9999, chars_format::fixed, 4, "299.9999"}, + {299.9999, chars_format::fixed, 3, "300.000"}, + + {0.09, chars_format::fixed, 2, "0.09"}, + {0.09, chars_format::fixed, 1, "0.1"}, + {0.29, chars_format::fixed, 2, "0.29"}, + {0.29, chars_format::fixed, 1, "0.3"}, + {0.99, chars_format::fixed, 2, "0.99"}, + {0.99, chars_format::fixed, 1, "1.0"}, + {2.99, chars_format::fixed, 2, "2.99"}, + {2.99, chars_format::fixed, 1, "3.0"}, + {9.99, chars_format::fixed, 2, "9.99"}, + {9.99, chars_format::fixed, 1, "10.0"}, + {29.99, chars_format::fixed, 2, "29.99"}, + {29.99, chars_format::fixed, 1, "30.0"}, + {99.99, chars_format::fixed, 2, "99.99"}, + {99.99, chars_format::fixed, 1, "100.0"}, + {299.99, chars_format::fixed, 2, "299.99"}, + {299.99, chars_format::fixed, 1, "300.0"}, + + {0.9, chars_format::fixed, 1, "0.9"}, + {0.9, chars_format::fixed, 0, "1"}, + {2.9, chars_format::fixed, 1, "2.9"}, + {2.9, chars_format::fixed, 0, "3"}, + {9.9, chars_format::fixed, 1, "9.9"}, + {9.9, chars_format::fixed, 0, "10"}, + {29.9, chars_format::fixed, 1, "29.9"}, + {29.9, chars_format::fixed, 0, "30"}, + {99.9, chars_format::fixed, 1, "99.9"}, + {99.9, chars_format::fixed, 0, "100"}, + {299.9, chars_format::fixed, 1, "299.9"}, + {299.9, chars_format::fixed, 0, "300"}, + + // Ryu Printf d2fixed_test.cc D2fixedTest RoundingResultZero + {0.004, chars_format::fixed, 3, "0.004"}, + {0.004, chars_format::fixed, 2, "0.00"}, + {0.4, chars_format::fixed, 1, "0.4"}, + {0.4, chars_format::fixed, 0, "0"}, + {0.5, chars_format::fixed, 1, "0.5"}, + {0.5, chars_format::fixed, 0, "0"}, + + // Ryu Printf d2fixed_test.cc D2fixedTest Regression + {7.018232e-82, chars_format::fixed, 6, "0.000000"}, +}; diff --git a/libcxx/test/std/utilities/charconv/charconv.msvc/double_fixed_precision_to_chars_test_cases_2.hpp b/libcxx/test/std/utilities/charconv/charconv.msvc/double_fixed_precision_to_chars_test_cases_2.hpp new file mode 100644 --- /dev/null +++ b/libcxx/test/std/utilities/charconv/charconv.msvc/double_fixed_precision_to_chars_test_cases_2.hpp @@ -0,0 +1,3473 @@ +// Copyright (c) Microsoft Corporation. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + + +// Copyright 2018 Ulf Adams +// Copyright (c) Microsoft Corporation. All rights reserved. + +// Boost Software License - Version 1.0 - August 17th, 2003 + +// Permission is hereby granted, free of charge, to any person or organization +// obtaining a copy of the software and accompanying documentation covered by +// this license (the "Software") to use, reproduce, display, distribute, +// execute, and transmit the Software, and to prepare derivative works of the +// Software, and to permit third-parties to whom the Software is furnished to +// do so, all subject to the following: + +// The copyright notices in the Software and this entire statement, including +// the above license grant, this restriction and the following disclaimer, +// must be included in all copies of the Software, in whole or in part, and +// all derivative works of the Software, unless such copies or derivative +// works are solely in the form of machine-executable object code generated by +// a source language processor. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +// DEALINGS IN THE SOFTWARE. + + +// This file contains test cases derived from: +// https://github.com/ulfjack/ryu +// See xcharconv_ryu.h for the exact commit. +// (Keep the cgmanifest.json commitHash in sync.) + + +#pragma once + +#include "test.hpp" +#include +using namespace std; + +inline constexpr DoublePrecisionToCharsTestCase double_fixed_precision_to_chars_test_cases_2[] = { + // Ryu Printf d2fixed_test.cc D2fixedTest AllPowersOfTen + // These values test every power of ten that's within the range of doubles. + {1e-323, chars_format::fixed, 1073, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000098813129168249308835313758573644274473011960522864952885117136500135101454041750373059967272327198475" + "9593129390891435461853313420711879592797549592021563756252601426380622809055691634335697964207377437272113" + "9974614461000127748183071299687746249467945463392302800634307707961482524771311823420533171133735363740791" + "2062124986389054318298491065861091308880225496025941999908386397881816083312664904951429573802945356031871" + "0477223100269607052986944038758053621421498340666445368950667144166486387218476578691673612021202301233961" + "9506156684554636658495809965049461552751854495749312169556407468939399067294035945355435170251321102398263" + "0097822029020757254763345019116747794671979873296198823284114052741805584855350891304581750773650128394365" + "3106689453125"}, + {1e-322, chars_format::fixed, 1072, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000988131291682493088353137585736442744730119605228649528851171365001351014540417503730599672723271984759" + "5931293908914354618533134207118795927975495920215637562526014263806228090556916343356979642073774372721139" + "9746144610001277481830712996877462494679454633923028006343077079614825247713118234205331711337353637407912" + "0621249863890543182984910658610913088802254960259419999083863978818160833126649049514295738029453560318710" + "4772231002696070529869440387580536214214983406664453689506671441664863872184765786916736120212023012339619" + "5061566845546366584958099650494615527518544957493121695564074689393990672940359453554351702513211023982630" + "0978220290207572547633450191167477946719798732961988232841140527418055848553508913045817507736501283943653" + "106689453125"}, + {1e-321, chars_format::fixed, 1073, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0009980126045993180192366689615938071721774208012809360241396830786513645246858216787679056694505047046071" + "8906068480034981647184655491899838872552508794177939381512744064442903714624855067905494384945121164483513" + "7436060561012902566490201268462371196262491802622582864065078504109735001902494165473850284507271737819911" + "8274623625294486148147597651970222196902775098620141990747026186063424414579155400094386954097480959218975" + "8199533127230312351681347914563415763571332407310982264017381560815125109066134447859034814141432424630157" + "0121825140018302508076806469995616827937304070680529125197154362879305796697630480898952195383431342224563" + "9880024931096482731097846930791527261869967202916081151695519326922364070390440021762756828138662967830896" + "3775634765625"}, + {1e-320, chars_format::fixed, 1071, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0099998886718268300541337523676528005766688104049139332319738542138136722671490251377536686879595124857670" + "8246943582132687395553181760422147911120187125822521327632643497190282764359933947726339777865966519379365" + "4309834532129281161268155283999204461560808953010434241919400457020315068567565301579569187340188105680700" + "6870486225722970118072958651424404586788201978253303907287034656397876312416883810846728688580700304253500" + "2949777472842337622787367223150264878556320754442713378075149896484223865098297635973695365456728848769494" + "0230564769292298397759684630055091384876749698303915591084358566671856101564376699700392294336955627042165" + "8995893369006341820505159346148768208043631775753209163523421374707251873615102000236731782933929935097694" + "39697265625"}, + {1e-319, chars_format::fixed, 1070, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0999988867182683005413375236765280057666881040491393323197385421381367226714902513775366868795951248576708" + "2469435821326873955531817604221479111201871258225213276326434971902827643599339477263397778659665193793654" + "3098345321292811612681552839992044615608089530104342419194004570203150685675653015795691873401881056807006" + "8704862257229701180729586514244045867882019782533039072870346563978763124168838108467286885807003042535002" + "9497774728423376227873672231502648785563207544427133780751498964842238650982976359736953654567288487694940" + "2305647692922983977596846300550913848767496983039155910843585666718561015643766997003922943369556270421658" + "9958933690063418205051593461487682080436317757532091635234213747072518736151020002367317829339299350976943" + "9697265625"}, + {1e-318, chars_format::fixed, 1073, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "9999987484955998303442587681411374220943283416874456096926739330950172402250479179504041747926784812965558" + "4287487604160175017171489462926670704816262174273696519516951145408899245049086406969675750804029375208657" + "0958067673928243874998599699608192405548840764435726992574353409992989381527841981377451905152545931810859" + "9110747558686066125594356208301549987700423321356332728611852037669447325001045989624298431872975781381900" + "5454970384503369331723666353784541477053573784937783176465656792588872897048240176061210157694087178183364" + "2562633613784476434464272970558600040426824326140871277992264136125009223731705915394664603946883806614852" + "9687158929654939305279279633993568599035157448617115175626251523466992946365550914977760044166643638163805" + "0079345703125"}, + {1e-317, chars_format::fixed, 1074, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010" + "0000023069253735408389129784751602675844543686685345266696720985206474225156972857665977069218756620453298" + "2264570127938903364494864760334526437358946130769310829548413593659926664074401521200304454351359907994741" + "9542598430782630372260603945613543429690325839445724126694995661872117602435387548905318808226062363719785" + "9200663066444242733391298681807136840324571457602240285981099973517197374979457253670128679434175847866812" + "0265538495438103896717079595982495202667985360377499818082568642138458551310116628649611994972675233684585" + "4885571164676719332386444653160192733396025005032681034257252564659190838258113071979798794845819719745924" + "2018322340080528934937813868610807682359544296115449991188686313782637840938535486734473067826911574229598" + "04534912109375"}, + {1e-316, chars_format::fixed, 1074, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099" + "9999983659714433460619209563119592647759254336952145504584997059223491913816093472283838042269385386536792" + "3662877802160444990315364051565565391595587327639198904852632370647709618104786126163799632995155486767134" + "5489448155325984352148361206916068673233394735976484265364187348817469712425595930501855154426285227845881" + "1851318198469791538166759153418640131045150835957547860040033740467433541512910274322712859834395088588442" + "6462327203707021334703435862929817973126107752108884758449018560968369545054974839766935919673746583760950" + "0090319935380601677624921618978273452080613810953529918681506974243410714346040856409400022829894441463584" + "4938668328253396212469776138316207336915493277914002853676578005971864447246977639083276301334990421310067" + "17681884765625"}, + {1e-315, chars_format::fixed, 1074, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000999" + "9999984816838086980155348601833786944004252887462239343279298267939669340813115785463940012644762356165637" + "6018472107941603095933610646723473305152197664424334682905225846048030394631398713141543276262621023579516" + "4856403244760035143758219018692306106535865554853296854593335050116920911412927040149351300963455324069998" + "6606369464281496859115328132978038273771846603614391600262917001497059540098100100654272959048368919932233" + "0339106687474623926514774687435260163393325032088515637916186325933425031377463265706869614769269289460443" + "0162434380637971763992931137356926849933919853159267441149680945843205744401462482127152983675926068233239" + "4533416326065098006842778911837195061162902589084326771691951138831352849752802727789635639510379405692219" + "73419189453125"}, + {1e-314, chars_format::fixed, 1074, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009999" + "9999996388074622175516738988975729906454238392563177730222310355101443610783338917264959716398532052454089" + "9574415165753184152116076598302552440718301032275692463431160600051238159897524582918979708937276391703335" + "8525954139100543059856797136454680439560573743621422746884812063111432901286238136624312766335156286311173" + "4156882122398550068601017928572019701038804280182829002491749611793319525949998363969873951188107233370136" + "9106901525150649844628162932489682066065497831884824432587863975583979894602347525106206565724496346455373" + "0883578833211672627673026321143460828466980275216642665831420661841156044955678739304682592136242335929789" + "0480896304182115950572806647047072303636995700787565951845682467426236874811053614853229021264269249513745" + "30792236328125"}, + {1e-313, chars_format::fixed, 1074, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000" + "0000013287310805879821807546636585886679620431612038734699546109582686175384116193524783693968956688140137" + "5540716352977559252087422693381464203581785118767706512437906713702693003503091646357646071476452635669415" + "5246848621505494472659507014390677520339710167910378869165274485095070275248037277953394248918430544982129" + "7599883717180027845159424818650742664828155549841261024871689316874103301156316092174454298782545011717304" + "6307626801641301972775101344275847471365727489181467010353973327923042139632713540407902463255564615170711" + "8588866674394044605978168193959339061045730000041082743092410352881259983203805365724543506488083910497021" + "9857874056331538133109738980029096933705946944523758930098881700633271540538211594184581088029517559334635" + "73455810546875"}, + {1e-312, chars_format::fixed, 1074, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000999999" + "9999984653414306424254822495727998400384494798179603049566133420122111551188980872622277349738658390603661" + "6017469443438439328094256802746822646621526799644719490000164997455995821447379012072913768453460200785984" + "2506564523554753104320463194375155829195183484015334490701283289008478965323405044403142732483702404210110" + "7905649692216696974146511587715789684961217254373697248854313571918308886594163564317398627121032083125239" + "7360433366008609148270597384621394281525027380815002050113732562980691815499420536041514214523842699856175" + "6629431717108491072037966992019198281329518256786859176589492325403501231096999739212282309503857451372825" + "3432007519784245448952372271615847645051499635293291066062645927220007028099089604888938254134700400754809" + "37957763671875"}, + {1e-311, chars_format::fixed, 1074, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009999999" + "9999994753836816616511477927917844470256657499736814793090661876925865714541989788848333087337492396834329" + "9564388520721546473722538158536045855411592384479540534380552114130892428057327572232684630845668163768013" + "5027566927047722665479238893283177666153753035241799107964294452027013440391018179162227081537627087712294" + "7149684401750551218912852475949533812932510787775885488405715316005812990910633000601130631914738865300203" + "9320168310490502062186389904351023247382521319149688554563326346056647735821920228452652563270230450412699" + "5553552197916865708123384867766175142422964311492560020229534457444110911911051310155975850415556167325647" + "9466808241373590371668740244833598142522966162877208895552630351312778658273922385846255167507479200139641" + "76177978515625"}, + {1e-310, chars_format::fixed, 1074, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099999999" + "9999996944932750289769196936057731524703811503348409363383061327826907212970624909358517403358560131942537" + "5440449902661182468152038295716398350514698640806187221931821854499235685101121539494695290560370356316192" + "0262976500977290528883924582675649786271503084114142479960098374250875666295837703332537400943138558993342" + "7527906510700039348277770292425883783765220625771825884011346358999037950762662458487021106048861331017974" + "8440294655039824148357371062889259284535962361830108230108597032649720551828440573872362438712905654743976" + "5288600321445975410481753660186482200605570362800256287073548308910808652757531074237476089281222224455610" + "9716993428246282344069074957894355322565651565420188367168360539498689375166899304114842550461617065593600" + "27313232421875"}, + {1e-309, chars_format::fixed, 1074, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000" + "0000018855892087022346387017456602069175351539464355066307055836837322197256976114460360563569237483024613" + "4201063722057542412447039667519923301545761204072654097444519258182668255539061212114801887707392281797977" + "2617072240272969162930781476600370987449003572837576199918137596489497925344032945035640594998253271803823" + "1310127600194920641926948457189383492092319005731229840067656788931287549282957037345925847390085988195683" + "9641558100533045010067182648271619656070372788634304985561303898580448711893644028069461193139657698056746" + "2639081556737072434065441584389552782431630875877218955513686823577786061222328715052478477937882795755241" + "2218845296973202068072422088501927122992505590849983083325662421357796544096668486800716380002995720133185" + "38665771484375"}, + {1e-308, chars_format::fixed, 1073, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009999999999" + "9999990932662533724846199547048873403204569370722504933164788134100221702366853061102859515757830175849182" + "2824378438792553200763769833775473829862512856683413461939989729065436937279228852476622948659167943435544" + "6221493480729436132941672166628217375554144801591156397912760548972014203897705803515339607715061990556648" + "8977026029171097782672502440171652303162739065260414400859795093549243326204240563556399326294969169893097" + "5461134804791235994697938405200089317860731205010159117711704697471514344499487123311264707354172378099538" + "7378502198261451023662795913796604718812599767273565216024053297899062477635215259813914438876185752755886" + "1992808911690506171197530846785775640581096161907433186688396108094354271255983085398000298482656944543123" + "2452392578125"}, + {1e-307, chars_format::fixed, 1072, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099999999999" + "9999909326625337248461995470488734032045693707225049331647881341002217023668530611028595157578301758491822" + "8243784387925532007637698337754738298625128566834134619399897290654369372792288524766229486591679434355446" + "2214934807294361329416721666282173755541448015911563979127605489720142038977058035153396077150619905566488" + "9770260291710977826725024401716523031627390652604144008597950935492433262042405635563993262949691698930975" + "4611348047912359946979384052000893178607312050101591177117046974715143444994871233112647073541723780995387" + "3785021982614510236627959137966047188125997672735652160240532978990624776352152598139144388761857527558861" + "9928089116905061711975308467857756405810961619074331866883961080943542712559830853980002984826569445431232" + "452392578125"}, + {1e-306, chars_format::fixed, 1069, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000" + "0000279023803391476325978469990224051750613215776767695913434815660171857902754611290428295390285511299939" + "7555396569952545618616744426089938099821880772600111269030190023111167436591184859690670436405323590819830" + "1844721604945146272364072259074692549029825719823273398887747392739210687026322232580358825111023420554384" + "2448102753778430086832136807498326022836612478352744084880146129506125620176035215057087515132261261692207" + "1840157682358884105637168985105575243131100589013256198578475477149271096570431275426554079671665424761417" + "1924100040800742268229310960254010514282230676348267637082219417179036571049957325656665930634428504367776" + "0454755517299704176913224907978537594173374670297704548248979442337094143862519235455010857549495995044708" + "251953125"}, + {1e-305, chars_format::fixed, 1066, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009999999999999" + "9999628217900530785377054659627883900722995775030945280642024408233714255781016776892345034950140642648166" + "8573825190999521406861414798119234028697220781311072490218654586931744476129716298164369509417157915490653" + "9259553297447374781782441000739045507324002369679044368579627272624666077581243976346526774830702565838523" + "8493027973334562682769653967428338344198908910697296851733096562843141535755075192125128789628361223902198" + "3130437614961415360789480610798036545823058988806310179363406158165146574713062236131985212038180608127389" + "5043986502259049610427190720957335454762962899504686945017155165729595557090423005192733858302009766933344" + "1417250244332809616705208468049446512230390757498683137398144735633162723253963832803492550738155841827392" + "578125"}, + {1e-304, chars_format::fixed, 1062, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099999999999999" + "9970986017938236030708706274083986072964866688415599378481654095393107971837933080827946997879690663671822" + "9897127841787735834165912278951164530799512255590403301520580715878005643040104591705016257082955213245355" + "9094230958441044282958157287327415209445985068360926723413499488107134434356612967808775938070772540742689" + "7026283217747721343282826813844008368651362124331816540784047770686498029508536253685317002729601094862994" + "9135262480594748043237132185918638374327014677453087342263272675030950619200618216251407442954016965379635" + "6863753776603511529344556156911197043154878083222954043731239608809794343631028040935934998681895455378110" + "9130063014014238947635759786607029686277060011159932613248249854429397509569810154061997309327125549316406" + "25"}, + {1e-303, chars_format::fixed, 1059, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000999999999999999" + "9305121602309211138097617585722213781407209893854338937799101162826526342823575798751416352849454431760700" + "5513293326557706590487351553652833209231993635578887404550364703749030538288111678031301177411569065874625" + "4921477327887186271721529352265514273755232628736995836010623070838922880272900947583890416927675525146116" + "3798887927910725682208862371410082513109989521059733783089791982946303046409911855797635730431832642086137" + "6646806101636991397848539106198750400812943404770642200700104244381264145126115841418959590695543799488207" + "1419757830243362094607944726517450359952766243046893934267403312319363799939048233496892637407719130495821" + "06215992711206739656963995638713298863410390903689459607513385138582995281808507570531219244003295898437" + "5"}, + {1e-302, chars_format::fixed, 1054, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009999999999999999" + "6289124639677304732891737098163313400003754860956628154130529957101690432681798063738592536074161957267240" + "2796813996134279914247685423398828882424967718390038930747186677738512519784590692463902921459555191377723" + "7381431331057915180095641690724245303189270726348129545101205190248600509074839319869855879517154309707408" + "9700433275639158827043869850340834518328948988664790828903405620812448453502724006420631679231752873211868" + "4114610650853826254667653085888570747787061005788271782462022491238577826301688982950514617712444829347269" + "1939817788767646536780382005930664172295779143930111367033975329422275090360339741868585169367074691240515" + "1648239663380463742253582056305034674846879073532500981362665382068399821946513839066028594970703125"}, + {1e-301, chars_format::fixed, 1052, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000006" + "6504322127499234590215330691750752749850538126789922377769886093782568469091263076567653603289384041799915" + "3212323339173647442450290613844186107610680787137665635265135265327753578757072113467545929599216957984239" + "5147370980532830613127558285453735132274929310782773370851235321985899693814948207689013522864312960953935" + "1774060645412452429006574863088645574619210784806404225209601531305860195942614414423096789547175207334420" + "5835694812023455384508915623719843146914672716501910639371586430015742264313868029854544921348666996359020" + "7149841450365284270233731763503780051537526270058618449857903893539137814638834439474933142947015273438897" + "03142991033638081518025859259858927144364121703023337768036216122169435038813389837741851806640625"}, + {1e-300, chars_format::fixed, 1049, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000025" + "0590918352087596856961468077037052499253423199004660431840514846763028121819501008949623062702782541489103" + "1146499880413081224609160619018271942662793458427551041478278701507022263926060379361392435977509403014386" + "6141479125513590882591017341692222921220404918621822029155619541859418525883262040928316317872050154019969" + "8661694898041067655794243192165254180873224255430058507393834020333099315764646743363847906553166172481259" + "9598594906293782493759617177861888792970476530542335134710418229637566637950767497147854236589795152044892" + "0491760252897567092617670818249247201056323377556165380506436538125830502246596311593005632365079290253988" + "78153811554013986009587978081167432804936359631140419153283449560376539011485874652862548828125"}, + {1e-299, chars_format::fixed, 1046, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000009999999999999999919" + "0290760137637976208079970046606724998518567438890097551538379739129028665449972035680926865499362402810630" + "3651130713543666646941642034794006359075819280682667925398195400906114450103317751101389479657812615519797" + "8756945816618186836433649314161201999972943672570926856702325994597557960702860121588611892551865896044643" + "3985656531743023483770388411882929286181173813228715116320889861526972008354488226701519154182974517909032" + "5919123351411654126959859303926546520294760229609181275060613732216818338004372560297782550722953028086399" + "6864368522933466048419533648184045496011719191321500860483546203133923869331978450679449946810205349460035" + "55329325281205226730514864672299618939724737118660523316204802313222899101674556732177734375"}, + {1e-298, chars_format::fixed, 1042, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000099999999999999991232" + "8065440178667945403966643095736050128809725161144813110581347907260225388618807065241978378310511738176684" + "8978472961345172089817280618610949969507425520598459508751755269122547961258312490713057673763372204220340" + "3781167641756540616899914675347366906182904398174226130530393770056524451914354311216888057471403500725107" + "6705546549406561057574839884358592320586088346562272180390090411973212500537381300528153669461252213404717" + "7587416437488441814327093646649271377107480476551731021560491782355830383964467734639589943029566464163497" + "5366069084321743418023147658438218610880841891451337934895801756354091018104152540779946423927952220683901" + "2428228659762106653639065937800317076591475056075719596293538415920920670032501220703125"}, + {1e-297, chars_format::fixed, 1039, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000039647" + "8128980950068520868995348882659698990112439255546729582652670817083234140282683317496428210034914020640749" + "0310076398915630971759041855375317635086531785636111011200732530243024248980965231943970702669785257845617" + "8424324808370650127984402213708118558573561222302940289189796515270127000971493586876574463470122362792297" + "7471765782444391057813106595117131865471280037220785529001835372476246333493828469074142652508409585016908" + "1535237600934009427614926748351814984516753878158617880335246460555951776912803239807668457495085708842964" + "6102549163424107238986497758817967696590019262732110067992581963303272984491636864032312946065142589502281" + "0699832540710987766403439129992000576046943562114055481515606516040861606597900390625"}, + {1e-296, chars_format::fixed, 1035, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000056958" + "8024265064981030478409707692465796029083892171204366554955530185549727391907866068093230295203015836077090" + "1699839227919216188027123435710995177499246977290400982185512398383456792748744786603989786601684003410274" + "2609519041559184055883340909789320261083566248200925601535674980154916724840401269545227598018324013146388" + "0274190388767162625958511947088095562418409514613018689749203717444806459951576787294477304028395980916466" + "6922847406541184184565293398560546609322341147876025030738254906899123269746363348978633835752400909208341" + "4513869447023277566518254456350926065149258365404485429166981233666429035716071423702199575889771541254094" + "321820289220342105066697862794979293345025428418892943227547220885753631591796875"}, + {1e-295, chars_format::fixed, 1032, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000006001897" + "2491361621077156168797575070757062243486927860250533894694149620019098093782134390869131834368148286057303" + "9413188458985658353283956245784850548849603838035355899004130448583139080461968391411373707555537234837209" + "2234855089948916142204308734563047805268398079264892661153392562290819806396566282980548567109633967889311" + "3837382858499593494345983536212525100894348867647572501798437291530574599303094328095960577175157717206504" + "4100931710194403310996519344927117866746573618122710669209904247557544687570338275355150184699307959624288" + "9324649465717492838730114672769275063507531844710698303811226726525103304365469702956873915084185072840405" + "266398916053751632054838903102133456680944423311530044884420931339263916015625"}, + {1e-294, chars_format::fixed, 1029, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000016560498" + "6923928440636750610371765538777806813685229416850392185830714084016387540193554229196687284977563458281821" + "4813515151508611748737787348449315297638965859302790372849252767842821580823519711141930343245794742496359" + "3231233504632556755075890252271716497222096014603833445160783536974977600025234129579304975685188987489664" + "9609996818372197065372922839472695195261458904336640183533171978645665994732331639750105476621993907730344" + "2029655943683541387216510574697964479280439066327423797480201047044950954849744469001007229590688655915893" + "9758854693297190998920585853612635338955732921780230940980952146364529466016653302089713901350093446008356" + "278420969734871669445506829802610380963923120134495547972619533538818359375"}, + {1e-293, chars_format::fixed, 1022, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000513272777" + "3156786567445994724549536738120593106324687653743495947193397769560622582957859727923921319406989801147958" + "2682107021869891760192074359686674503246238761434052666028941422336769598604510735193757290934568271969456" + "5250874205178404886496479269587257415916038370399079782592972057215539711775770897602495320141095406124240" + "6210622316711873678424528575947398462070827220479080510941327279737299933712209527177057127256605191981041" + "2133848702919347654154568743565358298286767582471701131752741898693476915326550966414029235126014081774902" + "5489666643993809096250345528767275758514013420416326186860042414737323281270882840729341009434992719249133" + "86875522376987390327812590777589729640340010519139468669891357421875"}, + {1e-292, chars_format::fixed, 1021, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000005132727773" + "1567865674459947245495367381205931063246876537434959471933977695606225829578597279239213194069898011479582" + "6821070218698917601920743596866745032462387614340526660289414223367695986045107351937572909345682719694565" + "2508742051784048864964792695872574159160383703990797825929720572155397117757708976024953201410954061242406" + "2106223167118736784245285759473984620708272204790805109413272797372999337122095271770571272566051919810412" + "1338487029193476541545687435653582982867675824717011317527418986934769153265509664140292351260140817749025" + "4896666439938090962503455287672757585140134204163261868600424147373232812708828407293410094349927192491338" + "6875522376987390327812590777589729640340010519139468669891357421875"}, + {1e-291, chars_format::fixed, 1019, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000999999999999999962324323391" + "2798103508506385521992048124372918447536033153018627964458003030494979954072709187387723715072044222381502" + "4190092450342962178772011919125939449339353031431138593572223793087189525906785833115541323441890363444649" + "2821395851514130700828279759982076005663811603557173527102213730318461027579111697031467812072924618160763" + "2734773625772193520456011202305539786285748707062310138073209693886156855664311520649108300273993840638730" + "3038818174447717226154347230593172425188266932619544995886944238892045624403889881989947072504762387803780" + "6280018377774738221645882760651449398490186172444323761070877994173001124374730195890389984380357578527189" + "23186761317114486910984268164259702871277113445103168487548828125"}, + {1e-290, chars_format::fixed, 1015, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000691278685996" + "2547673918180898415459989495965890694553118186157880703161317411757139641286255133930135858243672932786917" + "0148241343184187872945207785757524996807807658000922047585259217949139273599310566277666474598145636458531" + "5406254511057602394118563984744747087918421271781392057362041198010732075766853728931448545168638112767218" + "7277232802704027068522268732267074912421167160771992853446316296987606743322809571170336107378242695971995" + "4540807154321750533173797817243613093744565100802268111516389954388207143053379932855188006207373354275497" + "5039936037021439057122868999428011419835732154702776709909141696441935276309948483428431353230547941906264" + "0425332975063941955314039677915616266545839607715606689453125"}, + {1e-289, chars_format::fixed, 1012, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000001216597782184" + "1121332071851420445055850947729807109836319696396934719179642881265582543213680619019232142312832213352408" + "4163390286484192941584938686918553949868597413665027879249811981746091325158693742124647465025499020521108" + "9036966465689115216728219127852873379022584791362417713140924541034671157797941243358376521342957494821061" + "9815013120469114077424518206875138193205377793592507346653993059870530437603059100080677849044804081934928" + "3260736024046421216376242112106057114182206876786317634380179194720733302456566726121387895888403002820621" + "8454014987419420754353802565408021212043345918976891903356154272622424589432036703486812148694961250345991" + "2314280908242325983381615372991291224025189876556396484375"}, + {1e-288, chars_format::fixed, 1009, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000057735490444068" + "6056577598174714126910861572730869783922094285424325691264678703102336389327771952449332944119499049658178" + "0186088027703415718786500234439107644361807467403819565320361399423324538262232786462612897902648957724741" + "0574293815986421962941557035285513791518871325236200015245144922927908376944180801232636656176964011019622" + "1808650457260393636630534995116269380104128448944442969013289878749600341030883893788244288349023841629492" + "9786044393832885086656309603701161727929621817754084190071554740498038049183528080657816288366674347681044" + "0102912936553966078537125085056956010945264214175920599443644260599671283659952081248132555833757853193105" + "8655199821600008391886404979231883771717548370361328125"}, + {1e-287, chars_format::fixed, 1006, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000212798803462866" + "1819720944463063858289798963846308354749764282603428916900787907451276235749993426437237273265575167509029" + "3443398974142266764368095422362531278211408028009869470625681338533955089219964942897022997845219557138194" + "4105904887102061264140644298800897904844525959465817081764253128629509377723661071135395019790527607724202" + "8818350552049913467222526540243594216638480385289473670346024547141635690306495794030716500282374238053252" + "0430970711379467483411988175886892590435793778413579130557445058654740294892394251026664247805588921011835" + "6527024866661592505378455402755608985358201946503193467379630330993309721882840441441237007264415734065510" + "2452872302586095454302039797767065465450286865234375"}, + {1e-286, chars_format::fixed, 1003, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000100000000000000005044436842451220" + "8165649742903257869448523746162199423267071399152913134975872063089463617721743048821110076091074307672300" + "1773840164557791031656209599853674105367413448325304166880274630933873239418552802803077827902355732255673" + "4155315053117879563605851420442899131198757937827635383140100091491688910981786240881722533738176097018180" + "2328737684931317864887852689788738841607236686134384861755239394251298663083703091120976068486655806465942" + "3745492929389741899328744647866723415241332977153893466839269357152524524467034954678631564945125656507192" + "1287084657640471293726917610067698846337541027080034890250801509960322136561847382733078481229459723579489" + "7321730333172862259516477934084832668304443359375"}, + {1e-285, chars_format::fixed, 999, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000001000000000000000073775958887092680" + "1404019815213532986889510323214921238826142576478123077502664539508246258991900763800999508393324137379055" + "6457205030658897420364139008363631639700799829065917353790436274093311171936755018693561074624838609546568" + "6323279987956931013653781663900351974015566123632070355381551356489650179779266645039404024044961128391013" + "6449234164770644190179225196709761817851829527261033883912345325192520710986992117720249210169865472126799" + "2941215818657955514958349590649614239480491315683751958511243736366217849015089102082228344565148136182606" + "1005534504601082856808084760769860405419582767185150634144000699821020707486017573896452080977016299189995" + "556136179022388432713341899216175079345703125"}, + {1e-284, chars_format::fixed, 996, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000010000000000000000364454141469639249" + "8079839973240061190426737446662380289774568405597363131123542857264701281527483228571615124211944403293694" + "5071196145293180542808701926406067020581352757653162578101323304859851275347918336331086016627885503628334" + "6910728571119144095013537287461749147707873310629239170126706499732324678410198670839181253838408752562755" + "3902624600386993240981079185939643750046892617935374577364231129052661827470541873034675696845736201789984" + "1631573790410970802849046114778061001730328450520442943215634726206616820635058136087680323829216224055103" + "9900338194868909855458309046212652981489067729694678635264237394725417604979475793913844510851457977578383" + "810868256631465555983595550060272216796875"}, + {1e-283, chars_format::fixed, 993, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000099999999999999994685210677065491259" + "7749803438914163621026595614939832534061107435560807857560967665020741413878246459195032208808316741012258" + "2691461581832757568102503490534685171574034784387362745740286582840262097008018948802266655386840832186907" + "7377574308387455953552668437614997258331822889697246492735695433382995918922759999075196859715226773290408" + "4873036868203164550342645111605051217155262467154603491420980341585531497120315430319163251987317550427630" + "9581712396063683706863666146546656583513251553594590026633083963132688137970592127246328314557798934048071" + "5283217521283049451642164986463704069928438685182921404423903463619228772657959257922213934465659432066116" + "096837760096605052240192890167236328125"}, + {1e-282, chars_format::fixed, 986, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000001000000000000000018526752671702122504" + "1886804737033222476192186962870088250087687318910666205005363911217585349955151204119274354572185745520077" + "1078614787119958560901161093554731989656290181027731739586437554468626221849504804091414641004521954640590" + "7613434306306439508188319872169926333293510629733626595607910845351966110661413665284894026503153751601248" + "1956041767365788379171625098381602438061934369139173171980451007384009191883980703412382251633531244053994" + "9689328025005031641651021475338193305452779148824615510516946022794721926745835141507082535452895792504462" + "2593490632078887339949053669939646658982295745940133629986798505271865943673982028951988737047957070402937" + "06313605071045458316802978515625"}, + {1e-281, chars_format::fixed, 985, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000010000000000000000185267526717021225041" + "8868047370332224761921869628700882500876873189106662050053639112175853499551512041192743545721857455200771" + "0786147871199585609011610935547319896562901810277317395864375544686262218495048040914146410045219546405907" + "6134343063064395081883198721699263332935106297336265956079108453519661106614136652848940265031537516012481" + "9560417673657883791716250983816024380619343691391731719804510073840091918839807034123822516335312440539949" + "6893280250050316416510214753381933054527791488246155105169460227947219267458351415070825354528957925044622" + "5934906320788873399490536699396466589822957459401336299867985052718659436739820289519887370479570704029370" + "6313605071045458316802978515625"}, + {1e-280, chars_format::fixed, 981, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000099999999999999995736438816947517005069" + "4172070683240219593513666870751723400097759022579142792104411515557258308779196173510175383489009931421520" + "5866900041712517007353341295067415591468605332289608545645634822563507367302240104608293998170498800889934" + "0527112983123526485039091556623246664793688444410197203376128885318687103789266301679766012373101564633549" + "3680073454731979186907663345907207730732342719302852534949839594619012356967550855734248053136101277703677" + "1838055674417227267876760024773786411282086583477850214480190207549799327177530658970705609297562011086483" + "9716814098692546387233575608142290670674682296548225014870667032395919842010303184918392220732752395662146" + "227550692856311798095703125"}, + {1e-279, chars_format::fixed, 979, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000001000000000000000055224171373038293976285" + "3855155153714644346417139367630859739713156121591071255955788854793010075566749549777915014563133243594249" + "0582259141658595397737701917166689901252657650633132064426278214420910755394245918613661618212134619605613" + "8332212191562054191077246132142653280854876907341369752400579251233654435526266645751846330807393174195816" + "7586387056869531553154177335120654514700934306859959959022574246700632872563820325406114294833382820169887" + "1896505961547263034373800392466570256754118618517715540232495226256286830271042457507823068847895940620711" + "1284126734064465595084418254580910347625099724924457889653606240609990826309427213671625952334798270726423" + "6523769795894622802734375"}, + {1e-278, chars_format::fixed, 976, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000009999999999999999377924315287625452655759" + "2938171681397062528805745754945088532304770466314992540617804157284976902370041721665215989554925283393972" + "2863486722184850086925551573756491173727324573486761348623622278779062565480320715767956544035586867580858" + "6589133591699069822536494530504293213532859514540924900334307735775143583659422910068228823157401407634290" + "6436040454098439322611246838623618658479257702622384275935602860880217090978462037297537786665387684101487" + "6773669006972746076463602187921228840342152780306594657157834453463345600761594161469026978011649449136654" + "3449438374976635277860236467913059785711676135938086005172831406290399388617527762863814583260690938004700" + "0013291835784912109375"}, + {1e-277, chars_format::fixed, 973, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000099999999999999996910756215390274492176511" + "7684063095968974449032518673086908962585813328738512123351599947903432632493627286289317645086338574069104" + "9859146406918111243792762665325999307404584222453104941273982428937412290702243078662657808584560218409332" + "3845971447447957127327523414168904388704353969069975999800370095248504560869545227216246858018094967873244" + "9501284846576063116593872419790657220872804668829750264129734225138468602210596951011658297769718221274568" + "0247065025727152144034426510530885009285616882720775225357325358898849879479489384314813008029321043554428" + "6205927658214407906559554220186714365221617661531507762030263395729350884779929292244665672839687431405764" + "0731334686279296875"}, + {1e-276, chars_format::fixed, 957, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000001000000000000000094368084654463543546521870" + "8934482239623710929327631676310035207382479910928589920458334481180870676664675648379486432346815345866334" + "7562631471965527419417503763703495879299381727950707614250209935245588342983867625950272814993263888123155" + "6645135692769927351778358506727934022073892637128839856295410452367794579708097333520813637944185339945990" + "0648060689427426785194885540085397651937152392533802832245566904836593719145032631567800222330837423133330" + "2885648497259176616280450358052714327419732013400898404732486559604253669336804628129859196806272523059693" + "0521032920066284183883123844111803976410428701340986032380607270307788791985359466707450337707996368408203" + "125"}, + {1e-275, chars_format::fixed, 966, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000009999999999999999340346158537457213068332267" + "8543526013082338874045021461456248630313162327929500011721456784332939064523200829570096560480254512419700" + "8795371964014762431104610623358122885748511635735451163169163085301125849532284716159435616842569069649709" + "3677965333582715712943593194781546492350408656996176376820222925178758968119116549821319640072436935926581" + "4349890431339283925469990220965010846294970911113385878318393484181518669350318361102421491997587538371382" + "3544507500749779910821332345405681071783711350736713312486683572160874299231588233532459276695530510399722" + "8899848075258616324750193420386387614417860312278232649208014296495104634271942900536345177897601388394832" + "611083984375"}, + {1e-274, chars_format::fixed, 963, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000099999999999999996610130961388928575477095560" + "7037852897132929578912805217850693190154896842007798502938343898280926049479119604150501130778343016684302" + "1615605151428647837186960260934900671975727644897761590357503387320773655935630248280941234605830319660788" + "2326436524060272739115915692811052380281121998546208140469992448785963339114879068986829879463202286332452" + "7760337239262807107657632569428039809102815139583143671458485970184023737703199520175376382597448769637664" + "6069029951181771612179665924299735122664331073911674594543199769372067780588798430856858149689694544391644" + "1619443003394614275664024245327180443551456525045581841276259778116612913882732538439768177340738475322723" + "388671875"}, + {1e-273, chars_format::fixed, 954, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000001000000000000000094368084654463543546521870893" + "4482239623710929327631676310035207382479910928589920458334481180870676664675648379486432346815345866334756" + "2631471965527419417503763703495879299381727950707614250209935245588342983867625950272814993263888123155664" + "5135692769927351778358506727934022073892637128839856295410452367794579708097333520813637944185339945990064" + "8060689427426785194885540085397651937152392533802832245566904836593719145032631567800222330837423133330288" + "5648497259176616280450358052714327419732013400898404732486559604253669336804628129859196806272523059693052" + "103292006628418388312384411180397641042870134098603238060727030778879198535946670745033770799636840820312" + "5"}, + {1e-272, chars_format::fixed, 956, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000009999999999999999301866126025284935730806993268" + "4294899886624383983470374216790147668883045176946431092771471673520639672235493868702134168544937709853359" + "1429337879390148790920375029878823974624300284932163665172614889411667604931319119196596048407394171745033" + "1403935323918325627433389841599442869084231853163044353009766814778484224031986972036038327570940801781773" + "8753236228844311234497456647675670141133638771994459659098870641092624819918170192607554446128657740296261" + "7020041425572240773736235762765978925784739938178814850567203587714401772313240386072092102717837114989906" + "8396528248914912412248339888827962825386071451073585017660894737117835417983258139429381117224693298339843" + "75"}, + {1e-271, chars_format::fixed, 953, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000099999999999999996302290701291550356776893364016" + "4003991567213658420396519935025329000662579987369857908861397005578650671396918539345720284666419005521998" + "4064142345669578677438274308948177784628961293609594325579624027060200516803071959029068252536915837073555" + "3945337989893640586637253291475984430526597402101480732287181874119467954202566192561065504274325334055487" + "1239678379290193773690454889358399872116960852012322184129061860615381459997992896864882185777724588975864" + "9130276588110251798897047156414379800918187523398613454268820786788600914598485685760672947193158113780296" + "78306273170029769604636013467032308116625984283093277534325640527185230510553992644418030977249145507812" + "5"}, + {1e-270, chars_format::fixed, 948, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000001000000000000000041830013597844327555020695992134" + "5359740495412230260591865761225745490596877103431706636134296544720601490976701849242289227873195822941751" + "5139748699129965212011319333320290767552615599006927428279643461246592387787857999805268968480537241692929" + "7197013915985629361653049926317182057688666912319700175420148173225696675210377258427028528301268930260832" + "1372369973231892026085870796024761779903363689748636076659149398693012859570912267592927245564778354076598" + "5619461858410775465803020254253971042880790632637293309011045699356005741170820658560775552286468270952449" + "1074549038522237716160872469198769503871198304856739378092440884149283419901621527969837188720703125"}, + {1e-269, chars_format::fixed, 944, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000009999999999999999577690999072535819686188161500326" + "3519273505848744668567549228551263076943947250497039187792816231909003955020176297381970879169230040385329" + "0082017738668415452075046732258769848720794252352109776306800578923660200469103629897100958283997793383955" + "6038042977997909666871651139893551217711278282611477993685967790592783998133475700895634770393856345744738" + "4650780475466074509591274334212811839206915088148608922660498866512013826738634153858814985914103921374525" + "0149861492819674905149683181364531402686142074093906249333520124546760396391259375431263999079219955930024" + "121721445463605063867689533554544024142970014975713411407853836720960316597484052181243896484375"}, + {1e-268, chars_format::fixed, 943, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000099999999999999995776909990725358196861881615003263" + "5192735058487446685675492285512630769439472504970391877928162319090039550201762973819708791692300403853290" + "0820177386684154520750467322587698487207942523521097763068005789236602004691036298971009582839977933839556" + "0380429779979096668716511398935512177112782826114779936859677905927839981334757008956347703938563457447384" + "6507804754660745095912743342128118392069150881486089226604988665120138267386341538588149859141039213745250" + "1498614928196749051496831813645314026861420740939062493335201245467603963912593754312639990792199559300241" + "21721445463605063867689533554544024142970014975713411407853836720960316597484052181243896484375"}, + {1e-267, chars_format::fixed, 935, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000999999999999999984668592288242620556267417699505243" + "4427556929628320851990391133724446223189086131944788332886398080404746053916579979506572702930306087562857" + "0296789951041118584725364456089395329851000842160241838348346965718457724013606770688935077083767291846491" + "3631375619259253076248253934259741264740335159884559705093225192532247940397070357552293443188289194108499" + "5411463765898514999685309454394974635146606713668951271841730504581055280919048092136137622888139957979240" + "8418376203186042607144937694058869104510663482319483838213992263101544129268248268774128669056803708025354" + "662627524236751260150807296069617765600306773764172074692169189802370965480804443359375"}, + {1e-266, chars_format::fixed, 934, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000009999999999999999846685922882426205562674176995052434" + "4275569296283208519903911337244462231890861319447883328863980804047460539165799795065727029303060875628570" + "2967899510411185847253644560893953298510008421602418383483469657184577240136067706889350770837672918464913" + "6313756192592530762482539342597412647403351598845597050932251925322479403970703575522934431882891941084995" + "4114637658985149996853094543949746351466067136689512718417305045810552809190480921361376228881399579792408" + "4183762031860426071449376940588691045106634823194838382139922631015441292682482687741286690568037080253546" + "62627524236751260150807296069617765600306773764172074692169189802370965480804443359375"}, + {1e-265, chars_format::fixed, 933, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000099999999999999998466859228824262055626741769950524344" + "2755692962832085199039113372444622318908613194478833288639808040474605391657997950657270293030608756285702" + "9678995104111858472536445608939532985100084216024183834834696571845772401360677068893507708376729184649136" + "3137561925925307624825393425974126474033515988455970509322519253224794039707035755229344318828919410849954" + "1146376589851499968530945439497463514660671366895127184173050458105528091904809213613762288813995797924084" + "1837620318604260714493769405886910451066348231948383821399226310154412926824826877412866905680370802535466" + "2627524236751260150807296069617765600306773764172074692169189802370965480804443359375"}, + {1e-264, chars_format::fixed, 925, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000001000000000000000012213672486375396070019585686165194290" + "7768226656267343111510651008940076674511880159438755777687567257201019061105026607485123801783385769532188" + "2086421261481722999352275826903638609094263676288387000674976831353905367328402411266467736170956180244689" + "4303306394778338669389237842071626199542224191002289665586032984188422495758631972841440682207524614384247" + "2881974452564577216574512303496326748626962048403693772578610441840030544015983340887991121353726198621929" + "2976570513839949533796121047135432468634500998635356792659586929260727173974451837402920458847217808847772" + "88209358202601049382573125959828533489137658563095101271755993366241455078125"}, + {1e-263, chars_format::fixed, 924, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000010000000000000000122136724863753960700195856861651942907" + "7682266562673431115106510089400766745118801594387557776875672572010190611050266074851238017833857695321882" + "0864212614817229993522758269036386090942636762883870006749768313539053673284024112664677361709561802446894" + "3033063947783386693892378420716261995422241910022896655860329841884224957586319728414406822075246143842472" + "8819744525645772165745123034963267486269620484036937725786104418400305440159833408879911213537261986219292" + "9765705138399495337961210471354324686345009986353567926595869292607271739744518374029204588472178088477728" + "8209358202601049382573125959828533489137658563095101271755993366241455078125"}, + {1e-262, chars_format::fixed, 923, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000100000000000000001221367248637539607001958568616519429077" + "6822665626734311151065100894007667451188015943875577768756725720101906110502660748512380178338576953218820" + "8642126148172299935227582690363860909426367628838700067497683135390536732840241126646773617095618024468943" + "0330639477833866938923784207162619954222419100228966558603298418842249575863197284144068220752461438424728" + "8197445256457721657451230349632674862696204840369377257861044184003054401598334088799112135372619862192929" + "7657051383994953379612104713543246863450099863535679265958692926072717397445183740292045884721780884777288" + "209358202601049382573125959828533489137658563095101271755993366241455078125"}, + {1e-261, chars_format::fixed, 920, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000999999999999999984007510363487433943937365667825404622403" + "1858499650136203484265309618370705435913987636722737007132720287134753111378376150804829390632405896825874" + "2835755829869406788748415695130440806600043856721180691093451748215661117451527599123708109603902481283306" + "5354768000469950146686973765336065314190341205083063488532361401368826701838966200291248435154176358308198" + "9728893217809824559093005170114548158227707844413715390150040396446928048862747223614050542827541975695738" + "5794370175470927605091811150712639672177871184201768104247329678930918510840380610087023154663790550827981" + "414572464666142574853625058233126676743296457061660476028919219970703125"}, + {1e-260, chars_format::fixed, 916, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000009999999999999999614425806651770642430715896531535728877042" + "7639743563706770631567501610059301751410501950963044627850907560273067164597910833496514764297149885360067" + "9673513083865327379264867283239061764691379113885247039867480636638961486908206652484856605220802705584074" + "9934665781749747526462791203039579317632613673177818105318631717258914564045608873717014172578259375569275" + "9324457403959109467575665091447877832402353969896696393817192415800352751662722921123938941086166587088913" + "1734552438880426522684223629367765023193692232777484599756500134939141399512151758202746006205759132720608" + "71364815590661574151517426191360105036665117950178682804107666015625"}, + {1e-259, chars_format::fixed, 909, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000100000000000000006975424321706683880722731452357836521425904" + "1769576644520388447783555635685142685114991490318067565371250534304941206899940713450546460263134832737073" + "3569301150432818187174576899527240109748644898527344209892574951236799874221394784955341611482688203792287" + "2771340519085664404161341645807336741324458859113386493425467401198063448970638938552710316030795716303021" + "5539363198269628596767208179963758318010314462508924306966078494112058890935196332034580795945818024575817" + "5384691548589042582068854426091971764017863571304275247971240759153512021920926030066766002800617354047947" + "8761531152970377521634059991839649228495545685291290283203125"}, + {1e-258, chars_format::fixed, 910, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000999999999999999954221803161717745938794541328458586732600625" + "3726262365708608402011134649202091693710213775846048593849306072923870085843861763994543884853897883249200" + "9461861512013041663469458945815094827248008882074788112602884607331358687394446408414476815897163126439807" + "7850123040582626553256833893683569386595819232891673571703738240152177865551187237446371530993802916520751" + "7582547623458590810226137634464463244244213813974999135856472022629587583400314031863766518560557273100193" + "4762465781519467364937950848500287964648595782062173808712520554072741266682236854915063326747229254166297" + "53836788650765392684298393799480209054308943450450897216796875"}, + {1e-257, chars_format::fixed, 904, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000009999999999999999773282911727875645124810959674825424289323086" + "5201631816076636171760189907319587251981540013129740058219459269489784824749708380967280284093879720735074" + "7080915104760697051247209557065560812956969027145189098674575883386866983583466966422646756831069087364207" + "8227794706374300509281504065615289919255731045401118442139253945178691903822276670625178568566337658226445" + "1447644953061298417153264674990872314159999761978479226173346063277878485906438895601748067400818676317898" + "5793557223936590560880695309841738997546037682582895429124979615652170571876415440655826669990181114289337" + "83000539800198645801199148763771518133580684661865234375"}, + {1e-256, chars_format::fixed, 903, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000099999999999999997732829117278756451248109596748254242893230865" + "2016318160766361717601899073195872519815400131297400582194592694897848247497083809672802840938797207350747" + "0809151047606970512472095570655608129569690271451890986745758833868669835834669664226467568310690873642078" + "2277947063743005092815040656152899192557310454011184421392539451786919038222766706251785685663376582264451" + "4476449530612984171532646749908723141599997619784792261733460632778784859064388956017480674008186763178985" + "7935572239365905608806953098417389975460376825828954291249796156521705718764154406558266699901811142893378" + "3000539800198645801199148763771518133580684661865234375"}, + {1e-255, chars_format::fixed, 898, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000001000000000000000006904595826956932286799885905433205720236863249" + "6356225958454292587070947890188525502717489910638533146924940101117230162790452947523732160415285768619822" + "3265908508745598443456328367626486476737569133374330366111004028066552392139065573833136209114950076085418" + "7779701107578527947435543045317286747658060250112833026964952105954086165959416971185153961057252929067242" + "4402091270979802021488173783405934995886263843094369671238713461484188034266107411577415609873348632233226" + "4974846712624420760221444563547896690293990589317682688469043155586069034559546178247422521307848725108176" + "13033601465588606771461854805238544940948486328125"}, + {1e-254, chars_format::fixed, 894, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000009999999999999999122604209336149554089797581039910831880622885372" + "5384840359241312717046849838531645281143263981120457069920980142732375617676854249774801571278819442602974" + "7078348041827398235031358522011898974074365930369847704200738220510194840034849928140625258892177891585819" + "7789636031034014857231062971947433169862019781096688252383678240824196580178172634498032269020941885145129" + "5617841834599290417707136735860835402501433783057390987455706336559018146750102870890672265406094308144470" + "9936488919352538093353211095511064960852791300276354053615820664052311244219394177202048499806893773501181" + "1498812839271721486511523835361003875732421875"}, + {1e-253, chars_format::fixed, 890, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000100000000000000006369110076296211841349196258629847923954160807706" + "4687111197238937629070563398974208747938801815442561088464535322362572340411346105148336238772806323553724" + "0075273148331361542824387688166442433564865757673772352556215167587213702041392244458041905038944824152085" + "8014361026360382446300509419081280606117521331473154800090267507708607072437679582636440155034817339888013" + "0627552349172580931864984929784586926793612196754801473459915818115976602076568627042463987299215308449413" + "6356540503792093075311863594597080681921746489171105833351980909457178064211023456375312410414433376301093" + "954474641378737942432053387165069580078125"}, + {1e-252, chars_format::fixed, 890, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000999999999999999942546556899484388009882199000452562398358152445216" + "0161451133782892621889113880480039987338722120521687770607482063315194094971032192280798179851168055345424" + "6418389642854581888157457137284802793079005944935361041171487975990014606870778740166104521452120975169753" + "9199604535441953471086056593957214801196625150681369790874794281352940559129169925115461831744985491386391" + "0682451466288395280300908728436006053701927038100881943376338560953404944161366925338709207085975268456506" + "7632194555787233618880614830079358232066797000450535955969614943099255665973581088914504805380368632696679" + "899451996931247776956297457218170166015625"}, + {1e-251, chars_format::fixed, 886, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000010000000000000000152332832175710262520480571519601125030682258243252" + "1872476369467828231790259460372684825682997408640416390302047595015116804564895078023367045773051634605139" + "0189947471300020122093089839125757186207969240167785318058861959192880549966649628146932388145173349804163" + "7660079723390760662374791520705695571837780491114767168915227587928186582777454658648256629068982358826348" + "0382946815508437033102730700819239822424439957691616181100303330772215901239585323902676066296819580790845" + "1921208450674518994234274996142273843571977352068493824997314339827706516555731738176763846387477108852356" + "86628647044926765374839305877685546875"}, + {1e-250, chars_format::fixed, 881, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000100000000000000005399953725388389998120318149943080589224693162651679" + "3433910530085759720031238100112368002407447171329703552232353080088105938206674274715725109791162112189484" + "0598413607689274503696330211405461224308544619353452681089857988156722733047094822727388807446206021276968" + "6808980535087478365157118306435876037692626160753374410044461342742031115698575426448637285991836628063146" + "2807772969081619558193405229308021079738637319224411130133261154325713463734072281776541971965885921112598" + "9074819935023498237959425669949093224541146041021654331579356245397864401930228576603456024321655258579877" + "312286043888889253139495849609375"}, + {1e-249, chars_format::fixed, 880, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000001000000000000000053999537253883899981203181499430805892246931626516793" + "4339105300857597200312381001123680024074471713297035522323530800881059382066742747157251097911621121894840" + "5984136076892745036963302114054612243085446193534526810898579881567227330470948227273888074462060212769686" + "8089805350874783651571183064358760376926261607533744100444613427420311156985754264486372859918366280631462" + "8077729690816195581934052293080210797386373192244111301332611543257134637340722817765419719658859211125989" + "0748199350234982379594256699490932245411460410216543315793562453978644019302285766034560243216552585798773" + "12286043888889253139495849609375"}, + {1e-248, chars_format::fixed, 876, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000009999999999999999795683295041631824212253427522870745850238164863089699" + "9234860610340310794424258705217009089869884827266742574554899060918518449584516531018017783472224120434382" + "9645092988625380078670111672151364882914836141630164012748026739912164495634562351190414953681877666513312" + "0926859682212462165144835562834902460816936151042518593146525289851376288444005371378097501197159164778775" + "6942772620690104203449664476602519718970085399257243740322368884688891716469171969696185869032090376063669" + "3836791272914631037540830957849203000411080197515945489542757892592986809423908251868630826363765207176470" + "5397072248160839080810546875"}, + {1e-247, chars_format::fixed, 872, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000100000000000000001926497363734756511988019008409706461554281122775314249" + "4514965560659967723973527350942310370031287236420026538511171664609586474954023659804141544823505729751952" + "4164358047864842338503300552952355751493032316115528640748385136508891938078529760162633755158640458112086" + "2448297230313284854472329392363431586546321106664772125063167481723017718645585839037674201232944402645636" + "3211855740084250652581223188423001215800302116219740192577003768928675335028019472737919103955579681683207" + "7808991286134005086884235109479333757196262799956722460189534377628286140100146030563490161247042209424762" + "404523789882659912109375"}, + {1e-246, chars_format::fixed, 870, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000999999999999999955750343024252552802032434353201080566712419641442466491" + "0487904290489920764040228729067592158993848944158652697716819759305433083798503004057996086614824890989559" + "8228729892871758556198064226504246757415588764133070195193967566892967673058797629490590058148583893457417" + "3607765772114237296339713699403804211431857526814342153065041485882099839167344386269554984147799948730293" + "1572484869911168636458977125865147740411851183840557296116998936650622624899398314962224421400982080087854" + "7032655949536935485227542598996477522595254802810943565704056549108172667224444115599991250720179891686711" + "9260132312774658203125"}, + {1e-245, chars_format::fixed, 863, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000009999999999999999303444907790145478748933320608426869471802630069181960896" + "6232037640460181737622108169253875424662395761420076227588610045892604175018095664646283419667319283775740" + "8627896585610926246640877052965224544096950053241837102780140476145869899681976406362910607734556183920393" + "2576831597067927969862816097115995498193161108809905140383881533428689002519387846266801728751423176398651" + "3540558575386334807176752225192019733753831924978194442557834355961703347470797499954377741390561853901654" + "6097531848156893317816192006777335028483055241084311512275416582382971737136376395860271060200830106623470" + "783233642578125"}, + {1e-244, chars_format::fixed, 862, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000099999999999999993034449077901454787489333206084268694718026300691819608966" + "2320376404601817376221081692538754246623957614200762275886100458926041750180956646462834196673192837757408" + "6278965856109262466408770529652245440969500532418371027801404761458698996819764063629106077345561839203932" + "5768315970679279698628160971159954981931611088099051403838815334286890025193878462668017287514231763986513" + "5405585753863348071767522251920197337538319249781944425578343559617033474707974999543777413905618539016546" + "0975318481568933178161920067773350284830552410843115122754165823829717371363763958602710602008301066234707" + "83233642578125"}, + {1e-243, chars_format::fixed, 860, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000999999999999999995383472526823840488369433929280174613182583991300328317211" + "6837111742408804873936672009431360776919558264619014651235416662662443221344766703649768265849912664257571" + "9596658396397409391067599588296670104783027874933111662855056967241538680133612103296494053784002559407095" + "3894647469850715331067759323643483547422135670370709946620684643300103875377124832439689733145853231360871" + "3234129212323479415408095084823136988741250335228345020495118295568197537015276310411591129586475816249921" + "2384262502079484603183100373718193400495677586862932287419778865178437101302218181775316452331026084721088" + "409423828125"}, + {1e-242, chars_format::fixed, 850, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000009999999999999999693678798277001234429789931819051795467816555975474754261919" + "3837726638525524292463299758138334526475654155744578942856518333016329335306866080411977462027189495841776" + "8738584622754955002756418715869838267478188546333511089186532261797191953592235164943207416526488924599875" + "4100523646275479931532994788259100561797257546186315833276721231276224260017887501358829899444389947625769" + "5628205428474799363149460585746715433980272002647847146104452158090524210410657844220643333743596458161371" + "3318314275234234745575404953243171796196161954902198634685306144259317462363867434760322794318199157714843" + "75"}, + {1e-241, chars_format::fixed, 849, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000099999999999999996936787982770012344297899318190517954678165559754747542619193" + "8377266385255242924632997581383345264756541557445789428565183330163293353068660804119774620271894958417768" + "7385846227549550027564187158698382674781885463335110891865322617971919535922351649432074165264889245998754" + "1005236462754799315329947882591005617972575461863158332767212312762242600178875013588298994443899476257695" + "6282054284747993631494605857467154339802720026478471461044521580905242104106578442206433337435964581613713" + "3183142752342347455754049532431717961961619549021986346853061442593174623638674347603227943181991577148437" + "5"}, + {1e-240, chars_format::fixed, 848, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000999999999999999969367879827700123442978993181905179546781655597547475426191938" + "3772663852552429246329975813833452647565415574457894285651833301632933530686608041197746202718949584177687" + "3858462275495500275641871586983826747818854633351108918653226179719195359223516494320741652648892459987541" + "0052364627547993153299478825910056179725754618631583327672123127622426001788750135882989944438994762576956" + "2820542847479936314946058574671543398027200264784714610445215809052421041065784422064333374359645816137133" + "183142752342347455754049532431717961961619549021986346853061442593174623638674347603227943181991577148437" + "5"}, + {1e-239, chars_format::fixed, 845, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000010000000000000000759277475233108684608982384831531593387598582983591608678088152" + "6495296189624426979709455112253728656481252609623707518885743635118724171586796539025946776244048864006266" + "4469924388547969595006792298588215800350017811703378421629495689318049951191680360226281426735122753412882" + "9539156216414092509270031986910763086367695391445593758514057541064426431653432522754100974317078691906840" + "5008530211738026804844700883860075238691610755277275140661505025108160714320988751660906591874799129168282" + "5891089050498574078337572256341803279636545528499519728434495081936805860323147499002516269683837890625"}, + {1e-238, chars_format::fixed, 840, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000099999999999999999067985336682227244656284224215477550517729613770981251451531375" + "4803700583443193665816975331183669118195751175878957889918151400872130798102236373871589770004064462227523" + "7616830816735961241363311555882571426208406291495470335517085756171728640264680266111895065381642305829046" + "3267482636667637282498370046626020550795760273417853730797965291922933006406875916147397503753738389970183" + "5660488221870958805374087741443622319559242693331719116940274774410004713904731268468483132521263549307219" + "82963799748751127599147704580579761285687302745881169393181442384133106315857730805873870849609375"}, + {1e-237, chars_format::fixed, 839, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000999999999999999990679853366822272446562842242154775505177296137709812514515313754" + "8037005834431936658169753311836691181957511758789578899181514008721307981022363738715897700040644622275237" + "6168308167359612413633115558825714262084062914954703355170857561717286402646802661118950653816423058290463" + "2674826366676372824983700466260205507957602734178537307979652919229330064068759161473975037537383899701835" + "6604882218709588053740877414436223195592426933317191169402747744100047139047312684684831325212635493072198" + "2963799748751127599147704580579761285687302745881169393181442384133106315857730805873870849609375"}, + {1e-236, chars_format::fixed, 835, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000010000000000000000452385056269749738957374958363937411586701359205253954606231547212" + "9922782363588238983462383764998428403048712490815296123929376907380178547230294435983168516337593604201381" + "4957518073195145493426287108230683567514025983999121921492328385734199812203920124848335464217685194090758" + "2689353425054148102761793301425115103972420368222739757723576790458504488844347543930933698064944859304528" + "9236911499691672094075724362418556266763620337397978233213107947983026866003126727845611570636930442760770" + "896667141459146949297798054884123959586342812486483601353004502243493334390223026275634765625"}, + {1e-235, chars_format::fixed, 829, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000099999999999999995794466201073065157705805008561139611308159226802046274685060917490" + "6384239327580431406386227303880018694909606461440847125465979951128205680196431578644620908477577938829729" + "7184198338367113220740766762730180528365910488757805298383239560360625550264905029942091825321578161929573" + "1836098117894763380821314793082190649381915259229530730403006333941783317935380572250403817591754796466532" + "1359685995384056034086040135284373694206587306362717705160991368109381051551269182499342610200096234987102" + "040793131263159890576484959971436813478787059179808682785051132668741047382354736328125"}, + {1e-234, chars_format::fixed, 828, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000999999999999999957944662010730651577058050085611396113081592268020462746850609174906" + "3842393275804314063862273038800186949096064614408471254659799511282056801964315786446209084775779388297297" + "1841983383671132207407667627301805283659104887578052983832395603606255502649050299420918253215781619295731" + "8360981178947633808213147930821906493819152592295307304030063339417833179353805722504038175917547964665321" + "3596859953840560340860401352843736942065873063627177051609913681093810515512691824993426102000962349871020" + "40793131263159890576484959971436813478787059179808682785051132668741047382354736328125"}, + {1e-233, chars_format::fixed, 827, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000009999999999999999579446620107306515770580500856113961130815922680204627468506091749063" + "8423932758043140638622730388001869490960646144084712546597995112820568019643157864462090847757793882972971" + "8419833836711322074076676273018052836591048875780529838323956036062555026490502994209182532157816192957318" + "3609811789476338082131479308219064938191525922953073040300633394178331793538057225040381759175479646653213" + "5968599538405603408604013528437369420658730636271770516099136810938105155126918249934261020009623498710204" + "0793131263159890576484959971436813478787059179808682785051132668741047382354736328125"}, + {1e-232, chars_format::fixed, 823, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000100000000000000002498633390800629111780386442221223710809359379314425107102792415453608" + "8112076356335479272712049688094472633140628515750764885721997341514960534233394596286256239516962075107182" + "0472816639887656725742880165051681088610790505067186285993580442319685387564525781781668666428424184684484" + "0209067767442533561117586939952229164792768091892468770567220195808204085597430151664486820063632239017589" + "4927468561142682409524414760486825800532446292623338674019037911022734863907720194144348058048126919728159" + "867652859301665220833572223445350350191397625909672797206440009176731109619140625"}, + {1e-231, chars_format::fixed, 819, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000999999999999999989230775562792616696072763442691788577420526313078230631466689498733579" + "3799436758533070665868519237873911805890727424688238618595726944166776874057594220647374331494830109058681" + "1264282277412908670889508664537329698372962398608460711914363987494799888127946672804188825082843152917904" + "6832278353469854332227635491460532805914300319662083078680808603282648054817726043254632316322531603586809" + "4653495333631366369994657065598222837617049966736674670709473501471704305005000902500878671404512223275630" + "27908008026052077180979022374130685442417121322478124056942760944366455078125"}, + {1e-230, chars_format::fixed, 817, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000010000000000000000464396689151344957708425250099245062264974342811838633347646649480175933" + "5135596462478259638716834667872150467156197971992950003945212977393024232997570081916752333744951362797040" + "8064968717547624093523774421044995987488706419099041487486686846180862681556445048241853678050810632010015" + "2457172669986243785448097443593469531357092784822504818670379709616765366682468006790097312245968621293462" + "0473997781040987303938419284302791059489107019314139818789224754807352395205225648090417259273233816851797" + "149977006703310702512814408808214904078592866198960109613835811614990234375"}, + {1e-229, chars_format::fixed, 813, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000100000000000000006932322625607124740075042963681759328612819746842611641608385512773119893" + "9920880133372808307294915835253634304557674620371755311403903916831264299662212320939559412636114716811326" + "2338270949150390473752495313136755889923393923048152348239056346740082016672363763218398489397622731424026" + "1109283241013239707167944551887261202427286201031744314152971803328792940845510364876069718542296554636090" + "0496155589319167455351587356310161328165499600930970634670206508434761332673122973230694773644784504899948" + "93647488342551896278779277366273448013345159779419191181659698486328125"}, + {1e-228, chars_format::fixed, 810, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000001000000000000000032709534510572444792897782233788653990718976368838511485973150840189429998" + "2170153196284692350924051848022268917645627796641468762810652881896291481637939181043016923375529746658571" + "6365369112717512121288935488378822658652663517557723908435557308497536948997025139386197551743964733058282" + "6491927751719567428687923663631557802571128365410305102342922718709701024121818897159151648101200079137387" + "2862711430642963898037561350585601549264125484676547198254721718567815236797365855082592841848703666887850" + "37747177197659862532354876733797777177414900506846606731414794921875"}, + {1e-227, chars_format::fixed, 807, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000009999999999999999448366743213753185340514284665191996817368457298282596537074605500891845381" + "2773976664205546180637962371884910106109436196588663198625257944970478456758975129968316362100479351673139" + "5237522036301698423224931452058556812576018065406049309435425271296572264531551566715079303865345382215343" + "4497565715287762855082712110530276704869676176331738082946139637219529017219354933154423585289629578009555" + "8254847205260583248896120405471733915260362255569652419810976406962998209560925497441410948107643498199168" + "08006822507980219193039241043496900829268270172178745269775390625"}, + {1e-226, chars_format::fixed, 803, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000099999999999999992140391160425608486502573412858067853267494422609219249843660980606245241543" + "7266285845678455596772807429948356873502783913017233507635857119058287608601973485118222629925278543631190" + "3265436120687856793144185369306448728558535026937320361233858543155596710812316128092403135788648626506813" + "0517759014456531399369722369875296859785808489260546321506496239188673574863325229045321464303305877790712" + "8222426449488350538349222453692588279587908979174338697479788659722904339841966832055396226731386526846785" + "6149502649681977558236700698302001910633407533168792724609375"}, + {1e-225, chars_format::fixed, 799, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000999999999999999958896331951646858735466845069282312371173986632069899946869970996505223811742" + "0238551198816655321437134921895475736493087976082710734226128480926827429824179884221282156525025005915181" + "8410909084144606957123920113530397640811680303343967342264892148517982060174353905858269803723369395414073" + "6503960359302868417015603465592491620433337277514815342343364519992601305916837930435844860520897214784655" + "1440994144763216593283930153321896764130507016098354984877493155742287490696278598293374336834640550786179" + "121214422959164173920765250613840180449187755584716796875"}, + {1e-224, chars_format::fixed, 796, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000010000000000000000188842045074720969281726225744049265127724544816342318643633489012136580458296" + "3596595860680142873716319177545269388374861295393117868142201454771495799112919370837715281606083172804275" + "6213856877702693982152263862758542091738083576971893101469828956572059834562621057530513170623824039675826" + "6261527028829554943250110925357284565537410933697787459888079249619861975705749544080532085014387137886982" + "1877615845707545289506591395555191133327745750663038010048636493634780383388550426764336480678810024954958" + "759532602026627590152685343127814121544361114501953125"}, + {1e-223, chars_format::fixed, 792, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000099999999999999997089390646281190637400800057030683519949368020198276633036864657744691065855954" + "6277287626692711462403432106728597696196760677403094474374681383689185984160229479378003085214166818823098" + "5300440486973944534218136807948895448410591421461173584131029794582684483073554583722610639117199712477545" + "2839882801888583247748499098113898765741804068580802307245320098647828424758533523028653011700551458546375" + "9034763272472418041727595056862123397096052789194474810296725446652560022479388716998619908128864112804247" + "21621904078638909396659073536284267902374267578125"}, + {1e-222, chars_format::fixed, 790, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000001000000000000000047678383334268211260671395776863781300739719049425111184760170295473706478191689" + "7791611948666591020190475766871515962797243198480292056504144461304211953105722457766426545688306735745508" + "2414457510587369939053397193673361987629823786735854730386454284033466631578041702546443465108648073266988" + "4805027801397291433526753468482137891534924980161179738620759347290945564368725914713215532098633310638894" + "6209955678372738070689052947657840949863003370919232746001486301649501207291735980302117459836419315967918" + "227902079542079860630110488273203372955322265625"}, + {1e-221, chars_format::fixed, 787, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000010000000000000000169645925856856893060060376942410028602413035104481732430035608082629881503388323" + "7841176759708004617280138870373003624653886287005531314012122115392711085043513921718682682696513167396990" + "6504364542482001003045855479995989862202599578862071747559917487508179112410433564183086355339876938703742" + "2425478883927078511100484735448777978881712624199170721537360029658810376553696409425413660613858205688403" + "8650264969133150093238119960431981583020131793294388887877935675999408142925964561757501084173080407977398" + "016174108708042922444292344152927398681640625"}, + {1e-220, chars_format::fixed, 783, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000099999999999999999239355998681967174227375122814278010784257107926662288959827321849441348805654645" + "7812225781416801495804438316992788219990497287676199131886641172731843282325453969622164633472698153505172" + "3921960917686422930553623146058858509260889480648913025162172052469893497144467951580077187425939035308281" + "9256395798904098517668447759506972297076828822690693898011732750582941628468462192600203323158782851279699" + "8908315174577656023161923475148392505322102605760380301683938036029249989328483687465622728201902066159706" + "05896759337838375358842313289642333984375"}, + {1e-219, chars_format::fixed, 777, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000001000000000000000031707212145005299844245409573899936511680542969157103455046733362124132947708203930" + "7714926864779929789995589357723850624678822194827815450619691426442713913009503657256241430605917862487469" + "7166561291001622904015137923005226896850595734038001458613765686489297002802562559813353729824675980749067" + "2538246634907970670066871114762642838613046935723152057907208241912010477780652352464965759264615802466419" + "0592504013838078779127652818226698251288471292539940250366079943729802932183427756406437098481452879425446" + "23405183301656506955623626708984375"}, + {1e-218, chars_format::fixed, 776, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000010000000000000000317072121450052998442454095738999365116805429691571034550467333621241329477082039307" + "7149268647799297899955893577238506246788221948278154506196914264427139130095036572562414306059178624874697" + "1665612910016229040151379230052268968505957340380014586137656864892970028025625598133537298246759807490672" + "5382466349079706700668711147626428386130469357231520579072082419120104777806523524649657592646158024664190" + "5925040138380787791276528182266982512884712925399402503660799437298029321834277564064370984814528794254462" + "3405183301656506955623626708984375"}, + {1e-217, chars_format::fixed, 773, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000100000000000000008202868690748290381476913225646909670859314698821691857882076234597017385606232549615" + "9354324956318077489313327810269020838934932195207033926388944132179370789585752738052315333095636160522433" + "3865999709748671006813819489852840627997292130055660356358349358096040294065285614945850494824158416186469" + "0533610161771210159633481996958026945433808300790479747825558409773104494357129833751939469090353324327685" + "2447491695682251993842794365744794481480119325819590928025541052955082197362408504670566355336611824577985" + "8852984034456312656402587890625"}, + {1e-216, chars_format::fixed, 768, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0001000000000000000041771507097500820638350154110413768551063063772969066479801539158893341129379028243849" + "0650141736579986975098141799618541420927620252666428348531029418529871986774431281097775150925562311020640" + "0981032220795665225737977383887198736471171490512487603729247907629682830180619080574684849389101431626741" + "1664528249918956372763855804030324781305165180102605821417710349154591213236141639476486349873348621790617" + "8898194461827527289807843312848189993737272683591382148915037089752510141467022134490811495835527189512959" + "01206322014331817626953125"}, + {1e-215, chars_format::fixed, 767, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0010000000000000000417715070975008206383501541104137685510630637729690664798015391588933411293790282438490" + "6501417365799869750981417996185414209276202526664283485310294185298719867744312810977751509255623110206400" + "9810322207956652257379773838871987364711714905124876037292479076296828301806190805746848493891014316267411" + "6645282499189563727638558040303247813051651801026058214177103491545912132361416394764863498733486217906178" + "8981944618275272898078433128481899937372726835913821489150370897525101414670221344908114958355271895129590" + "1206322014331817626953125"}, + {1e-214, chars_format::fixed, 763, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0099999999999999991294853170555815447380942404303671844696679748417593976294002496024747640399247703645613" + "9219669145746563738570562978920712197817481457391341938411132808559707770852376293656497482700456956882004" + "0834461538432173005728133703533459726557209837131653219566175297137847666946046014646053306115669486530319" + "1549347298089165733677047427050182759982813113559251953651435370993927616364020573917965857675783303466730" + "5268247784355081422352221012897456633272684485689532862584208239791227856442081540328491173763580945887952" + "111661434173583984375"}, + {1e-213, chars_format::fixed, 758, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0999999999999999954171883830979807646462457664597374480277602696589740312335709503814153116116173422821875" + "4739105896672465453685204134594097641997354763518196711125117027765048609614168748152231178543046833402459" + "1604649115951648675104072027931121811363903856491275086409322462035869793031218683492314286099010628963343" + "5184601601072366273437779793645172785535986805036776138497072252227896026840664535117799791666885436571492" + "3246312718423286410504962999123503102181513251931111118384484751383594693253237511293418648961051076184958" + "2195281982421875"}, + {1e-212, chars_format::fixed, 757, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "9999999999999999541718838309798076464624576645973744802776026965897403123357095038141531161161734228218754" + "7391058966724654536852041345940976419973547635181967111251170277650486096141687481522311785430468334024591" + "6046491159516486751040720279311218113639038564912750864093224620358697930312186834923142860990106289633435" + "1846016010723662734377797936451727855359868050367761384970722522278960268406645351177997916668854365714923" + "2463127184232864105049629991235031021815132519311111183844847513835946932532375112934186489610510761849582" + "195281982421875"}, + {1e-211, chars_format::fixed, 753, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010" + "0000000000000008608661063232909779895216525359147378687217937631390207040190004322751859491200185919223148" + "7483210213431527121984203983241976622948337025348415756924164270255549310346734523145150346617408006619780" + "3675705716738825213682400424000035789768140905045233680154483213952778845764600199401420591442107267582981" + "9621318565063487077315746770387737980112494725839726484177158755147958908213268211985167937585312266489090" + "5058431801519740884977218360010076443645211604561509452017228249180630551698825692064076520182425156235694" + "88525390625"}, + {1e-210, chars_format::fixed, 747, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100" + "0000000000000043873898055897324950155458825113362008761914838802170307820719070615241641697336759553717563" + "1399716386523329608757910156156686475202216098192174707121765922553290386891794166100999490773361133801437" + "8482515978351587486343371821159223006872592231515616676033673706357229921189260073470231573489730687834203" + "2497478585588919625836612005091909636280741747478504411467800247932849164862875079195075308983463115003359" + "3217406145785889379433244567589512514871679528973822156752272537178589592588018319929688004776835441589355" + "46875"}, + {1e-209, chars_format::fixed, 746, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000" + "0000000000000438738980558973249501554588251133620087619148388021703078207190706152416416973367595537175631" + "3997163865233296087579101561566864752022160981921747071217659225532903868917941661009994907733611338014378" + "4825159783515874863433718211592230068725922315156166760336737063572299211892600734702315734897306878342032" + "4974785855889196258366120050919096362807417474785044114678002479328491648628750791950753089834631150033593" + "2174061457858893794332445675895125148716795289738221567522725371785895925880183199296880047768354415893554" + "6875"}, + {1e-208, chars_format::fixed, 740, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000" + "0000000000009790617015372999419661524305356534508474305344681718696392463071555895614181210808709101538629" + "9317014369701487094559614177342856068209341696591277063520820095610986410849952974964457928628136726878610" + "7392870031851823895858131727587566710787775975461843668795650081554484785388973176651872988184843246859220" + "5358362884773709440730729953731144728132480145451776225664799647267625896822809123552851457662733885941786" + "47053338632634301467086529203914974494638270274650781929885279102065975820323728839866816997528076171875"}, + {1e-207, chars_format::fixed, 740, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099999" + "9999999999925002899440665452607943933522518999241603409901169133664392113451739069741444839838971662352189" + "4118120741222031945000987799853887146485996889950967392192910067087537015042366073980296044936620173271678" + "1407990024339830589910929702587154354964069389812802594251558548937082527074825218399829427071649638547547" + "4047490419521194981082357312025652079459028731275039732335201145229557831098452706078256678501822520030527" + "21823215230505509587922520378271037011702981119991813615245049469415494769464203272946178913116455078125"}, + {1e-206, chars_format::fixed, 737, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000" + "0000000000287448618685041775611467192411468067474871960285579656441116238100310015816652007878432741726553" + "5493345146977353453580801839986912678504489355280493380020846005009332711166642793788659897434684305803356" + "9204162008468756111131622465602620067122836086961830504745239089017417231637691472711696999377193365743421" + "7691734764507346368173226471971292005784923652206732469228783416975785133762358237484114173771323236629297" + "10493178880080126376881833747982617725108140959014170254096944001620528297280543483793735504150390625"}, + {1e-205, chars_format::fixed, 731, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000" + "0000000000108033855441385090695930971617939141258485306125427711618642104781981975760643786814417768719777" + "0101084177088110526285554822674350215326172337416081911963805825736093616351809127258067112830889529802701" + "1710255377833027212590023483409996624609315032728159548173314624449927087338409957214562717343408376719690" + "4339132793619072862133189115140196827996872950183764303283108930610633143549365903637015367704970936095571" + "25569051267401182441733990905766850296205863565885611603245575196297068032436072826385498046875"}, + {1e-204, chars_format::fixed, 730, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000" + "0000000001080338554413850906959309716179391412584853061254277116186421047819819757606437868144177687197770" + "1010841770881105262855548226743502153261723374160819119638058257360936163518091272580671128308895298027011" + "7102553778330272125900234834099966246093150327281595481733146244499270873384099572145627173434083767196904" + "3391327936190728621331891151401968279968729501837643032831089306106331435493659036370153677049709360955712" + "5569051267401182441733990905766850296205863565885611603245575196297068032436072826385498046875"}, + {1e-203, chars_format::fixed, 723, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000" + "0000000364909283964494690243191939081376830412598520594029984319306805834501324924016544053590211885834786" + "8651431172545325847430820148366422456613549311381232891696323291335249035452120486258789557131004593821225" + "3440220260683060295956098435873780428169370394754578725053224457696098050769606268964403117192073603428532" + "3924780348069311122000588899328256220789832219472160120915723671907243196436298677829712131554556674824299" + "153355310153286540401954520562788798446562476933408003532122165779583156108856201171875"}, + {1e-202, chars_format::fixed, 722, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000" + "0000003649092839644946902431919390813768304125985205940299843193068058345013249240165440535902118858347868" + "6514311725453258474308201483664224566135493113812328916963232913352490354521204862587895571310045938212253" + "4402202606830602959560984358737804281693703947545787250532244576960980507696062689644031171920736034285323" + "9247803480693111220005888993282562207898322194721601209157236719072431964362986778297121315545566748242991" + "53355310153286540401954520562788798446562476933408003532122165779583156108856201171875"}, + {1e-201, chars_format::fixed, 720, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099999999999" + "9999945839818400838286643877890376724456471851854624142271863625376172236531891325900070089021825036064707" + "8131670538558640710995517318203609118298145276224615168802705395697729075782861950146917558335246313038824" + "5863311858939236135449819299603843204043056259170152128551370517542139943236326734358677709290961889224054" + "9533782349452735577549479293830826276733698466709185184735730814678536219704539366158320724745122774033477" + "753696070790004781196766668518623271037326465104921879856192390434443950653076171875"}, + {1e-200, chars_format::fixed, 715, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000999999999999" + "9999821002623990827595960544117892897470996150535982465624909474979367219721317562018041970215704550302992" + "9362492249482183238301163255790637355208596209840847691345548908285988635545366204397328202413315406723085" + "1267975426859535195138290147135230492006495456852402792598006183692059967260467991913313132575212706757286" + "7114833324440862265532435494287445976335078589119159474703853650968495892746707328834776970293406573920527" + "8643004860546448479624082362272590048489495639927326919860206544399261474609375"}, + {1e-199, chars_format::fixed, 714, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009999999999999" + "9998210026239908275959605441178928974709961505359824656249094749793672197213175620180419702157045503029929" + "3624922494821832383011632557906373552085962098408476913455489082859886355453662043973282024133154067230851" + "2679754268595351951382901471352304920064954568524027925980061836920599672604679919133131325752127067572867" + "1148333244408622655324354942874459763350785891191594747038536509684958927467073288347769702934065739205278" + "643004860546448479624082362272590048489495639927326919860206544399261474609375"}, + {1e-198, chars_format::fixed, 709, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099999999999999" + "9912480209922453371527875490677164389094309711567966324486489024148909926870130022474709662059250616363651" + "1458147080229307187686231418190870453248079045903136497403860177328871032921253477527517381647903616019374" + "0905029892256142110930361702937746498070435576271029899614824781239174025784274712636393641727258288515133" + "0297445100692980466016178680741421505873825882672883019848628293687919700018508771176310243642321343588723" + "5808111997818538852504458228488519455634531141186016611754894256591796875"}, + {1e-197, chars_format::fixed, 706, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000999999999999999" + "9867415992308580521339330065300981042999687430669319116912447295225761084825312804261628455378686578950031" + "2352968060842582729449985231219265253670571132968779770316262053501963893109782372131737653104498093944552" + "5237102055333446740222582475620693808214863591715625504796712750704515727309674899109745652408715015429070" + "2290582669791096257253741452781427086834611138654851004211475503937005796475478242977894817205464619503906" + "1999776584332685697351547605103705418372328495024703443050384521484375"}, + {1e-196, chars_format::fixed, 703, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000" + "4615071067758179661877901921244507646449596826610438145504929382150905377245228678732539232076309112008470" + "5701658676821914115201220706677138306223956721187116073383902776725667442275804496169887224048676409452018" + "1865445615510672449577548326152768702232698549198867117154847013547361028832171173063930405176207196512621" + "7434880000801295349273051690751967093116929881956676487916295575832528335077906679497287218312655663972425" + "1347018692505234351971198612785141079939421615563333034515380859375"}, + {1e-195, chars_format::fixed, 699, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000009" + "3677999834960792206655829358322654196117748425442357266092945260655410004389091876255429747078637700149971" + "4392411315387835717623154222647269218385530343865707695609285700904902512181891160518957784516327854572125" + "4609856652516364874589271821094331982999486548329567725050226187491240334205089186371095100474528302901573" + "0581226431135615706615614211021240729335846782832096445575280050025046313364060792719584553190632391191156" + "426420971847936254735776662183610596912330947816371917724609375"}, + {1e-194, chars_format::fixed, 697, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000017" + "6343371831543992660529331249185298255229001705015959684231029580212400332902037339673698649737631720455462" + "5910920399179244126456387732458513685519893326744325567768730070677375691037372424068209140690258384890157" + "0812158566609402684872101257877000459234848581841332394474165042630322607916852572002294225345981624610040" + "6093441541393561643994585254187290522693700416075659393155611833054255732280703963248447610881111888441082" + "9937732489961321031245178314605936975567601621150970458984375"}, + {1e-193, chars_format::fixed, 693, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000480" + "5180224387695644229409161828017957376083947247790048749103987907490802172975899088259381781571298328731633" + "1161975010588893463664495300641850848540573715094261230983808460260354633499880965167566224794664492225960" + "9267217500311011092803480391035282075388553424230703368854037755431549015704682886857569371057021863723165" + "9809706493785998128592079965973372309596073809737814181944872999327386928246655488274067792911966978292755" + "019478367894242808178173476107986061833798885345458984375"}, + {1e-192, chars_format::fixed, 689, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000009671" + "9746341033047924279945207658819170941542355639987717999738952760776803233047401946952142362832681274148446" + "4464086406632169822254840623325932378871984313358701162582208658389109905017317243443259334219935215449851" + "1002284350581858833354288906597260482526615935385104474338574820368657141625343537929727592125508519195818" + "0101722215466088304260438445341196418505852481077665825668804693831142969500408575374144874733239285038351" + "50271772586917651270965734511264599859714508056640625"}, + {1e-191, chars_format::fixed, 684, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000018851" + "0357855833015531025794646529958154524177425806481491858204348633867528277859442439788230874411644952170619" + "9131483254429935252790204362740541493259888534929589981916101691322081929877050966151039961826707463454641" + "6741093946270621848431129126061569167008852264601912170614591946835899662997200669632733816370447080531648" + "8942705712963170749170163883692391024336694671584274157166851729395050702462426671605977617515280816610694" + "100232507863790232249812106601893901824951171875"}, + {1e-190, chars_format::fixed, 683, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000188510" + "3578558330155310257946465299581545241774258064814918582043486338675282778594424397882308744116449521706199" + "1314832544299352527902043627405414932598885349295899819161016913220819298770509661510399618267074634546416" + "7410939462706218484311291260615691670088522646019121706145919468358996629972006696327338163704470805316488" + "9427057129631707491701638836923910243366946715842741571668517293950507024624266716059776175152808166106941" + "00232507863790232249812106601893901824951171875"}, + {1e-189, chars_format::fixed, 680, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000006868701" + "0541071139230656093540176722762965457494938625473226728286317716385087153277173881747423691735233733148042" + "5748697404066355343545355987256216235425947807033983401593202256625288686656870585123412526520006572271804" + "4141366438132039890265548760463198829352880172135701718813195122032958508119088381804076349661547184462886" + "7039623564970661696806504831291784719866596066739998086041666310153325768908848417267914059823251822529949" + "34771483936941649517393670976161956787109375"}, + {1e-188, chars_format::fixed, 676, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000999999999999999949080671" + "1279003288045276597589197780889341620892794798955285494428273252676646716781421147290166903654612945415195" + "5078046974915631886855486755712556527769214532540188976339227580242590091726130570768133012817820279334756" + "0646340915643877770992219901281217210305112634689385411635940697697772079614369773304090393811332693476932" + "3938981202020534253102253223653472329934866867898003995860822205975125145100134012595485199148434350246549" + "6900111219247264671139419078826904296875"}, + {1e-187, chars_format::fixed, 672, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000128707188" + "1492476103179615777559014858175085297229769087030091149268886719695666186429239047216709109600659513166516" + "3628080766478567127744590846990129685640217526999996641220515727814150383088373870166622140883511824725097" + "0555800973380223745459626764016284546910801475787890257671463097680723471218439304969827153068735740912975" + "3828502407864450344157439379278055932581168942990583236239373502727958352272540979734347453266124169414530" + "431510002017603255808353424072265625"}, + {1e-186, chars_format::fixed, 669, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000099999999999999991080664251" + "5685669468166560948917555793244147559468553310665132212910400110089477566451949283126449927134114187432183" + "0719031387629699130410335832068266329233020044430256366953318471929512377650648101901549205550173745210388" + "0079740662739100885997423620897046367353212695574324315721733045559191910988527898835500091400816510831330" + "7265977876098778431415879508887237194091685205737139920295311939652273102386196136871547144152751022960767" + "812719495850615203380584716796875"}, + {1e-185, chars_format::fixed, 666, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000999999999999999992457903555" + "0769427190702384102556300240495118897318633583737556367331737795832250047243022343589628622320989428185675" + "1684524093544768480387939423346907509683442248860244031547895168991055402371205817132869681781293468428540" + "4623559195896101408764988363096856487570543454179869245160513905576261519452200195257172428300492294700692" + "0812148381353584395426909360018948994676885850720938739740504097541214386575670652490890549595435599083970" + "146239153109490871429443359375"}, + {1e-184, chars_format::fixed, 663, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000577789123865" + "8996131979318037932608940869380335394251139654065437579139271517822295534218459534497321031048674712767507" + "2798922673429902214156043054783028835660356925063883211596635287478007030629856556267717828049382814882687" + "6844812507001754477975900863979707388012766529291701155150606655637354471057371607789096397343540438105999" + "3340440776462244604414007769362106376849128854005703691704118583560010767466380795112258360497758946650037" + "614745087921619415283203125"}, + {1e-183, chars_format::fixed, 660, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000552210532137" + "9546439214826804069721900978370182573992966007135384544817566702224594847878706556164931847776503680389028" + "0359772830441282859347239977318658445996093758947288947024884094240446250956178483165010198602243104048612" + "3574360685691621657150870775707933781669009392972941923142325757375630498290758836151987058726464452267365" + "1652752061211240842980764340240132327849125765686506562648564970417172460986413789495760688630365820017686" + "928622424602508544921875"}, + {1e-182, chars_format::fixed, 655, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000047327550973547" + "8783436775096642748159071507167196688077104339505775420776854830232832433234175872115546179446984382178638" + "4633359535274742851177924337279623744820741523005234821780591186721454952300881467747446641155111398712239" + "4733721931523601552373810669792458604359341129281976258333183965739618681171246295431685904936163953014677" + "0540766239402050039082150229448774803628559851829308461626616625635206319283291187972190217081447372038383" + "0368518829345703125"}, + {1e-181, chars_format::fixed, 654, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000473275509735478" + "7834367750966427481590715071671966880771043395057754207768548302328324332341758721155461794469843821786384" + "6333595352747428511779243372796237448207415230052348217805911867214549523008814677474466411551113987122394" + "7337219315236015523738106697924586043593411292819762583331839657396186811712462954316859049361639530146770" + "5407662394020500390821502294487748036285598518293084616266166256352063192832911879721902170814473720383830" + "368518829345703125"}, + {1e-180, chars_format::fixed, 647, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000100000000000000002057206575616014" + "5924821392633743555743200414935928126274000788854023831209463312122670238802527341716045037053793207408927" + "7055554752311772624638861626007860251046700554453379680027103035857978894785962064514606187019596944752529" + "8004828377487516462014480565606130025102292156833976111083107487029791428250521772812410162639151759642079" + "7228903793667940914646586013840582754068644705219304713639779589857802525503308044285688538366230204701423" + "64501953125"}, + {1e-179, chars_format::fixed, 646, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000001000000000000000020572065756160145" + "9248213926337435557432004149359281262740007888540238312094633121226702388025273417160450370537932074089277" + "0555547523117726246388616260078602510467005544533796800271030358579788947859620645146061870195969447525298" + "0048283774875164620144805656061300251022921568339761110831074870297914282505217728124101626391517596420797" + "2289037936679409146465860138405827540686447052193047136397795898578025255033080442856885383662302047014236" + "4501953125"}, + {1e-178, chars_format::fixed, 641, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000009999999999999999520780235996475509" + "3254973303558352972348764236955198179673189484181712023085285155160314218797407492929839348350198064433601" + "7773388789574064216571704500430381961642408451391728506514300696193707641236920632565789008124705298570090" + "6437455381356119707601934668842017337283098214303282216076742448367510473280588070058851533740829256847796" + "9874021853305965111138747038612487557305308227775860414375917728095925426923251677635562373325228691101074" + "21875"}, + {1e-177, chars_format::fixed, 640, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000099999999999999995207802359964755093" + "2549733035583529723487642369551981796731894841817120230852851551603142187974074929298393483501980644336017" + "7733887895740642165717045004303819616424084513917285065143006961937076412369206325657890081247052985700906" + "4374553813561197076019346688420173372830982143032822160767424483675104732805880700588515337408292568477969" + "8740218533059651111387470386124875573053082277758604143759177280959254269232516776355623733252286911010742" + "1875"}, + {1e-176, chars_format::fixed, 632, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000999999999999999995914210579815611727" + "6035951784059463761038168120327142621839870096294152571635463170860840212881656728162453684883657736746979" + "5392411220011109485295768465799357318010252751732178407974254554038401714686355665848001217909837164713986" + "2650009648925666366345267957544784796861339452365270710650645131895517841440516521543696105241114955830918" + "044906619383659773914538196977917810231720960348114221212241330138947859040854382328689098358154296875"}, + {1e-175, chars_format::fixed, 631, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000009999999999999999959142105798156117276" + "0359517840594637610381681203271426218398700962941525716354631708608402128816567281624536848836577367469795" + "3924112200111094852957684657993573180102527517321784079742545540384017146863556658480012179098371647139862" + "6500096489256663663452679575447847968613394523652707106506451318955178414405165215436961052411149558309180" + "44906619383659773914538196977917810231720960348114221212241330138947859040854382328689098358154296875"}, + {1e-174, chars_format::fixed, 630, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000099999999999999999591421057981561172760" + "3595178405946376103816812032714262183987009629415257163546317086084021288165672816245368488365773674697953" + "9241122001110948529576846579935731801025275173217840797425455403840171468635566584800121790983716471398626" + "5000964892566636634526795754478479686133945236527071065064513189551784144051652154369610524111495583091804" + "4906619383659773914538196977917810231720960348114221212241330138947859040854382328689098358154296875"}, + {1e-173, chars_format::fixed, 624, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000001000000000000000040802466047507705981738" + "7500126561010283827794411329843068069293894692053641056977569406164586017945941785256987144241461175064587" + "9228256918309821296094530706786339470126146992930030675499927138062607864511092939560033079687847803826280" + "8188478558890667044712256648069091058093906931208992098479034123455647143387065578043861947100769387366612" + "9072197794446443422556352914330611026469713197725405241789164989540950045920908451080322265625"}, + {1e-172, chars_format::fixed, 623, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000010000000000000000408024660475077059817387" + "5001265610102838277944113298430680692938946920536410569775694061645860179459417852569871442414611750645879" + "2282569183098212960945307067863394701261469929300306754999271380626078645110929395600330796878478038262808" + "1884785588906670447122566480690910580939069312089920984790341234556471433870655780438619471007693873666129" + "072197794446443422556352914330611026469713197725405241789164989540950045920908451080322265625"}, + {1e-171, chars_format::fixed, 618, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000099999999999999998334549904886182533644575" + "1824815903073465707275884638649689563143274274027219743913926814938840349574834806876025069429390711572561" + "0244967709339121567716762527719200148820105916795361790584957049666459647214626236474966227897344883106057" + "1957662836356214942355379586519448624820508680799184525163927169525584371276921407873336343892803511244586" + "6451272840010194777314250133539987861677276049891804898805958146112971007823944091796875"}, + {1e-170, chars_format::fixed, 617, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000999999999999999983345499048861825336445751" + "8248159030734657072758846386496895631432742740272197439139268149388403495748348068760250694293907115725610" + "2449677093391215677167625277192001488201059167953617905849570496664596472146262364749662278973448831060571" + "9576628363562149423553795865194486248205086807991845251639271695255843712769214078733363438928035112445866" + "451272840010194777314250133539987861677276049891804898805958146112971007823944091796875"}, + {1e-169, chars_format::fixed, 614, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000010000000000000000201179579279951889494332706" + "6503362976461263346164357987024467754083903008282675437345564791148767438721478692254625644809586029974902" + "9663114719064671442799974430463814164864567756829347660592137388682880170721357697310494206530360280015299" + "6738639009092824083236212756882922294542672246320073171719768219062755043188870164156569825065005551127725" + "431170669760491634397165652335013242654640323869852380767042632214725017547607421875"}, + {1e-168, chars_format::fixed, 610, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000100000000000000004953592503130187983982328573" + "7207811117530174410250732846688769058890834927312362741078714289605534237118770959763206063059979281499433" + "7961897471866831796989517572988535911477486186638825422692833263124125301283449371615913399670578555429637" + "5165233078698879613948160408333701445361155794413696959814092322662093755862536656149181736927290924629741" + "65924485487326723400897105883120943360144183831295094933011569082736968994140625"}, + {1e-167, chars_format::fixed, 607, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000001000000000000000002467177666011174415199261621" + "7291209528621088924792880843782226300079471761353893528818080846169584772723965002160866791173889106987871" + "8326970219146440066058803436279050909465923972862673158584982610516075507716535339983592646834173469870122" + "7190842982658575634105078651265358454660624644729525716278361114068244375044006328156081588837142632657619" + "03183803243905809949267802061486222313380078929867522674612700939178466796875"}, + {1e-166, chars_format::fixed, 604, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000010000000000000000401221755582437387548984809141" + "1207308459656130669644389422665977311425737707696806343933304860781908514949606785378218627146120733930447" + "3605738187639423891279012711640974737130742876831380132596626270962175118109020409240257267314631374111246" + "7600332261227520384062989969226832538213712842554808217684108041103989219090945148246702131857559235694570" + "80326445473949491970304074772647913438294864363342639990150928497314453125"}, + {1e-165, chars_format::fixed, 600, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000100000000000000000999817724445768728313910548020" + "5711379208999375322719246347910058629209216323705094993313077415130598847816413743625780548203370026890641" + "3369093906994053067262300325606022231535403582676612951991861383210390853540868017167926281363140337832311" + "0468103135141091496532272039682341449277397263471673737637105207667528441702396548979931370686529083998664" + "1535715046036377988203231446419361194699604311608709394931793212890625"}, + {1e-164, chars_format::fixed, 597, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000999999999999999961799779942400004928324104785955" + "5326505889002851247598097419105154531321591184843454796811235068290207651289671673755313909908303270285097" + "0678331559537557144177774603200620079001632856571115536328192609522143294619302967924920545100628925840605" + "6117519717265117459760677955447671567018274041494202349107448822717464429711086554005874540640278472833939" + "4705463613753956168418821244536776049471882288344204425811767578125"}, + {1e-163, chars_format::fixed, 594, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000009999999999999999232410621007538590444721042305553" + "8966769282101296639226045711088091227051335430774586877556038018775829897900990637533206522079856713880440" + "2682455512151783214215916809129382899197104804151043494558556314567311019878012049214467302760093638546017" + "2667104099484794553110440023470772264137151669161743272965662195512084398607834053711232076602685791117778" + "1841141364660971975280266688113073314525536261498928070068359375"}, + {1e-162, chars_format::fixed, 591, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000099999999999999995408803637407077575155370467487550" + "4054009684430693086299884950588544959829965649025557500010881500768271898975715175491525836823975050568645" + "9631435787308137962653801874308372118524838133991329895372521390906085609300261532422578213570501344340483" + "4735785580178985887075116482755269889736226657859674474527230208421323174102592427892427404427649408950714" + "0119371829638437424066232939168230586801655590534210205078125"}, + {1e-161, chars_format::fixed, 587, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000001000000000000000028120774630031375848549545741243778" + "5811701566332371519945117658868634141898328680968104386920846519922069068936562958742313152849540388028298" + "3679493852048719318409229535432756222539343559454777748612211794652265945486000290895506598974572456532294" + "0911725849734827414048354780693832858115305768410546622166900163424732253607969657646833365895490036057512" + "218471468907359835098791478458224446512758731842041015625"}, + {1e-160, chars_format::fixed, 582, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000009999999999999999886366475601857224634850971725140321" + "6668457145854698362404413106109357186457035125880887139544297133944156933742103167012172677243191174459843" + "7514213299328048160779171128466042026508303756993223913391462556701806908281949753383202185641409828643157" + "6829951574975108576231868056852280790470182005098522878231145211785986468975454556614683943653588645639804" + "3228499463060121588142692417022772133350372314453125"}, + {1e-159, chars_format::fixed, 581, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000099999999999999998863664756018572246348509717251403216" + "6684571458546983624044131061093571864570351258808871395442971339441569337421031670121726772431911744598437" + "5142132993280481607791711284660420265083037569932239133914625567018069082819497533832021856414098286431576" + "8299515749751085762318680568522807904701820050985228782311452117859864689754545566146839436535886456398043" + "228499463060121588142692417022772133350372314453125"}, + {1e-158, chars_format::fixed, 577, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000001000000000000000064446171534289376962808838424475145282" + "4968949939521068953419899265716691290743835877718806049949981927510174453927389420121367164743956964027241" + "3320572395360660554036964212016080836775688509796677303432090515784379771181181208118068952169412306834148" + "2158086593158645959509317701749254858130330879185409763182954291175171781559923473369139703210713831561461" + "76302524197776477876686840318143367767333984375"}, + {1e-157, chars_format::fixed, 574, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000009999999999999999431509331757235297638908524213373642971" + "9717733730390966126541574180671350586793186143106586971175522745590047263800730698748080600642137351586554" + "2817844552713093922452020273570757392631880130378197605747547628184774624032518164415083313239251988047403" + "4974000401221846213932984753153735603509222882524146590734613110527319671367749743279471626477550034318145" + "98176263775286543022957630455493927001953125"}, + {1e-156, chars_format::fixed, 571, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000100000000000000004018712386257620752302524122384758908543" + "6951462622467448526675089618678004433093242503717657938349599691994050841792615007205534380800831825352415" + "1281480734279032167861177508427981727318841044490579486062336519119930942559532978275682800031488522826664" + "2594928255135369188611385646247859857444916099881074236105569515068381867529377356090119509812206593553233" + "00554463372691316180862486362457275390625"}, + {1e-155, chars_format::fixed, 567, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000001000000000000000014310806346082160120589404209844862475239" + "6783625375187052570059302021541381490502075510105144112577670957024299874498662019456068142996429428225825" + "1206713457062073829702509023692063137188304469682852384391737891806816886303726225090562219944302181992964" + "5002817903575273088029754823250588381508661599771786817697192724563324931688760432113453111357515934540934" + "8876643207404413260519504547119140625"}, + {1e-154, chars_format::fixed, 563, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000009999999999999999729086983196916842766920649874404998989240" + "4140240160071602553527513571595209458135162667908476791083494163583662050146811352972270789774073077485032" + "6337632398968772714476833267516565195881349093261444224211342127788288234371605328245369713513693079550795" + "4884744671298030110951922004857720728038625613094579483235888427705349419207394260530659325342359329547026" + "192130942945368587970733642578125"}, + {1e-153, chars_format::fixed, 561, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000100000000000000003915207116191644562692780774328748002102906" + "0538619069498795888323242017049781731521105609372197265926388142386007618905054995137278140784270051221823" + "5048358736119176465540444185630710774840620589687716157410009922360972402366564045017736910006190641569547" + "1142396544255513419049239690947816673154102284918413932135505363899892554957303574968541865148393549267424" + "8735056607984006404876708984375"}, + {1e-152, chars_format::fixed, 557, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000001000000000000000065649420298806350167022104845626272069871068" + "1931060570119040295424845374888565915888971814871690079629667450057624658798315813031062380016857617704223" + "7171726346917561938492887898167343012514724525170257235286453801522084258267683500433528199538945799941840" + "0603764767655983428612475478960604302612407465074615720461537986384519001106479628333213098383136507862900" + "543841533362865447998046875"}, + {1e-151, chars_format::fixed, 553, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000009999999999999999384621444417348083745694787544000702354294314" + "5156851694898495169012043938129726326349763533530464618738945243093920040090396770713137135809035113714781" + "0686592154337349796683468972382137447938351093633980615919518275427551321778768592039645220491567555592692" + "5407280071719070856360983454449039614697613088003290047504131189336704337459490108237997532669716349573718" + "61673891544342041015625"}, + {1e-150, chars_format::fixed, 551, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000100000000000000000629535823217296399721087933638737788046497104" + "7055204982541793211381291705328905037044059949632305801030675137511608656332028291651300234674570141560909" + "9029501889177602437476876440041602091164279779372295422901954699839733275910706785973181671037757922997368" + "4101427943008113522349948331994414341250592547994858646301304824078966967156534016215353732892623384032049" + "216330051422119140625"}, + {1e-149, chars_format::fixed, 547, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000999999999999999979162072715997701748154319103592454822450755208" + "8605297691190566028769507757162483276254901039012419555741860548826453541608040578433286840408825397956702" + "1640697508559606492200017535535110464519722421592997174192459216140452526614984397424898845889249761691912" + "0899770526811515388539028169928070635408078808100753777973076517941975301318808426812023704144394287141039" + "96753692626953125"}, + {1e-148, chars_format::fixed, 544, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000009999999999999999357488158901172821496638227311205779296280098677" + "4904942764267802927000528833599759255577835073153980284380352267630407068684528375057420302698237697128671" + "7937832954133378800900225517256537491228018261850658864691187645294441546276508577338302627079226124410768" + "7165562815801236526022999299023541920515241331442214819091217613856643089243576502656019044934510020539164" + "54315185546875"}, + {1e-147, chars_format::fixed, 540, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000099999999999999997047942135082161782845621982909807944388620614063" + "8233700823780888155561678240198180611547753267301525028109548441377097466012303024777787838102507230793516" + "7131466593035276977801853877321912144033830251141091664779112581825085221751768948668512925298433184174504" + "6312767776523704135168252192292734673676787310944731876028556663071310283991827150273934421420563012361526" + "4892578125"}, + {1e-146, chars_format::fixed, 538, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000001000000000000000026048390087948554914524055185862081866699320177260" + "9285379135454623724519020869191215007787973245202805229991896654939403126795338635035235358947156460043947" + "5364858757576593278812118049323717148396664633562964933666903880341568361304620291252915725083082882814125" + "7641911661418463350694669155844394233157857053808657722147655022791173104815265482159247767413035035133361" + "81640625"}, + {1e-145, chars_format::fixed, 534, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000009999999999999999149104526136946807423883844723340770210730921040155" + "3886373401631393867145439347723972231670921008276953321990721726025461934507218605205214031029881558263867" + "2644731031289462772249594971145257322799403892588683619153477561601360737307586821173427808855808006759668" + "6134438690556193526703746900102992403778891650859797984234782386350325750212775233194406609982252120971679" + "6875"}, + {1e-144, chars_format::fixed, 527, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000099999999999999995047459260545592047747179910066303857167348508745406" + "3559471465641437481197655378641891424577406702773049949277600695034041212099922836522986897312201317600618" + "5659651255219331773285023382146698543729214743617926487584571589819440575439439704072612302878146696017771" + "0255356261172943203814891907720963806747888947723673401521480956499754455535367014817893505096435546875"}, + {1e-143, chars_format::fixed, 526, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000999999999999999950474592605455920477471799100663038571673485087454063" + "5594714656414374811976553786418914245774067027730499492776006950340412120999228365229868973122013176006185" + "6596512552193317732850233821466985437292147436179264875845715898194405754394397040726123028781466960177710" + "255356261172943203814891907720963806747888947723673401521480956499754455535367014817893505096435546875"}, + {1e-142, chars_format::fixed, 521, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000010000000000000000415187909843646941992853405491851801412104911250566867" + "8055933591983443414040584623144434071999004998205277646578228806936119169092900476835416006646879910320012" + "4324406757057414330505197912365935201126483700951764547204928276237357349018272445874789153751726477574834" + "6743781153712352196509454885002561528285839188544891300604311457078665625886060297489166259765625"}, + {1e-141, chars_format::fixed, 520, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000100000000000000004151879098436469419928534054918518014121049112505668678" + "0559335919834434140405846231444340719990049982052776465782288069361191690929004768354160066468799103200124" + "3244067570574143305051979123659352011264837009517645472049282762373573490182724458747891537517264775748346" + "743781153712352196509454885002561528285839188544891300604311457078665625886060297489166259765625"}, + {1e-140, chars_format::fixed, 517, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000999999999999999983250504021863079017324674022131009536706807260991007919" + "0630989416603842570455469741304743887367077682909670653460685267564047526850570913191119037376109415479269" + "7446676657790264922336770584044347107527772388993044240635592788964547377071914116211147955201007706428611" + "705619304048118348964858527426057820477947621912585655923333405326047795824706554412841796875"}, + {1e-139, chars_format::fixed, 514, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000010000000000000000298651335918643711628932072437743460203097543522435510082" + "6008852419962416373378637998156745373938153930041458569504416084023430328021523294715043392256147086968485" + "4418758961511994248831871060836855116242505539397726245213806567814973968761784932253618911783197472724962" + "913730905084412418686107855057037903823030327416475360191583376945345662534236907958984375"}, + {1e-138, chars_format::fixed, 511, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000100000000000000006715683724786540487934803382108901520719211202524558547961" + "7680190231016089084377904662441905741520556107972601974224668107297943756341746249581258070521894327091158" + "3803528683994702692032032371515623490143308589715533163001095103505741271958999483673303996016937994760395" + "997611967669955619161259196942056630578736140489704009581828358932398259639739990234375"}, + {1e-137, chars_format::fixed, 508, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000999999999999999977656748473462923959856450035533809158674453610040702748359" + "4601917556754682429582454283432209363869157698333629041914506663452066136381143237472801154168780293160288" + "7252749186952782031200601399626499036195009199436834569298244826513374695402390969442282883730261527345555" + "328849672879601816408256456500304089424972613098230311834413441829383373260498046875"}, + {1e-136, chars_format::fixed, 504, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000010000000000000000015234388133035855383875390450151974382791625207620048100283" + "1885801576630046733682122410287021775588652667049332286697531726593651835908283730300757011154904205606340" + "7947592277512473349658606837677619335918296521617671188216331487917848351857520007198181041140264394144632" + "34788340564922983129412593279040680454942957577912920896778814494609832763671875"}, + {1e-135, chars_format::fixed, 499, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000100000000000000003971014335704864406403728146018541868564669677791608810869849" + "2724031911632026342542497318309067946239737609901992747814758739104365912632458992171497623022662440118664" + "6197529302879182099027553839378256942674237652165919805905446443724105883912965076387445672805029872471588" + "429020886143684988326241212501922610289550874540509539656341075897216796875"}, + {1e-134, chars_format::fixed, 498, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000001000000000000000039710143357048644064037281460185418685646696777916088108698492" + "7240319116320263425424973183090679462397376099019927478147587391043659126324589921714976230226624401186646" + "1975293028791820990275538393782569426742376521659198059054464437241058839129650763874456728050298724715884" + "29020886143684988326241212501922610289550874540509539656341075897216796875"}, + {1e-133, chars_format::fixed, 493, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000010000000000000000641496342650454815204531166058943602839619187024947014198474039" + "9828224464422410620411217618993206806579261112354147155200128193178834690421687323641123036577948591402888" + "9935748064202920459010453544357763610865201119901287710041064503330419772913467920705224010255686832775799" + "714045712057246057262961864454953175851414926000870764255523681640625"}, + {1e-132, chars_format::fixed, 487, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000099999999999999998594326335945560165992244413962574716935320854384313882417088792" + "0681179005191262486944630971166878222416607214585555592825144884036557234591653828687686867804939368863225" + "3507311800918466789942308034551417118526062293115049276525200843869593517391950184311224750470481588015379" + "157829994532549384186718988143383057831670157611370086669921875"}, + {1e-131, chars_format::fixed, 486, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000999999999999999985943263359455601659922444139625747169353208543843138824170887920" + "6811790051912624869446309711668782224166072145855555928251448840365572345916538286876868678049393688632253" + "5073118009184667899423080345514171185260622931150492765252008438695935173919501843112247504704815880153791" + "57829994532549384186718988143383057831670157611370086669921875"}, + {1e-130, chars_format::fixed, 482, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000010000000000000000860474181186106478814017048964495719560523575469171389466368285000" + "1054302315330244491908885118632122193789221804912802057060030515884801171193467057382254521235894667527601" + "9552791754021117414995911810497742588727689266426889109856940634588690842264333341972440114105661488593017" + "5592715863635705393630548343253394705243408679962158203125"}, + {1e-129, chars_format::fixed, 477, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000099999999999999992588077050396257392703488768553145229733371914199873875069132357308" + "3560594414038512159956243155212422703836212507412136177871631363182768319485323556005461360487622175994949" + "4382130945420159417717384419280934109333533385517507781179706383817482773534294846124960068136571893048547" + "17236173389759146257205202346085570752620697021484375"}, + {1e-128, chars_format::fixed, 478, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000001000000000000000054014088595681033090528341454265948024308629865933458907447727514625" + "1465374054496583672623295800994620910810169407848436920545703997149630334448011702591284419846817754198055" + "2987602212529712035107713678381275316882208085186144350914663534730232928215257050045129264726062873538499" + "086450376880826074188490792948869056999683380126953125"}, + {1e-127, chars_format::fixed, 473, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000010000000000000000283874249773373412578296507005190488789136477211465148760964467263168" + "2934880716742912580111229512205421363205605411030218921798259240852409065290564740839502568526985553483431" + "1543436608640884635209397812668884721728332391839310430911435954191518896407953322860235480539940849278936" + "1388376929984378449489668128080666065216064453125"}, + {1e-126, chars_format::fixed, 470, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000099999999999999994638210139863752739319384028852897161364970485782829397577234820373021" + "4345292664295553125216983194349005795381216751769380140901609027919473718839974286048093527151711902926412" + "8791629553409303444326331050085056910283373197684845805587978962369256620251783545688525470337396137395610" + "1670625040700457475395523943006992340087890625"}, + {1e-125, chars_format::fixed, 468, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000001000000000000000011986360261597378484902488618121033425860859148482870696031627021799506" + "3481042668024112659332327365131720647210866385956274025663957324031672660925127839256392536462268084527318" + "1058187798089377705404487113680891558833337742514526084090834260060024953139832920195889383870060217106111" + "44114044801511909099644981324672698974609375"}, + {1e-124, chars_format::fixed, 464, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000009999999999999999332612496260455571748521106226105592512074739996973786317204924401163559" + "4473034379418149707373328591617254151324277440413068856865168702273500938946658647258438185280892182114909" + "2879170812937657908350751782845046116338108237152444502375806964190744523934359642231277672747416053260997" + "1652195923752515227533876895904541015625"}, + {1e-123, chars_format::fixed, 459, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000100000000000000005922142664292847127093271541542731793065289023775416593461830777080939659" + "0128620607349127248932406871371778645792957110525430965042159631426620114340502397472176722277540431681441" + "2035022816674485414613427491872372715305389379409506440278639824459525358767109377954635382725138417411847" + "59115412816754542291164398193359375"}, + {1e-122, chars_format::fixed, 458, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000001000000000000000059221426642928471270932715415427317930652890237754165934618307770809396590" + "1286206073491272489324068713717786457929571105254309650421596314266201143405023974721767222775404316814412" + "0350228166744854146134274918723727153053893794095064402786398244595253587671093779546353827251384174118475" + "9115412816754542291164398193359375"}, + {1e-121, chars_format::fixed, 452, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000009999999999999999786069133521234062494411283480245923758078238453978220607637059591658505770" + "7372344692184393680496946004426688096084017843279583135225716186398925042119620554398800581762452094073827" + "5930141680382536270564530728234932207383289436306713370547490762619408233606108634384584336451257113864699" + "0220877341926097869873046875"}, + {1e-120, chars_format::fixed, 451, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000099999999999999997860691335212340624944112834802459237580782384539782206076370595916585057707" + "3723446921843936804969460044266880960840178432795831352257161863989250421196205543988005817624520940738275" + "9301416803825362705645307282349322073832894363067133705474907626194082336061086343845843364512571138646990" + "220877341926097869873046875"}, + {1e-119, chars_format::fixed, 448, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000001000000000000000013002439022866900658610872163449755279208385506136528780275002732133763542643" + "8129020374848166460094222106719006225434027923201550599488822107117523601001807666818581738553095234381916" + "9425474153069848529657060407593031859636613162145711766919388084154269466416907644493801583795988818792466" + "190643608570098876953125"}, + {1e-118, chars_format::fixed, 444, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000009999999999999999854860184862721051312750771111096249564879361775455634046659653137594331701877" + "4133794497211277317745247754788489318082330470069609379550593333375080897700058852677628887067865727825908" + "2964292612168713510938703403131829625904775369662119971831386263835125817720722796655072328597668729344150" + "05147457122802734375"}, + {1e-117, chars_format::fixed, 441, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000100000000000000002951229134482377797501234919485383347284065510329110800564042518315836176611745" + "5840492992438969708604050546310060160950484891830439640907977138553290774088873574907304846088043134151261" + "0290108818163483679497444796094119786429453725341162876113775881672359720380886339077819435772198630729690" + "19412994384765625"}, + {1e-116, chars_format::fixed, 437, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000999999999999999994291273057982439700022531527858466659758479962694672324860857287639218889373684" + "2384545761780124836827921475699265768487407389229629645863420947113053364182455364024920657605344494375185" + "7723626609824048234091161842734609645240937023651923498738452870154784858419596410561425159357895608991384" + "5062255859375"}, + {1e-115, chars_format::fixed, 431, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000010000000000000000506449023169285809400062397950510535606899601876489694141081659204698474921637188" + "0171604219554404355680558555414031141153138357492564670095816485848203669125039801019251428454834497950650" + "0075651247213099315044196318651507957266973912674519185773423846648846110424235789082558767404407262802124" + "0234375"}, + {1e-114, chars_format::fixed, 430, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000100000000000000005064490231692858094000623979505105356068996018764896941410816592046984749216371880" + "1716042195544043556805585554140311411531383574925646700958164858482036691250398010192514284548344979506500" + "0756512472130993150441963186515079572669739126745191857734238466488461104242357890825587674044072628021240" + "234375"}, + {1e-113, chars_format::fixed, 428, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000999999999999999978512256865477520152827093213044542327497665499707469139871610870446642880592474560" + "7413656931036469180683849343467311711593584204134135942495950700958603418041751523359401738105586857619588" + "4123825652814958815449661778058123104924120719575541183563806091956927685204803424312558490782976150512695" + "3125"}, + {1e-112, chars_format::fixed, 424, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000009999999999999999496591986848970958379554345802419378342207476245308690301769888504373610359639768643" + "5149509212748826257350468642929907501054835860852035156616715474138980202568600919331052951544416826414234" + "747306025416969739861673743221054056214812500424990226052374662785854342317293230735231190919876098632812" + "5"}, + {1e-111, chars_format::fixed, 421, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000100000000000000008815387795168313254933939601769443940194995342537854955671117454648191389018076580702" + "2873976813049808948929876432973136524836655272007916446621148442848392962433896277932822131993852253661517" + "5460023692731730268401631043898549001949195234763482210724552280700638817734215990640223026275634765625"}, + {1e-110, chars_format::fixed, 417, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0001000000000000000051221963480540189426303672967707105650555498545152501416302058360870033129056288755643" + "8396075635667299154831590986600534543597761617445658118334167891261020459677930553668774342472698564564055" + "265511385789128593139162584753710767157743183492959649261329346803250928132911212742328643798828125"}, + {1e-109, chars_format::fixed, 414, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0009999999999999999921309003267114804294465160877273716483243707367908243916474724638910239112571254734373" + "8461676439380346196841136375912054159676958532320479617304614317043657962202789926136591785273802092822629" + "542916946809659127192130501219695914914199014601235509201726525674303047708235681056976318359375"}, + {1e-108, chars_format::fixed, 411, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0100000000000000003940375084977444762693224159171115885010927298348016601137114118147423128549645609920254" + "8609403732144624780209551679866871807174846460293608701342659934968952698640024145775130968363489350769680" + "326744756749605705517267782736253202447852708639242959309800795608680346049368381500244140625"}, + {1e-107, chars_format::fixed, 407, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "1000000000000000001585470431324073868943661188524129088681351186128692715592206207407665386104991598590417" + "4152922614716945307710013432698076388506375506225586787054465233430542373503242382477604758631146127349724" + "08684525827194158640497566304817959803162658537732665475772364516160450875759124755859375"}, + {1e-106, chars_format::fixed, 405, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "9999999999999999410762217618034758561619325434248814703966763103663354423459102489011599470786483976110075" + "0471390839500613166932080471450496953190329514887864248590506474161669928680438620396768786251503187943973" + "978815635133568363766522001452157157165857837531619534132687476812861859798431396484375"}, + {1e-105, chars_format::fixed, 401, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009" + "9999999999999996527992122961171506127462400146458051771054626067127835164442863230376212268918567800277146" + "8945249625681491309993020136626037259396997338350656973721648182191714512212327021484803062754864221652807" + "34670414167907363879815853064012686426021044028278339510507066734135150909423828125"}, + {1e-104, chars_format::fixed, 398, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099" + "9999999999999926554002081118532333094317668601062042008354340183369696766799218859598641712326029375949126" + "1751036566009158849174754612323288954070738351954337932151146772716901515596217134574187423711324741118992" + "53027677129649636985456904850438396097599136336242509059957228600978851318359375"}, + {1e-103, chars_format::fixed, 395, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000999" + "9999999999999575347373999130785156385627348918768225701078765736966206689027496149294264938137482774070003" + "9122043186537622497791120154729558659901263771961233762034148120770964008178595987932619867811787214462572" + "79688487691888384356182054821891706276881794934752178960479795932769775390625"}, + {1e-102, chars_format::fixed, 391, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009999" + "9999999999993275014914487744156960316668185922499812070504746143508154721992501066479866862357315624070101" + "8327011653807952929562609295322233645461595700269502096160038058894049264054562741800233632529553718444548" + "0159114575574772754891649767885510036169449676890508271753787994384765625"}, + {1e-101, chars_format::fixed, 388, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000" + "0000000000051716172769048498910573067736415953755477838627200290469331297483111135012229536413737838938008" + "2154286693356587616358521047943278225065973931151126122309651732088851891652690019248658513534821641142117" + "9001055338801084410855940271152519915887069146265275776386260986328125"}, + {1e-100, chars_format::fixed, 381, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000" + "0000000000199918998026028836196477607885341594201826030059365956992555434676176762886132929895827460748109" + "1185079852827053974965402226843604196126360835628314127871794272492894246908066589163059300043457860230145" + "025079449986855914338755579873208034769049845635890960693359375"}, + {1e-99, chars_format::fixed, 380, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000" + "0000000001999189980260288361964776078853415942018260300593659569925554346761767628861329298958274607481091" + "1850798528270539749654022268436041961263608356283141278717942724928942469080665891630593000434578602301450" + "25079449986855914338755579873208034769049845635890960693359375"}, + {1e-98, chars_format::fixed, 378, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099999999" + "9999999938777761008502108474878975001956765921826799815501537087861613187954421956155709823745708345025814" + "6914492613566917209869310021530837652091193736796956409650326860009509268385256465483316166327596918109804" + "658117462243096325476277019816961910692043602466583251953125"}, + {1e-97, chars_format::fixed, 375, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000" + "0000000362347275614230386486015179458496381198537636440236074215343295235503271551048096227501536207679312" + "8266838165330935538744052169263360047450615280383040626852473271454077752909394064704527719494238439954420" + "779105059740904555554141808215717901475727558135986328125"}, + {1e-96, chars_format::fixed, 370, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009999999999" + "9999990629210549086179841697146068732580852248447853932751364330404107608912022317267655741089325311177582" + "7709554591152509520094495639900486787323780638317385863868670429754309941669548515427063112032127614792551" + "8186447666098282116564632815425284206867218017578125"}, + {1e-95, chars_format::fixed, 368, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099999999999" + "9999989455383616020992165214697332781059464800821006333013661371425682464292659609241719228019888411715318" + "8832039109328908751959523136496795471204988242457189228485502920176491976211594796627201250946919570336116" + "40984498321327311742834353935904800891876220703125"}, + {1e-94, chars_format::fixed, 364, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000999999999999" + "9999561900723659573146659174026745989590878742840195308136541444718399142236850346156545011692342917395224" + "1374418302073833315536964415000244320181154987438569925659834711231349524051509396845731986966622013718771" + "2048605636727671708285924978554248809814453125"}, + {1e-93, chars_format::fixed, 360, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009999999999999" + "9990296557436585543066704173122150759848479182484064729364258134569183411332571521395093820818769977824806" + "2608618361294265890437372950519076931911910880252541509475235263776371431484076857636831509625041102909425" + "751177341368247653008438646793365478515625"}, + {1e-92, chars_format::fixed, 358, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099999999999999" + "9988124771166018445065242805546453775449723759526860925661082347528762289900626256676638945862246916287024" + "4255218164047735143290068696924629637513332708655939048722142214357695259337042349496128856909275577546838" + "2706261394332614145241677761077880859375"}, + {1e-91, chars_format::fixed, 355, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000" + "0221884498860836508245232352764322462356965334013463784684827482635335605305906737669192409320657715026091" + "5228319844897656388566043736181737648710222711081486303100580449952876371355518587472543611728213969278705" + "7416722973357536830008029937744140625"}, + {1e-90, chars_format::fixed, 351, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009999999999999999" + "9493750691003148621709889149244946960691831430175801622256242767571654402661914009469500487621068733014137" + "0874092813614124240337583226333846298487062114638096503972538048521373489674425134635395776198474142304473" + "133435749332420527935028076171875"}, + {1e-89, chars_format::fixed, 348, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000003" + "8539015671714949588977841546821912212963464861099395816034940616223770432973593970253782565578822006089821" + "1286618301940276728541498431074946002713261085209229472257643701331978478836423187794603219323390230766079" + "866953077726066112518310546875"}, + {1e-88, chars_format::fixed, 345, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000999999999999999933" + "8953946436746374964683614163280499584551035186800847917009095590064270577229046689127161110952987838135405" + "1769619040225943481438996285073867598909252320213948341802119826481938818152107683370541217106330922348433" + "887236751616001129150390625"}, + {1e-87, chars_format::fixed, 342, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000176" + "1029146610688717047594552072313976206179259261553361116813440478030175792345610998556927468211736163456500" + "6468702235674025246197867056143415414879391457166254464215735759522155943218070390309339980083880305983257" + "130719721317291259765625"}, + {1e-86, chars_format::fixed, 338, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000008458" + "2208924052686909682012804239211604947143851763892666741914281399401518083897262843851805551572223891384597" + "4867117024056975916441904204672069555088860611876713011713657552843701525756652355924822273003371719823917" + "37401485443115234375"}, + {1e-85, chars_format::fixed, 334, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000999999999999999977427" + "1409913394073269523051506134966563305818371265181778238664788088419018271914182705997561604444442804732518" + "5789655563502183893007303754914049050169469475340436204235776206482741760351348313945463175400618638377636" + "6710662841796875"}, + {1e-84, chars_format::fixed, 328, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000345765" + "1055545315643774148256588054462892608157826645123858015864019047369716410120204300084916904592673962596952" + "6597967246048907044268975105442605172196756851680062911162025115250209588661084447736016045382712036371231" + "0791015625"}, + {1e-83, chars_format::fixed, 327, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000003457651" + "0555453156437741482565880544628926081578266451238580158640190473697164101202043000849169045926739625969526" + "5979672460489070442689751054426051721967568516800629111620251152502095886610844477360160453827120363712310" + "791015625"}, + {1e-82, chars_format::fixed, 320, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000999999999999999961425317" + "5133875575759313354743387232240038419096073369208121046736219849991328566788143274501180360291919104909106" + "6016038393425985809817503337589839395411736588716579909256841070903584767215477313584415242075920104980468" + "75"}, + {1e-81, chars_format::fixed, 319, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000009999999999999999614253175" + "1338755757593133547433872322400384190960733692081210467362198499913285667881432745011803602919191049091066" + "0160383934259858098175033375898393954117365887165799092568410709035847672154773135844152420759201049804687" + "5"}, + {1e-80, chars_format::fixed, 318, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000099999999999999996142531751" + "3387557575931335474338723224003841909607336920812104673621984999132856678814327450118036029191910490910660" + "160383934259858098175033375898393954117365887165799092568410709035847672154773135844152420759201049804687" + "5"}, + {1e-79, chars_format::fixed, 313, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000999999999999999998878728350" + "9251441931781307852081357833240286199608034515093483045050512125248538747074082304321530967363408159620203" + "17497336959217417624670274052264414348782613129120472130243434116803058486766531132161617279052734375"}, + {1e-78, chars_format::fixed, 312, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000009999999999999999988787283509" + "2514419317813078520813578332402861996080345150934830450505121252485387470740823043215309673634081596202031" + "7497336959217417624670274052264414348782613129120472130243434116803058486766531132161617279052734375"}, + {1e-77, chars_format::fixed, 306, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000099999999999999992696817954285" + "2977888064283788338863669429270136082147712570640533209564082812219258592693132229048327051034591863408815" + "8396037764475242813674295968331307044624992795434233715246019613687167293392121791839599609375"}, + {1e-76, chars_format::fixed, 305, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000999999999999999926968179542852" + "9778880642837883388636694292701360821477125706405332095640828122192585926931322290483270510345918634088158" + "396037764475242813674295968331307044624992795434233715246019613687167293392121791839599609375"}, + {1e-75, chars_format::fixed, 299, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000009999999999999999576500137009637" + "6884491285850700308643802436708920370749451782251562897192482294336146830490746237302878343191414548305654" + "690326776267877450997656448381172603908118869629750857797034768736921250820159912109375"}, + {1e-74, chars_format::fixed, 298, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000099999999999999995765001370096376" + "8844912858507003086438024367089203707494517822515628971924822943361468304907462373028783431914145483056546" + "90326776267877450997656448381172603908118869629750857797034768736921250820159912109375"}, + {1e-73, chars_format::fixed, 295, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000999999999999999996922761423345581" + "2696790341468932915818260911891993040154102154531258139625966702131490879797610286470009004866665380846522" + "46616646076525732436683076683433657106032411976404006281882175244390964508056640625"}, + {1e-72, chars_format::fixed, 291, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000009999999999999999655045632454401313" + "2986609363498112746678471190920282679869630110312834033237768873180446152192210415242692562864969406216797" + "1937539358324754468588202386067562686157439433287663632654584944248199462890625"}, + {1e-71, chars_format::fixed, 287, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000099999999999999991523544616079141142" + "6165388815921664882718505061208463251954038143132382524027318361653059189379824961108565855822743626193132" + "450968609203189719636403510281811614357483364301515393890440464019775390625"}, + {1e-70, chars_format::fixed, 285, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000999999999999999995666033496229363272" + "0865165264168050172244360179994449267416588791259150173879109538953029214474716672179414923458643237528756" + "2948180779769331795928171153901332923741307467935257591307163238525390625"}, + {1e-69, chars_format::fixed, 280, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000009999999999999999634937985620541825337" + "1806544221874896342206363528305225682661058472850202004367391699840542862041298477419123773661604472897835" + "80765283598918786301304310361326432854411905282177031040191650390625"}, + {1e-68, chars_format::fixed, 278, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000100000000000000006644495035141476089649" + "7108911652528335589655259975508800554765126800223611545232435068477405667000768594192052486210537605449626" + "573422560856484483414528645350838331751219811849296092987060546875"}, + {1e-67, chars_format::fixed, 275, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000999999999999999942903568204182066861162" + "2567483319930889885453103445609480809796763141577017433622133843910332110954280101910747866971461536841043" + "771495196989574594736115142890042761791846714913845062255859375"}, + {1e-66, chars_format::fixed, 271, + "0." + "0000000000000000000000000000000000000000000000000000000000000000009999999999999999758479367767774519372515" + "5065855080248808217463024614704207398912977710861102386093916681406586600351883259133550656738387415491029" + "61556640076313325245227492388266909983940422534942626953125"}, + {1e-65, chars_format::fixed, 268, + "0." + "0000000000000000000000000000000000000000000000000000000000000000099999999999999992313694706062483581550868" + "0402200707449532367718403609291685174004236387156175062977914937213618150573516750918354775003521401620825" + "74583311375313564306477331911082728765904903411865234375"}, + {1e-64, chars_format::fixed, 265, + "0." + "0000000000000000000000000000000000000000000000000000000000000000999999999999999965305738833546928712902976" + "6072807834803722132478776394919962261046689643200541013469164386954164329297694232520762089078036042524020" + "73697828855693148231154054883518256247043609619140625"}, + {1e-63, chars_format::fixed, 262, + "0." + "0000000000000000000000000000000000000000000000000000000000000010000000000000000665108390885599516666492874" + "9947296595438784251861531197274275114570714951336379343252004225173231058477583685300765027808089056818526" + "05731451018311606304678207379765808582305908203125"}, + {1e-62, chars_format::fixed, 255, + "0." + "0000000000000000000000000000000000000000000000000000000000000100000000000000003952281235388981221231693792" + "8221717294650341379751932644543677801430300128481208876359081303381409876774126559425932579340280883976410" + "7397274361943573239841498434543609619140625"}, + {1e-61, chars_format::fixed, 254, + "0." + "0000000000000000000000000000000000000000000000000000000000001000000000000000039522812353889812212316937928" + "2217172946503413797519326445436778014303001284812088763590813033814098767741265594259325793402808839764107" + "397274361943573239841498434543609619140625"}, + {1e-60, chars_format::fixed, 251, + "0." + "0000000000000000000000000000000000000000000000000000000000009999999999999999704334639131342552092261230258" + "1852072572233846426168156435405004008156570318179241258702127560310406428974820785673527056432009240175516" + "617821216414085938595235347747802734375"}, + {1e-59, chars_format::fixed, 245, + "0." + "0000000000000000000000000000000000000000000000000000000000100000000000000002570494266573870081169877494774" + "1077980864740796653882428505752249160553243421325583604669297825748714277250889112093117585088725661479625" + "017591388314031064510345458984375"}, + {1e-58, chars_format::fixed, 244, + "0." + "0000000000000000000000000000000000000000000000000000000001000000000000000025704942665738700811698774947741" + "0779808647407966538824285057522491605532434213255836046692978257487142772508891120931175850887256614796250" + "17591388314031064510345458984375"}, + {1e-57, chars_format::fixed, 242, + "0." + "0000000000000000000000000000000000000000000000000000000009999999999999999549574498624050104405337804876802" + "0469428246581119186532239157342153944919191472312470207982938076356229324745710523507339850487508903231770" + "318598137237131595611572265625"}, + {1e-56, chars_format::fixed, 238, + "0." + "0000000000000000000000000000000000000000000000000000000100000000000000003985444122640543888593177383975325" + "2638181195793746285849728588014684774053722646075385187191514745744674051575513464726422405495775969086480" + "47246970236301422119140625"}, + {1e-55, chars_format::fixed, 235, + "0." + "0000000000000000000000000000000000000000000000000000000999999999999999994576045832271877048386177385314293" + "7347685398030505949018155135650072674607584205016875299317099552474042893790290755781429918314096028097992" + "53009259700775146484375"}, + {1e-54, chars_format::fixed, 230, + "0." + "0000000000000000000000000000000000000000000000000000010000000000000000307987621475787265184226545488654608" + "5749866459560714766014597312474927273512980096064565573955378764522009913621658689676652276290269583114422" + "857761383056640625"}, + {1e-53, chars_format::fixed, 229, + "0." + "0000000000000000000000000000000000000000000000000000100000000000000003079876214757872651842265454886546085" + "7498664595607147660145973124749272735129800960645655739553787645220099136216586896766522762902695831144228" + "57761383056640625"}, + {1e-52, chars_format::fixed, 221, + "0." + "0000000000000000000000000000000000000000000000000001000000000000000007616223705782342857599309164192713898" + "9513847283709538948144790065143893595321174669124552225337349106179808916165796528474629667471162974834442" + "138671875"}, + {1e-51, chars_format::fixed, 220, + "0." + "0000000000000000000000000000000000000000000000000010000000000000000076162237057823428575993091641927138989" + "5138472837095389481447900651438935953211746691245522253373491061798089161657965284746296674711629748344421" + "38671875"}, + {1e-50, chars_format::fixed, 219, + "0." + "0000000000000000000000000000000000000000000000000100000000000000000761622370578234285759930916419271389895" + "1384728370953894814479006514389359532117466912455222533734910617980891616579652847462966747116297483444213" + "8671875"}, + {1e-49, chars_format::fixed, 215, + "0." + "0000000000000000000000000000000000000000000000000999999999999999936399465612583852251549992142478035242294" + "1409762213666477161290752968276296960337741640632342481329099202736442053573995281112729571759700775146484" + "375"}, + {1e-48, chars_format::fixed, 209, + "0." + "0000000000000000000000000000000000000000000000009999999999999999743817365956230472414429612207258638591780" + "0431070114651283524903861286055227527841029653896133378731029238417615800926796509884297847747802734375"}, + {1e-47, chars_format::fixed, 208, + "0." + "0000000000000000000000000000000000000000000000099999999999999997438173659562304724144296122072586385917800" + "431070114651283524903861286055227527841029653896133378731029238417615800926796509884297847747802734375"}, + {1e-46, chars_format::fixed, 205, + "0." + "0000000000000000000000000000000000000000000001000000000000000022999043453913216828505961640883084488789349" + "378835264740187722591657382693176711544546107892003424942768685657057403659564442932605743408203125"}, + {1e-45, chars_format::fixed, 202, + "0." + "0000000000000000000000000000000000000000000009999999999999999841051979672810811588555613047573079851002733" + "243279701583057437492217649804555650371464527474677148367876444723378881462849676609039306640625"}, + {1e-44, chars_format::fixed, 199, + "0." + "0000000000000000000000000000000000000000000099999999999999995299012157797537262313524103585668678214901248" + "072213449280016067527327081027864783122672863183914675200281152456227573566138744354248046875"}, + {1e-43, chars_format::fixed, 195, + "0." + "0000000000000000000000000000000000000000001000000000000000077450427135198206766016522111459171593954055855" + "14547715482249297106724749098631665490562509435341909114214331566472537815570831298828125"}, + {1e-42, chars_format::fixed, 192, + "0." + "0000000000000000000000000000000000000000010000000000000000376231293568868998402945121672663764541764419753" + "30007502975346636413174953159862631328378226348851942617557142511941492557525634765625"}, + {1e-41, chars_format::fixed, 189, + "0." + "0000000000000000000000000000000000000000100000000000000000576129113423785429971690421191214034235435087147" + "76317814976295686899169228986994124665807319451982237978882039897143840789794921875"}, + {1e-40, chars_format::fixed, 183, + "0." + "0000000000000000000000000000000000000000999999999999999929292879399880145002330645119061973673981332222231" + "93004995110860615409765027190768719826674537642929863068275153636932373046875"}, + {1e-39, chars_format::fixed, 182, + "0." + "0000000000000000000000000000000000000009999999999999999292928793998801450023306451190619736739813322222319" + "3004995110860615409765027190768719826674537642929863068275153636932373046875"}, + {1e-38, chars_format::fixed, 177, + "0." + "0000000000000000000000000000000000000099999999999999996191940173987276763588211566534471145248715351257676" + "27887442908835027138732593388233127473796457707067020237445831298828125"}, + {1e-37, chars_format::fixed, 175, + "0." + "0000000000000000000000000000000000001000000000000000066324273227849160063246821413449472343705781641680227" + "552882474171018285786819118458879085409307663212530314922332763671875"}, + {1e-36, chars_format::fixed, 171, + "0." + "0000000000000000000000000000000000009999999999999999410384274422774891504091745157237592742434278867560698" + "35916654225999599490547382896199479773713392205536365509033203125"}, + {1e-35, chars_format::fixed, 169, + "0." + "0000000000000000000000000000000000100000000000000000785754519458238030392258619451080624462334988938228728" + "496509153000956551522564186296193611269700340926647186279296875"}, + {1e-34, chars_format::fixed, 165, + "0." + "0000000000000000000000000000000000999999999999999927674603891816510919706492179966349880167443486230826346" + "10696676519760628561173110284698850591666996479034423828125"}, + {1e-33, chars_format::fixed, 160, + "0." + "0000000000000000000000000000000010000000000000000559673099762419019344522426032374800632968937312731638482" + "799663888967410529939883190309046767652034759521484375"}, + {1e-32, chars_format::fixed, 159, + "0." + "0000000000000000000000000000000100000000000000005596730997624190193445224260323748006329689373127316384827" + "99663888967410529939883190309046767652034759521484375"}, + {1e-31, chars_format::fixed, 148, + "0." + "0000000000000000000000000000001000000000000000083336420607585985350931336026868654502364509783548862515410" + "206308619223136702203191816806793212890625"}, + {1e-30, chars_format::fixed, 147, + "0." + "0000000000000000000000000000010000000000000000833364206075859853509313360268686545023645097835488625154102" + "06308619223136702203191816806793212890625"}, + {1e-29, chars_format::fixed, 149, + "0." + "0000000000000000000000000000099999999999999994320657417510427825855837769787704137433831559589728533970337" + "7919640114868116143043152987957000732421875"}, + {1e-28, chars_format::fixed, 146, + "0." + "0000000000000000000000000000999999999999999971232543461600619677032969363675363999943554433427600774844743" + "5974359365218333550728857517242431640625"}, + {1e-27, chars_format::fixed, 138, + "0." + "0000000000000000000000000010000000000000000384948697491918390813719893615913383013961276435003578191840212" + "24145908490754663944244384765625"}, + {1e-26, chars_format::fixed, 137, + "0." + "0000000000000000000000000100000000000000003849486974919183908137198936159133830139612764350035781918402122" + "4145908490754663944244384765625"}, + {1e-25, chars_format::fixed, 136, + "0." + "0000000000000000000000001000000000000000038494869749191839081371989361591338301396127643500357819184021224" + "145908490754663944244384765625"}, + {1e-24, chars_format::fixed, 132, + "0." + "0000000000000000000000009999999999999999237004995517028246313000618984814088269170693649761857968449874078" + "94222997128963470458984375"}, + {1e-23, chars_format::fixed, 129, + "0." + "0000000000000000000000099999999999999996043469801489930925532307868667658625875036801410392084399347822909" + "47623550891876220703125"}, + {1e-22, chars_format::fixed, 125, + "0." + "0000000000000000000001000000000000000048596774326570872352978318978345012095150284772010484957149856199976" + "0568141937255859375"}, + {1e-21, chars_format::fixed, 122, + "0." + "0000000000000000000009999999999999999075374522278963713967299345116755307569104179593599823760996514465659" + "8567962646484375"}, + {1e-20, chars_format::fixed, 119, + "0." + "0000000000000000000099999999999999994515327145420957165172950370278739244710771577606678306437970604747533" + "7982177734375"}, + {1e-19, chars_format::fixed, 114, + "0." + "0000000000000000000999999999999999975245926835260131855729159055676881799265554029432223615003749728202819" + "82421875"}, + {1e-18, chars_format::fixed, 110, + "0." + "0000000000000000010000000000000000715424240546219245085280561849232477261706364402016333770006895065307617" + "1875"}, + {1e-17, chars_format::fixed, 109, + "0." + "0000000000000000100000000000000007154242405462192450852805618492324772617063644020163337700068950653076171" + "875"}, + {1e-16, chars_format::fixed, 104, + "0." + "00000000000000009999999999999999790977867240346035618411149408467364363417573258630000054836273193359375"}, + {1e-15, chars_format::fixed, 101, + "0.00000000000000100000000000000007770539987666107923830718560119501514549256171449087560176849365234375"}, + {1e-14, chars_format::fixed, 99, + "0.000000000000009999999999999999988193093545598986971343290729163921781719182035885751247406005859375"}, + {1e-13, chars_format::fixed, 95, + "0.00000000000010000000000000000303737455634003709136034716842278413651001756079494953155517578125"}, + {1e-12, chars_format::fixed, 92, + "0.00000000000099999999999999997988664762925561536725284350612952266601496376097202301025390625"}, + {1e-11, chars_format::fixed, 89, + "0.00000000000999999999999999939496969281939810930172340963650867706746794283390045166015625"}, + {1e-10, chars_format::fixed, 86, + "0.00000000010000000000000000364321973154977415791655470655996396089904010295867919921875"}, + {1e-09, chars_format::fixed, 82, + "0.0000000010000000000000000622815914577798564188970686927859787829220294952392578125"}, + {1e-08, chars_format::fixed, 78, + "0.000000010000000000000000209225608301284726753266340892878361046314239501953125"}, + {1e-07, chars_format::fixed, 73, "0.0000000999999999999999954748111825886258685613938723690807819366455078125"}, + {1e-06, chars_format::fixed, 72, "0.000000999999999999999954748111825886258685613938723690807819366455078125"}, + {1e-05, chars_format::fixed, 69, "0.000010000000000000000818030539140313095458623138256371021270751953125"}, + {1e-04, chars_format::fixed, 66, "0.000100000000000000004792173602385929598312941379845142364501953125"}, + {1e-03, chars_format::fixed, 60, "0.001000000000000000020816681711721685132943093776702880859375"}, + {1e-02, chars_format::fixed, 59, "0.01000000000000000020816681711721685132943093776702880859375"}, + {1e-01, chars_format::fixed, 55, "0.1000000000000000055511151231257827021181583404541015625"}, + {1e+00, chars_format::fixed, 0, "1"}, + {1e+01, chars_format::fixed, 0, "10"}, + {1e+02, chars_format::fixed, 0, "100"}, + {1e+03, chars_format::fixed, 0, "1000"}, + {1e+04, chars_format::fixed, 0, "10000"}, + {1e+05, chars_format::fixed, 0, "100000"}, + {1e+06, chars_format::fixed, 0, "1000000"}, + {1e+07, chars_format::fixed, 0, "10000000"}, + {1e+08, chars_format::fixed, 0, "100000000"}, + {1e+09, chars_format::fixed, 0, "1000000000"}, + {1e+10, chars_format::fixed, 0, "10000000000"}, + {1e+11, chars_format::fixed, 0, "100000000000"}, + {1e+12, chars_format::fixed, 0, "1000000000000"}, + {1e+13, chars_format::fixed, 0, "10000000000000"}, + {1e+14, chars_format::fixed, 0, "100000000000000"}, + {1e+15, chars_format::fixed, 0, "1000000000000000"}, + {1e+16, chars_format::fixed, 0, "10000000000000000"}, + {1e+17, chars_format::fixed, 0, "100000000000000000"}, + {1e+18, chars_format::fixed, 0, "1000000000000000000"}, + {1e+19, chars_format::fixed, 0, "10000000000000000000"}, + {1e+20, chars_format::fixed, 0, "100000000000000000000"}, + {1e+21, chars_format::fixed, 0, "1000000000000000000000"}, + {1e+22, chars_format::fixed, 0, "10000000000000000000000"}, + {1e+23, chars_format::fixed, 0, "99999999999999991611392"}, + {1e+24, chars_format::fixed, 0, "999999999999999983222784"}, + {1e+25, chars_format::fixed, 0, "10000000000000000905969664"}, + {1e+26, chars_format::fixed, 0, "100000000000000004764729344"}, + {1e+27, chars_format::fixed, 0, "1000000000000000013287555072"}, + {1e+28, chars_format::fixed, 0, "9999999999999999583119736832"}, + {1e+29, chars_format::fixed, 0, "99999999999999991433150857216"}, + {1e+30, chars_format::fixed, 0, "1000000000000000019884624838656"}, + {1e+31, chars_format::fixed, 0, "9999999999999999635896294965248"}, + {1e+32, chars_format::fixed, 0, "100000000000000005366162204393472"}, + {1e+33, chars_format::fixed, 0, "999999999999999945575230987042816"}, + {1e+34, chars_format::fixed, 0, "9999999999999999455752309870428160"}, + {1e+35, chars_format::fixed, 0, "99999999999999996863366107917975552"}, + {1e+36, chars_format::fixed, 0, "1000000000000000042420637374017961984"}, + {1e+37, chars_format::fixed, 0, "9999999999999999538762658202121142272"}, + {1e+38, chars_format::fixed, 0, "99999999999999997748809823456034029568"}, + {1e+39, chars_format::fixed, 0, "999999999999999939709166371603178586112"}, + {1e+40, chars_format::fixed, 0, "10000000000000000303786028427003666890752"}, + {1e+41, chars_format::fixed, 0, "100000000000000000620008645040778319495168"}, + {1e+42, chars_format::fixed, 0, "1000000000000000044885712678075916785549312"}, + {1e+43, chars_format::fixed, 0, "10000000000000000139372116959414099130712064"}, + {1e+44, chars_format::fixed, 0, "100000000000000008821361405306422640701865984"}, + {1e+45, chars_format::fixed, 0, "999999999999999929757289024535551219930759168"}, + {1e+46, chars_format::fixed, 0, "9999999999999999931398190359470212947659194368"}, + {1e+47, chars_format::fixed, 0, "100000000000000004384584304507619735463404765184"}, + {1e+48, chars_format::fixed, 0, "1000000000000000043845843045076197354634047651840"}, + {1e+49, chars_format::fixed, 0, "9999999999999999464902769475481793196872414789632"}, + {1e+50, chars_format::fixed, 0, "100000000000000007629769841091887003294964970946560"}, + {1e+51, chars_format::fixed, 0, "999999999999999993220948674361627976461708441944064"}, + {1e+52, chars_format::fixed, 0, "9999999999999999932209486743616279764617084419440640"}, + {1e+53, chars_format::fixed, 0, "99999999999999999322094867436162797646170844194406400"}, + {1e+54, chars_format::fixed, 0, "1000000000000000078291540404596243842305360299886116864"}, + {1e+55, chars_format::fixed, 0, "10000000000000000102350670204085511496304388135324745728"}, + {1e+56, chars_format::fixed, 0, "100000000000000009190283508143378238084034459715684532224"}, + {1e+57, chars_format::fixed, 0, "1000000000000000048346692115553659057528394845890514255872"}, + {1e+58, chars_format::fixed, 0, "9999999999999999438119489974413630815797154428513196965888"}, + {1e+59, chars_format::fixed, 0, "99999999999999997168788049560464200849936328366177157906432"}, + {1e+60, chars_format::fixed, 0, "999999999999999949387135297074018866963645011013410073083904"}, + {1e+61, chars_format::fixed, 0, "9999999999999999493871352970740188669636450110134100730839040"}, + {1e+62, chars_format::fixed, 0, "100000000000000003502199685943161173046080317798311825604870144"}, + {1e+63, chars_format::fixed, 0, "1000000000000000057857959942726969827393378689175040438172647424"}, + {1e+64, chars_format::fixed, 0, "10000000000000000213204190094543968723012578712679649467743338496"}, + {1e+65, chars_format::fixed, 0, "99999999999999999209038626283633850822756121694230455365568299008"}, + {1e+66, chars_format::fixed, 0, "999999999999999945322333868247445125709646570021247924665841614848"}, + {1e+67, chars_format::fixed, 0, "9999999999999999827367757839185598317239782875580932278577147150336"}, + {1e+68, chars_format::fixed, 0, "99999999999999995280522225138166806691251291352861698530421623488512"}, + {1e+69, chars_format::fixed, 0, "1000000000000000072531436381529235126158374409646521955518210155479040"}, + {1e+70, chars_format::fixed, 0, "10000000000000000725314363815292351261583744096465219555182101554790400"}, + {1e+71, chars_format::fixed, 0, "100000000000000004188152556421145795899143386664033828314342771180699648"}, + {1e+72, chars_format::fixed, 0, "999999999999999943801810948794571024057224129020550531544123892056457216"}, + {1e+73, chars_format::fixed, 0, "9999999999999999830336967949613257980309080240684656321838454199566729216"}, + {1e+74, chars_format::fixed, 0, "99999999999999995164818811802792197885196090803013355167206819763650035712"}, + {1e+75, chars_format::fixed, 0, "999999999999999926539781176481198923508803215199467887262646419780362305536"}, + {1e+76, chars_format::fixed, 0, "10000000000000000470601344959054695891559601407866630764278709534898249531392"}, + {1e+77, chars_format::fixed, 0, "99999999999999998278261272554585856747747644714015897553975120217811154108416"}, + {1e+78, chars_format::fixed, 0, "1000000000000000008493621433689702976148869924598760615894999102702796905906176"}, + {1e+79, chars_format::fixed, 0, "9999999999999999673560075006595519222746403606649979913266024618633003221909504"}, + {1e+80, chars_format::fixed, 0, + "100000000000000000026609864708367276537402401181200809098131977453489758916313088"}, + {1e+81, chars_format::fixed, 0, + "999999999999999921281879895665782741935503249059183851809998224123064148429897728"}, + {1e+82, chars_format::fixed, 0, + "9999999999999999634067965630886574211027143225273567793680363843427086501542887424"}, + {1e+83, chars_format::fixed, 0, + "100000000000000003080666323096525690777025204007643346346089744069413985291331436544"}, + {1e+84, chars_format::fixed, 0, + "1000000000000000057766609898115896702437267127096064137098041863234712334016924614656"}, + {1e+85, chars_format::fixed, 0, + "10000000000000000146306952306748730309700429878646550592786107871697963642511482159104"}, + {1e+86, chars_format::fixed, 0, + "100000000000000001463069523067487303097004298786465505927861078716979636425114821591040"}, + {1e+87, chars_format::fixed, 0, + "999999999999999959416724456350362731491996089648451439669739009806703922950954425516032"}, + {1e+88, chars_format::fixed, 0, + "9999999999999999594167244563503627314919960896484514396697390098067039229509544255160320"}, + {1e+89, chars_format::fixed, 0, + "99999999999999999475366575191804932315794610450682175621941694731908308538307845136842752"}, + {1e+90, chars_format::fixed, 0, + "999999999999999966484112715463900049825186092620125502979674597309179755437379230686511104"}, + {1e+91, chars_format::fixed, 0, + "10000000000000000795623248612804971431562261401669105159386439973487930752201761134141767680"}, + {1e+92, chars_format::fixed, 0, + "100000000000000004337729697461918607329029332495193931179177378933611681288968111094132375552"}, + {1e+93, chars_format::fixed, 0, + "1000000000000000043377296974619186073290293324951939311791773789336116812889681110941323755520"}, + {1e+94, chars_format::fixed, 0, + "10000000000000000202188791271559469885760963232143577411377768562080040049981643093586978275328"}, + {1e+95, chars_format::fixed, 0, + "100000000000000002021887912715594698857609632321435774113777685620800400499816430935869782753280"}, + {1e+96, chars_format::fixed, 0, + "1000000000000000049861653971908893017010268485438462151574892930611988399099305815384459015356416"}, + {1e+97, chars_format::fixed, 0, + "10000000000000000735758738477112498397576062152177456799245857901351759143802190202050679656153088"}, + {1e+98, chars_format::fixed, 0, + "99999999999999999769037024514370800696612547992403838920556863966097586548129676477911932478685184"}, + {1e+99, chars_format::fixed, 0, + "999999999999999967336168804116691273849533185806555472917961779471295845921727862608739868455469056"}, + {1e+100, chars_format::fixed, 0, + "10000000000000000159028911097599180468360808563945281389781327557747838772170381060813469985856815104"}, + {1e+101, chars_format::fixed, 0, + "99999999999999997704951326524533662844684271992415000612999597473199345218078991130326129448151154688"}, + {1e+102, chars_format::fixed, 0, + "999999999999999977049513265245336628446842719924150006129995974731993452180789911303261294481511546880"}, + {1e+103, chars_format::fixed, 0, + "10000000000000000019156750857346687362159551272651920111528035145993793242039887559612361451081803235328"}, + {1e+104, chars_format::fixed, 0, + "10000000000000000019156750857346687362159551272651920111528035145993793242039887559612361451081803235328" + "0"}, + {1e+105, chars_format::fixed, 0, + "99999999999999993825830082528197854032702736447212447829441621253887149182459971363682052750390825530163" + "2"}, + {1e+106, chars_format::fixed, 0, + "1000000000000000091035999050368435010460453995175486557154545737484090289535133415215418009754161219056435" + "2"}, + {1e+107, chars_format::fixed, 0, + "9999999999999999688138404702992698343537126906127968940664421175279152513667064539525400239539588480525926" + "4"}, + {1e+108, chars_format::fixed, 0, + "1000000000000000033998991713002824594943974719712898047713430714837875271723200833292741616380733445921308" + "672"}, + {1e+109, chars_format::fixed, 0, + "9999999999999999818508707188399807864717650964328171247958398369899072554380053298205803424393137676263358" + "464"}, + {1e+110, chars_format::fixed, 0, + "1000000000000000023569367514170255833249532795056881863129912539268281668466161732598309361592449510262314" + "10688"}, + {1e+111, chars_format::fixed, 0, + "9999999999999999568197726416418157584051044772583782817953962156228826076211114881539429309474323220447488" + "90112"}, + {1e+112, chars_format::fixed, 0, + "9999999999999999301199346926304397284673331501389768492615896861647229832830913903761963586894254467577228" + "034048"}, + {1e+113, chars_format::fixed, 0, + "1000000000000000015559416129466843024268201396921061433369770580430833781164755703264985389915047447676206" + "28086784"}, + {1e+114, chars_format::fixed, 0, + "1000000000000000015559416129466843024268201396921061433369770580430833781164755703264985389915047447676206" + "280867840"}, + {1e+115, chars_format::fixed, 0, + "1000000000000000015559416129466843024268201396921061433369770580430833781164755703264985389915047447676206" + "2808678400"}, + {1e+116, chars_format::fixed, 0, + "1000000000000000015559416129466843024268201396921061433369770580430833781164755703264985389915047447676206" + "28086784000"}, + {1e+117, chars_format::fixed, 0, + "1000000000000000050555427725995033814228237030803003279020481474722232763977085405824233377105062219252417" + "113236701184"}, + {1e+118, chars_format::fixed, 0, + "9999999999999999665649998943273759183241515094863428494587753284228752052274941196820382078490267674695111" + "155514343424"}, + {1e+119, chars_format::fixed, 0, + "9999999999999999441675524725493338127497287038019000682423203560763798562276031100441194960474173136607361" + "8283536318464"}, + {1e+120, chars_format::fixed, 0, + "9999999999999999800034683473942011816688051928970085181886483118307724146274287254647894349299924397547760" + "75181077037056"}, + {1e+121, chars_format::fixed, 0, + "1000000000000000037340933747145988971939327575449182038102773041037800508067149710137861337142112641505239" + "9029342192009216"}, + {1e+122, chars_format::fixed, 0, + "1000000000000000014405947587245273855831118622428312630137123149354989270691261316268632576257264560805054" + "37183296233537536"}, + {1e+123, chars_format::fixed, 0, + "9999999999999999777099697314041296700579842975949215773920833226624912908898398860778665588415076316847575" + "22070951350501376"}, + {1e+124, chars_format::fixed, 0, + "9999999999999999483531874467312143214394768377282087351960514613084929070487027419252537449089020883885200" + "422613425626021888"}, + {1e+125, chars_format::fixed, 0, + "9999999999999999248677616189928820425446708698348384614392259722252941999757930266031634937628176537515300" + "5841365553228283904"}, + {1e+126, chars_format::fixed, 0, + "9999999999999999248677616189928820425446708698348384614392259722252941999757930266031634937628176537515300" + "58413655532282839040"}, + {1e+127, chars_format::fixed, 0, + "9999999999999999549291066784979473595300225087383524118479625982517885450291174622154390152298057300868772" + "377386949310916067328"}, + {1e+128, chars_format::fixed, 0, + "1000000000000000075174486916518208627471429064352408213482909102357765925242415204664541101097758035428265" + "95503885252632667750400"}, + {1e+129, chars_format::fixed, 0, + "9999999999999999982174435641852414159889288687594125004365433397299404019059046494971157661422685600097771" + "75966751665376232210432"}, + {1e+130, chars_format::fixed, 0, + "1000000000000000059783078246051615185174929025233809070873635949832200820575113093631056034106660140344568" + "1992244323541365884452864"}, + {1e+131, chars_format::fixed, 0, + "9999999999999999120255550095723181391285286496952573018246136855867758157690128277095993909921203475410697" + "4340599870111173348163584"}, + {1e+132, chars_format::fixed, 0, + "9999999999999999908295674023612765636866088499824849119840922265176691516655996362010429339865415703696022" + "53175829982724989462249472"}, + {1e+133, chars_format::fixed, 0, + "1000000000000000022351172359476859933509840930097375956047883642890026486024234359597620351184310059501015" + "2570837624953702918544949248"}, + {1e+134, chars_format::fixed, 0, + "9999999999999999214820364967069931500754982737297246150437511104984830160766032447285726161514508942804936" + "4457837845490532419930947584"}, + {1e+135, chars_format::fixed, 0, + "9999999999999999618296908418149398634492353362767851514454041234551004040556556906761917101645945603687022" + "89580532071091311261383655424"}, + {1e+136, chars_format::fixed, 0, + "1000000000000000058664061270074011975546204286389730438809371354550982135205381560950477535796139358980403" + "0375857007499376802103616864256"}, + {1e+137, chars_format::fixed, 0, + "1000000000000000032841562489204926078987012566359611695512313426258747006898787995544001315627727412683949" + "50478432243557864849063421149184"}, + {1e+138, chars_format::fixed, 0, + "1000000000000000032841562489204926078987012566359611695512313426258747006898787995544001315627727412683949" + "504784322435578648490634211491840"}, + {1e+139, chars_format::fixed, 0, + "1000000000000000032841562489204926078987012566359611695512313426258747006898787995544001315627727412683949" + "5047843224355786484906342114918400"}, + {1e+140, chars_format::fixed, 0, + "1000000000000000059283801240814870037063624887670453288648500744829995778284739806520232965080181245691517" + "92237293382948229697163514582401024"}, + {1e+141, chars_format::fixed, 0, + "1000000000000000016976219238238959704141045173573106739630601035115997744067216908958262325956255112879408" + "454231155599236459402033650892537856"}, + {1e+142, chars_format::fixed, 0, + "1000000000000000050822284840299687970479108944850983978844920802887196171441235227007838837255396019129096" + "0287445781834331294577148468377157632"}, + {1e+143, chars_format::fixed, 0, + "1000000000000000023745432358651105357408657927828682187473464988670237429542020572568177628216083294129345" + "96913384011607579341316989008157343744"}, + {1e+144, chars_format::fixed, 0, + "1000000000000000023745432358651105357408657927828682187473464988670237429542020572568177628216083294129345" + "969133840116075793413169890081573437440"}, + {1e+145, chars_format::fixed, 0, + "9999999999999999890870611821409196126784806260401358945180015464725302399110258148854112806457630061296658" + "928320953898584032761523454337112604672"}, + {1e+146, chars_format::fixed, 0, + "9999999999999999336336672997246224211101969431784618257892600389561987365014342025929851245332505453301777" + "7074930382791057905692427399713177731072"}, + {1e+147, chars_format::fixed, 0, + "9999999999999999779963824056576601743648238894678010807722532449692639392291074924269260494232605139697682" + "68415537077468838432306731146395363835904"}, + {1e+148, chars_format::fixed, 0, + "1000000000000000048976726575150520579572227003530743888745042374590168263593384756161231529247276463793113" + "0646815102767620534329186625852171022761984"}, + {1e+149, chars_format::fixed, 0, + "1000000000000000048976726575150520579572227003530743888745042374590168263593384756161231529247276463793113" + "06468151027676205343291866258521710227619840"}, + {1e+150, chars_format::fixed, 0, + "9999999999999999808355961724373745905731200140303187930911648101541001122036785829762982686162211519627020" + "60266176005440567032331208403948233373515776"}, + {1e+151, chars_format::fixed, 0, + "1000000000000000017177532387217719118039310408430545510773232844520003126278188542008262674286117318272254" + "5959543542834786931126445173006249634549465088"}, + {1e+152, chars_format::fixed, 0, + "1000000000000000046251081359041994740012262723950726884918887272012725537537796509233834198822034251319896" + "62450489690590919397689516441796634752009109504"}, + {1e+153, chars_format::fixed, 0, + "9999999999999999997334030041231537448555390191184366862858401880243696795224237616729197595645671584436693" + "78824028710020392594094129030220133015859757056"}, + {1e+154, chars_format::fixed, 0, + "1000000000000000036947545688058226540980917982984268845192277855215054365934721959721651310970540832744651" + "1753687232667314337003349573404171046192448274432"}, + {1e+155, chars_format::fixed, 0, + "1000000000000000007176231540910168304080614811891603118067127721462506616804883401282666069845761893303865" + "73813296762136260081534229469225952733653677113344"}, + {1e+156, chars_format::fixed, 0, + "9999999999999999833591802231917217145603722750174705363670076144604684175010125545314778769459387417512373" + "88344363105067534507348164573733465510370326085632"}, + {1e+157, chars_format::fixed, 0, + "9999999999999999833591802231917217145603722750174705363670076144604684175010125545314778769459387417512373" + "883443631050675345073481645737334655103703260856320"}, + {1e+158, chars_format::fixed, 0, + "9999999999999999528733545365121100799744618278185808317908538774978595223920578706899569900341651077638731" + "0061494932420984963311567802202010637287727642443776"}, + {1e+159, chars_format::fixed, 0, + "9999999999999999284846939871684207723057334700594690681299308879277724063048941236167402805047462005739816" + "70431418299523701733729688780649419062882836695482368"}, + {1e+160, chars_format::fixed, 0, + "1000000000000000006528407745068226556845664214888626711844884454552051177783818114251033750998886703581634" + "2470187175785193750117648543530356184548650438281396224"}, + {1e+161, chars_format::fixed, 0, + "1000000000000000037745893248228148870661636512820289769330865881201762686375387710504751139196542904784695" + "27765363729011764432297892058199009821165792668120252416"}, + {1e+162, chars_format::fixed, 0, + "9999999999999999378499396381163974664505251594389679853757253159226858588823650024928554969640430609348999" + "79621894213003182527093908649335762989920701551401238528"}, + {1e+163, chars_format::fixed, 0, + "9999999999999999378499396381163974664505251594389679853757253159226858588823650024928554969640430609348999" + "796218942130031825270939086493357629899207015514012385280"}, + {1e+164, chars_format::fixed, 0, + "1000000000000000001783349948587918365145636425603013927107015277701295028477899535620468707992842960998768" + "97036220978235643807646031628623453753183252563447406133248"}, + {1e+165, chars_format::fixed, 0, + "9999999999999998994898934518334849272334583997405404203369513388555203571250442826162875703467631208965785" + "85177704871391229197474064067196498264773607101557544845312"}, + {1e+166, chars_format::fixed, 0, + "9999999999999999404072760505352583023983296100855298230449769143938302256661863838179600254051950569374547" + "392515068357773127490685649548117139715971745147241514401792"}, + {1e+167, chars_format::fixed, 0, + "1000000000000000038608994287419514402794020514913504389544238295685773910164927426701973917545431703435557" + "50902863155030391327289536708508823166797373630632400726786048"}, + {1e+168, chars_format::fixed, 0, + "9999999999999999338604948347429745623719502164303315186116928223077006466996036476256924325958459471709145" + "54599698521475539380813444812793279458505403728617494385000448"}, + {1e+169, chars_format::fixed, 0, + "9999999999999999338604948347429745623719502164303315186116928223077006466996036476256924325958459471709145" + "545996985214755393808134448127932794585054037286174943850004480"}, + {1e+170, chars_format::fixed, 0, + "1000000000000000034419054309312452809177137702974177474706936476750650979626314475538922658147448273184971" + "79085147422915077831721209019419643357959500300321574675254607872"}, + {1e+171, chars_format::fixed, 0, + "9999999999999999539722067296568702117329877137391007098307415531962907132849458132083384777061664123737260" + "01850053663010587168093173889073910282723323583537144858509574144"}, + {1e+172, chars_format::fixed, 0, + "1000000000000000082687162857105802367643627696515223533632653430883267139431135672937273166412217389671719" + "2642523265688348930066834399772699475577180106550229078889679814656"}, + {1e+173, chars_format::fixed, 0, + "1000000000000000014039186255799705217824619705701291360938300429450213045486501081081841332435656868446122" + "85763778101906192989276863139689872767772084421689716760605683089408"}, + {1e+174, chars_format::fixed, 0, + "1000000000000000068957567536844582937679826098352437099093782830596656320642208754566186799616905285426599" + "982929417458880300383900478261195703581718577367397759832385751351296"}, + {1e+175, chars_format::fixed, 0, + "9999999999999999371534524623368764100273307559896873275206250678451924602685103382037576783819090846734548" + "822294900033162112051840457868829614121240178061963384891963422539776"}, + {1e+176, chars_format::fixed, 0, + "1000000000000000007448980502074319891441994938583153872359642541312639852467816160263719876373907058408465" + "60260278464628372543383280977318309056924111623883709653889736043921408"}, + {1e+177, chars_format::fixed, 0, + "1000000000000000007448980502074319891441994938583153872359642541312639852467816160263719876373907058408465" + "602602784646283725433832809773183090569241116238837096538897360439214080"}, + {1e+178, chars_format::fixed, 0, + "1000000000000000052438118447506283719547380015442972461056613724331806183475371886382095683088785761598872" + "4636416932177829345401680187244151732297960592357271816907060120777654272"}, + {1e+179, chars_format::fixed, 0, + "9999999999999999804554977348151415945787638924672627191414598315011400538632827245926943923449798364942214" + "8597943950338419997003168440244384097290815044070304544781216945608327168"}, + {1e+180, chars_format::fixed, 0, + "1000000000000000009248546019891598444566210341657546615907521388633406505708118389308454908642502206536081" + "877044340989143693798086218131232373875663313958712699944969706504756133888"}, + {1e+181, chars_format::fixed, 0, + "9999999999999999171107915076469365246063817042486381462561244058101538598046442622180212564904306224021286" + "256366562347133135483117101991090685868467907010818055540655879490029748224"}, + {1e+182, chars_format::fixed, 0, + "1000000000000000064531198727238395596542107524102891697698359578327358093250202865562715099933745157016453" + "82788895184180192194795092289050635704895322791329123657951217763820802932736"}, + {1e+183, chars_format::fixed, 0, + "9999999999999999465948729515652283389935268682194888565445714403135947064937559828869600251790935293249936" + "66087115356131035228239552737388526279268078143523691759154905886843985723392"}, + {1e+184, chars_format::fixed, 0, + "1000000000000000017356668416969128693522675261749530561236844323121852738547624112492413070031884505939869" + "7631682172475335672600663748292592247410791680053842186513692689376624118857728"}, + {1e+185, chars_format::fixed, 0, + "9999999999999999796170441687537151711071294518668416520676321189574484547855611100361714461103959850786025" + "1139162957211888350975873638026151889477992007905860430885494197722591793250304"}, + {1e+186, chars_format::fixed, 0, + "9999999999999999796170441687537151711071294518668416520676321189574484547855611100361714461103959850786025" + "11391629572118883509758736380261518894779920079058604308854941977225917932503040"}, + {1e+187, chars_format::fixed, 0, + "9999999999999999071569656121801212080692814968920789464627446869617922299624001453201875281811380250249693" + "879805812353226907091680705581859236698853640605134247712274342131878495422251008"}, + {1e+188, chars_format::fixed, 0, + "1000000000000000023093091302697871548929838224851699275430564578154842189679457688865761796867950761110782" + "38543825857419659919011313587350687602971665369018571203143144663564875896666980352"}, + {1e+189, chars_format::fixed, 0, + "1000000000000000023093091302697871548929838224851699275430564578154842189679457688865761796867950761110782" + "385438258574196599190113135873506876029716653690185712031431446635648758966669803520"}, + {1e+190, chars_format::fixed, 0, + "1000000000000000072559171597318778361030342428781137282456834398397210172492068907445206818174324195174062" + "5976868675721161334753163637413771490365780039321792212624518252692320803210995433472"}, + {1e+191, chars_format::fixed, 0, + "1000000000000000072559171597318778361030342428781137282456834398397210172492068907445206818174324195174062" + "59768686757211613347531636374137714903657800393217922126245182526923208032109954334720"}, + {1e+192, chars_format::fixed, 0, + "1000000000000000040900880208761398001286019738266296957960021713442094663491997727554362004538245197373563" + "261847757813447631532786297905940174312186739777303375354598782943738754654264509857792"}, + {1e+193, chars_format::fixed, 0, + "1000000000000000066227513319607302289081477890678169217557471861406187070692054671467037855447108395613962" + "7305190456203824330868103505742897540916997511012040520808812168041334151877325366493184"}, + {1e+194, chars_format::fixed, 0, + "9999999999999999446596743875469617076632787591011823714897111511785435161317813406861937710845650440600452" + "8089686414709538562749489776621177115003729674648080379472553427423904462708600804999168"}, + {1e+195, chars_format::fixed, 0, + "9999999999999999770777647694297191960414651941883788637744473405725817973478542288944188602479099378077566" + "00796112539971931616645685181699233267813951241073670004367049615544210109925082343145472"}, + {1e+196, chars_format::fixed, 0, + "9999999999999999511432924639235132053389160461186216699466583890573511723749959183278387889172340228095875" + "448767138256706948253250552493092635735926276453993770366538373425000777236538229086224384"}, + {1e+197, chars_format::fixed, 0, + "9999999999999999511432924639235132053389160461186216699466583890573511723749959183278387889172340228095875" + "4487671382567069482532505524930926357359262764539937703665383734250007772365382290862243840"}, + {1e+198, chars_format::fixed, 0, + "1000000000000000017535541566019400541537441865177200086145798104936341572305513193378283771523764365204900" + "328030374534281861011105867876227585990799216050325567033999660761493056632508247061001404416"}, + {1e+199, chars_format::fixed, 0, + "1000000000000000097206240488534465344975672848047494185584765763991130052222133923438817750651600776079275" + "6678147673846152604340428430285295728914471221362369950308146488642846313231335560438561636352"}, + {1e+200, chars_format::fixed, 0, + "9999999999999999697331222125103616594745032754550236264824175095034684843555407553419633840470625186802751" + "2415973882408182135734368278484639385041047239877871023591066789981811181813306167128854888448"}, + {1e+201, chars_format::fixed, 0, + "1000000000000000037718785293056550291741793714171007924670336578563554653884390444993619046236149589293075" + "414109087389699655531583234914810756005630018925423128793192791080866922220799992003324610084864"}, + {1e+202, chars_format::fixed, 0, + "9999999999999999017474591319641730272072128367390393282944984404433823148266910656903077218579754480674748" + "342103902584639871831041306548820316951909258721342916786285447187693014154661313392524876840960"}, + {1e+203, chars_format::fixed, 0, + "9999999999999999887691078750632944765093445982954992299750348488402926118236186684444269694600068984518592" + "0534555642245481492613075738123641525387194542623914743194966239051177873087980216425864602058752"}, + {1e+204, chars_format::fixed, 0, + "9999999999999999887691078750632944765093445982954992299750348488402926118236186684444269694600068984518592" + "05345556422454814926130757381236415253871945426239147431949662390511778730879802164258646020587520"}, + {1e+205, chars_format::fixed, 0, + "1000000000000000016616035472855013340286026761993566398512806499527303906862635501325745128692656962574862" + "2041088095949318798038992779336698179926498716835527012730124200454693714718121768282606166882648064"}, + {1e+206, chars_format::fixed, 0, + "1000000000000000038893577551088388431307372492952020133343023820076912942893848967630799656078777013873264" + "60311941213291353170611409437561654018367221268940354434586262616943544566455807655946219322240663552"}, + {1e+207, chars_format::fixed, 0, + "1000000000000000038893577551088388431307372492952020133343023820076912942893848967630799656078777013873264" + "603119412132913531706114094375616540183672212689403544345862626169435445664558076559462193222406635520"}, + {1e+208, chars_format::fixed, 0, + "9999999999999999818630698308109481982927274216983785721776674794699138106539424938898600659703096825493544" + "616522696356805028364441642842329313746550197144253860793660984920822957311285732475861572950035529728"}, + {1e+209, chars_format::fixed, 0, + "1000000000000000073111882183254852571116159535704205070042237624441112422237792851875363410143857412667610" + "68799969763125334902791605243044670546908252847439043930576054277584733562461577854658781477884848504832"}, + {1e+210, chars_format::fixed, 0, + "9999999999999999271137824193446055745986681532948826734589253924871946437036322790985580594661810444784007" + "25843812838336795121561031396504666917998514458446354143529431921823271795036250068185162804696593727488"}, + {1e+211, chars_format::fixed, 0, + "9999999999999999563134023721266549739021664297767471527755878388779781994104643936539191296017163181162427" + "18274989796920105902832035603293074628215317261635171175975654092628084560952155763865693199526971991654" + "4"}, + {1e+212, chars_format::fixed, 0, + "9999999999999999095940104476753759350165691874057639858689279246527245102795330103653414173848598802956955" + "303851066631868086527984288724316222918684327765330639240616986193403841354867066507768445677983667689881" + "6"}, + {1e+213, chars_format::fixed, 0, + "9999999999999999843450375267974223972335247751993370529195837874131304128890232236270657569318301808085710" + "3100891967716008425285219964180994603002344795269643552712402737660070481623142523171900237856413512525414" + "4"}, + {1e+214, chars_format::fixed, 0, + "9999999999999999544446266951486038123467425400819078260993214423089680518452271383223760211130420606034208" + "3075939447157077401283069133405861653476144188223108688589909587369657654393353779934213925425782778274775" + "04"}, + {1e+215, chars_format::fixed, 0, + "9999999999999999066039693645104940765278909638940210631869016901423082741751534018348724438029810682751805" + "1036015414262787762879627804165648934234223216948652905993920546904997130825691790753915825536773603473752" + "064"}, + {1e+216, chars_format::fixed, 0, + "1000000000000000021421546958041957442493134746744949294176709095342291740583330369404881029347127449862957" + "2793183309320908289504788699434215946041483354800734678422429424402018238738808056478663126527039562299620" + "72064"}, + {1e+217, chars_format::fixed, 0, + "9999999999999999601855055748251769806450047292244542376488118125689672251656359867008764503902493796828096" + "6920730331104392157891482092914687179785174704776043382501428272225416917221473218635849697412463879250897" + "79712"}, + {1e+218, chars_format::fixed, 0, + "1000000000000000082657588341258737904341264764265444350704606378115616256001024752108885608304005520043104" + "8894293585531377363220429189576963174104449239123865018594716021581494785755468791093741283312832736674151" + "6615680"}, + {1e+219, chars_format::fixed, 0, + "9999999999999999650843888854825194175928551306260938421710435951908331863990515373171968167067996252972214" + "7801618552072767416863994485028884962235547412234547654639257549968998154834801806327912222841098418750522" + "5498624"}, + {1e+220, chars_format::fixed, 0, + "9999999999999999964372420736895110140590976995965873111133270039707753382929110612616471611327211972294570" + "5439303166270369074288073794559750769917932739968974996321364927527918075560104767557112385584359471548120" + "96741376"}, + {1e+221, chars_format::fixed, 0, + "1000000000000000046601807174820697568405085809949376861420980458018682781323086299572767712214195712321033" + "9765959854898653172616660068980913606220974926434405874301273673162218994872058950552383264597357715602427" + "8435495936"}, + {1e+222, chars_format::fixed, 0, + "1000000000000000046601807174820697568405085809949376861420980458018682781323086299572767712214195712321033" + "9765959854898653172616660068980913606220974926434405874301273673162218994872058950552383264597357715602427" + "84354959360"}, + {1e+223, chars_format::fixed, 0, + "1000000000000000046601807174820697568405085809949376861420980458018682781323086299572767712214195712321033" + "9765959854898653172616660068980913606220974926434405874301273673162218994872058950552383264597357715602427" + "843549593600"}, + {1e+224, chars_format::fixed, 0, + "9999999999999999695490351794831950209296480724474921121484247526010969488287371335268865457530508571403718" + "2409224841134505892881183378706080253249519082903930108094789640533388351546084948006950326015738792668900" + "564521713664"}, + {1e+225, chars_format::fixed, 0, + "9999999999999999284542234486365269956094146124464869125363950430450511714984175783024165903071069343773520" + "0942358863613425448462294146117783821804062986135861502805217858619360833053015850664613088704891665546032" + "3666687950848"}, + {1e+226, chars_format::fixed, 0, + "9999999999999999613300728333138614158656013804472910722260188106898877933626732224819925546638620725877678" + "6115851645630289803997405532188420966960427863550316387036875284150582847847471128538482878553569367244326" + "92495112994816"}, + {1e+227, chars_format::fixed, 0, + "1000000000000000092833470372023199096890348452450507710984513881269234280819695799200296412090882625429431" + "2680982277369774722613785107647096954758588737320813592396350498627547090702529224003396203794828017403750" + "5158080469401600"}, + {1e+228, chars_format::fixed, 0, + "9999999999999999245091215224752468651786722002863904133736401909276707768747069010008674745842963177921021" + "0721539729771401725798080779789307364385299200846126916697418967555614191277681217319748713923050341342237" + "0196749149011968"}, + {1e+229, chars_format::fixed, 0, + "9999999999999999918388610622944277578633427011520373324179896670642961784527024602806390495869308408470337" + "7156852947341939925933988898461972237665534469790930519603853375043556877576725626405434043533142274420344" + "27503713670135808"}, + {1e+230, chars_format::fixed, 0, + "1000000000000000099566444326005117186158815502537072402888948828882896820977495355128273569591146077734924" + "4345335409545480104615144188833823603491391090010261628425414842702426517565519668094253057090928936734531" + "5883616691581616128"}, + {1e+231, chars_format::fixed, 0, + "1000000000000000056475411020520841414840626381983058374700565164155456563967578197189219761589459982979768" + "1693475363620965659806446069238773051601456032797794197839403040623198185642380825912769195995883053017532" + "72401848696295129088"}, + {1e+232, chars_format::fixed, 0, + "1000000000000000056475411020520841414840626381983058374700565164155456563967578197189219761589459982979768" + "1693475363620965659806446069238773051601456032797794197839403040623198185642380825912769195995883053017532" + "724018486962951290880"}, + {1e+233, chars_format::fixed, 0, + "9999999999999999737406270739910319339097032705193514405788685278787712705085372539462364502262226810498681" + "4019040754458979257737456796162759919727807229498567311142603806310797883499542489243201826933949562808949" + "044795771481474727936"}, + {1e+234, chars_format::fixed, 0, + "1000000000000000017865845178806930323739528929966661805443773400559670093686692423675827549619949242079148" + "1557408762472600717257852554081607757108074221535423380034336465960209600239248423318159656454721941207101" + "74156699571604284243968"}, + {1e+235, chars_format::fixed, 0, + "1000000000000000053166019662659649035603389457524510097335697298704389152229216559459500429134930490902572" + "1681812512093962950445138053653873169216309020403876699170397334223513449750683762833231235463783529148067" + "211236930570359138156544"}, + {1e+236, chars_format::fixed, 0, + "1000000000000000053166019662659649035603389457524510097335697298704389152229216559459500429134930490902572" + "1681812512093962950445138053653873169216309020403876699170397334223513449750683762833231235463783529148067" + "2112369305703591381565440"}, + {1e+237, chars_format::fixed, 0, + "9999999999999999402054613143309491576390357693393955632815408246412881648931393249517472146869904946676153" + "2837205133056038042458244550226238504699576640248260779350025557809411313140906763850021826347864477369777" + "0829313903654699186257920"}, + {1e+238, chars_format::fixed, 0, + "1000000000000000048647597328726501040484815309997105515973531039741865112735773470079190300557012891053173" + "8945888832142428584597165509708623196466454966148714674320981543085810557013220039375302073350623645891623" + "631119178909006652304785408"}, + {1e+239, chars_format::fixed, 0, + "9999999999999999908117914543822067029670662216463268745378029250215574072197019260112206547596676129808759" + "9260657287627887017431169472094235452683230716826407562484594165232135299736843791138087983021771402091458" + "056119576436948334022754304"}, + {1e+240, chars_format::fixed, 0, + "1000000000000000013946113804119924437974165856986638331112094170909680489426130543638408513078605724209795" + "1533994970114644654884736372209103405747575829469070323477468267148252340789498643218406108321555742482136" + "93581484614981956096327942144"}, + {1e+241, chars_format::fixed, 0, + "1000000000000000050961029563700272813985525273531136661630960164330677420956416331841909086388906702176065" + "8106681756277614179911327452208591182514380241927357631043882428148314438094801465785761804352561506118922" + "744139467759619125060885807104"}, + {1e+242, chars_format::fixed, 0, + "1000000000000000050961029563700272813985525273531136661630960164330677420956416331841909086388906702176065" + "8106681756277614179911327452208591182514380241927357631043882428148314438094801465785761804352561506118922" + "7441394677596191250608858071040"}, + {1e+243, chars_format::fixed, 0, + "1000000000000000074650575649831695774632795300119615593163034400120115457135799236292149453307499328074479" + "0313201299421914675928345743408263359645135065900661507886387491188354180370195272228869449812405194846465" + "66146722558989084608335389392896"}, + {1e+244, chars_format::fixed, 0, + "1000000000000000074650575649831695774632795300119615593163034400120115457135799236292149453307499328074479" + "0313201299421914675928345743408263359645135065900661507886387491188354180370195272228869449812405194846465" + "661467225589890846083353893928960"}, + {1e+245, chars_format::fixed, 0, + "1000000000000000044327956659583474385004289666086362560801979378309634770826189118595841783651700766924510" + "1088856284197210041026562330672682972917768891214832545527981010497103310257691199981691663623805273275210" + "7272876955671430431745947427930112"}, + {1e+246, chars_format::fixed, 0, + "1000000000000000068586051851782051496707094173312964986690823395758019319873877212752887919376339615844485" + "2468332296376973748947989060861147282299661830963495715414706195050104006347694457779433892574685210532214" + "67463131958534128550160206370177024"}, + {1e+247, chars_format::fixed, 0, + "9999999999999999521471949292288813605336325386252733424243721120057734844449743607990664678980731410286045" + "8468474379141079509251407559565185972665757201699124999584253091957006651156788203502711936104615116985957" + "27381924297989722331966923339726848"}, + {1e+248, chars_format::fixed, 0, + "1000000000000000045298280467271417469472401846375426657837533139007570152788096642362123629080686320881309" + "1144035324684400589343419399880221545293044608804779072323450017879223338101291330293601352781840470765490" + "8851814405278709728676750356293615616"}, + {1e+249, chars_format::fixed, 0, + "9999999999999999210968330832147026575540427693752222372866517696718412616639336002780474141705354144110364" + "0811181423240104047857145413152842812577527572916236425034170729678597741204746503691611405533351920096306" + "7478208555469597215339755257651527680"}, + {1e+250, chars_format::fixed, 0, + "9999999999999999210968330832147026575540427693752222372866517696718412616639336002780474141705354144110364" + "0811181423240104047857145413152842812577527572916236425034170729678597741204746503691611405533351920096306" + "74782085554695972153397552576515276800"}, + {1e+251, chars_format::fixed, 0, + "1000000000000000048279115204488778624958442464223431563930754291871627646175076555372141458238529942636595" + "6593545337061049953772804316485780039629891613241094802639130808557096063636830930611787917875324597455631" + "5302310250472271728848176952226298724352"}, + {1e+252, chars_format::fixed, 0, + "1000000000000000099152028052998409011920202342162715294588395300751542199979533737409779075865727753926819" + "3598516214955865773367640226553978342978747155620883266693416302792790579443373442708838628804120359634031" + "87241060084423965317738575228107571068928"}, + {1e+253, chars_format::fixed, 0, + "9999999999999999363587069377675917736425707327570073564839440723358156278052707548893386994586947577981035" + "1826094056924551506641653143357437722624094200055601817197027212385681288624374039982763538319739206631507" + "77435958293799716241167969694049028276224"}, + {1e+254, chars_format::fixed, 0, + "9999999999999999363587069377675917736425707327570073564839440723358156278052707548893386994586947577981035" + "1826094056924551506641653143357437722624094200055601817197027212385681288624374039982763538319739206631507" + "774359582937997162411679696940490282762240"}, + {1e+255, chars_format::fixed, 0, + "9999999999999999884525696946414532898914128477668338966773684654288481309010349092958796199089453165592925" + "8756995846567465499292772862455788348916374954024635689112910673359193130483369363856562818230607811338327" + "2782784390994049606075766012189756664840192"}, + {1e+256, chars_format::fixed, 0, + "1000000000000000030127659900140542502890486539774695128832107979903274133377646232821112356269145763568243" + "8430171727828179669341366863773446884995019955719986278664561744213800260397056562295560224215930269510378" + "288141352402853119916429412464176397346144256"}, + {1e+257, chars_format::fixed, 0, + "1000000000000000030127659900140542502890486539774695128832107979903274133377646232821112356269145763568243" + "8430171727828179669341366863773446884995019955719986278664561744213800260397056562295560224215930269510378" + "2881413524028531199164294124641763973461442560"}, + {1e+258, chars_format::fixed, 0, + "1000000000000000056799717631659959599209893702659726317411141269166906774962677479877261307539674049653972" + "6465033899457896865765104193391282437061184730323200812906654977415644066700237122877898747347366742071367" + "44674199783831719918405933396323484899269935104"}, + {1e+259, chars_format::fixed, 0, + "9999999999999999287738405203667575368767393208115766122317814807014700953545274940077463414411382764424743" + "8976954756352543229311650112256717871435938122277710485446074580467937964449704320826738363164716737786194" + "85458899748089618699435710767754281089234894848"}, + {1e+260, chars_format::fixed, 0, + "1000000000000000065334776105746173070032103994782936297756431921731269220269887478935228971946243101201405" + "8636189794379406368620700138868989813722357458196229463864124812040234084717254902264247074749426413290883" + "9774942043776657045497009088429335535195969814528"}, + {1e+261, chars_format::fixed, 0, + "9999999999999999287738405203667575368767393208115766122317814807014700953545274940077463414411382764424743" + "8976954756352543229311650112256717871435938122277710485446074580467937964449704320826738363164716737786194" + "8545889974808961869943571076775428108923489484800"}, + {1e+262, chars_format::fixed, 0, + "1000000000000000016172839295009583478096172712153246810967557762960541535300357884361335224964405364288190" + "5330331839631511632172467492917395324154002545647584434349098564602595580939232492998880708913562707066468" + "760361494711018313643605437535869015444666630275072"}, + {1e+263, chars_format::fixed, 0, + "1000000000000000016172839295009583478096172712153246810967557762960541535300357884361335224964405364288190" + "5330331839631511632172467492917395324154002545647584434349098564602595580939232492998880708913562707066468" + "7603614947110183136436054375358690154446666302750720"}, + {1e+264, chars_format::fixed, 0, + "1000000000000000044140518902895287779286391397382581274563006173283444396083023609274483667691850832398819" + "6988775476110313971129684287058746855997333340341924717806535718700452151977396352492066908144631837718580" + "52833032509915549602573975010166573043840478561173504"}, + {1e+265, chars_format::fixed, 0, + "1000000000000000066514662589203851220238566345566048845439364901541766684709156189205002421873807206887323" + "0315530385293355842295457722371828081471997976097396944572485441978737408807927440086615867529487142240269" + "942705389409665241931447200154303102433395309881065472"}, + {1e+266, chars_format::fixed, 0, + "1000000000000000030716032691110149714715086428472500732037190936328451022907344061316172415182677007705717" + "6992722530600488848430220225870898120712534558888641381746965884733480997879077699935337532513718655005566" + "8797052865128496484823152800700833072414104710501367808"}, + {1e+267, chars_format::fixed, 0, + "9999999999999999734382248541602273058775185611228237505937125919871459640244446566940444044768686890151491" + "6762299630919016582458402314694101834973930913546324812261345931410707403929181156932921964884890754300419" + "7890512187794469896370420793533163493423472892065087488"}, + {1e+268, chars_format::fixed, 0, + "9999999999999999734382248541602273058775185611228237505937125919871459640244446566940444044768686890151491" + "6762299630919016582458402314694101834973930913546324812261345931410707403929181156932921964884890754300419" + "78905121877944698963704207935331634934234728920650874880"}, + {1e+269, chars_format::fixed, 0, + "1000000000000000046753818885456127989189605431330410286841364872744016439394555894610368258180303336939076" + "8881340449502893261681846624303314743132774169798163873892798646379355869975202383523110226600782937286713" + "8519293326106230343475263802678137754874196788463928344576"}, + {1e+270, chars_format::fixed, 0, + "1000000000000000046753818885456127989189605431330410286841364872744016439394555894610368258180303336939076" + "8881340449502893261681846624303314743132774169798163873892798646379355869975202383523110226600782937286713" + "85192933261062303434752638026781377548741967884639283445760"}, + {1e+271, chars_format::fixed, 0, + "9999999999999999529098585253973751145501342374646995204443699533752222309208135100774737254399069875964494" + "0587990268968240092837584414759169067994863893904436912794686582343509041098785207009431480570467941101738" + "54458342872794765056233999682236635579342942941443126198272"}, + {1e+272, chars_format::fixed, 0, + "1000000000000000065522610957467878564117499670103552440120763856617775281089304371516947164728382606807602" + "3845848734024107112161464260868794310399431725879707910415464644008356863148267156087543642309530165922021" + "8514235305581886882057848563849292034690350260273827761094656"}, + {1e+273, chars_format::fixed, 0, + "9999999999999999454023416965926748845789765419554426591326103598257186942429141193148421628206752796490392" + "0729957130883384690919113868497250798928233669578260766704022591827505068406526116751697817735479026560506" + "5466066369376850351293060923539046438669680406904714953752576"}, + {1e+274, chars_format::fixed, 0, + "9999999999999999213782878444176341486712719163258207029349796604673073768736360688744211624391338142173265" + "7184251089011847404780008120459112337915016951734497099213897822176292355791297027926950096663514500028564" + "15308090320884466574359759805482716570229159677380024223137792"}, + {1e+275, chars_format::fixed, 0, + "9999999999999999598167740078976993261235993173332158328511887794407654846644809495790947630496001589080667" + "8857380756006307062602577317320133875536163700284518967198097453618232695975663570046546450378657742479671" + "982722077174989256760731188933351130765773907040474247261585408"}, + {1e+276, chars_format::fixed, 0, + "1000000000000000052069140800249855752009185079750964144650090664977064943362508663270311404514719386165843" + "3087289195679301024137674338978658556582691589680457145036017656907888951241814327113357769929500152436233" + "07738608946937362752018518070418086469181314516804918593340833792"}, + {1e+277, chars_format::fixed, 0, + "1000000000000000002867878510995372324870206006461498378357342992691038565390227215968329195733322464961695" + "8313128598304010187936385481780447799767184805866054345934040104083320587698215409722049436653961817402491" + "275192019201707119869992081071729797163687409453914913289541779456"}, + {1e+278, chars_format::fixed, 0, + "9999999999999999635068686795917855831590227478299257653231448548622174630124020581267434287082049279983778" + "4938001204037775189753543960218791943147793788145321066524580618236658968633362758090027700335311493754978" + "334367629875739137498376013657689431411868208826074951744485326848"}, + {1e+279, chars_format::fixed, 0, + "1000000000000000057973292274960393763265862568545700036605220385651388108719182436946549269568487016710341" + "0060188467364335924481829001842443847400552403738185480928254963246837154867046197200314769922564752640282" + "09364937790149360843820835266007499279518823345374529865067232493568"}, + {1e+280, chars_format::fixed, 0, + "1000000000000000032782245982862098248570705283021493564263333577440942603197374335927934378672411793053817" + "4975818241508187016346769106956959939911012930425211247788042456200658152732723551495964903285489125103006" + "290926013924448356521309485648260046220787856768108551057012647002112"}, + {1e+281, chars_format::fixed, 0, + "1000000000000000032782245982862098248570705283021493564263333577440942603197374335927934378672411793053817" + "4975818241508187016346769106956959939911012930425211247788042456200658152732723551495964903285489125103006" + "2909260139244483565213094856482600462207878567681085510570126470021120"}, + {1e+282, chars_format::fixed, 0, + "1000000000000000032782245982862098248570705283021493564263333577440942603197374335927934378672411793053817" + "4975818241508187016346769106956959939911012930425211247788042456200658152732723551495964903285489125103006" + "29092601392444835652130948564826004622078785676810855105701264700211200"}, + {1e+283, chars_format::fixed, 0, + "9999999999999999553953517735361344274271821018911312812290573026184540102343798495987494338396687059809772" + "7966329076780975705558651098687533761031476684077544035813096345547962581760843838922021129763927973084950" + "24959839786965342632596166187964530344229899589832462449290116390191104"}, + {1e+284, chars_format::fixed, 0, + "1000000000000000079214382508457676541256819191699710934083899342334435758975171027725445345572057645297521" + "6283329441806240683821311505209883878195732087635685354312082149188175289466707052058222577470946921779713" + "0505057184069381648545374773244373557467226310750742042216461653692645376"}, + {1e+285, chars_format::fixed, 0, + "9999999999999999801591579205204428501931095198528472118000257105616503599825380852240886161861464938442861" + "4939722145037261932089543889369794765216645522533405937274641374814720644342089175254062058753036222027386" + "3006901551095990707698442841525909542472844588688081080376132618600579072"}, + {1e+286, chars_format::fixed, 0, + "1000000000000000032988611034086967485427088011504507863684758314173802572778608987891478871858632441286011" + "7381629402398400588202211517615861824081167237790591132705927077058380451118207922609574937392980048643791" + "654301923722148311225012721166820834263125344653917287293299907083743789056"}, + {1e+287, chars_format::fixed, 0, + "1000000000000000075252173524940187193614270804825836385192544397063524343015465710025391076396621199239392" + "2091755152714140104196817220558967702128769386220391563888697428719907160465407126676909922607121189796634" + "0736882502910990345434353553680702253338428636675464684849307718019341877248"}, + {1e+288, chars_format::fixed, 0, + "1000000000000000007630473539575035660514778335511710750780086664439969510636494954611131549135839186513983" + "4555553952208956878605448095849998297252605948732710873996264866061464425509888400169173946264495363952086" + "20267012778077787723395914064607119962069483324573977857832138825282954985472"}, + {1e+289, chars_format::fixed, 0, + "1000000000000000061727833527867156886994372310963011258310052850538813376539671558942539170944464796694310" + "4584514912613103459078543395617173821153536698722855425910210916188218613474303381375362727338596024627724" + "499484625789034803081540112423670420191213257583185130503608895092113260150784"}, + {1e+290, chars_format::fixed, 0, + "1000000000000000061727833527867156886994372310963011258310052850538813376539671558942539170944464796694310" + "4584514912613103459078543395617173821153536698722855425910210916188218613474303381375362727338596024627724" + "4994846257890348030815401124236704201912132575831851305036088950921132601507840"}, + {1e+291, chars_format::fixed, 0, + "9999999999999999578609023503462841321535518780965142838525177732290331540055724786262365370719036251480826" + "1289098686371420245702004200641968152637496587417778862354344999448505725826266174594802676763227561304989" + "6960078961318150545418464661067991669581788285529005480705688196068853638234112"}, + {1e+292, chars_format::fixed, 0, + "1000000000000000013256598978357416268068656108958646003563203147794249272690425321461597941803936249972737" + "4638565892090988122974650007025784551738302746731685907395315255274646861058187558214617579496201832662352" + "585538835573636597522107561710941518560028749376834095178551288964115055725510656"}, + {1e+293, chars_format::fixed, 0, + "9999999999999999246234843735396048506044893395792352520261065484899034827946607729250196942326840502532897" + "0231162545648343655275306678872441733790178059478330735395060467469727994972900530063978805843953102113868" + "000379620369084502134308975505229555772913629423636305841602377586326247764393984"}, + {1e+294, chars_format::fixed, 0, + "1000000000000000066436467741248103118547156170586292454485461107376856746627884050583544890346687569804406" + "1207835674606680377442921610508908778753873711201997607708800780391251297994726061339549398843285746132932" + "05683935969567348590731356020719265634967118123751637393518591968740451429495341056"}, + {1e+295, chars_format::fixed, 0, + "9999999999999999813486777206230041577815560719820581330098483720446847883279500839884297726782854580737362" + "6970040225815727702936870449359100155289601680494988872072239402046841988962644563396584878879514845800049" + "02758521100414464490983962613190835886243290260424727924570510530141380583845003264"}, + {1e+296, chars_format::fixed, 0, + "9999999999999999813486777206230041577815560719820581330098483720446847883279500839884297726782854580737362" + "6970040225815727702936870449359100155289601680494988872072239402046841988962644563396584878879514845800049" + "027585211004144644909839626131908358862432902604247279245705105301413805838450032640"}, + {1e+297, chars_format::fixed, 0, + "1000000000000000017652801462756379714374878780719864776839443139119744823869255243069012222883470359078822" + "0728292194112285349344027126247056154504923279794565007954563392017619494511608074472945276562227436175920" + "48849967890105831362861792425329827928397252374398383022243308510390698430058459037696"}, + {1e+298, chars_format::fixed, 0, + "9999999999999999595662034753429788238255624467393741467120915117996487670031669885400803025551745174706847" + "8782311196631452228634829961492223321433823010024592147588202691169230215270582854596864146833859136224555" + "51313826420028155008403585629126369847605750170289266545852965785882018353801250996224"}, + {1e+299, chars_format::fixed, 0, + "1000000000000000052504760255204420248704468581108159154915854115511802457988908195786371375080447864043704" + "4438328838781769425232353604305756447921847867069828483872009265758037378302337947880900593689532349707999" + "4508111903896764088007465274278014249457925878882005684283811566947219638686545940054016"}, + {1e+300, chars_format::fixed, 0, + "1000000000000000052504760255204420248704468581108159154915854115511802457988908195786371375080447864043704" + "4438328838781769425232353604305756447921847867069828483872009265758037378302337947880900593689532349707999" + "45081119038967640880074652742780142494579258788820056842838115669472196386865459400540160"}, + {1e+301, chars_format::fixed, 0, + "1000000000000000052504760255204420248704468581108159154915854115511802457988908195786371375080447864043704" + "4438328838781769425232353604305756447921847867069828483872009265758037378302337947880900593689532349707999" + "450811190389676408800746527427801424945792587888200568428381156694721963868654594005401600"}, + {1e+302, chars_format::fixed, 0, + "1000000000000000076297030790848949253473468551506568117016017342062113802881257944841421889646917840766397" + "4757713854876137221038784479993829181561135051983075016764985648898162653636809541460731423515105837345898" + "6890825155659063617715863205282622390509284183439858617103083735673849899204570498157510656"}, + {1e+303, chars_format::fixed, 0, + "1000000000000000000161765076786456438212668646231659438295495017101117499225738747865260243034213915253779" + "7735681803374160274458205677791996433915416060260686111507461222849761772566500442005272768073270676904621" + "12661427500197051226489898260678763391449376088547292320814127957486330655468919122263277568"}, + {1e+304, chars_format::fixed, 0, + "9999999999999999392535525055364621860040287220117324953190771571323204563013233902843309257440507748436856" + "1180561621725787171937426360305302357988408668827749873014416820110410677102531624409058437198025485515990" + "76639682550821832659549112269607949805346034918662572406407604380845959862074904348138143744"}, + {1e+305, chars_format::fixed, 0, + "9999999999999999392535525055364621860040287220117324953190771571323204563013233902843309257440507748436856" + "1180561621725787171937426360305302357988408668827749873014416820110410677102531624409058437198025485515990" + "766396825508218326595491122696079498053460349186625724064076043808459598620749043481381437440"}, + {1e+306, chars_format::fixed, 0, + "1000000000000000017216064596736454828831087825013238982328892017892380671244575047987920451875459594568606" + "1388616982910603110492255329485206969388057114406501226285146694284603569926249680283295506892241752843467" + "30060716088829214255439694630119794546505512415617982143262670862918816362862119154749127262208"}, + {1e+307, chars_format::fixed, 0, + "9999999999999999860310597602564577717002641838126363875249660735883565852672743849064846414228960666786379" + "2803926546153933531728502521033362759523706153970107306916646893751785690398510731463396416232660711267200" + "11020169553304018596457812688561947201171488461172921822139066929851282122002676667750021070848"}, + {1e+308, chars_format::fixed, 0, + "1000000000000000010979063629440455417404923096773118463368106829031575854049114915371633289784946888990612" + "4966972117251561159028374314008832830700919814604603127166450293302718569748969958855904333838446616500117" + "8426897626212945177628091195786707458122783970171784415105291802893207873272974885715430223118336"}, +}; diff --git a/libcxx/test/std/utilities/charconv/charconv.msvc/double_fixed_precision_to_chars_test_cases_3.hpp b/libcxx/test/std/utilities/charconv/charconv.msvc/double_fixed_precision_to_chars_test_cases_3.hpp new file mode 100644 --- /dev/null +++ b/libcxx/test/std/utilities/charconv/charconv.msvc/double_fixed_precision_to_chars_test_cases_3.hpp @@ -0,0 +1,10828 @@ +// Copyright (c) Microsoft Corporation. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + + +// Copyright 2018 Ulf Adams +// Copyright (c) Microsoft Corporation. All rights reserved. + +// Boost Software License - Version 1.0 - August 17th, 2003 + +// Permission is hereby granted, free of charge, to any person or organization +// obtaining a copy of the software and accompanying documentation covered by +// this license (the "Software") to use, reproduce, display, distribute, +// execute, and transmit the Software, and to prepare derivative works of the +// Software, and to permit third-parties to whom the Software is furnished to +// do so, all subject to the following: + +// The copyright notices in the Software and this entire statement, including +// the above license grant, this restriction and the following disclaimer, +// must be included in all copies of the Software, in whole or in part, and +// all derivative works of the Software, unless such copies or derivative +// works are solely in the form of machine-executable object code generated by +// a source language processor. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +// DEALINGS IN THE SOFTWARE. + + +// This file contains test cases derived from: +// https://github.com/ulfjack/ryu +// See xcharconv_ryu.h for the exact commit. +// (Keep the cgmanifest.json commitHash in sync.) + + +#pragma once + +#include "test.hpp" +#include +using namespace std; + +inline constexpr DoublePrecisionToCharsTestCase double_fixed_precision_to_chars_test_cases_3[] = { + // Ryu Printf d2fixed_test.cc D2fixedTest AllBinaryExponents + // These values test every binary exponent. + // The mantissas were randomly generated. + {0x0.63b831e8bd9d7p-1022, chars_format::fixed, 1074, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008667315560" + "1518373204745615934992065170006880827787289636461039456117181014435225731420739682086431846196084055971776" + "1976781401452617612090003075542930260777812518669659241729724010681746641686623499848468215594968202107915" + "3402945471922988971873909012440740220527800911244244822910902773084448896950002963160859062629660988288537" + "4947604962348974323036144310657614326754120115556509383797380330234783520222245524583876671362471849408043" + "1858617260899963028423305531253945552260335123939000593240656910669298632181747412649714974019858835628576" + "1402581880926947783051518340651609793980053160313425027619711896255545853478748493923212623215309262429188" + "9535798750202922731324119623206905408779063259071595105183391812893811664489504206776437911230459576472640" + "03753662109375"}, + {0x1.8777195166b0cp-1022, chars_format::fixed, 1072, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034024962888" + "5488918707803802237219634159360572672157684890228809310363407096641170467659879771805264411927667980233377" + "8493381613983963619886353435618596864780020416582962791672696335498871803986814670850483660459156676370951" + "5096631215158510441977866477856881896988317751492854297037574001592689593245951090014597401089987064349011" + "8898178199420014167358923990328782986564433565017977882465941632972037475759286148645435617069627150190560" + "6610044637601532768006545677482036919081933078680182749619038785085197654630878239258803610922679880731846" + "1295595610061523269781283221357431760026778081133972233612002223605221826818897235077493324279732240457324" + "0208707312500506083305050530743859909422095574730572935613200283098897446182155845928463122618268243968486" + "785888671875"}, + {0x1.4668b84fe57a0p-1021, chars_format::fixed, 1068, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000056740958740" + "6416315113843845367765611463402272605773579309805044238876264896175716378374414880313837549557854086594144" + "6517571068268270820532248191376149517571648221869547136333897392941241920946002959571014115138922292227756" + "5675579700156979183315496460915138087093250268282674126774708694126428169237269531699329932826961970700281" + "7860044551711084995833922394577051992453091701226019440181486036346841321732890759392314160217956773831481" + "0836998109083129295391451373564751392901299926267367714488145730269066445855381488848672338113942395343914" + "7931259731375390972529039085122338240869687761572122993383754664276573025666127187344547915597384296829871" + "1175582031872758195259747569288096497941384426647703960591649037179391408883266656459909427212551236152648" + "92578125"}, + {0x1.befe59a615135p-1020, chars_format::fixed, 1072, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000155405261736" + "2235237599344524566268329346499410781820240377373211399724292118817533439328423661067387776003211400451369" + "3088093284719809466733351558863675884965219358948864762862301475919926006238764851665875890220244143133239" + "4990914215952953745660507019834777919259824309540394759202512511945735293837981431982027834358977473029612" + "0303664088965600921426179216076245193704452662458429835783277758594438863220080552115251534233085611706230" + "8503464635136074518967164258938058608025448494327947396239370394992669778837860314635821269578123701586483" + "9016649103853253096649589094048656135137787361348031132374178952614572001907211566747518775736907525882271" + "0974186182997578768175923453881771250830539545867001930118621195145977916950326414013971998429042287170886" + "993408203125"}, + {0x1.1e3d1ff2f0c7dp-1019, chars_format::fixed, 1071, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000199032000513" + "5142880561598924319312704477072269270245936137839955953465230545195415127755767083901447533947828678376962" + "8840827353272482512734186549366506777424260696503583584763933654973123255607415124268905380654726960778878" + "0455364488415004387840662750774569999550709914737717510587715348152633060357249935862626075624081617450315" + "4885783858040748854022822093131458054271092923292182143582852711297479202477529680286154546026438265660119" + "0666964359310825902834425266702229494789747194864674154539719905344544705996332452876246842805615529643436" + "3330985188230759038449117763080644432854364707566853651485305297515523425163520740729706771939538840583142" + "0311524001253621714021938613841338246896203505202451193812218773931269549326908419040194075932959094643592" + "83447265625"}, + {0x1.6f434a1f8b19bp-1018, chars_format::fixed, 1070, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000510741853904" + "6846927047373682830132718075006256443666199351873286782041441258279676361749462207484160512079462800015135" + "1247641526009378027445855026174588417177058971036936098000778820888042031017906554373258977780010263225403" + "4985134368614288894180981269713098266814859393907435942503999009239804035089734298703368406224788919100457" + "8703872406975692839527795367059563095996889887433505152749668146313379417615714580759187210921661443825061" + "5079726743650989704965620642901239809189450397279529801654706466234792028552787228839089551760441918109416" + "4246004056408218871243893690629186700027052396055033266400221089830267330844275401596778964865771996400585" + "2935700696823519264465123996032196818637410241732060994427104056094504278256324125706555605574976652860641" + "4794921875"}, + {0x1.587345c18153ep-1017, chars_format::fixed, 1068, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000958034150713" + "4764786508271836926643404057427002697780971266720840479203611958030287584788324659120693742922007657201247" + "5701432533443920920943404653989371931593878000743154963499391621521760536226285826940742684233420125807325" + "1475122129361059576300349579506194683866694625320913445655672698919325929161890237571835547216240424390568" + "4503604058791100485208980042190187445440799433710816373805294721006156102426371505496796959141102703635606" + "8282898610242996821028731917836326909139019066634183567364278468611980916064135979863051465895296219949754" + "3645034872914477180174891107535697767424819637337145925449261230552011300809574685296849175758943122326736" + "0016445450314712551946974418885474268936771312658360117220892077307970715813190132337240356719121336936950" + "68359375"}, + {0x1.f1b6b87277fdep-1016, chars_format::fixed, 1067, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002768624646153" + "3842708986290401534510677245449052480438452772935563477911887903937433332521175778793903095384041223955723" + "1923283555660292437990927601776574893980601557250737329754310915661825472040213756951830291482697155616984" + "2700521540676609741125857389706633023242364855348478771230295850829291438723530923932923590702415161133831" + "9751130631733719608246390666274473865694983392385750305737090058291815147877218349104719543513706308913668" + "3774947602824936693432977762482651171413713941775960038695919756102724251419600380177635071493624586144398" + "8258956704733318591666199586331239518529031729048520377213164363192327716960117074516227535950936913289772" + "7641328747183370449707056957130139385301002356826323260325258247061322707666120024327938153874129056930541" + "9921875"}, + {0x1.72a498409980ap-1015, chars_format::fixed, 1066, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004123539674247" + "7088973208679969440262899254505285796142223814175822702981218018251380021070120502969772416262035601116862" + "1659532952906006748436531426296108744371485218418489239052308056360753777114430810169989395269594614007716" + "4320660032095927443769046869340226546265147500705839457828617891438915581029354085740892509908612620206500" + "3470601897807688053820010379771148507245760602767529755342564783534772481563133530608872155816317027321781" + "0752940595356441071317848377916852111771962558733789348917288503698641911641096452799678633118324142847003" + "8337938910339876846473513908343996450852057201827354601830122948746860487681564435359569830201224403457687" + "8689343471222581935495027065359114155162611459186679259780987690986908851542569465209453483112156391143798" + "828125"}, + {0x1.ce91e910d066ap-1014, chars_format::fixed, 1065, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010292523314007" + "6692326385741229598904670825352808317734627817052485596428748937263427579368777377894657327312479354581078" + "4168520162117480372890622941534124448870772252012602868730161774020407765816726274221052686557419196324208" + "4715821192601015609484863570373655101393795400044083081325937387959984377717529567097636750383014741316553" + "2296085557798963633773657299527935426265350193083637673227681353297917537837040452104722871743258998969100" + "5987271282509672399868182403468494296246048065289295098149422654468288628128861924787217849829763922746869" + "6498494503455447606065743273997995338245842660162359635250494954539395011676725002188222864503213932415104" + "3434437466649570437521385841177305817305146442292695750907213149985758651738798619135195622220635414123535" + "15625"}, + {0x1.a41cd0fb8478fp-1013, chars_format::fixed, 1065, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018695629667714" + "5895916750114590693491523617790849939055674886628194086158815830540057384771933110599023450761887740398618" + "5824526219439376956126341760163322548493370609238456330600806577305257232320501329017953024287747627232037" + "4572663686511555161745450335781058166365489962041606001461174122457962935078569449571467063040254113362718" + "6270376597920952277811842692283769740789234856500541032298070456110972851620621529465978994343606420788243" + "5523527518948000764505675072290355683463164250772690889284988502644183665525616575696351007686952407174842" + "7534905766691870864059461860337314739734261516944168507075000763370610415995639606879253113685553781567772" + "1698849612362059270919596759679334039324781881079759845171743998123959837331931055359746096655726432800292" + "96875"}, + {0x1.3e41d54eded4ap-1012, chars_format::fixed, 1063, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028325827575460" + "1010515391461536595545429499538498991017040932231183342824512646699604684458146742737342772784980027834494" + "0826857661781276292472081843809864410394521611902853735829998834742158468857697790386059626657678189248144" + "5265662942795816062763062880205368461416441764978817899328156614741166754420207438171074196786033403238981" + "1562883073602025172957382372382340446938272102534472564616360448591956313016751702183344954371143800460586" + "5651843981130671659574810922103783984979009729510987301074119123340693948685620445541815789689681881384571" + "9863898666697465652428037545729301943625700762708492646428142876480594651159481998644386165302340702226649" + "3420721660512347699421921315325612490897898554760724211631142191989730927392798776054405607283115386962890" + "625"}, + {0x1.59221b87422dcp-1011, chars_format::fixed, 1061, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061435754675809" + "8837646073896440391226534816436897514942795483804072267347155569125119595580491351990480913034570147895374" + "9199275969705612822746490917273049925735363788261777654916069143307907122518136274038077410603228952574550" + "1894977879086594931372343135335203122952344387060517702808821656121476327893372871287902363583684228396504" + "2552837102397922174874664511453596393052110185322246667762253606317075736272542989625758436326997585642760" + "2393018166303632030454315402968032670946012485516681270764073451032999719873203349131460740206557039826594" + "4836102598855186999874252382364402869617545149531825646529605517647352402816777252637898126613360122856215" + "3297584372631820351071291137909988929778674731782707342702834301100683900287435790232848376035690307617187" + "5"}, + {0x1.922a6e54c4bcbp-1010, chars_format::fixed, 1062, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000143175758120767" + "8327909696250760734478106796867078939935710607595708573102607339856178147302943011543601422950427382699571" + "9719448226349739066691249962145223646872006733056733177952965276951071879207560520825522978044535983860163" + "5063151499836135276583501528784180827303324409079815563661661810073697306944122825275004360202036872430423" + "1730496903611600686763522497807086760639060265790948955651670281170776489599001405555481916829703134521996" + "2049561733515970274623532308359345306507214497299752967076056620391451927843542333198029013832277189655932" + "7003259554334471200742545952329769103656526541210519870252214162081769755690283719852718057095066069103438" + "8286525048452890343118312657240371183075690897644137388980693277205566427134897367068333551287651062011718" + "75"}, + {0x1.072696ae9ff91p-1009, chars_format::fixed, 1061, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000187369544044078" + "4291437168256570360327506576425988595810379182000643821407577934103660676935011263322031392440132868733732" + "7819429571347328935398026964825400882351174079562591710725763861350852064930712839397819262007054683145461" + "2780065823082780248832842288655503722395814417931461558621625008415876667488081682041201864635065571426334" + "0405276148348836991757774602316265058289810704660352544391098522007138900938734431720321349687880063890794" + "9709313371539376131216980483491496783060831614106142375317162155275223986726898573134529318360000096717296" + "5143050437935935892946724098972506000684771103211681358055518407789793900084808470241680962256248128922853" + "0618262874396186671763441010328385573357333169766190506328011882320599967854946044099051505327224731445312" + "5"}, + {0x1.0f9b544278c4bp-1008, chars_format::fixed, 1060, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000386780857037671" + "1567970796017679738247589622247284651871120320458105704644504432357204561914952702147103351310377425294926" + "6522585529115860650409630476395436935935507513474968265776334027719389758555490887642752812234042372625443" + "7003602105036202827450917721436713168500906698052919896534518850932069398418985212286909672403077626688044" + "8498682233610964812352992899821397333236093549925309032199246559964137142197652767564372214748185530284478" + "9634362218477877578958247021052670972459957651572193372191075738314273872600135872061638159242292718022325" + "3091674188986794275627204849031519506259253092951584828274906785555947413973379382135394648484451886157711" + "823604868006218023272010337471584057274727293089669987057330278589634131591878940525930374860763549804687" + "5"}, + {0x1.0c159c101694ep-1007, chars_format::fixed, 1058, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000763529751430495" + "2261443821158790115458810239952267930887072096693486627813429923330320913248325488240687702430323149784113" + "2668378588282844988957673108519903635709387991611919147754896201845081043636843712353787917153989017063736" + "6932138547129575358975875396466265445790571512067390465956520149044782555700513502538083461702835278243119" + "7582947539338933804403231554930541964237271712749234912326942139379518950109342558327795161374824729966907" + "0645661865847799037929906255545116191400664691706275381307240314885435819146724738014196031743697185913499" + "1743063453593039715400411684846294312720981800565410139278357031636119321693824562320610441540921048911338" + "48306373809820626535624355866825082456994424052303706479922855952791049816141821793280541896820068359375"}, + {0x1.5dea4ce8e9d1cp-1006, chars_format::fixed, 1056, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001993183345740184" + "3380206268213719062063350814301599018679933261580130337290316898735876549592164313534803701036771696187184" + "3460238736763173540738894631496044341513014086769607675313389734660544429847137223449237368185473282818899" + "0763143676913549798050111000449048160356662711177445920457729101143615093098470889673928997872159077848989" + "8585846173250830089770352087321756188087231770443888379781496362819885950130996391895508049596794526555364" + "9325413439043352821440085193375901604390558169700922107887759422298045475048448298435182127152924989867102" + "5481762571674803699881589864389977475085144039107611461508367830308205819849065857072705384254490978027536" + "459817993513291304840523425775112141496214071257787596000063921886091833357568248175084590911865234375"}, + {0x1.f54052ccfbd85p-1005, chars_format::fixed, 1057, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005710443944044190" + "3852943648577406503088003161021002627368323935629069966209695533414405887372311247087423593978194334966196" + "9952724399972643565145643565596680341154191365245563840621127630622979641166875699011127504856846210492539" + "1744823983638657336393276468809438060554239207107070390674319071138242241936104300064142641425316186292876" + "8191727964756739054251002351820210559683067678277426478312879053806872980671807735494036931597606968803747" + "0882986462600191569302988629020903776604825882710768551646760758983546554323851915180357433146496665776619" + "8572115325587926099638392334145329333710974022615959231083135651027696907010536501610597578068435532320904" + "0588603358187555694328693197982659012778489710933784939697285300275186870067045674659311771392822265625"}, + {0x1.0090aa3ec4669p-1004, chars_format::fixed, 1056, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005845773229837182" + "3574823131482226670449533326157358746716791953135062569212292668611641801097780408195948596588837344740206" + "4062727322207217975101640660738989340741657280509189289276615212047497934355406431806641278847883402312309" + "8163293513531622437049966284424578880391547670271754853142196587321184864022163506030620064283346385358597" + "4609101781931276219629563822287439933439020777086511705876102130660051067922171320065746506246599474937571" + "3082577376195362056859759924579898568161899707504166498745404902069366067260964218815046333952411377650629" + "1985183641972212962838327237136002597053343023166906014203406467918165849951752439662675714851568453713696" + "999227239301169029854864368002366842252656116249943591260695464895125184057178557850420475006103515625"}, + {0x1.68e98ac55ee26p-1003, chars_format::fixed, 1054, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016446596413123795" + "5496522777053303591275019495978878844846436113300880266183458890074114483112001652990041532139330705876914" + "7931204601218918457779787534281968243383197085376948804904484155483575710841719547823710139827936080983236" + "7310569254298888979285082470600025912273776655596072801476943857591614720191994310220487539252764806264502" + "0023888520863214641824353895255575638074536400353005626823857188489512901031327512343674332673547866665016" + "5049446488498649673464767822603396054217556395696443674379523864848838394183411800390626841460528189649358" + "0856602004955530161376182324364433356271439175620899551166489231616354720849782465783774866022112969364460" + "3102397975669649131600761665002532724955406576363194307423103157628219150865334086120128631591796875"}, + {0x1.87db0e29f0009p-1002, chars_format::fixed, 1054, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035713345155797761" + "7610792878229505570226756358469896911919377105068137826586828649404727968260620169232867708166475001047504" + "8111775029985548082700855953146127275470476240362930600538807521258481943527749576808605590290184599616254" + "1846749805790846105326505422770593434773819010873491570027088825238135898601918199194638645572473742585546" + "0042359579974778458859418696543460213592095168174624769832598626020025085824933983826300131126260391727473" + "7077701597408770546536826007815061861863878219345146805938471244598864512590567375912282127533791281642861" + "0226307164803685258847872420371124674464082326064123043271224908418295695531191416257587024691172442399017" + "5156552477624283439156405949424531825414560528190620328410111172789953570827492512762546539306640625"}, + {0x1.1ebac54ed6e41p-1001, chars_format::fixed, 1053, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000052264507616884437" + "5698058090407392073363666940952778105547306570912930855963880587815215988005244769961306374980627154903920" + "2577080249977927392021364007921809496051524796096624912662285949137122585722498527523998551285095014756776" + "2895554588799427559673865771118036682097147368320276001640375343800006580702811100203326519987841007167969" + "2989050499741043577435715581470077666354778579928550640390691438050605710431110522225336076906939348214560" + "5809107751188268682005099869148951108398761525370973305398559682309093811078973750072903988378385138191514" + "6710101115251870548115971597103922009910991277759144615181140737633537081068270245133990756049414344541691" + "511157350304779944771415413564368359181745069897590897094359629893034480119240470230579376220703125"}, + {0x1.26d300e06c7a2p-1000, chars_format::fixed, 1051, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000107479972537888434" + "9002591708831714014935426753194183154300531753894711710626048627725959770241731634484316278231555944004086" + "4068960179163231231879379245227770021788137500855177795500847910430675168458379864001111773312371956782280" + "6226662250753080318042176493313687445777034547389630877431167690917476995346565873313653117306467438260736" + "9955012283179212129357477946380958365891562954818745714107417513297964491278143411211987964497322424618499" + "2767489380272657401336731570937923770881934128877584144038050995144315844786026271102120245128418421698397" + "3666369609678050583111455989070311087100154293624874535866388069907047758018717555500470604262934072224772" + "3902377618834842156673903433698480020775608092608474045288879938908621625159867107868194580078125"}, + {0x1.05d0c9256bd0dp-999, chars_format::fixed, 1051, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000190892926200005014" + "6246109184641947605537081104324320091424275239881358691794611711727670645040801753875872256603903100157907" + "4117272136518386432913664549165447650838094687054485497396164457724638108265725028655437867246843186135519" + "7603365817074407495992907452548985192207846909020732206018231589776116670138494034579664823906926825506391" + "6895324452269427403961247476556898979817349667497675420979079930454125061487858631618590818324348506617419" + "3837808794729928192158724968573011652615506712770263804093560900759819690351122605383339463689895499253299" + "3062766970887678113838307812351896769519964147208086459095207951677451629103665277817776597541497215541395" + "3814454153462956899623245175859438180611960265891792845084629082208493855432607233524322509765625"}, + {0x1.d161118863a28p-998, chars_format::fixed, 1047, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000678627268276378223" + "0838381983740574462538627006938330369010760005283210472937468617690271829803643955687653670078357664384731" + "5850357334123342099135674182764104627918354063120311333624666154673642334968649978203709306412298553137595" + "8742662333631894713141488626368453672515176764212534710900244814738983099412252627437078976170183585539748" + "0023329148528522435511879625527696702064745017607821933043748687600890171795457338357909910477142886261852" + "6510348200725081223743044674000271753348231462705442545938227394702232735449601014985791669981798312694471" + "6921886272884729180867056629180582090341046115889341965333287053999468745767913532019182182102123704212662" + "886623891441087681874017124137900152328702188653090400516365576777388923801481723785400390625"}, + {0x1.a15ea25a19660p-997, chars_format::fixed, 1044, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000001217237261310228099" + "3179252931186926982692345919033968631102111765103315033304380176933385417160002408427950029547023800373790" + "3138964229170029641147550066555294617444125756680352014437431112856968897249350959816759223604652482795967" + "2222373231938825328608517533711548379199837592813292143627291147239524233411932374697495007614762032590063" + "3348562563414895932402962713954954623414922689851738589686706046155327824502166704335474048380283048951935" + "5136211942835589461562419698678550112002073553337267646181096609192841991425028505763676531064365863007797" + "4934313260104372537119221193415761606516937805300536262521389430432123931165919988196641744515354119527516" + "627448597478758769526591885977945190412930384876548373096483146582613699138164520263671875"}, + {0x1.3405ef09605c0p-996, chars_format::fixed, 1042, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000001796667664366212833" + "5665392247768118683231502978059871166650153469309831612890500966882039821861868400342764656165871202066209" + "9545587837211036370546812947350494432238004683763664567568973440673650283854843511596346369844271953549611" + "5538726433986266863862950537061969082882291651460484133576667255869437876496100220690327162754077519560211" + "3421651211440307831129924696845524348946549788527717960851496934136922932274256932207250250473001752070024" + "9939263105447824182001422269657481368614500917398558972900508936492536325012033905462034273351706791432421" + "3319731475850729738988853204799698138245429919661266017564480782965092181767914524772807011403834355276543" + "4718432890065190765206137218078347442517180856079439532635433351970277726650238037109375"}, + {0x1.d446d39179d61p-995, chars_format::fixed, 1047, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000005462819694528703087" + "8864501228515552805464723717056197760606756889643903510249553048439017711133773671440354639386335467946363" + "5258948740705694069667341257396888036371466715243466156053378293733554928216028872449926627028194020003476" + "6664065924797146527366094882988718989577228548661057271640470276933597886851166967309922049028614618566248" + "7877704337685653857174654805590027514341847429667755625338708736633025559983835650906911708214459739844502" + "2686629737262804848201604027875209019963234888348727732753557137541010501446542044860603307612488978949804" + "5902945493217533531235155103049453504888178998390271594265142786559200789840036462465329069941137693873004" + "796208275584924267266632096981173837936942963677930569510454716919412021525204181671142578125"}, + {0x1.2a6191841a2f8p-994, chars_format::fixed, 1043, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000006961706248722051462" + "1989094015930584333539423148144476551620642624680348776495275585358068724521997148409410638391145465795792" + "7017181245452872915474622111096382221071681697520914214818303865707205751044498351025044453688419836560516" + "6521031955111219642419220298954347889214534531094837790091823656984057353139300007125800329303520470602016" + "7948760755422183994450699458391794656901738793039684960506013257067218773020004462578765143900984223269242" + "8211132570873279618568830654102695286917053708082753966210260483718165254879075265420369865879763466609644" + "4025144902359009191385276894101485935046230814418030394044362489237345080002513507196221229272533013931878" + "75344385870254336857446723410797249302829991612732996042467448205570690333843231201171875"}, + {0x1.43dd16d8c3d1dp-993, chars_format::fixed, 1045, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000015112507155402444702" + "0135306022393565196762089755575456624338495151308209685256453809677900586317175819989462383489016678007812" + "8257051031812975438500637988525335792799955185122494381194781947242274154359276094785530478989334370229123" + "2578133321237095332394795413283832150988339299341446907213468318738317581991050115126670141483262312008742" + "6760602897763558894964250015209221575190675349103449428597587562568657357560934571444329997703898734942358" + "0768701256013775365443771733885337641114591771941836216818733412905512656103173434643853672019620647251124" + "8650423697903231660849991114857078523790278047758844805828089772138726744675213995976355584951293948756727" + "5285870905514013401789321488674482336764102707025482497105173251839005388319492340087890625"}, + {0x1.1e84f4437de27p-992, chars_format::fixed, 1044, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000026739808737490122536" + "4009190269428022346895766923714793667844056434839900624330085514973193324262004035356895030064921783009805" + "7918884705807964199330848477612812938804273799622712378519478003286575370136489884812949516962024244211760" + "9607483360980909948460156496553861705524933111620692577199003799030305070085885260314199767588940990499498" + "8078689242985218461431861416650687300826323297128877359071851056100330924999478855370872777021779956743000" + "7545478335135816334783842422798567071342281048609259270742047112691073337142757755314683776136264937390122" + "1873542271412143094297154950828903295388934717444104032709543164412117129850006101772698944311067042059526" + "539301195418948431941957516625083848704359299592279997082044928902178071439266204833984375"}, + {0x1.c7925872b0513p-991, chars_format::fixed, 1043, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000085033691573552436743" + "0323595018676754258445568824857213848746280704072236823268383060174370779364946428938559999659947344275015" + "0581379957883082860514723669360341807003760516126412415812793589694396310117558079412640180009205258501662" + "8168299988567681700239036505371609193017146078988594512058175724878949384378830226335983376290822291404418" + "9248632446027235425101963979115169194359369052429197321029095626722937610274060480758657835985167284620389" + "4634678489005824269693355199622645770717771904806998788414597121681720429667752369447431326712331419045036" + "4414271762903198285517145494958139622568612777791641778831814314868966462936027519211973383768944719374984" + "21558727010629900424393170314473940204826819442250618319434352088137529790401458740234375"}, + {0x1.627c15354010bp-990, chars_format::fixed, 1042, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000132331069010968920653" + "7939780857239039544548016633334237413237030012119277536525667655183086798246156040464737778965504678479790" + "1474884457846727559831433511307559536909759330053748585588483826065566236369058902865464984070903402002662" + "7323204785317407458069469681884433078585615253137057737022751348523239464068872849303111358475731358182415" + "8502490046319712249459640319924660673321900548594141665580600670298168713356715944526652647848979125983846" + "7839220086418924382938642559837439793813090896823728294937356571010588743924249642142134571267294351604717" + "9447180198284565221387942070716104062289822563870293702055361674097594361411801121077029800561858618979754" + "7525922561378864683438391102840453976506918695559000820338724224711768329143524169921875"}, + {0x1.1d2de00ed154dp-989, chars_format::fixed, 1041, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000212917897767202319747" + "4417184045234455038251105719793602087695352964073068726597457261574546506799204162006987775011216832563456" + "0635491340196070442302984208136777483158675150452452277667442374906278069217074864671270429435465616153992" + "9432660458951455065381945835228296653375005117467866235836194378970814659593732987749891400034868404843486" + "7379969507431598347670943694548493918720371503317755078814637245395045814662285721966172731060086325202379" + "8327662484462321083041143497819466891858512956512833365948538251133632051079775839484970665348326549120564" + "9633701698994828372260402174673318251741533123437069536319726151119995618020513531694305619149713245476241" + "680154186797493041998623136670913061162976041319760955872197882854379713535308837890625"}, + {0x1.17d753cb61bd0p-988, chars_format::fixed, 1036, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000417864861523554613747" + "7685826354126061495049537861130696785666437631785670860809373661431538965440533278098806894269459412201201" + "5342190405410686311749676095764013989212813042022776259075503972980415783422270319986285895393209990480525" + "5458610171011481897913394796621253230590592528977454294886104079907963730807782157087030725023771729623579" + "2871419986889904702428266107609034227421206913924373960475229255293263340951844946909235155930998157636257" + "4624741570807283814428707319137982913483625918909656057073314391592554674800556558040189767456641449201582" + "0665916994696040385769960996006956179327586748338004860755465704705486223232459808249735830200807558896234" + "6666145156130842715967918196794561008886211006529975975354318507015705108642578125"}, + {0x1.3499cf58eac56p-987, chars_format::fixed, 1038, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000921618937784037325138" + "6225234344523900898114056892264368766389694116364433408434582133098995372021049984062191604412148079156247" + "0058129921769437214706009973058260865173496321652883226793313437335515335934288330827410313014457604685990" + "8571668564638099154710476905079045104467961179905381697182659091275421605654409939881825288538480681503005" + "0912205675383269371309430717708417954717530276617121140004348164540143690585881527779717788936032409975347" + "3030704075368695199951827482684013499971988993418856488566338075147620067171549130652258755105025348424465" + "8157619807012998649176788353621728721596172866945364020965829131795883913896368903414188789632715887110086" + "986492180657573226368342685188914874974230699578026104745731572620570659637451171875"}, + {0x1.51a27e8a8fd04p-986, chars_format::fixed, 1036, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000002016654222889489366330" + "9521343065653027086245497896068869059180976583615938098889986991041485859172655850284923121278179049365606" + "4318876082158442840914388695516071513871282541627904960007529256925655758366238004656093505662713945653752" + "8211198364194749602836764902987565025944221130708673443828163387359505375370290009445274572443627613958541" + "9606556712353250612586551744106137528572254128169189469681750106767803119244277794048375021047157915946259" + "9857421379948439622868937356578266959909594120741362514869852677384097257555841840521523679675833897238817" + "4626883880522031537078122191460297407274783067835677391633127317778686117811785197733857788768303829936298" + "7414194915000779858380976854620285433129268926055743804681696929037570953369140625"}, + {0x1.28c16b4ed7098p-985, chars_format::fixed, 1034, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000003544974751590889385952" + "0264700887688271107416558032715906653570211101157114219987495688096790234026558681710675314185695039044167" + "3389046891140333791267175538211915142881836447148902272897131242054424760323762734875414119017816505979577" + "6451057876420487228094750780831495237996530558044233292884300493086993773653449202457881809071533897240172" + "9596065603472996108834056777416770233084403727965152368376850711830195137130645640590704660731909870705380" + "6529570935342883620442701491795272567870361575635905003352499512824154974326187486698906026566290297547083" + "5003190344156534010770165498653170496875412652458097421921303135343195297833828784423963016127545265701753" + "06033284095638792306713346530524716480707592136667472004774026572704315185546875"}, + {0x1.519084374060bp-984, chars_format::fixed, 1036, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000008064939085743457919311" + "5655390618626369629653008353154439327413620740314818119036634456720430925246670592130257684011506550587519" + "0702262346443580413571712749788204695695123012277087263105239201891820479284533969818518645517731907503011" + "0798057602091473932084908015034567525286047273421566565922229061651406247462013601709967883813692721418546" + "1292825117230319532485842557112068939568153450865993280216546928857042166319106957693584960248973265389426" + "0268826761621079492065154996852043006813295420056272714448441938250959284349518278972810987370152873447585" + "1958983525486767921479203821534881357550897232367303129611065194955396175464225609057065347598042047704151" + "9013852253561174979884533208594899267372506368456441805392387323081493377685546875"}, + {0x1.bb4c1e678fe69p-983, chars_format::fixed, 1035, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000021182119864764602130642" + "0947830872065837349416562163106754912736319440133647537047417519506625089140293248385386753482217342594034" + "5405343077013463323112228715747967338103643416804748291754537549066191215546707658855503073696569114420021" + "5376163418936391259487269000595612031216319183887868586108914728266913044890210415928204921425043137414284" + "7079932175793656516248460353248085399130697050117059833885306031409904703709059143662429130360743269466709" + "1959787653602446546371828086868386418607590851520843575326635774784713441747515775290972240748548223967022" + "7228091449147774440773030146542967075167643267588580207316320357062539090226915532990280045685258559475635" + "362835015005020199131435664704208816162996076304381176669267006218433380126953125"}, + {0x1.8fc48720ae1b7p-982, chars_format::fixed, 1034, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000038204276533494359839532" + "7786957950037434467474350925682292758702707539053966097537580947663100241695943403082531804530234533427497" + "2055557698045277228910057583486130203365779977007424200345778333217990261591775052038674621644837883321860" + "4479055745892037899325962644530650042011580751336469774152864887311520809054052032886266679457055618321561" + "4239563950863023436570620060327664713533021804518289012696278260248731747094663669522603971081606399156333" + "4699556229294842917259386087074187210475783580978873634790343706621345363738501914041367247728531590692172" + "1291972465216250361492750030131190959054941877618571467150483782421339536125360230193230482848612855245297" + "72302016446491866534790783641858391019539842314856059601879678666591644287109375"}, + {0x1.df9d17014fcc7p-981, chars_format::fixed, 1033, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000091669699368021086682830" + "0309093813571285621232474662339098971852561732904368691968438376659413371715296794753554027780942902843142" + "8614854947085524042160263437140534698285714236207807018531240854589582130352740175233562430379023280135911" + "1934199081564050835388846129941632190939608375409401841582717669022462385638815428406251457874360114711958" + "8910563403995608284494480455504769946667523216484187271326674880791332001238898632099770597084200640414102" + "1470207555193573290672314600093406404336752969826544293661311868686214794585806812928077014517560803574745" + "6710396985460931950294497232649787115171583267022416268260150828123549520339627356344091896805352339831926" + "7275737964394466129772993407912666757701714015382776779006235301494598388671875"}, + {0x1.14f46f3c4a3e6p-980, chars_format::fixed, 1031, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000105870073708333769307164" + "5886124072693146296874798954178832516189855441157660004353211757630771024341596578033719821846802609255108" + "5643962556381937827988644235294122737922022064040736253715486237412871081011467456775144784917714373365323" + "0160249007136943912958984242226946137765447165742074403848248923815843134358598433641122735237144977649112" + "3135684782630561684391683828579425996992353709635774270637096026351859440339529808571821550153320544369606" + "0298503739712745713124908816402368714174653481365366811568682760782876915863262163482116619227760185945641" + "1707613300236561721775200418214623023298244641208887391216336535355835025703113643664182588390096646989344" + "53704098273993991469348626790718931843515715485182226984761655330657958984375"}, + {0x1.4f1412250492ap-979, chars_format::fixed, 1030, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000256177341895859676868182" + "9976825737256842310654327258445744819313471812859917700055329134698004320247395612121803671260214123922447" + "4119309374557203193060398335988390438444710676054145004223437055549092341063651939952711254089605942575157" + "6071960503677948754817700769498401177181766232959964193664903733784825820267664691803248684099758561191352" + "7817469545238997407045234095644380673653509287505277908336999504527719309410219875178825293965486069247083" + "2277413345817796973767311238020200683207741845002297395790058716153525483767396221899398704893320226729908" + "4432475721397029529584462526599002034113933442034138852026499319988753574461847693397707919598076817475405" + "8802045425915342354542418540247245180296875588510374655015766620635986328125"}, + {0x1.9017f415ef785p-978, chars_format::fixed, 1030, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000611766716334159737596090" + "0171171739569686686959974202247177759940425621023390290215523752040825861534988212323450527213368448456470" + "1777247058601053761862866188287904621671478557284507204014216207221772415281552042774346782581581192683400" + "8651569603496067106454520729283294752579871329182936426348026704420032363778594943881025488296122744980767" + "6379388096070674965149803890959401033610344996445005362652164402969795474430171420624878611838431720806079" + "5409670502199104925704949359469014160326235763930160048467177873299739191152514183146561607454394603837639" + "4614792823657772754457214549972293815320072055217604731689008630136271723456654164715192320970918259328542" + "9056144712640551237160829125782371580577478908935518120415508747100830078125"}, + {0x1.96e1ac8ff079ep-977, chars_format::fixed, 1028, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000001244291850920601401202895" + "3502157484899302248375526922745314229166692585546772990892217496229641056244180835561315195689137757789588" + "5020022496772410413988317059045245377611213388418239106676765461468848383746280664092973815474299167222516" + "8441354650138195822558318864938044614007032745608778442983632656067307717276665535817566683865265869024514" + "3514862764213610885902701104197953459657922797754442670964483945940232205602535173374756171647220221181740" + "9708258360725922875465550779760937086007766054677009929064967760576046514113812222363608434148993491188240" + "3581096088174673455142188302497447440448899021951800042462326739293158886225459160084952851961541578755088" + "21587667877847598940277661829097687051781662148641771636903285980224609375"}, + {0x1.fadb23cfc26e6p-976, chars_format::fixed, 1027, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000003100051235126117055734868" + "6264751638282347697441603952716948646046693942464502542196818852403552824031750041494745884790683734926184" + "6175883025166164806498599908783951915826113591552191892899938026717712946307353394825563800253428096559535" + "3092919104693493427497172744505685162739090774795106876820569693546699239184707928567968354322443185678444" + "4083274091500700420703555836987399712520363953870514465047148032607184325622329241423209045337661652529605" + "7392478727384385760735974124403991028933509493200214488404622950198348128729879347251430733000443246176375" + "0012676803885387452378858427867468188188241476144860361211975943760433595129660724041926192764915817357353" + "3413935670423949606511027942182777417112760076634003780782222747802734375"}, + {0x1.c2d100e9fa8aap-975, chars_format::fixed, 1026, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000005514599643126013910099346" + "7191842543303968665047751359175490329248140080201690655843472208689617281422163505946515376031144432861141" + "9690134650231524119310940944686897401473972303914830917415065953443301454685388122841522413415404381988854" + "9152070816439653378310887032225499836821436715596770866662350547108554679082936746467457577046471331226469" + "7289274394842495745574537422516867037314585991641886069493735438794004631014086781490233046315499495508653" + "2232557782440079216740709862709191364247832437561527741320374664494632591901127302658724842566511890764605" + "6283387444873731418111750757745277659752247589518641113946873407135807482894539278142676044746795852491585" + "953284333927743046282564834512270046662507638757233507931232452392578125"}, + {0x1.47cbd89edc28ap-974, chars_format::fixed, 1025, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000008019518080011995521858004" + "3524324296264728715452014332332170246674538871845805219648492909707144892198471904040082534603052959979879" + "3600046834482647444437487683767751220097572919791242799892524698422822978446221165723798256749590483990027" + "9146786398360818656186570954245843716698894420854352456620438185242918109562666605362523505773440715614748" + "6304856183344925087301696163775028804963431540984237380150218682479654930440154361420853333545363389746232" + "6737963649687648265020685474228502202597648554842420403440696183134806821821458476785465845396455373942354" + "4076630981269681312843563475213302475499714965733582391790622273205357040908868407873222029151501734155057" + "85588461369367258646472150182028804099587659948156215250492095947265625"}, + {0x1.c4a8aba89bdd8p-973, chars_format::fixed, 1022, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000022148549407571021803058758" + "0892378748180044045162290960266128758237081853875197114341184482311756965524739725514269341594904066527742" + "4434707407854591706332448113851127805566965881571771436089615736431261505627619156849281750933181906556668" + "4802998876220095291903915324011764241086179483872688853308191821462831037697260650618579771433274264469131" + "4774842762584499878681779361342808953291656008895208453361683573332178323164956420441319644683365839431195" + "2023107428052765343098369150862706140329683451956136293976532733407029002335352053483609729854816729883780" + "2725991818678468465210144105201700849036212045721809359776072325345109326784638168220298677182818265744202" + "36100747585318545294634398450106527178604665095917880535125732421875"}, + {0x1.ae1dec42dca09p-972, chars_format::fixed, 1024, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000042091145246438698296464197" + "6788584620223206018410308358432061499907914886710591233068837766126994241087546476736165489660708158188897" + "6532528261348147612138346921175538542711878986253712101692204514120740888858124855710541461898075840990354" + "1460234877951688209248224254034261463148493079177659920629778053137602860800369125671659281747652562037736" + "4696154878934954777146874097164792640219120647730346822277636460817321960525720307042509474279237735500174" + "4081039719787285874992326572699690952633986222005019432682477986364030941523289532031147634770203769239297" + "3034679777114534015392534198929701908358497367015250536401199805425015654760144385399977606296181636396097" + "8393038157465241961259638119909054498890554896206595003604888916015625"}, + {0x1.54ff221954c16p-971, chars_format::fixed, 1022, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000066739709449862607565675687" + "7829201194838756325023076671857801591621689938639801840509711072309067042884640156496699439994300838785152" + "8664871312266920501114219371300473883094315059942700609960588228198801286350447114884254092561109053574594" + "5360033210823732362283438537636905209068142302258607649060295923141308162131010242194197916325697362693742" + "5960768196935871679150780952465291867950902919984043604391377263345732481961082670822286777585677288460873" + "2483185534928741979770956013577147182563951486094138266102243971731116472336426028926215761392757848297473" + "4826157117612672491687994740358669693712403332630888555168153976682265301974938845259831299379547919361155" + "06649432796777077774136549374872640072453577886335551738739013671875"}, + {0x1.be2f99979a8cep-970, chars_format::fixed, 1021, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000174654636402337691006381973" + "6077110430205085110398918660610208193165002648830459932732755875328272920006833298046786276680503784255684" + "6006778704271227385435512730699905754647142222043791534216190031489176270929205737215277156234213897550939" + "7213454717107882597757342120686914788114089935876483956717648137138281353448511598356787044275189190360158" + "9626615453304416936900776008651698533435544636347626690765031072431532774639002545780750939311942703695306" + "4651633504530963445390509584488895131989898049530998192521307275379277301083810182420653862263320234542268" + "8648205063986358713344707038657667978506388499093939846046989651768187181149527056505010534577248975985391" + "9318571093384770703357713843295595523841257090680301189422607421875"}, + {0x1.462457ae27e71p-969, chars_format::fixed, 1021, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000255329454260029047805071575" + "3818166924852760785307324274455464703276896685649750398556670281450079476171301511416012248448222007463781" + "6440716300864560198901287405644409298523192920264967278757403969724292477983682901039009490073938325388861" + "4316831594822366040947933300462054184386729464257884520452002649710897967901356092952311755812378900392119" + "9749409846260814033055309256968619621536147314096602667572767547368480537021868582121265835469099565600764" + "2227738433848796318377451325226628190118679852419841970206898163786280296976945027930017893514340686171115" + "4337993762616468431106982229175266879638765688225021717769969836929117214014785145496494060501032575121829" + "6624302065265450254613545551241049480495348689146339893341064453125"}, + {0x1.c9bf289091a57p-968, chars_format::fixed, 1020, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000716719905100483776140191265" + "4283331028999961614491290387680525327758435160264770312345835553652819216736444016623532872322399497645329" + "8018484358256225950727041531158851305320828328874380156377840606874957230780019461255688271701567752333273" + "6185122438898204140391778580621578304431368821964640382678296205551136066826473768970889610022361504710940" + "9764110696035061612142836930506582657157327364164772577568894370334356710122547899533333122870576400085144" + "5387986577865539325916074017436777373567504894953242171513494949770270836128523773225426738845273436941923" + "2602320030129013140405207627454909161216317749927564665698270971158400157244573484733167635547219613675510" + "582898110780193501917110197874105637083630426786839962005615234375"}, + {0x1.c9a6c21c0e44ap-967, chars_format::fixed, 1018, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000001433141335227930212814919107" + "2605813876697528611345885441115000029609556842920386965482577284207290323742533219950959430783015194668198" + "4866655822228339143835403194270253223913061678439860917065041842332387051370077950094428814869878862795791" + "6496725038596154564027501474646179397442030182754135054292301436144243035179137127061028271541768460916962" + "6900527234807117188403332704905395975649634750649953559577652559528484291031633467618609466234606109062833" + "7052908713177247664619683224737543046454127747542696798955644966121171604862571317569558957857552588354280" + "7316083301746126724381306477578494291843709874477007787068278367148644618010713187514488284609760326730217" + "6234293033266604144621188254848931364904274232685565948486328125"}, + {0x1.080ca19dc76cfp-966, chars_format::fixed, 1018, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000001653747921414095749664443207" + "3018089012144452120603766472454112579144784777132047524978251678680652305622500049925363586631576797699752" + "3004602180573355978400757182575064036053958408210190339447230879379051417089690260064067487672099587992241" + "4089510417178382171731253321930144431314913298710310772875402641130578414655191164330530463646436718242785" + "1593250624197965599005919337369891600964947788560805510699332326217569801868088227035341727693943399255277" + "8680098874211345639068458050074871457491113617241586311735177325328666991945594936160738917458264152063330" + "4112836941762385362003194298015982774531160072879490045018610848272352089449297155999395672819601691676846" + "7473936479509527842902093242027916630831896327435970306396484375"}, + {0x1.568db6b9c2a6bp-965, chars_format::fixed, 1017, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000004290843909020546729010417987" + "1798651941226153898698783477673232932487248769134773470874791558624108005131697353608862902655753654574915" + "5269194293346060062071094839619735992744602682720872020489985764651605227123683444931533858939585871115444" + "6384822881445654088301480606833643769669528121156913759180085536698487352616174964008809803650350438860725" + "2321301774363944935742492341884553608844792004824932319261176330222096044026500175605116486722498994442457" + "5770385717357779091208619818711665610895151705642793452624142140189626570619779038580875302481307764977579" + "7625712909337310437672688236559439684574369461412897368191004528045867884390464739907179528687280026756613" + "807116577015152709246269269183216010787873528897762298583984375"}, + {0x1.8094bbafe93acp-964, chars_format::fixed, 1014, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000009634563122144925584252862709" + "8837665212135824138580247641095033482922043986659116736534146977997184184550644460199475556134749771118880" + "4648235220805765618575601316863143054761832211432259334276682908110694267973267936336452574790472113201409" + "9792189719325293711235087718438176498772644269414827594417119678477271996103962446406885046148430430699696" + "2247952090789771393359568041684499232396514214051736756405489381778675872598742815737011666738940745479418" + "8886316922944939839391299995745043273460133146343884929041994919904676232308848762167658898729149951509500" + "8487221366327604330469301849090855522740604347010078082126314423497545739632197917648583593472744787066092" + "183286022494344519144504612739865478943102061748504638671875"}, + {0x1.a4d81255160e0p-963, chars_format::fixed, 1010, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000021086057222075156140699923441" + "4564500843088972527279057134370861085961669874684090783975879714875336360665125559425961800525159988473481" + "9389953871450325631938423353411492527102582769073390696443103356152047667934205046245456558650038735730800" + "8719781038879945645342734732749178265832103241325253995241750493815151958293657369564370243965168645236220" + "2454062268891390078907577990174502268833095111096637846568643857395612744263557657149281665440973055056669" + "3721065896779939636234938236192516341296551508179883633406331741957525488070917823271593105149749384800080" + "6618376890372039405238914424603586856296346669256598951615088896128955516717885738634805731156711106938387" + "76867128142144224012266562340300879441201686859130859375"}, + {0x1.555b4760590b2p-962, chars_format::fixed, 1013, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000034206800637910766975986348248" + "7568092455857226172452538849137654670829026558635397447930919129012919655902035289765511658279266066746655" + "8236027503499479197580402361620786863744924589096061170472217063438961289426815347747096631346945775370008" + "4502575974626831490993326694422860463385783401015534916420924789459645737632655303976057606048773717878928" + "6028980473242284769127953331015775341858001266767203925650569921328324381543299424787438555730075039358292" + "2931646787240480909013093699491596011502544473515796187072513489926739944685859607150588631254483057331394" + "1407589732975206216451663662122824092386332909028127374630388995592459534494362129485634479377824374911061" + "83531864268581560058202217788902999018318951129913330078125"}, + {0x1.4ac2efcbe3305p-961, chars_format::fixed, 1013, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000066290167589677367951375617422" + "9292716806068642209468475059928574348081435492672562858635936768075345718116507990734126024664323017252510" + "5601231572132227719729327193433661012858341100476443032943984664211713338292994338219373247383273584684158" + "3610763427888729264228261155872596350770036849190036848236690453955577994035107919232269198025498868586627" + "2949097261799666956920307209623381975737540495544653710372564881978390565989219877292992603247756361908752" + "1925534187639963588382054509606194952749384570687464334561188609275095113289769257647430285377053075634126" + "9447780751678632833796862583333928343033480199175862679264807795179484789189270636076092132672376871712774" + "44430229764849742991883463361091344268061220645904541015625"}, + {0x1.5152151a900e2p-960, chars_format::fixed, 1011, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000135209468575757704669243360090" + "4978812788038658784057375085512637014821192293633284354988083332910409714056212910610846709279699966459815" + "0437523432714437780192406774076606804837119144288166832388898991383219610969528979291417497166809956493647" + "5085288494044278548669054734387251268194713494859273686671251259149052477932550907316733642367666498707764" + "4126779433703191479472341766481221651746023800800090309455088100077933460409533060257217016013325784579980" + "7633941363732792862223948592127182664634081911897379649605382133585971706661879051381683577333948154154830" + "3712439342710725481894223508701233451359165629882362810744996099608461578753790281688211841686919921141420" + "718345664751217256871473892942958627827465534210205078125"}, + {0x1.7e58e6c112543p-959, chars_format::fixed, 1011, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000306515321253198280436114038864" + "9718163177630153098638242256322057332264316825884745387709988626966778193900377967818621973079307255143430" + "4355125421170227991116729669620848426239592992911979679122157206922094124611266846097111966736120531163975" + "8215562046178316584558614023241339019551486284645236279138390006112994254377796838563179303464741707072344" + "6154644578522256496639523318507897582380933808362832961397125905373505903881692268239311221184441430130140" + "0353970351150576226049056471007070154205939564098937126326694182928324715844701286793731070551106321932604" + "0478506394714115663318719578959298300145129737275568872010082272953473703897500046421729618175608545958200" + "349764878121067677996247624605530290864408016204833984375"}, + {0x1.3c778445a2b30p-958, chars_format::fixed, 1006, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000507402297546796300155974976354" + "1125170478284238884770689255999822246103901985835478854589953636416469537561590049706630652513764526444447" + "2236786867983363196145687982136332550029676213935914005983113566403763609110378518267950840459370242977226" + "9969685610809178987830705642758801741201614124206542938945991467305841033444750290456306956288188648520408" + "1056812066585987639722063880607676286374127002491780885114417306881402349312394657949491179323334737191953" + "8280721400311952883002233060077141079761762918609175743077624948793447281348172956072801799356361241858583" + "3945965146499299438341126720124755301171679221957015338045823564364353547020467330563043595487862594075027" + "3716264569061340505840007608640007674694061279296875"}, + {0x1.d5d886a6af07fp-957, chars_format::fixed, 1009, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000001506640153100876566020971562084" + "7113430721240845311467067488393060399424689768179013689935270456617217772626244929423631519228493856034858" + "9795751273940538757255549062206419695642046911817014605594134791735095417547349666106256911825953848335647" + "1500150312765170021570234313983189886563782145873240440323828891290807194213814694507158939235901598275080" + "9131377045618332285170839599383602029439803065564549875367002305011744027345479199876728897725328043145101" + "4572515866251973827561103685944590487910895898225162299074096391327451735400570200908986735487971171181929" + "8254603418980386599420783790582966667612569549001195037944795412981296229040797865364009022932618669635537" + "9052802457638497724001780397884431295096874237060546875"}, + {0x1.b4d6ad2f813c3p-956, chars_format::fixed, 1008, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000002801593794149458289375221969937" + "8451541676163091913910886367587801515223826775770979017901213581846339239008597274356448340618213879408241" + "5708206777985372462737529604331783161052369852259640641682719407243347401272745693201162769531854684711698" + "1997986538474037406413302814400876575334916367833693107072636011428947924771043183285915397963385764442595" + "4502850284440493944167381091614718033977997952112454266036283567034492773027029721407239251594118127204450" + "3439934946642157033684526504794793241794104430220950327217291773091671208313520057013551013607566881844423" + "3387687590160584099397367567846354051160569747236486489617845200348490288202051349985773023756814947896164" + "670199036189450481071361309659550897777080535888671875"}, + {0x1.a3accfb847f5dp-955, chars_format::fixed, 1007, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000005383036452986689707089265313361" + "3309687768553145998845020770002508286663820178028904357041106164871662930240429232628188396390915409645247" + "2893947755538934242330914543826959031146221568246692512569359075149804195162245528686132546025168087601990" + "1469233112170819584404180268970996038988942682994555869177877222572726704409670637060636345549170735863881" + "7637507737802603692179707323013726519499078873069293802377310441059050095455840943125657666622548189687664" + "2690857726316749420932215444605654341122928806547906002555368770089678159201832195643718096762297912030990" + "0059276854565582725176763468818525035142169991443317320021522630614922936712841305529989073666151493844968" + "98688035417847308483629831243888475000858306884765625"}, + {0x1.490cc71c1b5a9p-954, chars_format::fixed, 1006, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000008441234238050257654608143045011" + "3714547500629438411347771053360322063370388173904974678292331037009777086711209941481547644874475926368827" + "7212497420153992338777818006934888909213572957511956634738036763365144586177532285838927084302911516660789" + "5428831657856603626176699984273793880426192286194266443686243608836600001354453011013245420503311602188706" + "2016086384595971121585437748216881228804338113019161359341335927611034275239403794071774633231535502365664" + "7031482236645528004617260974202488109127266152579244998351781422253738236175424370155077300184429245205537" + "0516538649507594510998476523084758454303188096588303409769684799427283670348952796189333712505075374786790" + "8906204526854610836750225644209422171115875244140625"}, + {0x1.4fd2a30c2f2bep-953, chars_format::fixed, 1004, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000017229963037415353860036939274512" + "6026077034739345703168137555632023714502853526675561807275891540870413620561283459465386257149814404426731" + "0735092244866475405537978980001598032195060108955428328784896295737887239531749999981802001417396108156377" + "9582829767646262355995956025950412141943783595608625038608668079091726460029975659200114921786030177059914" + "7634700558856107451291371285917065599081112280820640917253408975640335333977713665527965071968852553983251" + "7124741580735742733225434024967537004498810829066843540287458856623760334851322987488292975046799929539221" + "3495872616271007027553507548507838903708274694818842286459908081847482476741930831685576757938867841781152" + "21749321393784892819667220464907586574554443359375"}, + {0x1.e712b11ec1d63p-952, chars_format::fixed, 1004, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000049980227888927947361544276876048" + "9455270526286941463611538933406026259074910585749895445770331696354343239202363631494369169360431693425214" + "7634518684792624730079945537425876985997178452231243017087626532543106276358615929213885810712355953882567" + "4057455540596743874765624052243747659098442761322506411824665706108552084084218918059037991974479006158869" + "3056169849068456226653932205312729989102037696430382138353314730376082250724904487349755042619016279363453" + "6282770945810749744395830459488135229127474448425736737475336134881159932765382595260797681368667692815244" + "7950498623978211624297230724599890314306484488764858546210505231295418043612182084416991082185028657201667" + "91044828773216135431312068249098956584930419921875"}, + {0x1.a951cb6dfa80dp-951, chars_format::fixed, 1003, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000087286979124915840031811171249768" + "7467444368897106753274009448112897434374990551504083361434472076990675548257442958324490534088914416947203" + "0345962929533820622952754572337555244829291746940819858048818312512407105788126951104999460919138178657731" + "4473614959923071645694511151134251192939276656412454422655235774671039752807359164333796045189813934206387" + "9562295690992026703839973859592630317510343598115293358217353215269579574482300932318121087160706915252100" + "0289421128756125787103234636014020808990191470118697352773753581193966992555371084452440315677385870831672" + "1036573336221194782970791861317168649003079683382766692806872535633233936121493231431619456165918433391451" + "1633536505164077112794984714128077030181884765625"}, + {0x1.cfeea9a77e27bp-950, chars_format::fixed, 1002, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000190422710104977763320017088013306" + "1562636160392816356868148687074254559912708970128427928098420716969202321713200302826873037284450151621445" + "5924208987366001434939743136403660684329034900795682515039218239607769961070813600340587606383062269871871" + "2357395107973013643630031179965109739646437772385890926147471081285806366515162850607095993734762727585189" + "9282446151613688832986623643166576916545974660203523412854521672957349134716034187586798702358180168471635" + "4436261775438116143970489630933836447388034254533478276594259415992602429267767218555714089756461068648676" + "8873410595168253783490481271524725831561300847507090574073351369652666435690680061075434980258140771483701" + "977439921548818091423527221195399761199951171875"}, + {0x1.61502417e8ce2p-949, chars_format::fixed, 1000, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000290037283829511630013363865236170" + "6238128613374409059474358941441136834065355513724427153759145165568068731597325059613096888192036043781625" + "2207225681919322577983708053281262885786041260892934350969948470571849596784985903495468733626073860399109" + "5807972691548050674056472793774421388608166241433888395816776961563483444952082053324551414836304389344379" + "6967648502707271130763132701946276020956850825940639071222081359496315692610547887294288506372101623606589" + "8886987801334925916746303182643848978302993650829806171161826837630193206362337054919742109205228382754770" + "8325200456325402876426988696140638836178773460972955648321583541337598316302171184287844342406097967000830" + "5676166815434413592811324633657932281494140625"}, + {0x1.6f4a6043ee7bep-948, chars_format::fixed, 999, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000603023001148053233608671406136662" + "9154844710765750815164166009510289390408928352130382822822659766062818235069111539868695121950322320668137" + "8171510738766830004867709994331683259303295072702253338399620483078087368703367864741062551628623933830201" + "0153777490849939613997091271883572026324551068699553809789367085830269349078915084559617633423193812990897" + "0145201797688554174500309060673869117866459629299845875451222894126638524480070648366890280832688105349742" + "6575560769846504235371891665287480776710841447042185189149010554457654596595786073462212798709949925503426" + "6265556017366214401224164470380415863280759607522343102756186448326572436788800100967001687104564561953359" + "727412837809623624707455746829509735107421875"}, + {0x1.82fd3aeac2fecp-947, chars_format::fixed, 997, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000001270729065641045197214871417914178" + "1588967973845926807547334471277675980850408554878248054803892782582018822253418256902829942626257005944569" + "4988348700318777825258518784535605857425130299671300426071383629977858895538733746821903149491024406625677" + "0720046737203696728672760192370711138924283768772475940785693724826698986046600899389474145339650214620200" + "5519277127551424134439683925893021558019255827189881118691971239229665920665706074589881220195814966137824" + "9840066133255936674274226197607897248507836438905238727384458811013417251337908250088568385820779325091802" + "1016981595825486761813591464957247173777907417675517257352395503235491976503703745032815963872051462389201" + "6668749160857032620697282254695892333984375"}, + {0x1.fda8896e44ddfp-946, chars_format::fixed, 998, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000003347058306335633210849876675716650" + "6385353764031783485196998561866179457340599432256217213352642082359348776006561937984312164867983255432833" + "8726173157671099841073635018988556349126405324929433103638921411010000406997097554139706240329983669188387" + "2720101591275772567836499474144709269745164033553143381865980948114813450956332339842537849932862573037820" + "1514987590090742627365532394510810911008494010157265556059636318908537716658826575242739741476951917424048" + "1162648267831006229274985704703073458419860862001834681264408952610279695812027204281110026433304299240596" + "6114086480503347740480307977037393767702327170428860861334438521055997639875193840517369611866496580535518" + "04025305127510137026547454297542572021484375"}, + {0x1.f63d0121b757bp-945, chars_format::fixed, 997, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000006596657853729203515742243316233994" + "9684328657517781425278937040263737397772577187341772038360860221866728139740168744657011708467799022498428" + "9048367008807112058030080344286777952675512614595714878804489254477073655363178820937302943891173739688722" + "6525344476794228878774806817015940622309814103147301158180909849015378481312311580130769770792089183707264" + "0679333216386798989999483042211053745064747961945094371289546480468588624655464858151737047145695739493473" + "5507329277236644627330631947684311599090344589073145189553679017707785009474304333968113131703589680752374" + "7130636300631758866165476656409393301104737836983161194297942630550081578225483538085400178223022866888026" + "2464513375419983276515267789363861083984375"}, + {0x1.1abe55124f6a6p-944, chars_format::fixed, 995, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000007427398668320938600202918314649779" + "2358537735412418076229677375034053108781538417130596628794716377703048792043944787439164083049732926376919" + "7669372654570210896760100817222039133059067468132996774053651076190226967358944107425923006562795703829318" + "5520235291906031948115381397829092825319154312472026340183818944682611111115614544147416970660937328158629" + "9060755244822009110650534665364827404192153653867280756103054142218360222093458106173489557405135404872456" + "5591943722679704655789621606831198408689956651820414839333271464401183877845096687949407630565934742072638" + "8904357845227958574995156936912713306237255628189778269960699349488082411063864186430306510089287244696020" + "99256260174797716899774968624114990234375"}, + {0x1.e1cc3addbf112p-943, chars_format::fixed, 994, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000025312725644714645962947927743805809" + "8046188843976178214375723184585507431180848627052892059439660381190032909589290532205874362493462899587538" + "1837943114843677690290757475966829773381513504462465935520985874170808757851469248740093376850022734253382" + "3476404974675519672682903628385538916962659662633691571736344318617777302846800242763765681365778209538316" + "4365461668044042733324278614600752670646079645747018634289655624083620110521953699389815696244858788510527" + "4650750720507088292109266028314375468792514417090375144624505854846370613750986429422869415728090168020176" + "7526275538160272166003731708917966386538917542104658631524656016777584689065144268206602137972929129612707" + "0831634142678012722171843051910400390625"}, + {0x1.c37ea66e435a3p-942, chars_format::fixed, 994, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000047441324100905745554574287302084691" + "2803820795971935816315591113366331582329509971297928949808058941930664947024126350169270196995072745313996" + "4094982842291547313755490486786367335729006128614919710190720756388346060562319519438688203810434951289695" + "4849502432807790285058942456389657214604934749586162446761321929113744909744685596656046149778452097128786" + "8115519659684239948033351708868051182201085858324140277023786909650546821132637590793226042392427342459479" + "2513951533482347196046726595658528758631712076151539390554904469478656627069451502833062779732643453355045" + "9856203730373419301715640151438670751568269220698410650144241297015427718601896354602394403924717955739042" + "5574947556697225081734359264373779296875"}, + {0x1.5de150d8571dap-941, chars_format::fixed, 992, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000073528110594538782482365773897168607" + "9656276703283988537435722942874894629410400049236090868524904221483780423221265352794066364321977056316193" + "2290871933457999804070473188593715855710063276080601930566799221618951389023450857711029880846747347949781" + "2669476714657911404988980189023000184091924273752038001295416199133536687913336770565773056104716911264461" + "1788011278170299217145724065948735254510907592500616061752976888536427415063374341194168250819599742158320" + "9938081931051790754684746409238795346003455632343306647438655959229430469027013248365025737108296595578764" + "7407936595401532068399171576742411085999112194422003270469263863796327947061737707383862021365045804873264" + "43449802582108532078564167022705078125"}, + {0x1.2fe740d15c5e4p-940, chars_format::fixed, 990, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000127731959140294048399971213650198466" + "7801236065235048806444537810208068087817829275181212790228225665073254762457032074167125945963486726250164" + "5989542519919320622366927457459078161527979255825282039797351596484203705160087167691063167302504868459367" + "0358363569459857499212684675938886509698800860291252986818533610029910805537195256577905625480446255138948" + "0809263139877181540239827869316534678386403409720339026305076449997313311765579574003533288958339344621641" + "2621528964884123281468415155495052660942536454564580301495844985838838783306155517883113766155698014616431" + "5857620275225327679372535464703713121045423643509346575233415996862647404985643869421282773361209076680433" + "671668879469507373869419097900390625"}, + {0x1.74c88e0ca098dp-939, chars_format::fixed, 991, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000313365146838093358236420140569051658" + "1105746242498610056637907764625652226456555415141340665125388584830097774288102121532719018587676854488355" + "8080957255704946859709991306677005528969850666401961583903847553471053557951376835124917962926402863407844" + "0782650426136011666899880669292032641069797008147055331195674216356529194889190303458344714494976340157737" + "3388034436986851036531041736832716725000154529591297240790424338568500905683261889088144262991753471099460" + "7816878481325675283258182823175059279889191049771765351259820925621261521633325461482705778771219598075628" + "2970173089471656319768645768979387137939224792870912024630374449872138538705829858684663810842954830785528" + "3528766676681698299944400787353515625"}, + {0x1.130f11f4ae551p-938, chars_format::fixed, 990, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000462433994807609866517580488595918986" + "7025753248155197523423615068565730024182113965787802278458523387479124049634922415502894962122620968309353" + "5050836368468052738058620716115451967228395173777493981148346272808344417774287830298267236076066569792734" + "5299505713900835962755400093518703015995713998485526808524102156727174234319548762303636435070446231952899" + "4542283472195164243165427286927827946326324892850537364653645448662928503889332720476917768510116269567142" + "5571429733166776144466203775852323954452079649806265803567176251405339625463526249899619311109025885887582" + "8290937401954327799156713208214777486490812857965856234239104338246085766373351339663978363866896439428322" + "285181138795451261103153228759765625"}, + {0x1.08835fa35800dp-937, chars_format::fixed, 989, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000889408777274034134780544224695515853" + "6136060213214647927655374856057226385535490010817438841387381081057086944476526633185508976830686400273575" + "1381507354730705652023270837347542895198593808692096538170536285629315523725974057943684291775593972874826" + "3606487973520290702671781992419585307527883185118989695926077961368172495071415355856212507116014004141258" + "8933795776394239933049382324414558667115560425786369347695780938584808156024325242043096442949805033001474" + "1952395889951805410266142717798261498669781716279885903817870706702927436667659924741720411154519844673449" + "5368313840004517004090879092343656929377043071000965025412724132842422519637004160953715876831044426578665" + "17407683204510249197483062744140625"}, + {0x1.6431e220a8c23p-936, chars_format::fixed, 988, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000002395365208372751238892607141173665109" + "4684359629139545046331701056101374156295569337074287726281108064839092019722035425712564337078891872125343" + "0411000497833026470918438064748906303836803667779264399037996493294682779907053959099205417888156319550884" + "2237166002254838778941432287913764333677699977715082668936870273420684163788956494132784941796958079886598" + "5391354437385154150217050073066367310703953519083722746947699236233991091448525170238716635753128040232958" + "0119848376247994125192476520054069021178244018175790204834170600687522006128029219949642817963680824424492" + "5634931880191201392142822061160051761870987672004337971307673840421985840397795630413921011169278967728457" + "6299598484183661639690399169921875"}, + {0x1.17acfc1134894p-935, chars_format::fixed, 985, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000003761567466326268181885589810634065238" + "4824488135624420876733253077105060946198861732627493193519901047247753085151645061052614831077461787550378" + "9522940191314377583805558176016959667319286171660282631959695917660262794816160089358584110296226747197056" + "6960719972616815524052330290448761157948723719283892809603393480152922696382181832677174415906569718026635" + "1038889725789977121282586495071803503310337622258942765229731736751373980228545367332367240256732267829774" + "0121435959673931330218239056618465199032675986831449764985280751644590105107163390076822957129219367665806" + "9223654709451072516761075679530496081880163478624608778936598616058103897515476300014760931806571259139460" + "0394778535701334476470947265625"}, + {0x1.e09c9bcb32e3ap-934, chars_format::fixed, 985, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000012928212167160485647289050725920773987" + "4861836069414361195057298546848250710618797414084049769873325428052026475209722120894427905829017312531660" + "8241091852576254939741247469188715203775512048686032331388554335463507137482116585173531717089284209974439" + "7570948154763130326339872466574662174240822879049800497992851730923604321033958606419596582626473030678859" + "2310470685037034319253555665752608782580961488429909489306613884615945556331126875486164601415077624257882" + "8743675690174930134321675660770445691242995363409492941734509374221242410848684155513238368365796187170024" + "7355603717069267105273160141024636245841030542167997538884894269542306738988346319099212738837432340455180" + "2241257973946630954742431640625"}, + {0x1.a1dbb96340c68p-933, chars_format::fixed, 982, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000022480352182123752808136544940388978663" + "4144528684028071721643530480871593182406991088523084109355277990423722607479167570828666405584023758943395" + "4496235477862650604747190007974927829366839200588582579987175828223675779905454921856840712616925561352311" + "5547617808223210507047507148357936450312818091317344650050542591031620770295421779702653225582120691078585" + "4698054868524203836021409630916609905079528396656843124885091925936276146801902962301794667900084167998719" + "4819323902334663004063391308353045399311591450091720421895257829681349889384996716260685606079478830353867" + "9715429772009000419656042999365911389032791895112255167192881093383147665222748531606285313667187297781424" + "6041816659271717071533203125"}, + {0x1.2535112b05fa2p-932, chars_format::fixed, 983, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000031548509399420712639272059276400333316" + "8825472939840263152474766394932559633481401213456905267591366748121685127366607186078984663434814626878761" + "9467435913531988781855562027128524486327361877858088502218796529494172466935302619475876494375304284254242" + "0848624400193571676128166369626251295790577666448960494078709554649747335787221346083512058193881301726918" + "5088133887540329540019387686130807401092927971033628483700107282777002447037363112380936616653230090833282" + "0911765805302593218419194473373446779984095803500262917305487147202453464907595976076416622159108849254870" + "5940688817477117458589834121878781888972966233973065609238942277426176631314113665574377210311721175806098" + "92684151418507099151611328125"}, + {0x1.1a21c468e4a6ap-931, chars_format::fixed, 982, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000060713639849830441431950666885186177075" + "2265151539926629076264973010953983907324466041869432033823459140388847323282265478315251107842926851637284" + "9444737215222562106656325116914278231437352250881778177828512586041058802465427960568227820236551669931647" + "5797663852975205091841100466670249174658035281767126538276048546906760539717394672162140625498504576723310" + "4233430770581482344127010001310021576891807049979818732256016778786725558225608403941078353606559612621001" + "9437108179199837557454769415343201152373557052801749437569865055616521642323629981253371080878813132722433" + "0521397445681333604743523119231158470360150086598845118086029335889054054948984672371006994246595001030186" + "7223461158573627471923828125"}, + {0x1.fd135d461e64ap-930, chars_format::fixed, 981, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000219102021651833679610311447343290174632" + "2697938270186945371351301396824908535678593228801202439354195354555298866455116158899738801666640075186148" + "0211382559080287549242030557441693683989270686073119230933376584897099084395850837189027078871895526684485" + "9388924973520421799665881564677217995557182337483349755159195630924015413291549658379384389715545475874182" + "2546081513346145952348420009435809153123845362687245912248059666995383487273354828366695696929216032838347" + "2255495913136209316417452869260914810433493047388543891888355256159483630086322246642386624637846863322420" + "8467617370793215969921003844152689072025202975141367168786824130511190159598977575695967511849870934526052" + "224100567400455474853515625"}, + {0x1.f7d9a435e9332p-929, chars_format::fixed, 980, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000433706034922139992466051098635625789226" + "9790420502347908835422511841116263760317988870371022660947524084318977783088056734831661091131387005107336" + "7080032178622864429629631048087660131822766002732317441095996295232310734747433463008938028163941940376604" + "9209923654610719272401703006216476733737770057412870788266332106008639686989965213527408698164509196717565" + "9794850779480003111895553824321087854495212577457398595402036090648629548430689644857400023575624192252226" + "1811735236070993937319671767831428324962582529487566901130462056303559336906455268177393727945943885724685" + "2906755824249947746316595754138291586086719495135961042977343346868076566523814309925662297331983019432755" + "09984232485294342041015625"}, + {0x1.94c659bdb66cbp-928, chars_format::fixed, 980, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000696847157286931851289587852746449088974" + "5995933947468338899191644265737622764483380773896231028946301101354121009652116589677772323678127928668665" + "4271207663828960684445858789294767590557697945098533365090822545423512585568031129764104327698074634036050" + "9781859315959933671560688119265086307580742652851690725868508539049375890529951116534350607480891045678054" + "3266574359886133871760507672067140680759980765754218311821351038664767580912988223632453672861098702524281" + "6226651671930502546972496938930139886801587107972624994517314961726258337370823753574631904982305230128135" + "5599149532686969653008374807340759937762749905790290559785069252920339099874079061665087904062221291212608" + "77582244575023651123046875"}, + {0x1.abe769fc688c7p-927, chars_format::fixed, 979, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000001473331115243778954022705309267832346033" + "2933852257475188822441222074344436589917689823247953665290710696624690991611809635867231547228216053927389" + "4339479994193169330520625936397519235918130249340730882903493307621089561285278036673153849935054504996697" + "5086920227034460151662663011478742176698549702779007271900180889286549079717732243991835014506304637584929" + "4907349943601734582058091677850466600549179567598052592528981026904494706085683657881489962319474536509309" + "5429477087602427196556222424895294076578456413124521507596172456938825133112973006220848381319370353828574" + "4927685484325243111761550184614450373063948573745792548306864820340006938921712751183995104148349852835053" + "7526421248912811279296875"}, + {0x1.825701170d480p-926, chars_format::fixed, 971, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000002660440609494829928484002331288915189504" + "5655703225518408579970423545100011582978514470567087920738321442927530728543237114459190980071924595778114" + "1729612931668439653482875327754820963954270428962349149199726835698118459273524586492199972709272264358328" + "5720404162313925726900614240612356134419032262428558843961823391328706420533704796826237834901399536182326" + "8143063235754023395627339613127590917817943514492812352700718204492686590850424955549214973042837434213790" + "0767838918385014099377896161172321732594458974432078343771471436203756019462135832472960533663250357058140" + "0682087260645108688451326585554293824380869245358022373059672081904528410332819903308387843310356402071192" + "86060333251953125"}, + {0x1.9cb40ebe2177ep-925, chars_format::fixed, 976, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000005683973436284207079660842335896376252194" + "2847688739811715193332262874402507007578228137833409228851937575142988133388681897276244108465150313548284" + "1878157912998491023471197153193567938330820279182603747487685157804449914335965648740881215808800101491734" + "4439759287983216092513910053323400256593370050435002396967994998634783117425379138768137945449509233036530" + "5712925878132005668316354328176029389998813412358306819750991589464158840440187540370845417980702155638277" + "2917776316285266398822892936165695523171539159535919943189320603911105750651160880217314777880620536885634" + "9281475078098721211793053402011838737841041885975679740409233160578292466907040308922351851128595967566070" + "6125199794769287109375"}, + {0x1.ff8156df08505p-924, chars_format::fixed, 976, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000014089452631685326968433243074109517968005" + "8969564052435377386295567255430891923404569767456183925094563844213295122043611679935471391755079980979501" + "8719440525549860095877107153938102269771088019922306110582111291089485525691899073270714769067531770667572" + "6019575953681928890031055092123983880559931602395425034948350672283245379563818248188577432178069785517522" + "1447135604212500292255605581080737160756336541704916605654622573208077336936537681601495287937831361476225" + "0320189168592153831708552861404319266303334058222258097550864258413403531304832809177251851959422421163575" + "9045690707125067558519111608183423177759692836152771907530648000864265464886793313280689138311529973179858" + "6435616016387939453125"}, + {0x1.9d0f772cf5efcp-923, chars_format::fixed, 973, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000022755564362864926940281773480518310790479" + "8614676370506960981914851328415362342551959688942020547681275943405052471207178431622061755181896773453067" + "7723524447242629222196714464872261421188963595703786682352290957981166316968715768476878377717323676558275" + "9131106254964171713321790287640682417421292875693304779895386407223078981110638172143427694907604433837129" + "0870631124853148741448273362510869730859167323400369922515612597339675515620741030786110317330091445693562" + "5284855820286878817858969041925138420559706752255422532368290832023599170155833556378582588541054835832258" + "9287812185295540933143319689919401128285303281244301083049743762773094540510748328820261887628362273972015" + "8278942108154296875"}, + {0x1.5ae0a07bccfb6p-922, chars_format::fixed, 973, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000038219068582864352723967747931343616562165" + "7209781173761641840447788828198561093401360596513533007600193800457963875686854151814858111036445511242704" + "7709344441376665355487764145628079260448302287193681816195721958963465354214067102619271776398409728111334" + "6747297605374296427402200943004967162985193289030024297703283006041946617762562693335543494641811348659320" + "0998002484261631559385150974748579850886791518129421085948180303284306883294509926394689017938918992450263" + "0828684452168306954205031632460329887918486232328363814288573154176463928935563277762910223655851384736110" + "7142384002380822110267075736952889482918966077710436454866899431747659736574605283173505787530643829086329" + "7879695892333984375"}, + {0x1.6fb881d919007p-921, chars_format::fixed, 973, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000081031176278644846070191626517872180531833" + "1135326132318795500180952292783697914667643762630124008413474467884537069420798897444792340459678011732950" + "4730189740041425982303724639847802831823323803632388446800551741044882685402671409590390401829607859501011" + "8323094533029921605002661903680399808172575284741822476914983302354021964279286190987699675882237711813507" + "5109536171233688494942452416618125742680387879907346830121637034403253494540299453377386417370013446614658" + "5718226406710130532428411831937706120600181335992994193865678352422302987448586734996718282943690713535168" + "1811535139582919792094206822722769688324053871886960073948088158553433739716296755044994126748747476085554" + "8083782196044921875"}, + {0x1.9fca25adf211cp-920, chars_format::fixed, 970, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000183247342542790288693877843728514480478608" + "2325832375061113482101690797286266586294867945954372905818531402941092342910125905372135803452206403364874" + "4249562007607394347490512882057084425496728977149108482082998231691030369572059138763766664598935032230521" + "7308929663141958352882771737400001547440233507938666437442632719015553489697543558934242681927575376884558" + "4435883886178808128569655382229457502908034012259240062189848521009805863770517872740795257317589786558096" + "1925245053824582404468293436544414244144371350546560694236426149333233363964997770950219573720159471661810" + "8410253542270998588555667778049553659906796661021669572029079800552423015550776354970485826356707548256963" + "4914398193359375"}, + {0x1.3567868a935e6p-919, chars_format::fixed, 970, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000272722205453175178688891579653376960252745" + "0842088929858871118159521370404337824879190994854038061643561159339103362125367673189880817810703976647945" + "6005594396858473757810534511171289815905416613152798741147221740178663478005676337635527073145403417312194" + "8123562161113050777550986478978526638351015030754501556153103570961851853514223016295930188700358435622891" + "2327582537870139843038204744666191730945069746273591847403191866223408504411485305382847908319671602904529" + "6834147370872045913912150003826370272527369018138082705703206012595329748274965798141023735242043688601936" + "9311322760748320147266706397833688866201892620311123569696025528473697359587650090179122841504977259319275" + "6175994873046875"}, + {0x1.bf28dd0f45ec0p-918, chars_format::fixed, 964, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000788291051502821790843992383709116421149836" + "9045702899188062518103364864188409315336136915242577447392215731577741539262476980101322752505084581018100" + "1225151774240969062413079581855748401286232126223535726941159956859139325024899311289235621704445799561373" + "4916857591820436578956704895859640879051290051584315035693850857881717419907691548467810618884097388311818" + "9313794396946312462030987453218823755018816819599892055694230286747924272367378510090522287033623889106823" + "2565002011363556756912554913016457825304880622105831205885823366792145339675906183530776971838811618905776" + "9600273940040399470882928524666276933882336178786390647141652089006581729645900535885516546841245144605636" + "5966796875"}, + {0x1.a393be0039498p-917, chars_format::fixed, 966, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000001479332526434951960922418908717277866062855" + "0715159699314589946835960775139104114196387124361744349388346423526249997529063816286588004877609496510635" + "4069497400210979615410318388465977151507798144171315330304323435988597563095458242572885229747942207781481" + "3539875382686759895441332139770602381357809077363620286647587905672519662153366756951425520262031148039690" + "8342237186203988319154990018200960799763004452095958354279543752826246109554840754022410900257769037244635" + "9884979680520216781761547575060963446756203043820334004229099108480214648053579449883572170130099202247949" + "4296931692114542127887432405933594739009899021351204586356951492886187572435401083037476155368494801223278" + "045654296875"}, + {0x1.3a8c0984bac67p-916, chars_format::fixed, 968, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000002218041062043022551789865707997330466613698" + "1289307679736753455928805959725081462934224670303724159485938268882871438022974238697141104193414482484553" + "0951396830281289648621278119877048709460244734297439979032457124421091010172224292015433663000608699123566" + "9508210185826348819618229937866676364296126489105865139605828360204845989995639472723758780395825659604068" + "9177850038369317144434041219912680004534927123313725716843926392914184693322765428244423296707499699242123" + "9352155928725744678815679120998085146002248164874856671200987562541287503365874233851326456361436674758684" + "5781134774124232829708849899521351684572920654027513944639970411744444322331903593492619108928920468315482" + "13958740234375"}, + {0x1.938106b73c776p-915, chars_format::fixed, 966, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000005690649743658697916832400938454858803658909" + "5543759130627636379562863411660649404239561145787562444857179638324291687916940100137337435741474876016235" + "0056495718058588423534096485487067553165909715657381402971404442246809475670690107408298781667462547191916" + "2817470744562403850861742638326686838831329543166906530868544059489814971840999590469409567034147242064431" + "6999405402196876112361507834250398148271011353848871090482305740770992731270378503731024908696903489732478" + "7955384440730093355487897020162730857189426818122829178924268502347882813178373493124918620628860025715615" + "2529666027885484652021194383320420661247802440895124858403164728133943685880850871239289290315355174243450" + "164794921875"}, + {0x1.f4a40cb3650bbp-914, chars_format::fixed, 966, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000014121156100358157296664884403439661646302276" + "3650784856871320010353040705077207668546950355581578583044505766940217400099355023661276743227694506565541" + "1498903855245839961288253008194637438398510127910850318126637809078113983498722820987671412284313866751671" + "6498672025438150812379965713453291240027473524507082740212010339249382671053582408053415675489886917683768" + "2567321817374385812537835559417946028789607212568576973910770764877147702942096611971251748274003472604976" + "6095385206250185385743288799780370985907194496369531038498334418749823932561430082471354799282769696040754" + "8732438073482001097018337599177892638186130742755069952437588982806943523648328386865813399708713404834270" + "477294921875"}, + {0x1.d90c9ff0ea8b9p-913, chars_format::fixed, 965, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000026685811370633676469151456124462933808944608" + "6679562287777776698876674681021413432252249735738226278585206628706394471551392518714620362982432694174419" + "5066837887234876955300930867092729468480811200274130651215744786557772150087296243176647496252440476244799" + "6249762902390207940964665701907211440315524100628209894341216678829969777457299984096586701156978531800501" + "2698958062884482095994760870515369048323272748656907984060140419242923626411226561350556759451418729720362" + "3647085223188576757317263211392808734393069882455181660848545444617167500172223520590496019958399406193343" + "1307294414013184518821775633960829937443323245504876620948805489343819559141038344485252764570759609341621" + "39892578125"}, + {0x1.9dda5bbec739ap-912, chars_format::fixed, 963, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000046692815012344966698882844875437366789005901" + "1889759344171317627022843286418622584881256584554850146178922587849067391433971807460553436148881053030070" + "5802861083564184201184169691435145287114258821082648574406529482949951797469318976010031015211593519685235" + "6143504992080056552460511205575879046219713889536617551984999570757281730469581796681608340143307523472370" + "9158340884914908030521084546247013987864207024521100899305768953323642622737252465685844839888300778476275" + "2504690325209332410674159217406970196845448542387095959055345603004485318890117726846497855781173320368657" + "2008119029809783592472501674085799890593727350192541377257601235072778330693898940495500937686301767826080" + "322265625"}, + {0x1.b3d55416fad60p-911, chars_format::fixed, 958, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000098345480986695514089618875926461208483325452" + "0187790203799630446960504329333498437153616827417615849080912491003925803323420285422299200257544927820640" + "3196974262922142565902846516873218036916144509441954617370831470053949450130019955123314130153815851209568" + "8296822542786671627563023447619196019952069872082177562245203012490168186679900137224439591161763561631529" + "3464515485572364258841282031378610280969479425754178210176017601378479729168995921054485337026942189492031" + "3278249974575095799520464824210431965227917885444240882396069195834232249409883053072784499831730816048858" + "9740516018599266395959212880525154717874306312317000128018615880641766641145906646670482587069272994995117" + "1875"}, + {0x1.9c252fe78c1bbp-910, chars_format::fixed, 962, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000186000577347183717148252735186349783543584306" + "5226252667540223733159853584429545480842165284796862395516622946505738661111515527860596046535739252667433" + "9619943279155954767042619458245257620539041021467753483618439745555366084496635416052029194375312273988339" + "5953459054698089295160136809941277375021138664370821656468798686147055957476482942394485517741175774489743" + "1022543324456960570281971353204529907162058888376007918463781982884240607983616391110433956964751638884396" + "6487172883723044175491157768319562372459142820052551651952238436737166908742319553970321228193470244524980" + "1875002540042561304717037307821249843975582809304959019825510367065010295870020051722804055316373705863952" + "63671875"}, + {0x1.37854269a312fp-909, chars_format::fixed, 961, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000281177567563084318100457074184575497197106100" + "0084980110558541339231221112326541290736699617979395977326231025284075045635632891833639494133197161881204" + "6224504398038089804797566696194054852793649425216579228222727097510217509956305478758508297871221479989962" + "5873322057108782555733233200558807587860440057235205744430425661156658048746929392101714509199616555779854" + "2355615838210352261328359536538279552301352677428931245555964648511872460375830460315773282037723059187498" + "4672331036141828396945225593282927606498435385624529841926408136591221683870594888395821882623786633550811" + "6641258134880120437857623554086012486429244012594048633043725631207559578078614137552904139738529920578002" + "9296875"}, + {0x1.5b68fa4ac2b42p-908, chars_format::fixed, 959, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000627142702954425046034352511101324091475346679" + "7573592625786027826229961270121367161220735064190560294766189444944164164163537272678618355342497912064256" + "5704889212978977236562387447175181719200715273710035345801602255620534196942143774417246687690254364028350" + "9152678828149245572170407760251902661012787036911831314203148098975334506109492493114566823642125222173406" + "7473178795384718700740529819486819550341451155693941748487731802872607782124208196306724517738148599429059" + "2771400812981009664297374096007549529645405830495946914994899100197867617957946223662087156345100226206663" + "9104230829079096834618705866985638583219205247604259687488006991159779704436694203195656882598996162414550" + "78125"}, + {0x1.1bee12d355aadp-907, chars_format::fixed, 959, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000001025097587133360141028521310018323277453847368" + "5218055938897189096735340237340018400725666682494033072536608452334448790215856221307378430596060981382469" + "4625419037109496021095951526904178029433537609825161518260979461178337955140116397414686445832946718544316" + "2645279912920460025736906612085102498298245991228083818940277514836313880638017043345915398115813272728370" + "1179492276737893371060445823347383802426142678436476115955450138058270748161861808671057012019317372254774" + "7612927374090450924298878319085773548224441762980740444341131886157030691777931721396978119099548556496285" + "1095177735122684967750904878926948300062887536858489633614618245137590016313744456510903546586632728576660" + "15625"}, + {0x1.5dbb3bf725a55p-906, chars_format::fixed, 958, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000002525332508033293512228949556612784654893447598" + "7700357144674961351479357467092094630453535541284919659245903800349407085632973490108353504676078653305638" + "8680476864446948292312458125217671960943795156782787115386651848999561226033209730510837407818150760317463" + "2534081548073471396342504983710412240194257585234633491428220431741047571003901582159610243573383026547491" + "1659400368786801131458888124352482480324532223906317300645196650798384111356497633385763926314710642986472" + "2263664851030405649181367011150329531668521843720200537028123097483060203056706819706736255855306948167124" + "6793360301294886083514645802904351128554253419272228806760314434771714370286943562859960366040468215942382" + "8125"}, + {0x1.deb564bfc9b39p-905, chars_format::fixed, 957, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000006913296125147657892922290453005227362836355244" + "3315557555004747661057069612999210997894255772698684551025199124351522536488288269888962458462802724946749" + "2666941103078711591669709456393002977814548674714031442490579187323502483842326834538282021757452558716419" + "4948220489599485554712874650998509771058740523491301689686432317931766517872342221321618438402281239738438" + "1918414301497856335169286849906525371490446315447355139287718496849222455179777434039582883600813461913264" + "0683002736269625867150029972744613412338525800662983389755954407496066156925443484441684969664361113623048" + "0746804569554606627570565749735444390099046341993234153112576404723484124748011936389957554638385772705078" + "125"}, + {0x1.5179ff1b0d531p-904, chars_format::fixed, 956, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000009747372287629775385909424316703891833573247564" + "8235279596858447770771804886894929506661512363400799235132329961109412782244052135199979147620902244163877" + "9626597351701245970013572675145669042456116850923505846902122101954391035044684055589640864082184396140022" + "0187736393637951646466301575756491015220368431665646131851050972773613550549775860949100748531330715019423" + "1963853639010109636728185073120919295228223264260018917015441561102712444279374287475396552967106691035119" + "1453495845396281368093624689695699465834057840582376163654013374792705789260527711530436179193315127652734" + "8358808702693259272579380945576312699683565750443374991247958918786156723434999094024533405900001525878906" + "25"}, + {0x1.5567a7e8b22acp-903, chars_format::fixed, 953, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000019721670909138485406708209875245988754855499584" + "3593801435382496634863181333354250488013601769333154658301020938111316690961968819801684276456747470648078" + "4460925731369740039309091313646494344106771917559643744611689449985149741847522870512655148231642390548825" + "4596546181359984630593149398458548638623788384301779196054568577661945071167810995560010331333745976303201" + "2643595551046517388510084614608233716254602267850305675356162650233030360899161133192808264578667329162878" + "4708737722477047743341614476681740665615870417264687557758802755495463473945116677959704440051349739279053" + "89687889706272452193245281982712102143805928570275023188204872089807073720635344216134399175643920898437" + "5"}, + {0x1.82d26b4d40ec6p-902, chars_format::fixed, 953, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000044690483726796048912736648731122955257354188196" + "0242319865883123307422572380214566349088266541272348399162694465100758770795918495191617148046111636565021" + "9844543013087712957676283665264577527662267741361571586772049777232414728237847783800185819300150695494868" + "2653999899843034181869139363871037782958467075585876988989744537743159905346990806740300898994948523687536" + "7828209803100829565629765163934287231863692549726979176395237517451055069267609733839616408831778853430757" + "8954035491246101013689948210955350821596365451655673397438311473563149126607326293087358055222847103895464" + "44222168239476217622026150424150094836999566430914876899155427272120055803839022701140493154525756835937" + "5"}, + {0x1.b9adb0b3a270ep-901, chars_format::fixed, 952, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000102056384451920745406860391496194921660362213036" + "5562288058257422369971885119195604032070972015707144596472334283003344969574819842726371410401166526430641" + "0929900200071491252672235000950484652288750093774229945977709420122440502247379632346325992236983886493821" + "1391539205077023662214501398790628925066797744001656546577727861247458245657168760908913580691963130607977" + "6803215097870129800335260946331259196166059113373568611705869136348407003151491682756842641906922895435050" + "4391013909737089907168100664000924621669067051506853028575970448374045400888697082103359003015536916044411" + "79068784764324781639073532912521042956144573308772953464440883496189282908517270698212087154388427734375"}, + {0x1.51754b041523bp-900, chars_format::fixed, 952, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000155949465914581444168158192054680861671598436644" + "2620364478829976811035089889563564047368317717978748493547107618900970773911702439074983599285664500289449" + "0099878123620323093655056835613818532634226074494779795904480899802150737568260925897170351407616991870097" + "6802279957856393292653995941968958393707777122490398288305066037545153525183704267307195036904186159899450" + "2394042224648739892050532127005297477317011060627275918383352054171181466701597646454049096032781767016048" + "2974319858048441249248666379883400328177436639034736816575953623392316883651494465986730547978520346652340" + "88747269980370542955955889926977401007116018807400721172485495540083189069946456584148108959197998046875"}, + {0x1.00a667d829ba4p-899, chars_format::fixed, 949, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000237211226291945636889926959610225919727009657699" + "6496202397961351883127358688939107282331299624534155208390877862968305992335609703366546415633283533678270" + "6119375033905584915207671447399368427797827278265677967865192480932785233809461823871812702241616934713059" + "6071680179608635040182094153029361012433988509937012245563392134807731665037384537298367234779762339214326" + "8249901056594934855686217622990248877923391269195571001807761624217336055192512549943990505216069472298347" + "0390100134337335399195570019598788119671177825761130537287707783157679110738395099384763372686340200825394" + "41903467893818834311806047336796227578822931941039658316800094184362279747801949270069599151611328125"}, + {0x1.2c4d42a513cc0p-898, chars_format::fixed, 944, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000555113591928415468862717082533166226808384500851" + "4417554841019502743301366429368819546119006284763004333001348277225050221860684150032510350617852415448793" + "2917435582912849238042093194887283396639502932028323910651284002746030998913494560860794895072024297806097" + "1029142766066034974054612763882077645998211141669478955213198112932980574245986888148912541052644921915234" + "5004917839581742185059741768986228887671664675393120074838168629509013042697933604905361403885064909007008" + "1828290680696185622583742529430720402081186991071596341524139197492696468962732382079303814473378818485302" + "511034413288084890890452684852818540143093357096495846052242040258306587929837405681610107421875"}, + {0x1.225c4c3c8232cp-897, chars_format::fixed, 947, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000001073473967444629802420724822979097421269020692973" + "8748612035688298132431930940767808978781611808395357190463149503662940609545550797429425138405559672522900" + "6339887006543979219474079905078476701423633851365003304096553358163726469933016105370060494017301219802989" + "3482448464528100444472938931188041028209567758949481905183049001531134922860872368400958134235712133547181" + "2569531901439452988004676219145306228626404952817818807907754264843610519108607195980800602836302109764033" + "4464264306889872584610305498775551918545763871034864670939169778489835723700551452954573645827010966358712" + "257418750698937467561024473055937316696854724845682348285079432681499156387872062623500823974609375"}, + {0x1.49f96e8fc3b39p-896, chars_format::fixed, 948, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000002439855426270266744439814801803809895247054421512" + "4227046286789042553768286136848758427981512172714445409930115643233877845863399498871974798169753440335024" + "2401988431098023618401338421499127747850118979962781370625158221841490672613693129416038541246919744044038" + "0909570572089389208878233063263470015565582345570048109359863968364681509387377493594037525854040800897109" + "1122482936133784909715421457345554809011396322005411855059916233822920918416811292732601739460526050660702" + "4809166145756193292992255504344399533818727388472020637202984183709925973193244385159211841241130746105986" + "2509222808177157336752523381613241275274954877922857555982462385291142936694086529314517974853515625"}, + {0x1.d02b819f5ea60p-895, chars_format::fixed, 942, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000006864215876463049547810788703539701409380640647873" + "9147400934802190758122966145509273130663656083449116193388822368564057256191430774573151546980833069733638" + "4232242413969293063536569077723416762396892707530258707424454546743892561221427588160133512763385429154354" + "9312798476681105264979340881027849188655526015371664367066319612937083186121677093486292468421698574372787" + "1460443148241127262602309896093569590960002026708618897030775910938683812388348909731662562903690820461225" + "3030886781498471111475701705130013263603331962648371224484283181824576820244771587634819709611329231223350" + "5987050190351763242747076189226988458164602331524196780765390002443382400088012218475341796875"}, + {0x1.9799ed1e92e60p-894, chars_format::fixed, 941, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000012055339469240307377403402594354358674407642465821" + "4403161853873665328348183768707944967517035919903205770271070113114076479488114135898545635834909792131037" + "9981065458509943305443712669457405347768334883742787788574210076011956356747276577674394094443595818534447" + "4992491153419986760843944863078761839695019053264472317921674817757806138643290162179595339950043670422343" + "4169274034194895415420453624725368318043357630277210489316956915292444618610846509129090912794604455025923" + "5072047006302106680667373755369200337798835481918186611848963048722354732914235674141422188511695223505091" + "651304612258808796215869856934551053015669443762235800432502941248458228074014186859130859375"}, + {0x1.01910e9dcf23fp-893, chars_format::fixed, 945, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000015235738192618518189936618594353198373490038933641" + "5111790903062676051820241330533383850487198054690809001545957303087100560223792006622980536966737234211755" + "4610115874265196595093653515066235057757408737321012747059302244480684314824553717385232770551514728255582" + "4436594037789840136673492380360921795469449312993203310861757505321077871877040854320771623366194214101040" + "9767355749589386637921051247047454063093657663296180147824771690982829988866222038776007404704345799976200" + "3493823707191982605843870742955753084896546013143923808806247650486965191635898381488272370659215232130706" + "3058388996553539467461706719877326145389249433603759474424588216123765960219316184520721435546875"}, + {0x1.55d13790babe3p-892, chars_format::fixed, 944, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000040438764974429647181083693278793666999589651788371" + "2316059693838777295245607266108475249394878935376323626898846861862368755886367916636298143998039008428394" + "6105355179120022459893093062023824545784393567834950735132918308903968711752955260187817332338525640497165" + "7502319380964581908082064284459113668849235010808935239541206093029385768713858239491000151225959463531583" + "5889637361803405730106505082375740159759460103926440144688165168171854738715370375794081116073467023962896" + "8287348096121485573700124978582031136456289932225609673950336664355143451919771945115113191166252509180553" + "149351063482548119983121858449386491438816394778188001261909345629419476608745753765106201171875"}, + {0x1.7188a97a16f94p-891, chars_format::fixed, 941, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000087435562511428746407917858121214372902879051776678" + "9817379763220476136106242826852095074666987781422882240275455082159625173427591657526511616774859950448070" + "5195051348020502345099156950992018891280747830850730319314819188183029263829944697648815507866941818927878" + "0582425665436323279405306313375550995403554057816311786992808924770387346666342826175687898745708869277309" + "8795098157293253829450151542285341405243742641265914881758531162780816922738713821526003173659290088391480" + "4697424808639350956260920901169849738081795310697365452593665854547305770395594226542202736076609270724296" + "938582309549515791111533078749081279345889490509807252804908017651541740633547306060791015625"}, + {0x1.3590ea1f17fdep-890, chars_format::fixed, 941, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000146493127491071126992490786122534662551391906108660" + "4893020723479984156700388998530701157329530892948055206250467791745632187137591881800959448706575506783553" + "3305293980845682189018765192358868026965459386012151443491814855009311650582277113439810642092690727961918" + "3829769355597934005735327479576848296626166074032572190516990701799180866601670181423706918604194268437864" + "7424132138357106197054181850987434271954643223838347525698626002419348990652336080238406606469810367043062" + "4632830507827378702090628737328382855053277277737615450423826030613135622402351902807691843748918648949908" + "080945278986968636934743829447731922043526141347861806163432873972851666621863842010498046875"}, + {0x1.a490bff22405bp-889, chars_format::fixed, 941, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000398040680032538019248823757194178125361186214721223" + "8841684360793753033502180071560424510118766755474701399549993774340528518781782521015393593943194136695829" + "2878516104741234323167088335311190521761676432545904666778288299887061291364677119632767625410961355927521" + "8876947258959706568599369475887957963067391294889917939846287343966886396643018338025708549019241895307789" + "6482673340235492057075596872283134858371284398948959714256144129887323486148624003771536424647219733725766" + "8040945002790876177020317646106961815493905556587976914374131310785391757041479031876978729052577052233157" + "724978255607703760411166929085715222687136653970780240940907646063351421616971492767333984375"}, + {0x1.c59bdc303397cp-888, chars_format::fixed, 938, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000858628666061551578620582213363458205748458803788786" + "1653476646133471193396760860140523709430528521295122472188112244145499998342419246971681850985483625015372" + "9001931401489917670794018753095678072632523527999732610094527055794991699011689812682020208999092432846374" + "9206066143375830463217600681424042168640928466759510908488147805264249237670584162817806918290258013605944" + "5292592764666886134366208157303804289513110088392566492734345663801695248299650254552073655270093165014095" + "3745238481264868345866657053099401639847225793582187014757929215746065651862973105294722461164856108604685" + "774535166379595213598040942354994072654807133241315619809341797008528374135494232177734375"}, + {0x1.b5cd6c8c1c28fp-887, chars_format::fixed, 939, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000001657418018730156027704299335942208423046539273378705" + "1007866897996899438544490745152444688834530645625295640123271066862185300846827639112830109790029239800333" + "6274182420225374479310694714219204498291060859779351667987674079151712854488592484033025216160648157535374" + "0949876187647749371234129360568830223801641060064222372386736263114524128290896008457829750171471791610570" + "6062353536412253151235023622382582131429436080455694095554769027101991142854931736085157727810031776394869" + "3937529484290614370922528247233871396511557553970893932497479312360218072120491695818497939306244437975388" + "8516263944185940942548772357521469280603746275395797560303634554657037369906902313232421875"}, + {0x1.dd323693a3332p-886, chars_format::fixed, 937, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000003613106834542996945113037331011560709929486413066981" + "3892800930118616243487082666684796081077226753480935212068872259503118509581066207485830029333326409179897" + "6751709329421719319329249471449113212585104216180364902090305245564247211421614493046873288168921343097379" + "1424810940744070365363417199107528165592848991563388371423989125478551859503141188515560705433960301135780" + "9855510923231449073199376203490368131774971870870529128925452259061106855564430654962589375807588265121141" + "1533144826878180312068875356012841418042267850727474063115262479538676565684223521209736564184271951929196" + "35507954677513543575460907844889158905506818431248305945047150089521892368793487548828125"}, + {0x1.86d3c9131605ep-885, chars_format::fixed, 936, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000005918324175176495510938976497671415587262060964341024" + "3773660851543979583503245329654584813732786527982073834052163642085272541799726161544741798141501688273444" + "8973389564189606166822481467349095902747600636497815870565594931401773022857017064655371943174559969975555" + "9963097604629279063754642229864212114707279675331717816844007259459221802237099864315723446537096700850512" + "4175029486015944278448019481201861981653551367410858983035952773046534667845276266870926697195576559022854" + "0631576870240350592327118633813432163334893809956910105818693405865461650690072606842357847977527034422011" + "2716254835138009906792965231941252390889503048020114928107204832485876977443695068359375"}, + {0x1.85911e81c4b3ep-884, chars_format::fixed, 935, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000011798475245572565258836463208928683635416019155375711" + "6368488357751653846078375633343585731394837217385287091120028390252414848147343275955457018828059343282834" + "0730621546381698761786831441274619355619496696270024173685557443459253842752241847183852027161270157839527" + "2910201485060611138969490229431541336037591665706625690345523867216992200844339835298032472528560480231572" + "0532675758147358190312305588395835973484510540261572242255926498453096842484137847010445108819535016652319" + "3344995494299949536543046660278432397946662893934648233129548468640073030619432252064931487614833495014858" + "781346346117845149269477579183027503827919826688563897931771862204186618328094482421875"}, + {0x1.fd3a7670dc2aep-883, chars_format::fixed, 934, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000030845119288706609241776127310550945770260699097294636" + "0902325553169062823977589756568024449658175724356488309154179460646805809256909673683564407525994808351915" + "6603246377068172169481286969315365287278018907572760857821998571184112154093996098113552610554410114972749" + "6544350787571443902508172513593663572408346095883337524472602522735858303857046884402733676415512137932791" + "9906700196084011500970718879296894750190780528244326958169030004334188899958031100736000503800060878357350" + "7149148045707056223577605654336669406379845891253511117578209700869532329366449360905532226889918970109979" + "92044067666407349229132534396534265265865464543393326124487430206499993801116943359375"}, + {0x1.55795032e6bd0p-882, chars_format::fixed, 930, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000041367697432326765352340817035182743358257354812683967" + "5514706183070775290299430288530880767625546394325091548046642335686562972830560848535832043202751676119898" + "4787279267283006731787236388821611791941976179801966223908838232485454712767866954880107986586331614093671" + "0381685947902023492945274763039123761201070325649322867198926794092379193979001160520283118740890457050606" + "5615283688529715886701601418737963348910052650002158795052277642750755249858943871277223658376131404786971" + "0974725490393066509945142112627335689540105433975437451964937117339719316717342057260783566644006824506803" + "9288577540523073152465291162006574964969847496565336086860042996704578399658203125"}, + {0x1.d4b623359ac05p-881, chars_format::fixed, 933, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000113563675624986191453102443856984735254272835648039024" + "7148093097331978873723151459297710811496506381505534558309773790241440886806822023647805957728246263626555" + "0762639865697663081700386660252071860545523437851473530877887418045599317762550258475151832404780769663129" + "0499577845888123194920903598141112160404527827884306169772685471839601638500173215919930934478212486692401" + "1933370531388442338358094661908139596342648995217761099977664396650272093960020341884435861220916521937924" + "7000575593977410565239358757046872960846732199088342182083021803693622257171081219637059364936918824579947" + "2649248541360921046913448446758900887079029619342041002028054208494722843170166015625"}, + {0x1.3fc14119b6b30p-880, chars_format::fixed, 928, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000154946245842527239759062495833753523032566543431810751" + "7130127590869403722238026359250431068983678010402175817581233673382519031060069659513380216030715235291169" + "4652169190757365849842534939286929512771800043392988501637567155216372107136851294950867489850497997102997" + "3977585420440071472851517003121055829161592054739521109927826093026025885683246499701674274453089753056309" + "7291977203548901120184100112729702315119501770992283784215283680031165586637831064539612758832139342286457" + "9273358450301548738879972068346188727141606086652040192570849472622893156172198796091642797668561579545981" + "04804131015062387788537884648628367603544198072285098533029668033123016357421875"}, + {0x1.387efea29f7d7p-879, chars_format::fixed, 931, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000302857553709510386816086836969056210337722783307285535" + "5220692967731775893727875231391193715089712768013783170035525245663579807030327581339575641841515558865022" + "3875058005326741563542885257754812854331178322417249486816148685850962107177043895514770489994015629591598" + "0115867375133595828507638520983393372274509660267810031430617209341027949678360520548931055162245588815504" + "1168642269270378241902705974557075324087799607548440887496138095190515484126289206547636858207838426948184" + "7128789237077851670168107860012530261251377841489594288815216057423550542572170135730446067870746425778304" + "11006902168840320052258179872988498243578485424887247745573404245078563690185546875"}, + {0x1.e65f23fe2db0dp-878, chars_format::fixed, 930, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000942740333348115037485284047572893847268067700326743274" + "0281813334184073733241175012142621582185336547439135572303877902850839331914579032892703455962702636721963" + "5439418242731552600088064997714165610578732713529973991554800638812125247404950314573296644157844600155364" + "1354214491814492098227905347273644812896843414825439878882772310022109935207503865014021224756207477741113" + "4643948266030983658278327971341011673659661946388286738125049216155470349506228879832318739988654166524681" + "4447842162631883718367857800178745276287675211435150083921296137407835066159264367886538838166434182939838" + "2732535579059561940117511215852170831865260158810571056164917536079883575439453125"}, + {0x1.be0d3381db145p-877, chars_format::fixed, 929, + "0." + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000001729174836691516980553517336131169033606086325093753675" + "44191097917889406229280614779110818649291764846487